Posted August 12, 20187 yr I have a simple GUI that's supposed to display a player's armor and a picture of it. I know I will have problems with Leather Armor cause it's an overlay but I just wanna get basic things working first (Any help doing that would be appriciated) Here's my code right now: public ArmorOverlay() { Minecraft mc = Minecraft.getMinecraft(); EntityPlayer player = mc.thePlayer; for (int i = 0; i < 4; i++) { ItemStack armor = player.getCurrentArmor(3-i); if (armor != null) { String registryName = armor.getItem().getRegistryName(); mc.renderEngine.bindTexture(new ResourceLocation(registryName.split(":")[0], "textures/items/" + registryName.split(":")[1] + ".png")); drawTexturedModalRect(20, 20 + (i * 16), 0, 0, 16, 16); drawString(Minecraft.getMinecraft().fontRendererObj, I18n.format(armor.getItem().getUnlocalizedName() + ".name") + " (" + (armor.getMaxDamage() - armor.getItemDamage()) + "/" + armor.getMaxDamage() + ")", 40, 20 + (i * 16), MathHelper.hsvToRGB(Math.max(0.0F, (float) (1.0F - (double) armor.getItemDamage()/ (double) armor.getMaxDamage())) / 3.0F, 1.0F, 1.0F)); } } } My problem is the image won't render, and I think it is a problem with the third and fourth args of the drawTexturedModalRect (I tried getTextureManager too). The strings draw with the right color, so what's wrong with the armor? If I set the third/fourth args to random things it gives me colored squares. For a diamond helmet I get blue squares, Leather chestplate gives me green squares, Leather leggings give orange squares, and Diamond boots give me dark green/orange squares
August 12, 20187 yr 3 hours ago, Big_Bad_E said: public ArmorOverlay() { This is called literally once. There are multiple render methods in GuiScreen that are not a constructor. VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
August 13, 20187 yr Author 59 minutes ago, Animefan8888 said: This is called literally once. There are multiple render methods in GuiScreen that are not a constructor. No it was called multiple times (I was being dumb and created an instance of it in my event)
August 13, 20187 yr 1 hour ago, Big_Bad_E said: No it was called multiple times (I was being dumb and created an instance of it in my event) look at how vanilla does it inside the inventory? About Me Spoiler My Discord - Cadiboo#8887 My Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.github.io/tutorials Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support. When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible. Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)
August 13, 20187 yr Author Code from GuiCrafting (in the background drawing code) GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(CRAFTING_TABLE_GUI_TEXTURES); int i = this.guiLeft; int j = (this.height - this.ySize) / 2; this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); Trying that and nothing different. I tried setting the resource location to "minecraft", "textures/items/diamond_chestplate.png" and "minecraft:textures/items/diamond_chestpalte.png" but it is not working at all.
August 13, 20187 yr Just now, Big_Bad_E said: Code from GuiCrafting (in the background drawing code) GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(CRAFTING_TABLE_GUI_TEXTURES); int i = this.guiLeft; int j = (this.height - this.ySize) / 2; this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); Trying that and nothing different. I tried setting the resource location to "minecraft", "textures/items/diamond_chestplate.png" and "minecraft:textures/items/diamond_chestpalte.png" but it is not working at all. No not that part, the part that renders the player with all their Armor and held items About Me Spoiler My Discord - Cadiboo#8887 My Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.github.io/tutorials Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support. When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible. Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)
August 13, 20187 yr Author 53 minutes ago, Cadiboo said: No not that part, the part that renders the player with all their Armor and held items Why? That part renders the GUI, I wanna render a GUI, that looks like the right code. Ohhh, I see what you were thinking. I am not trying to render the armor model, just the texture. Actually that's a great idea. I'ma do that myself. Here's the code GlStateManager.enableColorMaterial(); GlStateManager.pushMatrix(); GlStateManager.translate((float)posX, (float)posY, 50.0F); GlStateManager.scale((float)(-scale), (float)scale, (float)scale); GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); float f = ent.renderYawOffset; float f1 = ent.rotationYaw; float f2 = ent.rotationPitch; float f3 = ent.prevRotationYawHead; float f4 = ent.rotationYawHead; GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F); RenderHelper.enableStandardItemLighting(); GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F); GlStateManager.rotate(-((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F); ent.renderYawOffset = (float)Math.atan((double)(mouseX / 40.0F)) * 20.0F; ent.rotationYaw = (float)Math.atan((double)(mouseX / 40.0F)) * 40.0F; ent.rotationPitch = -((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F; ent.rotationYawHead = ent.rotationYaw; ent.prevRotationYawHead = ent.rotationYaw; GlStateManager.translate(0.0F, 0.0F, 0.0F); RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager(); rendermanager.setPlayerViewY(180.0F); rendermanager.setRenderShadow(false); rendermanager.renderEntity(ent, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F, false); rendermanager.setRenderShadow(true); ent.renderYawOffset = f; ent.rotationYaw = f1; ent.rotationPitch = f2; ent.prevRotationYawHead = f3; ent.rotationYawHead = f4; GlStateManager.popMatrix(); RenderHelper.disableStandardItemLighting(); GlStateManager.disableRescaleNormal(); GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); GlStateManager.disableTexture2D(); GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); Edited August 13, 20187 yr by Big_Bad_E
August 13, 20187 yr Author https://imgur.com/a/qmk4qaF I think it's looking really cool Needs some refining but thanks for the idea Cadiboo! Quick question, what is the variable for the direction the player's body is facing? Also is it possible to disable a player's death animation? Edited August 13, 20187 yr by Big_Bad_E
August 13, 20187 yr 4 hours ago, Big_Bad_E said: https://imgur.com/a/qmk4qaF I think it's looking really cool Needs some refining but thanks for the idea Cadiboo! Quick question, what is the variable for the direction the player's body is facing? Also is it possible to disable a player's death animation? If your just trying to render the armor ItemStack model then have a look at https://github.com/Cadiboo/WIPTech/blob/d5504c15d23c66b220064c93ce8fa27c3c457fd0/src/main/java/cadiboo/wiptech/client/gui/GuiAssemblyTable.java#L112-L178 and https://github.com/Cadiboo/WIPTechAlpha/blob/41c881e00fa7a309761aeeea944dc552fec3fa30/src/main/java/cadiboo/wiptech/client/ClientUtil.java#L634-L746 the variable for the players facing direction player.rotationYaw & player.rotationPitch. you may have to use some 3d math / trigonometry to get the actual position. You could probably disable the death animation, but it would require digging into the source code to find out where the death animation is actually done. If you do decide to try and do this have a look at RenderLivingBase [line: 285] - setBrightness(T, float, boolean) RenderLivingBase [line: 414] - applyRotations(T, float, float, float) RenderPlayer [line: 254] - applyRotations(AbstractClientPlayer, float, float, float) About Me Spoiler My Discord - Cadiboo#8887 My Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.github.io/tutorials Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support. When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible. Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)
August 13, 20187 yr Author Here is my code: public class ArmorOverlay extends Gui { private List<ItemStack> armor = new ArrayList<ItemStack>(); public ArmorOverlay() { if(Minecraft.getMinecraft().thePlayer != null) for (int i = 0; i < 4; i++) { ItemStack itemArmor = Minecraft.getMinecraft().thePlayer.getCurrentArmor(i); if (itemArmor != null) armor.add(itemArmor); } } public void render() { if (Minecraft.getMinecraft().thePlayer.isDead) return; List<ItemStack> newArmor = new ArrayList<ItemStack>(); for (int i = 0; i < 4; i++) { ItemStack itemArmor = Minecraft.getMinecraft().thePlayer.getCurrentArmor(i); if (itemArmor != null) newArmor.add(itemArmor); } if (!armor.equals(newArmor)) { renderEntity(); for (int i = 0; i < 4; i++) { ItemStack armor = Minecraft.getMinecraft().thePlayer.getCurrentArmor(3 - i); if (armor != null) { drawString(Minecraft.getMinecraft().fontRendererObj, I18n.format(armor.getItem().getUnlocalizedName() + ".name") + " (" + (armor.getMaxDamage() - armor.getItemDamage()) + "/" + armor.getMaxDamage() + ")", 40, 20 + (i * 16), MathHelper.hsvToRGB(Math.max(0.0F, (float) (1.0F - (double) armor.getItemDamage() / (double) armor.getMaxDamage())) / 3.0F, 1.0F, 1.0F)); } } } } private void renderEntity() { try { EntityPlayerSP ent = Minecraft.getMinecraft().thePlayer; int posX = 20; int posY = 80; GlStateManager.enableColorMaterial(); GlStateManager.pushMatrix(); GlStateManager.translate((float) posX, (float) posY, 50.0F); GlStateManager.scale(-30f, 30f, 30f); GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); Collection<PotionEffect> effects = ent.getActivePotionEffects(); Boolean invisible = ent.isInvisible(); ItemStack item = ent.getHeldItem(); int slot = ent.inventory.currentItem; Field field = Entity.class.getDeclaredField("fire"); field.setAccessible(true); int fire = field.getInt(ent); int arrows = ent.getArrowCountInEntity(); Boolean swing = ent.isSwingInProgress; float f = ent.renderYawOffset; float f1 = ent.rotationYaw; float f2 = ent.rotationPitch; float f3 = ent.prevRotationYawHead; float f4 = ent.rotationYawHead; GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F); RenderHelper.enableStandardItemLighting(); GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F); ent.clearActivePotions(); field.setInt(ent, 0); ent.getDataWatcher().updateObject(9, (byte) 0); ent.isSwingInProgress = false; ent.getDataWatcher().updateObject(0, (byte) (ent.getDataWatcher().getWatchableObjectByte(0) | 1 << 5)); ent.rotationYaw = 0f; ent.rotationPitch = 0f; ent.rotationYawHead = 0f; ent.prevRotationYawHead = ent.rotationYaw; GlStateManager.translate(0.0F, 0.0F, 0.0F); RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager(); rendermanager.setPlayerViewY(180.0F); rendermanager.setRenderShadow(false); rendermanager.renderEntitySimple(ent, 0f); rendermanager.setRenderShadow(true); if (invisible) { ent.getDataWatcher().updateObject(0, (byte) (ent.getDataWatcher().getWatchableObjectByte(0) | 1 << 5)); } else { ent.getDataWatcher().updateObject(0, (byte) (ent.getDataWatcher().getWatchableObjectByte(0) & ~(1 << 5))); } field.setInt(ent, fire); field.setAccessible(false); ent.getDataWatcher().updateObject(9, (byte) arrows); ent.inventory.setInventorySlotContents(slot, item); ent.renderYawOffset = f; ent.rotationYaw = f1; ent.rotationPitch = f2; ent.prevRotationYawHead = f3; ent.rotationYawHead = f4; ent.isSwingInProgress = swing; ent.clearActivePotions(); for (PotionEffect effect : effects) { ent.addPotionEffect(effect); } GlStateManager.popMatrix(); RenderHelper.disableStandardItemLighting(); GlStateManager.disableRescaleNormal(); GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); GlStateManager.disableTexture2D(); GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } For some reason the player's body will turn instead of staying the same like it should. Also the player will vibrate around whenever I move. And, the player's head's pitch is not working for some reason. I tried setting lastPosX/Y and no luck. Edited August 13, 20187 yr by Big_Bad_E
August 14, 20187 yr You obviously forgot to zero out the player's position before rendering. Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.