[add] Hedgehog

This commit is contained in:
2026-09-25 19:47:32 +02:00
parent 62625bc72a
commit 35e0461c62
16 changed files with 363 additions and 11 deletions
@@ -28,6 +28,7 @@ public class ModCreativeModeTabs {
output.accept(ModItems.FIREFLY_SPAWN_EGG);
output.accept(ModItems.ROOSTER_SPAWN_EGG);
output.accept(ModItems.SHARK_SPAWN_EGG);
output.accept(ModItems.HEDGEHOG_SPAWN_EGG);
}).build());
@@ -26,6 +26,9 @@ public class ModItems {
public static final DeferredItem<Item> SHARK_SPAWN_EGG = ITEMS.register("shark_spawn_egg",
() -> new DeferredSpawnEggItem(ModEntities.SHARK, 0x1d598b, 0x8daec4,
new Item.Properties()));
public static final DeferredItem<Item> HEDGEHOG_SPAWN_EGG = ITEMS.register("hedgehog_spawn_egg",
() -> new DeferredSpawnEggItem(ModEntities.HEDGEHOG, 0x372a21, 0x8f8973,
new Item.Properties()));
public static void register(IEventBus eventBus) {
ITEMS.register(eventBus);
@@ -23,6 +23,7 @@ import ovh.glitchlabs.masterwild.entity.client.Pinguin.PinguinRenderer;
import ovh.glitchlabs.masterwild.entity.client.Rooster.RoosterRenderer;
import ovh.glitchlabs.masterwild.entity.client.Shark.SharkRenderer;
import ovh.glitchlabs.masterwild.entity.client.firefly.FireflyRenderer;
import ovh.glitchlabs.masterwild.entity.client.hedgehog.HedgehogRenderer;
// The value here should match an entry in the META-INF/neoforge.mods.toml file
@Mod(Masterwild.MODID)
@@ -74,6 +75,7 @@ public class Masterwild {
EntityRenderers.register(ModEntities.FIREFLY.get(), FireflyRenderer::new);
EntityRenderers.register(ModEntities.ROOSTER.get(), RoosterRenderer::new);
EntityRenderers.register(ModEntities.SHARK.get(), SharkRenderer::new);
EntityRenderers.register(ModEntities.HEDGEHOG.get(), HedgehogRenderer::new);
}
}
}
@@ -18,5 +18,6 @@ public class ModItemModelProvider extends ItemModelProvider {
withExistingParent(ModItems.FIREFLY_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg"));
withExistingParent(ModItems.ROOSTER_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg"));
withExistingParent(ModItems.SHARK_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg"));
withExistingParent(ModItems.HEDGEHOG_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg"));
}
}
@@ -18,11 +18,13 @@ public class ModLanguageProvider extends LanguageProvider {
add(ModEntities.FIREFLY.get(), "Firefly");
add(ModEntities.ROOSTER.get(), "Rooster");
add(ModEntities.SHARK.get(), "Shark");
add(ModEntities.HEDGEHOG.get(), "Hedgehog");
add(ModItems.PINGUIN_SPAWN_EGG.get(), "Pinguin Spawn Egg");
add(ModItems.FIREFLY_SPAWN_EGG.get(), "Firefly Spawn Egg");
add(ModItems.ROOSTER_SPAWN_EGG.get(), "Rooster Spawn Egg");
add(ModItems.SHARK_SPAWN_EGG.get(), "Shark Spawn Egg");
add(ModItems.HEDGEHOG_SPAWN_EGG.get(), "Hedgehog Spawn Egg");
add("creativetab.masterwild.masterwild", "MasterWild");
add("subtitles.masterwild.rooster_crow", "Rooster crows");
@@ -6,10 +6,7 @@ import net.minecraft.world.entity.MobCategory;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredRegister;
import ovh.glitchlabs.masterwild.Masterwild;
import ovh.glitchlabs.masterwild.entity.custom.FireflyEntity;
import ovh.glitchlabs.masterwild.entity.custom.PinguinEntity;
import ovh.glitchlabs.masterwild.entity.custom.RoosterEntity;
import ovh.glitchlabs.masterwild.entity.custom.SharkEntity;
import ovh.glitchlabs.masterwild.entity.custom.*;
import java.util.function.Supplier;
@@ -33,6 +30,10 @@ public class ModEntities {
ENTITY_TYPES.register("shark", () -> EntityType.Builder.of(SharkEntity::new, MobCategory.WATER_CREATURE)
.sized(1.6f, 0.8f).build("shark"));
public static final Supplier<EntityType<HedgehogEntity>> HEDGEHOG =
ENTITY_TYPES.register("hedgehog", () -> EntityType.Builder.of(HedgehogEntity::new, MobCategory.CREATURE)
.sized(0.5f, 0.4f).build("hedgehog"));
public static void register(IEventBus eventBus) {
@@ -0,0 +1,58 @@
package ovh.glitchlabs.masterwild.entity.client.hedgehog;// Save this class in your mod and generate all required imports
import net.minecraft.client.animation.AnimationChannel;
import net.minecraft.client.animation.AnimationDefinition;
import net.minecraft.client.animation.Keyframe;
import net.minecraft.client.animation.KeyframeAnimations;
/**
* Made with Blockbench 5.2.0
* Exported for Minecraft version 1.19 or later with Mojang mappings
* @author Author
*/
public class HedgehogAnimation {
public static final AnimationDefinition hedgehog_walking = AnimationDefinition.Builder.withLength(0.75F).looping()
.addAnimation("body2", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, 0.0F, -2.5F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 3.33F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
))
.addAnimation("body2", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.75F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
))
.addAnimation("body2", new AnimationChannel(AnimationChannel.Targets.SCALE,
new Keyframe(0.0F, KeyframeAnimations.scaleVec(1.0F, 1.0F, 1.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.75F, KeyframeAnimations.scaleVec(1.0F, 1.0F, 1.0F), AnimationChannel.Interpolations.CATMULLROM)
))
.addAnimation("R", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
))
.addAnimation("R", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.375F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.5417F, KeyframeAnimations.posVec(0.0F, 0.25F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.75F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
))
.addAnimation("R", new AnimationChannel(AnimationChannel.Targets.SCALE,
new Keyframe(0.0F, KeyframeAnimations.scaleVec(1.0F, 1.0F, 1.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.75F, KeyframeAnimations.scaleVec(1.0F, 1.0F, 1.0F), AnimationChannel.Interpolations.CATMULLROM)
))
.addAnimation("L", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
))
.addAnimation("L", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.2083F, KeyframeAnimations.posVec(0.0F, 0.25F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.375F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.75F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
))
.addAnimation("L", new AnimationChannel(AnimationChannel.Targets.SCALE,
new Keyframe(0.0F, KeyframeAnimations.scaleVec(1.0F, 1.0F, 1.0F), AnimationChannel.Interpolations.CATMULLROM),
new Keyframe(0.75F, KeyframeAnimations.scaleVec(1.0F, 1.0F, 1.0F), AnimationChannel.Interpolations.CATMULLROM)
))
.build();
}
@@ -0,0 +1,176 @@
package ovh.glitchlabs.masterwild.entity.client.hedgehog;// 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.EntityModel;
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.client.Pinguin.PinguinAnimation;
import ovh.glitchlabs.masterwild.entity.custom.HedgehogEntity;
import ovh.glitchlabs.masterwild.entity.custom.PinguinEntity;
import ovh.glitchlabs.masterwild.entity.custom.RoosterEntity;
public class HedgehogModel<T extends HedgehogEntity> extends HierarchicalModel<T> {
// 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, "hedgehog"), "main");
private final ModelPart Hedgehog;
private final ModelPart body;
private final ModelPart legs;
private final ModelPart L;
private final ModelPart R;
private final ModelPart body2;
private final ModelPart spikes;
private final ModelPart ears;
private final ModelPart nose;
public HedgehogModel(ModelPart root) {
this.Hedgehog = root.getChild("Hedgehog");
this.body = this.Hedgehog.getChild("body");
this.legs = this.body.getChild("legs");
this.L = this.legs.getChild("L");
this.R = this.legs.getChild("R");
this.body2 = this.body.getChild("body2");
this.spikes = this.body2.getChild("spikes");
this.ears = this.body2.getChild("ears");
this.nose = this.body2.getChild("nose");
}
public static LayerDefinition createBodyLayer() {
MeshDefinition meshdefinition = new MeshDefinition();
PartDefinition partdefinition = meshdefinition.getRoot();
PartDefinition Hedgehog = partdefinition.addOrReplaceChild("Hedgehog", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F));
PartDefinition body = Hedgehog.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0F, 0.0F));
PartDefinition legs = body.addOrReplaceChild("legs", CubeListBuilder.create(), PartPose.offset(1.75F, 0.0F, 3.75F));
PartDefinition L = legs.addOrReplaceChild("L", CubeListBuilder.create().texOffs(8, 16).addBox(-1.0F, -0.5F, 1.75F, 2.0F, 1.0F, 2.0F, new CubeDeformation(0.0F))
.texOffs(8, 13).addBox(-1.0F, -0.5F, -3.75F, 2.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -0.5F, -2.75F));
PartDefinition R = legs.addOrReplaceChild("R", CubeListBuilder.create().texOffs(16, 13).addBox(-1.0F, -0.5F, -3.75F, 2.0F, 1.0F, 2.0F, new CubeDeformation(0.0F))
.texOffs(16, 16).addBox(-1.0F, -0.5F, 1.75F, 2.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(-3.5F, -0.5F, -2.75F));
PartDefinition body2 = body.addOrReplaceChild("body2", CubeListBuilder.create().texOffs(0, 0).addBox(-3.0F, -5.5F, -3.0F, 6.0F, 5.0F, 8.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F));
PartDefinition spikes = body2.addOrReplaceChild("spikes", CubeListBuilder.create(), PartPose.offset(2.75F, -1.0F, 1.5F));
PartDefinition cube_r1 = spikes.addOrReplaceChild("cube_r1", CubeListBuilder.create().texOffs(8, 25).addBox(-1.0F, -1.0F, 0.0F, 1.0F, 1.0F, 0.0F, new CubeDeformation(0.0F))
.texOffs(22, 24).addBox(-3.0F, -1.0F, 0.0F, 1.0F, 1.0F, 0.0F, new CubeDeformation(0.0F))
.texOffs(0, 25).addBox(1.0F, -1.0F, 0.0F, 1.0F, 1.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-2.25F, -4.5F, -4.0F, -1.3526F, 0.0F, 0.0F));
PartDefinition cube_r2 = spikes.addOrReplaceChild("cube_r2", CubeListBuilder.create().texOffs(6, 25).addBox(-1.0F, -1.0F, 0.0F, 1.0F, 1.0F, 0.0F, new CubeDeformation(0.0F))
.texOffs(20, 24).addBox(1.0F, -1.0F, 0.0F, 1.0F, 1.0F, 0.0F, new CubeDeformation(0.0F))
.texOffs(24, 22).addBox(-3.0F, -1.0F, 0.0F, 1.0F, 1.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-2.25F, -4.5F, -2.0F, -1.3526F, 0.0F, 0.0F));
PartDefinition cube_r3 = spikes.addOrReplaceChild("cube_r3", CubeListBuilder.create().texOffs(4, 25).addBox(-1.0F, -1.0F, 0.0F, 1.0F, 1.0F, 0.0F, new CubeDeformation(0.0F))
.texOffs(24, 23).addBox(-3.0F, -1.0F, 0.0F, 1.0F, 1.0F, 0.0F, new CubeDeformation(0.0F))
.texOffs(24, 20).addBox(1.0F, -1.0F, 0.0F, 1.0F, 1.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-2.25F, -4.5F, 0.0F, -1.3526F, 0.0F, 0.0F));
PartDefinition cube_r4 = spikes.addOrReplaceChild("cube_r4", CubeListBuilder.create().texOffs(2, 25).addBox(-1.0F, -1.0F, 0.0F, 1.0F, 1.0F, 0.0F, new CubeDeformation(0.0F))
.texOffs(24, 21).addBox(1.0F, -1.0F, 0.0F, 1.0F, 1.0F, 0.0F, new CubeDeformation(0.0F))
.texOffs(24, 24).addBox(-3.0F, -1.0F, 0.0F, 1.0F, 1.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-2.25F, -4.5F, 2.0F, -1.3526F, 0.0F, 0.0F));
PartDefinition cube_r5 = spikes.addOrReplaceChild("cube_r5", CubeListBuilder.create().texOffs(24, 17).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.25F, -3.0F, 3.5F, 1.5708F, -0.3927F, -1.5708F));
PartDefinition cube_r6 = spikes.addOrReplaceChild("cube_r6", CubeListBuilder.create().texOffs(24, 16).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.25F, -1.5F, 3.5F, 1.5708F, -0.3927F, -1.5708F));
PartDefinition cube_r7 = spikes.addOrReplaceChild("cube_r7", CubeListBuilder.create().texOffs(16, 24).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.25F, 0.0F, 3.5F, 1.5708F, -0.3927F, -1.5708F));
PartDefinition cube_r8 = spikes.addOrReplaceChild("cube_r8", CubeListBuilder.create().texOffs(12, 23).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-4.25F, 0.0F, 3.5F, 1.4814F, 0.3829F, 1.3353F));
PartDefinition cube_r9 = spikes.addOrReplaceChild("cube_r9", CubeListBuilder.create().texOffs(24, 18).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-4.25F, -1.5F, 3.5F, 1.4814F, 0.3829F, 1.3353F));
PartDefinition cube_r10 = spikes.addOrReplaceChild("cube_r10", CubeListBuilder.create().texOffs(20, 23).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-4.25F, -3.0F, 3.5F, 1.4814F, 0.3829F, 1.3353F));
PartDefinition cube_r11 = spikes.addOrReplaceChild("cube_r11", CubeListBuilder.create().texOffs(0, 23).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.25F, 0.0F, 3.5F, 1.4814F, -0.3829F, -1.3353F));
PartDefinition cube_r12 = spikes.addOrReplaceChild("cube_r12", CubeListBuilder.create().texOffs(4, 24).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.25F, -1.5F, 3.5F, 1.4814F, -0.3829F, -1.3353F));
PartDefinition cube_r13 = spikes.addOrReplaceChild("cube_r13", CubeListBuilder.create().texOffs(16, 23).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.25F, -3.0F, 3.5F, 1.4814F, -0.3829F, -1.3353F));
PartDefinition cube_r14 = spikes.addOrReplaceChild("cube_r14", CubeListBuilder.create().texOffs(24, 14).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.5F, -3.0F, -3.0F, 0.0F, 0.3491F, 1.1781F));
PartDefinition cube_r15 = spikes.addOrReplaceChild("cube_r15", CubeListBuilder.create().texOffs(12, 19).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.5F, -3.0F, -1.5F, 0.0F, 0.3491F, 1.1781F));
PartDefinition cube_r16 = spikes.addOrReplaceChild("cube_r16", CubeListBuilder.create().texOffs(12, 20).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.5F, -3.0F, 0.0F, 0.0F, 0.3491F, 1.1781F));
PartDefinition cube_r17 = spikes.addOrReplaceChild("cube_r17", CubeListBuilder.create().texOffs(4, 20).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.5F, -3.0F, 1.5F, 0.0F, 0.3491F, 1.1781F));
PartDefinition cube_r18 = spikes.addOrReplaceChild("cube_r18", CubeListBuilder.create().texOffs(4, 23).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.5F, -3.0F, 3.0F, 0.0F, 0.3491F, 1.1781F));
PartDefinition cube_r19 = spikes.addOrReplaceChild("cube_r19", CubeListBuilder.create().texOffs(20, 22).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.5F, -1.5F, 3.0F, 0.0F, 0.3491F, 1.1781F));
PartDefinition cube_r20 = spikes.addOrReplaceChild("cube_r20", CubeListBuilder.create().texOffs(16, 22).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.5F, -1.5F, 1.5F, 0.0F, 0.3491F, 1.1781F));
PartDefinition cube_r21 = spikes.addOrReplaceChild("cube_r21", CubeListBuilder.create().texOffs(12, 22).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.5F, -1.5F, 0.0F, 0.0F, 0.3491F, 1.1781F));
PartDefinition cube_r22 = spikes.addOrReplaceChild("cube_r22", CubeListBuilder.create().texOffs(8, 22).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.5F, -1.5F, -1.5F, 0.0F, 0.3491F, 1.1781F));
PartDefinition cube_r23 = spikes.addOrReplaceChild("cube_r23", CubeListBuilder.create().texOffs(12, 21).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.5F, 0.0F, 0.0F, 0.0F, 0.3491F, 1.1781F));
PartDefinition cube_r24 = spikes.addOrReplaceChild("cube_r24", CubeListBuilder.create().texOffs(8, 21).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.5F, 0.0F, 1.5F, 0.0F, 0.3491F, 1.1781F));
PartDefinition cube_r25 = spikes.addOrReplaceChild("cube_r25", CubeListBuilder.create().texOffs(4, 21).addBox(-1.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.5F, 0.0F, 3.0F, 0.0F, 0.3491F, 1.1781F));
PartDefinition cube_r26 = spikes.addOrReplaceChild("cube_r26", CubeListBuilder.create().texOffs(4, 22).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -3.0F, 3.0F, 0.0F, -0.3491F, -1.1781F));
PartDefinition cube_r27 = spikes.addOrReplaceChild("cube_r27", CubeListBuilder.create().texOffs(0, 22).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -3.0F, 1.5F, 0.0F, -0.3491F, -1.1781F));
PartDefinition cube_r28 = spikes.addOrReplaceChild("cube_r28", CubeListBuilder.create().texOffs(20, 21).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -3.0F, 0.0F, 0.0F, -0.3491F, -1.1781F));
PartDefinition cube_r29 = spikes.addOrReplaceChild("cube_r29", CubeListBuilder.create().texOffs(24, 15).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -3.0F, -1.5F, 0.0F, -0.3491F, -1.1781F));
PartDefinition cube_r30 = spikes.addOrReplaceChild("cube_r30", CubeListBuilder.create().texOffs(16, 21).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -3.0F, -3.0F, 0.0F, -0.3491F, -1.1781F));
PartDefinition cube_r31 = spikes.addOrReplaceChild("cube_r31", CubeListBuilder.create().texOffs(0, 21).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -1.5F, -1.5F, 0.0F, -0.3491F, -1.1781F));
PartDefinition cube_r32 = spikes.addOrReplaceChild("cube_r32", CubeListBuilder.create().texOffs(20, 20).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -1.5F, 0.0F, 0.0F, -0.3491F, -1.1781F));
PartDefinition cube_r33 = spikes.addOrReplaceChild("cube_r33", CubeListBuilder.create().texOffs(20, 19).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -1.5F, 1.5F, 0.0F, -0.3491F, -1.1781F));
PartDefinition cube_r34 = spikes.addOrReplaceChild("cube_r34", CubeListBuilder.create().texOffs(16, 20).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -1.5F, 3.0F, 0.0F, -0.3491F, -1.1781F));
PartDefinition cube_r35 = spikes.addOrReplaceChild("cube_r35", CubeListBuilder.create().texOffs(4, 19).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 0.0F, 3.0F, 0.0F, -0.3491F, -1.1781F));
PartDefinition cube_r36 = spikes.addOrReplaceChild("cube_r36", CubeListBuilder.create().texOffs(8, 19).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 0.0F, 1.5F, 0.0F, -0.3491F, -1.1781F));
PartDefinition cube_r37 = spikes.addOrReplaceChild("cube_r37", CubeListBuilder.create().texOffs(16, 19).addBox(0.0F, 0.0F, -1.0F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, -0.3491F, -1.1781F));
PartDefinition ears = body2.addOrReplaceChild("ears", CubeListBuilder.create(), PartPose.offset(3.0F, -2.5F, -3.0F));
PartDefinition cube_r38 = ears.addOrReplaceChild("cube_r38", CubeListBuilder.create().texOffs(4, 17).addBox(-1.0F, -2.0F, 1.0F, 2.0F, 2.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-5.9F, 0.0F, 0.0F, 0.0F, 0.0F, -0.0873F));
PartDefinition cube_r39 = ears.addOrReplaceChild("cube_r39", CubeListBuilder.create().texOffs(0, 19).addBox(-1.0F, -2.0F, 1.0F, 2.0F, 2.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.1F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0873F));
PartDefinition nose = body2.addOrReplaceChild("nose", CubeListBuilder.create().texOffs(0, 17).addBox(-1.0F, -1.0F, 0.25F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F))
.texOffs(0, 13).addBox(-1.5F, -0.5F, 0.5F, 2.0F, 2.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.5F, -2.0F, -5.5F));
return LayerDefinition.create(meshdefinition, 32, 32);
}
@Override
public void setupAnim(HedgehogEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
this.root().getAllParts().forEach(ModelPart::resetPose);
this.animateWalk(HedgehogAnimation.hedgehog_walking, limbSwing, limbSwingAmount, 2f, 2.5f);
}
public ModelPart root() {
return Hedgehog;
}
@Override
public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, int color) {
Hedgehog.render(poseStack, vertexConsumer, packedLight, packedOverlay, color);
}
}
@@ -0,0 +1,22 @@
package ovh.glitchlabs.masterwild.entity.client.hedgehog;
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.HedgehogEntity;
public class HedgehogRenderer extends MobRenderer<HedgehogEntity, HedgehogModel<HedgehogEntity>> {
private static final ResourceLocation TEXTURE =
ResourceLocation.fromNamespaceAndPath(Masterwild.MODID, "textures/entity/hedgehog.png");
public HedgehogRenderer(EntityRendererProvider.Context context) {
super(context, new HedgehogModel<>(context.bakeLayer(HedgehogModel.LAYER_LOCATION)), 0.8f);
}
@Override
public ResourceLocation getTextureLocation(HedgehogEntity entity) {
return TEXTURE;
}
}
@@ -0,0 +1,80 @@
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.AnimationState;
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 HedgehogEntity extends Animal {
private static final Ingredient FOOD = Ingredient.of(Items.SWEET_BERRIES, Items.APPLE);
public final AnimationState walkingAnimationState = new AnimationState();
public HedgehogEntity(EntityType<? extends Animal> entityType, Level level) {
super(entityType, level);
}
public static AttributeSupplier.Builder createAttributes() {
return Mob.createMobAttributes()
.add(Attributes.MAX_HEALTH, 8)
.add(Attributes.MOVEMENT_SPEED, 0.2)
.add(Attributes.FOLLOW_RANGE, 8)
.add(Attributes.KNOCKBACK_RESISTANCE, 0.3)
.add(Attributes.STEP_HEIGHT, 0.6);
}
@Override
public boolean isFood(ItemStack stack) {
return FOOD.test(stack);
}
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
this.goalSelector.addGoal(1, new BreedGoal(this, 1.0));
this.goalSelector.addGoal(2, new TemptGoal(this, 1.1, FOOD, false));
this.goalSelector.addGoal(3, new FollowParentGoal(this, 1.1));
this.goalSelector.addGoal(4, new WaterAvoidingRandomStrollGoal(this, 0.8));
this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 6.0F));
this.goalSelector.addGoal(6, new RandomLookAroundGoal(this));
}
@Nullable
@Override
public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob partner) {
return ModEntities.HEDGEHOG.get().create(level);
}
@Override
protected SoundEvent getAmbientSound() {
return SoundEvents.FOX_SNIFF;
}
@Override
protected SoundEvent getHurtSound(DamageSource damageSource) {
return SoundEvents.RABBIT_HURT;
}
@Override
protected SoundEvent getDeathSound() {
return SoundEvents.RABBIT_DEATH;
}
}
@@ -10,10 +10,8 @@ import ovh.glitchlabs.masterwild.entity.client.Pinguin.PinguinModel;
import ovh.glitchlabs.masterwild.entity.client.Rooster.RoosterModel;
import ovh.glitchlabs.masterwild.entity.client.Shark.SharkModel;
import ovh.glitchlabs.masterwild.entity.client.firefly.FireflyModel;
import ovh.glitchlabs.masterwild.entity.custom.FireflyEntity;
import ovh.glitchlabs.masterwild.entity.custom.PinguinEntity;
import ovh.glitchlabs.masterwild.entity.custom.RoosterEntity;
import ovh.glitchlabs.masterwild.entity.custom.SharkEntity;
import ovh.glitchlabs.masterwild.entity.client.hedgehog.HedgehogModel;
import ovh.glitchlabs.masterwild.entity.custom.*;
@EventBusSubscriber(modid = Masterwild.MODID, bus = EventBusSubscriber.Bus.MOD)
public class ModEventBusEvents {
@@ -23,6 +21,7 @@ public class ModEventBusEvents {
event.registerLayerDefinition(FireflyModel.LAYER_LOCATION, FireflyModel::createBodyLayer);
event.registerLayerDefinition(RoosterModel.LAYER_LOCATION, RoosterModel::createBodyLayer);
event.registerLayerDefinition(SharkModel.LAYER_LOCATION, SharkModel::createBodyLayer);
event.registerLayerDefinition(HedgehogModel.LAYER_LOCATION, HedgehogModel::createBodyLayer);
}
@SubscribeEvent
@@ -31,5 +30,6 @@ public class ModEventBusEvents {
event.put(ModEntities.FIREFLY.get(), FireflyEntity.createAttributes().build());
event.put(ModEntities.ROOSTER.get(), RoosterEntity.createAttributes().build());
event.put(ModEntities.SHARK.get(), SharkEntity.createAttributes().build());
event.put(ModEntities.HEDGEHOG.get(), HedgehogEntity.createAttributes().build());
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB