[add] Hedgehog
This commit is contained in:
@@ -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) {
|
||||
|
||||
+58
@@ -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();
|
||||
}
|
||||
+176
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user