package noppes.npcs.client.gui.magic; import kamkeel.npcs.network.PacketClient; import kamkeel.npcs.network.packets.request.magic.MagicSavePacket; import net.minecraft.client.gui.GuiButton; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.StatCollector; import noppes.npcs.client.gui.SubGuiColorSelector; import noppes.npcs.client.gui.global.GuiNpcManageMagic; import noppes.npcs.client.gui.util.*; import noppes.npcs.constants.EnumTextureType; import noppes.npcs.controllers.data.Magic; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class SubGuiMagic extends SubGuiInterface implements ITextfieldListener, ISubGuiListener, ICustomScrollListener { public GuiNpcManageMagic parent; private GuiCustomScroll allMagic; private GuiCustomScroll interactionsScroll; private Magic magic; private String search = ""; private GuiNpcTextField interactionField; private String selectedInteraction; private HashMap interactionNames = new HashMap<>(); private HashMap interactionValues = new HashMap<>(); public SubGuiMagic(GuiNpcManageMagic parent, Magic magic) { this.magic = magic; this.parent = parent; setBackground("menubg.png"); xSize = 360; ySize = 216; closeOnEsc = true; processInteractions(); } @Override public void initGui() { super.initGui(); int y = guiTop + 6; addLabel(new GuiNpcLabel(1,"gui.name", guiLeft + 4, y + 5)); addTextField(new GuiNpcTextField(1, this, this.fontRendererObj, guiLeft + 80, y, 200, 20, magic.name)); addLabel(new GuiNpcLabel(100,"ID", guiLeft + 200 + 105, guiTop + 4)); addLabel(new GuiNpcLabel(100, magic.id + "", + 200 + 105, guiTop + 14)); y += 25; // Edit Magic Display Name addLabel(new GuiNpcLabel(2, "gui.displayName", guiLeft + 4, y + 5)); addTextField(new GuiNpcTextField(2, this, fontRendererObj, guiLeft + 80, y, 200, 20, magic.displayName)); String color = Integer.toHexString(magic.color); while(color.length() < 6) color = 0 + color; addButton(new GuiNpcButton(12, guiLeft + 80 + 5 + 200, y, 65, 20, color)); getButton(12).setTextColor(magic.color); y += 25; addLabel(new GuiNpcLabel(3, "display.texture", guiLeft + 4, y + 5)); addTextField(new GuiNpcTextField(3, this, fontRendererObj, guiLeft + 80, y, 200, 20, magic.iconTexture)); addButton(new GuiNpcButton(13, guiLeft + 80 + 5 + 200, y, 65, 20, EnumTextureType.names(), magic.type.ordinal())); // Interactions if(allMagic == null){ allMagic = new GuiCustomScroll(this,0); allMagic.setSize(150, 107); } allMagic.guiLeft = guiLeft + 5; allMagic.guiTop = guiTop + 80; this.addScroll(allMagic); addTextField(new GuiNpcTextField(34, this, fontRendererObj, guiLeft + 5, guiTop + 30 + 160, 150, 20, search)); allMagic.setList(getSearchList()); if(interactionsScroll == null){ interactionsScroll = new GuiCustomScroll(this,1); interactionsScroll.setSize(150, 107); } interactionsScroll.guiLeft = guiLeft + 200; interactionsScroll.guiTop = guiTop + 80; interactionsScroll.setList(new ArrayList<>(interactionNames.keySet())); this.addScroll(interactionsScroll); addLabel(new GuiNpcLabel(50, "magic.interaction", guiLeft + 170, guiTop + 30 + 160 + 5)); interactionField = new GuiNpcTextField(90, this, fontRendererObj, guiLeft + 245, guiTop + 30 + 160, 45, 20, ""); interactionField.setFloatsOnly(); addTextField(interactionField); if(selectedInteraction != null){ interactionField.setText(interactionValues.get(selectedInteraction) + ""); } else { interactionField.enabled = false; } addButton(new GuiNpcButton(60, guiLeft + 160, guiTop + 90, 30, 20, ">")); addButton(new GuiNpcButton(61, guiLeft + 160, guiTop + 112, 30, 20, "<")); addButton(new GuiNpcButton(62, guiLeft + 160, guiTop + 140, 30, 20, ">>")); addButton(new GuiNpcButton(63, guiLeft + 160, guiTop + 162, 30, 20, "<<")); // Done Button addButton(new GuiNpcButton(99, guiLeft + 303, guiTop + 30 + 160, 50, 20, "gui.done")); } @Override public void actionPerformed(GuiButton button) { if(button.id == 99){ close(); } if(button.id == 13){ magic.type = EnumTextureType.values()[((GuiNpcButton)button).getValue()]; } if (button.id == 12) { setSubGui(new SubGuiColorSelector(magic.color)); } if (button.id == 60 && allMagic.hasSelected() && !interactionNames.containsKey(allMagic.getSelected()) && this.parent.magicData.containsKey(allMagic.getSelected())) { interactionNames.put(allMagic.getSelected(), this.parent.magicData.get(allMagic.getSelected())); interactionValues.put(allMagic.getSelected(), 0.0f); interactionsScroll.list.add(allMagic.getSelected()); } if (button.id == 61 && interactionsScroll.hasSelected()) { // Remove interactionNames.remove(interactionsScroll.getSelected()); interactionValues.remove(interactionsScroll.getSelected()); interactionsScroll.list.remove(interactionsScroll.selected); interactionsScroll.selected = -1; interactionField.enabled = false; interactionField.setText(""); } if (button.id == 62) { // Add All for(String name : this.parent.magicData.keySet()){ if(!interactionNames.containsKey(name)){ interactionNames.put(name, this.parent.magicData.get(name)); interactionValues.put(name, 0.0f); } } interactionsScroll.setList(new ArrayList<>(interactionNames.keySet())); } if (button.id == 63) { // Remove All interactionNames.clear(); interactionValues.clear(); interactionsScroll.setList(new ArrayList<>()); interactionsScroll.selected = -1; interactionField.enabled = false; interactionField.setText(""); } } @Override public void unFocused(GuiNpcTextField guiNpcTextField) { if(guiNpcTextField.id == 1) { if(magic.id < 0) guiNpcTextField.setText(""); else{ String name = guiNpcTextField.getText(); if(name.isEmpty() || ((GuiNpcManageMagic)this.parent).magicData.containsKey(name)){ guiNpcTextField.setText(magic.name); } else if(magic.id >= 0){ String old = magic.name; ((GuiNpcManageMagic)this.parent).magicData.remove(old); magic.name = name; ((GuiNpcManageMagic)this.parent).magicData.put(magic.name, magic.id); ((GuiNpcManageMagic)this.parent).rightScroll.replace(old, magic.name); } } } if(guiNpcTextField.id == 2){ magic.displayName = guiNpcTextField.getText(); } if(guiNpcTextField.id == 3){ magic.iconTexture = guiNpcTextField.getText(); } } public void mouseClicked(int i, int j, int k) { super.mouseClicked(i, j, k); if(k == 0 && allMagic != null) allMagic.mouseClicked(i, j, k); } public void keyTyped(char c, int i) { super.keyTyped(c, i); if(getTextField(34) != null && getTextField(34).isFocused()){ if(search.equals(getTextField(34).getText())) return; search = getTextField(34).getText().toLowerCase(); allMagic.setList(getSearchList()); allMagic.resetScroll(); } } private List getSearchList(){ List original = new ArrayList<>(this.parent.magicData.keySet()); if(search.isEmpty()){ return original; } List filtered = new ArrayList<>(); for(String name : original){ if(name.toLowerCase().contains(search)){ filtered.add(name); } } return filtered; } public void processInteractions(){ interactionNames.clear(); interactionValues.clear(); for(int id : magic.interactions.keySet()){ for(String name : this.parent.magicData.keySet()){ if(this.parent.magicData.get(name) == id){ interactionNames.put(name, id); interactionValues.put(name, magic.interactions.get(id)); } } } } public void setInteractions(){ magic.interactions.clear(); for(String name : interactionNames.keySet()){ magic.interactions.put(interactionNames.get(name), interactionValues.get(name)); } } @Override public void subGuiClosed(SubGuiInterface subgui) { if(subgui instanceof SubGuiColorSelector){ magic.color = ((SubGuiColorSelector) subgui).color; initGui(); } } public void close(){ setInteractions(); NBTTagCompound compound = new NBTTagCompound(); magic.writeNBT(compound); PacketClient.sendClient(new MagicSavePacket(compound)); super.close(); } @Override public void customScrollClicked(int i, int j, int k, GuiCustomScroll guiCustomScroll) { if(guiCustomScroll.id == 1){ selectedInteraction = interactionsScroll.getSelected(); interactionField.enabled = true; interactionField.setText(interactionValues.get(selectedInteraction) + ""); } } @Override public void customScrollDoubleClicked(String selection, GuiCustomScroll scroll) {} }