From 617cf1c882919cd00b62c1f0d3eb272dc18e9cdf Mon Sep 17 00:00:00 2001 From: Sollace Date: Fri, 29 Mar 2019 17:26:39 +0200 Subject: [PATCH] Update mixin code --- .../client/PonyRenderManager.java | 2 +- .../client/ducks/IBufferedTexture.java | 7 +++++ .../mixin/MixinFirstPersonRenderer.java | 19 +++++------- .../client/mixin/MixinRenderManager.java | 5 ++-- .../mixin/MixinThreadDownloadImageData.java | 30 +++++++++++++++++++ .../com/minelittlepony/client/pony/Pony.java | 10 +++++-- src/client/resources/minelp.mixin.json | 3 +- 7 files changed, 58 insertions(+), 18 deletions(-) create mode 100644 src/client/java/com/minelittlepony/client/ducks/IBufferedTexture.java create mode 100644 src/client/java/com/minelittlepony/client/mixin/MixinThreadDownloadImageData.java diff --git a/src/client/java/com/minelittlepony/client/PonyRenderManager.java b/src/client/java/com/minelittlepony/client/PonyRenderManager.java index f4953f7e..8da20037 100644 --- a/src/client/java/com/minelittlepony/client/PonyRenderManager.java +++ b/src/client/java/com/minelittlepony/client/PonyRenderManager.java @@ -64,7 +64,7 @@ public class PonyRenderManager { private void addPlayerSkin(RenderManager manager, boolean slimArms, PlayerModels playerModel) { RenderPonyPlayer renderer = playerModel.createRenderer(manager, slimArms); - ((MixinRenderManager)manager).getSkinMap().put(playerModel.getId(slimArms), renderer); + ((MixinRenderManager)manager).getMutableSkinMap().put(playerModel.getId(slimArms), renderer); } /** diff --git a/src/client/java/com/minelittlepony/client/ducks/IBufferedTexture.java b/src/client/java/com/minelittlepony/client/ducks/IBufferedTexture.java new file mode 100644 index 00000000..be8f9b47 --- /dev/null +++ b/src/client/java/com/minelittlepony/client/ducks/IBufferedTexture.java @@ -0,0 +1,7 @@ +package com.minelittlepony.client.ducks; + +import net.minecraft.client.renderer.texture.NativeImage; + +public interface IBufferedTexture { + NativeImage getBufferedImage(); +} diff --git a/src/client/java/com/minelittlepony/client/mixin/MixinFirstPersonRenderer.java b/src/client/java/com/minelittlepony/client/mixin/MixinFirstPersonRenderer.java index eb6eaadf..a51df940 100644 --- a/src/client/java/com/minelittlepony/client/mixin/MixinFirstPersonRenderer.java +++ b/src/client/java/com/minelittlepony/client/mixin/MixinFirstPersonRenderer.java @@ -17,18 +17,15 @@ import net.minecraft.item.ItemStack; @Mixin(FirstPersonRenderer.class) public class MixinFirstPersonRenderer { - private static final String AbstractClientPlayer = "Lnet/minecraft/client/entity/AbstractClientPlayer;"; - private static final String ItemStack = "Lnet/minecraft/item/ItemStack;"; - private static final String EnumHand = "Lnet/minecraft/util/EnumHand;"; - private static final String EntityLivingBase = "Lnet/minecraft/entity/EntityLivingBase;"; - private static final String TransformType = "Lnet/minecraft/client/renderer/block/ItemCameraTransforms$TransformType;"; - - // TODO: This has moved to mc.getFirstPersonRenderer() - //public void renderItemInFirstPerson(AbstractClientPlayer player, float p_187457_2_, float p_187457_3_, EnumHand hand, float p_187457_5_, ItemStack stack, float p_187457_7_) - //public void renderItemSide(EntityLivingBase entitylivingbaseIn, ItemStack heldStack, ItemCameraTransforms.TransformType transform, boolean leftHanded) - @Redirect(method = "renderItemInFirstPerson(" + AbstractClientPlayer + "FF" + EnumHand + "F" + ItemStack + "F)V", + @Redirect(method = "renderItemInFirstPerson(" + + "Lnet/minecraft/client/entity/AbstractClientPlayer;FF" + + "Lnet/minecraft/util/EnumHand;F" + + "Lnet/minecraft/item/ItemStack;F)V", at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/ItemRenderer;renderItemSide(" + EntityLivingBase + ItemStack + TransformType + "Z)V")) + target = "Lnet/minecraft/client/renderer/FirstPersonRenderer;renderItemSide(" + + "Lnet/minecraft/entity/EntityLivingBase;" + + "Lnet/minecraft/item/ItemStack;" + + "Lnet/minecraft/client/renderer/model/ItemCameraTransforms$TransformType;Z)V")) private void redirectRenderItemSide(ItemRenderer self, EntityLivingBase entity, ItemStack stack, TransformType transform, boolean left) { PonyRenderManager.getInstance().getMagicRenderer().renderItemInFirstPerson(self, (AbstractClientPlayer)entity, stack, transform, left); } diff --git a/src/client/java/com/minelittlepony/client/mixin/MixinRenderManager.java b/src/client/java/com/minelittlepony/client/mixin/MixinRenderManager.java index 75c32106..6f8cdd54 100644 --- a/src/client/java/com/minelittlepony/client/mixin/MixinRenderManager.java +++ b/src/client/java/com/minelittlepony/client/mixin/MixinRenderManager.java @@ -10,6 +10,7 @@ import net.minecraft.client.renderer.entity.RenderPlayer; @Mixin(RenderManager.class) public interface MixinRenderManager { - @Accessor - Map getSkinMap(); + // There is a method to get it, but it's made mutable my Forge. + @Accessor("skinMap") + Map getMutableSkinMap(); } diff --git a/src/client/java/com/minelittlepony/client/mixin/MixinThreadDownloadImageData.java b/src/client/java/com/minelittlepony/client/mixin/MixinThreadDownloadImageData.java new file mode 100644 index 00000000..a28827b5 --- /dev/null +++ b/src/client/java/com/minelittlepony/client/mixin/MixinThreadDownloadImageData.java @@ -0,0 +1,30 @@ +package com.minelittlepony.client.mixin; + +import net.minecraft.client.renderer.texture.ThreadDownloadImageData; +import net.minecraft.client.renderer.texture.NativeImage; +import net.minecraft.client.renderer.texture.SimpleTexture; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; + +import com.minelittlepony.client.ducks.IBufferedTexture; + +@Mixin(ThreadDownloadImageData.class) +public abstract class MixinThreadDownloadImageData extends SimpleTexture implements IBufferedTexture { + + MixinThreadDownloadImageData() {super(null);} + + private NativeImage cachedImage; + + @Override + public NativeImage getBufferedImage() { + return cachedImage; + } + + @Inject(method = "setImage(Lnet/minecraft/client/renderer/texture/NativeImage;)V", + at = @At("HEAD")) + private void onSetImage(NativeImage nativeImageIn) { + cachedImage = nativeImageIn; + } +} diff --git a/src/client/java/com/minelittlepony/client/pony/Pony.java b/src/client/java/com/minelittlepony/client/pony/Pony.java index 10c0dbff..ef3ab44d 100644 --- a/src/client/java/com/minelittlepony/client/pony/Pony.java +++ b/src/client/java/com/minelittlepony/client/pony/Pony.java @@ -3,10 +3,9 @@ package com.minelittlepony.client.pony; import com.google.common.base.MoreObjects; import com.minelittlepony.MineLittlePony; import com.minelittlepony.client.PonyRenderManager; +import com.minelittlepony.client.ducks.IBufferedTexture; import com.minelittlepony.client.ducks.IRenderPony; import com.minelittlepony.client.transform.PonyTransformation; -import com.minelittlepony.hdskins.resources.texture.DynamicTextureImage; -import com.minelittlepony.hdskins.resources.texture.IBufferedTexture; import com.minelittlepony.hdskins.util.ProfileTextureUtil; import com.minelittlepony.pony.IPony; import com.minelittlepony.pony.IPonyData; @@ -16,6 +15,7 @@ import com.minelittlepony.util.chron.Touchable; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.DynamicTexture; import net.minecraft.client.renderer.texture.ITextureObject; import net.minecraft.client.renderer.texture.MissingTextureSprite; import net.minecraft.client.renderer.texture.NativeImage; @@ -65,7 +65,7 @@ public class Pony extends Touchable implements IPony { if (ponyTexture == null) { ponyTexture = ProfileTextureUtil.getDynamicBufferedImage(16, 16, MissingTextureSprite.getDynamicTexture()); - Minecraft.getInstance().getTextureManager().loadTexture(resource, new DynamicTextureImage(ponyTexture)); + Minecraft.getInstance().getTextureManager().loadTexture(resource, new DynamicTexture(ponyTexture)); } return checkSkin(ponyTexture); @@ -105,6 +105,10 @@ public class Pony extends Touchable implements IPony { ITextureObject texture = Minecraft.getInstance().getTextureManager().getTexture(resource); + if (texture instanceof DynamicTexture) { + return ((DynamicTexture)texture).getTextureData(); + } + if (texture instanceof IBufferedTexture) { return ((IBufferedTexture) texture).getBufferedImage(); } diff --git a/src/client/resources/minelp.mixin.json b/src/client/resources/minelp.mixin.json index eb4c0730..70f8210f 100644 --- a/src/client/resources/minelp.mixin.json +++ b/src/client/resources/minelp.mixin.json @@ -9,6 +9,7 @@ "MixinFirstPersonRenderer", "MixinGlStateManager", "MixinItemRenderer", - "MixinRenderManager" + "MixinRenderManager", + "MixinThreadDownloadImageData" ] }