From bf2b5dc8c40f05cdfa85c9a40eeabe3baf0bedbb Mon Sep 17 00:00:00 2001 From: ian1337 Date: Sun, 27 Sep 2026 20:50:58 +0200 Subject: [PATCH] [add] Raccoon --- .../6143fb1502ae754d8039ff811e28c49eaa7e6409 | 4 +- .../d1416cf72769a6a520cc2c44944968403e1a0de7 | 3 +- .../assets/masterwild/lang/en_us.json | 2 + .../models/item/raccoon_spawn_egg.json | 3 + .../masterwild/Item/ModCreativeModeTabs.java | 1 + .../glitchlabs/masterwild/Item/ModItems.java | 5 +- .../ovh/glitchlabs/masterwild/Masterwild.java | 2 + .../datagen/ModItemModelProvider.java | 1 + .../datagen/ModLanguageProvider.java | 2 + .../masterwild/entity/ModEntities.java | 4 + .../entity/client/Raccoon/RaccoonModel.java | 104 ++++++++++++++++++ .../client/Raccoon/RaccoonRenderer.java | 21 ++++ .../entity/custom/RaccoonEntity.java | 74 +++++++++++++ .../masterwild/event/ModEventBusEvents.java | 4 +- .../masterwild/textures/entity/raccoon.png | Bin 0 -> 4064 bytes 15 files changed, 225 insertions(+), 5 deletions(-) create mode 100644 src/generated/resources/assets/masterwild/models/item/raccoon_spawn_egg.json create mode 100755 src/main/java/ovh/glitchlabs/masterwild/entity/client/Raccoon/RaccoonModel.java create mode 100644 src/main/java/ovh/glitchlabs/masterwild/entity/client/Raccoon/RaccoonRenderer.java create mode 100644 src/main/java/ovh/glitchlabs/masterwild/entity/custom/RaccoonEntity.java create mode 100755 src/main/resources/assets/masterwild/textures/entity/raccoon.png diff --git a/src/generated/resources/.cache/6143fb1502ae754d8039ff811e28c49eaa7e6409 b/src/generated/resources/.cache/6143fb1502ae754d8039ff811e28c49eaa7e6409 index d83ff05..a382ce3 100644 --- a/src/generated/resources/.cache/6143fb1502ae754d8039ff811e28c49eaa7e6409 +++ b/src/generated/resources/.cache/6143fb1502ae754d8039ff811e28c49eaa7e6409 @@ -1,2 +1,2 @@ -// 1.21.1 2026-09-27T17:00:27.22897813 Languages: en_us for mod: masterwild -ebd07de03f9ce5f9b4a4e4fbf79b5da4377bb20d assets/masterwild/lang/en_us.json +// 1.21.1 2026-09-27T20:26:19.448921416 Languages: en_us for mod: masterwild +dbb49d790ec7f13dec78bc8b156cf7d37931bad9 assets/masterwild/lang/en_us.json diff --git a/src/generated/resources/.cache/d1416cf72769a6a520cc2c44944968403e1a0de7 b/src/generated/resources/.cache/d1416cf72769a6a520cc2c44944968403e1a0de7 index 9403a9e..487e639 100644 --- a/src/generated/resources/.cache/d1416cf72769a6a520cc2c44944968403e1a0de7 +++ b/src/generated/resources/.cache/d1416cf72769a6a520cc2c44944968403e1a0de7 @@ -1,10 +1,11 @@ -// 1.21.1 2026-09-27T17:02:03.242230507 Item Models: masterwild +// 1.21.1 2026-09-27T20:26:19.449663992 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/firefly_spawn_egg.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/hedgehog_spawn_egg.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/pinguin_spawn_egg.json +63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/raccoon_spawn_egg.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/red-panda_spawn_egg.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/rooster_spawn_egg.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/shark_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 1403130..ad3402c 100644 --- a/src/generated/resources/assets/masterwild/lang/en_us.json +++ b/src/generated/resources/assets/masterwild/lang/en_us.json @@ -4,6 +4,7 @@ "entity.masterwild.firefly": "Firefly", "entity.masterwild.hedgehog": "Hedgehog", "entity.masterwild.pinguin": "Pinguin", + "entity.masterwild.raccoon": "Raccoon", "entity.masterwild.red_panda": "Red Panda", "entity.masterwild.rooster": "Rooster", "entity.masterwild.shark": "Shark", @@ -13,6 +14,7 @@ "item.masterwild.firefly_spawn_egg": "Firefly Spawn Egg", "item.masterwild.hedgehog_spawn_egg": "Hedgehog Spawn Egg", "item.masterwild.pinguin_spawn_egg": "Pinguin Spawn Egg", + "item.masterwild.raccoon_spawn_egg": "Raccoon Spawn Egg", "item.masterwild.red-panda_spawn_egg": "Red Panda Spawn Egg", "item.masterwild.rooster_spawn_egg": "Rooster Spawn Egg", "item.masterwild.shark_spawn_egg": "Shark Spawn Egg", diff --git a/src/generated/resources/assets/masterwild/models/item/raccoon_spawn_egg.json b/src/generated/resources/assets/masterwild/models/item/raccoon_spawn_egg.json new file mode 100644 index 0000000..d1aaa9d --- /dev/null +++ b/src/generated/resources/assets/masterwild/models/item/raccoon_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 7ae1214..6eac6e6 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/Item/ModCreativeModeTabs.java +++ b/src/main/java/ovh/glitchlabs/masterwild/Item/ModCreativeModeTabs.java @@ -29,6 +29,7 @@ public class ModCreativeModeTabs { output.accept(ModItems.HEDGEHOG_SPAWN_EGG); output.accept(ModItems.RED_PANDA_SPAWN_EGG); output.accept(ModItems.BUTTERFLY_SPAWN_EGG); + output.accept(ModItems.RACCOON_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 40868f5..7bfe900 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/Item/ModItems.java +++ b/src/main/java/ovh/glitchlabs/masterwild/Item/ModItems.java @@ -44,7 +44,10 @@ public class ModItems { () -> new DeferredSpawnEggItem(ModEntities.RED_PANDA, 0x923918, 0x211b1b, new Item.Properties())); public static final DeferredItem BUTTERFLY_SPAWN_EGG = ITEMS.register("butterfly_spawn_egg", - () -> new DeferredSpawnEggItem(ModEntities.BUTTERFLY, 0x923918, 0x0b0b17, + () -> new DeferredSpawnEggItem(ModEntities.BUTTERFLY, 0x372a21, 0x0b0b17, + new Item.Properties())); + public static final DeferredItem RACCOON_SPAWN_EGG = ITEMS.register("raccoon_spawn_egg", + () -> new DeferredSpawnEggItem(ModEntities.RACCOON, 0x68696a, 0xa6a4a3, new Item.Properties())); public static void register(IEventBus eventBus) { diff --git a/src/main/java/ovh/glitchlabs/masterwild/Masterwild.java b/src/main/java/ovh/glitchlabs/masterwild/Masterwild.java index f885663..baf23cf 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/Masterwild.java +++ b/src/main/java/ovh/glitchlabs/masterwild/Masterwild.java @@ -20,6 +20,7 @@ import ovh.glitchlabs.masterwild.Item.ModItems; import ovh.glitchlabs.masterwild.Sounds.ModSounds; import ovh.glitchlabs.masterwild.entity.ModEntities; import ovh.glitchlabs.masterwild.entity.client.Pinguin.PinguinRenderer; +import ovh.glitchlabs.masterwild.entity.client.Raccoon.RaccoonRenderer; import ovh.glitchlabs.masterwild.entity.client.Rooster.RoosterRenderer; import ovh.glitchlabs.masterwild.entity.client.Shark.SharkRenderer; import ovh.glitchlabs.masterwild.entity.client.butterfly.ButterflyRenderer; @@ -80,6 +81,7 @@ public class Masterwild { EntityRenderers.register(ModEntities.HEDGEHOG.get(), HedgehogRenderer::new); EntityRenderers.register(ModEntities.RED_PANDA.get(), Red_PandaRenderer::new); EntityRenderers.register(ModEntities.BUTTERFLY.get(), ButterflyRenderer::new); + EntityRenderers.register(ModEntities.RACCOON.get(), RaccoonRenderer::new); } } } diff --git a/src/main/java/ovh/glitchlabs/masterwild/datagen/ModItemModelProvider.java b/src/main/java/ovh/glitchlabs/masterwild/datagen/ModItemModelProvider.java index 2fe8666..2032ea8 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/datagen/ModItemModelProvider.java +++ b/src/main/java/ovh/glitchlabs/masterwild/datagen/ModItemModelProvider.java @@ -28,5 +28,6 @@ public class ModItemModelProvider extends ItemModelProvider { withExistingParent(ModItems.HEDGEHOG_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg")); withExistingParent(ModItems.RED_PANDA_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg")); withExistingParent(ModItems.BUTTERFLY_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg")); + withExistingParent(ModItems.RACCOON_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 6815eff..c785401 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/datagen/ModLanguageProvider.java +++ b/src/main/java/ovh/glitchlabs/masterwild/datagen/ModLanguageProvider.java @@ -24,6 +24,7 @@ public class ModLanguageProvider extends LanguageProvider { add(ModEntities.HEDGEHOG.get(), "Hedgehog"); add(ModEntities.RED_PANDA.get(), "Red Panda"); add(ModEntities.BUTTERFLY.get(), "Butterfly"); + add(ModEntities.RACCOON.get(), "Raccoon"); add(ModItems.PINGUIN_SPAWN_EGG.get(), "Pinguin Spawn Egg"); add(ModItems.FIREFLY_SPAWN_EGG.get(), "Firefly Spawn Egg"); @@ -32,6 +33,7 @@ public class ModLanguageProvider extends LanguageProvider { add(ModItems.HEDGEHOG_SPAWN_EGG.get(), "Hedgehog Spawn Egg"); add(ModItems.RED_PANDA_SPAWN_EGG.get(), "Red Panda Spawn Egg"); add(ModItems.BUTTERFLY_SPAWN_EGG.get(), "Butterfly Spawn Egg"); + add(ModItems.RACCOON_SPAWN_EGG.get(), "Raccoon Spawn Egg"); add("creativetab.masterwild.masterwild", "MasterWild"); add("subtitles.masterwild.rooster_crow", "Rooster crows"); diff --git a/src/main/java/ovh/glitchlabs/masterwild/entity/ModEntities.java b/src/main/java/ovh/glitchlabs/masterwild/entity/ModEntities.java index f0162f1..3a0099e 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/entity/ModEntities.java +++ b/src/main/java/ovh/glitchlabs/masterwild/entity/ModEntities.java @@ -42,6 +42,10 @@ public class ModEntities { ENTITY_TYPES.register("butterfly", () -> EntityType.Builder.of(ButterflyEntity::new, MobCategory.AMBIENT) .sized(0.6f, 0.7f).build("butterfly")); + public static final Supplier> RACCOON = + ENTITY_TYPES.register("raccoon", () -> EntityType.Builder.of(RaccoonEntity::new, MobCategory.CREATURE) + .sized(0.6f, 0.5f).build("raccoon")); + public static void register(IEventBus eventBus) { ENTITY_TYPES.register(eventBus); diff --git a/src/main/java/ovh/glitchlabs/masterwild/entity/client/Raccoon/RaccoonModel.java b/src/main/java/ovh/glitchlabs/masterwild/entity/client/Raccoon/RaccoonModel.java new file mode 100755 index 0000000..408d622 --- /dev/null +++ b/src/main/java/ovh/glitchlabs/masterwild/entity/client/Raccoon/RaccoonModel.java @@ -0,0 +1,104 @@ +package ovh.glitchlabs.masterwild.entity.client.Raccoon;// Made with Blockbench 5.2.0 +// Exported for Minecraft version 1.17 or later with Mojang mappings + +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.RaccoonEntity; + +public class RaccoonModel extends HierarchicalModel { + public static final ModelLayerLocation LAYER_LOCATION = + new ModelLayerLocation(ResourceLocation.fromNamespaceAndPath(Masterwild.MODID, "raccoon"), "main"); + + private final ModelPart root; + private final ModelPart raccoon; + private final ModelPart body; + private final ModelPart R_back_leg; + private final ModelPart L_back_leg; + private final ModelPart R_frond_leg; + private final ModelPart L_frond_leg; + private final ModelPart body2; + private final ModelPart head; + private final ModelPart tail; + + public RaccoonModel(ModelPart root) { + this.root = root; + this.raccoon = root.getChild("raccoon"); + this.body = this.raccoon.getChild("body"); + this.R_back_leg = this.body.getChild("R_back_leg"); + this.L_back_leg = this.body.getChild("L_back_leg"); + this.R_frond_leg = this.body.getChild("R_frond_leg"); + this.L_frond_leg = this.body.getChild("L_frond_leg"); + this.body2 = this.body.getChild("body2"); + this.head = this.raccoon.getChild("head"); + this.tail = this.raccoon.getChild("tail"); + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition raccoon = partdefinition.addOrReplaceChild("raccoon", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F)); + + PartDefinition body = raccoon.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.offset(0.5F, -4.0F, -1.0F)); + + PartDefinition R_back_leg = body.addOrReplaceChild("R_back_leg", CubeListBuilder.create().texOffs(0, 33).addBox(-1.5F, 0.0F, -1.5F, 3.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offset(-2.5F, 0.0F, 6.5F)); + + PartDefinition L_back_leg = body.addOrReplaceChild("L_back_leg", CubeListBuilder.create().texOffs(32, 29).addBox(-1.5F, 0.0F, -1.5F, 3.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offset(1.5F, 0.0F, 6.5F)); + + PartDefinition R_frond_leg = body.addOrReplaceChild("R_frond_leg", CubeListBuilder.create().texOffs(32, 36).addBox(-1.0F, 0.0F, -1.0F, 2.0F, 4.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(-2.75F, 0.0F, -2.75F)); + + PartDefinition L_frond_leg = body.addOrReplaceChild("L_frond_leg", CubeListBuilder.create().texOffs(24, 33).addBox(-1.0F, 0.0F, -1.0F, 2.0F, 4.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(1.75F, 0.0F, -2.75F)); + + PartDefinition body2 = body.addOrReplaceChild("body2", CubeListBuilder.create().texOffs(0, 0).addBox(-3.5F, -2.5F, -6.0F, 7.0F, 5.0F, 12.0F, new CubeDeformation(0.0F)), PartPose.offset(-0.5F, -2.5F, 2.0F)); + + PartDefinition head = raccoon.addOrReplaceChild("head", CubeListBuilder.create().texOffs(12, 33).addBox(-1.5F, 0.5F, -9.125F, 3.0F, 2.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(32, 17).addBox(-4.5F, -3.5F, -6.125F, 9.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(38, 0).addBox(-4.5F, -5.5F, -2.125F, 2.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(38, 3).addBox(2.5F, -5.5F, -2.125F, 2.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -6.5F, -4.875F)); + + PartDefinition tail = raccoon.addOrReplaceChild("tail", CubeListBuilder.create().texOffs(0, 17).addBox(-3.0F, -3.0F, 0.0F, 6.0F, 6.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -8.0F, 7.0F)); + + return LayerDefinition.create(meshdefinition, 64, 64); + } + + @Override + public void setupAnim(RaccoonEntity 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_frond_leg.xRot = Mth.cos(limbSwing * 0.6662F) * amount; + this.L_back_leg.xRot = Mth.cos(limbSwing * 0.6662F) * amount; + this.L_frond_leg.xRot = Mth.cos(limbSwing * 0.6662F + (float) Math.PI) * amount; + this.R_back_leg.xRot = Mth.cos(limbSwing * 0.6662F + (float) Math.PI) * amount; + this.tail.yRot = Mth.cos(limbSwing * 0.3331F) * 0.2F * amount; + } + + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, int color) { + root.render(poseStack, vertexConsumer, packedLight, packedOverlay, color); + } + + @Override + public ModelPart root() { + return root; + } +} \ No newline at end of file diff --git a/src/main/java/ovh/glitchlabs/masterwild/entity/client/Raccoon/RaccoonRenderer.java b/src/main/java/ovh/glitchlabs/masterwild/entity/client/Raccoon/RaccoonRenderer.java new file mode 100644 index 0000000..1ffd8e6 --- /dev/null +++ b/src/main/java/ovh/glitchlabs/masterwild/entity/client/Raccoon/RaccoonRenderer.java @@ -0,0 +1,21 @@ +package ovh.glitchlabs.masterwild.entity.client.Raccoon; + +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.RaccoonEntity; + +public class RaccoonRenderer extends MobRenderer> { + private static final ResourceLocation TEXTURE = + ResourceLocation.fromNamespaceAndPath(Masterwild.MODID, "textures/entity/raccoon.png"); + + public RaccoonRenderer(EntityRendererProvider.Context context) { + super(context, new RaccoonModel<>(context.bakeLayer(RaccoonModel.LAYER_LOCATION)), 0.4f); + } + + @Override + public ResourceLocation getTextureLocation(RaccoonEntity entity) { + return TEXTURE; + } +} \ No newline at end of file diff --git a/src/main/java/ovh/glitchlabs/masterwild/entity/custom/RaccoonEntity.java b/src/main/java/ovh/glitchlabs/masterwild/entity/custom/RaccoonEntity.java new file mode 100644 index 0000000..065a2bf --- /dev/null +++ b/src/main/java/ovh/glitchlabs/masterwild/entity/custom/RaccoonEntity.java @@ -0,0 +1,74 @@ +package ovh.glitchlabs.masterwild.entity.custom; + +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.damagesource.DamageSource; +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 RaccoonEntity extends Animal { + private static final Ingredient FOOD = Ingredient.of(Items.SWEET_BERRIES, Items.APPLE, Items.BREAD); + + public RaccoonEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 6) + .add(Attributes.MOVEMENT_SPEED, 0.25) + .add(Attributes.FOLLOW_RANGE, 10) + .add(Attributes.STEP_HEIGHT, 0.6); + } + + @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)); + } + + @Override + public boolean isFood(ItemStack stack) { + return FOOD.test(stack); + } + + @Nullable + @Override + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob partner) { + return ModEntities.RACCOON.get().create(level); + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.FOX_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.FOX_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.FOX_DEATH; + } +} \ 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 49ade73..0ab1110 100644 --- a/src/main/java/ovh/glitchlabs/masterwild/event/ModEventBusEvents.java +++ b/src/main/java/ovh/glitchlabs/masterwild/event/ModEventBusEvents.java @@ -7,6 +7,7 @@ import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent; import ovh.glitchlabs.masterwild.Masterwild; import ovh.glitchlabs.masterwild.entity.ModEntities; import ovh.glitchlabs.masterwild.entity.client.Pinguin.PinguinModel; +import ovh.glitchlabs.masterwild.entity.client.Raccoon.RaccoonModel; import ovh.glitchlabs.masterwild.entity.client.Rooster.RoosterModel; import ovh.glitchlabs.masterwild.entity.client.Shark.SharkModel; import ovh.glitchlabs.masterwild.entity.client.butterfly.ButterflyModel; @@ -26,6 +27,7 @@ public class ModEventBusEvents { event.registerLayerDefinition(HedgehogModel.LAYER_LOCATION, HedgehogModel::createBodyLayer); event.registerLayerDefinition(Red_PandaModel.LAYER_LOCATION, Red_PandaModel::createBodyLayer); event.registerLayerDefinition(ButterflyModel.LAYER_LOCATION, ButterflyModel::createBodyLayer); + event.registerLayerDefinition(RaccoonModel.LAYER_LOCATION, RaccoonModel::createBodyLayer); } @SubscribeEvent @@ -36,6 +38,6 @@ public class ModEventBusEvents { event.put(ModEntities.SHARK.get(), SharkEntity.createAttributes().build()); event.put(ModEntities.HEDGEHOG.get(), HedgehogEntity.createAttributes().build()); event.put(ModEntities.RED_PANDA.get(), Red_PandaEntity.createAttributes().build()); - event.put(ModEntities.BUTTERFLY.get(), ButterflyEntity.createAttributes().build()); + event.put(ModEntities.RACCOON.get(), RaccoonEntity.createAttributes().build()); } } diff --git a/src/main/resources/assets/masterwild/textures/entity/raccoon.png b/src/main/resources/assets/masterwild/textures/entity/raccoon.png new file mode 100755 index 0000000000000000000000000000000000000000..bbb074aeb4940d2030655441985075beac66729e GIT binary patch literal 4064 zcmV<64Zkzf*XC!~|^bf@p`x8LvUG!qyM-4GdvN>_j0 z`F-E_zTfwK-*@~pr1_gU>t4BZ*%Db+_LwZ4H(z1V;vdS@tC!3B?wc*=&3jNTTsTkO zfBzhXIdf)9Mw;Cy^3|(X5#LpE;g5fzpb7^d$SW8nlSo?ud3jD6f`o(ytJQ>2qY9zx z8hpMmqy$2tFk-Pd;_*0Q1WnVxphju^w{G1g?ey|1)qv^KZ$)ON6DE@pd3go6 z@x~hw2n0yj7?qiz)9ec&U@#a}{&JSUbI<)+27^9YTHPql@(<_|=&O~q6=0$z(A3n3 zXe@@aXV0RhriNzR4>tR7II65cl81;!BjgW)q?CBy{!&h}$wy-bc)S`qI-$&;%Ti{L zB4OGJC@3hP^_~MZZ;Qo>{QM#4>gt3LQq8!l{lL{wSlSBULAAHH^_o3ku{sbAhsYlc<0`csvJyBWG@blm zoGit}+3zH@($Z4NSh{SneCnx{^6|$PDR8>1Y>_Hkv*zb=&6eZLK>|@a65G)2=~O#HPHrv=3i2_O93&&dVpsVjuTr`{l$AX$mo8f>pLpU&^5I98 zshHD!akaFi`2!)ew7JpL+<~uan&A(`XkA<3a&?hs&nDsQXlQ7JzsIk}6byyPxru)3 zj7CyRG>kwX(WZlVg~Eb%i~xH4euTo|^LSm1UJ+b{KoiiRQy7iL>Chr+%L>!!D>3l) z_HO995nfN62Jgn{ubXkIx{ZjH{Tu2+v?OBj7%4M^_VzA1$9Gcff!osquQ!C| z=Cf#O>Nv+MNpChAz{+ZF>BQCgY5t&}*0EU$-{JD1wXGXfr`mA3<}A)MwBy+E6L4f{ zXz%DoyDKrU+PYRW)VHIquI4Z5>ZwgLU0iBv+vu(kKrob;ZLco?Uyl#8NvOVpq$C!S zd3n11^7oUw{YHvbkr;oP67`ohEvJ{Q@83{TqqcHI`!QrqVLJCOoYG`ng zb+zGSRRhds6NVS%<7)l1PY-`A_U-$V*u86q_~3*0#DV?g;v>SYT|32x+dmZLLEDm0&Qp{}7-!QJjwbuqdSY0)TLoo*aCv|k+i^kc#C!2`P$&yNr8QM^8Q z|2?WZB+7ShS6~{(7so3U{X1`O5l=t;wEX$gPs!!~uv|XB_TS~^jW4U1%NSgL=d|yW z!~U`S=}&(q7c5vxk2GZpGiTnf@-t@4k(W}Wb}53s^&YzBCiAWC?qm|*ls-prnF+ER z1Oq`-etjBy4;;j2Cr>C&T+RuHBTJn`+uB^@tZlT64CKQ=H`F0?8nwV?voTq}NLc|Z zo>+$4{%!&$PPrNP%)SjXrcK1XKbQ_KU$%G_<}P^Pyz+i~O|jBVM{OG|iEvMVtg0I! ze;6b4v(L4j`@kHy-9DA~`Fd2W)A5^Ow_9WQDB<CRN7i@*Nebj?-Lzsg5sI zpOuvji^T$HCOEU~C@RdQ!&NS%PG!`%rKJ%bQW87O8^(`=!C;_eU_qSTBS#buhk=yk zbn-ogi2M1ctN`Xw=*;9uA(gZuyv)GU?NTjs^M|85prNVN1KpAjgQ-_2EsD>-sDhDp zt*TR}5hLfzcaA_Xi28;GTK^e1aHe^!dDG(q43Rv|vo}P*^QS zWYe}RVim9G8yB?l_0;M2zEyvG~KD%aoaFGzWDt;;0GJtDHtssT}XoS z46aw5QjoF&DnCDt>XTohw)zyhTrPOKyW#3`<7nlVly65>oRv^53kturnX&1+gZV6|CQU43)Aiqi?=^nS4A?YD5IzCkt1 z$grun^2^WQ@^-7V$J+^q&8+fV-r40ROG(h}+*OXRzWNHxCmg1MsTQdP+UT)2$vdV_ zlg~W!j9j(yNjYJ{6glmVJLR*_J|~wiUo9uyc8{ET>)le5acJ}e5~QuE+wB48qrD2? zuCnQ&lFzfH{K}ksoh7K)6 zB*JHgP9D-X!qxfbdaclzsR$d+Bnq9543+O2_{kv&65c?E3?T$GU8j3PqMe(B#Rb2i zxej$cNb*edA(3G+s%=Wr3z3=9%$J*P+_Z@!1r~;dy6yIxv1ri)m^|fr5-Nt%ryEs$ z$@sB&H${viMgN@r8M3*P1oSM7S1s2dBj=)Gl zYxJFusab$9-SRSZ&Oy;|>d+@g!R;B$t9ay}*CLxIe@kFGdNo(y4NU^rzI}&aJpAZm z;=`TWaOlWKG?Q6~#UixL9fy@JX`41}5!<%CFJ681O|fp>i{eL5{6wr@|B86!m6rv# zOX8h(-Vuz0AMF=w*RK6Wa6ONMq47DM(dp{Jv7=Q8kg$C1t*4itZo0oS5hE$QP6rM_ ziU{{UYH%H+t+f*&di3D7%!6m2!MquQ-W>QYEJ$dk=K~AJeNj|2j0CpO5(tyMY4Cde zgv1fIFWo?gg4U!D+5zxg|L}RvsT~K_Uv>z*XnaMZ1dAnXU4?M6Me7T}_>Kdq9p2dVEOBc%}OP470vK+8T zOMWMR@BPhU;-sO}*=)?4KLf)@I8ab%z%4fpr@Q@Lx~K0I$12Lj?tMGOzJulB(Bb`J z-n=;&GbRTMOJ}2Sm=n2q7R-HM7MLgVV{n@B>({qn?Q5Iyz3*Lzv15nh^Uo{97so#l zCbBTA)k5DC{ct)Hj+Jk7x~|cQFN!X=pAI%|a)c3u0h7F!QDRDaGyJv3WHM7nVY1K| z*jYtrwtB1oGKvK;qIe7nhvcfd>CD1(+jeNmL@M58y&P5ieLZ(jR*JryJpBc?wl_7?yJC#o%^w8?_mT(F=!$V zqfwk2ED!i6E1r}utzWOe;CR!dIgrhNX#*4oduYaLRwTui4T|G0&EOnawm~v2#Ob7h5 z{vuHgt!*7D&1;cyA%jchU)``l?BBPCUVr~2_LlDwY}$;ZdB^B8x`oz!T+&^G4p?lB z4*K+Nwc1p_m*Rh=^;-GvoiwH;A1`-)`_pOPXL_~(O<6*mUW5W% z^sVBru7GXtZWZrt{Ud?ntz>Om#2@KW^X40Giubm?+y5Rs0IK<`D_{U*xFQyV3b-Qm zT?35=E#MlM#PdW*H#2Af>1ym+qaU<@Yi&l;m1ocb($(0tMn7l)*V>GxE6<<>q^q%O zjegJquC*CWSDrx&NLORm8vURJ{H@REm5%@a0RRC1{{ar}X#fBK21!IgR09B81-t6& SOI