From 0a8fc3458d9965f8390b41a45696d2a96b60f341 Mon Sep 17 00:00:00 2001 From: c0508383 Date: Wed, 31 Aug 2022 07:53:35 -0500 Subject: [PATCH] Implemented mixins, used to render skin overlays without conflict with other mods that change rendering like Optifine. --- build.gradle | 102 +++- src/main/java/noppes/npcs/client/Client.java | 2 - .../npcs/client/ClientEventHandler.java | 26 +- .../noppes/npcs/client/ClientTickHandler.java | 10 +- .../npcs/client/renderer/RenderCNPCHand.java | 478 +----------------- .../client/renderer/RenderCNPCPlayer.java | 283 +++-------- .../npcs/mixin/CustomNPCsMixinPlugin.java | 50 ++ .../npcs/mixin/MixinEntityRenderer.java | 26 + src/main/resources/META-INF/customnpcs_at.cfg | 2 + src/main/resources/customnpcs.mixins.json | 9 + 10 files changed, 287 insertions(+), 701 deletions(-) create mode 100644 src/main/java/noppes/npcs/mixin/CustomNPCsMixinPlugin.java create mode 100644 src/main/java/noppes/npcs/mixin/MixinEntityRenderer.java create mode 100644 src/main/resources/META-INF/customnpcs_at.cfg create mode 100644 src/main/resources/customnpcs.mixins.json diff --git a/build.gradle b/build.gradle index 874b15714..0545ee9da 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,13 @@ buildscript { } } +configurations { + embed + compile.extendsFrom(embed) + shade + compile.extendsFrom(shade) +} + apply plugin: 'forge' version = "1.6.2-pre2" @@ -64,4 +71,97 @@ processResources } } -sourceSets {main { output.resourcesDir = output.classesDir }} \ No newline at end of file +sourceSets {main { output.resourcesDir = output.classesDir }} + +jar { + manifest { + attributes( + 'FMLAT': "customnpcs_at.cfg", + ) + } +} + +//########################################################################################################## +//######################################## Mixin Part ################################################ +//########################################################################################################## +//Add +//--tweakClass org.spongepowered.asm.launch.MixinTweaker --mixin customnpcs.mixins.json +//to your client and server program arguments if working in a dev environment. +def yourMixinConfig = 'customnpcs.mixins.json' +def refMapForYourConfig = 'customnpcs.refmap.json' +def relativePathToMixinAP = 'tools/mixin-0.8-SNAPSHOT.jar' +repositories { + maven { + name = "sponge" + url = "https://repo.spongepowered.org/maven/" + } +} + +dependencies { + embed('org.spongepowered:mixin:0.7.11-SNAPSHOT') { + // Mixin includes a lot of dependencies that are too up-to-date + exclude module: 'launchwrapper' + exclude module: 'guava' + exclude module: 'gson' + exclude module: 'commons-io' + exclude module: 'log4j-core' + } +} + +def refMap = "${tasks.compileJava.temporaryDir}" + File.separator + refMapForYourConfig + +def mixinSrg = "${tasks.reobf.temporaryDir}" + File.separator + "mixins.srg" + +jar { + configurations.shade.each { dep -> + from(project.zipTree(dep)){ + exclude 'META-INF', 'META-INF/**' + } + } + + from refMap + manifest { + attributes.put("TweakClass", "org.spongepowered.asm.launch.MixinTweaker") + attributes.put("FMLCorePluginContainsFMLMod", true) + attributes.put("ForceLoadAsMod", true) + attributes.put("MixinConfigs", yourMixinConfig) + } + + // embed libraries in jar + from configurations.embed.collect { + exclude '**/LICENSE.txt' + it.isDirectory() ? it : zipTree(it) + } +} + +reobf { + addExtraSrgFile mixinSrg +} + +afterEvaluate { + def fixedRelPathToAP = relativePathToMixinAP + if(fixedRelPathToAP.startsWith('./') || fixedRelPathToAP.startsWith('.\\')){ + fixedRelPathToAP = fixedRelPathToAP.substring(2) + } else if(fixedRelPathToAP.startsWith('/') || fixedRelPathToAP.startsWith('\\')){ + fixedRelPathToAP = fixedRelPathToAP.substring(1) + } + + tasks.compileJava { + println "Path: " + projectDir.absolutePath + options.compilerArgs += [ + // There's a bug in the AnnotationProcessor for 0.7.11 that will generate the annotations pointing to the parent class instead of subclass + // resulting in the mixin not being applied. This is fixed in 0.8, however 0.8 needs guava > 21.0, and minecraft ships with 17.0. + // So as a hacky workaround... ship with 0.7.11, but use the AP from 0.8 for compiling + "-processorpath", projectDir.absolutePath + '/' + fixedRelPathToAP, + "-processor", "org.spongepowered.tools.obfuscation.MixinObfuscationProcessorInjection,org.spongepowered.tools.obfuscation.MixinObfuscationProcessorTargets", + "-Xlint:-sunapi", "-XDenableSunApiLintControl", "-XDignore.symbol.file", + "-AreobfSrgFile=${tasks.reobf.srg}", "-AoutSrgFile=${mixinSrg}", "-AoutRefMapFile=${refMap}" + ] + } +} + +sourceSets { + main { + ext.refMap = refMapForYourConfig + } +} diff --git a/src/main/java/noppes/npcs/client/Client.java b/src/main/java/noppes/npcs/client/Client.java index 04d95c615..d79da20e5 100644 --- a/src/main/java/noppes/npcs/client/Client.java +++ b/src/main/java/noppes/npcs/client/Client.java @@ -19,9 +19,7 @@ import noppes.npcs.controllers.data.SkinOverlay; public class Client { public static OverlayQuestTracking questTrackingOverlay = null; public static HashMap customOverlays = new HashMap<>(); - public static HashMap> skinOverlays = new HashMap<>(); - public static HashMap entitySkinOverlayTicks = new HashMap<>(); public static void sendData(EnumPacketServer enu, Object... obs) { ByteBuf buffer = Unpooled.buffer(); diff --git a/src/main/java/noppes/npcs/client/ClientEventHandler.java b/src/main/java/noppes/npcs/client/ClientEventHandler.java index 995187cbe..4c3a01f7e 100644 --- a/src/main/java/noppes/npcs/client/ClientEventHandler.java +++ b/src/main/java/noppes/npcs/client/ClientEventHandler.java @@ -1,7 +1,6 @@ package noppes.npcs.client; import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.TickEvent; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.player.EntityPlayer; @@ -11,15 +10,15 @@ import net.minecraftforge.client.event.RenderHandEvent; import net.minecraftforge.client.event.RenderPlayerEvent; import noppes.npcs.client.gui.customoverlay.OverlayCustom; import noppes.npcs.client.renderer.RenderCNPCPlayer; -import org.lwjgl.opengl.GL11; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class ClientEventHandler { - private final RenderCNPCPlayer renderCNPCPlayer = new RenderCNPCPlayer(); + public static final RenderCNPCPlayer renderCNPCPlayer = new RenderCNPCPlayer(); public static HashMap disabledButtonTimes = new HashMap<>(); + public static float partialHandTicks; @SubscribeEvent public void onMouse(MouseEvent event) { @@ -105,29 +104,12 @@ public class ClientEventHandler { } } - @SubscribeEvent - public void onClientTick(TickEvent.ClientTickEvent event) { - Minecraft mc = Minecraft.getMinecraft(); - if (hasOverlays(mc.thePlayer)) { - if (mc.thePlayer != null && mc.theWorld != null && !mc.isGamePaused() && event.phase == TickEvent.Phase.END) { - renderCNPCPlayer.itemRenderer.updateEquippedItem(); - renderCNPCPlayer.updateFovModifierHand(); - } - } - } - @SubscribeEvent public void onRenderHand(RenderHandEvent event) { - if (hasOverlays(Minecraft.getMinecraft().thePlayer)) { - GL11.glPushMatrix(); - event.setCanceled(true); - GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); - renderCNPCPlayer.renderHand(event.partialTicks, event.renderPass); - GL11.glPopMatrix(); - } + partialHandTicks = event.partialTicks; } - private boolean hasOverlays(EntityPlayer player) { + public static boolean hasOverlays(EntityPlayer player) { return Client.skinOverlays.containsKey(player.getUniqueID()) && Client.skinOverlays.get(player.getUniqueID()).values().size() > 0; } } diff --git a/src/main/java/noppes/npcs/client/ClientTickHandler.java b/src/main/java/noppes/npcs/client/ClientTickHandler.java index adc26b179..8c710484c 100644 --- a/src/main/java/noppes/npcs/client/ClientTickHandler.java +++ b/src/main/java/noppes/npcs/client/ClientTickHandler.java @@ -18,6 +18,8 @@ import cpw.mods.fml.common.gameevent.TickEvent.Phase; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; +import static noppes.npcs.client.ClientEventHandler.renderCNPCPlayer; + public class ClientTickHandler{ private World prevWorld; private boolean otherContainer = false; @@ -27,9 +29,13 @@ public class ClientTickHandler{ @SubscribeEvent(priority = EventPriority.LOWEST) public void onClientTick(TickEvent.ClientTickEvent event){ - if(event.phase == Phase.END) - return; Minecraft mc = Minecraft.getMinecraft(); + if(event.phase == Phase.END) { + if (mc.thePlayer != null && mc.theWorld != null && !mc.isGamePaused() && ClientEventHandler.hasOverlays(mc.thePlayer)) { + renderCNPCPlayer.itemRenderer.updateEquippedItem(); + } + return; + } if(mc.thePlayer != null && mc.thePlayer.openContainer instanceof ContainerPlayer){ if(otherContainer){ NoppesUtilPlayer.sendData(EnumPlayerPacket.CheckQuestCompletion); diff --git a/src/main/java/noppes/npcs/client/renderer/RenderCNPCHand.java b/src/main/java/noppes/npcs/client/renderer/RenderCNPCHand.java index 8b1bf617d..ffaf64cad 100644 --- a/src/main/java/noppes/npcs/client/renderer/RenderCNPCHand.java +++ b/src/main/java/noppes/npcs/client/renderer/RenderCNPCHand.java @@ -1,41 +1,21 @@ package noppes.npcs.client.renderer; -import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityClientPlayerMP; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.entity.RenderPlayer; -import net.minecraft.client.renderer.texture.TextureManager; -import net.minecraft.client.renderer.texture.TextureUtil; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.*; -import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.storage.MapData; -import net.minecraftforge.client.ForgeHooksClient; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.client.MinecraftForgeClient; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; -import static net.minecraftforge.client.IItemRenderer.ItemRenderType.*; - public class RenderCNPCHand extends ItemRenderer { - private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png"); - private static final ResourceLocation RES_MAP_BACKGROUND = new ResourceLocation("textures/map/map_background.png"); - private static final ResourceLocation RES_UNDERWATER_OVERLAY = new ResourceLocation("textures/misc/underwater.png"); - /** A reference to the Minecraft object. */ private Minecraft mc; private ItemStack itemToRender; /** How far the current item has been equipped (0 disequipped and 1 fully up) */ private float equippedProgress; private float prevEquippedProgress; - private RenderBlocks renderBlocksIr = new RenderBlocks(); /** The index of the currently held item (0-8, or -1 if not yet updated) */ private int equippedItemSlot = -1; @@ -44,207 +24,10 @@ public class RenderCNPCHand extends ItemRenderer { this.mc = mc; } - public void renderItem(EntityLivingBase p_78443_1_, ItemStack p_78443_2_, int p_78443_3_) - { - this.renderItem(p_78443_1_, p_78443_2_, p_78443_3_, EQUIPPED); - } - - public void renderItem(EntityLivingBase p_78443_1_, ItemStack p_78443_2_, int p_78443_3_, IItemRenderer.ItemRenderType type) - { - GL11.glPushMatrix(); - TextureManager texturemanager = this.mc.getTextureManager(); - Item item = p_78443_2_.getItem(); - Block block = Block.getBlockFromItem(item); - - if (p_78443_2_ != null && block != null && block.getRenderBlockPass() != 0) - { - GL11.glEnable(GL11.GL_BLEND); - GL11.glEnable(GL11.GL_CULL_FACE); - OpenGlHelper.glBlendFunc(770, 771, 1, 0); - } - IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(p_78443_2_, type); - if (customRenderer != null) - { - texturemanager.bindTexture(texturemanager.getResourceLocation(p_78443_2_.getItemSpriteNumber())); - ForgeHooksClient.renderEquippedItem(type, customRenderer, renderBlocksIr, p_78443_1_, p_78443_2_); - } - else - if (p_78443_2_.getItemSpriteNumber() == 0 && item instanceof ItemBlock && RenderBlocks.renderItemIn3d(block.getRenderType())) - { - texturemanager.bindTexture(texturemanager.getResourceLocation(0)); - - if (p_78443_2_ != null && block != null && block.getRenderBlockPass() != 0) - { - GL11.glDepthMask(false); - this.renderBlocksIr.renderBlockAsItem(block, p_78443_2_.getItemDamage(), 1.0F); - GL11.glDepthMask(true); - } - else - { - this.renderBlocksIr.renderBlockAsItem(block, p_78443_2_.getItemDamage(), 1.0F); - } - } - else - { - IIcon iicon = p_78443_1_.getItemIcon(p_78443_2_, p_78443_3_); - - if (iicon == null) - { - GL11.glPopMatrix(); - return; - } - - texturemanager.bindTexture(texturemanager.getResourceLocation(p_78443_2_.getItemSpriteNumber())); - TextureUtil.func_152777_a(false, false, 1.0F); - Tessellator tessellator = Tessellator.instance; - float f = iicon.getMinU(); - float f1 = iicon.getMaxU(); - float f2 = iicon.getMinV(); - float f3 = iicon.getMaxV(); - float f4 = 0.0F; - float f5 = 0.3F; - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - GL11.glTranslatef(-f4, -f5, 0.0F); - float f6 = 1.5F; - GL11.glScalef(f6, f6, f6); - GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F); - renderItemIn2D(tessellator, f1, f2, f, f3, iicon.getIconWidth(), iicon.getIconHeight(), 0.0625F); - - if (p_78443_2_.hasEffect(p_78443_3_)) - { - GL11.glDepthFunc(GL11.GL_EQUAL); - GL11.glDisable(GL11.GL_LIGHTING); - texturemanager.bindTexture(RES_ITEM_GLINT); - GL11.glEnable(GL11.GL_BLEND); - OpenGlHelper.glBlendFunc(768, 1, 1, 0); - float f7 = 0.76F; - GL11.glColor4f(0.5F * f7, 0.25F * f7, 0.8F * f7, 1.0F); - GL11.glMatrixMode(GL11.GL_TEXTURE); - GL11.glPushMatrix(); - float f8 = 0.125F; - GL11.glScalef(f8, f8, f8); - float f9 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; - GL11.glTranslatef(f9, 0.0F, 0.0F); - GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); - renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F); - GL11.glPopMatrix(); - GL11.glPushMatrix(); - GL11.glScalef(f8, f8, f8); - f9 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; - GL11.glTranslatef(-f9, 0.0F, 0.0F); - GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); - renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F); - GL11.glPopMatrix(); - GL11.glMatrixMode(GL11.GL_MODELVIEW); - GL11.glDisable(GL11.GL_BLEND); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDepthFunc(GL11.GL_LEQUAL); - } - - GL11.glDisable(GL12.GL_RESCALE_NORMAL); - texturemanager.bindTexture(texturemanager.getResourceLocation(p_78443_2_.getItemSpriteNumber())); - TextureUtil.func_147945_b(); - } - - if (p_78443_2_ != null && block != null && block.getRenderBlockPass() != 0) - { - GL11.glDisable(GL11.GL_BLEND); - } - - GL11.glPopMatrix(); - } - - /** - * Renders an item held in hand as a 2D texture with thickness - */ - public static void renderItemIn2D(Tessellator p_78439_0_, float p_78439_1_, float p_78439_2_, float p_78439_3_, float p_78439_4_, int p_78439_5_, int p_78439_6_, float p_78439_7_) - { - p_78439_0_.startDrawingQuads(); - p_78439_0_.setNormal(0.0F, 0.0F, 1.0F); - p_78439_0_.addVertexWithUV(0.0D, 0.0D, 0.0D, (double)p_78439_1_, (double)p_78439_4_); - p_78439_0_.addVertexWithUV(1.0D, 0.0D, 0.0D, (double)p_78439_3_, (double)p_78439_4_); - p_78439_0_.addVertexWithUV(1.0D, 1.0D, 0.0D, (double)p_78439_3_, (double)p_78439_2_); - p_78439_0_.addVertexWithUV(0.0D, 1.0D, 0.0D, (double)p_78439_1_, (double)p_78439_2_); - p_78439_0_.draw(); - p_78439_0_.startDrawingQuads(); - p_78439_0_.setNormal(0.0F, 0.0F, -1.0F); - p_78439_0_.addVertexWithUV(0.0D, 1.0D, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)p_78439_2_); - p_78439_0_.addVertexWithUV(1.0D, 1.0D, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)p_78439_2_); - p_78439_0_.addVertexWithUV(1.0D, 0.0D, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)p_78439_4_); - p_78439_0_.addVertexWithUV(0.0D, 0.0D, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)p_78439_4_); - p_78439_0_.draw(); - float f5 = 0.5F * (p_78439_1_ - p_78439_3_) / (float)p_78439_5_; - float f6 = 0.5F * (p_78439_4_ - p_78439_2_) / (float)p_78439_6_; - p_78439_0_.startDrawingQuads(); - p_78439_0_.setNormal(-1.0F, 0.0F, 0.0F); - int k; - float f7; - float f8; - - for (k = 0; k < p_78439_5_; ++k) - { - f7 = (float)k / (float)p_78439_5_; - f8 = p_78439_1_ + (p_78439_3_ - p_78439_1_) * f7 - f5; - p_78439_0_.addVertexWithUV((double)f7, 0.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_4_); - p_78439_0_.addVertexWithUV((double)f7, 0.0D, 0.0D, (double)f8, (double)p_78439_4_); - p_78439_0_.addVertexWithUV((double)f7, 1.0D, 0.0D, (double)f8, (double)p_78439_2_); - p_78439_0_.addVertexWithUV((double)f7, 1.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_2_); - } - - p_78439_0_.draw(); - p_78439_0_.startDrawingQuads(); - p_78439_0_.setNormal(1.0F, 0.0F, 0.0F); - float f9; - - for (k = 0; k < p_78439_5_; ++k) - { - f7 = (float)k / (float)p_78439_5_; - f8 = p_78439_1_ + (p_78439_3_ - p_78439_1_) * f7 - f5; - f9 = f7 + 1.0F / (float)p_78439_5_; - p_78439_0_.addVertexWithUV((double)f9, 1.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_2_); - p_78439_0_.addVertexWithUV((double)f9, 1.0D, 0.0D, (double)f8, (double)p_78439_2_); - p_78439_0_.addVertexWithUV((double)f9, 0.0D, 0.0D, (double)f8, (double)p_78439_4_); - p_78439_0_.addVertexWithUV((double)f9, 0.0D, (double)(0.0F - p_78439_7_), (double)f8, (double)p_78439_4_); - } - - p_78439_0_.draw(); - p_78439_0_.startDrawingQuads(); - p_78439_0_.setNormal(0.0F, 1.0F, 0.0F); - - for (k = 0; k < p_78439_6_; ++k) - { - f7 = (float)k / (float)p_78439_6_; - f8 = p_78439_4_ + (p_78439_2_ - p_78439_4_) * f7 - f6; - f9 = f7 + 1.0F / (float)p_78439_6_; - p_78439_0_.addVertexWithUV(0.0D, (double)f9, 0.0D, (double)p_78439_1_, (double)f8); - p_78439_0_.addVertexWithUV(1.0D, (double)f9, 0.0D, (double)p_78439_3_, (double)f8); - p_78439_0_.addVertexWithUV(1.0D, (double)f9, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)f8); - p_78439_0_.addVertexWithUV(0.0D, (double)f9, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)f8); - } - - p_78439_0_.draw(); - p_78439_0_.startDrawingQuads(); - p_78439_0_.setNormal(0.0F, -1.0F, 0.0F); - - for (k = 0; k < p_78439_6_; ++k) - { - f7 = (float)k / (float)p_78439_6_; - f8 = p_78439_4_ + (p_78439_2_ - p_78439_4_) * f7 - f6; - p_78439_0_.addVertexWithUV(1.0D, (double)f7, 0.0D, (double)p_78439_3_, (double)f8); - p_78439_0_.addVertexWithUV(0.0D, (double)f7, 0.0D, (double)p_78439_1_, (double)f8); - p_78439_0_.addVertexWithUV(0.0D, (double)f7, (double)(0.0F - p_78439_7_), (double)p_78439_1_, (double)f8); - p_78439_0_.addVertexWithUV(1.0D, (double)f7, (double)(0.0F - p_78439_7_), (double)p_78439_3_, (double)f8); - } - - p_78439_0_.draw(); - } - /** * Renders the active item in the player's hand when in first person mode. Args: partialTickTime */ - public void renderItemInFirstPerson(float partialTickTime) + public void renderOverlayInFirstPerson(float partialTickTime) { float f1 = this.prevEquippedProgress + (this.equippedProgress - this.prevEquippedProgress) * partialTickTime; EntityClientPlayerMP entityclientplayermp = this.mc.thePlayer; @@ -254,22 +37,14 @@ public class RenderCNPCHand extends ItemRenderer { GL11.glRotatef(entityclientplayermp.prevRotationYaw + (entityclientplayermp.rotationYaw - entityclientplayermp.prevRotationYaw) * partialTickTime, 0.0F, 1.0F, 0.0F); RenderHelper.enableStandardItemLighting(); GL11.glPopMatrix(); - EntityPlayerSP entityplayersp = (EntityPlayerSP)entityclientplayermp; - float f3 = entityplayersp.prevRenderArmPitch + (entityplayersp.renderArmPitch - entityplayersp.prevRenderArmPitch) * partialTickTime; - float f4 = entityplayersp.prevRenderArmYaw + (entityplayersp.renderArmYaw - entityplayersp.prevRenderArmYaw) * partialTickTime; + float f3 = ((EntityPlayerSP)entityclientplayermp).prevRenderArmPitch + (((EntityPlayerSP)entityclientplayermp).renderArmPitch - ((EntityPlayerSP)entityclientplayermp).prevRenderArmPitch) * partialTickTime; + float f4 = ((EntityPlayerSP)entityclientplayermp).prevRenderArmYaw + (((EntityPlayerSP)entityclientplayermp).renderArmYaw - ((EntityPlayerSP)entityclientplayermp).prevRenderArmYaw) * partialTickTime; GL11.glRotatef((entityclientplayermp.rotationPitch - f3) * 0.1F, 1.0F, 0.0F, 0.0F); GL11.glRotatef((entityclientplayermp.rotationYaw - f4) * 0.1F, 0.0F, 1.0F, 0.0F); - ItemStack itemstack = this.itemToRender; RenderCNPCPlayer renderCNPCPlayer = new RenderCNPCPlayer(); - if (itemstack != null && itemstack.getItem() instanceof ItemCloth) - { - GL11.glEnable(GL11.GL_BLEND); - OpenGlHelper.glBlendFunc(770, 771, 1, 0); - } - int i = this.mc.theWorld.getLightBrightnessForSkyBlocks(MathHelper.floor_double(entityclientplayermp.posX), MathHelper.floor_double(entityclientplayermp.posY), MathHelper.floor_double(entityclientplayermp.posZ), 0); int j = i % 65536; int k = i / 65536; @@ -279,227 +54,10 @@ public class RenderCNPCHand extends ItemRenderer { float f6; float f7; - if (itemstack != null) - { - int l = itemstack.getItem().getColorFromItemStack(itemstack, 0); - f5 = (float)(l >> 16 & 255) / 255.0F; - f6 = (float)(l >> 8 & 255) / 255.0F; - f7 = (float)(l & 255) / 255.0F; - GL11.glColor4f(f5, f6, f7, 1.0F); - } - else - { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - } - - float f8; - float f9; float f10; float f13; - Render render; - RenderPlayer renderplayer; - if (itemstack != null && itemstack.getItem() instanceof ItemMap) - { - GL11.glPushMatrix(); - f13 = 0.8F; - f5 = entityclientplayermp.getSwingProgress(partialTickTime); - f6 = MathHelper.sin(f5 * (float)Math.PI); - f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI); - GL11.glTranslatef(-f7 * 0.4F, MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI * 2.0F) * 0.2F, -f6 * 0.2F); - f5 = 1.0F - f2 / 45.0F + 0.1F; - - if (f5 < 0.0F) - { - f5 = 0.0F; - } - - if (f5 > 1.0F) - { - f5 = 1.0F; - } - - f5 = -MathHelper.cos(f5 * (float)Math.PI) * 0.5F + 0.5F; - GL11.glTranslatef(0.0F, 0.0F * f13 - (1.0F - f1) * 1.2F - f5 * 0.5F + 0.04F, -0.9F * f13); - GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(f5 * -85.0F, 0.0F, 0.0F, 1.0F); - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - this.mc.getTextureManager().bindTexture(entityclientplayermp.getLocationSkin()); - - for (int i1 = 0; i1 < 2; ++i1) - { - int j1 = i1 * 2 - 1; - GL11.glPushMatrix(); - GL11.glTranslatef(-0.0F, -0.6F, 1.1F * (float)j1); - GL11.glRotatef((float)(-45 * j1), 1.0F, 0.0F, 0.0F); - GL11.glRotatef(-90.0F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(59.0F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef((float)(-65 * j1), 0.0F, 1.0F, 0.0F); - render = RenderManager.instance.getEntityRenderObject(this.mc.thePlayer); - renderplayer = (RenderPlayer)render; - f10 = 1.0F; - GL11.glScalef(f10, f10, f10); - renderCNPCPlayer.renderFirstPersonArm(this.mc.thePlayer,partialTickTime); - GL11.glPopMatrix(); - } - - f6 = entityclientplayermp.getSwingProgress(partialTickTime); - f7 = MathHelper.sin(f6 * f6 * (float)Math.PI); - f8 = MathHelper.sin(MathHelper.sqrt_float(f6) * (float)Math.PI); - GL11.glRotatef(-f7 * 20.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-f8 * 20.0F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(-f8 * 80.0F, 1.0F, 0.0F, 0.0F); - f9 = 0.38F; - GL11.glScalef(f9, f9, f9); - GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(-1.0F, -1.0F, 0.0F); - f10 = 0.015625F; - GL11.glScalef(f10, f10, f10); - this.mc.getTextureManager().bindTexture(RES_MAP_BACKGROUND); - Tessellator tessellator = Tessellator.instance; - GL11.glNormal3f(0.0F, 0.0F, -1.0F); - tessellator.startDrawingQuads(); - byte b0 = 7; - tessellator.addVertexWithUV((double)(0 - b0), (double)(128 + b0), 0.0D, 0.0D, 1.0D); - tessellator.addVertexWithUV((double)(128 + b0), (double)(128 + b0), 0.0D, 1.0D, 1.0D); - tessellator.addVertexWithUV((double)(128 + b0), (double)(0 - b0), 0.0D, 1.0D, 0.0D); - tessellator.addVertexWithUV((double)(0 - b0), (double)(0 - b0), 0.0D, 0.0D, 0.0D); - tessellator.draw(); - - IItemRenderer custom = MinecraftForgeClient.getItemRenderer(itemstack, FIRST_PERSON_MAP); - MapData mapdata = ((ItemMap)itemstack.getItem()).getMapData(itemstack, this.mc.theWorld); - - if (custom == null) - { - if (mapdata != null) - { - this.mc.entityRenderer.getMapItemRenderer().func_148250_a(mapdata, false); - } - } - else - { - custom.renderItem(FIRST_PERSON_MAP, itemstack, mc.thePlayer, mc.getTextureManager(), mapdata); - } - - GL11.glPopMatrix(); - } - else if (itemstack != null) - { - GL11.glPushMatrix(); - f13 = 0.8F; - - if (entityclientplayermp.getItemInUseCount() > 0) - { - EnumAction enumaction = itemstack.getItemUseAction(); - - if (enumaction == EnumAction.eat || enumaction == EnumAction.drink) - { - f6 = (float)entityclientplayermp.getItemInUseCount() - partialTickTime + 1.0F; - f7 = 1.0F - f6 / (float)itemstack.getMaxItemUseDuration(); - f8 = 1.0F - f7; - f8 = f8 * f8 * f8; - f8 = f8 * f8 * f8; - f8 = f8 * f8 * f8; - f9 = 1.0F - f8; - GL11.glTranslatef(0.0F, MathHelper.abs(MathHelper.cos(f6 / 4.0F * (float)Math.PI) * 0.1F) * (float)((double)f7 > 0.2D ? 1 : 0), 0.0F); - GL11.glTranslatef(f9 * 0.6F, -f9 * 0.5F, 0.0F); - GL11.glRotatef(f9 * 90.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(f9 * 10.0F, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(f9 * 30.0F, 0.0F, 0.0F, 1.0F); - } - } - else - { - f5 = entityclientplayermp.getSwingProgress(partialTickTime); - f6 = MathHelper.sin(f5 * (float)Math.PI); - f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI); - GL11.glTranslatef(-f7 * 0.4F, MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI * 2.0F) * 0.2F, -f6 * 0.2F); - } - - GL11.glTranslatef(0.7F * f13, -0.65F * f13 - (1.0F - f1) * 0.6F, -0.9F * f13); - GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - f5 = entityclientplayermp.getSwingProgress(partialTickTime); - f6 = MathHelper.sin(f5 * f5 * (float)Math.PI); - f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI); - GL11.glRotatef(-f6 * 20.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-f7 * 20.0F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(-f7 * 80.0F, 1.0F, 0.0F, 0.0F); - f8 = 0.4F; - GL11.glScalef(f8, f8, f8); - float f11; - float f12; - - if (entityclientplayermp.getItemInUseCount() > 0) - { - EnumAction enumaction1 = itemstack.getItemUseAction(); - - if (enumaction1 == EnumAction.block) - { - GL11.glTranslatef(-0.5F, 0.2F, 0.0F); - GL11.glRotatef(30.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-80.0F, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(60.0F, 0.0F, 1.0F, 0.0F); - } - else if (enumaction1 == EnumAction.bow) - { - GL11.glRotatef(-18.0F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(-12.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-8.0F, 1.0F, 0.0F, 0.0F); - GL11.glTranslatef(-0.9F, 0.2F, 0.0F); - f10 = (float)itemstack.getMaxItemUseDuration() - ((float)entityclientplayermp.getItemInUseCount() - partialTickTime + 1.0F); - f11 = f10 / 20.0F; - f11 = (f11 * f11 + f11 * 2.0F) / 3.0F; - - if (f11 > 1.0F) - { - f11 = 1.0F; - } - - if (f11 > 0.1F) - { - GL11.glTranslatef(0.0F, MathHelper.sin((f10 - 0.1F) * 1.3F) * 0.01F * (f11 - 0.1F), 0.0F); - } - - GL11.glTranslatef(0.0F, 0.0F, f11 * 0.1F); - GL11.glRotatef(-335.0F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(-50.0F, 0.0F, 1.0F, 0.0F); - GL11.glTranslatef(0.0F, 0.5F, 0.0F); - f12 = 1.0F + f11 * 0.2F; - GL11.glScalef(1.0F, 1.0F, f12); - GL11.glTranslatef(0.0F, -0.5F, 0.0F); - GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F); - } - } - - if (itemstack.getItem().shouldRotateAroundWhenRendering()) - { - GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); - } - - if (itemstack.getItem().requiresMultipleRenderPasses()) - { - this.renderItem(entityclientplayermp, itemstack, 0, EQUIPPED_FIRST_PERSON); - for (int x = 1; x < itemstack.getItem().getRenderPasses(itemstack.getItemDamage()); x++) - { - int k1 = itemstack.getItem().getColorFromItemStack(itemstack, x); - f10 = (float)(k1 >> 16 & 255) / 255.0F; - f11 = (float)(k1 >> 8 & 255) / 255.0F; - f12 = (float)(k1 & 255) / 255.0F; - GL11.glColor4f(1.0F * f10, 1.0F * f11, 1.0F * f12, 1.0F); - this.renderItem(entityclientplayermp, itemstack, x, EQUIPPED_FIRST_PERSON); - } - } - else - { - this.renderItem(entityclientplayermp, itemstack, 0, EQUIPPED_FIRST_PERSON); - } - - GL11.glPopMatrix(); - } - else if (!entityclientplayermp.isInvisible()) + if (itemstack == null && !entityclientplayermp.isInvisible()) { GL11.glPushMatrix(); f13 = 0.8F; @@ -515,7 +73,6 @@ public class RenderCNPCHand extends ItemRenderer { f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI); GL11.glRotatef(f7 * 70.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-f6 * 20.0F, 0.0F, 0.0F, 1.0F); - this.mc.getTextureManager().bindTexture(entityclientplayermp.getLocationSkin()); GL11.glTranslatef(-1.0F, 3.6F, 3.5F); GL11.glRotatef(120.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(200.0F, 1.0F, 0.0F, 0.0F); @@ -523,19 +80,12 @@ public class RenderCNPCHand extends ItemRenderer { GL11.glScalef(1.0F, 1.0F, 1.0F); GL11.glTranslatef(5.6F, 0.0F, 0.0F); - render = RenderManager.instance.getEntityRenderObject(this.mc.thePlayer); - renderplayer = (RenderPlayer)render; f10 = 1.0F; GL11.glScalef(f10, f10, f10); - renderCNPCPlayer.renderFirstPersonArm(this.mc.thePlayer,partialTickTime); + renderCNPCPlayer.renderFirstPersonArmOverlay(this.mc.thePlayer); GL11.glPopMatrix(); } - if (itemstack != null && itemstack.getItem() instanceof ItemCloth) - { - GL11.glDisable(GL11.GL_BLEND); - } - GL11.glDisable(GL12.GL_RESCALE_NORMAL); RenderHelper.disableStandardItemLighting(); } @@ -572,7 +122,7 @@ public class RenderCNPCHand extends ItemRenderer { f2 = f; } - this.equippedProgress += f2/2.0F; + this.equippedProgress += f2; if (this.equippedProgress < 0.1F) { @@ -580,20 +130,4 @@ public class RenderCNPCHand extends ItemRenderer { this.equippedItemSlot = entityclientplayermp.inventory.currentItem; } } - - /** - * Resets equippedProgress - */ - public void resetEquippedProgress() - { - this.equippedProgress = 0.0F; - } - - /** - * Resets equippedProgress - */ - public void resetEquippedProgress2() - { - this.equippedProgress = 0.0F; - } } diff --git a/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java b/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java index fc3b9dea9..22422836e 100644 --- a/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java +++ b/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java @@ -3,7 +3,6 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.AbstractClientPlayer; -import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.ActiveRenderInfo; @@ -15,21 +14,17 @@ import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.RenderPlayerEvent; import noppes.npcs.client.Client; +import noppes.npcs.client.ClientEventHandler; import noppes.npcs.controllers.data.SkinOverlay; import org.lwjgl.opengl.GL11; import org.lwjgl.util.glu.Project; import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.HashMap; public class RenderCNPCPlayer extends RenderPlayer { public RenderCNPCHand itemRenderer = new RenderCNPCHand(Minecraft.getMinecraft()); @@ -60,13 +55,7 @@ public class RenderCNPCPlayer extends RenderPlayer { return false; } - if (!Client.entitySkinOverlayTicks.containsKey(player.getUniqueID())) { - Client.entitySkinOverlayTicks.put(player.getUniqueID(), 1L); - } else { - long ticks = Client.entitySkinOverlayTicks.get(player.getUniqueID()); - Client.entitySkinOverlayTicks.put(player.getUniqueID(), ticks + 1); - } - float partialTickTime = Client.entitySkinOverlayTicks.get(player.getUniqueID()); + float partialTickTime = ClientEventHandler.partialHandTicks; // Overlay & Glow GL11.glEnable(GL11.GL_BLEND); @@ -196,20 +185,13 @@ public class RenderCNPCPlayer extends RenderPlayer { if (mc.gameSettings.thirdPersonView == 0 && !mc.renderViewEntity.isPlayerSleeping() && !mc.gameSettings.hideGUI && !mc.playerController.enableEverythingIsScrewedUpMode()) { - itemRenderer.updateEquippedItem(); entityRenderer.enableLightmap((double)partialTicks); - itemRenderer.renderItemInFirstPerson(partialTicks); + itemRenderer.renderOverlayInFirstPerson(partialTicks); entityRenderer.disableLightmap((double)partialTicks); } GL11.glPopMatrix(); - if (mc.gameSettings.thirdPersonView == 0 && !mc.renderViewEntity.isPlayerSleeping()) - { - entityRenderer.itemRenderer.renderOverlays(partialTicks); - hurtCameraEffect(partialTicks); - } - if (mc.gameSettings.viewBobbing) { setupViewBobbing(partialTicks); @@ -245,32 +227,6 @@ public class RenderCNPCPlayer extends RenderPlayer { return f1 + this.prevDebugCamFOV + (this.debugCamFOV - this.prevDebugCamFOV) * p_78481_1_; } - public void updateFovModifierHand() - { - Minecraft mc = Minecraft.getMinecraft(); - if (mc.renderViewEntity instanceof EntityPlayerSP) - { - EntityPlayerSP entityplayersp = (EntityPlayerSP)mc.renderViewEntity; - this.fovMultiplierTemp = entityplayersp.getFOVMultiplier(); - } - else - { - this.fovMultiplierTemp = mc.thePlayer.getFOVMultiplier(); - } - this.fovModifierHandPrev = this.fovModifierHand; - this.fovModifierHand += (this.fovMultiplierTemp - this.fovModifierHand) * 0.5F; - - if (this.fovModifierHand > 1.5F) - { - this.fovModifierHand = 1.5F; - } - - if (this.fovModifierHand < 0.1F) - { - this.fovModifierHand = 0.1F; - } - } - private void hurtCameraEffect(float p_78482_1_) { Minecraft mc = Minecraft.getMinecraft(); @@ -312,13 +268,9 @@ public class RenderCNPCPlayer extends RenderPlayer { } } - public void renderFirstPersonArm(EntityPlayer player, float partialTickTime) + public void renderFirstPersonArmOverlay(EntityPlayer player) { - Render render = RenderManager.instance.getEntityRenderObject(player); - RenderPlayer renderplayer = (RenderPlayer)render; - renderplayer.renderFirstPersonArm(player); - - float gender = 1.0F; + float gender = -1; try { Class RenderPlayerJBRA = Class.forName("JinRyuu.JBRA.RenderPlayerJBRA"); gender = (float) RenderPlayerJBRA.getMethod("genGet").invoke(null); @@ -342,7 +294,7 @@ public class RenderCNPCPlayer extends RenderPlayer { overlayData.speedX, overlayData.speedY, overlayData.scaleX, overlayData.scaleY, overlayData.offsetX, overlayData.offsetY, overlayData.offsetZ )) - continue;; + continue; if (gender >= 2.0F) { GL11.glRotatef(7F, 0, 0, 1); @@ -360,173 +312,100 @@ public class RenderCNPCPlayer extends RenderPlayer { public void renderDBCModel(RenderPlayerEvent.Specials.Post event) { EntityPlayer player = event.entityPlayer; - try { - Class RenderPlayerJBRA = Class.forName("JinRyuu.JBRA.RenderPlayerJBRA"); - Class ModelBipedDBC = Class.forName("JinRyuu.JBRA.ModelBipedDBC"); - Class ModelBipedBody = Class.forName("JinRyuu.JRMCore.entity.ModelBipedBody"); + Class RenderPlayerJBRA = null; + Class ModelBipedDBC = null; + Class ModelBipedBody = null; + Method renderDBC = null; + Field rot1 = null,rot2 = null,rot3 = null,rot4 = null,rot5 = null,rot6 = null; + Object m = null; + ModelRenderer bipedHead = null,bipedBody = null,bipedRA = null,bipedLA = null,bipedRL = null,bipedLL = null; + ModelRenderer Brightarm = null,Bleftarm = null,rightleg = null,leftleg = null,body = null,hip = null; + ModelRenderer waist = null,bottom = null,Bbreast = null,Bbreast2 = null,breast = null,breast2 = null; + float childScl = 0.0F; - Object m = RenderPlayerJBRA.getField("modelMain").get(event.renderer); + try { + RenderPlayerJBRA = Class.forName("JinRyuu.JBRA.RenderPlayerJBRA"); + ModelBipedDBC = Class.forName("JinRyuu.JBRA.ModelBipedDBC"); + ModelBipedBody = Class.forName("JinRyuu.JRMCore.entity.ModelBipedBody"); + + renderDBC = ModelBipedBody.getMethod("render",Entity.class,float.class,float.class,float.class,float.class,float.class,float.class); + rot1 = ModelBipedDBC.getField("rot1"); + rot2 = ModelBipedDBC.getField("rot2"); + rot3 = ModelBipedDBC.getField("rot3"); + rot4 = ModelBipedDBC.getField("rot4"); + rot5 = ModelBipedDBC.getField("rot5"); + rot6 = ModelBipedDBC.getField("rot6"); + + m = RenderPlayerJBRA.getField("modelMain").get(event.renderer); ModelBipedBody.getField("isRiding").set(m, player.isRiding()); ModelBipedBody.getField("isChild").set(m, player.isChild()); ModelBipedBody.getField("isSneak").set(m, player.isSneaking()); ModelBipedBody.getField("y").set(null, ModelBipedDBC.getField("y").get(null)); - ModelRenderer bipedHead = (ModelRenderer) ModelBipedBody.getField("bipedHead").get(m); - ModelRenderer bipedBody = (ModelRenderer) ModelBipedBody.getField("bipedBody").get(m); - ModelRenderer bipedRA = (ModelRenderer) ModelBipedBody.getField("bipedRightArm").get(m); - ModelRenderer bipedLA = (ModelRenderer) ModelBipedBody.getField("bipedLeftArm").get(m); - ModelRenderer bipedRL = (ModelRenderer) ModelBipedBody.getField("bipedRightLeg").get(m); - ModelRenderer bipedLL = (ModelRenderer) ModelBipedBody.getField("bipedLeftLeg").get(m); + bipedHead = (ModelRenderer) ModelBipedBody.getField("bipedHead").get(m); + bipedBody = (ModelRenderer) ModelBipedBody.getField("bipedBody").get(m); + bipedRA = (ModelRenderer) ModelBipedBody.getField("bipedRightArm").get(m); + bipedLA = (ModelRenderer) ModelBipedBody.getField("bipedLeftArm").get(m); + bipedRL = (ModelRenderer) ModelBipedBody.getField("bipedRightLeg").get(m); + bipedLL = (ModelRenderer) ModelBipedBody.getField("bipedLeftLeg").get(m); - ModelRenderer Brightarm = (ModelRenderer) ModelBipedBody.getField("Brightarm").get(m); - ModelRenderer Bleftarm = (ModelRenderer) ModelBipedBody.getField("Bleftarm").get(m); - ModelRenderer rightleg = (ModelRenderer) ModelBipedBody.getField("rightleg").get(m); - ModelRenderer leftleg = (ModelRenderer) ModelBipedBody.getField("leftleg").get(m); - ModelRenderer body = (ModelRenderer) ModelBipedBody.getField("body").get(m); - ModelRenderer hip = (ModelRenderer) ModelBipedBody.getField("hip").get(m); - ModelRenderer waist = (ModelRenderer) ModelBipedBody.getField("waist").get(m); - ModelRenderer bottom = (ModelRenderer) ModelBipedBody.getField("bottom").get(m); - ModelRenderer Bbreast = (ModelRenderer) ModelBipedBody.getField("Bbreast").get(m); - ModelRenderer Bbreast2 = (ModelRenderer) ModelBipedBody.getField("Bbreast2").get(m); - ModelRenderer breast = (ModelRenderer) ModelBipedBody.getField("breast").get(m); - ModelRenderer breast2 = (ModelRenderer) ModelBipedBody.getField("breast2").get(m); - float childScl = (float) RenderPlayerJBRA.getMethod("childSclGet").invoke(null); - - Method renderDBC = ModelBipedBody.getMethod("render",Entity.class,float.class,float.class,float.class,float.class,float.class,float.class); - Field rot1 = ModelBipedDBC.getField("rot1"); - Field rot2 = ModelBipedDBC.getField("rot2"); - Field rot3 = ModelBipedDBC.getField("rot3"); - Field rot4 = ModelBipedDBC.getField("rot4"); - Field rot5 = ModelBipedDBC.getField("rot5"); - Field rot6 = ModelBipedDBC.getField("rot6"); - - if (Client.skinOverlays.containsKey(player.getUniqueID())) { - for (SkinOverlay overlayData : Client.skinOverlays.get(player.getUniqueID()).values()) { - if (overlayData.texture.isEmpty()) - continue; - - if (overlayData.location == null) { - overlayData.location = new ResourceLocation(overlayData.texture); - } else { - String str = overlayData.location.getResourceDomain() + ":" + overlayData.location.getResourcePath(); - if (!str.equals(overlayData.texture)) { - overlayData.location = new ResourceLocation(overlayData.texture); - } - } - - if (!preRenderOverlay(player, overlayData.location, overlayData.glow, overlayData.blend, overlayData.alpha, overlayData.size, - overlayData.speedX, overlayData.speedY, overlayData.scaleX, overlayData.scaleY, - overlayData.offsetX, overlayData.offsetY, overlayData.offsetZ - )) - continue; - bipedHead.isHidden = true; - renderDBC.invoke(m, player, - (float) rot1.get(m), (float) rot2.get(m), (float) rot3.get(m), - (float) rot4.get(m), (float) rot5.get(m), (float) rot6.get(m) - ); - bipedHead.isHidden = false; - - bipedBody.isHidden = true; - bipedRA.isHidden = true; - bipedLA.isHidden = true; - bipedRL.isHidden = true; - bipedLL.isHidden = true; - //Female render - Brightarm.isHidden = true; - Bleftarm.isHidden = true; - rightleg.isHidden = true; - leftleg.isHidden = true; - body.isHidden = true; - hip.isHidden = true; - waist.isHidden = true; - bottom.isHidden = true; - Bbreast.isHidden = true; - Bbreast2.isHidden = true; - breast.isHidden = true; - breast2.isHidden = true; - if (player.isSneaking()) { - GL11.glTranslatef(0, 0.06F, 0); - } - if (childScl > 1.5F) { - GL11.glTranslatef(0, -0.015F, 0); - GL11.glScalef(1.025F, 1.025F, 1.025F); - } else { - if (childScl > 1) { - GL11.glTranslatef(0, -0.01F, 0); - GL11.glScalef(1.025F, 1.025F, 1.025F); - } else { - GL11.glTranslatef(0, 0.0025F, 0); - GL11.glScalef(1.02F, 1.02F, 1.02F); - } - } - renderDBC.invoke(m, player, - (float) rot1.get(m), (float) rot2.get(m), (float) rot3.get(m), - (float) rot4.get(m), (float) rot5.get(m), (float) rot6.get(m) - ); - bipedBody.isHidden = false; - bipedRA.isHidden = false; - bipedLA.isHidden = false; - bipedRL.isHidden = false; - bipedLL.isHidden = false; - //Female render - Brightarm.isHidden = false; - Bleftarm.isHidden = false; - rightleg.isHidden = false; - leftleg.isHidden = false; - body.isHidden = false; - hip.isHidden = false; - waist.isHidden = false; - bottom.isHidden = false; - Bbreast.isHidden = false; - Bbreast2.isHidden = false; - breast.isHidden = false; - breast2.isHidden = false; - - postRenderOverlay(); - } - } + Brightarm = (ModelRenderer) ModelBipedBody.getField("Brightarm").get(m); + Bleftarm = (ModelRenderer) ModelBipedBody.getField("Bleftarm").get(m); + rightleg = (ModelRenderer) ModelBipedBody.getField("rightleg").get(m); + leftleg = (ModelRenderer) ModelBipedBody.getField("leftleg").get(m); + body = (ModelRenderer) ModelBipedBody.getField("body").get(m); + hip = (ModelRenderer) ModelBipedBody.getField("hip").get(m); + waist = (ModelRenderer) ModelBipedBody.getField("waist").get(m); + bottom = (ModelRenderer) ModelBipedBody.getField("bottom").get(m); + Bbreast = (ModelRenderer) ModelBipedBody.getField("Bbreast").get(m); + Bbreast2 = (ModelRenderer) ModelBipedBody.getField("Bbreast2").get(m); + breast = (ModelRenderer) ModelBipedBody.getField("breast").get(m); + breast2 = (ModelRenderer) ModelBipedBody.getField("breast2").get(m); + childScl = (float) RenderPlayerJBRA.getMethod("childSclGet").invoke(null); } catch (Exception ignored) {} try { - Class RenderPlayerJBRA = Class.forName("JinRyuu.JBRA.RenderPlayerJBRA"); - Class ModelBipedDBC = Class.forName("JinRyuu.JBRA.ModelBipedDBC"); - Class ModelBipedBody = Class.forName("JinRyuu.JRMCore.entity.ModelBipedBody"); + RenderPlayerJBRA = Class.forName("JinRyuu.JBRA.RenderPlayerJBRA"); + ModelBipedDBC = Class.forName("JinRyuu.JBRA.ModelBipedDBC"); + ModelBipedBody = Class.forName("JinRyuu.JRMCore.entity.ModelBipedBody"); - Method renderDBC = ModelBipedBody.getMethod("func_78088_a",Entity.class,float.class,float.class,float.class,float.class,float.class,float.class); - Field rot1 = ModelBipedDBC.getField("rot1"); - Field rot2 = ModelBipedDBC.getField("rot2"); - Field rot3 = ModelBipedDBC.getField("rot3"); - Field rot4 = ModelBipedDBC.getField("rot4"); - Field rot5 = ModelBipedDBC.getField("rot5"); - Field rot6 = ModelBipedDBC.getField("rot6"); + renderDBC = ModelBipedBody.getMethod("func_78088_a",Entity.class,float.class,float.class,float.class,float.class,float.class,float.class); + rot1 = ModelBipedDBC.getField("rot1"); + rot2 = ModelBipedDBC.getField("rot2"); + rot3 = ModelBipedDBC.getField("rot3"); + rot4 = ModelBipedDBC.getField("rot4"); + rot5 = ModelBipedDBC.getField("rot5"); + rot6 = ModelBipedDBC.getField("rot6"); - Object m = RenderPlayerJBRA.getField("modelMain").get(event.renderer); + m = RenderPlayerJBRA.getField("modelMain").get(event.renderer); ModelBipedBody.getField("field_78093_q").set(m, player.isRiding()); ModelBipedBody.getField("field_78091_s").set(m, player.isChild()); ModelBipedBody.getField("field_78117_n").set(m, player.isSneaking()); ModelBipedBody.getField("y").set(null, ModelBipedDBC.getField("y").get(null)); - ModelRenderer bipedHead = (ModelRenderer) ModelBipedBody.getField("field_78116_c").get(m); - ModelRenderer bipedBody = (ModelRenderer) ModelBipedBody.getField("field_78115_e").get(m); - ModelRenderer bipedRA = (ModelRenderer) ModelBipedBody.getField("field_78112_f").get(m); - ModelRenderer bipedLA = (ModelRenderer) ModelBipedBody.getField("field_78113_g").get(m); - ModelRenderer bipedRL = (ModelRenderer) ModelBipedBody.getField("field_78123_h").get(m); - ModelRenderer bipedLL = (ModelRenderer) ModelBipedBody.getField("field_78124_i").get(m); + bipedHead = (ModelRenderer) ModelBipedBody.getField("field_78116_c").get(m); + bipedBody = (ModelRenderer) ModelBipedBody.getField("field_78115_e").get(m); + bipedRA = (ModelRenderer) ModelBipedBody.getField("field_78112_f").get(m); + bipedLA = (ModelRenderer) ModelBipedBody.getField("field_78113_g").get(m); + bipedRL = (ModelRenderer) ModelBipedBody.getField("field_78123_h").get(m); + bipedLL = (ModelRenderer) ModelBipedBody.getField("field_78124_i").get(m); - ModelRenderer Brightarm = (ModelRenderer) ModelBipedBody.getField("Brightarm").get(m); - ModelRenderer Bleftarm = (ModelRenderer) ModelBipedBody.getField("Bleftarm").get(m); - ModelRenderer rightleg = (ModelRenderer) ModelBipedBody.getField("rightleg").get(m); - ModelRenderer leftleg = (ModelRenderer) ModelBipedBody.getField("leftleg").get(m); - ModelRenderer body = (ModelRenderer) ModelBipedBody.getField("body").get(m); - ModelRenderer hip = (ModelRenderer) ModelBipedBody.getField("hip").get(m); - ModelRenderer waist = (ModelRenderer) ModelBipedBody.getField("waist").get(m); - ModelRenderer bottom = (ModelRenderer) ModelBipedBody.getField("bottom").get(m); - ModelRenderer Bbreast = (ModelRenderer) ModelBipedBody.getField("Bbreast").get(m); - ModelRenderer Bbreast2 = (ModelRenderer) ModelBipedBody.getField("Bbreast2").get(m); - ModelRenderer breast = (ModelRenderer) ModelBipedBody.getField("breast").get(m); - ModelRenderer breast2 = (ModelRenderer) ModelBipedBody.getField("breast2").get(m); - float childScl = (float) RenderPlayerJBRA.getMethod("childSclGet").invoke(null); + Brightarm = (ModelRenderer) ModelBipedBody.getField("Brightarm").get(m); + Bleftarm = (ModelRenderer) ModelBipedBody.getField("Bleftarm").get(m); + rightleg = (ModelRenderer) ModelBipedBody.getField("rightleg").get(m); + leftleg = (ModelRenderer) ModelBipedBody.getField("leftleg").get(m); + body = (ModelRenderer) ModelBipedBody.getField("body").get(m); + hip = (ModelRenderer) ModelBipedBody.getField("hip").get(m); + waist = (ModelRenderer) ModelBipedBody.getField("waist").get(m); + bottom = (ModelRenderer) ModelBipedBody.getField("bottom").get(m); + Bbreast = (ModelRenderer) ModelBipedBody.getField("Bbreast").get(m); + Bbreast2 = (ModelRenderer) ModelBipedBody.getField("Bbreast2").get(m); + breast = (ModelRenderer) ModelBipedBody.getField("breast").get(m); + breast2 = (ModelRenderer) ModelBipedBody.getField("breast2").get(m); + childScl = (float) RenderPlayerJBRA.getMethod("childSclGet").invoke(null); + } catch (Exception ignored) {} + try { if (Client.skinOverlays.containsKey(player.getUniqueID())) { for (SkinOverlay overlayData : Client.skinOverlays.get(player.getUniqueID()).values()) { if (overlayData.texture.isEmpty()) diff --git a/src/main/java/noppes/npcs/mixin/CustomNPCsMixinPlugin.java b/src/main/java/noppes/npcs/mixin/CustomNPCsMixinPlugin.java new file mode 100644 index 000000000..7173da9dd --- /dev/null +++ b/src/main/java/noppes/npcs/mixin/CustomNPCsMixinPlugin.java @@ -0,0 +1,50 @@ +package noppes.npcs.mixin; + +import org.spongepowered.asm.lib.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class CustomNPCsMixinPlugin implements IMixinConfigPlugin { + @Override + public void onLoad(String mixinPackage) { + + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + + } + + @Override + public List getMixins() { + List mixins = new ArrayList<>(); + + mixins.add("MixinEntityRenderer"); + + return mixins; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } +} diff --git a/src/main/java/noppes/npcs/mixin/MixinEntityRenderer.java b/src/main/java/noppes/npcs/mixin/MixinEntityRenderer.java new file mode 100644 index 000000000..65d3cb02a --- /dev/null +++ b/src/main/java/noppes/npcs/mixin/MixinEntityRenderer.java @@ -0,0 +1,26 @@ +package noppes.npcs.mixin; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.entity.player.EntityPlayer; +import noppes.npcs.client.ClientEventHandler; +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; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(value = EntityRenderer.class) +public class MixinEntityRenderer { + + @Inject(method = "renderWorld", at = @At(value = "RETURN")) + private void renderFirstPersonOverlays(float p_78476_1_, long p_78476_2_, CallbackInfo callbackInfo) + { + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + if (ClientEventHandler.hasOverlays(player)) { + GL11.glPushMatrix(); + ClientEventHandler.renderCNPCPlayer.renderHand(p_78476_1_,0); + GL11.glPopMatrix(); + } + } +} diff --git a/src/main/resources/META-INF/customnpcs_at.cfg b/src/main/resources/META-INF/customnpcs_at.cfg new file mode 100644 index 000000000..e34697ad4 --- /dev/null +++ b/src/main/resources/META-INF/customnpcs_at.cfg @@ -0,0 +1,2 @@ +#EntityRenderer +public net.minecraft.client.renderer.EntityRenderer func_78476_b(FI)V # renderHand \ No newline at end of file diff --git a/src/main/resources/customnpcs.mixins.json b/src/main/resources/customnpcs.mixins.json new file mode 100644 index 000000000..878e42ba7 --- /dev/null +++ b/src/main/resources/customnpcs.mixins.json @@ -0,0 +1,9 @@ +{ + "required": true, + "minVersion": "0.7.11", + "package": "noppes.npcs.mixin", + "plugin": "noppes.npcs.mixin.CustomNPCsMixinPlugin", + "refmap": "customnpcs.refmap.json", + "target": "@env(DEFAULT)", + "compatibilityLevel": "JAVA_8" +}