From 12d831a6fc27f22a50902f5a6fc56de06e244e0a Mon Sep 17 00:00:00 2001 From: Arbee4ever Date: Wed, 30 Mar 2022 17:32:45 +0200 Subject: [PATCH 1/6] ChestBoat test --- .../renderer/ChestBoatEntityRenderer.java | 21 +++++---------- .../entity/vehicle/ChestBoatEntity.java | 25 +++++++++++------- .../net/arbee/addola/item/ChestBoatItem.java | 2 -- .../assets/addola/textures/chestboat_item.png | Bin 0 -> 75656 bytes 4 files changed, 23 insertions(+), 25 deletions(-) create mode 100644 src/main/resources/assets/addola/textures/chestboat_item.png diff --git a/src/main/java/net/arbee/addola/entity/renderer/ChestBoatEntityRenderer.java b/src/main/java/net/arbee/addola/entity/renderer/ChestBoatEntityRenderer.java index f190529..44d7727 100644 --- a/src/main/java/net/arbee/addola/entity/renderer/ChestBoatEntityRenderer.java +++ b/src/main/java/net/arbee/addola/entity/renderer/ChestBoatEntityRenderer.java @@ -2,6 +2,7 @@ import net.arbee.addola.entity.vehicle.ChestBoatEntity; import net.minecraft.block.Block; +import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.OverlayTexture; @@ -18,8 +19,7 @@ import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Quaternion; - -import java.rmi.registry.Registry; +import net.minecraft.util.registry.Registry; public class ChestBoatEntityRenderer extends EntityRenderer { protected final BoatEntityModel model = new BoatEntityModel(); @@ -58,10 +58,12 @@ public void render(ChestBoatEntity chestBoatEntity, float f, float g, MatrixStac VertexConsumer vertexConsumer2 = vertexConsumerProvider.getBuffer(RenderLayer.getWaterMask()); this.model.getBottom().render(matrixStack, vertexConsumer2, i, OverlayTexture.DEFAULT_UV); } - matrixStack.scale(-0.9F, -0.9F, 0.9F); - matrixStack.translate(-0.1D, -0.15D, -0.5D); + matrixStack.scale(-0.8F, -0.8F, 0.8F); + matrixStack.translate(-0.0D, -0.05D, -0.5D); + + BlockState blockEntity = Registry.BLOCK.get(new Identifier(chestBoatEntity.getBlockEntity())).getDefaultState(); - MinecraftClient.getInstance().getBlockRenderManager().renderBlockAsEntity(Blocks.CHEST.getDefaultState(), matrixStack, vertexConsumerProvider, i, 0); + MinecraftClient.getInstance().getBlockRenderManager().renderBlockAsEntity(blockEntity, matrixStack, vertexConsumerProvider, i, OverlayTexture.DEFAULT_UV); matrixStack.pop(); super.render(chestBoatEntity, f, g, matrixStack, vertexConsumerProvider, i); @@ -71,13 +73,4 @@ public void render(ChestBoatEntity chestBoatEntity, float f, float g, MatrixStac public Identifier getTexture(ChestBoatEntity chestBoatEntity) { return TEXTURES[chestBoatEntity.getBoatType().ordinal()]; } - - protected Block readCustomDataFromTag(CompoundTag tag) { - if (tag.contains("Block", 8)) { - tag.getString("Block"); - return Blocks.CHEST; - } else { - return Blocks.CHEST; - } - } } \ No newline at end of file diff --git a/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java b/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java index 8b0443e..da5951f 100644 --- a/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java +++ b/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java @@ -5,6 +5,8 @@ import net.arbee.addola.network.SpawnChestBoatEntityPacketSender; import net.minecraft.block.Block; import net.minecraft.block.Blocks; +import net.minecraft.block.ChestBlock; +import net.minecraft.block.entity.LootableContainerBlockEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.data.DataTracker; @@ -20,8 +22,11 @@ import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.math.Vec3d; +import net.minecraft.util.registry.Registry; import net.minecraft.world.World; +import java.awt.*; + public class ChestBoatEntity extends BoatEntity { private static final TrackedData BLOCK_ENTITY; ChestBoatEntity instance = this; @@ -41,23 +46,24 @@ public ChestBoatEntity(World world, double x, double y, double z) { prevZ = z; } - public ChestBoatEntity(EntityType entityType, World world) { + public ChestBoatEntity(EntityType entityType, World world) { super(entityType, world); } @Override public ActionResult interact(PlayerEntity player, Hand hand) { - if (player.shouldCancelInteraction()) { - return ActionResult.PASS; - } else if (((BoatEntityAccess)instance).getTicksUnderwater() < 60.0F) { + if (((BoatEntityAccess)instance).getTicksUnderwater() < 60.0F) { if (!this.world.isClient) { /*block = Block.getBlockFromItem(player.getMainHandStack().getItem()); if(block.hasBlockEntity()) { player.getMainHandStack().decrement(1); }*/ - if (player.isSneaking()) { - new BoatEntity(this.world, this.getX(), this.getY(), this.getZ()); - return ActionResult.SUCCESS; + if (Registry.BLOCK.get(Registry.ITEM.getId(player.getMainHandStack().getItem())).hasBlockEntity()) { + if (player.isSneaking()) { + setBlockEntity(Registry.ITEM.getId(player.getMainHandStack().getItem()).toString()); + new BoatEntity(world, getX(), getY(), getZ()); + return ActionResult.SUCCESS; + } } return player.startRiding(this) ? ActionResult.CONSUME : ActionResult.PASS; } else { @@ -68,12 +74,13 @@ public ActionResult interact(PlayerEntity player, Hand hand) { } } + @Override protected void initDataTracker() { - this.dataTracker.startTracking(BLOCK_ENTITY, Blocks.CHEST.getName().getString()); + super.initDataTracker(); + this.dataTracker.startTracking(BLOCK_ENTITY, Registry.BLOCK.getId(Blocks.CHEST).toString()); } protected void writeCustomDataToTag(CompoundTag tag) { - System.out.print(getBlockEntity()); tag.putString("BlockEntity", getBlockEntity()); } diff --git a/src/main/java/net/arbee/addola/item/ChestBoatItem.java b/src/main/java/net/arbee/addola/item/ChestBoatItem.java index 1edb15d..8e3c84a 100644 --- a/src/main/java/net/arbee/addola/item/ChestBoatItem.java +++ b/src/main/java/net/arbee/addola/item/ChestBoatItem.java @@ -51,8 +51,6 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han if (hitResult.getType() == HitResult.Type.BLOCK) { ChestBoatEntity chestBoatEntity = new ChestBoatEntity(world, hitResult.getPos().x, hitResult.getPos().y, hitResult.getPos().z); - System.out.print(instance + "\n"); - System.out.print(((BoatItemAccess)instance).getType() + "\n"); chestBoatEntity.setBoatType(((BoatItemAccess)instance).getType()); chestBoatEntity.yaw = user.yaw; if (!world.isSpaceEmpty(chestBoatEntity, chestBoatEntity.getBoundingBox().expand(-0.1D))) { diff --git a/src/main/resources/assets/addola/textures/chestboat_item.png b/src/main/resources/assets/addola/textures/chestboat_item.png new file mode 100644 index 0000000000000000000000000000000000000000..9dcb0ebc86f06ed35c026537e90a21290dcb7d8c GIT binary patch literal 75656 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 Date: Sun, 10 Apr 2022 17:36:52 +0200 Subject: [PATCH 2/6] ChestBoat test --- src/main/java/net/arbee/addola/Addola.java | 17 +++++++-- .../java/net/arbee/addola/AddolaClient.java | 20 +++++++++- .../client/render/BoatItemRenderer.java | 30 +++++++++++++++ .../render}/ChestBoatEntityRenderer.java | 6 +-- .../client/render/ChestBoatItemRenderer.java | 30 +++++++++++++++ .../entity/vehicle/ChestBoatEntity.java | 31 ++++++++++------ .../net/arbee/addola/item/ChestBoatItem.java | 6 +++ .../arbee/addola/mixins/BoatEntityMixin.java | 35 ++++++++++++++++++ src/main/resources/addola.mixins.json | 1 + .../resources/assets/addola/lang/en_us.json | 3 +- .../addola/models/item/acacia_chestboat.json | 28 ++++++++++++++ .../addola/models/item/birch_chestboat.json | 28 ++++++++++++++ .../models/item/dark_oak_chestboat.json | 28 ++++++++++++++ .../addola/models/item/jungle_chestboat.json | 28 ++++++++++++++ .../addola/models/item/oak_chestboat.json | 28 ++++++++++++++ .../addola/models/item/spruce_chestboat.json | 28 ++++++++++++++ .../assets/addola/textures/chestboat_item.png | Bin 75656 -> 0 bytes .../minecraft/models/item/acacia_boat.json | 28 ++++++++++++++ .../minecraft/models/item/birch_boat.json | 28 ++++++++++++++ .../minecraft/models/item/dark_oak_boat.json | 28 ++++++++++++++ .../minecraft/models/item/jungle_boat.json | 28 ++++++++++++++ .../minecraft/models/item/oak_boat.json | 28 ++++++++++++++ .../minecraft/models/item/spruce_boat.json | 28 ++++++++++++++ .../tags/blocks/blocks_with_inventories.json | 10 +++++ 24 files changed, 503 insertions(+), 22 deletions(-) create mode 100644 src/main/java/net/arbee/addola/client/render/BoatItemRenderer.java rename src/main/java/net/arbee/addola/{entity/renderer => client/render}/ChestBoatEntityRenderer.java (95%) create mode 100644 src/main/java/net/arbee/addola/client/render/ChestBoatItemRenderer.java create mode 100644 src/main/java/net/arbee/addola/mixins/BoatEntityMixin.java create mode 100644 src/main/resources/assets/addola/models/item/acacia_chestboat.json create mode 100644 src/main/resources/assets/addola/models/item/birch_chestboat.json create mode 100644 src/main/resources/assets/addola/models/item/dark_oak_chestboat.json create mode 100644 src/main/resources/assets/addola/models/item/jungle_chestboat.json create mode 100644 src/main/resources/assets/addola/models/item/oak_chestboat.json create mode 100644 src/main/resources/assets/addola/models/item/spruce_chestboat.json delete mode 100644 src/main/resources/assets/addola/textures/chestboat_item.png create mode 100644 src/main/resources/assets/minecraft/models/item/acacia_boat.json create mode 100644 src/main/resources/assets/minecraft/models/item/birch_boat.json create mode 100644 src/main/resources/assets/minecraft/models/item/dark_oak_boat.json create mode 100644 src/main/resources/assets/minecraft/models/item/jungle_boat.json create mode 100644 src/main/resources/assets/minecraft/models/item/oak_boat.json create mode 100644 src/main/resources/assets/minecraft/models/item/spruce_boat.json create mode 100644 src/main/resources/data/addola/tags/blocks/blocks_with_inventories.json diff --git a/src/main/java/net/arbee/addola/Addola.java b/src/main/java/net/arbee/addola/Addola.java index 287593f..a192943 100644 --- a/src/main/java/net/arbee/addola/Addola.java +++ b/src/main/java/net/arbee/addola/Addola.java @@ -11,6 +11,7 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; import net.minecraft.entity.vehicle.BoatEntity; +import net.minecraft.item.BoatItem; import net.minecraft.item.ItemGroup; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -18,17 +19,27 @@ public class Addola implements ModInitializer { public static final String MOD_NAME = "Addola"; - public static final ChestBoatItem CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.OAK, new FabricItemSettings().group(ItemGroup.TRANSPORTATION)); + public static final ChestBoatItem OAK_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.OAK, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); + public static final ChestBoatItem JUNGLE_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.JUNGLE, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); + public static final ChestBoatItem ACACIA_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.ACACIA, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); + public static final ChestBoatItem DARKOAK_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.DARK_OAK, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); + public static final ChestBoatItem BIRCH_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.BIRCH, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); + public static final ChestBoatItem SPRUCE_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.SPRUCE, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); public static final EntityType CHESTBOAT = Registry.register( Registry.ENTITY_TYPE, - new Identifier("addola", "chestboat"), + new Identifier("addola", "oak_chestboat"), FabricEntityTypeBuilder.create(SpawnGroup.MISC, ChestBoatEntity::new).dimensions(EntityDimensions.fixed(1.375f, 0.5625f)).build() ); @Override public void onInitialize() { - Registry.register(Registry.ITEM, new Identifier("addola", "chestboat"), CHESTBOAT_ITEM); + Registry.register(Registry.ITEM, new Identifier("addola", "oak_chestboat"), OAK_CHESTBOAT_ITEM); + Registry.register(Registry.ITEM, new Identifier("addola", "jungle_chestboat"), JUNGLE_CHESTBOAT_ITEM); + Registry.register(Registry.ITEM, new Identifier("addola", "acacia_chestboat"), ACACIA_CHESTBOAT_ITEM); + Registry.register(Registry.ITEM, new Identifier("addola", "dark_oak_chestboat"), DARKOAK_CHESTBOAT_ITEM); + Registry.register(Registry.ITEM, new Identifier("addola", "birch_chestboat"), BIRCH_CHESTBOAT_ITEM); + Registry.register(Registry.ITEM, new Identifier("addola", "spruce_chestboat"), SPRUCE_CHESTBOAT_ITEM); Gamerules.setupGamerules(); Commands.setupCommands(); } diff --git a/src/main/java/net/arbee/addola/AddolaClient.java b/src/main/java/net/arbee/addola/AddolaClient.java index c097494..b682822 100644 --- a/src/main/java/net/arbee/addola/AddolaClient.java +++ b/src/main/java/net/arbee/addola/AddolaClient.java @@ -1,6 +1,8 @@ package net.arbee.addola; -import net.arbee.addola.entity.renderer.ChestBoatEntityRenderer; +import net.arbee.addola.client.render.BoatItemRenderer; +import net.arbee.addola.client.render.ChestBoatEntityRenderer; +import net.arbee.addola.client.render.ChestBoatItemRenderer; import net.arbee.addola.entity.vehicle.ChestBoatEntity; import net.arbee.addola.network.SpawnChestBoatEntityPacketSender; import net.fabricmc.api.ClientModInitializer; @@ -8,6 +10,15 @@ import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; +import net.minecraft.MinecraftVersion; +import net.minecraft.client.MinecraftClient; +import net.minecraft.item.BoatItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; import java.util.UUID; @@ -37,6 +48,13 @@ public void onInitializeClient() { client.execute(() -> client.world.addEntity(entityId, boat)); }); + BuiltinItemRendererRegistry.INSTANCE.register(Items.ACACIA_BOAT, new BoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(Items.OAK_BOAT, new BoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(Items.BIRCH_BOAT, new BoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(Items.DARK_OAK_BOAT, new BoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(Items.JUNGLE_BOAT, new BoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(Items.SPRUCE_BOAT, new BoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(Addola.OAK_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); EntityRendererRegistry.INSTANCE.register(Addola.CHESTBOAT, (dispatcher, context) -> new ChestBoatEntityRenderer(dispatcher)); } } diff --git a/src/main/java/net/arbee/addola/client/render/BoatItemRenderer.java b/src/main/java/net/arbee/addola/client/render/BoatItemRenderer.java new file mode 100644 index 0000000..0d75dc6 --- /dev/null +++ b/src/main/java/net/arbee/addola/client/render/BoatItemRenderer.java @@ -0,0 +1,30 @@ +package net.arbee.addola.client.render; + +import net.arbee.addola.mixins.BoatItemAccess; +import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.model.json.ModelTransformation.Mode; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.vehicle.BoatEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.registry.Registry; + + +public class BoatItemRenderer implements BuiltinItemRendererRegistry.DynamicItemRenderer { + public static BoatEntity DUMMY; + + @Override + public void render(ItemStack stack, Mode mode, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { + if ((DUMMY == null && MinecraftClient.getInstance().world != null) || MinecraftClient.getInstance().world != DUMMY.world) { + DUMMY = new BoatEntity(EntityType.BOAT, MinecraftClient.getInstance().world); + } + DUMMY.setBoatType(((BoatItemAccess)stack.getItem()).getType()); + EntityRenderer renderer = MinecraftClient.getInstance().getEntityRenderDispatcher().getRenderer(DUMMY); + matrices.translate(0.5, 0, 0.5); + renderer.render(DUMMY, DUMMY.getYaw(10), 0, matrices, vertexConsumers, light); + } + +} diff --git a/src/main/java/net/arbee/addola/entity/renderer/ChestBoatEntityRenderer.java b/src/main/java/net/arbee/addola/client/render/ChestBoatEntityRenderer.java similarity index 95% rename from src/main/java/net/arbee/addola/entity/renderer/ChestBoatEntityRenderer.java rename to src/main/java/net/arbee/addola/client/render/ChestBoatEntityRenderer.java index 44d7727..6e3b356 100644 --- a/src/main/java/net/arbee/addola/entity/renderer/ChestBoatEntityRenderer.java +++ b/src/main/java/net/arbee/addola/client/render/ChestBoatEntityRenderer.java @@ -1,9 +1,7 @@ -package net.arbee.addola.entity.renderer; +package net.arbee.addola.client.render; import net.arbee.addola.entity.vehicle.ChestBoatEntity; -import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; @@ -14,8 +12,6 @@ import net.minecraft.client.render.entity.model.BoatEntityModel; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.Vector3f; -import net.minecraft.entity.vehicle.BoatEntity; -import net.minecraft.nbt.CompoundTag; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Quaternion; diff --git a/src/main/java/net/arbee/addola/client/render/ChestBoatItemRenderer.java b/src/main/java/net/arbee/addola/client/render/ChestBoatItemRenderer.java new file mode 100644 index 0000000..4bb41f9 --- /dev/null +++ b/src/main/java/net/arbee/addola/client/render/ChestBoatItemRenderer.java @@ -0,0 +1,30 @@ +package net.arbee.addola.client.render; + +import net.arbee.addola.Addola; +import net.arbee.addola.entity.vehicle.ChestBoatEntity; +import net.arbee.addola.item.ChestBoatItem; +import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.model.json.ModelTransformation.Mode; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; + +public class ChestBoatItemRenderer implements BuiltinItemRendererRegistry.DynamicItemRenderer { + public static ChestBoatEntity DUMMY; + + @Override + public void render(ItemStack stack, Mode mode, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { + if ((DUMMY == null && MinecraftClient.getInstance().world != null) || MinecraftClient.getInstance().world != DUMMY.world) { + DUMMY = new ChestBoatEntity(Addola.CHESTBOAT, MinecraftClient.getInstance().world); + } + /* + DUMMY.setBoatType(((ChestBoatItem)stack.getItem()).getBoatType()); + */ + EntityRenderer renderer = MinecraftClient.getInstance().getEntityRenderDispatcher().getRenderer(DUMMY); + matrices.translate(0.5, 0, 0.5); + renderer.render(DUMMY, DUMMY.getYaw(10), 0, matrices, vertexConsumers, light); + } + +} diff --git a/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java b/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java index da5951f..4c3f176 100644 --- a/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java +++ b/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java @@ -3,34 +3,37 @@ import net.arbee.addola.Addola; import net.arbee.addola.mixins.BoatEntityAccess; import net.arbee.addola.network.SpawnChestBoatEntityPacketSender; +import net.minecraft.block.BarrelBlock; import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.block.ChestBlock; -import net.minecraft.block.entity.LootableContainerBlockEntity; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; +import net.minecraft.entity.ItemEntity; import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.entity.passive.AnimalEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.vehicle.BoatEntity; +import net.minecraft.inventory.Inventory; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.Packet; import net.minecraft.tag.FluidTags; +import net.minecraft.text.LiteralText; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; +import net.minecraft.util.Identifier; import net.minecraft.util.math.Vec3d; import net.minecraft.util.registry.Registry; import net.minecraft.world.World; -import java.awt.*; - public class ChestBoatEntity extends BoatEntity { private static final TrackedData BLOCK_ENTITY; ChestBoatEntity instance = this; - Block block; static { @@ -54,14 +57,18 @@ public ChestBoatEntity(EntityType entityType, World w public ActionResult interact(PlayerEntity player, Hand hand) { if (((BoatEntityAccess)instance).getTicksUnderwater() < 60.0F) { if (!this.world.isClient) { - /*block = Block.getBlockFromItem(player.getMainHandStack().getItem()); - if(block.hasBlockEntity()) { - player.getMainHandStack().decrement(1); - }*/ - if (Registry.BLOCK.get(Registry.ITEM.getId(player.getMainHandStack().getItem())).hasBlockEntity()) { - if (player.isSneaking()) { + Block block = Registry.BLOCK.get(Registry.ITEM.getId(player.getMainHandStack().getItem())); + if (player.isSneaking()) { + if (block.equals(Blocks.AIR)) { + world.spawnEntity(new ItemEntity(world, getX(), getY(), getZ(), new ItemStack(Registry.ITEM.get(new Identifier(getBlockEntity()))))); + BoatEntity boat = new BoatEntity(world, getX(), getY(), getZ()); + world.spawnEntity(boat); + boat.copyPositionAndRotation(this); + remove(); + } else if (block.hasBlockEntity()) { + world.spawnEntity(new ItemEntity(world, getX(), getY(), getZ(), new ItemStack(Registry.ITEM.get(new Identifier(getBlockEntity()))))); setBlockEntity(Registry.ITEM.getId(player.getMainHandStack().getItem()).toString()); - new BoatEntity(world, getX(), getY(), getZ()); + player.getMainHandStack().decrement(1); return ActionResult.SUCCESS; } } @@ -123,7 +130,7 @@ public void updatePassengerPosition(Entity passenger) { @Override public Item asItem() { - return Addola.CHESTBOAT_ITEM; + return Addola.OAK_CHESTBOAT_ITEM; } @Override diff --git a/src/main/java/net/arbee/addola/item/ChestBoatItem.java b/src/main/java/net/arbee/addola/item/ChestBoatItem.java index 8e3c84a..48ebb65 100644 --- a/src/main/java/net/arbee/addola/item/ChestBoatItem.java +++ b/src/main/java/net/arbee/addola/item/ChestBoatItem.java @@ -4,6 +4,7 @@ import net.arbee.addola.mixins.BoatItemAccess; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.item.BoatItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -24,6 +25,7 @@ public class ChestBoatItem extends BoatItem { public ChestBoatItem(ChestBoatEntity.Type type, Item.Settings settings) { super(type, settings); + settings.maxCount(1); } @Override @@ -71,4 +73,8 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han } } } + + public BoatEntity.Type getBoatType() { + return ((BoatItemAccess)instance).getType(); + } } diff --git a/src/main/java/net/arbee/addola/mixins/BoatEntityMixin.java b/src/main/java/net/arbee/addola/mixins/BoatEntityMixin.java new file mode 100644 index 0000000..fc5f12c --- /dev/null +++ b/src/main/java/net/arbee/addola/mixins/BoatEntityMixin.java @@ -0,0 +1,35 @@ +package net.arbee.addola.mixins; + +import net.arbee.addola.entity.vehicle.ChestBoatEntity; +import net.minecraft.block.Block; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.vehicle.BoatEntity; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(BoatEntity.class) +public class BoatEntityMixin { + @Inject(at = @At("HEAD"), method = "interact", cancellable = true) + private void interact(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { + Block block = Registry.BLOCK.get(Registry.ITEM.getId(player.getMainHandStack().getItem())); + BoatEntity instance = (BoatEntity)(Object)this; + if (player.isSneaking()) { + if (block.hasBlockEntity()) { + World world = player.getEntityWorld(); + ChestBoatEntity chestBoat = new ChestBoatEntity(world, instance.getX(), instance.getY(), instance.getZ()); + world.spawnEntity(chestBoat); + chestBoat.copyPositionAndRotation(instance); + chestBoat.setBlockEntity(Registry.ITEM.getId(player.getMainHandStack().getItem()).toString()); + player.getMainHandStack().decrement(1); + instance.remove(); + cir.setReturnValue(ActionResult.SUCCESS); + } + } + } +} diff --git a/src/main/resources/addola.mixins.json b/src/main/resources/addola.mixins.json index 726d77b..91b4c1d 100644 --- a/src/main/resources/addola.mixins.json +++ b/src/main/resources/addola.mixins.json @@ -6,6 +6,7 @@ "client": [ "BerryMixin", "BoatEntityAccess", + "BoatEntityMixin", "BoatItemAccess", "ServerWorldMixin", "VillagerMixin" diff --git a/src/main/resources/assets/addola/lang/en_us.json b/src/main/resources/assets/addola/lang/en_us.json index 928af1f..bcebf0a 100644 --- a/src/main/resources/assets/addola/lang/en_us.json +++ b/src/main/resources/assets/addola/lang/en_us.json @@ -29,5 +29,6 @@ "gamerule.berryBushSneakDamage": "Deal Berry-bush damage while sneaking", "gamerule.villagersFollow": "Villagers follow Players holding Emerald Blocks/Ore", "gamerule.cureEffectsOnSleep": "Sleeping in a Bed cures any Effects.", - "gamerule.healOnSleep": "Sleeping in a Bed heals the player by a specific amount." + "gamerule.healOnSleep": "Sleeping in a Bed heals the player by a specific amount.", + "item.addola.oak_chestboat": "Oak Boat" } \ No newline at end of file diff --git a/src/main/resources/assets/addola/models/item/acacia_chestboat.json b/src/main/resources/assets/addola/models/item/acacia_chestboat.json new file mode 100644 index 0000000..e17276c --- /dev/null +++ b/src/main/resources/assets/addola/models/item/acacia_chestboat.json @@ -0,0 +1,28 @@ +{ + "parent": "minecraft:builtin/entity", + "display": { + "thirdperson_righthand": { + "rotation": [ -90, 0, 180 ], + "scale": [ -0.3, 0.3, -0.3 ] + }, + "thirdperson_lefthand": { + "rotation": [ -90, 0, 180 ], + "scale": [ -0.3, 0.3, -0.3 ] + }, + "firstperson_righthand": { + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "scale": [0.2, 0.2, 0.2], + "translation": [0, 0.3, 0] + }, + "gui": { + "rotation": [ -90, 45, 135 ], + "scale": [ 0.4, 0.4, 0.4 ] + } + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/addola/models/item/birch_chestboat.json b/src/main/resources/assets/addola/models/item/birch_chestboat.json new file mode 100644 index 0000000..e17276c --- /dev/null +++ b/src/main/resources/assets/addola/models/item/birch_chestboat.json @@ -0,0 +1,28 @@ +{ + "parent": "minecraft:builtin/entity", + "display": { + "thirdperson_righthand": { + "rotation": [ -90, 0, 180 ], + "scale": [ -0.3, 0.3, -0.3 ] + }, + "thirdperson_lefthand": { + "rotation": [ -90, 0, 180 ], + "scale": [ -0.3, 0.3, -0.3 ] + }, + "firstperson_righthand": { + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "scale": [0.2, 0.2, 0.2], + "translation": [0, 0.3, 0] + }, + "gui": { + "rotation": [ -90, 45, 135 ], + "scale": [ 0.4, 0.4, 0.4 ] + } + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/addola/models/item/dark_oak_chestboat.json b/src/main/resources/assets/addola/models/item/dark_oak_chestboat.json new file mode 100644 index 0000000..e17276c --- /dev/null +++ b/src/main/resources/assets/addola/models/item/dark_oak_chestboat.json @@ -0,0 +1,28 @@ +{ + "parent": "minecraft:builtin/entity", + "display": { + "thirdperson_righthand": { + "rotation": [ -90, 0, 180 ], + "scale": [ -0.3, 0.3, -0.3 ] + }, + "thirdperson_lefthand": { + "rotation": [ -90, 0, 180 ], + "scale": [ -0.3, 0.3, -0.3 ] + }, + "firstperson_righthand": { + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "scale": [0.2, 0.2, 0.2], + "translation": [0, 0.3, 0] + }, + "gui": { + "rotation": [ -90, 45, 135 ], + "scale": [ 0.4, 0.4, 0.4 ] + } + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/addola/models/item/jungle_chestboat.json b/src/main/resources/assets/addola/models/item/jungle_chestboat.json new file mode 100644 index 0000000..e17276c --- /dev/null +++ b/src/main/resources/assets/addola/models/item/jungle_chestboat.json @@ -0,0 +1,28 @@ +{ + "parent": "minecraft:builtin/entity", + "display": { + "thirdperson_righthand": { + "rotation": [ -90, 0, 180 ], + "scale": [ -0.3, 0.3, -0.3 ] + }, + "thirdperson_lefthand": { + "rotation": [ -90, 0, 180 ], + "scale": [ -0.3, 0.3, -0.3 ] + }, + "firstperson_righthand": { + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "scale": [0.2, 0.2, 0.2], + "translation": [0, 0.3, 0] + }, + "gui": { + "rotation": [ -90, 45, 135 ], + "scale": [ 0.4, 0.4, 0.4 ] + } + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/addola/models/item/oak_chestboat.json b/src/main/resources/assets/addola/models/item/oak_chestboat.json new file mode 100644 index 0000000..e17276c --- /dev/null +++ b/src/main/resources/assets/addola/models/item/oak_chestboat.json @@ -0,0 +1,28 @@ +{ + "parent": "minecraft:builtin/entity", + "display": { + "thirdperson_righthand": { + "rotation": [ -90, 0, 180 ], + "scale": [ -0.3, 0.3, -0.3 ] + }, + "thirdperson_lefthand": { + "rotation": [ -90, 0, 180 ], + "scale": [ -0.3, 0.3, -0.3 ] + }, + "firstperson_righthand": { + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "scale": [0.2, 0.2, 0.2], + "translation": [0, 0.3, 0] + }, + "gui": { + "rotation": [ -90, 45, 135 ], + "scale": [ 0.4, 0.4, 0.4 ] + } + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/addola/models/item/spruce_chestboat.json b/src/main/resources/assets/addola/models/item/spruce_chestboat.json new file mode 100644 index 0000000..e17276c --- /dev/null +++ b/src/main/resources/assets/addola/models/item/spruce_chestboat.json @@ -0,0 +1,28 @@ +{ + "parent": "minecraft:builtin/entity", + "display": { + "thirdperson_righthand": { + "rotation": [ -90, 0, 180 ], + "scale": [ -0.3, 0.3, -0.3 ] + }, + "thirdperson_lefthand": { + "rotation": [ -90, 0, 180 ], + "scale": [ -0.3, 0.3, -0.3 ] + }, + "firstperson_righthand": { + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "scale": [0.2, 0.2, 0.2], + "translation": [0, 0.3, 0] + }, + "gui": { + "rotation": [ -90, 45, 135 ], + "scale": [ 0.4, 0.4, 0.4 ] + } + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/addola/textures/chestboat_item.png b/src/main/resources/assets/addola/textures/chestboat_item.png deleted file mode 100644 index 9dcb0ebc86f06ed35c026537e90a21290dcb7d8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75656 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 Date: Mon, 11 Apr 2022 16:47:05 +0200 Subject: [PATCH 3/6] ChestBoat test --- src/main/java/net/arbee/addola/Addola.java | 36 +++++-------------- .../java/net/arbee/addola/AddolaClient.java | 13 +++++-- .../client/render/ChestBoatItemRenderer.java | 5 ++- .../addola/entity/ai/goal/EmeraldGoal.java | 4 +-- .../entity/vehicle/ChestBoatEntity.java | 23 ++++++++++-- .../net/arbee/addola/mixins/BerryMixin.java | 4 +-- .../arbee/addola/mixins/ServerWorldMixin.java | 6 ++-- .../{Commands.java => AddolaCommands.java} | 2 +- .../addola/registries/AddolaEntities.java | 21 +++++++++++ .../{Gamerules.java => AddolaGamerules.java} | 2 +- .../arbee/addola/registries/AddolaItems.java | 26 ++++++++++++++ .../resources/assets/addola/lang/en_us.json | 7 +++- 12 files changed, 103 insertions(+), 46 deletions(-) rename src/main/java/net/arbee/addola/registries/{Commands.java => AddolaCommands.java} (92%) create mode 100644 src/main/java/net/arbee/addola/registries/AddolaEntities.java rename src/main/java/net/arbee/addola/registries/{Gamerules.java => AddolaGamerules.java} (97%) create mode 100644 src/main/java/net/arbee/addola/registries/AddolaItems.java diff --git a/src/main/java/net/arbee/addola/Addola.java b/src/main/java/net/arbee/addola/Addola.java index a192943..8f9fbb3 100644 --- a/src/main/java/net/arbee/addola/Addola.java +++ b/src/main/java/net/arbee/addola/Addola.java @@ -1,46 +1,26 @@ package net.arbee.addola; import net.arbee.addola.entity.vehicle.ChestBoatEntity; -import net.arbee.addola.item.ChestBoatItem; -import net.arbee.addola.registries.Commands; -import net.arbee.addola.registries.Gamerules; +import net.arbee.addola.registries.AddolaEntities; +import net.arbee.addola.registries.AddolaItems; +import net.arbee.addola.registries.AddolaCommands; +import net.arbee.addola.registries.AddolaGamerules; import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; -import net.minecraft.entity.vehicle.BoatEntity; -import net.minecraft.item.BoatItem; -import net.minecraft.item.ItemGroup; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; public class Addola implements ModInitializer { public static final String MOD_NAME = "Addola"; - public static final ChestBoatItem OAK_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.OAK, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); - public static final ChestBoatItem JUNGLE_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.JUNGLE, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); - public static final ChestBoatItem ACACIA_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.ACACIA, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); - public static final ChestBoatItem DARKOAK_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.DARK_OAK, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); - public static final ChestBoatItem BIRCH_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.BIRCH, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); - public static final ChestBoatItem SPRUCE_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.SPRUCE, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); - - public static final EntityType CHESTBOAT = Registry.register( - Registry.ENTITY_TYPE, - new Identifier("addola", "oak_chestboat"), - FabricEntityTypeBuilder.create(SpawnGroup.MISC, ChestBoatEntity::new).dimensions(EntityDimensions.fixed(1.375f, 0.5625f)).build() - ); - @Override public void onInitialize() { - Registry.register(Registry.ITEM, new Identifier("addola", "oak_chestboat"), OAK_CHESTBOAT_ITEM); - Registry.register(Registry.ITEM, new Identifier("addola", "jungle_chestboat"), JUNGLE_CHESTBOAT_ITEM); - Registry.register(Registry.ITEM, new Identifier("addola", "acacia_chestboat"), ACACIA_CHESTBOAT_ITEM); - Registry.register(Registry.ITEM, new Identifier("addola", "dark_oak_chestboat"), DARKOAK_CHESTBOAT_ITEM); - Registry.register(Registry.ITEM, new Identifier("addola", "birch_chestboat"), BIRCH_CHESTBOAT_ITEM); - Registry.register(Registry.ITEM, new Identifier("addola", "spruce_chestboat"), SPRUCE_CHESTBOAT_ITEM); - Gamerules.setupGamerules(); - Commands.setupCommands(); + AddolaGamerules.setupGamerules(); + AddolaCommands.setupCommands(); + AddolaItems.setupItems(); + AddolaEntities.setupEntities(); } } \ No newline at end of file diff --git a/src/main/java/net/arbee/addola/AddolaClient.java b/src/main/java/net/arbee/addola/AddolaClient.java index b682822..fbeb8dc 100644 --- a/src/main/java/net/arbee/addola/AddolaClient.java +++ b/src/main/java/net/arbee/addola/AddolaClient.java @@ -5,6 +5,8 @@ import net.arbee.addola.client.render.ChestBoatItemRenderer; import net.arbee.addola.entity.vehicle.ChestBoatEntity; import net.arbee.addola.network.SpawnChestBoatEntityPacketSender; +import net.arbee.addola.registries.AddolaEntities; +import net.arbee.addola.registries.AddolaItems; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -38,7 +40,7 @@ public void onInitializeClient() { final double zVelocity = buf.readDouble(); final float pitch = buf.readFloat(); final float yaw = buf.readFloat(); - final ChestBoatEntity boat = new ChestBoatEntity(Addola.CHESTBOAT, client.world); + final ChestBoatEntity boat = new ChestBoatEntity(AddolaEntities.CHESTBOAT, client.world); boat.setEntityId(entityId); boat.setUuid(uuid); boat.setPos(x, y, z); @@ -54,7 +56,12 @@ public void onInitializeClient() { BuiltinItemRendererRegistry.INSTANCE.register(Items.DARK_OAK_BOAT, new BoatItemRenderer()); BuiltinItemRendererRegistry.INSTANCE.register(Items.JUNGLE_BOAT, new BoatItemRenderer()); BuiltinItemRendererRegistry.INSTANCE.register(Items.SPRUCE_BOAT, new BoatItemRenderer()); - BuiltinItemRendererRegistry.INSTANCE.register(Addola.OAK_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); - EntityRendererRegistry.INSTANCE.register(Addola.CHESTBOAT, (dispatcher, context) -> new ChestBoatEntityRenderer(dispatcher)); + BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.OAK_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.SPRUCE_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.BIRCH_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.JUNGLE_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.ACACIA_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.DARKOAK_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + EntityRendererRegistry.INSTANCE.register(AddolaEntities.CHESTBOAT, (dispatcher, context) -> new ChestBoatEntityRenderer(dispatcher)); } } diff --git a/src/main/java/net/arbee/addola/client/render/ChestBoatItemRenderer.java b/src/main/java/net/arbee/addola/client/render/ChestBoatItemRenderer.java index 4bb41f9..c03a893 100644 --- a/src/main/java/net/arbee/addola/client/render/ChestBoatItemRenderer.java +++ b/src/main/java/net/arbee/addola/client/render/ChestBoatItemRenderer.java @@ -3,6 +3,7 @@ import net.arbee.addola.Addola; import net.arbee.addola.entity.vehicle.ChestBoatEntity; import net.arbee.addola.item.ChestBoatItem; +import net.arbee.addola.registries.AddolaEntities; import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.VertexConsumerProvider; @@ -17,11 +18,9 @@ public class ChestBoatItemRenderer implements BuiltinItemRendererRegistry.Dynami @Override public void render(ItemStack stack, Mode mode, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { if ((DUMMY == null && MinecraftClient.getInstance().world != null) || MinecraftClient.getInstance().world != DUMMY.world) { - DUMMY = new ChestBoatEntity(Addola.CHESTBOAT, MinecraftClient.getInstance().world); + DUMMY = new ChestBoatEntity(AddolaEntities.CHESTBOAT, MinecraftClient.getInstance().world); } - /* DUMMY.setBoatType(((ChestBoatItem)stack.getItem()).getBoatType()); - */ EntityRenderer renderer = MinecraftClient.getInstance().getEntityRenderDispatcher().getRenderer(DUMMY); matrices.translate(0.5, 0, 0.5); renderer.render(DUMMY, DUMMY.getYaw(10), 0, matrices, vertexConsumers, light); diff --git a/src/main/java/net/arbee/addola/entity/ai/goal/EmeraldGoal.java b/src/main/java/net/arbee/addola/entity/ai/goal/EmeraldGoal.java index e14de17..175f205 100644 --- a/src/main/java/net/arbee/addola/entity/ai/goal/EmeraldGoal.java +++ b/src/main/java/net/arbee/addola/entity/ai/goal/EmeraldGoal.java @@ -1,6 +1,6 @@ package net.arbee.addola.entity.ai.goal; -import net.arbee.addola.registries.Gamerules; +import net.arbee.addola.registries.AddolaGamerules; import net.minecraft.entity.ai.TargetPredicate; import net.minecraft.entity.ai.goal.TemptGoal; import net.minecraft.entity.mob.PathAwareEntity; @@ -16,7 +16,7 @@ public EmeraldGoal(PathAwareEntity mob, double speed, Ingredient food, boolean c @Override public boolean canStart() { - if (this.mob.world.getGameRules().getBoolean(Gamerules.VILLAGERS_FOLLOW)) { + if (this.mob.world.getGameRules().getBoolean(AddolaGamerules.VILLAGERS_FOLLOW)) { if (this.cooldown > 0) { --this.cooldown; return false; diff --git a/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java b/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java index 4c3f176..f3e9d46 100644 --- a/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java +++ b/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java @@ -3,6 +3,8 @@ import net.arbee.addola.Addola; import net.arbee.addola.mixins.BoatEntityAccess; import net.arbee.addola.network.SpawnChestBoatEntityPacketSender; +import net.arbee.addola.registries.AddolaEntities; +import net.arbee.addola.registries.AddolaItems; import net.minecraft.block.BarrelBlock; import net.minecraft.block.Block; import net.minecraft.block.Blocks; @@ -20,6 +22,7 @@ import net.minecraft.inventory.Inventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.Packet; import net.minecraft.tag.FluidTags; @@ -41,7 +44,7 @@ public class ChestBoatEntity extends BoatEntity { } public ChestBoatEntity(World world, double x, double y, double z) { - super(Addola.CHESTBOAT, world); + super(AddolaEntities.CHESTBOAT, world); updatePosition(x, y, z); setVelocity(Vec3d.ZERO); prevX = x; @@ -88,10 +91,12 @@ protected void initDataTracker() { } protected void writeCustomDataToTag(CompoundTag tag) { + super.writeCustomDataToTag(tag); tag.putString("BlockEntity", getBlockEntity()); } protected void readCustomDataFromTag(CompoundTag tag) { + super.readCustomDataFromTag(tag); if (tag.contains("BlockEntity", 8)) { this.setBlockEntity(tag.getString("BlockEntity")); } @@ -130,7 +135,21 @@ public void updatePassengerPosition(Entity passenger) { @Override public Item asItem() { - return Addola.OAK_CHESTBOAT_ITEM; + switch(this.getBoatType()) { + case OAK: + default: + return AddolaItems.OAK_CHESTBOAT_ITEM; + case SPRUCE: + return AddolaItems.SPRUCE_CHESTBOAT_ITEM; + case BIRCH: + return AddolaItems.BIRCH_CHESTBOAT_ITEM; + case JUNGLE: + return AddolaItems.JUNGLE_CHESTBOAT_ITEM; + case ACACIA: + return AddolaItems.ACACIA_CHESTBOAT_ITEM; + case DARK_OAK: + return AddolaItems.DARKOAK_CHESTBOAT_ITEM; + } } @Override diff --git a/src/main/java/net/arbee/addola/mixins/BerryMixin.java b/src/main/java/net/arbee/addola/mixins/BerryMixin.java index c0f888a..1a895f7 100644 --- a/src/main/java/net/arbee/addola/mixins/BerryMixin.java +++ b/src/main/java/net/arbee/addola/mixins/BerryMixin.java @@ -1,6 +1,6 @@ package net.arbee.addola.mixins; -import net.arbee.addola.registries.Gamerules; +import net.arbee.addola.registries.AddolaGamerules; import net.minecraft.block.SweetBerryBushBlock; import net.minecraft.entity.Entity; import net.minecraft.entity.damage.DamageSource; @@ -12,7 +12,7 @@ public class BerryMixin{ @Redirect(method = "onEntityCollision", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;damage(Lnet/minecraft/entity/damage/DamageSource;F)Z")) public boolean collision (Entity entity, DamageSource source, float f) { - if(entity.isInSneakingPose() && !entity.getEntityWorld().getGameRules().getBoolean(Gamerules.BERRYBUSH_SNEAK_DAMAGE)) { + if(entity.isInSneakingPose() && !entity.getEntityWorld().getGameRules().getBoolean(AddolaGamerules.BERRYBUSH_SNEAK_DAMAGE)) { entity.damage(source, 0); } else { entity.damage(source, f); diff --git a/src/main/java/net/arbee/addola/mixins/ServerWorldMixin.java b/src/main/java/net/arbee/addola/mixins/ServerWorldMixin.java index bdefe5c..f5f5b1d 100644 --- a/src/main/java/net/arbee/addola/mixins/ServerWorldMixin.java +++ b/src/main/java/net/arbee/addola/mixins/ServerWorldMixin.java @@ -1,6 +1,6 @@ package net.arbee.addola.mixins; -import net.arbee.addola.registries.Gamerules; +import net.arbee.addola.registries.AddolaGamerules; import net.minecraft.entity.LivingEntity; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; @@ -21,11 +21,11 @@ public class ServerWorldMixin { public void inject(CallbackInfo ci) { for (int i = 0; i < players.size(); i++) { LivingEntity player = players.get(i); - int gameruleInt = player.getEntityWorld().getGameRules().getInt(Gamerules.HEAL_ON_SLEEP); + int gameruleInt = player.getEntityWorld().getGameRules().getInt(AddolaGamerules.HEAL_ON_SLEEP); player.setHealth(Math.min(player.getHealth() + gameruleInt, player.getMaxHealth())); - if(player.getEntityWorld().getGameRules().getBoolean(Gamerules.CURE_EFFECTS_SLEEP)) { + if(player.getEntityWorld().getGameRules().getBoolean(AddolaGamerules.CURE_EFFECTS_SLEEP)) { player.clearStatusEffects(); } } diff --git a/src/main/java/net/arbee/addola/registries/Commands.java b/src/main/java/net/arbee/addola/registries/AddolaCommands.java similarity index 92% rename from src/main/java/net/arbee/addola/registries/Commands.java rename to src/main/java/net/arbee/addola/registries/AddolaCommands.java index d08f2a6..e6d721e 100644 --- a/src/main/java/net/arbee/addola/registries/Commands.java +++ b/src/main/java/net/arbee/addola/registries/AddolaCommands.java @@ -3,7 +3,7 @@ import net.arbee.addola.server.command.PlayerstatCommand; import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; -public class Commands { +public class AddolaCommands { public static void setupCommands() { CommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> { PlayerstatCommand.register(dispatcher); diff --git a/src/main/java/net/arbee/addola/registries/AddolaEntities.java b/src/main/java/net/arbee/addola/registries/AddolaEntities.java new file mode 100644 index 0000000..525a009 --- /dev/null +++ b/src/main/java/net/arbee/addola/registries/AddolaEntities.java @@ -0,0 +1,21 @@ +package net.arbee.addola.registries; + +import net.arbee.addola.entity.vehicle.ChestBoatEntity; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; +import net.minecraft.entity.EntityDimensions; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.SpawnGroup; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +public class AddolaEntities { + public static final EntityType CHESTBOAT = Registry.register( + Registry.ENTITY_TYPE, + new Identifier("addola", "oak_chestboat"), + FabricEntityTypeBuilder.create(SpawnGroup.MISC, ChestBoatEntity::new).dimensions(EntityDimensions.fixed(1.375f, 0.5625f)).build() + ); + + public static void setupEntities() { + + } +} diff --git a/src/main/java/net/arbee/addola/registries/Gamerules.java b/src/main/java/net/arbee/addola/registries/AddolaGamerules.java similarity index 97% rename from src/main/java/net/arbee/addola/registries/Gamerules.java rename to src/main/java/net/arbee/addola/registries/AddolaGamerules.java index 7f47830..83684d0 100644 --- a/src/main/java/net/arbee/addola/registries/Gamerules.java +++ b/src/main/java/net/arbee/addola/registries/AddolaGamerules.java @@ -4,7 +4,7 @@ import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry; import net.minecraft.world.GameRules; -public class Gamerules { +public class AddolaGamerules { public static GameRules.Key BERRYBUSH_SNEAK_DAMAGE; public static GameRules.Key VILLAGERS_FOLLOW; public static GameRules.Key HEAL_ON_SLEEP; diff --git a/src/main/java/net/arbee/addola/registries/AddolaItems.java b/src/main/java/net/arbee/addola/registries/AddolaItems.java new file mode 100644 index 0000000..718226a --- /dev/null +++ b/src/main/java/net/arbee/addola/registries/AddolaItems.java @@ -0,0 +1,26 @@ +package net.arbee.addola.registries; + +import net.arbee.addola.item.ChestBoatItem; +import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +import net.minecraft.entity.vehicle.BoatEntity; +import net.minecraft.item.ItemGroup; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +public class AddolaItems { + public static final ChestBoatItem OAK_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.OAK, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); + public static final ChestBoatItem JUNGLE_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.JUNGLE, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); + public static final ChestBoatItem ACACIA_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.ACACIA, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); + public static final ChestBoatItem DARKOAK_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.DARK_OAK, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); + public static final ChestBoatItem BIRCH_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.BIRCH, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); + public static final ChestBoatItem SPRUCE_CHESTBOAT_ITEM = new ChestBoatItem(BoatEntity.Type.SPRUCE, new FabricItemSettings().group(ItemGroup.TRANSPORTATION).maxCount(1)); + + public static void setupItems() { + Registry.register(Registry.ITEM, new Identifier("addola", "oak_chestboat"), OAK_CHESTBOAT_ITEM); + Registry.register(Registry.ITEM, new Identifier("addola", "jungle_chestboat"), JUNGLE_CHESTBOAT_ITEM); + Registry.register(Registry.ITEM, new Identifier("addola", "acacia_chestboat"), ACACIA_CHESTBOAT_ITEM); + Registry.register(Registry.ITEM, new Identifier("addola", "dark_oak_chestboat"), DARKOAK_CHESTBOAT_ITEM); + Registry.register(Registry.ITEM, new Identifier("addola", "birch_chestboat"), BIRCH_CHESTBOAT_ITEM); + Registry.register(Registry.ITEM, new Identifier("addola", "spruce_chestboat"), SPRUCE_CHESTBOAT_ITEM); + } +} diff --git a/src/main/resources/assets/addola/lang/en_us.json b/src/main/resources/assets/addola/lang/en_us.json index bcebf0a..b824ea3 100644 --- a/src/main/resources/assets/addola/lang/en_us.json +++ b/src/main/resources/assets/addola/lang/en_us.json @@ -30,5 +30,10 @@ "gamerule.villagersFollow": "Villagers follow Players holding Emerald Blocks/Ore", "gamerule.cureEffectsOnSleep": "Sleeping in a Bed cures any Effects.", "gamerule.healOnSleep": "Sleeping in a Bed heals the player by a specific amount.", - "item.addola.oak_chestboat": "Oak Boat" + "item.addola.oak_chestboat": "Oak Boat", + "item.addola.dark_oak_chestboat": "Dark Oak Boat", + "item.addola.acacia_chestboat": "Acacia Boat", + "item.addola.birch_chestboat": "Birch Boat", + "item.addola.jungle_chestboat": "Jungle Boat", + "item.addola.spruce_chestboat": "Spruce Boat" } \ No newline at end of file From 63bb0c532e9f33af574805bf27cc0d6071a2edbc Mon Sep 17 00:00:00 2001 From: Arbee4ever Date: Mon, 11 Apr 2022 21:33:34 +0200 Subject: [PATCH 4/6] ChestBoat test --- .../java/net/arbee/addola/AddolaClient.java | 55 +++++---- .../entity/vehicle/ChestBoatEntity.java | 7 +- .../SpawnChestBoatEntityPacketSender.java | 111 +++++++++++++++--- 3 files changed, 134 insertions(+), 39 deletions(-) diff --git a/src/main/java/net/arbee/addola/AddolaClient.java b/src/main/java/net/arbee/addola/AddolaClient.java index fbeb8dc..5886327 100644 --- a/src/main/java/net/arbee/addola/AddolaClient.java +++ b/src/main/java/net/arbee/addola/AddolaClient.java @@ -1,5 +1,6 @@ package net.arbee.addola; +import io.netty.buffer.Unpooled; import net.arbee.addola.client.render.BoatItemRenderer; import net.arbee.addola.client.render.ChestBoatEntityRenderer; import net.arbee.addola.client.render.ChestBoatItemRenderer; @@ -13,13 +14,19 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; +import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.MinecraftVersion; import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; import net.minecraft.item.BoatItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.network.PacketByteBuf; import net.minecraft.util.Identifier; +import net.minecraft.util.math.Vec3d; import net.minecraft.util.registry.Registry; import java.util.UUID; @@ -29,27 +36,6 @@ public class AddolaClient implements ClientModInitializer { @Override public void onInitializeClient() { - ClientPlayNetworking.registerGlobalReceiver(SpawnChestBoatEntityPacketSender.IDENTIFIER, (client, handler, buf, responseSender) -> { - final int entityId = buf.readInt(); - final UUID uuid = buf.readUuid(); - final double x = buf.readDouble(); - final double y = buf.readDouble(); - final double z = buf.readDouble(); - final double xVelocity = buf.readDouble(); - final double yVelocity = buf.readDouble(); - final double zVelocity = buf.readDouble(); - final float pitch = buf.readFloat(); - final float yaw = buf.readFloat(); - final ChestBoatEntity boat = new ChestBoatEntity(AddolaEntities.CHESTBOAT, client.world); - boat.setEntityId(entityId); - boat.setUuid(uuid); - boat.setPos(x, y, z); - boat.setVelocity(xVelocity, yVelocity, zVelocity); - boat.setYaw(yaw); - boat.pitch = pitch; - client.execute(() -> client.world.addEntity(entityId, boat)); - }); - BuiltinItemRendererRegistry.INSTANCE.register(Items.ACACIA_BOAT, new BoatItemRenderer()); BuiltinItemRendererRegistry.INSTANCE.register(Items.OAK_BOAT, new BoatItemRenderer()); BuiltinItemRendererRegistry.INSTANCE.register(Items.BIRCH_BOAT, new BoatItemRenderer()); @@ -63,5 +49,32 @@ public void onInitializeClient() { BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.ACACIA_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.DARKOAK_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); EntityRendererRegistry.INSTANCE.register(AddolaEntities.CHESTBOAT, (dispatcher, context) -> new ChestBoatEntityRenderer(dispatcher)); + + receiveEntityPacket(); + } + + public void receiveEntityPacket() { + ClientSidePacketRegistry.INSTANCE.register(SpawnChestBoatEntityPacketSender.IDENTIFIER, (ctx, byteBuf) -> { + EntityType et = Registry.ENTITY_TYPE.get(byteBuf.readVarInt()); + UUID uuid = byteBuf.readUuid(); + int entityId = byteBuf.readVarInt(); + Vec3d pos = SpawnChestBoatEntityPacketSender.PacketBufUtil.readVec3d(byteBuf); + float pitch = SpawnChestBoatEntityPacketSender.PacketBufUtil.readAngle(byteBuf); + float yaw = SpawnChestBoatEntityPacketSender.PacketBufUtil.readAngle(byteBuf); + ctx.getTaskQueue().execute(() -> { + if (MinecraftClient.getInstance().world == null) + throw new IllegalStateException("Tried to spawn entity in a null world!"); + Entity e = et.create(MinecraftClient.getInstance().world); + if (e == null) + throw new IllegalStateException("Failed to create instance of entity \"" + Registry.ENTITY_TYPE.getId(et) + "\"!"); + e.updateTrackedPosition(pos); + e.setPos(pos.x, pos.y, pos.z); + e.pitch = pitch; + e.yaw = yaw; + e.setEntityId(entityId); + e.setUuid(uuid); + MinecraftClient.getInstance().world.addEntity(entityId, e); + }); + }); } } diff --git a/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java b/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java index f3e9d46..3970675 100644 --- a/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java +++ b/src/main/java/net/arbee/addola/entity/vehicle/ChestBoatEntity.java @@ -36,7 +36,6 @@ public class ChestBoatEntity extends BoatEntity { private static final TrackedData BLOCK_ENTITY; - ChestBoatEntity instance = this; static { @@ -58,7 +57,7 @@ public ChestBoatEntity(EntityType entityType, World w @Override public ActionResult interact(PlayerEntity player, Hand hand) { - if (((BoatEntityAccess)instance).getTicksUnderwater() < 60.0F) { + if (((BoatEntityAccess)this).getTicksUnderwater() < 60.0F) { if (!this.world.isClient) { Block block = Registry.BLOCK.get(Registry.ITEM.getId(player.getMainHandStack().getItem())); if (player.isSneaking()) { @@ -122,8 +121,8 @@ public void updatePassengerPosition(Entity passenger) { Vec3d vec3d = (new Vec3d((double)f, 0.0D, 0.0D)).rotateY(-this.yaw * 0.017453292F - 1.5707964F); passenger.updatePosition(this.getX() + vec3d.x, this.getY() + (double)g, this.getZ() + vec3d.z); - passenger.yaw += ((BoatEntityAccess)instance).getYawVelocity(); - passenger.setHeadYaw(passenger.getHeadYaw() + ((BoatEntityAccess)instance).getYawVelocity()); + passenger.yaw += ((BoatEntityAccess)this).getYawVelocity(); + passenger.setHeadYaw(passenger.getHeadYaw() + ((BoatEntityAccess)this).getYawVelocity()); this.copyEntityData(passenger); if (passenger instanceof AnimalEntity && this.getPassengerList().size() > 1) { int j = passenger.getEntityId() % 2 == 0 ? 90 : 270; diff --git a/src/main/java/net/arbee/addola/network/SpawnChestBoatEntityPacketSender.java b/src/main/java/net/arbee/addola/network/SpawnChestBoatEntityPacketSender.java index ed0d150..fa0e866 100644 --- a/src/main/java/net/arbee/addola/network/SpawnChestBoatEntityPacketSender.java +++ b/src/main/java/net/arbee/addola/network/SpawnChestBoatEntityPacketSender.java @@ -2,31 +2,114 @@ import io.netty.buffer.Unpooled; import net.arbee.addola.entity.vehicle.ChestBoatEntity; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.network.PacketContext; +import net.fabricmc.fabric.api.network.ServerSidePacketRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.network.Packet; import net.minecraft.network.PacketByteBuf; import net.minecraft.util.Identifier; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; +import net.minecraft.util.registry.Registry; + +import java.util.UUID; public class SpawnChestBoatEntityPacketSender { public static final Identifier IDENTIFIER = new Identifier("addola", "spawn_chestboat"); public static Packet createSpawnPacket(final ChestBoatEntity boatEntity) { - final PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer()); - buf.writeInt(boatEntity.getEntityId()); - buf.writeUuid(boatEntity.getUuid()); - buf.writeDouble(boatEntity.getX()); - buf.writeDouble(boatEntity.getY()); - buf.writeDouble(boatEntity.getZ()); - final Vec3d velocity = boatEntity.getVelocity(); - buf.writeDouble(velocity.x); - buf.writeDouble(velocity.y); - buf.writeDouble(velocity.z); - buf.writeFloat(boatEntity.getPitch(1)); - buf.writeFloat(boatEntity.yaw); - return ServerPlayNetworking.createS2CPacket(IDENTIFIER, buf); + if (boatEntity.world.isClient) + throw new IllegalStateException("SpawnPacketUtil.create called on the logical client!"); + PacketByteBuf byteBuf = new PacketByteBuf(Unpooled.buffer()); + byteBuf.writeVarInt(Registry.ENTITY_TYPE.getRawId(boatEntity.getType())); + byteBuf.writeUuid(boatEntity.getUuid()); + byteBuf.writeVarInt(boatEntity.getEntityId()); + + PacketBufUtil.writeVec3d(byteBuf, boatEntity.getPos()); + PacketBufUtil.writeAngle(byteBuf, boatEntity.pitch); + PacketBufUtil.writeAngle(byteBuf, boatEntity.yaw); + return ServerPlayNetworking.createS2CPacket(IDENTIFIER, byteBuf); } - private SpawnChestBoatEntityPacketSender() { + public static final class PacketBufUtil { + + /** + * Packs a floating-point angle into a {@code byte}. + * + * @param angle + * angle + * @return packed angle + */ + public static byte packAngle(float angle) { + return (byte) MathHelper.floor(angle * 256 / 360); + } + + /** + * Unpacks a floating-point angle from a {@code byte}. + * + * @param angleByte + * packed angle + * @return angle + */ + public static float unpackAngle(byte angleByte) { + return (angleByte * 360) / 256f; + } + + /** + * Writes an angle to a {@link PacketByteBuf}. + * + * @param byteBuf + * destination buffer + * @param angle + * angle + */ + public static void writeAngle(PacketByteBuf byteBuf, float angle) { + byteBuf.writeByte(packAngle(angle)); + } + + /** + * Reads an angle from a {@link PacketByteBuf}. + * + * @param byteBuf + * source buffer + * @return angle + */ + public static float readAngle(PacketByteBuf byteBuf) { + return unpackAngle(byteBuf.readByte()); + } + + /** + * Writes a {@link Vec3d} to a {@link PacketByteBuf}. + * + * @param byteBuf + * destination buffer + * @param vec3d + * vector + */ + public static void writeVec3d(PacketByteBuf byteBuf, Vec3d vec3d) { + byteBuf.writeDouble(vec3d.x); + byteBuf.writeDouble(vec3d.y); + byteBuf.writeDouble(vec3d.z); + } + + /** + * Reads a {@link Vec3d} from a {@link PacketByteBuf}. + * + * @param byteBuf + * source buffer + * @return vector + */ + public static Vec3d readVec3d(PacketByteBuf byteBuf) { + double x = byteBuf.readDouble(); + double y = byteBuf.readDouble(); + double z = byteBuf.readDouble(); + return new Vec3d(x, y, z); + } } } From 7b4c9fffee2aca06482c35d9eef28ab442565bd4 Mon Sep 17 00:00:00 2001 From: Arbee4ever Date: Tue, 12 Apr 2022 00:48:54 +0200 Subject: [PATCH 5/6] ChestBoat test --- src/main/java/net/arbee/addola/Addola.java | 13 +++---------- .../java/net/arbee/addola/AddolaClient.java | 14 ++------------ .../client/render/BoatItemRenderer.java | 1 - .../arbee/addola/registries/AddolaItems.java | 19 +++++++++++++++++++ 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/main/java/net/arbee/addola/Addola.java b/src/main/java/net/arbee/addola/Addola.java index 8f9fbb3..f32b7af 100644 --- a/src/main/java/net/arbee/addola/Addola.java +++ b/src/main/java/net/arbee/addola/Addola.java @@ -1,17 +1,10 @@ package net.arbee.addola; -import net.arbee.addola.entity.vehicle.ChestBoatEntity; -import net.arbee.addola.registries.AddolaEntities; -import net.arbee.addola.registries.AddolaItems; import net.arbee.addola.registries.AddolaCommands; +import net.arbee.addola.registries.AddolaEntities; import net.arbee.addola.registries.AddolaGamerules; +import net.arbee.addola.registries.AddolaItems; import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.SpawnGroup; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; public class Addola implements ModInitializer { public static final String MOD_NAME = "Addola"; @@ -20,7 +13,7 @@ public class Addola implements ModInitializer { public void onInitialize() { AddolaGamerules.setupGamerules(); AddolaCommands.setupCommands(); - AddolaItems.setupItems(); AddolaEntities.setupEntities(); + AddolaItems.setupItems(); } } \ No newline at end of file diff --git a/src/main/java/net/arbee/addola/AddolaClient.java b/src/main/java/net/arbee/addola/AddolaClient.java index 5886327..ffb82c8 100644 --- a/src/main/java/net/arbee/addola/AddolaClient.java +++ b/src/main/java/net/arbee/addola/AddolaClient.java @@ -36,18 +36,8 @@ public class AddolaClient implements ClientModInitializer { @Override public void onInitializeClient() { - BuiltinItemRendererRegistry.INSTANCE.register(Items.ACACIA_BOAT, new BoatItemRenderer()); - BuiltinItemRendererRegistry.INSTANCE.register(Items.OAK_BOAT, new BoatItemRenderer()); - BuiltinItemRendererRegistry.INSTANCE.register(Items.BIRCH_BOAT, new BoatItemRenderer()); - BuiltinItemRendererRegistry.INSTANCE.register(Items.DARK_OAK_BOAT, new BoatItemRenderer()); - BuiltinItemRendererRegistry.INSTANCE.register(Items.JUNGLE_BOAT, new BoatItemRenderer()); - BuiltinItemRendererRegistry.INSTANCE.register(Items.SPRUCE_BOAT, new BoatItemRenderer()); - BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.OAK_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); - BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.SPRUCE_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); - BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.BIRCH_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); - BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.JUNGLE_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); - BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.ACACIA_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); - BuiltinItemRendererRegistry.INSTANCE.register(AddolaItems.DARKOAK_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + AddolaItems.setupItemRenderers(); + EntityRendererRegistry.INSTANCE.register(AddolaEntities.CHESTBOAT, (dispatcher, context) -> new ChestBoatEntityRenderer(dispatcher)); receiveEntityPacket(); diff --git a/src/main/java/net/arbee/addola/client/render/BoatItemRenderer.java b/src/main/java/net/arbee/addola/client/render/BoatItemRenderer.java index 0d75dc6..fa24591 100644 --- a/src/main/java/net/arbee/addola/client/render/BoatItemRenderer.java +++ b/src/main/java/net/arbee/addola/client/render/BoatItemRenderer.java @@ -10,7 +10,6 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.item.ItemStack; -import net.minecraft.util.registry.Registry; public class BoatItemRenderer implements BuiltinItemRendererRegistry.DynamicItemRenderer { diff --git a/src/main/java/net/arbee/addola/registries/AddolaItems.java b/src/main/java/net/arbee/addola/registries/AddolaItems.java index 718226a..8bcefce 100644 --- a/src/main/java/net/arbee/addola/registries/AddolaItems.java +++ b/src/main/java/net/arbee/addola/registries/AddolaItems.java @@ -1,9 +1,13 @@ package net.arbee.addola.registries; +import net.arbee.addola.client.render.BoatItemRenderer; +import net.arbee.addola.client.render.ChestBoatItemRenderer; import net.arbee.addola.item.ChestBoatItem; +import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.item.ItemGroup; +import net.minecraft.item.Items; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -23,4 +27,19 @@ public static void setupItems() { Registry.register(Registry.ITEM, new Identifier("addola", "birch_chestboat"), BIRCH_CHESTBOAT_ITEM); Registry.register(Registry.ITEM, new Identifier("addola", "spruce_chestboat"), SPRUCE_CHESTBOAT_ITEM); } + + public static void setupItemRenderers() { + BuiltinItemRendererRegistry.INSTANCE.register(Items.ACACIA_BOAT, new BoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(Items.OAK_BOAT, new BoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(Items.BIRCH_BOAT, new BoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(Items.DARK_OAK_BOAT, new BoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(Items.JUNGLE_BOAT, new BoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(Items.SPRUCE_BOAT, new BoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(OAK_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(SPRUCE_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(BIRCH_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(JUNGLE_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(ACACIA_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + BuiltinItemRendererRegistry.INSTANCE.register(DARKOAK_CHESTBOAT_ITEM, new ChestBoatItemRenderer()); + } } From 43145ed7d9e20c654e51405c27455f128dd93743 Mon Sep 17 00:00:00 2001 From: Arbee4ever Date: Mon, 9 May 2022 00:24:37 +0200 Subject: [PATCH 6/6] Name tags get redder the more an entity is hurt --- .../addola/mixins/EntityRendererMixin.java | 28 +++++++++++++++ .../mixins/LivingEntityRendererMixin.java | 34 +++++++++++++++++++ src/main/resources/addola.mixins.json | 2 ++ 3 files changed, 64 insertions(+) create mode 100644 src/main/java/net/arbee/addola/mixins/EntityRendererMixin.java create mode 100644 src/main/java/net/arbee/addola/mixins/LivingEntityRendererMixin.java diff --git a/src/main/java/net/arbee/addola/mixins/EntityRendererMixin.java b/src/main/java/net/arbee/addola/mixins/EntityRendererMixin.java new file mode 100644 index 0000000..9747265 --- /dev/null +++ b/src/main/java/net/arbee/addola/mixins/EntityRendererMixin.java @@ -0,0 +1,28 @@ +package net.arbee.addola.mixins; + +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArgs; +import org.spongepowered.asm.mixin.injection.invoke.arg.Args; + +import java.awt.*; + +@Mixin(EntityRenderer.class) +public abstract class EntityRendererMixin { + @ModifyArgs(method = "renderLabelIfPresent", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/font/TextRenderer;draw(Lnet/minecraft/text/Text;FFIZLnet/minecraft/util/math/Matrix4f;Lnet/minecraft/client/render/VertexConsumerProvider;ZII)I", ordinal = 1)) + public void draw (Args args, T entity, Text text, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light) { + float healthPercent = ((LivingEntity)entity).getHealth() / ((LivingEntity)entity).getMaxHealth(); + args.set(3, getCol(healthPercent)); + } + + public int getCol(float percent) { + int p = (int)(255 * percent); + return new Color(255, p, p).hashCode(); + } +} \ No newline at end of file diff --git a/src/main/java/net/arbee/addola/mixins/LivingEntityRendererMixin.java b/src/main/java/net/arbee/addola/mixins/LivingEntityRendererMixin.java new file mode 100644 index 0000000..190fde3 --- /dev/null +++ b/src/main/java/net/arbee/addola/mixins/LivingEntityRendererMixin.java @@ -0,0 +1,34 @@ +package net.arbee.addola.mixins; + +import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.LivingEntityRenderer; +import net.minecraft.client.render.entity.PlayerModelPart; +import net.minecraft.client.render.entity.feature.FeatureRendererContext; +import net.minecraft.client.render.entity.model.EntityModel; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.util.math.Vector3f; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Formatting; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(LivingEntityRenderer.class) +public abstract class LivingEntityRendererMixin> extends EntityRenderer implements FeatureRendererContext { + protected LivingEntityRendererMixin(EntityRenderDispatcher dispatcher) { + super(dispatcher); + } + + @Inject(method = "setupTransforms", at = @At(value = "TAIL")) + protected void setupTransforms(T entity, MatrixStack matrices, float animationProgress, float bodyYaw, float tickDelta, CallbackInfo ci) { + if (entity.hasCustomName() || entity instanceof PlayerEntity) { + String string = Formatting.strip(entity.getName().getString()); + if ("guendahr".equals(string) && (!(entity instanceof PlayerEntity) || ((PlayerEntity)entity).isPartVisible(PlayerModelPart.CAPE))) { + matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(180.0F)); + } + } + } +} diff --git a/src/main/resources/addola.mixins.json b/src/main/resources/addola.mixins.json index 91b4c1d..4ebd93b 100644 --- a/src/main/resources/addola.mixins.json +++ b/src/main/resources/addola.mixins.json @@ -8,6 +8,8 @@ "BoatEntityAccess", "BoatEntityMixin", "BoatItemAccess", + "EntityRendererMixin", + "LivingEntityRendererMixin", "ServerWorldMixin", "VillagerMixin" ],