package mcjty.rftools.blocks.screens.modulesclient; import mcjty.lib.gui.widgets.Panel; import mcjty.rftools.blocks.screens.ModuleGuiChanged; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.Gui; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import org.lwjgl.opengl.GL11; public class ItemStackClientScreenModule implements ClientScreenModule { private RenderItem itemRender = new RenderItem(); private int slot1 = -1; private int slot2 = -1; private int slot3 = -1; private int slot4 = -1; @Override public TransformMode getTransformMode() { return TransformMode.ITEM; } @Override public int getHeight() { return 22; } @Override public void render(FontRenderer fontRenderer, int currenty, Object[] screenData, float factor) { if (screenData == null) { return; } RenderHelper.enableGUIStandardItemLighting(); // RenderHelper.enableStandardItemLighting(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDepthMask(true); boolean lighting = GL11.glIsEnabled(GL11.GL_LIGHTING); if (!lighting) { GL11.glEnable(GL11.GL_LIGHTING); } boolean depthTest = GL11.glIsEnabled(GL11.GL_DEPTH_TEST); if (!depthTest) { GL11.glEnable(GL11.GL_DEPTH_TEST); } GL11.glPushMatrix(); float f3 = 0.0075F; GL11.glTranslatef(-0.5F, 0.5F, 0.06F); GL11.glScalef(f3 * factor, -f3 * factor, 0.0001f); // short short1 = 240; // short short2 = 240; // OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, short1 / 1.0F, short2 / 1.0F); int x = 10; x = renderSlot(fontRenderer, currenty, screenData, slot1, 0, x); x = renderSlot(fontRenderer, currenty, screenData, slot2, 1, x); x = renderSlot(fontRenderer, currenty, screenData, slot3, 2, x); renderSlot(fontRenderer, currenty, screenData, slot4, 3, x); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslatef(-0.5F, 0.5F, 0.08F); GL11.glScalef(f3 * factor, -f3 * factor, 0.0001f); x = 10; x = renderSlotOverlay(fontRenderer, currenty, screenData, slot1, 0, x); x = renderSlotOverlay(fontRenderer, currenty, screenData, slot2, 1, x); x = renderSlotOverlay(fontRenderer, currenty, screenData, slot3, 2, x); renderSlotOverlay(fontRenderer, currenty, screenData, slot4, 3, x); GL11.glPopMatrix(); if (!lighting) { GL11.glDisable(GL11.GL_LIGHTING); } if (!depthTest) { GL11.glDisable(GL11.GL_DEPTH_TEST); } GL11.glDepthMask(false); RenderHelper.enableStandardItemLighting(); } @Override public void mouseClick(World world, int x, int y, boolean clicked) { } private int renderSlot(FontRenderer fontRenderer, int currenty, Object[] screenData, int slot, int index, int x) { if (slot != -1) { ItemStack itm = null; try { itm = (ItemStack) screenData[index]; } catch (Exception e) { // Ignore this. } if (itm != null) { itemRender.renderItemAndEffectIntoGUI(fontRenderer, Minecraft.getMinecraft().getTextureManager(), itm, x, currenty); } x += 30; } return x; } private int renderSlotOverlay(FontRenderer fontRenderer, int currenty, Object[] screenData, int slot, int index, int x) { if (slot != -1) { ItemStack itm = null; try { itm = (ItemStack) screenData[index]; } catch (Exception e) { // Ignore this. } if (itm != null) { // itemRender.renderItemOverlayIntoGUI(fontRenderer, Minecraft.getMinecraft().getTextureManager(), itm, x, currenty); renderItemOverlayIntoGUI(fontRenderer, itm, x, currenty); } x += 30; } return x; } private static void renderItemOverlayIntoGUI(FontRenderer fontRenderer, ItemStack itemStack, int x, int y) { if (itemStack != null) { int size = itemStack.stackSize; if (size > 1) { String s1; if (size < 10000) { s1 = String.valueOf(size); } else if (size < 1000000) { s1 = String.valueOf(size / 1000) + "k"; } else if (size < 1000000000) { s1 = String.valueOf(size / 1000000) + "m"; } else { s1 = String.valueOf(size / 1000000000) + "g"; } GL11.glDisable(GL11.GL_LIGHTING); // GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_BLEND); fontRenderer.drawString(s1, x + 19 - 2 - fontRenderer.getStringWidth(s1), y + 6 + 3, 16777215); GL11.glEnable(GL11.GL_LIGHTING); // GL11.glEnable(GL11.GL_DEPTH_TEST); } if (itemStack.getItem().showDurabilityBar(itemStack)) { double health = itemStack.getItem().getDurabilityForDisplay(itemStack); int j1 = (int)Math.round(13.0D - health * 13.0D); int k = (int)Math.round(255.0D - health * 255.0D); GL11.glDisable(GL11.GL_LIGHTING); // GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_ALPHA_TEST); GL11.glDisable(GL11.GL_BLEND); Tessellator tessellator = Tessellator.instance; int l = 255 - k << 16 | k << 8; int i1 = (255 - k) / 4 << 16 | 16128; renderQuad(tessellator, x + 2, y + 13, 13, 2, 0, 0.0D); renderQuad(tessellator, x + 2, y + 13, 12, 1, i1, 0.02D); renderQuad(tessellator, x + 2, y + 13, j1, 1, l, 0.04D); //GL11.glEnable(GL11.GL_BLEND); // Forge: Disable Bled because it screws with a lot of things down the line. GL11.glEnable(GL11.GL_ALPHA_TEST); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_LIGHTING); // GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); } } } private static void renderQuad(Tessellator tessellator, int x, int y, int width, int height, int color, double offset) { tessellator.startDrawingQuads(); tessellator.setColorOpaque_I(color); tessellator.addVertex(x, y, offset); tessellator.addVertex(x, (y + height), offset); tessellator.addVertex((x + width), (y + height), offset); tessellator.addVertex((x + width), y, offset); tessellator.draw(); } @Override public Panel createGui(Minecraft mc, Gui gui, final NBTTagCompound currentData, final ModuleGuiChanged moduleGuiChanged) { return new ScreenModuleGuiBuilder(mc, gui, currentData, moduleGuiChanged). label("Slot 1:").integer("slot1", "Slot index to show").nl(). label("Slot 2:").integer("slot2", "Slot index to show").nl(). label("Slot 3:").integer("slot3", "Slot index to show").nl(). label("Slot 4:").integer("slot4", "Slot index to show").nl(). build(); } @Override public void setupFromNBT(NBTTagCompound tagCompound, int dim, int x, int y, int z) { if (tagCompound != null) { if (tagCompound.hasKey("slot1")) { slot1 = tagCompound.getInteger("slot1"); } if (tagCompound.hasKey("slot2")) { slot2 = tagCompound.getInteger("slot2"); } if (tagCompound.hasKey("slot3")) { slot3 = tagCompound.getInteger("slot3"); } if (tagCompound.hasKey("slot4")) { slot4 = tagCompound.getInteger("slot4"); } } } @Override public boolean needsServerData() { return true; } }