From ce6e26342bf7e38e36caaa86adaaeb906aeb6117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Elliott?= Date: Mon, 27 Apr 2026 14:56:45 -0400 Subject: [PATCH 1/6] rabbit in a hat --- .../mixin/accessor/RabbitModelAccessor.java | 12 +++++ .../tweaks/CreateHatArmorLayerMixin.java | 48 +++++++++++++++++++ .../minecraft/train_hat_info/rabbit.json | 7 +++ src/main/resources/mixins.create_repair.json | 4 +- 4 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ch/voidlee/repair/mixin/accessor/RabbitModelAccessor.java create mode 100644 src/main/java/ch/voidlee/repair/mixin/tweaks/CreateHatArmorLayerMixin.java create mode 100644 src/main/resources/assets/minecraft/train_hat_info/rabbit.json diff --git a/src/main/java/ch/voidlee/repair/mixin/accessor/RabbitModelAccessor.java b/src/main/java/ch/voidlee/repair/mixin/accessor/RabbitModelAccessor.java new file mode 100644 index 0000000..d991d11 --- /dev/null +++ b/src/main/java/ch/voidlee/repair/mixin/accessor/RabbitModelAccessor.java @@ -0,0 +1,12 @@ +package ch.voidlee.repair.mixin.accessor; + +import net.minecraft.client.model.RabbitModel; +import net.minecraft.client.model.geom.ModelPart; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(RabbitModel.class) +public interface RabbitModelAccessor { + @Accessor("head") + ModelPart create_repair$getHead(); +} diff --git a/src/main/java/ch/voidlee/repair/mixin/tweaks/CreateHatArmorLayerMixin.java b/src/main/java/ch/voidlee/repair/mixin/tweaks/CreateHatArmorLayerMixin.java new file mode 100644 index 0000000..412250d --- /dev/null +++ b/src/main/java/ch/voidlee/repair/mixin/tweaks/CreateHatArmorLayerMixin.java @@ -0,0 +1,48 @@ +package ch.voidlee.repair.mixin.tweaks; + +import ch.voidlee.repair.mixin.accessor.RabbitModelAccessor; +import com.llamalad7.mixinextras.sugar.Local; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.content.equipment.hats.CreateHatArmorLayer; +import com.simibubi.create.content.trains.schedule.hat.TrainHatInfo; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.RabbitModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.List; + +@Mixin(value = CreateHatArmorLayer.class, remap = false) +public class CreateHatArmorLayerMixin { + + @Inject(method = "registerOn", at = @At("HEAD"), cancellable = true) + private static void addCustomModelException(EntityRenderer entityRenderer, CallbackInfo ci) { + if (entityRenderer instanceof LivingEntityRenderer livingRenderer) { + if (livingRenderer.getModel() instanceof RabbitModel) { + CreateHatArmorLayer layer = new CreateHatArmorLayer<>(livingRenderer); + livingRenderer.addLayer((CreateHatArmorLayer) layer); + ci.cancel(); + } + } + } + + @Inject(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/entity/LivingEntity;FFFFFF)V", at = @At(value = "INVOKE", target = "Ljava/util/List;isEmpty()Z", ordinal = 0, remap = false)) + private void injectCustomHatModelRender(CallbackInfo ci, @Local(argsOnly = true) PoseStack ms, @Local(name = "entityModel") EntityModel entityModel, @Local(name = "info") TrainHatInfo info, @Local(name = "partsToHead") List partsToHead) { + if (entityModel instanceof RabbitModel model) { + if (model.young) { + ms.scale(0.56666666F, 0.56666666F, 0.56666666F); + ms.translate(0.0F, 1.375F, 0.125F); + } else { + ms.scale(0.6F, 0.6F, 0.6F); + ms.translate(0.0F, 1.0F, 0.0F); + } + ModelPart head = ((RabbitModelAccessor) model).create_repair$getHead(); + partsToHead.addAll(TrainHatInfo.getAdjustedPart(info, head, "head")); + } + } +} diff --git a/src/main/resources/assets/minecraft/train_hat_info/rabbit.json b/src/main/resources/assets/minecraft/train_hat_info/rabbit.json new file mode 100644 index 0000000..b2ffa2b --- /dev/null +++ b/src/main/resources/assets/minecraft/train_hat_info/rabbit.json @@ -0,0 +1,7 @@ +{ + "offset": [ + 0.0, + -1.0, + -2.5 + ] +} \ No newline at end of file diff --git a/src/main/resources/mixins.create_repair.json b/src/main/resources/mixins.create_repair.json index 9f9971e..956ac51 100644 --- a/src/main/resources/mixins.create_repair.json +++ b/src/main/resources/mixins.create_repair.json @@ -84,6 +84,7 @@ "tweaks.PloughMovementBehaviourMixin" ], "client": [ + "accessor.RabbitModelAccessor", "client.CreateMainMenuScreenMixin", "client.OptionsMixin", "client.bug_fixes.CopycatModelMixin", @@ -102,7 +103,8 @@ "client.crash_fixes.ClipboardScreenMixin", "client.crash_fixes.ContraptionUOEMixin", "client.crash_fixes.ponder_keybind.PonderKeybindsMixin", - "client.crash_fixes.ponder_keybind.PonderTooltipHandlerMixin" + "client.crash_fixes.ponder_keybind.PonderTooltipHandlerMixin", + "tweaks.CreateHatArmorLayerMixin" ], "mixinextras": { "minVersion": "0.5.3" From f6ee00df8efc161dbc0dee6423011f8415009752 Mon Sep 17 00:00:00 2001 From: Allmoz Date: Mon, 27 Apr 2026 17:05:27 -0400 Subject: [PATCH 2/6] ups missed this one --- .../voidlee/repair/mixin/tweaks/CreateHatArmorLayerMixin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/voidlee/repair/mixin/tweaks/CreateHatArmorLayerMixin.java b/src/main/java/ch/voidlee/repair/mixin/tweaks/CreateHatArmorLayerMixin.java index 412250d..0f9d2d7 100644 --- a/src/main/java/ch/voidlee/repair/mixin/tweaks/CreateHatArmorLayerMixin.java +++ b/src/main/java/ch/voidlee/repair/mixin/tweaks/CreateHatArmorLayerMixin.java @@ -17,10 +17,10 @@ import java.util.List; -@Mixin(value = CreateHatArmorLayer.class, remap = false) +@Mixin(value = CreateHatArmorLayer.class) public class CreateHatArmorLayerMixin { - @Inject(method = "registerOn", at = @At("HEAD"), cancellable = true) + @Inject(method = "registerOn", at = @At("HEAD"), cancellable = true, remap = false) private static void addCustomModelException(EntityRenderer entityRenderer, CallbackInfo ci) { if (entityRenderer instanceof LivingEntityRenderer livingRenderer) { if (livingRenderer.getModel() instanceof RabbitModel) { From 2202b726763bd22a51cc4cb45944d3fb1a27a71a Mon Sep 17 00:00:00 2001 From: Allmoz Date: Mon, 27 Apr 2026 17:19:54 -0400 Subject: [PATCH 3/6] sorting, and hope the remap is ok --- .../accessor/RabbitModelAccessor.java | 24 +++++++++---------- .../tweaks/CreateHatArmorLayerMixin.java | 6 ++--- src/main/resources/mixins.create_repair.json | 4 ++-- 3 files changed, 17 insertions(+), 17 deletions(-) rename src/main/java/ch/voidlee/repair/mixin/{ => client}/accessor/RabbitModelAccessor.java (85%) rename src/main/java/ch/voidlee/repair/mixin/{ => client}/tweaks/CreateHatArmorLayerMixin.java (92%) diff --git a/src/main/java/ch/voidlee/repair/mixin/accessor/RabbitModelAccessor.java b/src/main/java/ch/voidlee/repair/mixin/client/accessor/RabbitModelAccessor.java similarity index 85% rename from src/main/java/ch/voidlee/repair/mixin/accessor/RabbitModelAccessor.java rename to src/main/java/ch/voidlee/repair/mixin/client/accessor/RabbitModelAccessor.java index d991d11..26ccc34 100644 --- a/src/main/java/ch/voidlee/repair/mixin/accessor/RabbitModelAccessor.java +++ b/src/main/java/ch/voidlee/repair/mixin/client/accessor/RabbitModelAccessor.java @@ -1,12 +1,12 @@ -package ch.voidlee.repair.mixin.accessor; - -import net.minecraft.client.model.RabbitModel; -import net.minecraft.client.model.geom.ModelPart; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(RabbitModel.class) -public interface RabbitModelAccessor { - @Accessor("head") - ModelPart create_repair$getHead(); -} +package ch.voidlee.repair.mixin.client.accessor; + +import net.minecraft.client.model.RabbitModel; +import net.minecraft.client.model.geom.ModelPart; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(RabbitModel.class) +public interface RabbitModelAccessor { + @Accessor("head") + ModelPart create_repair$getHead(); +} diff --git a/src/main/java/ch/voidlee/repair/mixin/tweaks/CreateHatArmorLayerMixin.java b/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java similarity index 92% rename from src/main/java/ch/voidlee/repair/mixin/tweaks/CreateHatArmorLayerMixin.java rename to src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java index 0f9d2d7..ba847b0 100644 --- a/src/main/java/ch/voidlee/repair/mixin/tweaks/CreateHatArmorLayerMixin.java +++ b/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java @@ -1,6 +1,6 @@ -package ch.voidlee.repair.mixin.tweaks; +package ch.voidlee.repair.mixin.client.tweaks; -import ch.voidlee.repair.mixin.accessor.RabbitModelAccessor; +import ch.voidlee.repair.mixin.client.accessor.RabbitModelAccessor; import com.llamalad7.mixinextras.sugar.Local; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.equipment.hats.CreateHatArmorLayer; @@ -31,7 +31,7 @@ private static void addCustomModelException(EntityRenderer entityRenderer, Ca } } - @Inject(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/entity/LivingEntity;FFFFFF)V", at = @At(value = "INVOKE", target = "Ljava/util/List;isEmpty()Z", ordinal = 0, remap = false)) + @Inject(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/entity/LivingEntity;FFFFFF)V", at = @At(value = "INVOKE", target = "Ljava/util/List;isEmpty()Z", ordinal = 0), remap = false) private void injectCustomHatModelRender(CallbackInfo ci, @Local(argsOnly = true) PoseStack ms, @Local(name = "entityModel") EntityModel entityModel, @Local(name = "info") TrainHatInfo info, @Local(name = "partsToHead") List partsToHead) { if (entityModel instanceof RabbitModel model) { if (model.young) { diff --git a/src/main/resources/mixins.create_repair.json b/src/main/resources/mixins.create_repair.json index 956ac51..02deb6d 100644 --- a/src/main/resources/mixins.create_repair.json +++ b/src/main/resources/mixins.create_repair.json @@ -84,9 +84,9 @@ "tweaks.PloughMovementBehaviourMixin" ], "client": [ - "accessor.RabbitModelAccessor", "client.CreateMainMenuScreenMixin", "client.OptionsMixin", + "client.accessor.RabbitModelAccessor", "client.bug_fixes.CopycatModelMixin", "client.bug_fixes.RadialWrenchMenuMixin", "client.bug_fixes.ScheduleScreenMixin", @@ -104,7 +104,7 @@ "client.crash_fixes.ContraptionUOEMixin", "client.crash_fixes.ponder_keybind.PonderKeybindsMixin", "client.crash_fixes.ponder_keybind.PonderTooltipHandlerMixin", - "tweaks.CreateHatArmorLayerMixin" + "client.tweaks.CreateHatArmorLayerMixin" ], "mixinextras": { "minVersion": "0.5.3" From 58d3c53ebde4320afefdf91a17ead18eb133ed30 Mon Sep 17 00:00:00 2001 From: Allmoz Date: Mon, 27 Apr 2026 17:31:48 -0400 Subject: [PATCH 4/6] why not --- .../repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java b/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java index ba847b0..f2e1b32 100644 --- a/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java +++ b/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java @@ -17,7 +17,7 @@ import java.util.List; -@Mixin(value = CreateHatArmorLayer.class) +@Mixin(CreateHatArmorLayer.class) public class CreateHatArmorLayerMixin { @Inject(method = "registerOn", at = @At("HEAD"), cancellable = true, remap = false) From 71ff86ae50b89af97f302ba94f0b586218198ee1 Mon Sep 17 00:00:00 2001 From: Allmoz Date: Mon, 27 Apr 2026 17:55:10 -0400 Subject: [PATCH 5/6] maybe im just blind --- .../client/tweaks/CreateHatArmorLayerMixin.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java b/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java index f2e1b32..42b622c 100644 --- a/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java +++ b/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java @@ -20,14 +20,12 @@ @Mixin(CreateHatArmorLayer.class) public class CreateHatArmorLayerMixin { - @Inject(method = "registerOn", at = @At("HEAD"), cancellable = true, remap = false) - private static void addCustomModelException(EntityRenderer entityRenderer, CallbackInfo ci) { - if (entityRenderer instanceof LivingEntityRenderer livingRenderer) { - if (livingRenderer.getModel() instanceof RabbitModel) { - CreateHatArmorLayer layer = new CreateHatArmorLayer<>(livingRenderer); - livingRenderer.addLayer((CreateHatArmorLayer) layer); - ci.cancel(); - } + @Inject(method = "registerOn", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/client/renderer/entity/LivingEntityRenderer;getModel()Lnet/minecraft/client/model/EntityModel;"), cancellable = true, remap = false) + private static void addCustomModelException(EntityRenderer entityRenderer, CallbackInfo ci, @Local(name = "livingRenderer") LivingEntityRenderer livingRenderer, @Local(name = "model") EntityModel model) { + if (model instanceof RabbitModel) { + CreateHatArmorLayer layer = new CreateHatArmorLayer<>(livingRenderer); + livingRenderer.addLayer((CreateHatArmorLayer) layer); + ci.cancel(); } } From bdd3ed4025921b79b0edfd6909a0ce50d35e18b1 Mon Sep 17 00:00:00 2001 From: Allmoz Date: Mon, 27 Apr 2026 20:42:16 -0400 Subject: [PATCH 6/6] abstract prefix --- .../mixin/client/tweaks/CreateHatArmorLayerMixin.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java b/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java index 42b622c..9241ad8 100644 --- a/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java +++ b/src/main/java/ch/voidlee/repair/mixin/client/tweaks/CreateHatArmorLayerMixin.java @@ -18,10 +18,10 @@ import java.util.List; @Mixin(CreateHatArmorLayer.class) -public class CreateHatArmorLayerMixin { +public abstract class CreateHatArmorLayerMixin { @Inject(method = "registerOn", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/client/renderer/entity/LivingEntityRenderer;getModel()Lnet/minecraft/client/model/EntityModel;"), cancellable = true, remap = false) - private static void addCustomModelException(EntityRenderer entityRenderer, CallbackInfo ci, @Local(name = "livingRenderer") LivingEntityRenderer livingRenderer, @Local(name = "model") EntityModel model) { + private static void create_repair$addCustomModelException(EntityRenderer entityRenderer, CallbackInfo ci, @Local(name = "livingRenderer") LivingEntityRenderer livingRenderer, @Local(name = "model") EntityModel model) { if (model instanceof RabbitModel) { CreateHatArmorLayer layer = new CreateHatArmorLayer<>(livingRenderer); livingRenderer.addLayer((CreateHatArmorLayer) layer); @@ -30,7 +30,7 @@ private static void addCustomModelException(EntityRenderer entityRenderer, Ca } @Inject(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/entity/LivingEntity;FFFFFF)V", at = @At(value = "INVOKE", target = "Ljava/util/List;isEmpty()Z", ordinal = 0), remap = false) - private void injectCustomHatModelRender(CallbackInfo ci, @Local(argsOnly = true) PoseStack ms, @Local(name = "entityModel") EntityModel entityModel, @Local(name = "info") TrainHatInfo info, @Local(name = "partsToHead") List partsToHead) { + private void create_repair$injectCustomHatModelRender(CallbackInfo ci, @Local(argsOnly = true) PoseStack ms, @Local(name = "entityModel") EntityModel entityModel, @Local(name = "info") TrainHatInfo info, @Local(name = "partsToHead") List partsToHead) { if (entityModel instanceof RabbitModel model) { if (model.young) { ms.scale(0.56666666F, 0.56666666F, 0.56666666F);