diff --git a/src/main/java/xonin/backhand/client/hooks/ItemRendererHooks.java b/src/main/java/xonin/backhand/client/hooks/ItemRendererHooks.java new file mode 100644 index 0000000..2f9fe91 --- /dev/null +++ b/src/main/java/xonin/backhand/client/hooks/ItemRendererHooks.java @@ -0,0 +1,54 @@ +package xonin.backhand.client.hooks; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; +import net.minecraft.item.ItemMap; +import net.minecraft.item.ItemStack; + +import org.lwjgl.opengl.GL11; + +import xonin.backhand.api.core.BackhandUtils; +import xonin.backhand.api.core.IBackhandPlayer; +import xonin.backhand.client.utils.BackhandRenderHelper; +import xonin.backhand.utils.BackhandConfig; +import xonin.backhand.utils.BackhandConfigClient; + +public class ItemRendererHooks { + + /** + * Extracted outside the mixin to be used in Angelica for Backhand compat + * + * @param frame + */ + public static void renderOffhandReturn(float frame) { + EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer; + if (BackhandUtils.isUsingOffhand(player)) return; + + ItemStack mainhandItem = player.getCurrentEquippedItem(); + ItemStack offhandItem = BackhandUtils.getOffhandItem(player); + if (!BackhandConfig.EmptyOffhand && !BackhandConfigClient.RenderEmptyOffhandAtRest && offhandItem == null) { + return; + } + if (offhandItem == null && !BackhandConfigClient.RenderEmptyOffhandAtRest + && ((IBackhandPlayer) player).getOffSwingProgress(frame) == 0) { + return; + } + if (mainhandItem != null && mainhandItem.getItem() instanceof ItemMap) { + return; + } + + BackhandRenderHelper.firstPersonFrame = frame; + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glCullFace(GL11.GL_FRONT); + GL11.glPushMatrix(); + GL11.glScalef(-1, 1, 1); + float f3 = player.prevRenderArmPitch + (player.renderArmPitch - player.prevRenderArmPitch) * frame; + float f4 = player.prevRenderArmYaw + (player.renderArmYaw - player.prevRenderArmYaw) * frame; + GL11.glRotatef((player.rotationPitch - f3) * -0.1F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef((player.rotationYaw - f4) * -0.1F, 0.0F, 1.0F, 0.0F); + BackhandUtils + .useOffhandItem(player, false, () -> BackhandRenderHelper.itemRenderer.renderItemInFirstPerson(frame)); + GL11.glPopMatrix(); + GL11.glCullFace(GL11.GL_BACK); + } +} diff --git a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinItemRenderer.java b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinItemRenderer.java index dec662a..9ca5a9b 100644 --- a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinItemRenderer.java +++ b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinItemRenderer.java @@ -4,10 +4,8 @@ import net.minecraft.client.entity.EntityClientPlayerMP; import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemMap; import net.minecraft.item.ItemStack; -import org.lwjgl.opengl.GL11; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -17,8 +15,7 @@ import xonin.backhand.api.core.BackhandUtils; import xonin.backhand.api.core.IBackhandPlayer; -import xonin.backhand.client.utils.BackhandRenderHelper; -import xonin.backhand.utils.BackhandConfig; +import xonin.backhand.client.hooks.ItemRendererHooks; import xonin.backhand.utils.BackhandConfigClient; @Mixin(ItemRenderer.class) @@ -26,35 +23,7 @@ public abstract class MixinItemRenderer { @Inject(method = "renderItemInFirstPerson", at = @At("RETURN")) private void backhand$renderItemInFirstPerson(float frame, CallbackInfo ci) { - EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer; - if (BackhandUtils.isUsingOffhand(player)) return; - - ItemStack mainhandItem = player.getCurrentEquippedItem(); - ItemStack offhandItem = BackhandUtils.getOffhandItem(player); - if (!BackhandConfig.EmptyOffhand && !BackhandConfigClient.RenderEmptyOffhandAtRest && offhandItem == null) { - return; - } - if (offhandItem == null && !BackhandConfigClient.RenderEmptyOffhandAtRest - && ((IBackhandPlayer) player).getOffSwingProgress(frame) == 0) { - return; - } - if (mainhandItem != null && mainhandItem.getItem() instanceof ItemMap) { - return; - } - - BackhandRenderHelper.firstPersonFrame = frame; - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glCullFace(GL11.GL_FRONT); - GL11.glPushMatrix(); - GL11.glScalef(-1, 1, 1); - float f3 = player.prevRenderArmPitch + (player.renderArmPitch - player.prevRenderArmPitch) * frame; - float f4 = player.prevRenderArmYaw + (player.renderArmYaw - player.prevRenderArmYaw) * frame; - GL11.glRotatef((player.rotationPitch - f3) * -0.1F, 1.0F, 0.0F, 0.0F); - GL11.glRotatef((player.rotationYaw - f4) * -0.1F, 0.0F, 1.0F, 0.0F); - BackhandUtils - .useOffhandItem(player, false, () -> BackhandRenderHelper.itemRenderer.renderItemInFirstPerson(frame)); - GL11.glPopMatrix(); - GL11.glCullFace(GL11.GL_BACK); + ItemRendererHooks.renderOffhandReturn(frame); } @ModifyExpressionValue(