diff --git a/src/main/java/ru/dbotthepony/mc/otm/client/animation/BreadMonsterAnimation.java b/src/main/java/ru/dbotthepony/mc/otm/client/animation/BreadMonsterAnimation.java new file mode 100644 index 000000000..dab347224 --- /dev/null +++ b/src/main/java/ru/dbotthepony/mc/otm/client/animation/BreadMonsterAnimation.java @@ -0,0 +1,77 @@ +package ru.dbotthepony.mc.otm.client.animation; + +import net.minecraft.client.animation.AnimationChannel; +import net.minecraft.client.animation.AnimationDefinition; +import net.minecraft.client.animation.Keyframe; +import net.minecraft.client.animation.KeyframeAnimations; + +public class BreadMonsterAnimation { + public static final AnimationDefinition IDLE = AnimationDefinition.Builder.withLength(1.44F).looping() + .addAnimation("Body", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, -2.5F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.72F, KeyframeAnimations.degreeVec(0.0F, 3.33F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(1.44F, KeyframeAnimations.degreeVec(0.0F, -2.5F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("Ljaw", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.72F, KeyframeAnimations.degreeVec(5.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(1.44F, KeyframeAnimations.degreeVec(2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("UJaw", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(-2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.72F, KeyframeAnimations.degreeVec(-5.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(1.44F, KeyframeAnimations.degreeVec(-2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("tail", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 5.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.72F, KeyframeAnimations.degreeVec(0.0F, -7.5F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(1.44F, KeyframeAnimations.degreeVec(0.0F, 5.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .build(); + + public static final AnimationDefinition MOVE = AnimationDefinition.Builder.withLength(1.44F).looping() + .addAnimation("root", new AnimationChannel(AnimationChannel.Targets.POSITION, + new Keyframe(0.0F, KeyframeAnimations.posVec(1.0F, 0.0F, 2.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.12F, KeyframeAnimations.posVec(0.0F, 5.0F, -1.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.24F, KeyframeAnimations.posVec(-1.0F, 0.0F, -1.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.72F, KeyframeAnimations.posVec(-2.0F, 0.0F, 2.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.84F, KeyframeAnimations.posVec(0.0F, 5.0F, -1.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.96F, KeyframeAnimations.posVec(1.0F, 0.0F, -1.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(1.44F, KeyframeAnimations.posVec(1.0F, 0.0F, 2.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("Body", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.12F, KeyframeAnimations.degreeVec(7.5283F, 4.9571F, 0.6543F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.2F, KeyframeAnimations.degreeVec(12.5094F, 1.6524F, 0.2181F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.24F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.72F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.84F, KeyframeAnimations.degreeVec(7.5283F, -4.9571F, -0.6543F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.92F, KeyframeAnimations.degreeVec(15.0189F, -3.3047F, -0.4362F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.96F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("Ljaw", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.12F, KeyframeAnimations.degreeVec(25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.32F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.72F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.84F, KeyframeAnimations.degreeVec(25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(1.04F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("UJaw", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.12F, KeyframeAnimations.degreeVec(-25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.32F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.72F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.84F, KeyframeAnimations.degreeVec(-30.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(1.04F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("tail", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.12F, KeyframeAnimations.degreeVec(-10.0374F, -4.9238F, 0.8704F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.24F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.72F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.84F, KeyframeAnimations.degreeVec(-12.5462F, 4.8812F, -1.0848F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.96F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .build(); +} diff --git a/src/main/java/ru/dbotthepony/mc/otm/client/model/entity/BreadMonsterModel.java b/src/main/java/ru/dbotthepony/mc/otm/client/model/entity/BreadMonsterModel.java new file mode 100644 index 000000000..8eadd78ed --- /dev/null +++ b/src/main/java/ru/dbotthepony/mc/otm/client/model/entity/BreadMonsterModel.java @@ -0,0 +1,73 @@ +package ru.dbotthepony.mc.otm.client.model.entity; + +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.CubeDeformation; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; +import net.neoforged.neoforge.client.event.EntityRenderersEvent; +import org.jetbrains.annotations.NotNull; +import ru.dbotthepony.mc.otm.client.animation.BreadMonsterAnimation; +import ru.dbotthepony.mc.otm.entity.BreadMonster; +import ru.dbotthepony.mc.otm.registry.MNames; + +import static ru.dbotthepony.mc.otm.OverdriveThatMatters.loc; + +public class BreadMonsterModel { + public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(loc(MNames.BREAD_MONSTER), "main"); + + private static HierarchicalModel model; + private static LayerDefinition def; + + public static HierarchicalModel getModel() { + if (model == null) { + return model = new BreadMonsterHierarchicalModel<>(def.bakeRoot()); + } + + return model; + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F)); + + PartDefinition Body = root.addOrReplaceChild("Body", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -3.0F, -5.0F, 8.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -3.0F, 0.0F)); + PartDefinition Ljaw = Body.addOrReplaceChild("Ljaw", CubeListBuilder.create().texOffs(26, 24).addBox(-4.0F, -2.0F, -4.0F, 8.0F, 3.0F, 4.0F, new CubeDeformation(0.1F)), PartPose.offset(0.0F, 2.0F, -3.0F)); + PartDefinition UJaw = Body.addOrReplaceChild("UJaw", CubeListBuilder.create().texOffs(0, 24).addBox(-4.0F, -2.0F, -4.0F, 8.0F, 3.0F, 5.0F, new CubeDeformation(0.1F)), PartPose.offset(0.0F, -1.0F, -3.0F)); + PartDefinition tail = Body.addOrReplaceChild("tail", CubeListBuilder.create().texOffs(0, 12).addBox(-4.0F, -3.0F, -0.1F, 8.0F, 6.0F, 6.0F, new CubeDeformation(-0.1F)), PartPose.offset(0.0F, 0.0F, 1.0F)); + + model = null; + return def = LayerDefinition.create(meshdefinition, 64, 32); + } + + private static class BreadMonsterHierarchicalModel extends HierarchicalModel { + private final ModelPart root; + public BreadMonsterHierarchicalModel(ModelPart root) { + this.root = root.getChild("root"); + } + + @Override + public void setupAnim(@NotNull T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + this.root().getAllParts().forEach(ModelPart::resetPose); + +// this.applyStatic(BreadMonsterAnimation.IDLE); + this.animate(entity.getIdleState(), BreadMonsterAnimation.IDLE, ageInTicks, 1.0F); + this.animateWalk(BreadMonsterAnimation.MOVE, limbSwing, limbSwingAmount, 1.0F, 2.5F); + } + + @Override + public @NotNull ModelPart root() { + return this.root; + } + } + + public static void register(EntityRenderersEvent.RegisterLayerDefinitions event) { + event.registerLayerDefinition(LAYER_LOCATION, BreadMonsterModel::createBodyLayer); + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/OverdriveThatMatters.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/OverdriveThatMatters.kt index 09a8a6249..bdd6095ca 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/OverdriveThatMatters.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/OverdriveThatMatters.kt @@ -24,6 +24,7 @@ import ru.dbotthepony.mc.otm.client.createCursors import ru.dbotthepony.mc.otm.client.model.ExosuitModel import ru.dbotthepony.mc.otm.client.model.GravitationStabilizerModel import ru.dbotthepony.mc.otm.client.model.TritaniumArmorModel +import ru.dbotthepony.mc.otm.client.model.entity.BreadMonsterModel import ru.dbotthepony.mc.otm.client.onMovementInputUpdate import ru.dbotthepony.mc.otm.client.onScreenOpen import ru.dbotthepony.mc.otm.client.onPostScreenInit @@ -92,6 +93,7 @@ import thedarkcolour.kotlinforforge.neoforge.forge.DIST import thedarkcolour.kotlinforforge.neoforge.forge.FORGE_BUS import thedarkcolour.kotlinforforge.neoforge.forge.LOADING_CONTEXT import thedarkcolour.kotlinforforge.neoforge.forge.MOD_BUS +import top.theillusivec4.curios.client.ClientEventHandler @Mod(OverdriveThatMatters.MOD_ID) object OverdriveThatMatters { @@ -150,6 +152,7 @@ object OverdriveThatMatters { MOD_BUS.addListener(EventPriority.NORMAL, AndroidAbilityKeyMapping::register) MOD_BUS.addListener(EventPriority.NORMAL, TritaniumArmorModel::register) MOD_BUS.addListener(EventPriority.NORMAL, GravitationStabilizerModel::register) + MOD_BUS.addListener(EventPriority.NORMAL, BreadMonsterModel::register) MOD_BUS.addListener(EventPriority.NORMAL, MCreativeTabs::register) MOD_BUS.addListener(EventPriority.NORMAL, BatteryBankRenderer.Companion::onRegisterAdditionalModels) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/entity/BreadMonsterRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/entity/BreadMonsterRenderer.kt new file mode 100644 index 000000000..595be5f82 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/entity/BreadMonsterRenderer.kt @@ -0,0 +1,18 @@ +package ru.dbotthepony.mc.otm.client.render.entity + +import net.minecraft.client.model.HierarchicalModel +import net.minecraft.client.renderer.entity.EntityRendererProvider +import net.minecraft.client.renderer.entity.MobRenderer +import net.minecraft.resources.ResourceLocation +import ru.dbotthepony.mc.otm.OverdriveThatMatters.loc +import ru.dbotthepony.mc.otm.client.model.entity.BreadMonsterModel +import ru.dbotthepony.mc.otm.entity.BreadMonster + +class BreadMonsterRenderer(context: EntityRendererProvider.Context) + : MobRenderer>(context, BreadMonsterModel.getModel(), 0.9f) { + override fun getTextureLocation(entity: BreadMonster): ResourceLocation = TEXTURE_LOCATION + + companion object { + private val TEXTURE_LOCATION = loc("textures/entity/bread_monster.png") + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/entity/BreadMonster.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/entity/BreadMonster.kt new file mode 100644 index 000000000..5a3515e64 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/entity/BreadMonster.kt @@ -0,0 +1,43 @@ +package ru.dbotthepony.mc.otm.entity + +import net.minecraft.world.entity.AnimationState +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.ai.attributes.AttributeSupplier +import net.minecraft.world.entity.ai.attributes.Attributes +import net.minecraft.world.entity.ai.goal.LeapAtTargetGoal +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal +import net.minecraft.world.entity.ai.navigation.GroundPathNavigation +import net.minecraft.world.entity.ai.navigation.PathNavigation +import net.minecraft.world.entity.monster.Monster +import net.minecraft.world.entity.player.Player +import net.minecraft.world.level.Level + +class BreadMonster(type: EntityType, level: Level) : Monster(type, level) { + val idleState = AnimationState() + + init { + idleState.start(tickCount) + } + + override fun registerGoals() { + goalSelector.addGoal(1, LeapAtTargetGoal(this, 0.4f)) + goalSelector.addGoal(2, WaterAvoidingRandomStrollGoal(this, 0.8)) + goalSelector.addGoal(3, LookAtPlayerGoal(this, Player::class.java, 8f)) + goalSelector.addGoal(4, RandomLookAroundGoal(this)) + + targetSelector.addGoal(1, HurtByTargetGoal(this)) + } + + override fun createNavigation(level: Level): PathNavigation = GroundPathNavigation(this, level) + + companion object { + fun createAttributes() : AttributeSupplier.Builder { + return createMonsterAttributes() + .add(Attributes.MAX_HEALTH, 16.0) + .add(Attributes.MOVEMENT_SPEED, 0.3) + } + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt index 5a4218d0a..a4c9f0f97 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt @@ -306,6 +306,7 @@ object MNames { // entities const val PLASMA = "plasma_projectile" const val RIDEABLE_DUMMY = "rideable_dummy" + const val BREAD_MONSTER = "bread_monster" const val PHANTOM_ATTRACTOR = "phantom_attractor" const val JUMP_BOOST = "jump_boost" diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MEntityTypes.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MEntityTypes.kt index 412aaf7b4..bafdac6cf 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MEntityTypes.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MEntityTypes.kt @@ -12,7 +12,10 @@ import net.minecraft.world.entity.MobCategory import net.minecraft.world.item.DyeColor import net.neoforged.bus.api.IEventBus import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent +import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent +import ru.dbotthepony.mc.otm.client.render.entity.BreadMonsterRenderer import ru.dbotthepony.mc.otm.client.render.entity.PlasmaProjectileRenderer +import ru.dbotthepony.mc.otm.entity.BreadMonster import ru.dbotthepony.mc.otm.entity.MinecartCargoCrate import ru.dbotthepony.mc.otm.entity.PlasmaProjectile import ru.dbotthepony.mc.otm.entity.RideableDummy @@ -38,11 +41,25 @@ object MEntityTypes { .build(MNames.RIDEABLE_DUMMY) } + val BREAD_MONSTER: EntityType by registry.register(MNames.BREAD_MONSTER) { + EntityType.Builder.of(::BreadMonster, MobCategory.MONSTER) + .sized(0.9f, 0.375f) + .eyeHeight(0.1875f) + .passengerAttachments(0.375f) + .clientTrackingRange(8) + .build(MNames.BREAD_MONSTER) + } + fun register(bus: IEventBus) { registry.register(bus) + bus.addListener(this::registerAttributes) bus.addListener(this::registerClient) } + private fun registerAttributes(event: EntityAttributeCreationEvent) { + event.put(BREAD_MONSTER, BreadMonster.createAttributes().build()) + } + @Suppress("unchecked_cast") private fun registerClient(event: FMLClientSetupEvent) { event.enqueueWork { @@ -53,6 +70,7 @@ object MEntityTypes { } EntityRenderers.register(RIDEABLE_DUMMY, ::NoopRenderer) + EntityRenderers.register(BREAD_MONSTER, ::BreadMonsterRenderer) } } } diff --git a/src/main/resources/assets/overdrive_that_matters/models/bread_monster.java b/src/main/resources/assets/overdrive_that_matters/models/bread_monster.java deleted file mode 100644 index 5926248d2..000000000 --- a/src/main/resources/assets/overdrive_that_matters/models/bread_monster.java +++ /dev/null @@ -1,49 +0,0 @@ -// Made with Blockbench 4.12.3 -// Exported for Minecraft version 1.17 or later with Mojang mappings -// Paste this class into your mod and generate all required imports - - -public class bread_monster extends EntityModel { - // 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(new ResourceLocation("modid", "bread_monster"), "main"); - private final ModelPart root; - private final ModelPart Body; - private final ModelPart Ljaw; - private final ModelPart UJaw; - private final ModelPart tail; - - public bread_monster(ModelPart root) { - this.root = root.getChild("root"); - this.Body = this.root.getChild("Body"); - this.Ljaw = this.Body.getChild("Ljaw"); - this.UJaw = this.Body.getChild("UJaw"); - this.tail = this.Body.getChild("tail"); - } - - public static LayerDefinition createBodyLayer() { - MeshDefinition meshdefinition = new MeshDefinition(); - PartDefinition partdefinition = meshdefinition.getRoot(); - - PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F)); - - PartDefinition Body = root.addOrReplaceChild("Body", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -3.0F, -5.0F, 8.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -3.0F, 0.0F)); - - PartDefinition Ljaw = Body.addOrReplaceChild("Ljaw", CubeListBuilder.create().texOffs(26, 24).addBox(-4.0F, -2.0F, -4.0F, 8.0F, 3.0F, 4.0F, new CubeDeformation(0.1F)), PartPose.offset(0.0F, 2.0F, -3.0F)); - - PartDefinition UJaw = Body.addOrReplaceChild("UJaw", CubeListBuilder.create().texOffs(0, 24).addBox(-4.0F, -2.0F, -4.0F, 8.0F, 3.0F, 5.0F, new CubeDeformation(0.1F)), PartPose.offset(0.0F, -1.0F, -3.0F)); - - PartDefinition tail = Body.addOrReplaceChild("tail", CubeListBuilder.create().texOffs(0, 12).addBox(-4.0F, -3.0F, -0.1F, 8.0F, 6.0F, 6.0F, new CubeDeformation(-0.1F)), PartPose.offset(0.0F, 0.0F, 1.0F)); - - return LayerDefinition.create(meshdefinition, 64, 32); - } - - @Override - public void setupAnim(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { - - } - - @Override - public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { - root.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); - } -} \ No newline at end of file diff --git a/src/main/resources/assets/overdrive_that_matters/textures/models/bread_monster/bread_monster.png b/src/main/resources/assets/overdrive_that_matters/textures/entity/bread_monster.png similarity index 100% rename from src/main/resources/assets/overdrive_that_matters/textures/models/bread_monster/bread_monster.png rename to src/main/resources/assets/overdrive_that_matters/textures/entity/bread_monster.png