diff --git a/src/client/java/com/minelittlepony/client/mixin/MixinFirstPersonRenderer.java b/src/client/java/com/minelittlepony/client/mixin/MixinFirstPersonRenderer.java new file mode 100644 index 00000000..eb6eaadf --- /dev/null +++ b/src/client/java/com/minelittlepony/client/mixin/MixinFirstPersonRenderer.java @@ -0,0 +1,35 @@ +package com.minelittlepony.client.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import com.minelittlepony.client.PonyRenderManager; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.renderer.FirstPersonRenderer; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; + +@SuppressWarnings("deprecation") // ItemCameraTransforms is deprecated by forge but we still need it. +@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", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/ItemRenderer;renderItemSide(" + EntityLivingBase + ItemStack + 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/MixinItemRenderer.java b/src/client/java/com/minelittlepony/client/mixin/MixinItemRenderer.java index db94784c..342afcc8 100644 --- a/src/client/java/com/minelittlepony/client/mixin/MixinItemRenderer.java +++ b/src/client/java/com/minelittlepony/client/mixin/MixinItemRenderer.java @@ -1,34 +1,49 @@ package com.minelittlepony.client.mixin; +import com.minelittlepony.client.ducks.IRenderItem; +import com.minelittlepony.client.render.LevitatingItemRenderer; + +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.resources.IResourceManagerReloadListener; +import net.minecraft.item.ItemStack; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.minelittlepony.client.PonyRenderManager; +@SuppressWarnings("deprecation") // IResourceManagerReloadListener is deprecated by forge but it's part of the signature. We can't remove it. +@Mixin(ItemRenderer.class) +public abstract class MixinItemRenderer implements IResourceManagerReloadListener, IRenderItem { -import net.minecraft.client.entity.AbstractClientPlayer; -import net.minecraft.client.renderer.FirstPersonRenderer; -import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; + private boolean transparency; -@Mixin(FirstPersonRenderer.class) -public class MixinItemRenderer { + @Override + public void useTransparency(boolean transparency) { + this.transparency = transparency; + } - 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;"; + @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/renderer/block/model/IBakedModel;)V", at = @At("HEAD")) + private void onRenderItem(ItemStack stack, IBakedModel model, CallbackInfo info) { + if (transparency) { + LevitatingItemRenderer.enableItemGlowRenderProfile(); + } + } - // 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", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/ItemRenderer;renderItemSide(" + EntityLivingBase + ItemStack + 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); + @ModifyArg(method = "renderQuads(Lnet/minecraft/client/renderer/BufferBuilder;Ljava/util/List;ILnet/minecraft/item/ItemStack;)V", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/RenderItem;renderQuad(Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/client/renderer/block/model/BakedQuad;I)V"), + index = 2) + private int modifyItemRenderTint(int color) { + return transparency ? -1 : color; + } + + @Inject(method = "renderEffect(Lnet/minecraft/client/renderer/block/model/IBakedModel;)V", at = @At("HEAD"), cancellable = true) + private void renderEffect(IBakedModel model, CallbackInfo info) { + if (transparency) { + info.cancel(); + } } } diff --git a/src/client/java/com/minelittlepony/client/mixin/MixinRenderItem.java b/src/client/java/com/minelittlepony/client/mixin/MixinRenderItem.java deleted file mode 100644 index c7a31d21..00000000 --- a/src/client/java/com/minelittlepony/client/mixin/MixinRenderItem.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.minelittlepony.client.mixin; - -import com.minelittlepony.client.ducks.IRenderItem; -import com.minelittlepony.client.render.LevitatingItemRenderer; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.client.renderer.model.IBakedModel; -import net.minecraft.resources.IResourceManagerReloadListener; -import net.minecraft.item.ItemStack; - -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.ModifyArg; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ItemRenderer.class) -public abstract class MixinRenderItem implements IResourceManagerReloadListener, IRenderItem { - - private boolean transparency; - - @Override - public void useTransparency(boolean transparency) { - this.transparency = transparency; - } - - @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/renderer/block/model/IBakedModel;)V", at = @At("HEAD")) - private void onRenderItem(ItemStack stack, IBakedModel model, CallbackInfo info) { - if (transparency) { - LevitatingItemRenderer.enableItemGlowRenderProfile(); - } - } - - @ModifyArg(method = "renderQuads(Lnet/minecraft/client/renderer/BufferBuilder;Ljava/util/List;ILnet/minecraft/item/ItemStack;)V", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/RenderItem;renderQuad(Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/client/renderer/block/model/BakedQuad;I)V"), - index = 2) - private int modifyItemRenderTint(int color) { - return transparency ? -1 : color; - } - - @Inject(method = "renderEffect(Lnet/minecraft/client/renderer/block/model/IBakedModel;)V", at = @At("HEAD"), cancellable = true) - private void renderEffect(IBakedModel model, CallbackInfo info) { - if (transparency) { - info.cancel(); - } - } -} diff --git a/src/client/resources/minelp.mixin.json b/src/client/resources/minelp.mixin.json index 04f87b4b..eb4c0730 100644 --- a/src/client/resources/minelp.mixin.json +++ b/src/client/resources/minelp.mixin.json @@ -6,9 +6,9 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "MixinDefaultPlayerSkin", + "MixinFirstPersonRenderer", "MixinGlStateManager", "MixinItemRenderer", - "MixinRenderItem", "MixinRenderManager" ] }