package game.gui; import java.util.List; import game.Button; import game.ExtMath; import game.collect.Lists; import game.entity.npc.EntityNPC; import game.inventory.Container; import game.inventory.InventoryBasic; import game.inventory.Slot; import game.item.CheatTab; import game.item.ItemStack; import game.packet.CPacketCheat; import game.renderer.GlState; public class GuiCheat extends GuiContainer { // private static final String TAB_TEXTURE = "textures/gui/tabs.png"; private static InventoryBasic tempInventory = new InventoryBasic("tmp", true, 12 * 9); private static int selectedTabIndex = CheatTab.tabBlocks.getIndex(); private float currentScroll; private boolean isScrolling; private boolean wasClicking; // private TextField searchField; // private boolean mouseClicked; public GuiCheat() { super(new GuiCheat.ContainerCheating()); // this.allowUserInput = true; this.ySize = 208; this.xSize = 249; } public void updateScreen() { } protected void handleMouseClick(Slot slotIn, int slotId, int clickedButton, int clickType) { // this.mouseClicked = true; if((clickType == 0 || clickType == 2) && slotIn != null && slotIn.inventory == tempInventory && slotIn.getStack() != null && this.gm.thePlayer != null) this.gm.thePlayer.sendQueue.addToSendQueue(new CPacketCheat(slotIn.getStack(), clickType == 0 ? -1 : clickedButton, this.gm.ctrl())); } public void initGui() { // this.guiLeft = (this.width - this.xSize) / 2; // this.guiTop = (this.height - this.ySize) / 2; // this.buttonList.clear(); // Keyboard.enableRepeatEvents(true); // this.searchField = new TextField(this.guiLeft + 82, this.guiTop + 6, 142, FontRenderer.FONT_HEIGHT); // this.searchField.setMaxStringLength(31); // this.searchField.setEnableBackgroundDrawing(false); // this.searchField.setVisible(false); // this.searchField.setTextColor(16777215); int i = selectedTabIndex; selectedTabIndex = -1; this.setCurrentTab(CheatTab.TABS[i]); // this.addButtons(); } // public void onGuiClosed() // { // Keyboard.enableRepeatEvents(false); // } // protected void keyTyped(char typedChar, int keyCode) // { // if (selectedTabIndex == CheatTab.tabSearch.getIndex()) // { //// super.keyTyped(typedChar, keyCode); //// } //// else //// { // if (this.mouseClicked) // { // this.mouseClicked = false; // this.searchField.setText(""); // } // //// if (!this.checkHotbarKeys(keyCode)) //// { // if (this.searchField.textboxKeyTyped(typedChar, keyCode)) // { // this.updateSearch(); // } //// else //// { //// super.keyTyped(typedChar, keyCode); //// } // } //// } // } // private void updateSearch() // { // GuiCheat.ContainerCheating inv = (GuiCheat.ContainerCheating)this.inventorySlots; // inv.itemList.clear(); // // for (Item item : ItemRegistry.REGISTRY) // { // if (item != null && item.getTab() != null) // { // item.getSubItems(item, null, inv.itemList); // } // } // //// for (Enchantment enchantment : Enchantment.enchantmentsBookList) //// { //// if (enchantment != null && enchantment.type != null) //// { //// Items.enchanted_book.getAll(enchantment, inv.itemList); //// } //// } // // Iterator iterator = inv.itemList.iterator(); // String s1 = this.searchField.getText().toLowerCase(); // // while (iterator.hasNext()) // { // ItemStack itemstack = (ItemStack)iterator.next(); // boolean flag = false; // // for (String s : itemstack.getTooltip(this.gm.thePlayer)) // { // if (TextColor.stripCodes(s).toLowerCase().contains(s1)) // { // flag = true; // break; // } // } // // if (!flag) // { // iterator.remove(); // } // } // // this.currentScroll = 0.0F; // inv.scrollTo(0.0F); // } public void drawGuiContainerForegroundLayer() { CheatTab tab = CheatTab.TABS[selectedTabIndex]; // GlState.disableBlend(); this.drawString(tab.getName(), 8, 6); this.drawString("Vorsicht: Schummeln wird mit Keule bestraft", 8, 183); this.drawString("(Halte Strg beim Klick für vollen Stapel)", 8, 183 + 10); } public void mouseClicked(int mouseX, int mouseY, int mouseButton) { if (mouseButton == 0) { // int i = mouseX - this.guiLeft; // int j = mouseY - this.guiTop; for (CheatTab tab : CheatTab.TABS) { if (this.isInsideTab(tab, mouseX, mouseY)) { return; } } } super.mouseClicked(mouseX, mouseY, mouseButton); } public void mouseReleased(int mouseX, int mouseY, int state) { if (state == 0) { // int i = mouseX - this.guiLeft; // int j = mouseY - this.guiTop; for (CheatTab tab : CheatTab.TABS) { if (this.isInsideTab(tab, mouseX, mouseY)) { this.setCurrentTab(tab); return; } } } super.mouseReleased(mouseX, mouseY, state); } public void mouseDragged(int mouseX, int mouseY) { } private boolean needsScrollBars() { return ((GuiCheat.ContainerCheating)this.inventorySlots).canScroll(); } private void setCurrentTab(CheatTab tab) { if(tab == CheatTab.tabInventory) { // this.gm.getSoundManager().playSound(new PositionedSound(SoundEvent.CLICK, 1.0F)); this.gm.displayGuiScreen(new GuiInventory(this.gm.thePlayer)); return; } selectedTabIndex = tab.getIndex(); GuiCheat.ContainerCheating slots = (GuiCheat.ContainerCheating)this.inventorySlots; this.dragSplittingSlots.clear(); slots.itemList.clear(); tab.displayAllReleventItems(slots.itemList); // if (this.searchField != null) // { // if (tab == CheatTab.tabSearch) // { // this.searchField.setVisible(true); // this.searchField.setCanLoseFocus(false); // this.searchField.setFocused(true); // this.searchField.setText(""); // this.updateSearch(); // } // else // { // this.searchField.setVisible(false); // this.searchField.setCanLoseFocus(true); // this.searchField.setFocused(false); // } // } this.currentScroll = 0.0F; slots.scrollTo(0.0F); } public void scroll(int scr_x, int scr_y, int x, int y, boolean ctrl, boolean shift) { super.scroll(scr_x, scr_y, x, y, ctrl, shift); // public void scroll(int dir) { if(scr_y != 0 && this.needsScrollBars()) { int len = ((GuiCheat.ContainerCheating)this.inventorySlots).itemList.size() / 12 - 5; this.currentScroll = (float)((double)this.currentScroll - (double)scr_y / (double)len); this.currentScroll = ExtMath.clampf(this.currentScroll, 0.0F, 1.0F); ((GuiCheat.ContainerCheating)this.inventorySlots).scrollTo(this.currentScroll); } } // public void handleMouseInput() throws IOException // { // super.handleMouseInput(); // int i = Mouse.getEventDWheel(); // // if (i != 0 && this.needsScrollBars()) // { // int j = ((GuiCheat.ContainerCheating)this.inventorySlots).itemList.size() / 12 - 5; // // if (i > 0) // { // i = 1; // } // // if (i < 0) // { // i = -1; // } // // this.currentScroll = (float)((double)this.currentScroll - (double)i / (double)j); // this.currentScroll = ExtMath.clampf(this.currentScroll, 0.0F, 1.0F); // ((GuiCheat.ContainerCheating)this.inventorySlots).scrollTo(this.currentScroll); // } // } public void drawScreen(int mouseX, int mouseY) { boolean flag = Button.MOUSE_LEFT.isDown(); //TODO: remove? int x1 = 175 + 18 * 3; int y1 = 18; int x2 = x1 + 14; int y2 = y1 + 112 + 18 * 4; if (!this.wasClicking && flag && mouseX >= x1 && mouseY >= y1 && mouseX < x2 && mouseY < y2) { this.isScrolling = this.needsScrollBars(); } if (!flag) { this.isScrolling = false; } this.wasClicking = flag; if (this.isScrolling) { this.currentScroll = ((float)(mouseY - y1) - 7.5F) / ((float)(y2 - y1) - 15.0F); this.currentScroll = ExtMath.clampf(this.currentScroll, 0.0F, 1.0F); ((GuiCheat.ContainerCheating)this.inventorySlots).scrollTo(this.currentScroll); } super.drawScreen(mouseX, mouseY); for (CheatTab tab : CheatTab.TABS) { if (this.renderInventoryHoveringText(tab, mouseX, mouseY)) { break; } } GlState.color(1.0F, 1.0F, 1.0F, 1.0F); GlState.disableLighting(); } protected void drawSlots(int mouseX, int mouseY) { super.drawSlots(mouseX, mouseY); for (CheatTab tabs : CheatTab.TABS) { this.drawTab(tabs); } } // public void drawDefaultBackground() { // } // protected void renderToolTip(ItemStack stack, int x, int y) // { // if (selectedTabIndex == CheatTab.tabSearch.getIndex()) // { // List list = stack.getTooltip(this.gm.thePlayer); // CheatTab tab = stack.getItem().getTab(); // //// if (tab == null && stack.getItem() == Items.enchanted_book) //// { //// Map map = EnchantmentHelper.getEnchantments(stack); //// //// if (map.size() == 1) //// { //// Enchantment enchantment = Enchantment.getEnchantmentById(((Integer)map.keySet().iterator().next()).intValue()); //// //// for (CheatTab tabs : CheatTab.TABS) //// { //// if (tabs.hasRelevantEnchantmentType(enchantment.type)) //// { //// tab = tabs; //// break; //// } //// } //// } //// } // // for (int i = 1; i < list.size(); i++) // { // list.set(i, TextColor.LIGHT_GRAY + list.get(i)); // } // // if(tab != null) // list.add(1, TextColor.BLUE + tab.getName()); // // this.drawHoveringText(list, x, y); // } // else // { // super.renderToolTip(stack, x, y); // } // } public void drawGuiContainerBackgroundLayer() { int i = 229; int j = 18; int k = j + 184; this.rect(i, j, 12, 182, this.needsScrollBars() ? 0x303030 : 0x202020); this.rect(i, j + (int)((float)(k - j - 17) * this.currentScroll), 12, 15, this.needsScrollBars() ? 0x808080 : 0x606060); CheatTab tab = CheatTab.TABS[selectedTabIndex]; int x = 28 * tab.getTabColumn(); int y = 0; if (tab.isRight()) { x = this.xSize - 28; } else if (!tab.isLeft()) { x += tab.getTabColumn(); } if (tab.isTop()) { y = y - 28; } else { y = y + (this.ySize - 4); } x = x + 6 - 1; y = y + 8 + (tab.isTop() ? 1 : -1); y = y + (tab.isTop() ? 17 : -3); this.rect(x, y, 18, 2, 0xffffff); } protected boolean isInsideTab(CheatTab tab, int x, int y) { int col = tab.getTabColumn(); int tx = 28 * col; int ty = 0; if (tab.isRight()) { tx = this.xSize - 28 + 2; } else if (!tab.isLeft()) { tx += col; } if (tab.isTop()) { ty = ty - 32; } else { ty = ty + this.ySize; } return x >= tx && x <= tx + 28 && y >= ty && y <= ty + 32; } protected boolean renderInventoryHoveringText(CheatTab tab, int x, int z) { int col = tab.getTabColumn(); int tx = 28 * col; int ty = 0; if (tab.isRight()) { tx = this.xSize - 28 + 2; } else if (!tab.isLeft()) { tx += col; } if (tab.isTop()) { ty = ty - 32; } else { ty = ty + this.ySize; } if (this.isPointInRegion(tx + 3, ty + 3, 23, 27, x, z)) { this.hover(tab.getName(), x, z); return true; } else { return false; } } public void addButtons() { super.addButtons(); for(CheatTab tab : CheatTab.TABS) { int x = 28 * tab.getTabColumn(); int y = 0; if (tab.isRight()) { x = this.xSize - 28; } else if (!tab.isLeft()) { x += tab.getTabColumn(); } if (tab.isTop()) { y = y - 28; } else { y = y + (this.ySize - 4); } x = x + 6; y = y + 8 + (tab.isTop() ? 1 : -1); this.button(x - 1, y - 1, 18, 18); } } protected void drawTab(CheatTab tab) { boolean flag = tab.getIndex() == selectedTabIndex; boolean flag1 = tab.isTop(); int col = tab.getTabColumn(); // int tx = 0; // int ty = 0; int x = 28 * col; int y = 0; // int j1 = 32; // if (flag) // { // ty += 32; // } if (tab.isRight()) { x = this.xSize - 28; // tx = 2 * 28; } else if (!tab.isLeft()) { x += col; // tx = 28; } if (flag1) { y = y - 28; } else { // ty += 64; y = y + (this.ySize - 4); } // GlState.disableLighting(); // this.rect(x, y, tx, ty, 28, 32); // this.zLevel = 100.0F; this.itemRender.zLevel = 100.0F; x = x + 6; y = y + 8 + (flag1 ? 1 : -1); // GlState.enableLighting(); // GlState.enableRescaleNormal(); ItemStack itemstack = tab.getIconItemStack(); GlState.enableDepth(); this.itemRender.renderItemAndEffectIntoGUI(itemstack, x, y); // this.itemRender.renderItemOverlays(itemstack, x, y); // GlState.disableLighting(); this.itemRender.zLevel = 0.0F; // this.zLevel = 0.0F; } // public int getSelectedTabIndex() // { // return selectedTabIndex; // } static class ContainerCheating extends Container { public List itemList = Lists.newArrayList(); public ContainerCheating() { for (int i = 0; i < 9; ++i) { for (int j = 0; j < 12; ++j) { this.addSlotToContainer(new Slot(GuiCheat.tempInventory, i * 12 + j, 9 + j * 18, 18 + i * 18)); } } this.scrollTo(0.0F); } public boolean canInteractWith(EntityNPC playerIn) { return true; } public void scrollTo(float p_148329_1_) { int i = (this.itemList.size() + 12 - 1) / 12 - 9; int j = (int)((double)(p_148329_1_ * (float)i) + 0.5D); if (j < 0) { j = 0; } for (int k = 0; k < 9; ++k) { for (int l = 0; l < 12; ++l) { int i1 = l + (k + j) * 12; if (i1 >= 0 && i1 < this.itemList.size()) { GuiCheat.tempInventory.setInventorySlotContents(l + k * 12, (ItemStack)this.itemList.get(i1)); } else { GuiCheat.tempInventory.setInventorySlotContents(l + k * 12, (ItemStack)null); } } } } public boolean canScroll() { return this.itemList.size() > 12 * 9; } protected void retrySlotClick(int slotId, int clickedButton, boolean mode, EntityNPC playerIn) { } public ItemStack transferStackInSlot(EntityNPC playerIn, int index) { return null; } public boolean canMergeSlot(ItemStack stack, Slot slotIn) { return false; } public boolean canDragIntoSlot(Slot p_94531_1_) { return false; } } }