diff options
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/miscgui/StorageOverlay.java')
| -rw-r--r-- | src/main/java/io/github/moulberry/notenoughupdates/miscgui/StorageOverlay.java | 4270 |
1 files changed, 2267 insertions, 2003 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/StorageOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/StorageOverlay.java index abcff897..bce5bfbd 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/StorageOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/StorageOverlay.java @@ -42,2019 +42,2283 @@ import java.util.List; import java.util.*; public class StorageOverlay extends GuiElement { - private static final int CHEST_TOP_OFFSET = 17; - private static final int CHEST_SLOT_SIZE = 18; - private static final int CHEST_BOTTOM_OFFSET = 215; + private static final int CHEST_TOP_OFFSET = 17; + private static final int CHEST_SLOT_SIZE = 18; + private static final int CHEST_BOTTOM_OFFSET = 215; - private Framebuffer framebuffer = null; + private Framebuffer framebuffer = null; - private final Set<Vector2f> enchantGlintRenderLocations = new HashSet<>(); + private final Set<Vector2f> enchantGlintRenderLocations = new HashSet<>(); - public static final ResourceLocation[] STORAGE_PREVIEW_TEXTURES = new ResourceLocation[4]; - private static final ResourceLocation[] STORAGE_TEXTURES = new ResourceLocation[4]; - private static final ResourceLocation STORAGE_ICONS_TEXTURE = new ResourceLocation("notenoughupdates:storage_gui/storage_icons.png"); - private static final ResourceLocation STORAGE_PANE_CTM_TEXTURE = new ResourceLocation("notenoughupdates:storage_gui/storage_gui_pane_ctm.png"); - private static final ResourceLocation[] LOAD_CIRCLE_SEQ = new ResourceLocation[11]; - private static final ResourceLocation[] NOT_RICKROLL_SEQ = new ResourceLocation[19]; + public static final ResourceLocation[] STORAGE_PREVIEW_TEXTURES = new ResourceLocation[4]; + private static final ResourceLocation[] STORAGE_TEXTURES = new ResourceLocation[4]; + private static final ResourceLocation STORAGE_ICONS_TEXTURE = new ResourceLocation( + "notenoughupdates:storage_gui/storage_icons.png"); + private static final ResourceLocation STORAGE_PANE_CTM_TEXTURE = new ResourceLocation( + "notenoughupdates:storage_gui/storage_gui_pane_ctm.png"); + private static final ResourceLocation[] LOAD_CIRCLE_SEQ = new ResourceLocation[11]; + private static final ResourceLocation[] NOT_RICKROLL_SEQ = new ResourceLocation[19]; - static { - for (int i = 0; i < STORAGE_TEXTURES.length; i++) { - STORAGE_TEXTURES[i] = new ResourceLocation("notenoughupdates:storage_gui/storage_gui_" + i + ".png"); - } - for (int i = 0; i < STORAGE_PREVIEW_TEXTURES.length; i++) { - STORAGE_PREVIEW_TEXTURES[i] = new ResourceLocation("notenoughupdates:storage_gui/storage_preview_" + i + ".png"); - } + static { + for (int i = 0; i < STORAGE_TEXTURES.length; i++) { + STORAGE_TEXTURES[i] = new ResourceLocation("notenoughupdates:storage_gui/storage_gui_" + i + ".png"); + } + for (int i = 0; i < STORAGE_PREVIEW_TEXTURES.length; i++) { + STORAGE_PREVIEW_TEXTURES[i] = new ResourceLocation("notenoughupdates:storage_gui/storage_preview_" + i + ".png"); + } - for (int i = 0; i < NOT_RICKROLL_SEQ.length; i++) { - NOT_RICKROLL_SEQ[i] = new ResourceLocation("notenoughupdates:storage_gui/we_do_a_little_rolling/" + i + ".jpg"); - } + for (int i = 0; i < NOT_RICKROLL_SEQ.length; i++) { + NOT_RICKROLL_SEQ[i] = new ResourceLocation("notenoughupdates:storage_gui/we_do_a_little_rolling/" + i + ".jpg"); + } - LOAD_CIRCLE_SEQ[0] = new ResourceLocation("notenoughupdates:loading_circle_seq/1.png"); - LOAD_CIRCLE_SEQ[1] = new ResourceLocation("notenoughupdates:loading_circle_seq/1.png"); - LOAD_CIRCLE_SEQ[2] = new ResourceLocation("notenoughupdates:loading_circle_seq/2.png"); - for (int i = 2; i <= 7; i++) { - LOAD_CIRCLE_SEQ[i + 1] = new ResourceLocation("notenoughupdates:loading_circle_seq/" + i + ".png"); - } - LOAD_CIRCLE_SEQ[9] = new ResourceLocation("notenoughupdates:loading_circle_seq/7.png"); - LOAD_CIRCLE_SEQ[10] = new ResourceLocation("notenoughupdates:loading_circle_seq/1.png"); - } + LOAD_CIRCLE_SEQ[0] = new ResourceLocation("notenoughupdates:loading_circle_seq/1.png"); + LOAD_CIRCLE_SEQ[1] = new ResourceLocation("notenoughupdates:loading_circle_seq/1.png"); + LOAD_CIRCLE_SEQ[2] = new ResourceLocation("notenoughupdates:loading_circle_seq/2.png"); + for (int i = 2; i <= 7; i++) { + LOAD_CIRCLE_SEQ[i + 1] = new ResourceLocation("notenoughupdates:loading_circle_seq/" + i + ".png"); + } + LOAD_CIRCLE_SEQ[9] = new ResourceLocation("notenoughupdates:loading_circle_seq/7.png"); + LOAD_CIRCLE_SEQ[10] = new ResourceLocation("notenoughupdates:loading_circle_seq/1.png"); + } - private static final StorageOverlay INSTANCE = new StorageOverlay(); + private static final StorageOverlay INSTANCE = new StorageOverlay(); - public static StorageOverlay getInstance() { - return INSTANCE; - } + public static StorageOverlay getInstance() { + return INSTANCE; + } - private final GuiElementTextField searchBar = new GuiElementTextField("", 88, 10, - GuiElementTextField.SCALE_TEXT | GuiElementTextField.DISABLE_BG); - private final GuiElementTextField renameStorageField = new GuiElementTextField("", 100, 13, - GuiElementTextField.COLOUR); - - private int editingNameId = -1; - - private int guiLeft; - private int guiTop; - - private boolean fastRender = false; - - private int loadCircleIndex = 0; - private int rollIndex = 0; - private int loadCircleRotation = 0; - - private long millisAccumIndex = 0; - private long millisAccumRoll = 0; - private long millisAccumRotation = 0; - - private long lastMillis = 0; - - private int scrollVelocity = 0; - private long lastScroll = 0; - - private final int[][] isPaneCaches = new int[40][]; - private final int[][] ctmIndexCaches = new int[40][]; - - private int desiredHeightSwitch = -1; - private int desiredHeightMX = -1; - private int desiredHeightMY = -1; - - private boolean dirty = false; - private boolean allowTypingInSearchBar = true; - - private int scrollGrabOffset = -1; - - private final LerpingInteger scroll = new LerpingInteger(0, 200); - - private int getMaximumScroll() { - synchronized (StorageManager.getInstance().storageConfig.displayToStorageIdMapRender) { - - int maxH = 0; - - for (int i = 0; i < 3; i++) { - int lastDisplayId = StorageManager.getInstance().storageConfig.displayToStorageIdMapRender.size() - 1; - int coords = (int) Math.ceil(lastDisplayId / 3f) * 3 + 1 + i; - - int h = getPageCoords(coords).y + scroll.getValue() - getStorageViewSize() - 14; - - if (h > maxH) maxH = h; - } - - return maxH; - } - } - - public void markDirty() { - dirty = true; - } - - private void scrollToY(int y) { - int target = y; - if (target < 0) target = 0; - - int maxY = getMaximumScroll(); - if (target > maxY) target = maxY; - - float factor = (scroll.getValue() - target) / (float) (scroll.getValue() - y + 1E-5); - - scroll.setTarget(target); - scroll.setTimeToReachTarget(Math.min(200, Math.max(20, (int) (200 * factor)))); - scroll.resetTimer(); - } - - public void scrollToStorage(int displayId, boolean forceScroll) { - if (displayId < 0) return; - - int y = getPageCoords(displayId).y - 17; - if (y < 3) { - scrollToY(y + scroll.getValue()); - } else { - int storageViewSize = getStorageViewSize(); - int y2 = getPageCoords(displayId + 3).y - 17 - storageViewSize; - if (y2 > 3) { - if (forceScroll) { - scrollToY(y + scroll.getValue()); - } else { - scrollToY(y2 + scroll.getValue()); - } - } - } - } - - private int getStorageViewSize() { - return NotEnoughUpdates.INSTANCE.config.storageGUI.storageHeight; - } - - private int getScrollBarHeight() { - return getStorageViewSize() - 21; - } - - @Override - public void render() { - if (!(Minecraft.getMinecraft().currentScreen instanceof GuiChest)) return; - GuiChest guiChest = (GuiChest) Minecraft.getMinecraft().currentScreen; - ContainerChest containerChest = (ContainerChest) guiChest.inventorySlots; - - ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - int width = scaledResolution.getScaledWidth(); - int height = scaledResolution.getScaledHeight(); - int mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; - int mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1; - FontRenderer fontRendererObj = Minecraft.getMinecraft().fontRendererObj; - - scroll.tick(); - - int displayStyle = NotEnoughUpdates.INSTANCE.config.storageGUI.displayStyle; - ResourceLocation storageTexture = STORAGE_TEXTURES[displayStyle]; - ResourceLocation storagePreviewTexture = STORAGE_PREVIEW_TEXTURES[displayStyle]; - int textColour = 0x404040; - int searchTextColour = 0xe0e0e0; - if (displayStyle == 2) { - textColour = 0x000000; - searchTextColour = 0xa0a0a0; - } else if (displayStyle == 3) { - textColour = 0xFBCC6C; - } else if (displayStyle == 0) { - textColour = 0x909090; - searchTextColour = 0xa0a0a0; - } - - long currentTime = System.currentTimeMillis(); - if (lastMillis > 0) { - long deltaTime = currentTime - lastMillis; - millisAccumIndex += deltaTime; - loadCircleIndex += millisAccumIndex / (1000 / 15); - millisAccumIndex %= (1000 / 15); - - millisAccumRotation += deltaTime; - loadCircleRotation += millisAccumRotation / (1000 / 107); - millisAccumRotation %= (1000 / 107); - - millisAccumRoll += deltaTime; - rollIndex += millisAccumRoll / 100; - millisAccumRoll %= 100; - } - - lastMillis = currentTime; - loadCircleIndex %= LOAD_CIRCLE_SEQ.length; - rollIndex %= NOT_RICKROLL_SEQ.length * 2; - loadCircleRotation %= 360; - - Color loadCircleColour = Color.getHSBColor(loadCircleRotation / 360f, 0.3f, 0.9f); - ItemStack stackOnMouse = Minecraft.getMinecraft().thePlayer.inventory.getItemStack(); - if (stackOnMouse != null) { - String stackDisplay = Utils.cleanColour(stackOnMouse.getDisplayName()); - if (stackDisplay.startsWith("Backpack Slot ") || stackDisplay.startsWith("Empty Backpack Slot ") || - stackDisplay.startsWith("Ender Chest Page ")) { - stackOnMouse = null; - } - } - - List<String> tooltipToDisplay = null; - int slotPreview = -1; - - int storageViewSize = getStorageViewSize(); - - int sizeX = 540; - int sizeY = 100 + storageViewSize; - int searchNobX = 18; - - int itemHoverX = -1; - int itemHoverY = -1; - - guiLeft = width / 2 - (sizeX - searchNobX) / 2; - guiTop = height / 2 - sizeY / 2; - - if (displayStyle == 0) { - BackgroundBlur.renderBlurredBackground(7, width, height, guiLeft, guiTop, sizeX, storageViewSize); - BackgroundBlur.renderBlurredBackground(7, width, height, guiLeft + 5, guiTop + storageViewSize, sizeX - searchNobX - 10, sizeY - storageViewSize - 4); - } - - Utils.drawGradientRect(0, 0, width, height, 0xc0101010, 0xd0101010); - - GL11.glPushMatrix(); - GlStateManager.translate(guiLeft, guiTop, 0); - - boolean hoveringOtherBackpack = false; - - //Gui - Minecraft.getMinecraft().getTextureManager().bindTexture(storageTexture); - GlStateManager.color(1, 1, 1, 1); - Utils.drawTexturedRect(0, 0, sizeX, 10, 0, sizeX / 600f, 0, 10 / 400f, GL11.GL_NEAREST); - Utils.drawTexturedRect(0, 10, sizeX, storageViewSize - 20, 0, sizeX / 600f, 10 / 400f, 94 / 400f, GL11.GL_NEAREST); - Utils.drawTexturedRect(0, storageViewSize - 10, sizeX, 110, 0, sizeX / 600f, 94 / 400f, 204 / 400f, GL11.GL_NEAREST); - - int maxScroll = getMaximumScroll(); - if (scroll.getValue() > maxScroll) { - scroll.setValue(maxScroll); - } - if (scroll.getValue() < 0) { - scroll.setValue(0); - } - - //Scroll bar - int scrollBarY = Math.round(getScrollBarHeight() * scroll.getValue() / (float) maxScroll); - float uMin = scrollGrabOffset >= 0 ? 12 / 600f : 0; - Utils.drawTexturedRect(520, 8 + scrollBarY, 12, 15, uMin, uMin + 12 / 600f, 250 / 400f, 265 / 400f, GL11.GL_NEAREST); - - int currentPage = StorageManager.getInstance().getCurrentPageId(); - - boolean mouseInsideStorages = mouseY > guiTop + 3 && mouseY < guiTop + 3 + storageViewSize; - - //Storages - boolean doItemRender = true; - boolean doRenderFramebuffer = false; - int startY = getPageCoords(0).y; - if (OpenGlHelper.isFramebufferEnabled()) { - int h; - synchronized (StorageManager.getInstance().storageConfig.displayToStorageIdMapRender) { - int lastDisplayId = StorageManager.getInstance().storageConfig.displayToStorageIdMapRender.size() - 1; - int coords = (int) Math.ceil(lastDisplayId / 3f) * 3 + 3; - - h = getPageCoords(coords).y + scroll.getValue(); - } - int w = sizeX; - - //Render from framebuffer - if (framebuffer != null) { - GlScissorStack.push(0, guiTop + 3, width, guiTop + 3 + storageViewSize, scaledResolution); - GlStateManager.enableDepth(); - GlStateManager.translate(0, startY, 107.0001f); - framebuffer.bindFramebufferTexture(); - - GlStateManager.color(1, 1, 1, 1); - - GlStateManager.enableAlpha(); - GlStateManager.alphaFunc(GL11.GL_GREATER, 0F); - Utils.drawTexturedRect(0, 0, w, h, 0, 1, 1, 0, GL11.GL_NEAREST); - GlStateManager.alphaFunc(GL11.GL_GREATER, 0.1F); - - renderEnchOverlay(enchantGlintRenderLocations); - - GlStateManager.translate(0, -startY, -107.0001f); - GlScissorStack.pop(scaledResolution); - } - - if (dirty || framebuffer == null) { - dirty = false; - - int fw = w * scaledResolution.getScaleFactor(); - int fh = h * scaledResolution.getScaleFactor(); - - if (framebuffer == null) { - framebuffer = new Framebuffer(fw, fh, true); - } else if (framebuffer.framebufferWidth != fw || framebuffer.framebufferHeight != fh) { - framebuffer.createBindFramebuffer(fw, fh); - } - framebuffer.framebufferClear(); - framebuffer.bindFramebuffer(true); - - GlStateManager.matrixMode(GL11.GL_PROJECTION); - GlStateManager.loadIdentity(); - GlStateManager.ortho(0.0D, w, h, 0.0D, 1000.0D, 3000.0D); - GlStateManager.matrixMode(GL11.GL_MODELVIEW); - - GlStateManager.pushMatrix(); - GlStateManager.translate(-guiLeft, -guiTop - startY, 0); - - doRenderFramebuffer = true; - } else { - doItemRender = false; - } - } - - if (doItemRender) { - enchantGlintRenderLocations.clear(); - for (Map.Entry<Integer, Integer> entry : StorageManager.getInstance().storageConfig.displayToStorageIdMapRender.entrySet()) { - int displayId = entry.getKey(); - int storageId = entry.getValue(); - - IntPair coords = getPageCoords(displayId); - int storageX = coords.x; - int storageY = coords.y; - - if (!doRenderFramebuffer) { - if (coords.y - 11 > 3 + storageViewSize || coords.y + 90 < 3) continue; - } - - StorageManager.StoragePage page = StorageManager.getInstance().getPage(storageId, false); - if (page != null && page.rows > 0) { - int rows = page.rows; - - isPaneCaches[storageId] = new int[page.rows * 9]; - ctmIndexCaches[storageId] = new int[page.rows * 9]; - int[] isPaneCache = isPaneCaches[storageId]; - int[] ctmIndexCache = ctmIndexCaches[storageId]; - - for (int k = 0; k < rows * 9; k++) { - ItemStack stack; - - if (storageId == currentPage) { - stack = containerChest.getSlot(k + 9).getStack(); - } else { - stack = page.items[k]; - } - - int itemX = storageX + 1 + 18 * (k % 9); - int itemY = storageY + 1 + 18 * (k / 9); - - //Render fancy glass - if (stack != null) { - int paneType = getPaneType(stack, k, isPaneCache); - if (paneType > 0) { - GlStateManager.disableAlpha(); - Gui.drawRect(itemX - 1, itemY - 1, itemX + 17, itemY + 17, 0x01000000); - GlStateManager.enableAlpha(); - - int ctmIndex = getCTMIndex(page, k, isPaneCache, ctmIndexCache); - int startCTMX = (ctmIndex % 12) * 19; - int startCTMY = (ctmIndex / 12) * 19; - - ctmIndexCache[k] = ctmIndex; - - if (paneType != 17) { - int rgb = getRGBFromPane(paneType - 1); - { - int a = (rgb >> 24) & 0xFF; - int r = (rgb >> 16) & 0xFF; - int g = (rgb >> 8) & 0xFF; - int b = rgb & 0xFF; - Minecraft.getMinecraft().getTextureManager().bindTexture(STORAGE_PANE_CTM_TEXTURE); - GlStateManager.color(r / 255f, g / 255f, b / 255f, a / 255f); - Utils.drawTexturedRect(itemX - 1, itemY - 1, 18, 18, - startCTMX / 227f, (startCTMX + 18) / 227f, startCTMY / 75f, (startCTMY + 18) / 75f, GL11.GL_NEAREST); - } - - /*int[] colours = new int[9]; - - for(int xi=-1; xi<=1; xi++) { - for(int yi=-1; yi<=1; yi++) { - List<Integer> indexes = new ArrayList<>(); - List<Integer> coloursList = new ArrayList<>(); - coloursList.add(rgb); - - if(xi != 0) { - indexes.add(k+xi); - } - if(yi != 0) { - indexes.add(k+yi*9); - } - if(xi != 0 && yi != 0) { - indexes.add(k+yi*9+xi); - } - for(int index : indexes) { - if(index >= 0 && index < rows*9) { - int paneTypeI = getPaneType(page.items[index], index, isPaneCache); - if(shouldConnect(paneType, paneTypeI)) { - coloursList.add(getRGBFromPane(paneTypeI-1)); - } - } - } - Vector4f cv = new Vector4f(); - for(int colour : coloursList) { - float a = (colour >> 24) & 0xFF; - float r = (colour >> 16) & 0xFF; - float g = (colour >> 8) & 0xFF; - float b = colour & 0xFF; - cv.x += a/coloursList.size(); - cv.y += r/coloursList.size(); - cv.z += g/coloursList.size(); - cv.w += b/coloursList.size(); - } - int finalCol = (((int)cv.x) << 24) | (((int)cv.y) << 16) | (((int)cv.z) << 8) | ((int)cv.w); - colours[(xi+1)+(yi+1)*3] = finalCol; - } - } - int[] colours4 = new int[16]; - - for(int x=0; x<4; x++) { - for(int y=0; y<4; y++) { - int ya = y < 2 ? y : y-1; - int xa = x < 2 ? x : x-1; - colours4[x+y*4] = colours[xa+ya*3]; - } - } - - GlStateManager.pushMatrix(); - GlStateManager.translate(itemX-1, itemY-1, 0); - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); - float uMinCTM = startCTMX/227f; - float uMaxCTM = (startCTMX+18)/227f; - float vMinCTM = startCTMY/75f; - float vMaxCTM = (startCTMY+18)/75f; - for(int xi=-1; xi<=1; xi++) { - for(int yi = -1; yi <= 1; yi++) { - float x = xi == -1 ? 0 : xi == 0 ? 1 : 17; - float y = yi == -1 ? 0 : yi == 0 ? 1 : 17; - float w = xi == 0 ? 16 : 1; - float h = yi == 0 ? 16 : 1; - - int col1 = colours4[(xi+1)+(yi+1)*4]; - int col2 = colours4[(xi+2)+(yi+1)*4]; - int col3 = colours4[(xi+1)+(yi+2)*4]; - int col4 = colours4[(xi+2)+(yi+2)*4]; - - worldrenderer - .pos(x, y+h, 0.0D) - .tex(uMinCTM + (uMaxCTM - uMinCTM) * x/18f, vMinCTM+(vMaxCTM-vMinCTM)*(y+h)/18f) - .color((col3 >> 16) & 0xFF, (col3 >> 8) & 0xFF, col3 & 0xFF, (col3 >> 24) & 0xFF).endVertex(); - worldrenderer - .pos(x+w, y+h, 0.0D) - .tex(uMinCTM+(uMaxCTM-uMinCTM)*(x+w)/18f, vMinCTM+(vMaxCTM-vMinCTM)*(y+h)/18f) - .color((col4 >> 16) & 0xFF, (col4 >> 8) & 0xFF, col4 & 0xFF, (col4 >> 24) & 0xFF).endVertex(); - worldrenderer - .pos(x+w, y, 0.0D) - .tex(uMinCTM+(uMaxCTM-uMinCTM)*(x+w)/18f, vMinCTM+(vMaxCTM-vMinCTM)*y/18f) - .color((col2 >> 16) & 0xFF, (col2 >> 8) & 0xFF, col2 & 0xFF, (col2 >> 24) & 0xFF).endVertex(); - worldrenderer - .pos(x, y, 0.0D) - .tex(uMinCTM + (uMaxCTM - uMinCTM) * x/18f, vMinCTM+(vMaxCTM-vMinCTM)*y/18f) - .color((col1 >> 16) & 0xFF, (col1 >> 8) & 0xFF, col1 & 0xFF, (col1 >> 24) & 0xFF).endVertex(); - } - } - GlStateManager.disableDepth(); - GlStateManager.color(1, 1, 1, 1); - GlStateManager.shadeModel(GL11.GL_SMOOTH); - tessellator.draw(); - GlStateManager.shadeModel(GL11.GL_FLAT); - GlStateManager.enableDepth(); - GlStateManager.popMatrix();*/ - - RenderItem itemRender = Minecraft.getMinecraft().getRenderItem(); - itemRender.renderItemOverlayIntoGUI(Minecraft.getMinecraft().fontRendererObj, stack, itemX, itemY, null); - GlStateManager.disableLighting(); - } - - page.shouldDarkenIfNotSelected[k] = false; - continue; - } - } - page.shouldDarkenIfNotSelected[k] = true; - - //Render item - GlStateManager.translate(0, 0, 20); - if (doRenderFramebuffer) { - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - GL14.glBlendFuncSeparate(GL11.GL_ONE, GL11.GL_ZERO, GL11.GL_ONE, GL11.GL_ZERO); - - if (storageId == currentPage) { - Utils.hasEffectOverride = true; - GlStateManager.translate(storageX - 7, storageY - 17 - 18, 0); - guiChest.drawSlot(containerChest.getSlot(k + 9)); - GlStateManager.translate(-storageX + 7, -storageY + 17 + 18, 0); - Utils.hasEffectOverride = false; - } else { - Utils.drawItemStackWithoutGlint(stack, itemX, itemY); - } - - GL14.glBlendFuncSeparate(770, 771, 1, 0); - - if (stack != null && (stack.hasEffect() || stack.getItem() == Items.enchanted_book)) { - enchantGlintRenderLocations.add(new Vector2f(itemX, itemY - startY)); - } - } else if (storageId == currentPage) { - Utils.hasEffectOverride = true; - GlStateManager.translate(storageX - 7, storageY - 17 - 18, 0); - guiChest.drawSlot(containerChest.getSlot(k + 9)); - GlStateManager.translate(-storageX + 7, -storageY + 17 + 18, 0); - Utils.hasEffectOverride = false; - } else { - Utils.drawItemStack(stack, itemX, itemY); - } - GlStateManager.disableLighting(); - GlStateManager.translate(0, 0, -20); - } - - GlStateManager.disableLighting(); - GlStateManager.enableDepth(); - } - } - } - - if (OpenGlHelper.isFramebufferEnabled() && doRenderFramebuffer) { - GlStateManager.popMatrix(); - Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(true); - - GlStateManager.matrixMode(GL11.GL_PROJECTION); - GlStateManager.loadIdentity(); - GlStateManager.ortho(0.0D, scaledResolution.getScaledWidth_double(), scaledResolution.getScaledHeight_double(), - 0.0D, 1000.0D, 3000.0D); - GlStateManager.matrixMode(GL11.GL_MODELVIEW); - } - - GlScissorStack.push(0, guiTop + 3, width, guiTop + 3 + storageViewSize, scaledResolution); - for (Map.Entry<Integer, Integer> entry : StorageManager.getInstance().storageConfig.displayToStorageIdMapRender.entrySet()) { - int displayId = entry.getKey(); - int storageId = entry.getValue(); - - IntPair coords = getPageCoords(displayId); - int storageX = coords.x; - int storageY = coords.y; - - if (coords.y - 11 > 3 + storageViewSize || coords.y + 90 < 3) continue; - - StorageManager.StoragePage page = StorageManager.getInstance().getPage(storageId, false); - - if (editingNameId == storageId) { - int len = fontRendererObj.getStringWidth(renameStorageField.getTextDisplay()) + 10; - renameStorageField.setSize(len, 12); - renameStorageField.render(storageX, storageY - 13); - } else { - String pageTitle; - if (page != null && page.customTitle != null && !page.customTitle.isEmpty()) { - pageTitle = Utils.chromaStringByColourCode(page.customTitle); - } else if (entry.getValue() < 9) { - pageTitle = "Ender Chest Page " + (entry.getValue() + 1); - } else { - pageTitle = "Backpack Slot " + (storageId - 8); - } - int titleLen = fontRendererObj.getStringWidth(pageTitle); - - if (mouseX >= guiLeft + storageX && mouseX <= guiLeft + storageX + titleLen + 15 && - mouseY >= guiTop + storageY - 14 && mouseY <= guiTop + storageY + 1) { - pageTitle += " \u270E"; - } - fontRendererObj.drawString(pageTitle, storageX, storageY - 11, textColour); - } - - if (page == null) { - Minecraft.getMinecraft().getTextureManager().bindTexture(storageTexture); - GlStateManager.color(1, 1, 1, 1); - int h = 18 * 3; - - Utils.drawTexturedRect(storageX, storageY, 162, h, 0, 162 / 600f, 265 / 400f, (265 + h) / 400f, GL11.GL_NEAREST); - - Gui.drawRect(storageX, storageY, storageX + 162, storageY + h, 0x80000000); - - if (storageId < 9) { - Utils.drawStringCenteredScaledMaxWidth("Locked Page", fontRendererObj, - storageX + 81, storageY + h / 2, true, 150, 0xd94c00); - } else { - Utils.drawStringCenteredScaledMaxWidth("Empty Backpack Slot", fontRendererObj, - storageX + 81, storageY + h / 2, true, 150, 0xd94c00); - } - } else if (page.rows <= 0) { - Minecraft.getMinecraft().getTextureManager().bindTexture(storageTexture); - GlStateManager.color(1, 1, 1, 1); - int h = 18 * 3; - - Utils.drawTexturedRect(storageX, storageY, 162, h, 0, 162 / 600f, 265 / 400f, (265 + h) / 400f, GL11.GL_NEAREST); - - Gui.drawRect(storageX, storageY, storageX + 162, storageY + h, 0x80000000); - - Utils.drawStringCenteredScaledMaxWidth("Click to load items", fontRendererObj, - storageX + 81, storageY + h / 2, true, 150, 0xffdf00); - } else { - int rows = page.rows; - - int storageW = 162; - int storageH = 18 * rows; - - GlStateManager.enableDepth(); - - boolean[] shouldLimitBorder = new boolean[rows * 9]; - boolean hasCaches = isPaneCaches[storageId] != null && isPaneCaches[storageId].length == rows * 9 && - ctmIndexCaches[storageId] != null && ctmIndexCaches[storageId].length == rows * 9; - - //Render item connections - for (int k = 0; k < rows * 9; k++) { - ItemStack stack = page.items[k]; - - if (stack != null && hasCaches) { - int itemX = storageX + 1 + 18 * (k % 9); - int itemY = storageY + 1 + 18 * (k / 9); - - int[] isPaneCache = isPaneCaches[storageId]; - int[] ctmIndexCache = ctmIndexCaches[storageId]; - - if (isPaneCache[k] == 17) { - int ctmIndex = getCTMIndex(page, k, isPaneCache, ctmIndexCache); - int startCTMX = (ctmIndex % 12) * 19; - int startCTMY = (ctmIndex / 12) * 19; - - int rgb = getRGBFromPane(isPaneCache[k] - 1); - int a = (rgb >> 24) & 0xFF; - int r = (rgb >> 16) & 0xFF; - int g = (rgb >> 8) & 0xFF; - int b = rgb & 0xFF; - Minecraft.getMinecraft().getTextureManager().bindTexture(STORAGE_PANE_CTM_TEXTURE); - GlStateManager.color(r / 255f, g / 255f, b / 255f, a / 255f); - GlStateManager.translate(0, 0, 110); - Utils.drawTexturedRect(itemX - 1, itemY - 1, 18, 18, - startCTMX / 227f, (startCTMX + 18) / 227f, startCTMY / 75f, (startCTMY + 18) / 75f, GL11.GL_NEAREST); - GlStateManager.translate(0, 0, -110); - - RenderItem itemRender = Minecraft.getMinecraft().getRenderItem(); - itemRender.renderItemOverlayIntoGUI(Minecraft.getMinecraft().fontRendererObj, stack, itemX, itemY, null); - GlStateManager.enableDepth(); - } else if (isPaneCache[k] < 0) { - boolean hasConnection = false; - - int upIndex = k - 9; - int leftIndex = k % 9 > 0 ? k - 1 : -1; - int rightIndex = k % 9 < 8 ? k + 1 : -1; - int downIndex = k + 9; - - int[] indexArr = {rightIndex, downIndex, leftIndex, upIndex}; - - for (int j = 0; j < 4; j++) { - int index = indexArr[j]; - int type = index >= 0 && index < isPaneCache.length ? getPaneType(page.items[index], index, isPaneCache) : -1; - if (type > 0) { - int ctmIndex = getCTMIndex(page, index, isPaneCache, ctmIndexCache); - if (ctmIndex < 0) continue; - - boolean renderConnection; - boolean horizontal = ctmIndex == 1 || ctmIndex == 2 || ctmIndex == 3; - boolean vertical = ctmIndex == 12 || ctmIndex == 24 || ctmIndex == 36; - if ((k % 9 == 0 && index % 9 == 0) || (k % 9 == 8 && index % 9 == 8)) { - renderConnection = horizontal || vertical; - } else if (index == leftIndex || index == rightIndex) { - renderConnection = horizontal; - } else { - renderConnection = vertical; - } - - if (renderConnection) { - shouldLimitBorder[k] = true; - hasConnection = true; - - Minecraft.getMinecraft().getTextureManager().bindTexture(STORAGE_PANE_CTM_TEXTURE); - int rgb = getRGBFromPane(type - 1); - int a = (rgb >> 24) & 0xFF; - int r = (rgb >> 16) & 0xFF; - int g = (rgb >> 8) & 0xFF; - int b = rgb & 0xFF; - GlStateManager.color(r / 255f, g / 255f, b / 255f, a / 255f); - - GlStateManager.pushMatrix(); - GlStateManager.translate(itemX - 1 + 9, itemY - 1 + 9, 10); - GlStateManager.rotate(j * 90, 0, 0, 1); - GlStateManager.enableAlpha(); - GlStateManager.disableLighting(); - - boolean horzFlip = false; - boolean vertFlip = false; - - if (index == leftIndex) { - vertFlip = true; - } else if (index == downIndex) { - vertFlip = true; - } - - GlStateManager.enableDepth(); - Utils.drawTexturedRect(0, -9, 8, 18, - !horzFlip ? 209 / 227f : 219 / 227f, horzFlip ? 227 / 227f : 217 / 227f, - !vertFlip ? 57 / 75f : 75f / 75f, vertFlip ? 57 / 75f : 75f / 75f, GL11.GL_NEAREST); - GlStateManager.translate(0, 0, 120); - Utils.drawTexturedRect(8, -9, 10, 18, - !horzFlip ? 217 / 227f : 209 / 227f, horzFlip ? 219 / 227f : 227 / 227f, - !vertFlip ? 57 / 75f : 75f / 75f, vertFlip ? 57 / 75f : 75f / 75f, GL11.GL_NEAREST); - GlStateManager.translate(0, 0, -120); - - GlStateManager.popMatrix(); - } - } - } - - if (hasConnection) { - page.shouldDarkenIfNotSelected[k] = false; - - GlStateManager.disableAlpha(); - GlStateManager.translate(0, 0, 10); - Gui.drawRect(itemX - 1, itemY - 1, itemX + 17, itemY + 17, 0x01000000); - GlStateManager.translate(0, 0, -10); - GlStateManager.enableAlpha(); - } - } - } - } - - Minecraft.getMinecraft().getTextureManager().bindTexture(storageTexture); - GlStateManager.color(1, 1, 1, 1); - Utils.drawTexturedRect(storageX, storageY, storageW, storageH, 0, 162 / 600f, 265 / 400f, (265 + storageH) / 400f, GL11.GL_NEAREST); - - boolean whiteOverlay = false; - - for (int k = 0; k < rows * 9; k++) { - ItemStack stack = page.items[k]; - int itemX = storageX + 1 + 18 * (k % 9); - int itemY = storageY + 1 + 18 * (k / 9); |
