From e465d946018b1b7d5fd40d348fd4f92181209880 Mon Sep 17 00:00:00 2001 From: ian1337 Date: Sat, 3 Oct 2026 14:33:11 +0200 Subject: [PATCH] [add] Duck --- .../6143fb1502ae754d8039ff811e28c49eaa7e6409 | 4 +- .../d1416cf72769a6a520cc2c44944968403e1a0de7 | 3 +- .../assets/masterwild/lang/en_us.json | 2 + .../models/item/duck_spawn_egg.json | 3 + .../masterwild/Item/ModCreativeModeTabs.java | 1 + .../glitchlabs/masterwild/Item/ModItems.java | 3 + .../ovh/glitchlabs/masterwild/Masterwild.java | 2 + .../datagen/ModItemModelProvider.java | 1 + .../datagen/ModLanguageProvider.java | 2 + .../masterwild/entity/ModEntities.java | 4 + .../entity/client/duck/duckModel.java | 107 ++++++++++++++++++ .../entity/client/duck/duckRenderer.java | 21 ++++ .../masterwild/entity/custom/duckEntity.java | 58 ++++++++++ .../masterwild/event/ModEventBusEvents.java | 3 + .../masterwild/textures/entity/duck.png | Bin 0 -> 2343 bytes 15 files changed, 211 insertions(+), 3 deletions(-) create mode 100644 src/generated/resources/assets/masterwild/models/item/duck_spawn_egg.json create mode 100755 src/main/java/ovh/glitchlabs/masterwild/entity/client/duck/duckModel.java create mode 100644 src/main/java/ovh/glitchlabs/masterwild/entity/client/duck/duckRenderer.java create mode 100644 src/main/java/ovh/glitchlabs/masterwild/entity/custom/duckEntity.java create mode 100755 src/main/resources/assets/masterwild/textures/entity/duck.png diff --git a/src/generated/resources/.cache/6143fb1502ae754d8039ff811e28c49eaa7e6409 b/src/generated/resources/.cache/6143fb1502ae754d8039ff811e28c49eaa7e6409 index 2b06a35..df7cf38 100644 --- a/src/generated/resources/.cache/6143fb1502ae754d8039ff811e28c49eaa7e6409 +++ b/src/generated/resources/.cache/6143fb1502ae754d8039ff811e28c49eaa7e6409 @@ -1,2 +1,2 @@ -// 1.21.1 2026-09-29T16:23:56.996726612 Languages: en_us for mod: masterwild -35f1e1ce16f4613ff411eec96f0bcb280108e169 assets/masterwild/lang/en_us.json +// 1.21.1 2026-10-03T14:21:42.612129097 Languages: en_us for mod: masterwild +7994d49f6ed6926077869619b9bc8775e7d4956a assets/masterwild/lang/en_us.json diff --git a/src/generated/resources/.cache/d1416cf72769a6a520cc2c44944968403e1a0de7 b/src/generated/resources/.cache/d1416cf72769a6a520cc2c44944968403e1a0de7 index 043eeb5..7a6d8f8 100644 --- a/src/generated/resources/.cache/d1416cf72769a6a520cc2c44944968403e1a0de7 +++ b/src/generated/resources/.cache/d1416cf72769a6a520cc2c44944968403e1a0de7 @@ -1,8 +1,9 @@ -// 1.21.1 2026-09-29T16:23:56.997419393 Item Models: masterwild +// 1.21.1 2026-10-03T14:21:42.613329425 Item Models: masterwild a92e1a88c1d3c3c04b2b001f0bffd19a1f3462f0 assets/masterwild/models/item/banana.json 8cb5b876c97ae89d180a200612d0d14c8456c2f7 assets/masterwild/models/item/banana_peel.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/butterfly_spawn_egg.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/capybara_spawn_egg.json +63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/duck_spawn_egg.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/firefly_spawn_egg.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/hedgehog_spawn_egg.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/monkey_spawn_egg.json diff --git a/src/generated/resources/assets/masterwild/lang/en_us.json b/src/generated/resources/assets/masterwild/lang/en_us.json index 815a5fb..ca66c75 100644 --- a/src/generated/resources/assets/masterwild/lang/en_us.json +++ b/src/generated/resources/assets/masterwild/lang/en_us.json @@ -2,6 +2,7 @@ "creativetab.masterwild.masterwild": "MasterWild", "entity.masterwild.butterfly": "Butterfly", "entity.masterwild.capybara": "Capybara", + "entity.masterwild.duck": "Duck", "entity.masterwild.firefly": "Firefly", "entity.masterwild.hedgehog": "Hedgehog", "entity.masterwild.monkey": "Monkey", @@ -14,6 +15,7 @@ "item.masterwild.banana_peel": "Banana Peel", "item.masterwild.butterfly_spawn_egg": "Butterfly Spawn Egg", "item.masterwild.capybara_spawn_egg": "Capybara Spawn Egg", + "item.masterwild.duck_spawn_egg": "Duck Spawn Egg", "item.masterwild.firefly_spawn_egg": "Firefly Spawn Egg", "item.masterwild.hedgehog_spawn_egg": "Hedgehog Spawn Egg", "item.masterwild.monkey_spawn_egg": "Monkey Spawn Egg", diff --git a/src/generated/resources/assets/masterwild/models/item/duck_spawn_egg.json b/src/generated/resources/assets/masterwild/models/item/duck_spawn_egg.json new file mode 100644 index 0000000..d1aaa9d --- /dev/null +++ b/src/generated/resources/assets/masterwild/models/item/duck_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/main/java/ovh/glitchlabs/masterwild/Item/ModCreativeModeTabs.java b/src/main/java/ovh/glitchlabs/masterwild/Item/ModCreativeModeTabs.java index 1ce4942..de3ae14 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/Item/ModCreativeModeTabs.java +++ b/src/main/java/ovh/glitchlabs/masterwild/Item/ModCreativeModeTabs.java @@ -32,6 +32,7 @@ public class ModCreativeModeTabs { output.accept(ModItems.RACCOON_SPAWN_EGG); output.accept(ModItems.MONKEY_SPAWN_EGG); output.accept(ModItems.CAPYBARA_SPAWN_EGG); + output.accept(ModItems.DUCK_SPAWN_EGG); }).build()); diff --git a/src/main/java/ovh/glitchlabs/masterwild/Item/ModItems.java b/src/main/java/ovh/glitchlabs/masterwild/Item/ModItems.java index c87578b..aed91a9 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/Item/ModItems.java +++ b/src/main/java/ovh/glitchlabs/masterwild/Item/ModItems.java @@ -55,6 +55,9 @@ public class ModItems { public static final DeferredItem CAPYBARA_SPAWN_EGG = ITEMS.register("capybara_spawn_egg", () -> new DeferredSpawnEggItem(ModEntities.CAPYBARA, 0x372a21, 0x9e9178, new Item.Properties())); + public static final DeferredItem DUCK_SPAWN_EGG = ITEMS.register("duck_spawn_egg", + () -> new DeferredSpawnEggItem(ModEntities.DUCK, 0x341b10, 0x516a4c, + new Item.Properties())); public static void register(IEventBus eventBus) { ITEMS.register(eventBus); diff --git a/src/main/java/ovh/glitchlabs/masterwild/Masterwild.java b/src/main/java/ovh/glitchlabs/masterwild/Masterwild.java index e5c4884..00f47d4 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/Masterwild.java +++ b/src/main/java/ovh/glitchlabs/masterwild/Masterwild.java @@ -26,6 +26,7 @@ import ovh.glitchlabs.masterwild.entity.client.Rooster.RoosterRenderer; import ovh.glitchlabs.masterwild.entity.client.Shark.SharkRenderer; import ovh.glitchlabs.masterwild.entity.client.butterfly.ButterflyRenderer; import ovh.glitchlabs.masterwild.entity.client.capibara.CapybaraRenderer; +import ovh.glitchlabs.masterwild.entity.client.duck.duckRenderer; import ovh.glitchlabs.masterwild.entity.client.firefly.FireflyRenderer; import ovh.glitchlabs.masterwild.entity.client.hedgehog.HedgehogRenderer; import ovh.glitchlabs.masterwild.entity.client.red_panda.Red_PandaRenderer; @@ -86,6 +87,7 @@ public class Masterwild { EntityRenderers.register(ModEntities.RACCOON.get(), RaccoonRenderer::new); EntityRenderers.register(ModEntities.MONKEY.get(), MonkeyRenderer::new); EntityRenderers.register(ModEntities.CAPYBARA.get(), CapybaraRenderer::new); + EntityRenderers.register(ModEntities.DUCK.get(), duckRenderer::new); } } } diff --git a/src/main/java/ovh/glitchlabs/masterwild/datagen/ModItemModelProvider.java b/src/main/java/ovh/glitchlabs/masterwild/datagen/ModItemModelProvider.java index c6cea78..d674676 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/datagen/ModItemModelProvider.java +++ b/src/main/java/ovh/glitchlabs/masterwild/datagen/ModItemModelProvider.java @@ -31,5 +31,6 @@ public class ModItemModelProvider extends ItemModelProvider { withExistingParent(ModItems.RACCOON_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg")); withExistingParent(ModItems.MONKEY_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg")); withExistingParent(ModItems.CAPYBARA_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg")); + withExistingParent(ModItems.DUCK_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg")); } } \ No newline at end of file diff --git a/src/main/java/ovh/glitchlabs/masterwild/datagen/ModLanguageProvider.java b/src/main/java/ovh/glitchlabs/masterwild/datagen/ModLanguageProvider.java index dfef3d3..52103c2 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/datagen/ModLanguageProvider.java +++ b/src/main/java/ovh/glitchlabs/masterwild/datagen/ModLanguageProvider.java @@ -27,6 +27,7 @@ public class ModLanguageProvider extends LanguageProvider { add(ModEntities.RACCOON.get(), "Raccoon"); add(ModEntities.MONKEY.get(), "Monkey"); add(ModEntities.CAPYBARA.get(), "Capybara"); + add(ModEntities.DUCK.get(), "Duck"); add(ModItems.PINGUIN_SPAWN_EGG.get(), "Pinguin Spawn Egg"); add(ModItems.FIREFLY_SPAWN_EGG.get(), "Firefly Spawn Egg"); @@ -38,6 +39,7 @@ public class ModLanguageProvider extends LanguageProvider { add(ModItems.RACCOON_SPAWN_EGG.get(), "Raccoon Spawn Egg"); add(ModItems.MONKEY_SPAWN_EGG.get(), "Monkey Spawn Egg"); add(ModItems.CAPYBARA_SPAWN_EGG.get(), "Capybara Spawn Egg"); + add(ModItems.DUCK_SPAWN_EGG.get(), "Duck Spawn Egg"); add("creativetab.masterwild.masterwild", "MasterWild"); diff --git a/src/main/java/ovh/glitchlabs/masterwild/entity/ModEntities.java b/src/main/java/ovh/glitchlabs/masterwild/entity/ModEntities.java index 96525b1..7b83e77 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/entity/ModEntities.java +++ b/src/main/java/ovh/glitchlabs/masterwild/entity/ModEntities.java @@ -54,6 +54,10 @@ public class ModEntities { ENTITY_TYPES.register("capybara", () -> EntityType.Builder.of(CapybaraEntity::new, MobCategory.CREATURE) .sized(0.6f, 0.5f).build("capybara")); + public static final Supplier> DUCK = + ENTITY_TYPES.register("duck", () -> EntityType.Builder.of(duckEntity::new, MobCategory.CREATURE) + .sized(0.6f, 0.5f).build("duck")); + public static void register(IEventBus eventBus) { ENTITY_TYPES.register(eventBus); diff --git a/src/main/java/ovh/glitchlabs/masterwild/entity/client/duck/duckModel.java b/src/main/java/ovh/glitchlabs/masterwild/entity/client/duck/duckModel.java new file mode 100755 index 0000000..33c80db --- /dev/null +++ b/src/main/java/ovh/glitchlabs/masterwild/entity/client/duck/duckModel.java @@ -0,0 +1,107 @@ +package ovh.glitchlabs.masterwild.entity.client.duck;// Made with Blockbench 5.2.0 +// Exported for Minecraft version 1.17 or later with Mojang mappings +// Paste this class into your mod and generate all required imports + + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.HierarchicalModel; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import ovh.glitchlabs.masterwild.Masterwild; +import ovh.glitchlabs.masterwild.entity.custom.duckEntity; + +public class duckModel extends HierarchicalModel { + // This layer location should be baked with EntityRendererProvider.Context in the entity renderer and passed into this model's constructor + public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(ResourceLocation.fromNamespaceAndPath(Masterwild.MODID, "duckmodel"), "main"); + private final ModelPart Duck; + private final ModelPart body; + private final ModelPart flapps; + private final ModelPart R_flapps; + private final ModelPart L_flapps; + private final ModelPart head; + private final ModelPart legs; + private final ModelPart R_leg; + private final ModelPart L_leg; + + public duckModel(ModelPart root) { + this.Duck = root.getChild("Duck"); + this.body = this.Duck.getChild("body"); + this.flapps = this.body.getChild("flapps"); + this.R_flapps = this.flapps.getChild("R_flapps"); + this.L_flapps = this.flapps.getChild("L_flapps"); + this.head = this.body.getChild("head"); + this.legs = this.body.getChild("legs"); + this.R_leg = this.legs.getChild("R_leg"); + this.L_leg = this.legs.getChild("L_leg"); + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition Duck = partdefinition.addOrReplaceChild("Duck", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F)); + + PartDefinition body = Duck.addOrReplaceChild("body", CubeListBuilder.create().texOffs(0, 0).addBox(-4.3214F, -2.7578F, -5.6071F, 7.0F, 7.0F, 9.0F, new CubeDeformation(0.0F)) + .texOffs(32, 0).addBox(-2.3214F, -0.7578F, 3.3929F, 3.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.8214F, -5.2422F, 1.6071F)); + + PartDefinition cube_r1 = body.addOrReplaceChild("cube_r1", CubeListBuilder.create().texOffs(32, 2).addBox(-2.0F, -2.0F, -1.0F, 3.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.3214F, 0.7422F, 5.1429F, 0.3927F, 0.0F, 0.0F)); + + PartDefinition cube_r2 = body.addOrReplaceChild("cube_r2", CubeListBuilder.create().texOffs(32, 4).addBox(-2.0F, -2.0F, -1.0F, 3.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.3214F, 1.4922F, 3.3929F, -0.3927F, 0.0F, 0.0F)); + + PartDefinition flapps = body.addOrReplaceChild("flapps", CubeListBuilder.create(), PartPose.offset(3.6786F, -0.0078F, -1.6071F)); + + PartDefinition R_flapps = flapps.addOrReplaceChild("R_flapps", CubeListBuilder.create(), PartPose.offset(-8.5F, -0.4036F, 0.3799F)); + + PartDefinition cube_r3 = R_flapps.addOrReplaceChild("cube_r3", CubeListBuilder.create().texOffs(20, 28).addBox(0.0F, -2.0F, -3.0F, 1.0F, 5.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.5F, 0.4036F, -0.3799F, -0.2182F, 0.0F, 0.0F)); + + PartDefinition L_flapps = flapps.addOrReplaceChild("L_flapps", CubeListBuilder.create(), PartPose.offset(-0.5F, -0.4036F, 0.3799F)); + + PartDefinition cube_r4 = L_flapps.addOrReplaceChild("cube_r4", CubeListBuilder.create().texOffs(20, 16).addBox(-1.0F, -2.0F, -3.0F, 1.0F, 5.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.5F, 0.4036F, -0.3799F, -0.2182F, 0.0F, 0.0F)); + + PartDefinition head = body.addOrReplaceChild("head", CubeListBuilder.create().texOffs(32, 6).addBox(-1.0F, -2.0F, -1.0F, 2.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(0, 16).addBox(-2.5F, -4.0F, 1.0F, 5.0F, 9.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(-0.8214F, -3.7578F, -8.6071F)); + + PartDefinition legs = body.addOrReplaceChild("legs", CubeListBuilder.create(), PartPose.offset(0.4286F, 5.2422F, -1.6071F)); + + PartDefinition R_leg = legs.addOrReplaceChild("R_leg", CubeListBuilder.create().texOffs(0, 30).addBox(-4.5F, -1.0F, -1.0F, 3.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition L_leg = legs.addOrReplaceChild("L_leg", CubeListBuilder.create().texOffs(10, 30).addBox(1.5F, -1.0F, -1.0F, 3.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(-2.5F, 0.0F, 0.0F)); + + return LayerDefinition.create(meshdefinition, 64, 64); + } + + @Override + public void setupAnim(duckEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + this.root().getAllParts().forEach(ModelPart::resetPose); + this.applyHeadRotation(netHeadYaw, headPitch); + this.walk(limbSwing, limbSwingAmount); + } + + private void applyHeadRotation(float headYaw, float headPitch) { + headYaw = Mth.clamp(headYaw, -30f, 30f); + headPitch = Mth.clamp(headPitch, -25f, 45f); + this.head.yRot = headYaw * ((float) Math.PI / 180f); + this.head.xRot = headPitch * ((float) Math.PI / 180f); + } + + private void walk(float limbSwing, float limbSwingAmount) { + float amount = 1.0F * limbSwingAmount; + this.R_leg.xRot = Mth.cos(limbSwing * 0.6662F) * amount; + this.L_leg.xRot = Mth.cos(limbSwing * 0.6662F) * amount; + } + + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, int color) { + Duck.render(poseStack, vertexConsumer, packedLight, packedOverlay, color); + } + + @Override + public ModelPart root() { + return Duck; + } +} \ No newline at end of file diff --git a/src/main/java/ovh/glitchlabs/masterwild/entity/client/duck/duckRenderer.java b/src/main/java/ovh/glitchlabs/masterwild/entity/client/duck/duckRenderer.java new file mode 100644 index 0000000..1b605dc --- /dev/null +++ b/src/main/java/ovh/glitchlabs/masterwild/entity/client/duck/duckRenderer.java @@ -0,0 +1,21 @@ +package ovh.glitchlabs.masterwild.entity.client.duck; + +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.resources.ResourceLocation; +import ovh.glitchlabs.masterwild.Masterwild; +import ovh.glitchlabs.masterwild.entity.custom.duckEntity; + +public class duckRenderer extends MobRenderer> { + private static final ResourceLocation TEXTURE = + ResourceLocation.fromNamespaceAndPath(Masterwild.MODID, "textures/entity/duck.png"); + + public duckRenderer(EntityRendererProvider.Context context) { + super(context, new duckModel<>(context.bakeLayer(duckModel.LAYER_LOCATION)), 0.45f); + } + + @Override + public ResourceLocation getTextureLocation(duckEntity duckEntity) { + return TEXTURE; + } +} diff --git a/src/main/java/ovh/glitchlabs/masterwild/entity/custom/duckEntity.java b/src/main/java/ovh/glitchlabs/masterwild/entity/custom/duckEntity.java new file mode 100644 index 0000000..5ab8d75 --- /dev/null +++ b/src/main/java/ovh/glitchlabs/masterwild/entity/custom/duckEntity.java @@ -0,0 +1,58 @@ +package ovh.glitchlabs.masterwild.entity.custom; + +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.*; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; +import ovh.glitchlabs.masterwild.entity.ModEntities; + +public class duckEntity extends Animal { + private static final Ingredient FOOD = Ingredient.of(Items.BREAD); + + public duckEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MOVEMENT_SPEED, 0.3) + .add(Attributes.MAX_HEALTH, 5) + .add(Attributes.ARMOR, 0) + .add(Attributes.ATTACK_DAMAGE, 0) + .add(Attributes.FOLLOW_RANGE, 16) + .add(Attributes.STEP_HEIGHT, 0.6); + } + + @Override + public boolean isFood(ItemStack itemStack) { + return FOOD.test(itemStack); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new PanicGoal(this, 1.5)); + this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); + this.goalSelector.addGoal(3, new TemptGoal(this, 1.1, FOOD, false)); + this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.1)); + this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.8)); + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); + this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + } + + @Nullable + @Override + public AgeableMob getBreedOffspring(ServerLevel serverLevel, AgeableMob ageableMob) { + return ModEntities.DUCK.get().create(serverLevel); + } +} \ No newline at end of file diff --git a/src/main/java/ovh/glitchlabs/masterwild/event/ModEventBusEvents.java b/src/main/java/ovh/glitchlabs/masterwild/event/ModEventBusEvents.java index 5a8e801..848b88d 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/event/ModEventBusEvents.java +++ b/src/main/java/ovh/glitchlabs/masterwild/event/ModEventBusEvents.java @@ -13,6 +13,7 @@ import ovh.glitchlabs.masterwild.entity.client.Rooster.RoosterModel; import ovh.glitchlabs.masterwild.entity.client.Shark.SharkModel; import ovh.glitchlabs.masterwild.entity.client.butterfly.ButterflyModel; import ovh.glitchlabs.masterwild.entity.client.capibara.CapybaraModel; +import ovh.glitchlabs.masterwild.entity.client.duck.duckModel; import ovh.glitchlabs.masterwild.entity.client.firefly.FireflyModel; import ovh.glitchlabs.masterwild.entity.client.hedgehog.HedgehogModel; import ovh.glitchlabs.masterwild.entity.client.red_panda.Red_PandaModel; @@ -32,6 +33,7 @@ public class ModEventBusEvents { event.registerLayerDefinition(RaccoonModel.LAYER_LOCATION, RaccoonModel::createBodyLayer); event.registerLayerDefinition(MonkeyModel.LAYER_LOCATION, MonkeyModel::createBodyLayer); event.registerLayerDefinition(CapybaraModel.LAYER_LOCATION, CapybaraModel::createBodyLayer); + event.registerLayerDefinition(duckModel.LAYER_LOCATION, duckModel::createBodyLayer); } @SubscribeEvent @@ -45,5 +47,6 @@ public class ModEventBusEvents { event.put(ModEntities.RACCOON.get(), RaccoonEntity.createAttributes().build()); event.put(ModEntities.MONKEY.get(), MonkeyEntity.createAttributes().build()); event.put(ModEntities.CAPYBARA.get(), CapybaraEntity.createAttributes().build()); + event.put(ModEntities.DUCK.get(), duckEntity.createAttributes().build()); } } diff --git a/src/main/resources/assets/masterwild/textures/entity/duck.png b/src/main/resources/assets/masterwild/textures/entity/duck.png new file mode 100755 index 0000000000000000000000000000000000000000..99fa0f35d6cff493a3df1b0e5e131aaff1521d26 GIT binary patch literal 2343 zcmV+?3E1|DP)Prox%b?A-+kxYttWN-wr;vnZ~xdjy?yg~{nf3vTaIjTgMshbvQh84=T;3z zhUzdqrt*y)cj+;qfrYvzAe~7|HajfIWL$;@1}sMg2Mc3LN~Ma3u3C-^9>tFb_x(YA zrLVW)lTgBT`EavAYeQEc7J1NxTI5N1Yj`T0lo{XeF7s_=_KxRp& zbar(}|Cv|qD#MY%83Y{X^3?C1mBUXRmA@T4VmUH+J+_^WbDUSfVU6H*O@Qxv5|4Ybd`TeZE)*?C1{d?o zw8sT%&-j*8HgKeWIL<5JCL&VfStxt;v`r*DIeWGsubvu_p=?=BygVSe;ZVR``<~U^ z@}89$fjcY;fAI6~*4K5uBA+4#P^kvM9%dW zEk_2o!et(;_Q;cK^~uwfF~=zvPwvssWtz{r+Pl{TIrravi|#W4&5loO)Hko}(wnZm zQm?;qiN0ZZr|%f0$8XU)@7|z! zza1fi_w0H}rSE(}Iqu5As)rOrAM;6Go9|1$q9qgerE6KIbap00>yqs=NW|>nhrq$c zd(W!?Q3hwLqeq!`w8swiu#0`aswJL^qax=AMl44Lw?Y#iUb$43WgQtA)yfXeIp)Tc z%~qr>wWv4>sk6C4$Dwb$dF-D#_d3~q%cKD;niI|j;rOx)lY z4-P`CcB(BVY<<22aELNE_2@yggRp}=%GSOT$#ix|e>M+fIkFhs0!@5a@ALVhbS2_; z2jCpzVI>_eQ!3#rnD16>VMk-Pr9Tip_uxbvnFdVgqBpex>di2nz9T;{v2(gQOci@!@ zIf;iAfpY+Yqu)rH+?V(0pN^}?p8lsI6y5jxzp8)r539^=JrdurMpkV8fCL}DUXZU_ z)g|lRw^Tm3y2g=TJU67CKRu|9zSggf{ck`a(;hq6!!GuJzW*8Z=pX;C-f_ipAyEQD z2A@2jM$7gLnA|CG=rWW2fy0r{W(FKb=maagX4HtqvV}||7{Au0_gdj`-es|abW?HxauBhprI>LG9@0di*p9N8s8 zthhVyT$wmPc}mRRQDn%xIs*ekk~Aq{ek3Oqla@PuY2eTM-i~j|czWQ=dnd@QZaSR$ zecyRttPR_p+g%7haGo-`0dgT<67mCOc0tVK7hthiTuj;_P6w<}NhZ7FMpFDO@ z{qn$bW3>O76AD77QI5NQycHe34RHx@$nT5hhL@{v%6YR|aAa`G=n)Olu4iRZGJ!8` zacw!WGdvaN444XUCg%O(&`EXR*eP}R<@4&uYZu2dx`RKvN*qRpN2W(T82YsP?&JSa zd%xH&@E>KU|hJap2;EV(R=dytEY}0CpB(HE-+~bZxQWh za5Bmj^?SD+v)9!)Il11+Tw$Yk=eJ)`GwC_~W_{~j|5NcPCt$oHPL7wSE7zm9AajA~ z9GVY&LFNK;?I`~>=F_+JXvoI;o7d^x_kGk7ffD_ZBaA2hX9(1^T!2B%73p|Pl!sVI`2-}ylT3G~aOYn#+ntzSnRK_UqfN%Y0yqxgD2_u-$psj|ToN(;BL|Ku?)-oK z=i@fsC-x`KfB5mgD3>3QBRB$s(3#7z)MIPTcR)RzE+n1S1T3W0XvSDtJD?e}zL5HC z?SO@}8gnt0s5V+VAnJ@QHvQHPSZpgA)t}Z5h&p47O~17R7TbzO^{2H1qR!Z2({Js7 z#kQhR{b}uhs57?M^jkaN?Y^S39sipE00960E+sW=00006Nkl