aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyeyoung <cyong06@naver.com>2021-07-21 15:29:43 +0900
committersyeyoung <cyong06@naver.com>2021-07-21 15:29:43 +0900
commitd392b203a93a8897a184f75634338b7c866510f3 (patch)
treea27505fbdc2bc754c674a026915c27065984c00e
parent4850d1a1f795f625286b9a2058143f688265dc3d (diff)
downloadSkyblock-Dungeons-Guide-d392b203a93a8897a184f75634338b7c866510f3.tar.gz
Skyblock-Dungeons-Guide-d392b203a93a8897a184f75634338b7c866510f3.tar.bz2
Skyblock-Dungeons-Guide-d392b203a93a8897a184f75634338b7c866510f3.zip
custom party finder
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java2
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/FeatureCustomPartyFinder.java61
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/GuiCustomPartyFinder.java71
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyFinder.java286
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyFinderSettings.java223
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyListElement.java197
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/gui/MGui.java10
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java4
-rwxr-xr-xsrc/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java27
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java2
-rwxr-xr-xsrc/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPassiveLabelAndElement.java7
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java2
-rwxr-xr-xsrc/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTextField.java2
13 files changed, 874 insertions, 20 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java b/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java
index 927684e4..860cd86a 100644
--- a/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java
@@ -32,6 +32,7 @@ import kr.syeyoung.dungeonsguide.features.impl.etc.*;
import kr.syeyoung.dungeonsguide.features.impl.etc.ability.FeatureAbilityCooldown;
import kr.syeyoung.dungeonsguide.features.impl.party.APIKey;
import kr.syeyoung.dungeonsguide.features.impl.party.FeatureGoodParties;
+import kr.syeyoung.dungeonsguide.features.impl.party.customgui.FeatureCustomPartyFinder;
import kr.syeyoung.dungeonsguide.features.impl.party.playerpreview.FeatureViewPlayerOnJoin;
import kr.syeyoung.dungeonsguide.features.impl.secret.FeatureActions;
import kr.syeyoung.dungeonsguide.features.impl.secret.FeatureFreezePathfind;
@@ -112,6 +113,7 @@ public class FeatureRegistry {
public static final APIKey PARTYKICKER_APIKEY = register(new APIKey());
public static final FeatureViewPlayerOnJoin PARTYKICKER_VIEWPLAYER = register(new FeatureViewPlayerOnJoin());
public static final FeatureGoodParties PARTYKICKER_GOODPARTIES = register(new FeatureGoodParties());
+ public static final FeatureCustomPartyFinder PARTYKICKER_CUSTOM = register(new FeatureCustomPartyFinder());
public static final FeatureWarningOnPortal BOSSFIGHT_WARNING_ON_PORTAL = register(new FeatureWarningOnPortal());
public static final SimpleFeature BOSSFIGHT_CHESTPRICE = register(new FeatureChestPrice());
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/FeatureCustomPartyFinder.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/FeatureCustomPartyFinder.java
new file mode 100644
index 00000000..34daadf8
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/FeatureCustomPartyFinder.java
@@ -0,0 +1,61 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package kr.syeyoung.dungeonsguide.features.impl.party.customgui;
+
+import kr.syeyoung.dungeonsguide.events.WindowUpdateEvent;
+import kr.syeyoung.dungeonsguide.features.SimpleFeature;
+import kr.syeyoung.dungeonsguide.features.listener.*;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.inventory.GuiChest;
+import net.minecraft.inventory.ContainerChest;
+import net.minecraft.inventory.IInventory;
+import net.minecraftforge.client.event.GuiOpenEvent;
+
+public class FeatureCustomPartyFinder extends SimpleFeature implements GuiOpenListener, GuiUpdateListener {
+ public FeatureCustomPartyFinder() {
+ super("Party Kicker","Custom Party Finder","Custom Party Finder", "party.customfinder", true);
+ }
+
+ GuiCustomPartyFinder guiCustomPartyFinder;
+ @Override
+ public void onGuiOpen(GuiOpenEvent event) {
+ if (event.gui == null) guiCustomPartyFinder = null;
+ if (!isEnabled()) return;
+ if (!(event.gui instanceof GuiChest)) return;
+ GuiChest chest = (GuiChest) event.gui;
+ if (!(chest.inventorySlots instanceof ContainerChest)) return;
+ ContainerChest containerChest = (ContainerChest) chest.inventorySlots;
+ IInventory lower = containerChest.getLowerChestInventory();
+ if (lower == null || !lower.getName().equals("Party Finder")) return;
+
+ if (guiCustomPartyFinder == null) {
+ guiCustomPartyFinder = new GuiCustomPartyFinder();
+ }
+ guiCustomPartyFinder.setGuiChest(chest);
+
+ event.gui = guiCustomPartyFinder;
+ }
+
+ @Override
+ public void onGuiUpdate(WindowUpdateEvent windowUpdateEvent) {
+ if (guiCustomPartyFinder != null) {
+ guiCustomPartyFinder.onChestUpdate(windowUpdateEvent);
+ }
+ }
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/GuiCustomPartyFinder.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/GuiCustomPartyFinder.java
new file mode 100644
index 00000000..bf297b93
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/GuiCustomPartyFinder.java
@@ -0,0 +1,71 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package kr.syeyoung.dungeonsguide.features.impl.party.customgui;
+
+import kr.syeyoung.dungeonsguide.events.WindowUpdateEvent;
+import kr.syeyoung.dungeonsguide.gui.MGui;
+import lombok.Getter;
+import lombok.Setter;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.inventory.GuiChest;
+
+import java.awt.*;
+
+public class GuiCustomPartyFinder extends MGui {
+ @Getter
+ private GuiChest guiChest;
+
+ public void setGuiChest(GuiChest guiChest) {
+ if (this.guiChest != null) this.guiChest.onGuiClosed();
+ this.guiChest = guiChest;
+ panelPartyFinder.onChestUpdate(null);
+ guiChest.setWorldAndResolution(Minecraft.getMinecraft(), Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight);
+ guiChest.initGui();
+ }
+
+ public void onChestUpdate(WindowUpdateEvent windowUpdateEvent) {
+ panelPartyFinder.onChestUpdate(windowUpdateEvent);
+ }
+
+ private PanelPartyFinder panelPartyFinder;
+ public GuiCustomPartyFinder() {
+ panelPartyFinder = new PanelPartyFinder(this);
+ getMainPanel().add(panelPartyFinder);
+ }
+
+ @Override
+ public void initGui() {
+ super.initGui();
+ panelPartyFinder.setBounds(new Rectangle(Minecraft.getMinecraft().displayWidth/5, Minecraft.getMinecraft().displayHeight/5,3*Minecraft.getMinecraft().displayWidth/5, 3*Minecraft.getMinecraft().displayHeight/5));
+ }
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+ super.drawDefaultBackground();
+ super.drawScreen(mouseX, mouseY, partialTicks);
+
+ }
+
+ @Override
+ public void onGuiClosed() {
+ guiChest.onGuiClosed();
+ guiChest = null;
+ }
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyFinder.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyFinder.java
new file mode 100644
index 00000000..8f43399c
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyFinder.java
@@ -0,0 +1,286 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package kr.syeyoung.dungeonsguide.features.impl.party.customgui;
+
+import kr.syeyoung.dungeonsguide.events.WindowUpdateEvent;
+import kr.syeyoung.dungeonsguide.gui.MPanel;
+import kr.syeyoung.dungeonsguide.gui.elements.MButton;
+import kr.syeyoung.dungeonsguide.gui.elements.MLabel;
+import kr.syeyoung.dungeonsguide.gui.elements.MList;
+import kr.syeyoung.dungeonsguide.gui.elements.MScrollablePanel;
+import kr.syeyoung.dungeonsguide.utils.RenderUtils;
+import lombok.Getter;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.inventory.GuiChest;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.inventory.ContainerChest;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+
+import java.awt.*;
+import java.util.HashMap;
+import java.util.Map;
+
+public class PanelPartyFinder extends MPanel {
+ @Getter
+ private GuiCustomPartyFinder guiCustomPartyFinder;
+
+ private PanelPartyFinderSettings panelPartyFinderSettings;
+
+ private MScrollablePanel scrollablePanel;
+ private MList list;
+
+ private MButton goBack;
+ private MButton previous;
+ private MButton next;
+ private int page = 1;
+
+ private Map<Integer, PanelPartyListElement> panelPartyListElementMap = new HashMap<>();
+
+ public PanelPartyFinder(GuiCustomPartyFinder guiCustomPartyFinder) {
+ this.guiCustomPartyFinder = guiCustomPartyFinder;
+
+ scrollablePanel = new MScrollablePanel(1);
+ panelPartyFinderSettings = new PanelPartyFinderSettings(this);
+
+ list = new MList() {
+ @Override
+ public void resize(int parentWidth, int parentHeight) {
+ setSize(new Dimension(parentWidth, 9999));
+ realignChildren();
+ }
+ };
+ list.setGap(1);
+
+ scrollablePanel.add(list);
+
+ add(scrollablePanel);
+ add(panelPartyFinderSettings);
+
+ previous = new MButton(); next = new MButton();
+ previous.setText("Prev"); next.setText("Next");
+ previous.setEnabled(false); next.setEnabled(false);
+ next.setOnActionPerformed(() -> {
+ GuiChest chest = getGuiCustomPartyFinder().getGuiChest();
+ Minecraft.getMinecraft().playerController.windowClick(chest.inventorySlots.windowId, 9*2+8, 0, 0, Minecraft.getMinecraft().thePlayer);
+ });
+ previous.setOnActionPerformed(() -> {
+ GuiChest chest = getGuiCustomPartyFinder().getGuiChest();
+ Minecraft.getMinecraft().playerController.windowClick(chest.inventorySlots.windowId, 9*2, 0, 0, Minecraft.getMinecraft().thePlayer);
+ });
+ goBack = new MButton();
+ goBack.setBackground(RenderUtils.blendAlpha(0xFF141414, 0.05f));
+ goBack.setText("<");
+ goBack.setOnActionPerformed(() -> {
+ GuiChest chest = getGuiCustomPartyFinder().getGuiChest();
+ Minecraft.getMinecraft().playerController.windowClick(chest.inventorySlots.windowId, 9*5+3, 0, 0, Minecraft.getMinecraft().thePlayer);
+ });
+ add(previous); add(next); add(goBack);
+ }
+
+ public String getHighlightNote() {
+ return panelPartyFinderSettings.getHighlightText();
+ }
+
+ @Override
+ public void setBounds(Rectangle bounds) {
+ super.setBounds(bounds);
+ FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
+ scrollablePanel.setBounds(new Rectangle(0, fr.FONT_HEIGHT*2+41, 2*bounds.width/3, bounds.height - fr.FONT_HEIGHT*2-41));
+ panelPartyFinderSettings.setBounds(new Rectangle(2*bounds.width/3+1, fr.FONT_HEIGHT*2+21, bounds.width/3 -1, (bounds.height-fr.FONT_HEIGHT*2-21)));
+
+ previous.setBounds(new Rectangle(0, fr.FONT_HEIGHT*2+21, 50, 20));
+ next.setBounds(new Rectangle(2*bounds.width/3-50, fr.FONT_HEIGHT*2+21, 50, 20));
+ goBack.setBounds(new Rectangle(0,0, fr.FONT_HEIGHT*2+20, fr.FONT_HEIGHT*2+20));
+ }
+
+ @Override
+ public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) {
+ FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
+ // background
+ Gui.drawRect(0,0,getBounds().width, getBounds().height, RenderUtils.blendAlpha(0xFF141414, 0.0f));
+ // top bar
+ Gui.drawRect(0,0,getBounds().width, fr.FONT_HEIGHT*2+21, RenderUtils.blendAlpha(0xFF141414, 0.05f));
+ // lines
+ Gui.drawRect(0,fr.FONT_HEIGHT*2+20,getBounds().width, fr.FONT_HEIGHT*2+21, -1);
+ Gui.drawRect(panelPartyFinderSettings.getBounds().x-1,fr.FONT_HEIGHT*2+20,panelPartyFinderSettings.getBounds().x, getBounds().height, -1);
+ // prev next bar
+ Gui.drawRect(0,fr.FONT_HEIGHT*2+21,scrollablePanel.getBounds().width, fr.FONT_HEIGHT*2+41, RenderUtils.blendAlpha(0xFF141414, 0.08f));
+
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(fr.FONT_HEIGHT*2+21, 0,0);
+ GlStateManager.scale(2,2,1);
+ fr.drawString("Party Finder", 5,5,-1);
+ GlStateManager.popMatrix();
+ fr.drawString("Page "+page, (scrollablePanel.getBounds().width-fr.getStringWidth("Page "+page))/2, (20-fr.FONT_HEIGHT)/2 + fr.FONT_HEIGHT*2+21, -1);
+ }
+
+ public synchronized void onChestUpdate(WindowUpdateEvent windowUpdateEvent) {
+ if (windowUpdateEvent == null) {
+ GuiChest guiChest = guiCustomPartyFinder.getGuiChest();
+ if (guiChest == null) {
+ panelPartyListElementMap.clear();
+ } else {
+ for (int x = 1; x<=7; x++) {
+ for (int y = 1; y <= 3; y++) {
+ int i = y * 9 + x;
+ Slot s = guiChest.inventorySlots.getSlot(i);
+ PanelPartyListElement prev = panelPartyListElementMap.remove(i);
+ if (s == null || !s.getHasStack()) { continue; }
+ if (!filter(s.getStack())) continue;
+
+ if (prev == null) prev = new PanelPartyListElement(this, i);
+ panelPartyListElementMap.put(i, prev);
+ }
+ }
+
+ {
+ Slot next = guiChest.inventorySlots.getSlot(9 * 2 + 8);
+ if (next.getStack() != null && next.getStack().getItem() == Items.arrow) {
+ this.next.setEnabled(true);
+ extractPage(next.getStack());
+ } else {
+ this.next.setEnabled(false);
+ }
+
+ Slot prev = guiChest.inventorySlots.getSlot(9 * 2 + 0);
+ if (prev.getStack() != null && prev.getStack().getItem() == Items.arrow) {
+ this.previous.setEnabled(true);
+ extractPage(prev.getStack());
+ } else {
+ this.previous.setEnabled(false);
+ }
+
+ Slot delist = guiChest.inventorySlots.getSlot(9 * 5 + 7);
+ panelPartyFinderSettings.setDelistable(delist.getStack() != null && delist.getStack().getItem() == Item.getItemFromBlock(Blocks.bookshelf));
+ }
+ }
+ } else {
+ if (windowUpdateEvent.getPacketSetSlot() != null) {
+ int i = windowUpdateEvent.getPacketSetSlot().func_149173_d();
+
+ ItemStack stack = windowUpdateEvent.getPacketSetSlot().func_149174_e();
+ if (i == 9*2+8) {
+ if (stack != null && stack.getItem() == Items.arrow) {
+ this.next.setEnabled(true);
+ extractPage(stack);
+ } else {
+ this.next.setEnabled(false);
+ }
+ } else if (i == 9*2) {
+ if (stack != null && stack.getItem() == Items.arrow) {
+ this.previous.setEnabled(true);
+ extractPage(stack);
+ } else {
+ this.previous.setEnabled(false);
+ }
+ } else if (i == 9*5+7) {
+ panelPartyFinderSettings.setDelistable(stack != null && stack.getItem() == Item.getItemFromBlock(Blocks.bookshelf));
+ }
+
+ if (i%9 == 0 || i%9 == 8 || i/9 == 0 || i/9 >= 4) {
+ return;
+ }
+
+ PanelPartyListElement prev = panelPartyListElementMap.remove(i);
+ if (filter(stack)) {
+ if (prev == null) prev = new PanelPartyListElement(this, i);
+ panelPartyListElementMap.put(i, prev);
+ }
+ } else if (windowUpdateEvent.getWindowItems() != null) {
+ for (int x = 1; x<=7; x++) {
+ for (int y = 1; y <= 3; y++) {
+ int i = y * 9 + x;
+ ItemStack item = windowUpdateEvent.getWindowItems().getItemStacks()[i];
+ PanelPartyListElement prev = panelPartyListElementMap.remove(i);
+ if (!filter(item)) continue;
+
+ if (prev == null) prev = new PanelPartyListElement(this, i);
+ panelPartyListElementMap.put(i, prev);
+ }
+ }
+
+ {
+ ItemStack next = windowUpdateEvent.getWindowItems().getItemStacks()[9 * 2 + 8];
+ if (next != null && next.getItem() == Items.arrow) {
+ this.next.setEnabled(true);
+ extractPage(next);
+ } else {
+ this.next.setEnabled(false);
+ }
+
+ ItemStack prev = windowUpdateEvent.getWindowItems().getItemStacks()[9 * 2];
+ if (prev != null && prev.getItem() == Items.arrow) {
+ this.previous.setEnabled(true);
+ extractPage(prev);
+ } else {
+ this.previous.setEnabled(false);
+ }
+
+ ItemStack delist = windowUpdateEvent.getWindowItems().getItemStacks()[9*5+7];
+ panelPartyFinderSettings.setDelistable(delist != null && delist.getItem() == Item.getItemFromBlock(Blocks.bookshelf));
+ }
+ }
+ }
+
+ addItems();
+ }
+
+ public boolean filter(ItemStack item) {
+ return !(item == null || item.getItem() == null || item.getItem() == Item.getItemFromBlock(Blocks.air)) && panelPartyFinderSettings.filter(item);
+ }
+
+ public void extractPage(ItemStack itemStack) {
+ NBTTagCompound stackTagCompound = itemStack.getTagCompound();
+ if (stackTagCompound.hasKey("display", 10)) {
+ NBTTagCompound nbttagcompound = stackTagCompound.getCompoundTag("display");
+
+ if (nbttagcompound.getTagId("Lore") == 9) {
+ NBTTagList nbttaglist1 = nbttagcompound.getTagList("Lore", 8);
+
+ for (int i = 0; i < nbttaglist1.tagCount(); i++) {
+ String str = nbttaglist1.getStringTagAt(i);
+ if (str.startsWith("§ePage ")) {
+ int pg = Integer.parseInt(str.substring(7));
+ if (itemStack.getDisplayName().equals("§aPrevious Page")) page = pg+1;
+ else page = pg-1;
+ }
+ }
+ }
+ }
+ }
+
+ public void addItems() {
+ for (MPanel childComponent : list.getChildComponents()) {
+ list.remove(childComponent);
+ }
+ for (Map.Entry<Integer, PanelPartyListElement> value : panelPartyListElementMap.entrySet()) {
+ list.add(value.getValue());
+ }
+ scrollablePanel.evalulateContentArea();
+ }
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyFinderSettings.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyFinderSettings.java
new file mode 100644
index 00000000..97c8eb40
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyFinderSettings.java
@@ -0,0 +1,223 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package kr.syeyoung.dungeonsguide.features.impl.party.customgui;
+
+import kr.syeyoung.dungeonsguide.gui.MPanel;
+import kr.syeyoung.dungeonsguide.gui.elements.MButton;
+import kr.syeyoung.dungeonsguide.gui.elements.MPassiveLabelAndElement;
+import kr.syeyoung.dungeonsguide.gui.elements.MTextField;
+import kr.syeyoung.dungeonsguide.gui.elements.MToggleButton;
+import lombok.Getter;
+import lombok.Setter;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.inventory.GuiChest;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.init.Items;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.util.EnumChatFormatting;
+
+import java.awt.*;
+import java.util.List;
+
+public class PanelPartyFinderSettings extends MPanel {
+ private PanelPartyFinder panelPartyFinder;
+
+ private MButton refresh = new MButton(), createNew = new MButton(), settings = new MButton();
+ private MPassiveLabelAndElement filterCantjoin, filterWhitelistNote, filterBlacklistNote, plaeHighlightNote; private MToggleButton filterCantjoinButton;
+ private MTextField filterWhitelist, filterBlacklist, highlightNote;
+
+ @Getter @Setter
+ boolean delistable = false;
+
+ public void setDelistable(boolean delistable) {
+ createNew.setText(delistable ? "De-list" : "Create New");
+ this.delistable = delistable;
+ }
+
+ public PanelPartyFinderSettings(PanelPartyFinder panelPartyFinder) {
+ this.panelPartyFinder = panelPartyFinder;
+
+ createNew.setText("Create New");
+ createNew.setOnActionPerformed(this::createNew);
+ createNew.setBackground(0xFF00838F);
+ createNew.setHover(0xFF00ACC1);
+ createNew.setClicked(0xFF0097A7);
+ add(createNew);
+ refresh.setText("Refresh");
+ refresh.setOnActionPerformed(this::refresh);
+ add(refresh);
+ settings.setText("Search Settings");
+ settings.setOnActionPerformed(this::settings);
+ add(settings);
+
+ {
+ filterCantjoinButton = new MToggleButton();
+ filterCantjoin = new MPassiveLabelAndElement("Filter Unjoinable", filterCantjoinButton);
+ filterCantjoin.setDivideRatio(0.7);
+ filterCantjoinButton.setOnToggle(() -> panelPartyFinder.onChestUpdate(null));
+ add(filterCantjoin);
+ }
+ {
+ filterWhitelist = new MTextField() {
+ @Override
+ public void edit(String str) {
+ panelPartyFinder.onChestUpdate(null);
+ }
+ };
+ filterBlacklist = new MTextField() {
+ @Override
+ public void edit(String str) {
+ panelPartyFinder.onChestUpdate(null);
+ }
+ };
+ highlightNote = new MTextField();
+
+ filterWhitelistNote = new MPassiveLabelAndElement("Whitelist Note", filterWhitelist);
+ filterBlacklistNote = new MPassiveLabelAndElement("Blacklist Note", filterBlacklist);
+ plaeHighlightNote = new MPassiveLabelAndElement("Highlight Note (Regex)", highlightNote);
+
+ filterWhitelistNote.setDivideRatio(0.5);
+ filterBlacklistNote.setDivideRatio(0.5);
+ plaeHighlightNote.setDivideRatio(0.5);
+ add(filterWhitelistNote);
+ add(filterBlacklistNote);
+ add(plaeHighlightNote);
+ }
+ }
+
+ private void createNew() {
+ GuiChest chest = panelPartyFinder.getGuiCustomPartyFinder().getGuiChest();
+ if (delistable)
+ Minecraft.getMinecraft().playerController.windowClick(chest.inventorySlots.windowId, 9*5+7, 0, 0, Minecraft.getMinecraft().thePlayer);
+ else
+ Minecraft.getMinecraft().playerController.windowClick(chest.inventorySlots.windowId, 9*5+0, 0, 0, Minecraft.getMinecraft().thePlayer);
+
+ }
+
+ public String getHighlightText() {
+ return highlightNote.getText();
+ }
+
+ @Override
+ public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) {
+ FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj;
+
+
+ GuiCustomPartyFinder guiCustomPartyFinder = panelPartyFinder.getGuiCustomPartyFinder();
+ if (guiCustomPartyFinder.getGuiChest() == null) return;
+ Slot s = guiCustomPartyFinder.getGuiChest().inventorySlots.getSlot(9*5+5);
+ ItemStack itemStack = s.getStack();
+ if (itemStack == null) return;
+
+ String dungeon="", floor="", text="";
+ {
+ NBTTagCompound stackTagCompound = itemStack.getTagCompound();
+ if (stackTagCompound.hasKey("display", 10)) {
+ NBTTagCompound nbttagcompound = stackTagCompound.getCompoundTag("display");
+
+ if (nbttagcompound.getTagId("Lore") == 9) {
+ NBTTagList nbttaglist1 = nbttagcompound.getTagList("Lore", 8);
+
+ for (int i = 0; i < nbttaglist1.tagCount(); i++) {
+ String str = nbttaglist1.getStringTagAt(i);
+ if (str.startsWith("§aDungeon: ")) {
+ dungeon = str.substring(11);
+ } else if (str.startsWith("§aFloor: ")) {
+ floor = str.substring(9);
+ } else if (str.startsWith("§aSearch text: ")) {
+ text = str.substring(15);
+ }
+ }
+ }
+ }
+ }
+ fontRenderer.drawString("§aSearching: "+dungeon+" §7- "+floor, 5,155,-1);
+ fontRenderer.drawString("§aSearch text: "+text, 5,155+fontRenderer.FONT_HEIGHT,-1);
+
+ Gui.drawRect(0,160+fontRenderer.FONT_HEIGHT*2,getBounds().width, 161+fontRenderer.FONT_HEIGHT*2, -1);
+ GlStateManager.translate(5,165+fontRenderer.FONT_HEIGHT*2,0);
+
+ s = guiCustomPartyFinder.getGuiChest().inventorySlots.getSlot(9*5+8);
+ itemStack = s.getStack();
+ if (itemStack == null || itemStack.getItem() != Items.skull) return;
+
+ List<String> list = itemStack.getTooltip(Minecraft.getMinecraft().thePlayer, Minecraft.getMinecraft().gameSettings.advancedItemTooltips);
+ for (int i = 0; i < list.size(); ++i) {
+ if (i == 0) {
+ list.set(i, itemStack.getRarity().rarityColor + list.get(i));
+ } else {
+ list.set(i, EnumChatFormatting.GRAY + list.get(i));
+ }
+ }
+ for (int i = 0; i < list.size(); i++) {
+ fontRenderer.drawString(list.get(i), 0, (i)*fontRenderer.FONT_HEIGHT, -1);
+ }
+ }
+
+ public void refresh() {
+ GuiChest chest = panelPartyFinder.getGuiCustomPartyFinder().getGuiChest();
+ Minecraft.getMinecraft().playerController.windowClick(chest.inventorySlots.windowId, 9*5+1, 0, 0, Minecraft.getMinecraft().thePlayer);
+ }
+ public void settings() {
+ GuiChest chest = panelPartyFinder.getGuiCustomPartyFinder().getGuiChest();
+ Minecraft.getMinecraft().playerController.windowClick(chest.inventorySlots.windowId, 9*5+5, 0, 0, Minecraft.getMinecraft().thePlayer);
+ }
+
+ @Override
+ public void setBounds(Rectangle bounds) {
+ super.setBounds(bounds);
+ refresh.setBounds(new Rectangle(5,5,(bounds.width-10)/2,20));
+ createNew.setBounds(new Rectangle(bounds.width/2,5,(bounds.width-10)/2,20));
+ filterCantjoin.setBounds(new Rectangle(5,30,bounds.width-10,20));
+ filterWhitelistNote.setBounds(new Rectangle(5,55,bounds.width-10,20));
+ filterBlacklistNote.setBounds(new Rectangle(5,80,bounds.width-10,20));
+ plaeHighlightNote.setBounds(new Rectangle(5,105,bounds.width-10,20));
+ settings.setBounds(new Rectangle(5,130,bounds.width-10,20));
+ }
+
+ public boolean filter(ItemStack itemStack) {
+ NBTTagCompound stackTagCompound = itemStack.getTagCompound();
+ String note = "";
+ if (stackTagCompound.hasKey("display", 10)) {
+ NBTTagCompound nbttagcompound = stackTagCompound.getCompoundTag("display");
+
+ if (nbttagcompound.getTagId("Lore") == 9) {
+ NBTTagList nbttaglist1 = nbttagcompound.getTagList("Lore", 8);
+
+ for (int i = 0; i < nbttaglist1.tagCount(); i++) {
+ String str = nbttaglist1.getStringTagAt(i);
+ if (str.startsWith("§cRequires ") && filterCantjoinButton.isEnabled()) return false;
+ if (str.startsWith("§7§7Note:")) {
+ note = str.substring(12);
+ }
+ }
+ }
+ }
+
+ if (!filterBlacklist.getText().isEmpty() && note.toLowerCase().contains(filterBlacklist.getText().toLowerCase())) return false;
+ if (!filterWhitelist.getText().isEmpty() && !note.toLowerCase().contains(filterWhitelist.getText().toLowerCase())) return false;
+
+ return true;
+ }
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyListElement.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyListElement.java
new file mode 100644
index 00000000..c0925a1e
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyListElement.java
@@ -0,0 +1,197 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package kr.syeyoung.dungeonsguide.features.impl.party.customgui;
+
+import kr.syeyoung.dungeonsguide.config.guiconfig.MParameter;
+import kr.syeyoung.dungeonsguide.features.FeatureParameter;
+import kr.syeyoung.dungeonsguide.gui.MPanel;
+import kr.syeyoung.dungeonsguide.gui.elements.MTooltip;
+import kr.syeyoung.dungeonsguide.gui.elements.MTooltipText;
+import kr.syeyoung.dungeonsguide.utils.RenderUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.inventory.GuiChest;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.client.renderer.entity.RenderItem;
+import net.minecraft.init.Blocks;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.util.EnumChatFormatting;
+
+import java.awt.*;
+import java.util.Arrays;
+import java.util.List;
+
+public class PanelPartyListElement extends MPanel {
+ private PanelPartyFinder panelPartyFinder;
+ private int slot;
+
+ public PanelPartyListElement(PanelPartyFinder panelPartyFinder, int slot) {
+ this.panelPartyFinder = panelPartyFinder;
+ this.slot = slot;
+ }
+
+ @Override
+ public Dimension getPreferredSize() {
+ return new Dimension(-1, 32);
+ }
+
+ private MTooltip mTooltip;
+
+ @Override
+ public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) {
+ GuiCustomPartyFinder guiCustomPartyFinder = panelPartyFinder.getGuiCustomPartyFinder();
+ if (guiCustomPartyFinder.getGuiChest() == null) return;
+ Slot s = guiCustomPartyFinder.getGuiChest().inventorySlots.getSlot(slot);
+ ItemStack itemStack = s.getStack();
+ if (itemStack == null) return;
+
+
+ int color = RenderUtils.blendAlpha(0x141414, 0.0f);
+
+ String note = "";
+ boolean cantjoin = false;
+ if (itemStack.getItem() == Item.getItemFromBlock(Blocks.bedrock)) cantjoin = true;
+ int minClass = -1, minDungeon = -1;
+ {
+ NBTTagCompound stackTagCompound = itemStack.getTagCompound();
+ if (stackTagCompound.hasKey("display", 10)) {
+ NBTTagCompound nbttagcompound = stackTagCompound.getCompoundTag("display");
+
+ if (nbttagcompound.getTagId("Lore") == 9) {
+ NBTTagList nbttaglist1 = nbttagcompound.getTagList("Lore", 8);
+
+ for (int i = 0; i < nbttaglist1.tagCount(); i++) {
+ String str = nbttaglist1.getStringTagAt(i);
+ if (str.startsWith("§7§7Note:")) {
+ note = str.substring(12);
+ } else if (str.startsWith("§7Class Level Required: §b")) {
+ minClass = Integer.parseInt(str.substring(26));
+ } else if (str.startsWith("§7Dungeon Level Required: §b")) {
+ minDungeon = Integer.parseInt(str.substring(28));
+ } else if (str.startsWith("§cRequires ")) cantjoin = true;
+ }
+ }
+ }
+ }
+
+ note = note.replaceAll("(?i)(S\\+)", "§6$1§r");
+ note = note.replaceAll("(?i)(carry)", "§4$1§r");
+
+ try {
+ if (!panelPartyFinder.getHighlightNote().isEmpty())
+ note = note.replaceAll("(?i)(" + panelPartyFinder.getHighlightNote() + ")", "§e§l$1§r");
+ } catch (Exception e) {}
+
+ if (cantjoin) {}
+ else if (clicked) {
+ color = RenderUtils.blendAlpha(0x141414, 0.10f);
+ } else if (lastAbsClip.contains(absMousex, absMousey)) {
+ color = RenderUtils.blendAlpha(0x141414, 0.12f);
+ }
+ if (cantjoin) {}
+ else if (note.contains("§e")) {
+ color = RenderUtils.blendTwoColors(color, 0x44FFFF00);
+ } else if (note.contains("§6")){
+ color = RenderUtils.blendTwoColors(color, 0x44FFAA00);
+ }
+ Gui.drawRect(0,0,getBounds().width,getBounds().height,color);
+
+ RenderItem renderItem= Minecraft.getMinecraft().getRenderItem();
+ GlStateManager.pushMatrix();
+ RenderHelper.disableStandardItemLighting();
+ RenderHelper.enableGUIStandardItemLighting();
+ GlStateManager.scale(2,2,1);
+ GlStateManager.enableCull();
+ renderItem.renderItemAndEffectIntoGUI(itemStack, 0,0);
+ GlStateManager.popMatrix();
+
+ FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(37,(32 - 2*fr.FONT_HEIGHT)/2,0);
+ GlStateManager.scale(2,2,1);
+ String name = itemStack.getDisplayName();
+ if (name.contains("'"))
+ name = name.substring(0, name.indexOf("'"));
+ fr.drawString(name, 0,0,-1);
+
+ fr.drawString(note, fr.getStringWidth("AAAAAAAAAAAAAAAAAA")+5, 0,-1);
+ GlStateManager.popMatrix();
+ GlStateManager.pushMatrix();
+ String sideNote = "";
+ if (minClass != -1) sideNote = "§7CLv ≥§b"+minClass+" ";
+ if (minDungeon != -1) sideNote += "§7DLv ≥§b"+minDungeon+" ";
+ if (cantjoin) sideNote = "§cCan't join";
+ sideNote = sideNote.trim();
+
+ GlStateManager.translate(getBounds().width,(32 - 2*fr.FONT_HEIGHT)/2,0);
+ GlStateManager.scale(2,2,0);
+ GlStateManager.translate(-fr.getStringWidth(sideNote), 0,0);
+ fr.drawString(sideNote, 0,0,-1);
+
+ GlStateManager.popMatrix();
+ if (lastAbsClip.contains(absMousex, absMousey) && (mTooltip == null || !mTooltip.isOpen())) {
+ if (mTooltip != null) mTooltip.close();
+ List<String> list = itemStack.getTooltip(Minecraft.getMinecraft().thePlayer, Minecraft.getMinecraft().gameSettings.advancedItemTooltips);
+ for (int i = 0; i < list.size(); ++i) {
+ if (i == 0) {
+ list.set(i, itemStack.getRarity().rarityColor + list.get(i));
+ } else {
+ list.set(i, EnumChatFormatting.GRAY + list.get(i));
+ }
+ }
+ mTooltip = new MTooltipText(list);
+ mTooltip.open(this);
+ } else if (!lastAbsClip.contains(absMousex, absMousey)){
+ if (mTooltip != null)
+ mTooltip.close();
+ mTooltip = null;
+ }
+ }
+
+ @Override
+ public void setParent(MPanel parent) {
+ super.setParent(parent);
+ if (parent == null && mTooltip != null) {
+ mTooltip.close();
+ mTooltip = null;
+ }
+ }
+
+ boolean clicked = false;
+ @Override
+ public void mouseClicked(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int mouseButton) {
+ if (lastAbsClip.contains(absMouseX, absMouseY)) {
+ clicked = true;
+
+ GuiChest chest = panelPartyFinder.getGuiCustomPartyFinder().getGuiChest();
+ Minecraft.getMinecraft().playerController.windowClick(chest.inventorySlots.windowId, slot, 0, 0, Minecraft.getMinecraft().thePlayer);
+ }
+ }
+
+ @Override
+ public void mouseReleased(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int state) {
+ clicked = false;
+ }
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/MGui.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/MGui.java
index 7c35306d..feef2848 100644
--- a/src/main/java/kr/syeyoung/dungeonsguide/gui/MGui.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/MGui.java
@@ -78,8 +78,8 @@ public class MGui extends GuiScreen {
mainPanel.keyTyped0(typedChar, keyCode);
super.keyTyped(typedChar, keyCode);
} catch (Throwable e) {
- if (!e.getMessage().contains("hack to stop"))
- e.printStackTrace();
+ if (e.getMessage() == null || !e.getMessage().contains("hack to stop"))
+ e.printStackTrace();
}
}
@@ -90,7 +90,7 @@ public class MGui extends GuiScreen {
mainPanel.mouseClicked0(mouseX, mouseY
,mouseX, mouseY, mouseButton);
} catch (Throwable e) {
- if (!e.getMessage().contains("hack to stop"))
+ if (e.getMessage() == null || !e.getMessage().contains("hack to stop"))
e.printStackTrace();
}
}
@@ -106,7 +106,7 @@ public class MGui extends GuiScreen {
mainPanel.mouseReleased0(mouseX, mouseY
,mouseX,mouseY , state);
} catch (Throwable e) {
- if (!e.getMessage().contains("hack to stop"))
+ if (e.getMessage() == null || !e.getMessage().contains("hack to stop"))
e.printStackTrace();
}
}
@@ -117,7 +117,7 @@ public class MGui extends GuiScreen {
mainPanel.mouseClickMove0(mouseX, mouseY
,mouseX ,mouseY, clickedMouseButton, timeSinceLastClick);
} catch (Throwable e) {
- if (!e.getMessage().contains("hack to stop"))
+ if (e.getMessage() == null || !e.getMessage().contains("hack to stop"))
e.printStackTrace();
}
}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java
index 319a7af8..a91cb6c6 100644
--- a/src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java
@@ -88,7 +88,7 @@ public class MPanel {
public void add(MPanel child) {
if (child.parent != null) throw new IllegalArgumentException("What have you done");
this.childComponents.add(child);
- child.parent = this;
+ child.setParent(this);
}
public void openTooltip(MTooltip mPanel) {
@@ -99,7 +99,7 @@ public class MPanel {
}
public void remove(MPanel panel) {
- panel.parent = null;
+ panel.setParent(null);
this.childComponents.remove(panel);
}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java
index d30b82c9..da2ff78c 100755
--- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java
@@ -37,9 +37,10 @@ public class MButton extends MPanel {
private String text;
private Color foreground = Color.white;
- private Color hover = Color.gray;
- private Color clicked = Color.lightGray;
- private Color disabled = Color.darkGray;
+ private int background = RenderUtils.blendAlpha(0xFF141414, 0.08f);
+ private int hover = RenderUtils.blendAlpha(0xFF141414, 0.14f);
+ private int clicked = RenderUtils.blendAlpha(0xFF141414, 0.16f);
+ private int disabled =0xFF141414;
private boolean enabled = true;
@@ -49,14 +50,15 @@ public class MButton extends MPanel {
public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle clip) {
Dimension bounds = getSize();
- Color bg = backgroundColor;
+ int bg = background;
if (!enabled) {
bg = disabled;
+ } else if (isclicked) {
+ bg = clicked;
} else if (new Rectangle(new Point(0,0),bounds).contains(relMousex0, relMousey0)) {
bg = hover;
}
- if (bg != null)
- Gui.drawRect(0,0,getBounds().width, getBounds().height, bg.getRGB());
+ Gui.drawRect(0,0,getBounds().width, getBounds().height, bg);
FontRenderer renderer = Minecraft.getMinecraft().fontRendererObj;
int width = renderer.getStringWidth(getText());
@@ -69,9 +71,18 @@ public class MButton extends MPanel {
renderer.drawString(getText(), x,y, foreground.getRGB());
}
+ boolean isclicked = false;
@Override
public void mouseClicked(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int mouseButton) {
- if (onActionPerformed != null && lastAbsClip.contains(absMouseX, absMouseY))
- onActionPerformed.run();
+ if (lastAbsClip.contains(absMouseX, absMouseY)) {
+ isclicked = true;
+ if (onActionPerformed != null)
+ onActionPerformed.run();
+ }
+ }
+
+ @Override
+ public void mouseReleased(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int state) {
+ isclicked = false;
}
}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java
index de3e4b40..f6df0e19 100644
--- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java
@@ -51,7 +51,7 @@ public class MList extends MPanel {
for (int i = 1; i < getChildComponents().size(); i++) {
MPanel panel = getChildComponents().get(i);
Rectangle bound = panel.getBounds();
- Gui.drawRect(0,bound.y - (gap/2), getBounds().width, bound.y - (gap/2)+1, gapLineColor);
+ Gui.drawRect(0, bound.y - gap, getBounds().width, bound.y, gapLineColor);
}
}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPassiveLabelAndElement.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPassiveLabelAndElement.java
index af29f92a..a90e40e5 100755
--- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPassiveLabelAndElement.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPassiveLabelAndElement.java
@@ -34,6 +34,9 @@ public class MPassiveLabelAndElement extends MPanel {
@Getter @Setter
private Runnable onClick;
+ @Getter @Setter
+ private double divideRatio = 1/3.0;
+
public MPassiveLabelAndElement(String label, MPanel element) {
this.add(this.label = new MLabel());
this.label.setText(label);
@@ -62,7 +65,7 @@ public class MPassiveLabelAndElement extends MPanel {
@Override
public void onBoundsUpdate() {
- label.setBounds(new Rectangle(0,0,getBounds().width / 3, getBounds().height));
- element.setBounds(new Rectangle(getBounds().width / 3,0,getBounds().width / 3 * 2, getBounds().height));
+ label.setBounds(new Rectangle(0,0, (int) (getBounds().width * divideRatio), getBounds().height));
+ element.setBounds(new Rectangle((int) (getBounds().width * divideRatio),0, (int) (getBounds().width * (1-divideRatio)), getBounds().height));
}
}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java
index ffdab32b..bdbf51d0 100644
--- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java
@@ -112,7 +112,7 @@ public class MScrollablePanel extends MPanel {
}
}
- private void evalulateContentArea() {
+ public void evalulateContentArea() {
if (contentArea.getChildComponents().size() == 0) {
contentAreaDim= new Rectangle(0,0,0,0);
return;
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTextField.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTextField.java
index c26a1b21..a971cc30 100755
--- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTextField.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTextField.java
@@ -39,7 +39,7 @@ import java.io.IOException;
public class MTextField extends MPanel {
private final Color foreground = Color.white;
- private String text = "asdasdasd";
+ private String text = "";
private int cursorBlickTicker = 0;
private int selectionStart = 0;