From 9fd715a3f8c6e4b3a1ba50e00aee97c09a0938c8 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 8 Apr 2024 20:59:42 -0400 Subject: [PATCH] MorePlayerModels Support for Overlays --- .../npcs/client/ClientEventHandler.java | 8 ++--- .../client/renderer/RenderCNPCPlayer.java | 34 +++++++++++++++++-- .../npcs/mixin/MixinEntityRenderer.java | 2 +- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/main/java/noppes/npcs/client/ClientEventHandler.java b/src/main/java/noppes/npcs/client/ClientEventHandler.java index 0139e0c8a..c42179714 100644 --- a/src/main/java/noppes/npcs/client/ClientEventHandler.java +++ b/src/main/java/noppes/npcs/client/ClientEventHandler.java @@ -167,10 +167,6 @@ public class ClientEventHandler { public void pre(RenderPlayerEvent.Pre event){ if(!(event.entity instanceof AbstractClientPlayer)) return; - - renderCNPCPlayer.modelBipedMain = event.renderer.modelBipedMain; - renderCNPCPlayer.modelArmor = event.renderer.modelArmor; - renderCNPCPlayer.modelArmorChestplate = event.renderer.modelArmorChestplate; } @SubscribeEvent @@ -186,6 +182,10 @@ public class ClientEventHandler { } catch (ClassNotFoundException ignored) {} if (!(event.renderer instanceof RenderCNPCPlayer)) { + renderCNPCPlayer.mainModel = event.renderer.mainModel; + renderCNPCPlayer.modelBipedMain = event.renderer.modelBipedMain; + renderCNPCPlayer.modelArmor = event.renderer.modelArmor; + renderCNPCPlayer.modelArmorChestplate = event.renderer.modelArmorChestplate; renderCNPCPlayer.tempRenderPartialTicks = event.partialRenderTick; double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) event.partialRenderTick - RenderManager.renderPosX; double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) event.partialRenderTick - RenderManager.renderPosY; diff --git a/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java b/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java index dd55f3b53..0c48a35e8 100644 --- a/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java +++ b/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java @@ -1,5 +1,6 @@ package noppes.npcs.client.renderer; +import cpw.mods.fml.common.Loader; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; @@ -18,6 +19,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.MathHelper; import net.minecraftforge.client.event.RenderPlayerEvent; import noppes.npcs.client.ClientCacheHandler; +import noppes.npcs.client.model.ModelMPM; import noppes.npcs.controllers.data.SkinOverlay; import org.lwjgl.opengl.GL11; import org.lwjgl.util.glu.Project; @@ -26,6 +28,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; public class RenderCNPCPlayer extends RenderPlayer { + public static boolean hasMPM = false; public Minecraft mc = Minecraft.getMinecraft(); public RenderCNPCHand itemRenderer = new RenderCNPCHand(mc); public float tempRenderPartialTicks; @@ -41,6 +44,9 @@ public class RenderCNPCPlayer extends RenderPlayer { this.modelArmorChestplate = new ModelBiped(1.0F); this.modelArmor = new ModelBiped(0.5F); this.setRenderManager(RenderManager.instance); + + if(Loader.isModLoaded("moreplayermodels")) + hasMPM = true; } private boolean preRenderOverlay(SkinOverlay overlayData, EntityPlayer player) { @@ -105,7 +111,7 @@ public class RenderCNPCPlayer extends RenderPlayer { } @Override - protected void renderModel(EntityLivingBase entity, float p_77036_2_, float p_77036_3_, float p_77036_4_, float p_77036_5_, float p_77036_6_, float p_77036_7_) { + protected void renderModel(EntityLivingBase entity, float par2, float par3, float par4, float par5, float par6, float par7) { EntityPlayer player = (EntityPlayer) entity; if (!entity.isInvisible()) { @@ -121,7 +127,11 @@ public class RenderCNPCPlayer extends RenderPlayer { if (!this.preRenderOverlay(overlayData, player)) continue; - this.modelBipedMain.render(entity, p_77036_2_, p_77036_3_, p_77036_4_, p_77036_5_, p_77036_6_, p_77036_7_); + if(hasMPM) + renderMorePlayerModel(true); + this.modelBipedMain.render(entity, par2, par3, par4, par5, par6, par7); + if(hasMPM) + renderMorePlayerModel(false); postRenderOverlay(); } } @@ -309,6 +319,26 @@ public class RenderCNPCPlayer extends RenderPlayer { } } + public void renderMorePlayerModel(boolean setField){ + Class ModelMPMClass = null; + Field isArmor = null; + + try { + ModelMPMClass = Class.forName("noppes.mpm.client.model.ModelMPM"); + isArmor = ModelMPMClass.getDeclaredField("isArmor"); + } catch (Exception ignored) {} + + // Assuming this.modelBipedMain is an instance of ModelMPM + if (ModelMPMClass != null && ModelMPMClass.isInstance(this.modelBipedMain)) { + try { + // Set isArmor field to false + if (isArmor != null) { + isArmor.setBoolean(this.modelBipedMain, setField); + } + } catch (IllegalAccessException ignored) {} + } + } + public void renderDBCModel(RenderPlayerEvent.Specials.Post event) { EntityPlayer player = event.entityPlayer; diff --git a/src/main/java/noppes/npcs/mixin/MixinEntityRenderer.java b/src/main/java/noppes/npcs/mixin/MixinEntityRenderer.java index a19ea301a..b23a03e7f 100644 --- a/src/main/java/noppes/npcs/mixin/MixinEntityRenderer.java +++ b/src/main/java/noppes/npcs/mixin/MixinEntityRenderer.java @@ -19,7 +19,7 @@ public abstract class MixinEntityRenderer { EntityPlayer player = Minecraft.getMinecraft().thePlayer; if (ClientEventHandler.hasOverlays(player)) { GL11.glPushMatrix(); - ClientEventHandler.renderCNPCPlayer.renderHand(p_78476_1_,0); + ClientEventHandler.renderCNPCSelf.renderHand(p_78476_1_,0); GL11.glPopMatrix(); } }