aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java
diff options
context:
space:
mode:
authorBuildTools <james.jenour@protonmail.com>2020-07-07 02:48:49 +1000
committerBuildTools <james.jenour@protonmail.com>2020-07-07 02:48:49 +1000
commitf39c28236bc47a9e5395b041b494fdd7f332734e (patch)
tree84c1c9b18577a0a18be1c08c514b4b7dae87dc20 /src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java
parent009ed0ef14d3a5fd75be17ed2c90688202e69c85 (diff)
downloadnotenoughupdates-f39c28236bc47a9e5395b041b494fdd7f332734e.tar.gz
notenoughupdates-f39c28236bc47a9e5395b041b494fdd7f332734e.tar.bz2
notenoughupdates-f39c28236bc47a9e5395b041b494fdd7f332734e.zip
ah nearly done
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java')
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java1055
1 files changed, 1055 insertions, 0 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java b/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java
new file mode 100644
index 00000000..0cc17afe
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java
@@ -0,0 +1,1055 @@
+package io.github.moulberry.notenoughupdates.auction;
+
+import io.github.moulberry.notenoughupdates.NEUManager;
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
+import io.github.moulberry.notenoughupdates.util.TexLoc;
+import io.github.moulberry.notenoughupdates.util.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiTextField;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.gui.inventory.GuiChest;
+import net.minecraft.client.gui.inventory.GuiEditSign;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.tileentity.TileEntitySign;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.ResourceLocation;
+import org.lwjgl.input.Keyboard;
+import org.lwjgl.input.Mouse;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL14;
+
+import java.awt.*;
+import java.text.NumberFormat;
+import java.util.*;
+import java.util.List;
+
+import static io.github.moulberry.notenoughupdates.GuiTextures.*;
+
+public class CustomAH extends Gui {
+
+ private static final ResourceLocation creativeTabSearch =
+ new ResourceLocation("textures/gui/container/creative_inventory/tab_item_search.png");
+ private static final ResourceLocation creativeInventoryTabs =
+ new ResourceLocation("textures/gui/container/creative_inventory/tabs.png");
+
+ private List<String> auctionIds = new ArrayList<>();
+
+ private boolean scrollClicked = false;
+
+ private int startingBid = 0;
+
+ private int clickedMainCategory = -1;
+ private int clickedSubCategory = -1;
+
+ private GuiTextField searchField = null;
+ private GuiTextField priceField = null;
+
+ private boolean renderOverAuctionView = false;
+ private long lastRenderDisable = 0;
+
+ private int eventButton;
+ private long lastMouseEvent;
+ public long lastOpen;
+ public long lastGuiScreenSwitch;
+
+ private int splits = 2;
+
+ private int ySplit = 35;
+ private int ySplitSize = 18;
+
+ private float scrollAmount;
+
+ private int guiLeft = 0;
+ private int guiTop = 0;
+
+ private Category CATEGORY_SWORD = new Category("sword", "Swords", "diamond_sword");
+ private Category CATEGORY_ARMOR = new Category("armor", "Armor", "diamond_chestplate");
+ private Category CATEGORY_BOWS = new Category("bow", "Bows", "bow");
+ private Category CATEGORY_ACCESSORIES = new Category("accessories", "Accessories", "diamond");
+
+ private Category CATEGORY_FISHING_ROD = new Category("fishingrod", "Fishing Rods", "fishing_rod");
+ private Category CATEGORY_PICKAXE = new Category("pickaxe", "Pickaxes", "iron_pickaxe");
+ private Category CATEGORY_AXE = new Category("axe", "Axes", "iron_axe");
+ private Category CATEGORY_SHOVEL = new Category("shovel", "Shovels", "iron_shovel");
+
+ private Category CATEGORY_PET_ITEM = new Category("petitem", "Pet Items", "lead");
+
+ private Category CATEGORY_EBOOKS = new Category("ebook", "Enchanted Books", "enchanted_book");
+ private Category CATEGORY_POTIONS = new Category("potion", "Potions", "potion");
+ private Category CATEGORY_TRAVEL_SCROLLS = new Category("travelscroll", "Travel Scrolls", "map");
+
+ private Category CATEGORY_REFORGE_STONES = new Category("reforgestone", "Reforge Stones", "anvil");
+ private Category CATEGORY_RUNES = new Category("rune", "Runes", "end_portal_frame");
+ private Category CATEGORY_FURNITURE = new Category("furniture", "Furniture", "armor_stand");
+
+ private Category CATEGORY_COMBAT = new Category("weapon", "Combat", "golden_sword", CATEGORY_SWORD,
+ CATEGORY_BOWS, CATEGORY_ARMOR, CATEGORY_ACCESSORIES);
+ private Category CATEGORY_TOOL = new Category("", "Tools", "iron_pickaxe", CATEGORY_FISHING_ROD, CATEGORY_PICKAXE,
+ CATEGORY_AXE, CATEGORY_SHOVEL);
+ private Category CATEGORY_PET = new Category("pet", "Pets", "bone", CATEGORY_PET_ITEM);
+ private Category CATEGORY_CONSUMABLES = new Category("consumables", "Consumables", "apple", CATEGORY_EBOOKS, CATEGORY_POTIONS,
+ CATEGORY_TRAVEL_SCROLLS);
+ private Category CATEGORY_BLOCKS = new Category("blocks", "Blocks", "cobblestone");
+ private Category CATEGORY_MISC = new Category("misc", "Misc", "stick", CATEGORY_REFORGE_STONES, CATEGORY_RUNES,
+ CATEGORY_FURNITURE);
+
+ private Category[] mainCategories = new Category[]{CATEGORY_COMBAT, CATEGORY_TOOL, CATEGORY_PET,
+ CATEGORY_CONSUMABLES, CATEGORY_BLOCKS, CATEGORY_MISC};
+
+ private static final int SORT_MODE_HIGH = 0;
+ private static final int SORT_MODE_LOW = 1;
+ private static final int SORT_MODE_SOON = 2;
+
+ private static final String[] rarities = { "COMMON", "UNCOMMON", "RARE", "EPIC",
+ "LEGENDARY", "MYTHIC", "SPECIAL", "VERY SPECIAL" };
+
+ private static final int BIN_FILTER_ALL = 0;
+ private static final int BIN_FILTER_BIN = 1;
+ private static final int BIN_FILTER_AUC = 2;
+
+ private int sortMode = SORT_MODE_HIGH;
+ private int rarityFilter = -1;
+ private boolean filterMyAuctions = false;
+ private int binFilter = BIN_FILTER_ALL;
+
+ private static ItemStack CONTROL_SORT = Utils.createItemStack(Item.getItemFromBlock(Blocks.hopper),
+ EnumChatFormatting.GREEN+"Sort");
+ private static ItemStack CONTROL_TIER = Utils.createItemStack(Items.ender_eye,
+ EnumChatFormatting.GREEN+"Item Tier");
+ private static ItemStack CONTROL_MYAUC = Utils.createItemStack(Items.gold_ingot,
+ EnumChatFormatting.GREEN+"My Auctions");
+ private static ItemStack CONTROL_BIN = Utils.createItemStack(Item.getItemFromBlock(Blocks.golden_rail),
+ EnumChatFormatting.GREEN+"BIN Filter");
+ private ItemStack[] controls = {null,CONTROL_SORT,CONTROL_TIER,null,CONTROL_MYAUC,null,CONTROL_BIN,null,null};
+
+ private NEUManager manager;
+
+ public CustomAH(NEUManager manager) {
+ this.manager = manager;
+ }
+
+ public void clearSearch() {
+ if(System.currentTimeMillis() - lastOpen < 1000) Mouse.setGrabbed(false);
+
+ sortMode = SORT_MODE_HIGH;
+ rarityFilter = -1;
+ filterMyAuctions = false;
+ binFilter = BIN_FILTER_ALL;
+
+ searchField.setText("");
+ priceField.setText("");
+ }
+
+ public class Category {
+ public String categoryMatch;
+ public Category[] subcategories;
+ public String displayName;
+ public ItemStack displayItem;
+
+ public Category(String categoryMatch, String displayName, String displayItem, Category... subcategories) {
+ this.categoryMatch = categoryMatch;
+ this.subcategories = subcategories;
+ this.displayName = displayName;
+ this.displayItem = new ItemStack(Item.getByNameOrId(displayItem));
+ }
+
+ public String[] getTotalCategories() {
+ String[] categories = new String[1+subcategories.length];
+ categories[0] = categoryMatch;
+
+ for(int i=0; i<subcategories.length; i++) {
+ categories[i+1] = subcategories[i].categoryMatch;
+ }
+ return categories;
+ }
+ }
+
+ private void init() {
+ FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
+ this.searchField = new GuiTextField(0, fr, this.guiLeft + 82, this.guiTop + 6,
+ 89, fr.FONT_HEIGHT);
+ this.priceField = new GuiTextField(1, fr, this.guiLeft + 82, this.guiTop + 6,
+ 89, fr.FONT_HEIGHT);
+
+ this.searchField.setMaxStringLength(15);
+ this.searchField.setEnableBackgroundDrawing(false);
+ this.searchField.setTextColor(16777215);
+ this.searchField.setVisible(true);
+ this.searchField.setCanLoseFocus(false);
+ this.searchField.setFocused(true);
+ this.searchField.setText("");
+
+ this.priceField.setMaxStringLength(10);
+ this.priceField.setEnableBackgroundDrawing(false);
+ this.priceField.setTextColor(16777215);
+ this.priceField.setVisible(true);
+ this.priceField.setCanLoseFocus(false);
+ this.priceField.setFocused(false);
+ this.priceField.setText("");
+ }
+
+ public boolean isRenderOverAuctionView() {
+ return renderOverAuctionView || (System.currentTimeMillis() - lastRenderDisable) < 500;
+ }
+
+ public void setRenderOverAuctionView(boolean renderOverAuctionView) {
+ if(this.renderOverAuctionView && !renderOverAuctionView) lastRenderDisable = System.currentTimeMillis();
+ this.renderOverAuctionView = renderOverAuctionView;
+ }
+
+ private int getXSize() {
+ return 195;
+ }
+
+ private int getYSize() {
+ return 136 + ySplitSize*splits;
+ }
+
+ private TexLoc tl = new TexLoc(0, 0, Keyboard.KEY_M);
+
+ public List<String> getTooltipForAucId(String aucId) {
+ AuctionManager.Auction auc = manager.auctionManager.getAuctionItems().get(aucId);
+
+ List<String> tooltip = new ArrayList<>();
+
+ for(String line : auc.getStack().getTooltip(Minecraft.getMinecraft().thePlayer, false)) {
+ tooltip.add(EnumChatFormatting.GRAY+line);
+ }
+
+ long timeUntilEnd = auc.end - System.currentTimeMillis();
+
+ long seconds = timeUntilEnd / 1000 % 60;
+ long minutes = (timeUntilEnd / 1000 / 60) % 60;
+ long hours = (timeUntilEnd / 1000 / 60 / 60) % 24;
+ long days = (timeUntilEnd / 1000 / 60 / 60 / 24);
+
+ String endsIn = EnumChatFormatting.YELLOW+"";
+ if(timeUntilEnd < 0) {
+ endsIn += "Ended!";
+ } else if(minutes == 0 && hours == 0 && days == 0) {
+ endsIn += seconds + "s";
+ } else if(hours==0 && days==0) {
+ endsIn += minutes + "m" + seconds + "s";
+ } else if(days==0) {
+ if(hours <= 6) {
+ endsIn += hours + "h" + minutes + "m" + seconds + "s";
+ } else {
+ endsIn += hours + "h";
+ }
+ } else {
+ endsIn += days + "d" + hours + "h";
+ }
+
+ NumberFormat format = NumberFormat.getInstance(Locale.US);
+
+ tooltip.add(EnumChatFormatting.DARK_GRAY+""+EnumChatFormatting.STRIKETHROUGH+"-----------------");
+ tooltip.add(EnumChatFormatting.GRAY+"Seller: [CLICK TO SEE]");
+
+ if(auc.bin) {
+ tooltip.add(EnumChatFormatting.GRAY+"Buy it now: "+
+ EnumChatFormatting.GOLD+format.format(auc.starting_bid));
+ } else {
+ if(auc.bid_count > 0) {
+ tooltip.add(EnumChatFormatting.GRAY+"Bids: "+EnumChatFormatting.GREEN+auc.bid_count+" bids");
+ tooltip.add("");
+ tooltip.add(EnumChatFormatting.GRAY+"Top bid: "+
+ EnumChatFormatting.GOLD+format.format(auc.highest_bid_amount));
+ tooltip.add(EnumChatFormatting.GRAY+"Bidder: [CLICK TO SEE]");
+ } else {
+ tooltip.add(EnumChatFormatting.GRAY+"Starting bid: "+
+ EnumChatFormatting.GOLD+format.format(auc.starting_bid));
+ }
+ }
+
+ tooltip.add("");
+ tooltip.add(EnumChatFormatting.GRAY+"Ends in: "+endsIn);
+ tooltip.add("");
+ tooltip.add(EnumChatFormatting.YELLOW+"Click to inspect!");
+
+ return tooltip;
+ }
+
+ public boolean isEditingPrice() {
+ return Minecraft.getMinecraft().currentScreen instanceof GuiEditSign;
+ }
+
+ private boolean isGuiFiller(ItemStack stack) {
+ return stack == null || !stack.hasTagCompound() || !stack.getTagCompound().hasKey("AttributeModifiers");
+ }
+
+ private void drawCategorySide(int i) {
+ boolean clicked = i == clickedSubCategory;
+
+ int x = guiLeft-28;
+ int y = guiTop+17+28*i;
+ float uMin = 28/256f;
+ float uMax = 56/256f;
+ float vMin = 0+(clicked?32/256f:0);
+ float vMax = 32/256f+(clicked?32/256f:0);
+ float catWidth = 32;
+ float catHeight = 28;
+
+ GlStateManager.enableTexture2D();
+ GlStateManager.enableBlend();
+ GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
+
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ Tessellator tessellator = Tessellator.getInstance();
+ WorldRenderer worldrenderer = tessellator.getWorldRenderer();
+ worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
+ worldrenderer
+ .pos(x, y+catHeight, 0.0D)
+ .tex(uMax, vMin).endVertex();
+ worldrenderer
+ .pos(x+catWidth, y+catHeight, 0.0D)
+ .tex(uMax, vMax).endVertex();
+ worldrenderer
+ .pos(x+catWidth, y, 0.0D)
+ .tex(uMin, vMax).endVertex();
+ worldrenderer
+ .pos(x, y, 0.0D)
+ .tex(uMin, vMin).endVertex();
+ tessellator.draw();
+
+ GlStateManager.disableBlend();
+ }
+
+ public void drawScreen(int mouseX, int mouseY) {
+ if(System.currentTimeMillis() - lastOpen < 1000) Mouse.setGrabbed(false);
+
+ ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
+ int width = scaledResolution.getScaledWidth();
+ int height = scaledResolution.getScaledHeight();
+
+ //Dark background
+ drawGradientRect(0, 0, width, height, -1072689136, -804253680);
+
+ if(searchField == null || priceField == null) init();
+
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+
+ tl.handleKeyboardInput();
+
+ guiLeft = (width - getXSize())/2;
+ guiTop = (height - getYSize())/2;
+ this.searchField.xPosition = guiLeft + 82;
+ this.searchField.yPosition = guiTop + 6;
+
+ this.searchField.setFocused(true);
+ this.priceField.setFocused(false);
+
+ if(!isEditingPrice()) priceField.setText("IAUSHDIUAH");
+
+ List<String> tooltipToRender = null;
+ if(Minecraft.getMinecraft().currentScreen instanceof GuiChest) {
+ GuiChest auctionView = (GuiChest) Minecraft.getMinecraft().currentScreen;
+
+ float slideAmount = 1-Math.max(0, Math.min(1, (System.currentTimeMillis() - lastGuiScreenSwitch)/200f));
+ int auctionViewLeft = guiLeft+getXSize()+4 - (int)(slideAmount*(78+4));
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(auction_view);
+ this.drawTexturedModalRect(auctionViewLeft, guiTop, 0, 0, 78, 172);
+
+ if(auctionViewLeft+31 > guiLeft+getXSize()) {
+ try {
+ ItemStack topStack = auctionView.inventorySlots.getSlot(13).getStack();
+ ItemStack leftStack = auctionView.inventorySlots.getSlot(29).getStack();
+ ItemStack middleStack = auctionView.inventorySlots.getSlot(31).getStack();
+ ItemStack rightStack = auctionView.inventorySlots.getSlot(33).getStack();
+
+ boolean isBin = isGuiFiller(leftStack) || isGuiFiller(leftStack);
+
+ if(isBin) {
+ leftStack = middleStack;
+ middleStack = null;
+ }
+ Utils.drawItemStack(leftStack, auctionViewLeft+31, guiTop+100);
+
+ if(!isGuiFiller(leftStack)) {
+ NBTTagCompound tag = leftStack.getTagCompound();
+ NBTTagCompound display = tag.getCompoundTag("display");
+ if (display.hasKey("Lore", 9)) {
+ NBTTagList list = display.getTagList("Lore", 8);
+ String line2 = list.getStringTagAt(1);
+ line2 = Utils.cleanColour(line2);
+ StringBuilder priceNumbers = new StringBuilder();
+ for(int i=0; i<line2.length(); i++) {
+ char c = line2.charAt(i);
+ if((int)c >= 48 && (int)c <= 57) {
+ priceNumbers.append(c);
+ }
+ }
+ if(priceNumbers.length() > 0) {
+ startingBid = Integer.parseInt(priceNumbers.toString());
+ }
+ }
+ }
+
+ Utils.drawItemStack(topStack, auctionViewLeft+31, guiTop+35);
+
+ if(!isGuiFiller(middleStack)) {
+ Minecraft.getMinecraft().getTextureManager().bindTexture(auction_view_buttons);
+ boolean hover = mouseX > auctionViewLeft+31 && mouseX <auctionViewLeft+31+16 &&
+ mouseY > guiTop+126 && mouseY < guiTop+126+16;
+ this.drawTexturedModalRect(auctionViewLeft+31, guiTop+126, hover?16:0, 0, 16, 16);
+ } else {
+ middleStack = null;
+ }
+
+ if(mouseX > auctionViewLeft+31 && mouseX <auctionViewLeft+31+16) {
+ if(mouseY > guiTop+35 && mouseY < guiTop+35+16) {
+ if(topStack != null) tooltipToRender = topStack.getTooltip(Minecraft.getMinecraft().thePlayer, false);
+ } else if(mouseY > guiTop+100 && mouseY < guiTop+100+16) {
+ if(leftStack != null) tooltipToRender = leftStack.getTooltip(Minecraft.getMinecraft().thePlayer, false);
+ } else if(mouseY > guiTop+61 && mouseY < guiTop+61+16) {
+ if(rightStack != null) tooltipToRender = rightStack.getTooltip(Minecraft.getMinecraft().thePlayer, false);
+ } else if(mouseY > guiTop+126 && mouseY < guiTop+126+16) {
+ if(middleStack != null) tooltipToRender = middleStack.getTooltip(Minecraft.getMinecraft().thePlayer, false);
+ }
+ }
+ } catch(NullPointerException e) { //i cant be bothered
+ }
+ }
+ } else if(isEditingPrice()) {
+ float slideAmount = 1-Math.max(0, Math.min(1, (System.currentTimeMillis() - lastGuiScreenSwitch)/200f));
+ int auctionViewLeft = guiLeft+getXSize()+4 - (int)(slideAmount*(96+4));
+
+ if(priceField.getText().equals("IAUSHDIUAH")) priceField.setText(""+startingBid);
+
+ searchField.setFocused(false);
+ priceField.setFocused(true);
+ priceField.xPosition = auctionViewLeft+18;
+ priceField.yPosition = guiTop+18;
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(auction_price);
+ this.drawTexturedModalRect(auctionViewLeft, guiTop, 0, 0, 96, 99);
+ priceField.drawTextBox();
+
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ Minecraft.getMinecraft().getTextureManager().bindTexture(auction_view_buttons);
+ this.drawTexturedModalRect(auctionViewLeft+16, guiTop+32, 0, 16, 30, 16);
+ this.drawTexturedModalRect(auctionViewLeft+16+34, guiTop+32, 0, 16, 30, 16);
+ this.drawTexturedModalRect(auctionViewLeft+16, guiTop+50, 0, 16, 30, 16);
+ this.drawTexturedModalRect(auctionViewLeft+16+34, guiTop+50, 0, 16, 30, 16);
+ this.drawTexturedModalRect(auctionViewLeft+16, guiTop+68, 0, 32, 64, 16);
+
+ FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
+ Utils.drawStringCentered("x2", fr, auctionViewLeft+16+15, guiTop+32+8, false,
+ Color.BLACK.getRGB());
+ Utils.drawStringCentered("+50%", fr, auctionViewLeft+16+34+15, guiTop+32+8, false,
+ Color.BLACK.getRGB());
+ Utils.drawStringCentered("+25%", fr, auctionViewLeft+16+15, guiTop+50+8, false,
+ Color.BLACK.getRGB());
+ Utils.drawStringCentered("+10%", fr, auctionViewLeft+16+34+15, guiTop+50+8, false,
+ Color.BLACK.getRGB());
+ Utils.drawStringCentered("Set Amount", fr, auctionViewLeft+16+32, guiTop+68+8, false,
+ Color.BLACK.getRGB());
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+
+ GuiEditSign editSign = (GuiEditSign) Minecraft.getMinecraft().currentScreen;
+ TileEntitySign tes = (TileEntitySign)Utils.getField(GuiEditSign.class, editSign,
+ "tileSign", "field_146848_f");
+ tes.lineBeingEdited = 0;
+ tes.signText[0] = new ChatComponentText(priceField.getText());
+ }
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(creativeInventoryTabs);
+ if(clickedMainCategory == -1) {
+ this.drawTexturedModalRect(guiLeft, guiTop-28, 0, 0, 168, 32);
+ } else {
+ int selStart = clickedMainCategory*28;
+ this.drawTexturedModalRect(guiLeft, guiTop-28, 0, 0, selStart, 32);
+ this.drawTexturedModalRect(guiLeft+selStart+28, guiTop-28, selStart+28, 0,
+ 168-selStart-28, 32);
+ if(clickedMainCategory >= 0 && clickedMainCategory < mainCategories.length) {
+ Category mainCategory = mainCategories[clickedMainCategory];
+
+ for(int i=0; i<mainCategory.subcategories.length; i++) {
+ if(i != clickedSubCategory) drawCategorySide(i);
+ }
+ }
+ }
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(creativeTabSearch);
+ this.drawTexturedModalRect(guiLeft, guiTop, 0, 0, getXSize(), ySplit);
+ int y = guiTop+ySplit;
+ for(int i=0; i<splits; i++) {
+ this.drawTexturedModalRect(guiLeft, y, 0, ySplit, getXSize(), ySplit+ySplitSize);
+ y += ySplitSize;
+ }
+ this.drawTexturedModalRect(guiLeft, y, 0, ySplit, getXSize(), 136-ySplit);
+
+ //Categories
+ Minecraft.getMinecraft().getTextureManager().bindTexture(creativeInventoryTabs);
+ if(clickedMainCategory != -1) {
+ int selStart = clickedMainCategory*28;
+
+ this.drawTexturedModalRect(guiLeft+selStart, guiTop-28, 28, 32, 28, 32);
+
+ if(clickedMainCategory >= 0 && clickedMainCategory < mainCategories.length) {
+ Category mainCategory = mainCategories[clickedMainCategory];
+
+ if(clickedSubCategory >= 0 && clickedSubCategory < mainCategory.subcategories.length) {
+ drawCategorySide(clickedSubCategory);
+ }
+ }
+ }
+
+ //Category icons
+ for(int i=0; i<mainCategories.length; i++) {
+ Category category = mainCategories[i];
+ Utils.drawItemStack(category.displayItem, guiLeft+28*i+6, guiTop-28+9);
+ }
+ if(clickedMainCategory >= 0 && clickedMainCategory < mainCategories.length) {
+ Category mainCategory = mainCategories[clickedMainCategory];
+
+ for(int i=0; i<mainCategory.subcategories.length; i++) {
+ Utils.drawItemStack(mainCategory.subcategories[i].displayItem, guiLeft-19, guiTop+23+28*i);
+ }
+ }
+
+ for(int i=0; i<controls.length; i++) {
+ Utils.drawItemStack(controls[i], guiLeft+9+18*i, guiTop+112+18*splits);
+ if(mouseX > guiLeft+9+18*i && mouseX < guiLeft+9+18*i+16) {
+ if(mouseY > guiTop+112+18*splits && mouseY < guiTop+112+18*splits+16) {
+ tooltipToRender = getTooltipForControl(i);
+ }
+ }
+ }
+
+ int totalItems = auctionIds.size();
+ int itemsScroll = (int)Math.floor((totalItems*scrollAmount)/9f)*9;
+
+ int maxItemScroll = Math.max(0, totalItems - (5+splits)*9);
+ itemsScroll = Math.min(itemsScroll, maxItemScroll);
+
+ out:
+ for(int i=0; i<5+splits; i++) {
+ int itemY = guiTop + i*18 + 18;
+ for(int j=0; j<9; j++) {
+ int itemX = guiLeft + j*18 + 9;
+ int id = itemsScroll + i*9 + j;
+ if(auctionIds.size() <= id) break out;
+
+ try {
+ String aucid = auctionIds.get(id);
+
+ GL11.glTranslatef(0,0,100);
+ ItemStack stack = manager.auctionManager.getAuctionItems().get(aucid).getStack();
+ Utils.drawItemStack(stack, itemX, itemY);
+ GL11.glTranslatef(0,0,-100);
+
+ if(mouseX > itemX && mouseX < itemX+16) {
+ if(mouseY > itemY && mouseY < itemY+16) {
+ tooltipToRender = getTooltipForAucId(aucid);
+ }
+ }
+ } catch(Exception e) {
+ break out;
+ }
+ }
+ }
+
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ searchField.drawTextBox();
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+
+ if(auctionIds.size() == 0 && searchField.getText().length() == 0) {
+ drawRect(guiLeft+8, guiTop+17, guiLeft+170, guiTop+107+18*splits,
+ new Color(100, 100, 100, 100).getRGB());
+
+ FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
+ int strWidth = fr.getStringWidth("Loading items...");
+ fr.drawString("Loading items...", guiLeft+(8+170-strWidth)/2, guiTop+(17+107+18*splits)/2, Color.BLACK.getRGB());
+ }
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(creativeInventoryTabs);
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.drawTexturedModalRect(guiLeft+175, guiTop+18+(int)((95+ySplitSize*2)*scrollAmount),
+ 256-(scrollClicked?12:24), 0, 12, 15);
+
+ if(tooltipToRender != null) {
+ List<String> tooltipGray = new ArrayList<>();
+ for(String line : tooltipToRender) {
+ tooltipGray.add(EnumChatFormatting.GRAY + line);
+ }
+ Utils.drawHoveringText(tooltipGray, mouseX, mouseY, width,
+ height, -1, Minecraft.getMinecraft().fontRendererObj);
+ }
+ }
+
+ public List<String> getTooltipForControl(int index) {
+ List<String> lore = new ArrayList<>();
+ String arrow = "\u25b6";
+ String selPrefix = EnumChatFormatting.DARK_AQUA + " " + arrow + " ";
+ String unselPrefix = EnumChatFormatting.GRAY.toString();
+ switch(index) {
+ case 0: break;
+ case 1:
+ lore.add("");
+ String[] linesSort = {"Highest Bid","Lowest Bid","Ending soon"};
+ for(int i=0; i<linesSort.length; i++) {
+ String line = linesSort[i];
+ if(i == sortMode) {
+ line = selPrefix + line;
+ } else {
+ line = unselPrefix + line;
+ }
+ lore.add(line);
+ }
+ lore.add("");
+ lore.add(EnumChatFormatting.YELLOW + "Click to switch sort!");
+ return lore;
+ case 2:
+ lore.add("");
+ lore.add(rarityFilter == -1 ? selPrefix : unselPrefix + "No Filter");
+
+ for(int i=0; i<rarities.length; i++) {
+ lore.add(rarityFilter == i ? selPrefix : unselPrefix + "Filter " + rarities[i]);
+ }
+ lore.add("");
+ lore.add(EnumChatFormatting.AQUA + "Right-Click to go backwards!");
+ lore.add(EnumChatFormatting.YELLOW + "Click to switch filter!");
+ return lore;
+ case 3: break;
+ case 4:
+ lore.add("");
+ String off = EnumChatFormatting.RED + "OFF";
+ String on = EnumChatFormatting.GREEN + "ON";
+ lore.add(unselPrefix+"Filter Own Auctions: " + (filterMyAuctions ? on : off));
+ lore.add("");
+ lore.add(EnumChatFormatting.YELLOW + "Click to toggle!");
+ return lore;
+ case 5: break;
+ case 6:
+ lore.add("");
+ String[] linesBin = {"Show All","BIN Only","Auctions Only"};
+ for(int i=0; i<linesBin.length; i++) {
+ String line = linesBin[i];
+ if(i == binFilter) {
+ line = selPrefix + line;
+ } else {
+ line = unselPrefix + line;
+ }
+ lore.add(line);
+ }
+ lore.add("");
+ lore.add(EnumChatFormatting.AQUA + "Right-Click to go backwards!");
+ lore.add(EnumChatFormatting.YELLOW + "Click to switch filter!");
+ return lore;
+ case 7: break;
+ case 8: break;
+ }
+ return new ArrayList<>();
+ }
+
+ public void handleMouseInput() {
+ ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
+ int width = scaledResolution.getScaledWidth();
+ int height = scaledResolution.getScaledHeight();
+
+ int mouseX = Mouse.getEventX() * width / Minecraft.getMinecraft().displayWidth;
+ int mouseY = height - Mouse.getEventY() * height / Minecraft.getMinecraft().displayHeight - 1;
+ int mouseButton = Mouse.getEventButton();
+
+ if (Mouse.getEventButtonState()) {
+ this.eventButton = mouseButton;
+ this.lastMouseEvent = Minecraft.getSystemTime();
+ mouseClicked(mouseX, mouseY, this.eventButton);
+ } else if (mouseButton != -1) {
+ this.eventButton = -1;
+ mouseReleased(mouseX, mouseY, mouseButton);
+ } else if (this.eventButton != -1 && this.lastMouseEvent > 0L) {
+ long l = Minecraft.getSystemTime() - this.lastMouseEvent;
+ mouseClickMove(mouseX, mouseY, this.eventButton, l);
+ }
+
+ int dWheel = Mouse.getEventDWheel();
+ dWheel = Math.max(-1, Math.min(1, dWheel));
+
+ scrollAmount = scrollAmount - dWheel/(float)(auctionIds.size()/9-(5+splits));
+ scrollAmount = Math.max(0, Math.min(1, scrollAmount));
+ }
+
+ private String niceAucId(String aucId) {
+ if(aucId.length()!=32) return aucId;
+
+ StringBuilder niceAucId = new StringBuilder();
+ niceAucId.append(aucId, 0, 8);
+ niceAucId.append("-");
+ niceAucId.append(aucId, 8, 12);
+ niceAucId.append("-");
+ niceAucId.append(aucId, 12, 16);
+ niceAucId.append("-");
+ niceAucId.append(aucId, 16, 20);
+ niceAucId.append("-");
+ niceAucId.append(aucId, 20, 32);
+ return niceAucId.toString();
+ }
+
+ public Category getCurrentCategory() {
+ if(clickedMainCategory < 0 || clickedMainCategory >= mainCategories.length) {
+ return null;
+ }
+ Category mainCategory = mainCategories[clickedMainCategory];
+ if(clickedSubCategory < 0 || clickedSubCategory >= mainCategory.subcategories.length) {
+ return mainCategory;
+ }
+ return mainCategory.subcategories[clickedSubCategory];
+ }
+
+ public void updateSearch() {
+ if(searchField == null || priceField == null) init();
+
+ scrollAmount = 0;
+ auctionIds.clear();
+ try {
+ if(searchField.getText().length() == 0) {
+ auctionIds.clear();
+ auctionIds.addAll(manager.auctionManager.getAuctionItems().keySet());
+ } else {
+ auctionIds.clear();
+ auctionIds.addAll(manager.search(searchField.getText(), manager.auctionManager.extrasToAucIdMap));
+
+ if(!searchField.getText().trim().contains(" ")) {
+ StringBuilder sb = new StringBuilder();
+ for(char c : searchField.getText().toCharArray()) {
+ sb.append(c).append(" ");
+ }
+ for(String aucid : manager.search(sb.toString(), manager.auctionManager.extrasToAucIdMap)) {
+ if(!auctionIds.contains(aucid)) {
+ auctionIds.add(aucid);
+ }
+ }
+ }
+ }
+ Category currentCategory = getCurrentCategory();
+ Set<String> toRemove = new HashSet<>();
+ String[] categories = new String[0];
+ if(currentCategory != null) categories = currentCategory.getTotalCategories();
+ for(String aucid : auctionIds) {
+ AuctionManager.Auction auc = manager.auctionManager.getAuctionItems().get(aucid);
+ if(auc != null) {
+ boolean match = categories.length == 0;
+ for(String category : categories) {
+ if (category.equalsIgnoreCase(auc.category)) {
+ match = true;
+ break;
+ }
+ }
+ if(rarityFilter > 0 && rarityFilter < rarities.length) {
+ if(!rarities[rarityFilter].equals(auc.rarity)) {
+ match = false;
+ }
+ }
+ if(binFilter == BIN_FILTER_BIN) {
+ match &= auc.bin;
+ } else if(binFilter == BIN_FILTER_AUC) {
+ match &= !auc.bin;
+ }
+
+ if(!match) {
+ toRemove.add(aucid);
+ }
+ } else {
+ toRemove.add(aucid);
+ }
+ }
+ auctionIds.removeAll(toRemove);
+ sortItems();
+ } catch(ConcurrentModificationException e) {
+ updateSearch();
+ }
+ }
+
+ public void sortItems() throws ConcurrentModificationException {
+ auctionIds.sort((o1, o2) -> {
+ AuctionManager.Auction auc1 = manager.auctionManager.getAuctionItems().get(o1);
+ AuctionManager.Auction auc2 = manager.auctionManager.getAuctionItems().get(o2);
+
+ if(auc1 == null) return 1;
+ if(auc2 == null) return -1;
+
+ if(sortMode == SORT_MODE_HIGH) {
+ int price1 = Math.max(auc1.highest_bid_amount, auc1.starting_bid);
+ int price2 = Math.max(auc2.highest_bid_amount, auc2.starting_bid);
+ return price2 - price1;
+ } else if(sortMode == SORT_MODE_LOW) {
+ int price1 = Math.max(auc1.highest_bid_amount, auc1.starting_bid);
+ int price2 = Math.max(auc2.highest_bid_amount, auc2.starting_bid);
+ return price1 - price2;
+ } else {
+ return (int)(auc1.end - auc2.end);
+ }
+ });
+ }
+
+ public boolean keyboardInput() {
+ Keyboard.enableRepeatEvents(true);
+ if(isEditingPrice() && Keyboard.getEventKey() == Keyboard.KEY_RETURN) {
+ Minecraft.getMinecraft().displayGuiScreen(null);
+ } else if(Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) {
+ return false;
+ }
+ if(Keyboard.getEventKeyState()) keyTyped(Keyboard.getEventCharacter(), Keyboard.getEventKey());
+ return true;
+ }
+
+ public void keyTyped(char typedChar, int keyCode) {
+ if(searchField == null || priceField == null) init();
+
+ if(!isEditingPrice()) {
+ if(this.searchField.textboxKeyTyped(typedChar, keyCode)) {
+ this.updateSearch();
+ }
+ } else {
+ priceField.textboxKeyTyped(typedChar, keyCode);
+ }
+ }
+
+ private void increasePriceByFactor(float factor) {
+ String price = priceField.getText().trim();
+ StringBuilder priceNumbers = new StringBuilder();
+ for(int i=0; i<price.length(); i++) {
+ char c = price.charAt(i);
+ if((int)c >= 48 && (int)c <= 57) {
+ priceNumbers.append(c);
+ } else {
+ break;
+ }
+ }
+ int priceI = 0;
+ if(priceNumbers.length() > 0) {
+ priceI = Integer.parseInt(priceNum