From a76781172c810b619e3bb9923c850bcc2aa44b55 Mon Sep 17 00:00:00 2001 From: Cassian Godsted Date: Fri, 22 Nov 2024 18:38:05 -0500 Subject: [PATCH 1/6] Partial 1.21.3 port Rendering code still needs work --- build.gradle | 2 +- gradle.properties | 12 ++++++------ gradle/wrapper/gradle-wrapper.properties | 2 +- .../F53/HorseBuff/mixin/Client/HorseRenderer.java | 8 ++++---- .../F53/HorseBuff/mixin/Client/TransparentArmor.java | 4 ++-- .../mixin/Client/TransparentLlamaDecor.java | 4 ++-- .../HorseBuff/mixin/Client/TransparentMarkings.java | 4 ++-- .../net/F53/HorseBuff/mixin/Server/AllowRaft.java | 11 ++++++----- .../F53/HorseBuff/mixin/Server/MountedModifiers.java | 8 ++++---- 9 files changed, 28 insertions(+), 27 deletions(-) diff --git a/build.gradle b/build.gradle index 1ca9818..cbc613f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.6-SNAPSHOT' + id 'fabric-loom' version '1.7-SNAPSHOT' id 'maven-publish' } diff --git a/gradle.properties b/gradle.properties index bdf1f8d..e859800 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,15 +3,15 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/develop/ -minecraft_version=1.21 -yarn_mappings=1.21+build.2 -loader_version=0.15.11 +minecraft_version=1.21.3 +yarn_mappings=1.21.3+build.1 +loader_version=0.16.9 # Mod Properties mod_version=2.1.8 maven_group=com.HorseBuff archives_base_name=HorseBuff # Dependencies -fabric_version=0.100.3+1.21 -cloth_config_version=15.0.127 -mod_menu_version=11.0.1 +fabric_version=0.109.0+1.21.3 +cloth_config_version=16.0.141 +mod_menu_version=12.0.0-beta.1 mixinextras_version=0.3.5 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 48c0a02..0d18421 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/net/F53/HorseBuff/mixin/Client/HorseRenderer.java b/src/main/java/net/F53/HorseBuff/mixin/Client/HorseRenderer.java index 10a1275..c1713c3 100644 --- a/src/main/java/net/F53/HorseBuff/mixin/Client/HorseRenderer.java +++ b/src/main/java/net/F53/HorseBuff/mixin/Client/HorseRenderer.java @@ -9,7 +9,7 @@ import net.minecraft.entity.passive.AbstractHorseEntity; import net.minecraft.entity.passive.SheepEntity; import net.minecraft.util.DyeColor; -import net.minecraft.util.math.ColorHelper.Argb; +import net.minecraft.util.math.ColorHelper; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -36,11 +36,11 @@ int setOpacityAndChromaForRender(int color, @Local(argsOnly = true, ordinal = 1) int currentDye = SheepEntity.getRgbColor(DyeColor.byId(dyeIndex % numDyes)); int nextDye = SheepEntity.getRgbColor(DyeColor.byId((dyeIndex + 1) % numDyes)); float dyeTransitionProgress = ((float) (entity.age % 25) + tickDelta) / 25.0f; - color = Argb.lerp(dyeTransitionProgress, currentDye, nextDye); + color = ColorHelper.lerp(dyeTransitionProgress, currentDye, nextDye); // increase brightness by a bit because the horse texture is a bit dark - color = Argb.getArgb(Math.min(Argb.getRed(color) * 2, 255), Math.min(Argb.getGreen(color) * 2, 255), Math.min(Argb.getBlue(color) * 2, 255)); + color = ColorHelper.getArgb(Math.min(ColorHelper.getRed(color) * 2, 255), Math.min(ColorHelper.getGreen(color) * 2, 255), Math.min(ColorHelper.getBlue(color) * 2, 255)); } - return Argb.withAlpha(alpha.get(), color); + return ColorHelper.withAlpha(alpha.get(), color); } @ModifyArg(method = "render(Lnet/minecraft/entity/LivingEntity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", diff --git a/src/main/java/net/F53/HorseBuff/mixin/Client/TransparentArmor.java b/src/main/java/net/F53/HorseBuff/mixin/Client/TransparentArmor.java index ea0fbf8..2603085 100644 --- a/src/main/java/net/F53/HorseBuff/mixin/Client/TransparentArmor.java +++ b/src/main/java/net/F53/HorseBuff/mixin/Client/TransparentArmor.java @@ -9,7 +9,7 @@ import net.minecraft.client.render.entity.feature.HorseArmorFeatureRenderer; import net.minecraft.entity.passive.HorseEntity; import net.minecraft.util.Identifier; -import net.minecraft.util.math.ColorHelper.Argb; +import net.minecraft.util.math.ColorHelper; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; @@ -30,6 +30,6 @@ RenderLayer makeRenderLayerTranslucent(Identifier texture, Operation origin @WrapOperation(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/entity/passive/LlamaEntity;FFFFFF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/model/LlamaEntityModel;render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;II)V")) - void modifyOverlayAlpha(LlamaEntityModel instance, MatrixStack matrixStack, VertexConsumer vertexConsumer, int light, int overlay, Operation original, @Share("alpha") LocalIntRef alpha) { - instance.render(matrixStack, vertexConsumer, light, overlay, ColorHelper.Argb.withAlpha(alpha.get(), 0xFFFFFF)); + void modifyOverlayAlpha(LlamaEntityModel instance, MatrixStack matrixStack, VertexConsumer vertexConsumer, int light, int overlay, Operation original, @Share("alpha") LocalIntRef alpha) { + instance.render(matrixStack, vertexConsumer, light, overlay, ColorHelper.withAlpha(alpha.get(), 0xFFFFFF)); } } diff --git a/src/main/java/net/F53/HorseBuff/mixin/Client/TransparentMarkings.java b/src/main/java/net/F53/HorseBuff/mixin/Client/TransparentMarkings.java index cffd412..13b0592 100644 --- a/src/main/java/net/F53/HorseBuff/mixin/Client/TransparentMarkings.java +++ b/src/main/java/net/F53/HorseBuff/mixin/Client/TransparentMarkings.java @@ -12,7 +12,7 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.passive.HorseEntity; import net.minecraft.util.Identifier; -import net.minecraft.util.math.ColorHelper.Argb; +import net.minecraft.util.math.ColorHelper; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -31,6 +31,6 @@ RenderLayer makeRenderLayerTranslucent(Identifier texture, Operation instance, MatrixStack matrixStack, VertexConsumer vertexConsumer, int light, int overlay, Operation original, @Share("alpha") LocalIntRef alpha) { - instance.render(matrixStack, vertexConsumer, light, overlay, Argb.withAlpha(alpha.get(), 0xFFFFFF)); + instance.render(matrixStack, vertexConsumer, light, overlay, ColorHelper.withAlpha(alpha.get(), 0xFFFFFF)); } } diff --git a/src/main/java/net/F53/HorseBuff/mixin/Server/AllowRaft.java b/src/main/java/net/F53/HorseBuff/mixin/Server/AllowRaft.java index fce8a02..6b022dd 100644 --- a/src/main/java/net/F53/HorseBuff/mixin/Server/AllowRaft.java +++ b/src/main/java/net/F53/HorseBuff/mixin/Server/AllowRaft.java @@ -4,22 +4,23 @@ import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.entity.Entity; import net.minecraft.entity.passive.AbstractHorseEntity; -import net.minecraft.entity.vehicle.BoatEntity; +import net.minecraft.entity.vehicle.AbstractBoatEntity; +import net.minecraft.entity.vehicle.RaftEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -@Mixin(BoatEntity.class) +@Mixin(AbstractBoatEntity.class) public abstract class AllowRaft { @ModifyReturnValue(method = "isSmallerThanBoat", at = @At("RETURN")) private boolean allowRaft(boolean original, @Local(argsOnly = true)Entity entity){ - if (entity instanceof AbstractHorseEntity && hb$thiz().getVariant() == BoatEntity.Type.BAMBOO) + if (entity instanceof AbstractHorseEntity && hb$thiz() instanceof RaftEntity) return true; return original; } @Unique - private BoatEntity hb$thiz() { - return ((BoatEntity)(Object)this); + private AbstractBoatEntity hb$thiz() { + return ((AbstractBoatEntity)(Object)this); } } diff --git a/src/main/java/net/F53/HorseBuff/mixin/Server/MountedModifiers.java b/src/main/java/net/F53/HorseBuff/mixin/Server/MountedModifiers.java index b128e0a..d619105 100644 --- a/src/main/java/net/F53/HorseBuff/mixin/Server/MountedModifiers.java +++ b/src/main/java/net/F53/HorseBuff/mixin/Server/MountedModifiers.java @@ -36,12 +36,12 @@ public boolean startRiding(Entity entity, boolean force) { return result; if (ModConfig.getInstance().stepHeight) { - EntityAttributeInstance stepHeight = horse.getAttributeInstance(EntityAttributes.GENERIC_STEP_HEIGHT); + EntityAttributeInstance stepHeight = horse.getAttributeInstance(EntityAttributes.STEP_HEIGHT); if (stepHeight != null) stepHeight.addTemporaryModifier(mountedStepHeight); } if (ModConfig.getInstance().breakSpeed) { - EntityAttributeInstance breakSpeed = getAttributeInstance(EntityAttributes.PLAYER_BLOCK_BREAK_SPEED); + EntityAttributeInstance breakSpeed = getAttributeInstance(EntityAttributes.BLOCK_BREAK_SPEED); if (breakSpeed != null) breakSpeed.addTemporaryModifier(mountedBreakSpeed); } return result; @@ -59,10 +59,10 @@ public void stopRiding() { return; } - EntityAttributeInstance stepHeight = horse.getAttributeInstance(EntityAttributes.GENERIC_STEP_HEIGHT); + EntityAttributeInstance stepHeight = horse.getAttributeInstance(EntityAttributes.STEP_HEIGHT); if (stepHeight != null) stepHeight.removeModifier(mountedStepHeight); - EntityAttributeInstance breakSpeed = getAttributeInstance(EntityAttributes.PLAYER_BLOCK_BREAK_SPEED); + EntityAttributeInstance breakSpeed = getAttributeInstance(EntityAttributes.BLOCK_BREAK_SPEED); if (breakSpeed != null) breakSpeed.removeModifier(mountedBreakSpeed); super.stopRiding(); From ad3d303b0d340e5c358448b2f74f5354c3aa112f Mon Sep 17 00:00:00 2001 From: Cassian Godsted Date: Fri, 22 Nov 2024 18:43:40 -0500 Subject: [PATCH 2/6] Fix transparent markings mixin --- .../net/F53/HorseBuff/mixin/Client/TransparentMarkings.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/F53/HorseBuff/mixin/Client/TransparentMarkings.java b/src/main/java/net/F53/HorseBuff/mixin/Client/TransparentMarkings.java index 13b0592..f7dd3ec 100644 --- a/src/main/java/net/F53/HorseBuff/mixin/Client/TransparentMarkings.java +++ b/src/main/java/net/F53/HorseBuff/mixin/Client/TransparentMarkings.java @@ -20,7 +20,7 @@ @Mixin(value = HorseMarkingFeatureRenderer.class, priority = 960) public class TransparentMarkings { - @WrapOperation(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/entity/passive/HorseEntity;FFFFFF)V", + @WrapOperation(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/state/HorseEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/RenderLayer;getEntityTranslucent(Lnet/minecraft/util/Identifier;)Lnet/minecraft/client/render/RenderLayer;")) RenderLayer makeRenderLayerTranslucent(Identifier texture, Operation original, @Local(argsOnly = true) HorseEntity horseEntity, @Share("alpha") LocalIntRef alpha) { alpha.set(getAlpha(horseEntity)); @@ -28,9 +28,9 @@ RenderLayer makeRenderLayerTranslucent(Identifier texture, Operation instance, MatrixStack matrixStack, VertexConsumer vertexConsumer, int light, int overlay, Operation original, @Share("alpha") LocalIntRef alpha) { + void modifyOverlayAlpha(HorseEntityModel instance, MatrixStack matrixStack, VertexConsumer vertexConsumer, int light, int overlay, Operation original, @Share("alpha") LocalIntRef alpha) { instance.render(matrixStack, vertexConsumer, light, overlay, ColorHelper.withAlpha(alpha.get(), 0xFFFFFF)); } } From 8f34acf5eb5b58e79a7bb02ca467cd8b87125b7a Mon Sep 17 00:00:00 2001 From: Cassian Godsted Date: Fri, 22 Nov 2024 18:49:11 -0500 Subject: [PATCH 3/6] Partial fixes for jeb horses --- .../mixin/Client/JebHorseTintable.java | 23 +++++++++++++------ .../net/F53/HorseBuff/utils/RenderUtils.java | 8 +++++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/F53/HorseBuff/mixin/Client/JebHorseTintable.java b/src/main/java/net/F53/HorseBuff/mixin/Client/JebHorseTintable.java index 73e375c..d92e305 100644 --- a/src/main/java/net/F53/HorseBuff/mixin/Client/JebHorseTintable.java +++ b/src/main/java/net/F53/HorseBuff/mixin/Client/JebHorseTintable.java @@ -1,22 +1,31 @@ package net.F53.HorseBuff.mixin.Client; import net.minecraft.client.render.entity.HorseEntityRenderer; +import net.minecraft.client.render.entity.state.HorseEntityRenderState; import net.minecraft.entity.passive.HorseColor; -import net.minecraft.entity.passive.HorseEntity; +import net.minecraft.util.Identifier; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +import java.util.Map; + import static net.F53.HorseBuff.utils.RenderUtils.isJeb; @Mixin(value = HorseEntityRenderer.class, priority = 960) public class JebHorseTintable { - @Redirect(method = "getTexture(Lnet/minecraft/entity/passive/HorseEntity;)Lnet/minecraft/util/Identifier;", - at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/passive/HorseEntity;getVariant()Lnet/minecraft/entity/passive/HorseColor;")) - HorseColor jebHorseTintable(HorseEntity instance){ - if (isJeb(instance)){ - return HorseColor.WHITE; + @Final + @Shadow + private static Map TEXTURES; + + @Redirect(method = "getTexture(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;)Lnet/minecraft/util/Identifier;", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/HorseEntityRenderer;getTexture(Lnet/minecraft/client/render/entity/state/HorseEntityRenderState;)Lnet/minecraft/util/Identifier;")) + Identifier jebHorseTintable(HorseEntityRenderer instance, HorseEntityRenderState horseEntityRenderState){ + if (isJeb(horseEntityRenderState)){ + return TEXTURES.get(HorseColor.WHITE); } - return instance.getVariant(); + return TEXTURES.get(horseEntityRenderState.color); } } diff --git a/src/main/java/net/F53/HorseBuff/utils/RenderUtils.java b/src/main/java/net/F53/HorseBuff/utils/RenderUtils.java index 88e5d33..41fc2b9 100644 --- a/src/main/java/net/F53/HorseBuff/utils/RenderUtils.java +++ b/src/main/java/net/F53/HorseBuff/utils/RenderUtils.java @@ -2,11 +2,15 @@ import net.F53.HorseBuff.config.ModConfig; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.entity.HorseEntityRenderer; +import net.minecraft.client.render.entity.state.HorseEntityRenderState; import net.minecraft.entity.Entity; +import net.minecraft.text.Text; public class RenderUtils { - public static boolean isJeb(Entity entity) { - return ModConfig.getInstance().jeb_Horses && entity.hasCustomName() && "jeb_".equals(entity.getName().getString()); + public static boolean isJeb(HorseEntityRenderState entity) { + if (entity.customName != null) + return ModConfig.getInstance().jeb_Horses && entity.customName.equals(Text.of("jeb_")); } public static int getAlpha(Entity horse) { From 8cf3763cc8a79a5189ebc0a5170e8f0781f0c5c8 Mon Sep 17 00:00:00 2001 From: Cassian Godsted Date: Fri, 22 Nov 2024 18:54:14 -0500 Subject: [PATCH 4/6] Update RenderUtils.java --- src/main/java/net/F53/HorseBuff/utils/RenderUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/F53/HorseBuff/utils/RenderUtils.java b/src/main/java/net/F53/HorseBuff/utils/RenderUtils.java index 41fc2b9..a3c3450 100644 --- a/src/main/java/net/F53/HorseBuff/utils/RenderUtils.java +++ b/src/main/java/net/F53/HorseBuff/utils/RenderUtils.java @@ -11,6 +11,7 @@ public class RenderUtils { public static boolean isJeb(HorseEntityRenderState entity) { if (entity.customName != null) return ModConfig.getInstance().jeb_Horses && entity.customName.equals(Text.of("jeb_")); + else return false; } public static int getAlpha(Entity horse) { From 5f5c0df00dc7e7e7f32daea004a55c8aead95486 Mon Sep 17 00:00:00 2001 From: Cassian Godsted Date: Fri, 22 Nov 2024 18:55:44 -0500 Subject: [PATCH 5/6] fix identifiers --- .../java/net/F53/HorseBuff/mixin/Server/MountedModifiers.java | 4 ++-- src/main/resources/horsebuff.accesswidener | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/F53/HorseBuff/mixin/Server/MountedModifiers.java b/src/main/java/net/F53/HorseBuff/mixin/Server/MountedModifiers.java index d619105..96eff31 100644 --- a/src/main/java/net/F53/HorseBuff/mixin/Server/MountedModifiers.java +++ b/src/main/java/net/F53/HorseBuff/mixin/Server/MountedModifiers.java @@ -25,9 +25,9 @@ protected MountedModifiers(EntityType entityType, World } @Unique - EntityAttributeModifier mountedStepHeight = new EntityAttributeModifier(new Identifier("horse-buff", "mounted-step-height"), 0.1, EntityAttributeModifier.Operation.ADD_VALUE); + EntityAttributeModifier mountedStepHeight = new EntityAttributeModifier(Identifier.of("horse-buff", "mounted-step-height"), 0.1, EntityAttributeModifier.Operation.ADD_VALUE); @Unique - EntityAttributeModifier mountedBreakSpeed = new EntityAttributeModifier(new Identifier("horse-buff", "mounted-break-speed"), 5, EntityAttributeModifier.Operation.ADD_MULTIPLIED_BASE); + EntityAttributeModifier mountedBreakSpeed = new EntityAttributeModifier(Identifier.of("horse-buff", "mounted-break-speed"), 5, EntityAttributeModifier.Operation.ADD_MULTIPLIED_BASE); @Override public boolean startRiding(Entity entity, boolean force) { diff --git a/src/main/resources/horsebuff.accesswidener b/src/main/resources/horsebuff.accesswidener index 229ad34..c590ee0 100644 --- a/src/main/resources/horsebuff.accesswidener +++ b/src/main/resources/horsebuff.accesswidener @@ -1,5 +1,3 @@ accessWidener v2 named -accessible method net/minecraft/util/Identifier (Ljava/lang/String;Ljava/lang/String;)V - accessible field net/minecraft/entity/passive/AbstractHorseEntity jumping Z From 325473e7fb532203060af7f72fbcb9bfc09778e9 Mon Sep 17 00:00:00 2001 From: Cassian Godsted Date: Fri, 22 Nov 2024 19:01:39 -0500 Subject: [PATCH 6/6] Closer to vanilla jeb check --- src/main/java/net/F53/HorseBuff/utils/RenderUtils.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/net/F53/HorseBuff/utils/RenderUtils.java b/src/main/java/net/F53/HorseBuff/utils/RenderUtils.java index a3c3450..bd3b95b 100644 --- a/src/main/java/net/F53/HorseBuff/utils/RenderUtils.java +++ b/src/main/java/net/F53/HorseBuff/utils/RenderUtils.java @@ -9,9 +9,7 @@ public class RenderUtils { public static boolean isJeb(HorseEntityRenderState entity) { - if (entity.customName != null) - return ModConfig.getInstance().jeb_Horses && entity.customName.equals(Text.of("jeb_")); - else return false; + return ModConfig.getInstance().jeb_Horses && entity.customName != null && "jeb_".equals(entity.customName.getString()); } public static int getAlpha(Entity horse) {