Update mixin code

This commit is contained in:
Sollace 2019-03-29 17:26:39 +02:00
parent 6d5728bdfa
commit 617cf1c882
7 changed files with 58 additions and 18 deletions

View file

@ -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);
}
/**

View file

@ -0,0 +1,7 @@
package com.minelittlepony.client.ducks;
import net.minecraft.client.renderer.texture.NativeImage;
public interface IBufferedTexture {
NativeImage getBufferedImage();
}

View file

@ -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);
}

View file

@ -10,6 +10,7 @@ import net.minecraft.client.renderer.entity.RenderPlayer;
@Mixin(RenderManager.class)
public interface MixinRenderManager {
@Accessor
Map<String, RenderPlayer> getSkinMap();
// There is a method to get it, but it's made mutable my Forge.
@Accessor("skinMap")
Map<String, RenderPlayer> getMutableSkinMap();
}

View file

@ -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;
}
}

View file

@ -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<Pony> 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<Pony> 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();
}

View file

@ -9,6 +9,7 @@
"MixinFirstPersonRenderer",
"MixinGlStateManager",
"MixinItemRenderer",
"MixinRenderManager"
"MixinRenderManager",
"MixinThreadDownloadImageData"
]
}