From 80f15acb616b794ed117a26edf2c43b037e9bbe4 Mon Sep 17 00:00:00 2001 From: KatatsumuriPan Date: Sat, 2 Mar 2024 16:21:44 +0900 Subject: [PATCH 1/7] Add up down button --- .../lists/CanvasScrollingNameValue.java | 31 +++ .../gui2/editors/GuiQuestLinesEditor.java | 116 +++++++--- .../client/gui2/editors/nbt/GuiNbtEditor.java | 4 +- .../gui2/editors/nbt/PanelScrollingNBT.java | 200 +++++++++++++----- .../editors/tasks/GuiEditTaskRetrieval.java | 120 +++++++++++ .../client/ui_builder/GuiBuilderMain.java | 2 +- 6 files changed, 389 insertions(+), 84 deletions(-) create mode 100644 src/main/java/betterquesting/api2/client/gui/panels/lists/CanvasScrollingNameValue.java create mode 100644 src/main/java/betterquesting/client/gui2/editors/tasks/GuiEditTaskRetrieval.java diff --git a/src/main/java/betterquesting/api2/client/gui/panels/lists/CanvasScrollingNameValue.java b/src/main/java/betterquesting/api2/client/gui/panels/lists/CanvasScrollingNameValue.java new file mode 100644 index 000000000..2bb7aa8f6 --- /dev/null +++ b/src/main/java/betterquesting/api2/client/gui/panels/lists/CanvasScrollingNameValue.java @@ -0,0 +1,31 @@ +package betterquesting.api2.client.gui.panels.lists; + +import java.util.function.Function; + +import betterquesting.api2.client.gui.misc.GuiRectangle; +import betterquesting.api2.client.gui.misc.IGuiRect; +import betterquesting.api2.client.gui.panels.IGuiPanel; +import betterquesting.api2.client.gui.panels.content.PanelTextBox; +import betterquesting.api2.client.gui.themes.presets.PresetColor; + +public class CanvasScrollingNameValue extends CanvasScrolling { + + private int rowNum = 0; + + public CanvasScrollingNameValue(IGuiRect rect) { + super(rect); + } + + public void addPanel(String name, Function panelFactory) { + int width = getTransform().getWidth(); + int lw = (int) (width / 3F); + int rw = width - lw; // Width on right side (rounds up to account for rounding errors lost on left side) + PanelTextBox namePanel = new PanelTextBox(new GuiRectangle(0, rowNum * 16 + 4, lw - 8, 12, 0), name).setAlignment(2); + namePanel.setColor(PresetColor.TEXT_MAIN.getColor()); + addPanel(namePanel); + GuiRectangle rect = new GuiRectangle(lw, rowNum * 16, rw - 32, 16); + addPanel(panelFactory.apply(rect)); + rowNum++; + } + +} diff --git a/src/main/java/betterquesting/client/gui2/editors/GuiQuestLinesEditor.java b/src/main/java/betterquesting/client/gui2/editors/GuiQuestLinesEditor.java index eb0d5b157..783a0318d 100644 --- a/src/main/java/betterquesting/client/gui2/editors/GuiQuestLinesEditor.java +++ b/src/main/java/betterquesting/client/gui2/editors/GuiQuestLinesEditor.java @@ -1,5 +1,10 @@ package betterquesting.client.gui2.editors; +import java.util.List; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.util.vector.Vector4f; + import betterquesting.api.client.gui.misc.INeedsRefresh; import betterquesting.api.client.gui.misc.IVolatileScreen; import betterquesting.api.enums.EnumQuestVisibility; @@ -15,7 +20,11 @@ import betterquesting.api2.client.gui.events.PEventBroadcaster; import betterquesting.api2.client.gui.events.PanelEvent; import betterquesting.api2.client.gui.events.types.PEventButton; -import betterquesting.api2.client.gui.misc.*; +import betterquesting.api2.client.gui.misc.GuiAlign; +import betterquesting.api2.client.gui.misc.GuiPadding; +import betterquesting.api2.client.gui.misc.GuiRectangle; +import betterquesting.api2.client.gui.misc.GuiTransform; +import betterquesting.api2.client.gui.misc.IGuiRect; import betterquesting.api2.client.gui.panels.CanvasEmpty; import betterquesting.api2.client.gui.panels.CanvasTextured; import betterquesting.api2.client.gui.panels.bars.PanelVScrollBar; @@ -35,12 +44,9 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import org.lwjgl.input.Keyboard; -import org.lwjgl.util.vector.Vector4f; - -import java.util.List; public class GuiQuestLinesEditor extends GuiScreenCanvas implements IPEventListener, IVolatileScreen, INeedsRefresh { + private CanvasScrolling lineList; private PanelTextField tfName; private PanelTextField tfDesc; @@ -73,8 +79,10 @@ public void refreshGui() { btnIcon.setActive(true); btnVis.setActive(true); btnVis.setText(QuestTranslation.translate("betterquesting.btn.show") + ": " + selected.getProperty(NativeProps.VISIBILITY)); - if (!tfName.isFocused()) tfName.setText(selected.getUnlocalisedName()); - if (!tfDesc.isFocused()) tfDesc.setText(selected.getUnlocalisedDescription()); + if (!tfName.isFocused()) + tfName.setText(selected.getUnlocalisedName()); + if (!tfDesc.isFocused()) + tfDesc.setText(selected.getUnlocalisedDescription()); } } @@ -89,10 +97,12 @@ public void initPanel() { Keyboard.enableRepeatEvents(true); // Background panel - CanvasTextured cvBackground = new CanvasTextured(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(0, 0, 0, 0), 0), PresetTexture.PANEL_MAIN.getTexture()); + CanvasTextured cvBackground = new CanvasTextured(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(0, 0, 0, 0), 0), + PresetTexture.PANEL_MAIN.getTexture()); this.addPanel(cvBackground); - PanelTextBox panTxt = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 16, 0, -32), 0), QuestTranslation.translate("betterquesting.title.edit_line1")).setAlignment(1); + PanelTextBox panTxt = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 16, 0, -32), 0), + QuestTranslation.translate("betterquesting.title.edit_line1")).setAlignment(1); panTxt.setColor(PresetColor.TEXT_HEADER.getColor()); cvBackground.addPanel(panTxt); @@ -107,10 +117,14 @@ public void initPanel() { cvBackground.addPanel(scList); lineList.setScrollDriverY(scList); - PanelButton btnAdd = new PanelButton(new GuiTransform(new Vector4f(0F, 1F, 0.25F, 1F), new GuiPadding(16, -40, 0, 24), 0), 1, QuestTranslation.translate("betterquesting.btn.new")); + PanelButton btnAdd = new PanelButton(new GuiTransform(new Vector4f(0F, 1F, 0.25F, 1F), new GuiPadding(16, -40, 0, 24), 0), + 1, + QuestTranslation.translate("betterquesting.btn.new")); cvBackground.addPanel(btnAdd); - PanelButton btnImport = new PanelButton(new GuiTransform(new Vector4f(0.25F, 1F, 0.5F, 1F), new GuiPadding(0, -40, 16, 24), 0), 2, QuestTranslation.translate("betterquesting.btn.import")); + PanelButton btnImport = new PanelButton(new GuiTransform(new Vector4f(0.25F, 1F, 0.5F, 1F), new GuiPadding(0, -40, 16, 24), 0), + 2, + QuestTranslation.translate("betterquesting.btn.import")); cvBackground.addPanel(btnImport); // Right side @@ -118,14 +132,16 @@ public void initPanel() { CanvasEmpty cvRight = new CanvasEmpty(new GuiTransform(GuiAlign.HALF_RIGHT, new GuiPadding(8, 32, 16, 24), 0)); cvBackground.addPanel(cvRight); - PanelTextBox txtName = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 4, 0, -16), 0), QuestTranslation.translate("betterquesting.gui.name")); + PanelTextBox txtName = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 4, 0, -16), 0), + QuestTranslation.translate("betterquesting.gui.name")); txtName.setColor(PresetColor.TEXT_MAIN.getColor()); cvRight.addPanel(txtName); tfName = new PanelTextField<>(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 16, 0, -32), 0), "", FieldFilterString.INSTANCE); cvRight.addPanel(tfName); - PanelTextBox txtDesc = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 36, 0, -48), 0), QuestTranslation.translate("betterquesting.gui.description")); + PanelTextBox txtDesc = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 36, 0, -48), 0), + QuestTranslation.translate("betterquesting.gui.description")); txtDesc.setColor(PresetColor.TEXT_MAIN.getColor()); cvRight.addPanel(txtDesc); @@ -133,41 +149,56 @@ public void initPanel() { tfDesc.setMaxLength(Integer.MAX_VALUE); cvRight.addPanel(tfDesc); - btnIcon = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 80, 0, -96), 0), -1, QuestTranslation.translate("betterquesting.btn.icon")) { + btnIcon = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 80, 0, -96), 0), + -1, + QuestTranslation.translate("betterquesting.btn.icon")) { + @Override public void onButtonClick() { - if (selected == null) return; + if (selected == null) + return; mc.displayGuiScreen(new GuiItemSelection(GuiQuestLinesEditor.this, selected.getProperty(NativeProps.ICON), value -> { selected.setProperty(NativeProps.ICON, value); SendChanges(new DBEntry<>(selID, selected)); })); } + }; btnIcon.setActive(selected != null); cvRight.addPanel(btnIcon); - btnVis = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 96, 0, -112), 0), -1, QuestTranslation.translate("betterquesting.btn.show") + ": " + (selected == null ? EnumQuestVisibility.NORMAL : selected.getProperty(NativeProps.VISIBILITY))) { + btnVis = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 96, 0, -112), 0), + -1, + QuestTranslation.translate("betterquesting.btn.show") + ": " + (selected == null ? EnumQuestVisibility.NORMAL : selected + .getProperty(NativeProps.VISIBILITY))) { + @Override public void onButtonClick() { - if (selected == null) return; + if (selected == null) + return; EnumQuestVisibility[] visList = EnumQuestVisibility.values(); EnumQuestVisibility vis = selected.getProperty(NativeProps.VISIBILITY); vis = visList[(vis.ordinal() + 1) % visList.length]; selected.setProperty(NativeProps.VISIBILITY, vis); this.setText(QuestTranslation.translate("betterquesting.btn.show") + ": " + vis); } + }; btnVis.setActive(selected != null); cvRight.addPanel(btnVis); - PanelButton btnManage = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 112, 0, -128), 0), 3, QuestTranslation.translate("betterquesting.btn.add_remove_quests")); + PanelButton btnManage = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 112, 0, -128), 0), + 3, + QuestTranslation.translate("betterquesting.btn.add_remove_quests")); cvRight.addPanel(btnManage); - btnDesign = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 128, 0, -144), 0), 4, QuestTranslation.translate("betterquesting.btn.designer")); + btnDesign = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 128, 0, -144), 0), + 4, + QuestTranslation.translate("betterquesting.btn.designer")); btnDesign.setActive(selected != null); cvRight.addPanel(btnDesign); - PanelButton btnTextEditor = new PanelButton(new GuiTransform(GuiAlign.TOP_RIGHT, new GuiPadding(-16, 48, 0, -64), 0), 8, "Aa"); + PanelButton btnTextEditor = new PanelButton(new GuiTransform(GuiAlign.TOP_RIGHT, new GuiPadding(-16, 48, 0, -64), 0), 9, "Aa"); cvRight.addPanel(btnTextEditor); // Dividers @@ -194,8 +225,10 @@ public void onButtonClick() { btnIcon.setActive(true); btnVis.setActive(true); btnVis.setText(QuestTranslation.translate("betterquesting.btn.show") + ": " + selected.getProperty(NativeProps.VISIBILITY)); - if (!tfName.isFocused()) tfName.setText(selected.getUnlocalisedName()); - if (!tfDesc.isFocused()) tfDesc.setText(selected.getUnlocalisedDescription()); + if (!tfName.isFocused()) + tfName.setText(selected.getUnlocalisedName()); + if (!tfDesc.isFocused()) + tfDesc.setText(selected.getUnlocalisedDescription()); } } @@ -276,14 +309,23 @@ private void onButtonPress(PEventButton event) { { DBEntry entry = ((PanelButtonStorage>) btn).getStoredValue(); NBTTagCompound payload = new NBTTagCompound(); - payload.setIntArray("chapterIDs", new int[]{entry.getID()}); + payload.setIntArray("chapterIDs", new int[] { + entry.getID() + }); payload.setInteger("action", 1); NetChapterEdit.sendEdit(payload); } else if (btn.getButtonID() == 7 && btn instanceof PanelButtonStorage) // Move Up { DBEntry entry = ((PanelButtonStorage>) btn).getStoredValue(); int order = QuestLineDatabase.INSTANCE.getOrderIndex(entry.getID()); - if (order > 0) SendReorder(order); + if (order > 0) + SendReorder(order, false); + } else if (btn.getButtonID() == 8 && btn instanceof PanelButtonStorage) // Move Down + { + DBEntry entry = ((PanelButtonStorage>) btn).getStoredValue(); + int order = QuestLineDatabase.INSTANCE.getOrderIndex(entry.getID()); + if (order < QuestLineDatabase.INSTANCE.getSortedEntries().size() - 1) + SendReorder(order, true); } else if (btn.getButtonID() == 8) // Big Description Editor { mc.displayGuiScreen(new GuiTextEditor(this, tfDesc.getRawText(), value -> { @@ -304,13 +346,20 @@ private void reloadList() { for (DBEntry entry : QuestLineDatabase.INSTANCE.getSortedEntries()) { IQuestLine ql = entry.getValue(); - PanelButtonStorage> tmp = new PanelButtonStorage<>(new GuiRectangle(0, i * 16, w - 32, 16, 0), 5, QuestTranslation.translate(ql.getUnlocalisedName()), entry); + PanelButtonStorage> tmp = new PanelButtonStorage<>(new GuiRectangle(0, i * 16, w - 48, 16, 0), + 5, + QuestTranslation.translate(ql.getUnlocalisedName()), + entry); tmp.setActive(entry.getID() != selID); lineList.addPanel(tmp); - lineList.addPanel(new PanelButtonStorage<>(new GuiRectangle(w - 32, i * 16, 16, 16, 0), 6, "", entry).setIcon(PresetIcon.ICON_TRASH.getTexture())); - PanelButton btnUp = new PanelButtonStorage<>(new GuiRectangle(w - 16, i * 16, 16, 16, 0), 7, "", entry).setIcon(PresetIcon.ICON_UP.getTexture()); - btnUp.setActive(QuestLineDatabase.INSTANCE.getSortedEntries().size() > 1); + lineList.addPanel(new PanelButtonStorage<>(new GuiRectangle(w - 48, i * 16, 16, 16, 0), 6, "", entry).setIcon(PresetIcon.ICON_TRASH.getTexture())); + PanelButton btnUp = new PanelButtonStorage<>(new GuiRectangle(w - 32, i * 16, 16, 16, 0), 7, "", entry).setIcon(PresetIcon.ICON_UP.getTexture()); + btnUp.setActive(i > 0); lineList.addPanel(btnUp); + PanelButton btnDown = new PanelButtonStorage<>(new GuiRectangle(w - 16, i * 16, 16, 16, 0), 8, "", entry).setIcon(PresetIcon.ICON_DOWN + .getTexture()); + btnDown.setActive(i < QuestLineDatabase.INSTANCE.getSortedEntries().size() - 1); + lineList.addPanel(btnDown); i++; } } @@ -327,16 +376,18 @@ private void SendChanges(DBEntry chapter) { NetChapterEdit.sendEdit(payload); } - private void SendReorder(int indexToShift) { - if (indexToShift < 0) return; + private void SendReorder(int indexToShift, boolean down) { + if (indexToShift < 0) + return; List> entries = QuestLineDatabase.INSTANCE.getSortedEntries(); - if (indexToShift >= entries.size()) return; + if (indexToShift >= entries.size()) + return; int[] chapterIDs = new int[entries.size()]; for (int i = 0; i < entries.size(); i++) { chapterIDs[i] = entries.get(i).getID(); } - int indexFrom = (indexToShift - 1 + chapterIDs.length) % chapterIDs.length; + int indexFrom = (indexToShift + (down ? 1 : -1) + chapterIDs.length) % chapterIDs.length; int tmp = chapterIDs[indexToShift]; chapterIDs[indexToShift] = chapterIDs[indexFrom]; chapterIDs[indexFrom] = tmp; @@ -346,4 +397,5 @@ private void SendReorder(int indexToShift) { payload.setInteger("action", 2); NetChapterEdit.sendEdit(payload); } + } diff --git a/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtEditor.java b/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtEditor.java index ca9e4f0e4..1122b7a44 100644 --- a/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtEditor.java +++ b/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtEditor.java @@ -66,9 +66,9 @@ public void initPanel() { PanelScrollingNBT pnEdit; if (nbt.getId() == 10) { - pnEdit = new PanelScrollingNBT(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(16, 32, 24, 32), 0), (NBTTagCompound) nbt, 1, 2, 3, 4); + pnEdit = new PanelScrollingNBT(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(16, 32, 24, 32), 0), (NBTTagCompound) nbt, 1, 2, 3, 4, 5, 6); } else { - pnEdit = new PanelScrollingNBT(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(16, 32, 24, 32), 0), (NBTTagList) nbt, 1, 2, 3, 4); + pnEdit = new PanelScrollingNBT(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(16, 32, 24, 32), 0), (NBTTagList) nbt, 1, 2, 3, 4, 5, 6); } cvBackground.addPanel(pnEdit); diff --git a/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java b/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java index 949b9bc90..0ceaf2621 100644 --- a/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java +++ b/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java @@ -1,8 +1,17 @@ package betterquesting.client.gui2.editors.nbt; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Stack; + +import org.lwjgl.input.Keyboard; + import betterquesting.api.utils.BigItemStack; import betterquesting.api.utils.JsonHelper; import betterquesting.api2.client.gui.controls.IPanelButton; +import betterquesting.api2.client.gui.controls.PanelButton; import betterquesting.api2.client.gui.controls.PanelButtonStorage; import betterquesting.api2.client.gui.controls.PanelTextField; import betterquesting.api2.client.gui.controls.callbacks.CallbackMulti; @@ -21,6 +30,7 @@ import betterquesting.api2.client.gui.panels.lists.CanvasScrolling; import betterquesting.api2.client.gui.resources.colors.GuiColorStatic; import betterquesting.api2.client.gui.themes.presets.PresetColor; +import betterquesting.api2.client.gui.themes.presets.PresetIcon; import betterquesting.api2.utils.QuestTranslation; import betterquesting.client.gui2.editors.GuiTextEditor; import betterquesting.client.gui2.editors.nbt.callback.NbtEntityCallback; @@ -28,20 +38,26 @@ import betterquesting.client.gui2.editors.nbt.callback.NbtItemCallback; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; -import net.minecraft.nbt.*; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTPrimitive; +import net.minecraft.nbt.NBTTagByte; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; import net.minecraftforge.fluids.FluidStack; -import org.lwjgl.input.Keyboard; - -import java.util.*; // Self contained editing panel -// TODO: Add ability for expansions to register modules for identifying and providing custom editors to various NBT data sets (inventory, tinker tool, magic, etc.) +// TODO: Add ability for expansions to register modules for identifying and providing custom editors to various NBT data sets (inventory, tinker tool, magic, +// etc.) // TODO: This however should not be forced in the event of incorrect identification. Open as... public class PanelScrollingNBT extends CanvasScrolling implements IPEventListener { + private NBTBase nbt; private final int btnEdit; private final int btnAdv; + private final int btnUp; + private final int btnDown; private final int btnInsert; private final int btnDelete; @@ -51,23 +67,25 @@ public class PanelScrollingNBT extends CanvasScrolling implements IPEventListene private final Stack nbtStack = new Stack<>(); - public PanelScrollingNBT(IGuiRect rect, NBTTagCompound tag, int btnEdit, int btnAdv, int btnInsert, int btnDelete) { - this(rect, btnEdit, btnAdv, btnInsert, btnDelete); + public PanelScrollingNBT(IGuiRect rect, NBTTagCompound tag, int btnEdit, int btnAdv, int btnUp, int btnDown, int btnInsert, int btnDelete) { + this(rect, btnEdit, btnAdv, btnUp, btnDown, btnInsert, btnDelete); this.setNBT(tag); } - public PanelScrollingNBT(IGuiRect rect, NBTTagList tag, int btnEdit, int btnAdv, int btnInsert, int btnDelete) { - this(rect, btnEdit, btnAdv, btnInsert, btnDelete); + public PanelScrollingNBT(IGuiRect rect, NBTTagList tag, int btnEdit, int btnAdv, int btnUp, int btnDown, int btnInsert, int btnDelete) { + this(rect, btnEdit, btnAdv, btnUp, btnDown, btnInsert, btnDelete); this.setNBT(tag); } - private PanelScrollingNBT(IGuiRect rect, int btnEdit, int btnAdv, int btnInsert, int btnDelete) { + private PanelScrollingNBT(IGuiRect rect, int btnEdit, int btnAdv, int btnUp, int btnDown, int btnInsert, int btnDelete) { super(rect); this.btnEdit = btnEdit; this.btnAdv = btnAdv; + this.btnUp = btnUp; + this.btnDown = btnDown; this.btnInsert = btnInsert; this.btnDelete = btnDelete; @@ -77,18 +95,17 @@ private PanelScrollingNBT(IGuiRect rect, int btnEdit, int btnAdv, int btnInsert, } // TODO: Implement this with a proper way of displaying and choosing between options (and setting priority for default) - /*private final List, Consumer>> filterMap = new ArrayList<>(); + /*private final List, Consumer>> filterMap = new ArrayList<>(); public void registerHandler(Predicate filter, Consumer action) { filterMap.add(new Pair<>(filter, action)); } - @Nullable - public List> getHandler(@Nonnull NBTBase tag) + @Nullable public List> getHandler(@Nonnull NBTBase tag) { List> list = new ArrayList<>(); - + for(Pair, Consumer> p : filterMap) { if(p.getKey().test(tag)) @@ -96,7 +113,7 @@ public List> getHandler(@Nonnull NBTBase tag) list.add(p.getValue()); } } - + return list; }*/ @@ -151,7 +168,10 @@ private void refreshList() { if (entry.getId() == 10) // Object { - PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw, i * 16, rw - 48, 16, 0), btnEdit, getButtonTitle((NBTTagCompound) entry), k); + PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw, i * 16, rw - 48, 16, 0), + btnEdit, + getButtonTitle((NBTTagCompound) entry), + k); this.addPanel(btn); btn = new PanelButtonStorage<>(new GuiRectangle(width - 48, i * 16, 16, 16, 0), btnAdv, "...", k); @@ -162,7 +182,9 @@ private void refreshList() { this.addPanel(btn); } else if (entry.getId() == 8) // Text { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 48, 16, 0), "" + ((NBTTagString) entry).getString(), FieldFilterString.INSTANCE); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 48, 16, 0), + "" + ((NBTTagString) entry).getString(), + FieldFilterString.INSTANCE); text.setCallback(new CallbackNBTTagString(tag, k)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); @@ -170,14 +192,21 @@ private void refreshList() { this.addPanel(btn); } else if (entry.getId() == 1) // Byte/Boolean { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw / 2, 16, 0), "" + ((NBTPrimitive) entry).getByte(), FieldFilterNumber.BYTE); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw / 2, 16, 0), + "" + ((NBTPrimitive) entry).getByte(), + FieldFilterNumber.BYTE); text.setMaxLength(Integer.MAX_VALUE); // Put callback here this.addPanel(text); - PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw + rw / 2, i * 16, (int) Math.ceil(rw / 2F) - 32, 16, 0), btnEdit, ((NBTPrimitive) entry).getByte() > 0 ? "true" : "false", k); + PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw + rw / 2, i * 16, (int) Math.ceil(rw / 2F) - 32, 16, 0), + btnEdit, + ((NBTPrimitive) entry).getByte() > 0 ? "true" : "false", + k); this.addPanel(btn); - text.setMaxLength(Integer.MAX_VALUE).setCallback(new CallbackMulti<>(new CallbackNBTPrimitive<>(tag, k, Byte.class), value -> btn.setText(value > 0 ? "true" : "false"))); + text.setMaxLength(Integer.MAX_VALUE) + .setCallback(new CallbackMulti<>(new CallbackNBTPrimitive<>(tag, k, Byte.class), + value -> btn.setText(value > 0 ? "true" : "false"))); btn.setCallback(value -> { boolean flag = tag.getByte(value) > 0; tag.setByte(value, flag ? (byte) 0 : (byte) 1); @@ -189,42 +218,53 @@ private void refreshList() { switch (entry.getId()) { case 2: // Short { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), "" + ((NBTPrimitive) entry).getShort(), FieldFilterNumber.SHORT); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), + "" + ((NBTPrimitive) entry).getShort(), + FieldFilterNumber.SHORT); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Short.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; } case 3: // Integer { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), "" + ((NBTPrimitive) entry).getInt(), FieldFilterNumber.INT); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), + "" + ((NBTPrimitive) entry).getInt(), + FieldFilterNumber.INT); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Integer.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; } case 4: // Long { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), "" + ((NBTPrimitive) entry).getLong(), FieldFilterNumber.LONG); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), + "" + ((NBTPrimitive) entry).getLong(), + FieldFilterNumber.LONG); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Long.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; } case 5: // Float { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), "" + ((NBTPrimitive) entry).getFloat(), FieldFilterNumber.FLOAT); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), + "" + ((NBTPrimitive) entry).getFloat(), + FieldFilterNumber.FLOAT); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Float.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; } case 6: // Double { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), "" + ((NBTPrimitive) entry).getDouble(), FieldFilterNumber.DOUBLE); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), + "" + ((NBTPrimitive) entry).getDouble(), + FieldFilterNumber.DOUBLE); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Double.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; } } } else { - PanelTextBox err = new PanelTextBox(new GuiRectangle(lw, i * 16 + 4, rw - 48, 12, 0), entry.getClass().getSimpleName() + " Not Supported Yet").setAlignment(1); + PanelTextBox err = new PanelTextBox(new GuiRectangle(lw, i * 16 + 4, rw - 48, 12, 0), + entry.getClass().getSimpleName() + " Not Supported Yet").setAlignment(1); err.setColor(PresetColor.TEXT_MAIN.getColor()); this.addPanel(err); } @@ -260,32 +300,44 @@ private void refreshList() { if (entry.getId() == 10) // Object { - PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw, i * 16, rw - 48, 16, 0), btnEdit, getButtonTitle((NBTTagCompound) entry), i); + PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw, i * 16, rw - 80, 16, 0), + btnEdit, + getButtonTitle((NBTTagCompound) entry), + i); this.addPanel(btn); - btn = new PanelButtonStorage<>(new GuiRectangle(width - 48, i * 16, 16, 16, 0), btnAdv, "...", i); + btn = new PanelButtonStorage<>(new GuiRectangle(width - 80, i * 16, 16, 16, 0), btnAdv, "...", i); this.addPanel(btn); } else if (entry.getId() == 9) // List { - PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), btnEdit, "List...", i); + PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw, i * 16, rw - 64, 16, 0), btnEdit, "List...", i); this.addPanel(btn); } else if (entry.getId() == 8) // Text { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 48, 16, 0), "" + ((NBTTagString) entry).getString(), FieldFilterString.INSTANCE); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 80, 16, 0), + "" + ((NBTTagString) entry).getString(), + FieldFilterString.INSTANCE); text.setCallback(new CallbackNBTTagString(list, i)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); - PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(width - 48, i * 16, 16, 16, 0), btnEdit, "Aa", i); + PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(width - 80, i * 16, 16, 16, 0), btnEdit, "Aa", i); this.addPanel(btn); } else if (entry.getId() == 1) // Byte/Boolean { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw / 2, 16, 0), "" + ((NBTPrimitive) entry).getByte(), FieldFilterNumber.BYTE); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw / 2, 16, 0), + "" + ((NBTPrimitive) entry).getByte(), + FieldFilterNumber.BYTE); this.addPanel(text); - PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw + rw / 2, i * 16, (int) Math.ceil(rw / 2F) - 32, 16, 0), btnEdit, ((NBTPrimitive) entry).getByte() > 0 ? "true" : "false", i); + PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw + rw / 2, i * 16, (int) Math.ceil(rw / 2F) - 64, 16, 0), + btnEdit, + ((NBTPrimitive) entry).getByte() > 0 ? "true" : "false", + i); this.addPanel(btn); - text.setMaxLength(Integer.MAX_VALUE).setCallback(new CallbackMulti<>(new CallbackNBTPrimitive<>(list, i, Byte.class), value -> btn.setText(value > 0 ? "true" : "false"))); + text.setMaxLength(Integer.MAX_VALUE) + .setCallback(new CallbackMulti<>(new CallbackNBTPrimitive<>(list, i, Byte.class), + value -> btn.setText(value > 0 ? "true" : "false"))); btn.setCallback(value -> { boolean flag = ((NBTTagByte) list.get(value)).getByte() > 0; list.set(value, new NBTTagByte(flag ? (byte) 0 : (byte) 1)); @@ -297,53 +349,75 @@ private void refreshList() { switch (entry.getId()) { case 2: // Short { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), "" + ((NBTPrimitive) entry).getShort(), FieldFilterNumber.SHORT); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 64, 16, 0), + "" + ((NBTPrimitive) entry).getShort(), + FieldFilterNumber.SHORT); text.setCallback(new CallbackNBTPrimitive<>(list, i, Short.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; } case 3: // Integer { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), "" + ((NBTPrimitive) entry).getInt(), FieldFilterNumber.INT); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 64, 16, 0), + "" + ((NBTPrimitive) entry).getInt(), + FieldFilterNumber.INT); text.setCallback(new CallbackNBTPrimitive<>(list, i, Integer.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; } case 4: // Long { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), "" + ((NBTPrimitive) entry).getLong(), FieldFilterNumber.LONG); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 64, 16, 0), + "" + ((NBTPrimitive) entry).getLong(), + FieldFilterNumber.LONG); text.setCallback(new CallbackNBTPrimitive<>(list, i, Long.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; } case 5: // Float { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), "" + ((NBTPrimitive) entry).getFloat(), FieldFilterNumber.FLOAT); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 64, 16, 0), + "" + ((NBTPrimitive) entry).getFloat(), + FieldFilterNumber.FLOAT); text.setCallback(new CallbackNBTPrimitive<>(list, i, Float.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; } case 6: // Double { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), "" + ((NBTPrimitive) entry).getDouble(), FieldFilterNumber.DOUBLE); + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 64, 16, 0), + "" + ((NBTPrimitive) entry).getDouble(), + FieldFilterNumber.DOUBLE); text.setCallback(new CallbackNBTPrimitive<>(list, i, Double.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; } } } else { - PanelTextBox err = new PanelTextBox(new GuiRectangle(lw, i * 16 + 4, rw - 48, 12, 0), entry.getClass().getSimpleName() + " Not Supported Yet").setAlignment(1); + PanelTextBox err = new PanelTextBox(new GuiRectangle(lw, i * 16 + 4, rw - 48, 12, 0), + entry.getClass().getSimpleName() + " Not Supported Yet").setAlignment(1); err.setColor(PresetColor.TEXT_MAIN.getColor()); this.addPanel(err); } - PanelButtonStorage btnI = new PanelButtonStorage<>(new GuiRectangle(width - 32, i * 16, 16, 16, 0), btnInsert, "+", i); - btnI.setTextHighlight(new GuiColorStatic(128, 128, 128, 255), new GuiColorStatic(0, 255, 0, 255), new GuiColorStatic(0, 255, 0, 255)); - this.addPanel(btnI); + PanelButton btnUp = new PanelButtonStorage<>(new GuiRectangle(width - 64, i * 16, 16, 16, 0), this.btnUp, "", i).setIcon(PresetIcon.ICON_UP + .getTexture()); + btnUp.setActive(i > 0); + this.addPanel(btnUp); - PanelButtonStorage btnD = new PanelButtonStorage<>(new GuiRectangle(width - 16, i * 16, 16, 16, 0), btnDelete, "x", i); - btnD.setTextHighlight(new GuiColorStatic(128, 128, 128, 255), new GuiColorStatic(255, 0, 0, 255), new GuiColorStatic(255, 0, 0, 255)); - this.addPanel(btnD); + PanelButton btnDown = new PanelButtonStorage<>(new GuiRectangle(width - 48, i * 16, 16, 16, 0), this.btnDown, "", i).setIcon( + PresetIcon.ICON_DOWN + .getTexture()); + btnDown.setActive(i < list.tagCount() - 1); + this.addPanel(btnDown); + + PanelButtonStorage btnInsert = new PanelButtonStorage<>(new GuiRectangle(width - 32, i * 16, 16, 16, 0), this.btnInsert, "+", i); + btnInsert.setTextHighlight(new GuiColorStatic(128, 128, 128, 255), new GuiColorStatic(0, 255, 0, 255), new GuiColorStatic(0, 255, 0, 255)); + this.addPanel(btnInsert); + + PanelButtonStorage btnDelete = new PanelButtonStorage<>(new GuiRectangle(width - 16, i * 16, 16, 16, 0), this.btnDelete, "x", i); + btnDelete.setTextHighlight(new GuiColorStatic(128, 128, 128, 255), new GuiColorStatic(255, 0, 0, 255), new GuiColorStatic(255, 0, 0, 255)); + this.addPanel(btnDelete); } this.addPanel(new PanelGeneric(new GuiRectangle(0, i * 16, width - 32, 16, 0), null)); // Keeps the list from auto resizing @@ -373,7 +447,8 @@ private void onButtonPress(PEventButton event) { IPanelButton btn = event.getButton(); NBTBase entry; - if (!(btn.getButtonID() == btnEdit || btn.getButtonID() == btnAdv || btn.getButtonID() == btnInsert || btn.getButtonID() == btnDelete)) { + if (!(btn.getButtonID() == btnEdit || btn.getButtonID() == btnAdv || btn.getButtonID() == btnUp || btn.getButtonID() == btnDown || btn.getButtonID() == + btnInsert || btn.getButtonID() == btnDelete)) { return; } @@ -406,9 +481,13 @@ private void onButtonPress(PEventButton event) { } else if (entry.getId() == 8) // Text editor { if (nbt.getId() == 10) { - mc.displayGuiScreen(new GuiTextEditor(mc.currentScreen, ((NBTTagString) entry).getString(), new CallbackNBTTagString((NBTTagCompound) nbt, ((PanelButtonStorage) btn).getStoredValue()))); + mc.displayGuiScreen(new GuiTextEditor(mc.currentScreen, + ((NBTTagString) entry).getString(), + new CallbackNBTTagString((NBTTagCompound) nbt, ((PanelButtonStorage) btn).getStoredValue()))); } else if (nbt.getId() == 9) { - mc.displayGuiScreen(new GuiTextEditor(mc.currentScreen, ((NBTTagString) entry).getString(), new CallbackNBTTagString((NBTTagList) nbt, ((PanelButtonStorage) btn).getStoredValue()))); + mc.displayGuiScreen(new GuiTextEditor(mc.currentScreen, + ((NBTTagString) entry).getString(), + new CallbackNBTTagString((NBTTagList) nbt, ((PanelButtonStorage) btn).getStoredValue()))); } } else if (entry.getId() == 7 || entry.getId() == 11 || entry.getId() == 12) // Byte/Integer/Long array { @@ -424,6 +503,28 @@ private void onButtonPress(PEventButton event) { // TODO: Replace with context based list editors mc.displayGuiScreen(new GuiNbtEditor(mc.currentScreen, (NBTTagList) entry, null)); } + } else if (btn.getButtonID() == btnUp) { + if (nbt.getId() == 9) { + NBTTagList tagList = (NBTTagList) nbt; + int index = ((PanelButtonStorage) btn).getStoredValue(); + if (index > 0) { + NBTBase tmp = tagList.get(index); + tagList.set(index, tagList.get(index - 1)); + tagList.set(index - 1, tmp); + refreshList(); + } + } + } else if (btn.getButtonID() == btnDown) { + if (nbt.getId() == 9) { + NBTTagList tagList = (NBTTagList) nbt; + int index = ((PanelButtonStorage) btn).getStoredValue(); + if (index < tagList.tagCount() - 1) { + NBTBase tmp = tagList.get(index); + tagList.set(index, tagList.get(index + 1)); + tagList.set(index + 1, tmp); + refreshList(); + } + } } else if (btn.getButtonID() == btnInsert) { if (nbt.getId() == 10) { mc.displayGuiScreen(new GuiNbtAdd(mc.currentScreen, (NBTTagCompound) nbt)); @@ -457,4 +558,5 @@ private String getButtonTitle(NBTTagCompound tag) { return "Object..."; } + } diff --git a/src/main/java/betterquesting/client/gui2/editors/tasks/GuiEditTaskRetrieval.java b/src/main/java/betterquesting/client/gui2/editors/tasks/GuiEditTaskRetrieval.java new file mode 100644 index 000000000..753bcd62b --- /dev/null +++ b/src/main/java/betterquesting/client/gui2/editors/tasks/GuiEditTaskRetrieval.java @@ -0,0 +1,120 @@ +package betterquesting.client.gui2.editors.tasks; + +import org.lwjgl.input.Keyboard; + +import betterquesting.EnumUtil; +import betterquesting.api.api.ApiReference; +import betterquesting.api.api.QuestingAPI; +import betterquesting.api.client.gui.misc.IVolatileScreen; +import betterquesting.api.enums.EnumLogic; +import betterquesting.api.network.QuestingPacket; +import betterquesting.api.questing.IQuest; +import betterquesting.api2.client.gui.GuiScreenCanvas; +import betterquesting.api2.client.gui.controls.PanelButton; +import betterquesting.api2.client.gui.controls.buttons.PanelButtonBoolean; +import betterquesting.api2.client.gui.controls.buttons.PanelButtonEnum; +import betterquesting.api2.client.gui.misc.GuiAlign; +import betterquesting.api2.client.gui.misc.GuiPadding; +import betterquesting.api2.client.gui.misc.GuiTransform; +import betterquesting.api2.client.gui.panels.CanvasTextured; +import betterquesting.api2.client.gui.panels.bars.PanelVScrollBar; +import betterquesting.api2.client.gui.panels.content.PanelTextBox; +import betterquesting.api2.client.gui.panels.lists.CanvasScrollingNameValue; +import betterquesting.api2.client.gui.themes.presets.PresetColor; +import betterquesting.api2.client.gui.themes.presets.PresetTexture; +import betterquesting.api2.storage.DBEntry; +import betterquesting.api2.utils.QuestTranslation; +import betterquesting.client.gui2.editors.nbt.GuiNbtEditor; +import betterquesting.core.ModReference; +import betterquesting.questing.tasks.TaskRetrieval; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ResourceLocation; + +public class GuiEditTaskRetrieval extends GuiScreenCanvas implements IVolatileScreen { + + private final DBEntry quest; + private final TaskRetrieval task; + private NBTTagCompound current; + + public GuiEditTaskRetrieval(GuiScreen parent, DBEntry quest, TaskRetrieval task) { + super(parent); + this.quest = quest; + this.task = task; + current = task.writeToNBT(new NBTTagCompound()); + } + + @Override + public void initPanel() { + super.initPanel(); + Keyboard.enableRepeatEvents(true); + + CanvasTextured cvBackground = new CanvasTextured(new GuiTransform(), PresetTexture.PANEL_MAIN.getTexture()); + this.addPanel(cvBackground); + + cvBackground.addPanel(new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(16, 16, 16, -32), 0), + QuestTranslation.translate("bq_standard.title.edit_retrieval_task")).setAlignment(1) + .setColor(PresetColor.TEXT_HEADER.getColor())); + + CanvasScrollingNameValue cvList = new CanvasScrollingNameValue(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(16, 32, 24, 48), 0)); + cvBackground.addPanel(cvList); + initItems(cvList); + + PanelVScrollBar scList = new PanelVScrollBar(new GuiTransform(GuiAlign.RIGHT_EDGE, new GuiPadding(-24, 32, 16, 48), 0)); + cvBackground.addPanel(scList); + cvList.setScrollDriverY(scList); + + PanelButton btnEditNBT = new PanelButton(new GuiTransform(GuiAlign.BOTTOM_CENTER, -100, -36, 200, 16, 0), + -1, + QuestTranslation.translate("bq_standard.btn.edit_nbt")); + btnEditNBT.setClickAction(btn -> { + mc.displayGuiScreen(new GuiNbtEditor(GuiEditTaskRetrieval.this, current, value -> current = value)); + }); + cvBackground.addPanel(btnEditNBT); + + cvBackground.addPanel(new PanelButton(new GuiTransform(GuiAlign.BOTTOM_CENTER, -100, -16, 200, 16, 0), -1, QuestTranslation.translate("gui.done")) { + + @Override + public void onButtonClick() { + task.readFromNBT(current); + sendChanges(); + mc.displayGuiScreen(parent); + } + + }); + } + + private void initItems(CanvasScrollingNameValue cvList) { + addBoolean("autoConsume", cvList); + addBoolean("consume", cvList); + cvList.addPanel("entryLogic", + rect -> new PanelButtonEnum<>(rect, -1, EnumUtil.getEnum(current.getString("entryLogic"), EnumLogic.AND)).setCallback(value -> current + .setString("entryLogic", value.name()))); + addBoolean("groupDetect", cvList); + addBoolean("ignoreNBT", cvList); + addBoolean("partialMatch", cvList); + cvList.addPanel("requiredItems", rect -> new PanelButton(rect, -1, "List...").setClickAction(b -> { + mc.displayGuiScreen(new GuiNbtEditor(mc.currentScreen, (NBTTagList) current.getTag("requiredItems"), null)); + })); + } + + private void addBoolean(String name, CanvasScrollingNameValue cvList) { + cvList.addPanel(name, rect -> new PanelButtonBoolean(rect, -1, current.getBoolean(name)).setCallback(value -> current.setBoolean(name, value))); + } + + private static final ResourceLocation QUEST_EDIT = new ResourceLocation(ModReference.MODID, "quest_edit"); // TODO: Really need to make the native packet types accessible in the API + + private void sendChanges() { + NBTTagCompound payload = new NBTTagCompound(); + NBTTagList dataList = new NBTTagList(); + NBTTagCompound entry = new NBTTagCompound(); + entry.setInteger("questID", quest.getID()); + entry.setTag("config", quest.getValue().writeToNBT(new NBTTagCompound())); + dataList.appendTag(entry); + payload.setTag("data", dataList); + payload.setInteger("action", 0); // Action: Update data + QuestingAPI.getAPI(ApiReference.PACKET_SENDER).sendToServer(new QuestingPacket(QUEST_EDIT, payload)); + } + +} diff --git a/src/main/java/betterquesting/client/ui_builder/GuiBuilderMain.java b/src/main/java/betterquesting/client/ui_builder/GuiBuilderMain.java index 121f5f721..75a8b20d9 100644 --- a/src/main/java/betterquesting/client/ui_builder/GuiBuilderMain.java +++ b/src/main/java/betterquesting/client/ui_builder/GuiBuilderMain.java @@ -641,7 +641,7 @@ private void openTrayNBT(NBTTagCompound tag) { btnTrayToggle.setIcon(PresetIcon.ICON_DOWN.getTexture()); // TODO: This panel doesn't work on its own - PanelScrollingNBT cvNbt = new PanelScrollingNBT(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(0, 0, 8, 0), 0), tag, 1, 2, 3, 4); + PanelScrollingNBT cvNbt = new PanelScrollingNBT(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(0, 0, 8, 0), 0), tag, 1, 2, 3, 4, 5, 6); cvPropTray.addPanel(cvNbt); PanelVScrollBar scPropTray = new PanelVScrollBar(new GuiTransform(GuiAlign.RIGHT_EDGE, new GuiPadding(-8, 0, 0, 0), 0)); From 76828a0c3fdcb0b6c97dd1ed11f2b5895ec2d5d0 Mon Sep 17 00:00:00 2001 From: KatatsumuriPan Date: Sat, 2 Mar 2024 17:48:27 +0900 Subject: [PATCH 2/7] Improve nbt editor gui --- .../client/gui2/editors/nbt/GuiNbtEditor.java | 88 +++++++- .../gui2/editors/nbt/GuiNbtListAdd.java | 212 ++++++++++++++++++ .../gui2/editors/nbt/PanelScrollingNBT.java | 84 ++++--- 3 files changed, 345 insertions(+), 39 deletions(-) create mode 100644 src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtListAdd.java diff --git a/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtEditor.java b/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtEditor.java index 1122b7a44..41ceda50d 100644 --- a/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtEditor.java +++ b/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtEditor.java @@ -1,10 +1,14 @@ package betterquesting.client.gui2.editors.nbt; +import org.lwjgl.input.Keyboard; + import betterquesting.api.client.gui.misc.IVolatileScreen; import betterquesting.api.misc.ICallback; +import betterquesting.api.utils.JsonHelper; import betterquesting.api2.client.gui.GuiScreenCanvas; import betterquesting.api2.client.gui.controls.IPanelButton; import betterquesting.api2.client.gui.controls.PanelButton; +import betterquesting.api2.client.gui.controls.callbacks.CallbackNBTTagString; import betterquesting.api2.client.gui.events.IPEventListener; import betterquesting.api2.client.gui.events.PEventBroadcaster; import betterquesting.api2.client.gui.events.PanelEvent; @@ -21,13 +25,87 @@ import betterquesting.api2.client.gui.themes.presets.PresetLine; import betterquesting.api2.client.gui.themes.presets.PresetTexture; import betterquesting.api2.utils.QuestTranslation; +import betterquesting.client.gui2.editors.GuiTextEditor; +import betterquesting.client.gui2.editors.nbt.callback.NbtEntityCallback; +import betterquesting.client.gui2.editors.nbt.callback.NbtFluidCallback; +import betterquesting.client.gui2.editors.nbt.callback.NbtItemCallback; import net.minecraft.client.gui.GuiScreen; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import org.lwjgl.input.Keyboard; +import net.minecraft.nbt.NBTTagString; public class GuiNbtEditor extends GuiScreenCanvas implements IPEventListener, IVolatileScreen { + + public static GuiScreen createEditorGui(GuiScreen parent, NBTTagCompound nbt, String targetKey) { + NBTBase entry; + if (nbt.getId() == 10) { + entry = nbt.getTag(targetKey); + } else { + throw new RuntimeException("Invalid NBT tag type!"); + } + + if (entry.getId() == 10) // Object editor + { + NBTTagCompound tag = (NBTTagCompound) entry; + + if (JsonHelper.isItem(tag)) { + return new GuiItemSelection(parent, tag, new NbtItemCallback(tag)); + } else if (JsonHelper.isFluid(tag)) { + return new GuiFluidSelection(parent, tag, new NbtFluidCallback(tag)); + } else if (JsonHelper.isEntity(tag)) { + return new GuiEntitySelection(parent, tag, new NbtEntityCallback(tag)); + } else { + return new GuiNbtEditor(parent, tag, null); + } + } else if (entry.getId() == 9) // List editor + { + return new GuiNbtEditor(parent, (NBTTagList) entry, null); + } else if (entry.getId() == 8) // Text editor + { + return new GuiTextEditor(parent, ((NBTTagString) entry).getString(), new CallbackNBTTagString(nbt, targetKey)); + } else if (entry.getId() == 7 || entry.getId() == 11 || entry.getId() == 12) // Byte/Integer/Long array + { + // TODO: Add supportted editors for Byte, Integer and Long Arrays + throw new UnsupportedOperationException("NBTTagByteArray, NBTTagIntArray and NBTTagLongArray are not currently supported yet"); + } else { + throw new RuntimeException("Invalid NBT tag type!"); + } + } + + public static GuiScreen createEditorGui(GuiScreen parent, NBTTagList nbt, int targetIndex) { + if (nbt.getId() != 9) + throw new RuntimeException("Invalid NBT tag type!"); + + NBTBase entry = nbt.get(targetIndex); + if (entry.getId() == 10) // Object editor + { + NBTTagCompound tag = (NBTTagCompound) entry; + + if (JsonHelper.isItem(tag)) { + return new GuiItemSelection(parent, tag, new NbtItemCallback(tag)); + } else if (JsonHelper.isFluid(tag)) { + return new GuiFluidSelection(parent, tag, new NbtFluidCallback(tag)); + } else if (JsonHelper.isEntity(tag)) { + return new GuiEntitySelection(parent, tag, new NbtEntityCallback(tag)); + } else { + return new GuiNbtEditor(parent, tag, null); + } + } else if (entry.getId() == 9) // List editor + { + return new GuiNbtEditor(parent, (NBTTagList) entry, null); + } else if (entry.getId() == 8) // Text editor + { + return new GuiTextEditor(parent, ((NBTTagString) entry).getString(), new CallbackNBTTagString(nbt, targetIndex)); + } else if (entry.getId() == 7 || entry.getId() == 11 || entry.getId() == 12) // Byte/Integer/Long array + { + // TODO: Add supportted editors for Byte, Integer and Long Arrays + throw new UnsupportedOperationException("NBTTagByteArray, NBTTagIntArray and NBTTagLongArray are not currently supported yet"); + } else { + throw new RuntimeException("Invalid NBT tag type!"); + } + } + private final NBTBase nbt; private final ICallback comCallback; private final ICallback lstCallback; @@ -55,12 +133,15 @@ public void initPanel() { Keyboard.enableRepeatEvents(true); // Background panel - CanvasTextured cvBackground = new CanvasTextured(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(0, 0, 0, 0), 0), PresetTexture.PANEL_MAIN.getTexture()); + CanvasTextured cvBackground = new CanvasTextured(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(0, 0, 0, 0), 0), + PresetTexture.PANEL_MAIN.getTexture()); this.addPanel(cvBackground); cvBackground.addPanel(new PanelButton(new GuiTransform(GuiAlign.BOTTOM_CENTER, -100, -16, 200, 16, 0), 0, QuestTranslation.translate("gui.back"))); - PanelTextBox txTitle = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 16, 0, -32), 0), QuestTranslation.translate(nbt.getId() == 9 ? "betterquesting.title.json_array" : "betterquesting.title.json_object")).setAlignment(1); + PanelTextBox txTitle = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 16, 0, -32), 0), + QuestTranslation.translate(nbt.getId() == 9 ? "betterquesting.title.json_array" : + "betterquesting.title.json_object")).setAlignment(1); txTitle.setColor(PresetColor.TEXT_HEADER.getColor()); cvBackground.addPanel(txTitle); @@ -114,4 +195,5 @@ private void onButtonPress(PEventButton event) { } } } + } diff --git a/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtListAdd.java b/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtListAdd.java new file mode 100644 index 000000000..249f76172 --- /dev/null +++ b/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtListAdd.java @@ -0,0 +1,212 @@ +package betterquesting.client.gui2.editors.nbt; + +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.util.vector.Vector4f; + +import betterquesting.api.client.gui.misc.IVolatileScreen; +import betterquesting.api.utils.BigItemStack; +import betterquesting.api.utils.JsonHelper; +import betterquesting.api2.client.gui.GuiScreenCanvas; +import betterquesting.api2.client.gui.controls.IPanelButton; +import betterquesting.api2.client.gui.controls.PanelButton; +import betterquesting.api2.client.gui.controls.PanelButtonStorage; +import betterquesting.api2.client.gui.controls.PanelTextField; +import betterquesting.api2.client.gui.events.IPEventListener; +import betterquesting.api2.client.gui.events.PEventBroadcaster; +import betterquesting.api2.client.gui.events.PanelEvent; +import betterquesting.api2.client.gui.events.types.PEventButton; +import betterquesting.api2.client.gui.misc.GuiAlign; +import betterquesting.api2.client.gui.misc.GuiPadding; +import betterquesting.api2.client.gui.misc.GuiTransform; +import betterquesting.api2.client.gui.panels.CanvasTextured; +import betterquesting.api2.client.gui.panels.bars.PanelVScrollBar; +import betterquesting.api2.client.gui.panels.content.PanelTextBox; +import betterquesting.api2.client.gui.panels.lists.CanvasScrolling; +import betterquesting.api2.client.gui.themes.presets.PresetColor; +import betterquesting.api2.client.gui.themes.presets.PresetTexture; +import betterquesting.api2.utils.QuestTranslation; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagByte; +import net.minecraft.nbt.NBTTagByteArray; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagDouble; +import net.minecraft.nbt.NBTTagFloat; +import net.minecraft.nbt.NBTTagInt; +import net.minecraft.nbt.NBTTagIntArray; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagLong; +import net.minecraft.nbt.NBTTagLongArray; +import net.minecraft.nbt.NBTTagShort; +import net.minecraft.nbt.NBTTagString; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +public class GuiNbtListAdd extends GuiScreenCanvas implements IPEventListener, IVolatileScreen { + + private final NBTTagList nbt; + private final int index; + + private PanelTextField flKey; + private final List> options = new ArrayList<>(); + private NBTBase selected = null; + //private PanelTextBox txtKey; + + public GuiNbtListAdd(GuiScreen parent, NBTTagList list, int index) { + super(parent); + this.nbt = list; + this.index = index; + } + + @Override + public void initPanel() { + super.initPanel(); + + PEventBroadcaster.INSTANCE.register(this, PEventButton.class); + Keyboard.enableRepeatEvents(true); + + // Background panel + CanvasTextured cvBackground = new CanvasTextured(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(0, 0, 0, 0), 0), + PresetTexture.PANEL_MAIN.getTexture()); + this.addPanel(cvBackground); + + cvBackground.addPanel(new PanelButton(new GuiTransform(GuiAlign.BOTTOM_CENTER, -100, -16, 100, 16, 0), 0, QuestTranslation.translate("gui.cancel"))); + + PanelTextBox panTxt = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 16, 0, -32), 0), + QuestTranslation.translate("betterquesting.title.json_add")).setAlignment(1); + panTxt.setColor(PresetColor.TEXT_HEADER.getColor()); + cvBackground.addPanel(panTxt); + + options.clear(); + + int n = 0; + + // Standard Objects + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n * 16, 100, 16, 0), + 2, + QuestTranslation.translate("betterquesting.btn.item"), + JsonHelper.ItemStackToJson(new BigItemStack(Blocks.STONE), new NBTTagCompound()))); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 100, n++ * 16, 92, 16, 0), + 2, + QuestTranslation.translate("betterquesting.btn.fluid"), + JsonHelper.FluidStackToJson(new FluidStack(FluidRegistry.WATER, 1000), new NBTTagCompound()))); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n++ * 16, 192, 16, 0), + 2, + QuestTranslation.translate("betterquesting.btn.entity"), + JsonHelper.EntityToJson(new EntityPig(mc.world), new NBTTagCompound()))); + + // NBT types + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n++ * 16, 192, 16, 0), + 2, + NBTTagString.class.getSimpleName(), + new NBTTagString(""))); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n++ * 16, 192, 16, 0), + 2, + NBTTagCompound.class.getSimpleName(), + new NBTTagCompound())); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n++ * 16, 192, 16, 0), + 2, + NBTTagList.class.getSimpleName(), + new NBTTagList())); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n++ * 16, 192, 16, 0), + 2, + NBTTagByte.class.getSimpleName(), + new NBTTagByte((byte) 0))); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n++ * 16, 192, 16, 0), + 2, + NBTTagShort.class.getSimpleName(), + new NBTTagShort((short) 0))); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n++ * 16, 192, 16, 0), + 2, + NBTTagInt.class.getSimpleName(), + new NBTTagInt(0))); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n++ * 16, 192, 16, 0), + 2, + NBTTagLong.class.getSimpleName(), + new NBTTagLong(0L))); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n++ * 16, 192, 16, 0), + 2, + NBTTagFloat.class.getSimpleName(), + new NBTTagFloat(0F))); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n++ * 16, 192, 16, 0), + 2, + NBTTagDouble.class.getSimpleName(), + new NBTTagDouble(0D))); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n++ * 16, 192, 16, 0), + 2, + NBTTagByteArray.class.getSimpleName(), + new NBTTagByteArray(new byte[0]))); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n++ * 16, 192, 16, 0), + 2, + NBTTagIntArray.class.getSimpleName(), + new NBTTagIntArray(new int[0]))); + options.add(new PanelButtonStorage<>(new GuiTransform(GuiAlign.MID_CENTER, 0, n * 16, 192, 16, 0), + 2, + NBTTagLongArray.class.getSimpleName(), + new NBTTagLongArray(new long[0]))); + + CanvasScrolling cvOptions = new CanvasScrolling(new GuiTransform(new Vector4f(0.5F, 0F, 0.5F, 1F), new GuiPadding(-100, 64, -92, 32), 0)); + cvBackground.addPanel(cvOptions); + + for (PanelButtonStorage btn : options) { + cvOptions.addPanel(btn); + } + + PanelVScrollBar scOptions = new PanelVScrollBar(new GuiTransform(new Vector4f(0.5F, 0F, 0.5F, 1F), new GuiPadding(92, 64, -100, 32), 0)); + cvBackground.addPanel(scOptions); + cvOptions.setScrollDriverY(scOptions); + } + + @Override + public void onPanelEvent(PanelEvent event) { + if (event instanceof PEventButton) { + onButtonPress((PEventButton) event); + } + } + + @SuppressWarnings("unchecked") + private void onButtonPress(PEventButton event) { + IPanelButton btn = event.getButton(); + + switch (btn.getButtonID()) { + case 0: // Cancel + { + mc.displayGuiScreen(this.parent); + break; + } + case 1: // Confirm + { + } + case 2: // Select this + { + selected = ((PanelButtonStorage) btn).getStoredValue(); + + for (PanelButtonStorage b : options) { + b.setActive(true); + } + btn.setActive(false); + + if (selected == null) + return; + + if (index == nbt.tagCount()) { + nbt.appendTag(selected); + } else { + // Shift entries up manually + for (int n = nbt.tagCount() - 1; n >= index; n--) { + nbt.set(n + 1, nbt.get(n)); + } + nbt.set(index, selected); + } + mc.displayGuiScreen(GuiNbtEditor.createEditorGui(this.parent, nbt, index)); + break; + } + } + } + +} diff --git a/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java b/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java index 0ceaf2621..bd7ffd27b 100644 --- a/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java +++ b/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java @@ -1,5 +1,6 @@ package betterquesting.client.gui2.editors.nbt; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; @@ -32,18 +33,17 @@ import betterquesting.api2.client.gui.themes.presets.PresetColor; import betterquesting.api2.client.gui.themes.presets.PresetIcon; import betterquesting.api2.utils.QuestTranslation; -import betterquesting.client.gui2.editors.GuiTextEditor; -import betterquesting.client.gui2.editors.nbt.callback.NbtEntityCallback; -import betterquesting.client.gui2.editors.nbt.callback.NbtFluidCallback; -import betterquesting.client.gui2.editors.nbt.callback.NbtItemCallback; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTPrimitive; import net.minecraft.nbt.NBTTagByte; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; +import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; // Self contained editing panel @@ -462,37 +462,12 @@ private void onButtonPress(PEventButton event) { if (btn.getButtonID() == btnEdit) // Context dependent action/toggle { - if (entry.getId() == 10) // Object editor - { - NBTTagCompound tag = (NBTTagCompound) entry; - - if (JsonHelper.isItem(tag)) { - mc.displayGuiScreen(new GuiItemSelection(mc.currentScreen, tag, new NbtItemCallback(tag))); - } else if (JsonHelper.isFluid(tag)) { - mc.displayGuiScreen(new GuiFluidSelection(mc.currentScreen, tag, new NbtFluidCallback(tag))); - } else if (JsonHelper.isEntity(tag)) { - mc.displayGuiScreen(new GuiEntitySelection(mc.currentScreen, tag, new NbtEntityCallback(tag))); - } else { - mc.displayGuiScreen(new GuiNbtEditor(mc.currentScreen, tag, null)); - } - } else if (entry.getId() == 9) // List editor - { - mc.displayGuiScreen(new GuiNbtEditor(mc.currentScreen, (NBTTagList) entry, null)); - } else if (entry.getId() == 8) // Text editor - { - if (nbt.getId() == 10) { - mc.displayGuiScreen(new GuiTextEditor(mc.currentScreen, - ((NBTTagString) entry).getString(), - new CallbackNBTTagString((NBTTagCompound) nbt, ((PanelButtonStorage) btn).getStoredValue()))); - } else if (nbt.getId() == 9) { - mc.displayGuiScreen(new GuiTextEditor(mc.currentScreen, - ((NBTTagString) entry).getString(), - new CallbackNBTTagString((NBTTagList) nbt, ((PanelButtonStorage) btn).getStoredValue()))); - } - } else if (entry.getId() == 7 || entry.getId() == 11 || entry.getId() == 12) // Byte/Integer/Long array - { - // TODO: Add supportted editors for Byte, Integer and Long Arrays - throw new UnsupportedOperationException("NBTTagByteArray, NBTTagIntArray and NBTTagLongArray are not currently supported yet"); + if (nbt.getId() == 10) { + mc.displayGuiScreen(GuiNbtEditor.createEditorGui(mc.currentScreen, (NBTTagCompound) nbt, ((PanelButtonStorage) btn).getStoredValue())); + } else if (nbt.getId() == 9) { + mc.displayGuiScreen(GuiNbtEditor.createEditorGui(mc.currentScreen, (NBTTagList) nbt, ((PanelButtonStorage) btn).getStoredValue())); + } else { + throw new RuntimeException("Invalid NBT tag type!"); } } else if (btn.getButtonID() == btnAdv) // Open advanced editor (on supported types) { @@ -529,7 +504,22 @@ private void onButtonPress(PEventButton event) { if (nbt.getId() == 10) { mc.displayGuiScreen(new GuiNbtAdd(mc.currentScreen, (NBTTagCompound) nbt)); } else if (nbt.getId() == 9) { - mc.displayGuiScreen(new GuiNbtAdd(mc.currentScreen, (NBTTagList) nbt, ((PanelButtonStorage) btn).getStoredValue())); + NBTTagList tagList = (NBTTagList) nbt; + int index = ((PanelButtonStorage) btn).getStoredValue(); + if (tagList.tagCount() > 0) { + if (index == tagList.tagCount()) { + tagList.appendTag(createDefaultNbtTag(tagList.get(0))); + } else { + // Shift entries up manually + for (int n = tagList.tagCount() - 1; n >= index; n--) { + tagList.set(n + 1, tagList.get(n)); + } + tagList.set(index, createDefaultNbtTag(tagList.get(0))); + } + mc.displayGuiScreen(GuiNbtEditor.createEditorGui(mc.currentScreen, tagList, index)); + } else { + mc.displayGuiScreen(new GuiNbtListAdd(mc.currentScreen, tagList, index)); + } } } else if (btn.getButtonID() == btnDelete) { if (nbt.getId() == 10) { @@ -559,4 +549,26 @@ private String getButtonTitle(NBTTagCompound tag) { return "Object..."; } + private static NBTBase createDefaultNbtTag(NBTBase base) { + if (base.getId() == 10) { + NBTTagCompound tag = (NBTTagCompound) base; + + if (JsonHelper.isItem(tag)) { + return JsonHelper.ItemStackToJson(new BigItemStack(Blocks.STONE), new NBTTagCompound()); + } else if (JsonHelper.isFluid(tag)) { + return JsonHelper.FluidStackToJson(new FluidStack(FluidRegistry.WATER, 1000), new NBTTagCompound()); + } else if (JsonHelper.isEntity(tag)) { + return JsonHelper.EntityToJson(new EntityPig(Minecraft.getMinecraft().world), new NBTTagCompound()); + } else { + return new NBTTagCompound(); + } + } else { + try { + return base.getClass().getConstructor().newInstance(); + } catch (InstantiationException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + } + } From defe5ae32e2a211fe7c07b7f8930b42e64daf38e Mon Sep 17 00:00:00 2001 From: KatatsumuriPan Date: Sat, 2 Mar 2024 18:09:41 +0900 Subject: [PATCH 3/7] Fix inserting a nbt to NBTTagList --- .../{NBTReplaceUtil.java => NBTUtil.java} | 17 ++++++++- .../gui2/editors/nbt/GuiNbtListAdd.java | 11 +----- .../gui2/editors/nbt/PanelScrollingNBT.java | 11 +----- .../questing/rewards/RewardChoice.java | 38 +++++++++---------- .../questing/rewards/RewardItem.java | 28 +++++++------- 5 files changed, 52 insertions(+), 53 deletions(-) rename src/main/java/betterquesting/{NBTReplaceUtil.java => NBTUtil.java} (70%) diff --git a/src/main/java/betterquesting/NBTReplaceUtil.java b/src/main/java/betterquesting/NBTUtil.java similarity index 70% rename from src/main/java/betterquesting/NBTReplaceUtil.java rename to src/main/java/betterquesting/NBTUtil.java index 4c95302ca..d8abc943f 100644 --- a/src/main/java/betterquesting/NBTReplaceUtil.java +++ b/src/main/java/betterquesting/NBTUtil.java @@ -5,7 +5,8 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; -public class NBTReplaceUtil { +public class NBTUtil { + @SuppressWarnings("unchecked") public static T replaceStrings(T baseTag, String key, String replace) { if (baseTag == null) { @@ -31,4 +32,18 @@ public static T replaceStrings(T baseTag, String key, String return baseTag; // Either isn't a string or doesn't contain one } + + public static void insertTag(NBTTagList tagList, int index, NBTBase nbt) { + if (index == tagList.tagCount()) { + tagList.appendTag(nbt); + } else { + tagList.appendTag(tagList.get(tagList.tagCount() - 1)); + // Shift entries up manually + for (int n = tagList.tagCount() - 2; n >= index; n--) { + tagList.set(n + 1, tagList.get(n)); + } + tagList.set(index, nbt); + } + } + } diff --git a/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtListAdd.java b/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtListAdd.java index 249f76172..a115bb866 100644 --- a/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtListAdd.java +++ b/src/main/java/betterquesting/client/gui2/editors/nbt/GuiNbtListAdd.java @@ -6,6 +6,7 @@ import org.lwjgl.input.Keyboard; import org.lwjgl.util.vector.Vector4f; +import betterquesting.NBTUtil; import betterquesting.api.client.gui.misc.IVolatileScreen; import betterquesting.api.utils.BigItemStack; import betterquesting.api.utils.JsonHelper; @@ -194,15 +195,7 @@ private void onButtonPress(PEventButton event) { if (selected == null) return; - if (index == nbt.tagCount()) { - nbt.appendTag(selected); - } else { - // Shift entries up manually - for (int n = nbt.tagCount() - 1; n >= index; n--) { - nbt.set(n + 1, nbt.get(n)); - } - nbt.set(index, selected); - } + NBTUtil.insertTag(nbt, index, selected); mc.displayGuiScreen(GuiNbtEditor.createEditorGui(this.parent, nbt, index)); break; } diff --git a/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java b/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java index bd7ffd27b..94329da64 100644 --- a/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java +++ b/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java @@ -9,6 +9,7 @@ import org.lwjgl.input.Keyboard; +import betterquesting.NBTUtil; import betterquesting.api.utils.BigItemStack; import betterquesting.api.utils.JsonHelper; import betterquesting.api2.client.gui.controls.IPanelButton; @@ -507,15 +508,7 @@ private void onButtonPress(PEventButton event) { NBTTagList tagList = (NBTTagList) nbt; int index = ((PanelButtonStorage) btn).getStoredValue(); if (tagList.tagCount() > 0) { - if (index == tagList.tagCount()) { - tagList.appendTag(createDefaultNbtTag(tagList.get(0))); - } else { - // Shift entries up manually - for (int n = tagList.tagCount() - 1; n >= index; n--) { - tagList.set(n + 1, tagList.get(n)); - } - tagList.set(index, createDefaultNbtTag(tagList.get(0))); - } + NBTUtil.insertTag(tagList, index, createDefaultNbtTag(tagList.get(0))); mc.displayGuiScreen(GuiNbtEditor.createEditorGui(mc.currentScreen, tagList, index)); } else { mc.displayGuiScreen(new GuiNbtListAdd(mc.currentScreen, tagList, index)); diff --git a/src/main/java/betterquesting/questing/rewards/RewardChoice.java b/src/main/java/betterquesting/questing/rewards/RewardChoice.java index 1913e6bb1..6d6b5386b 100644 --- a/src/main/java/betterquesting/questing/rewards/RewardChoice.java +++ b/src/main/java/betterquesting/questing/rewards/RewardChoice.java @@ -1,6 +1,13 @@ package betterquesting.questing.rewards; -import betterquesting.NBTReplaceUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.TreeMap; +import java.util.UUID; + +import org.apache.logging.log4j.Level; + +import betterquesting.NBTUtil; import betterquesting.api.api.QuestingAPI; import betterquesting.api.questing.IQuest; import betterquesting.api.questing.rewards.IReward; @@ -20,14 +27,9 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import org.apache.logging.log4j.Level; - -import java.util.ArrayList; -import java.util.List; -import java.util.TreeMap; -import java.util.UUID; public class RewardChoice implements IReward { + /** * The selected reward index to be claimed.
* Should only ever be used client side. NEVER onHit server @@ -36,14 +38,10 @@ public class RewardChoice implements IReward { private final TreeMap selected = new TreeMap<>(); @Override - public ResourceLocation getFactoryID() { - return FactoryRewardChoice.INSTANCE.getRegistryName(); - } + public ResourceLocation getFactoryID() { return FactoryRewardChoice.INSTANCE.getRegistryName(); } @Override - public String getUnlocalisedName() { - return "bq_standard.reward.choice"; - } + public String getUnlocalisedName() { return "bq_standard.reward.choice"; } public int getSelecton(UUID uuid) { if (!selected.containsKey(uuid)) { @@ -59,7 +57,8 @@ public void setSelection(UUID uuid, int value) { @Override public boolean canClaim(EntityPlayer player, DBEntry quest) { - if (!selected.containsKey(QuestingAPI.getQuestingUUID(player))) return false; + if (!selected.containsKey(QuestingAPI.getQuestingUUID(player))) + return false; int tmp = selected.get(QuestingAPI.getQuestingUUID(player)); return choices.size() <= 0 || (tmp >= 0 && tmp < choices.size()); @@ -92,8 +91,8 @@ public void claimReward(EntityPlayer player, DBEntry quest) { for (ItemStack s : stack.getCombinedStacks()) { if (s.getTagCompound() != null) { - s.setTagCompound(NBTReplaceUtil.replaceStrings(s.getTagCompound(), "VAR_NAME", player.getName())); - s.setTagCompound(NBTReplaceUtil.replaceStrings(s.getTagCompound(), "VAR_UUID", QuestingAPI.getQuestingUUID(player).toString())); + s.setTagCompound(NBTUtil.replaceStrings(s.getTagCompound(), "VAR_NAME", player.getName())); + s.setTagCompound(NBTUtil.replaceStrings(s.getTagCompound(), "VAR_UUID", QuestingAPI.getQuestingUUID(player).toString())); } if (!player.inventory.addItemStackToInventory(s)) { @@ -121,15 +120,14 @@ public NBTTagCompound writeToNBT(NBTTagCompound nbt) { return nbt; } - @Override - @SideOnly(Side.CLIENT) + @Override @SideOnly(Side.CLIENT) public IGuiPanel getRewardGui(IGuiRect rect, DBEntry quest) { return new PanelRewardChoice(rect, quest, this); } - @Override - @SideOnly(Side.CLIENT) + @Override @SideOnly(Side.CLIENT) public GuiScreen getRewardEditor(GuiScreen screen, DBEntry quest) { return null; } + } diff --git a/src/main/java/betterquesting/questing/rewards/RewardItem.java b/src/main/java/betterquesting/questing/rewards/RewardItem.java index e0a061680..b7b920e87 100644 --- a/src/main/java/betterquesting/questing/rewards/RewardItem.java +++ b/src/main/java/betterquesting/questing/rewards/RewardItem.java @@ -1,6 +1,11 @@ package betterquesting.questing.rewards; -import betterquesting.NBTReplaceUtil; +import java.util.ArrayList; +import java.util.List; + +import org.apache.logging.log4j.Level; + +import betterquesting.NBTUtil; import betterquesting.api.api.QuestingAPI; import betterquesting.api.questing.IQuest; import betterquesting.api.questing.rewards.IReward; @@ -18,23 +23,16 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.ResourceLocation; -import org.apache.logging.log4j.Level; - -import java.util.ArrayList; -import java.util.List; public class RewardItem implements IReward { + public final List items = new ArrayList<>(); @Override - public ResourceLocation getFactoryID() { - return FactoryRewardItem.INSTANCE.getRegistryName(); - } + public ResourceLocation getFactoryID() { return FactoryRewardItem.INSTANCE.getRegistryName(); } @Override - public String getUnlocalisedName() { - return "bq_standard.reward.item"; - } + public String getUnlocalisedName() { return "bq_standard.reward.item"; } @Override public boolean canClaim(EntityPlayer player, DBEntry quest) { @@ -48,8 +46,8 @@ public void claimReward(EntityPlayer player, DBEntry quest) { for (ItemStack s : stack.getCombinedStacks()) { if (s.getTagCompound() != null) { - s.setTagCompound(NBTReplaceUtil.replaceStrings(s.getTagCompound(), "VAR_NAME", player.getName())); - s.setTagCompound(NBTReplaceUtil.replaceStrings(s.getTagCompound(), "VAR_UUID", QuestingAPI.getQuestingUUID(player).toString())); + s.setTagCompound(NBTUtil.replaceStrings(s.getTagCompound(), "VAR_NAME", player.getName())); + s.setTagCompound(NBTUtil.replaceStrings(s.getTagCompound(), "VAR_UUID", QuestingAPI.getQuestingUUID(player).toString())); } if (!player.inventory.addItemStackToInventory(s)) { @@ -66,7 +64,8 @@ public void readFromNBT(NBTTagCompound nbt) { for (int i = 0; i < rList.tagCount(); i++) { try { BigItemStack item = JsonHelper.JsonToItemStack(rList.getCompoundTagAt(i)); - if (item != null) items.add(item); + if (item != null) + items.add(item); } catch (Exception e) { BetterQuesting.logger.log(Level.ERROR, "Unable to load reward item data", e); } @@ -92,4 +91,5 @@ public IGuiPanel getRewardGui(IGuiRect rect, DBEntry quest) { public GuiScreen getRewardEditor(GuiScreen screen, DBEntry quest) { return null; } + } From c63fb21786d40fde9cde5a4028ee40577a0b9c06 Mon Sep 17 00:00:00 2001 From: KatatsumuriPan Date: Sat, 2 Mar 2024 18:26:18 +0900 Subject: [PATCH 4/7] Remove unnecessary add button --- .../gui2/editors/nbt/PanelScrollingNBT.java | 32 ++++++++----------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java b/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java index 94329da64..411855a48 100644 --- a/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java +++ b/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java @@ -169,27 +169,27 @@ private void refreshList() { if (entry.getId() == 10) // Object { - PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw, i * 16, rw - 48, 16, 0), + PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), btnEdit, getButtonTitle((NBTTagCompound) entry), k); this.addPanel(btn); - btn = new PanelButtonStorage<>(new GuiRectangle(width - 48, i * 16, 16, 16, 0), btnAdv, "...", k); + btn = new PanelButtonStorage<>(new GuiRectangle(width - 32, i * 16, 16, 16, 0), btnAdv, "...", k); this.addPanel(btn); } else if (entry.getId() == 9) // List { - PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), btnEdit, "List...", k); + PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw, i * 16, rw - 16, 16, 0), btnEdit, "List...", k); this.addPanel(btn); } else if (entry.getId() == 8) // Text { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 48, 16, 0), + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), "" + ((NBTTagString) entry).getString(), FieldFilterString.INSTANCE); text.setCallback(new CallbackNBTTagString(tag, k)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); - PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(width - 48, i * 16, 16, 16, 0), btnEdit, "Aa", k); + PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(width - 32, i * 16, 16, 16, 0), btnEdit, "Aa", k); this.addPanel(btn); } else if (entry.getId() == 1) // Byte/Boolean { @@ -199,7 +199,7 @@ private void refreshList() { text.setMaxLength(Integer.MAX_VALUE); // Put callback here this.addPanel(text); - PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw + rw / 2, i * 16, (int) Math.ceil(rw / 2F) - 32, 16, 0), + PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw + rw / 2, i * 16, (int) Math.ceil(rw / 2F) - 16, 16, 0), btnEdit, ((NBTPrimitive) entry).getByte() > 0 ? "true" : "false", k); @@ -219,7 +219,7 @@ private void refreshList() { switch (entry.getId()) { case 2: // Short { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 16, 16, 0), "" + ((NBTPrimitive) entry).getShort(), FieldFilterNumber.SHORT); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Short.class)).setMaxLength(Integer.MAX_VALUE); @@ -228,7 +228,7 @@ private void refreshList() { } case 3: // Integer { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 16, 16, 0), "" + ((NBTPrimitive) entry).getInt(), FieldFilterNumber.INT); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Integer.class)).setMaxLength(Integer.MAX_VALUE); @@ -237,7 +237,7 @@ private void refreshList() { } case 4: // Long { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 16, 16, 0), "" + ((NBTPrimitive) entry).getLong(), FieldFilterNumber.LONG); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Long.class)).setMaxLength(Integer.MAX_VALUE); @@ -246,7 +246,7 @@ private void refreshList() { } case 5: // Float { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 16, 16, 0), "" + ((NBTPrimitive) entry).getFloat(), FieldFilterNumber.FLOAT); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Float.class)).setMaxLength(Integer.MAX_VALUE); @@ -255,7 +255,7 @@ private void refreshList() { } case 6: // Double { - PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), + PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 16, 16, 0), "" + ((NBTPrimitive) entry).getDouble(), FieldFilterNumber.DOUBLE); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Double.class)).setMaxLength(Integer.MAX_VALUE); @@ -264,16 +264,12 @@ private void refreshList() { } } } else { - PanelTextBox err = new PanelTextBox(new GuiRectangle(lw, i * 16 + 4, rw - 48, 12, 0), + PanelTextBox err = new PanelTextBox(new GuiRectangle(lw, i * 16 + 4, rw - 16, 12, 0), entry.getClass().getSimpleName() + " Not Supported Yet").setAlignment(1); err.setColor(PresetColor.TEXT_MAIN.getColor()); this.addPanel(err); } - PanelButtonStorage btnI = new PanelButtonStorage<>(new GuiRectangle(width - 32, i * 16, 16, 16, 0), btnInsert, "+", k); - btnI.setTextHighlight(new GuiColorStatic(128, 128, 128, 255), new GuiColorStatic(0, 255, 0, 255), new GuiColorStatic(0, 255, 0, 255)); - this.addPanel(btnI); - PanelButtonStorage btnD = new PanelButtonStorage<>(new GuiRectangle(width - 16, i * 16, 16, 16, 0), btnDelete, "x", k); btnD.setTextHighlight(new GuiColorStatic(128, 128, 128, 255), new GuiColorStatic(255, 0, 0, 255), new GuiColorStatic(255, 0, 0, 255)); this.addPanel(btnD); @@ -281,9 +277,9 @@ private void refreshList() { i++; } - this.addPanel(new PanelGeneric(new GuiRectangle(0, i * 16, width - 32, 16, 0), null)); // Keeps the list from auto resizing + this.addPanel(new PanelGeneric(new GuiRectangle(0, i * 16, width - 16, 16, 0), null)); // Keeps the list from auto resizing - PanelButtonStorage btnI = new PanelButtonStorage<>(new GuiRectangle(width - 32, i * 16, 16, 16, 0), btnInsert, "+", ""); + PanelButtonStorage btnI = new PanelButtonStorage<>(new GuiRectangle(width - 16, i * 16, 16, 16, 0), btnInsert, "+", ""); btnI.setTextHighlight(new GuiColorStatic(128, 128, 128, 255), new GuiColorStatic(0, 255, 0, 255), new GuiColorStatic(0, 255, 0, 255)); this.addPanel(btnI); } else if (nbt.getId() == 9) // NBTTagList From 03be3ebda068f859c6ab3dd08a48c55e16c35581 Mon Sep 17 00:00:00 2001 From: KatatsumuriPan Date: Sat, 2 Mar 2024 22:30:41 +0900 Subject: [PATCH 5/7] Revert GuiQuestLinesEditor --- .../gui2/editors/GuiQuestLinesEditor.java | 116 +++++------------- 1 file changed, 32 insertions(+), 84 deletions(-) diff --git a/src/main/java/betterquesting/client/gui2/editors/GuiQuestLinesEditor.java b/src/main/java/betterquesting/client/gui2/editors/GuiQuestLinesEditor.java index 783a0318d..eb0d5b157 100644 --- a/src/main/java/betterquesting/client/gui2/editors/GuiQuestLinesEditor.java +++ b/src/main/java/betterquesting/client/gui2/editors/GuiQuestLinesEditor.java @@ -1,10 +1,5 @@ package betterquesting.client.gui2.editors; -import java.util.List; - -import org.lwjgl.input.Keyboard; -import org.lwjgl.util.vector.Vector4f; - import betterquesting.api.client.gui.misc.INeedsRefresh; import betterquesting.api.client.gui.misc.IVolatileScreen; import betterquesting.api.enums.EnumQuestVisibility; @@ -20,11 +15,7 @@ import betterquesting.api2.client.gui.events.PEventBroadcaster; import betterquesting.api2.client.gui.events.PanelEvent; import betterquesting.api2.client.gui.events.types.PEventButton; -import betterquesting.api2.client.gui.misc.GuiAlign; -import betterquesting.api2.client.gui.misc.GuiPadding; -import betterquesting.api2.client.gui.misc.GuiRectangle; -import betterquesting.api2.client.gui.misc.GuiTransform; -import betterquesting.api2.client.gui.misc.IGuiRect; +import betterquesting.api2.client.gui.misc.*; import betterquesting.api2.client.gui.panels.CanvasEmpty; import betterquesting.api2.client.gui.panels.CanvasTextured; import betterquesting.api2.client.gui.panels.bars.PanelVScrollBar; @@ -44,9 +35,12 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import org.lwjgl.input.Keyboard; +import org.lwjgl.util.vector.Vector4f; -public class GuiQuestLinesEditor extends GuiScreenCanvas implements IPEventListener, IVolatileScreen, INeedsRefresh { +import java.util.List; +public class GuiQuestLinesEditor extends GuiScreenCanvas implements IPEventListener, IVolatileScreen, INeedsRefresh { private CanvasScrolling lineList; private PanelTextField tfName; private PanelTextField tfDesc; @@ -79,10 +73,8 @@ public void refreshGui() { btnIcon.setActive(true); btnVis.setActive(true); btnVis.setText(QuestTranslation.translate("betterquesting.btn.show") + ": " + selected.getProperty(NativeProps.VISIBILITY)); - if (!tfName.isFocused()) - tfName.setText(selected.getUnlocalisedName()); - if (!tfDesc.isFocused()) - tfDesc.setText(selected.getUnlocalisedDescription()); + if (!tfName.isFocused()) tfName.setText(selected.getUnlocalisedName()); + if (!tfDesc.isFocused()) tfDesc.setText(selected.getUnlocalisedDescription()); } } @@ -97,12 +89,10 @@ public void initPanel() { Keyboard.enableRepeatEvents(true); // Background panel - CanvasTextured cvBackground = new CanvasTextured(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(0, 0, 0, 0), 0), - PresetTexture.PANEL_MAIN.getTexture()); + CanvasTextured cvBackground = new CanvasTextured(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(0, 0, 0, 0), 0), PresetTexture.PANEL_MAIN.getTexture()); this.addPanel(cvBackground); - PanelTextBox panTxt = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 16, 0, -32), 0), - QuestTranslation.translate("betterquesting.title.edit_line1")).setAlignment(1); + PanelTextBox panTxt = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 16, 0, -32), 0), QuestTranslation.translate("betterquesting.title.edit_line1")).setAlignment(1); panTxt.setColor(PresetColor.TEXT_HEADER.getColor()); cvBackground.addPanel(panTxt); @@ -117,14 +107,10 @@ public void initPanel() { cvBackground.addPanel(scList); lineList.setScrollDriverY(scList); - PanelButton btnAdd = new PanelButton(new GuiTransform(new Vector4f(0F, 1F, 0.25F, 1F), new GuiPadding(16, -40, 0, 24), 0), - 1, - QuestTranslation.translate("betterquesting.btn.new")); + PanelButton btnAdd = new PanelButton(new GuiTransform(new Vector4f(0F, 1F, 0.25F, 1F), new GuiPadding(16, -40, 0, 24), 0), 1, QuestTranslation.translate("betterquesting.btn.new")); cvBackground.addPanel(btnAdd); - PanelButton btnImport = new PanelButton(new GuiTransform(new Vector4f(0.25F, 1F, 0.5F, 1F), new GuiPadding(0, -40, 16, 24), 0), - 2, - QuestTranslation.translate("betterquesting.btn.import")); + PanelButton btnImport = new PanelButton(new GuiTransform(new Vector4f(0.25F, 1F, 0.5F, 1F), new GuiPadding(0, -40, 16, 24), 0), 2, QuestTranslation.translate("betterquesting.btn.import")); cvBackground.addPanel(btnImport); // Right side @@ -132,16 +118,14 @@ public void initPanel() { CanvasEmpty cvRight = new CanvasEmpty(new GuiTransform(GuiAlign.HALF_RIGHT, new GuiPadding(8, 32, 16, 24), 0)); cvBackground.addPanel(cvRight); - PanelTextBox txtName = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 4, 0, -16), 0), - QuestTranslation.translate("betterquesting.gui.name")); + PanelTextBox txtName = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 4, 0, -16), 0), QuestTranslation.translate("betterquesting.gui.name")); txtName.setColor(PresetColor.TEXT_MAIN.getColor()); cvRight.addPanel(txtName); tfName = new PanelTextField<>(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 16, 0, -32), 0), "", FieldFilterString.INSTANCE); cvRight.addPanel(tfName); - PanelTextBox txtDesc = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 36, 0, -48), 0), - QuestTranslation.translate("betterquesting.gui.description")); + PanelTextBox txtDesc = new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 36, 0, -48), 0), QuestTranslation.translate("betterquesting.gui.description")); txtDesc.setColor(PresetColor.TEXT_MAIN.getColor()); cvRight.addPanel(txtDesc); @@ -149,56 +133,41 @@ public void initPanel() { tfDesc.setMaxLength(Integer.MAX_VALUE); cvRight.addPanel(tfDesc); - btnIcon = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 80, 0, -96), 0), - -1, - QuestTranslation.translate("betterquesting.btn.icon")) { - + btnIcon = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 80, 0, -96), 0), -1, QuestTranslation.translate("betterquesting.btn.icon")) { @Override public void onButtonClick() { - if (selected == null) - return; + if (selected == null) return; mc.displayGuiScreen(new GuiItemSelection(GuiQuestLinesEditor.this, selected.getProperty(NativeProps.ICON), value -> { selected.setProperty(NativeProps.ICON, value); SendChanges(new DBEntry<>(selID, selected)); })); } - }; btnIcon.setActive(selected != null); cvRight.addPanel(btnIcon); - btnVis = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 96, 0, -112), 0), - -1, - QuestTranslation.translate("betterquesting.btn.show") + ": " + (selected == null ? EnumQuestVisibility.NORMAL : selected - .getProperty(NativeProps.VISIBILITY))) { - + btnVis = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 96, 0, -112), 0), -1, QuestTranslation.translate("betterquesting.btn.show") + ": " + (selected == null ? EnumQuestVisibility.NORMAL : selected.getProperty(NativeProps.VISIBILITY))) { @Override public void onButtonClick() { - if (selected == null) - return; + if (selected == null) return; EnumQuestVisibility[] visList = EnumQuestVisibility.values(); EnumQuestVisibility vis = selected.getProperty(NativeProps.VISIBILITY); vis = visList[(vis.ordinal() + 1) % visList.length]; selected.setProperty(NativeProps.VISIBILITY, vis); this.setText(QuestTranslation.translate("betterquesting.btn.show") + ": " + vis); } - }; btnVis.setActive(selected != null); cvRight.addPanel(btnVis); - PanelButton btnManage = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 112, 0, -128), 0), - 3, - QuestTranslation.translate("betterquesting.btn.add_remove_quests")); + PanelButton btnManage = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 112, 0, -128), 0), 3, QuestTranslation.translate("betterquesting.btn.add_remove_quests")); cvRight.addPanel(btnManage); - btnDesign = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 128, 0, -144), 0), - 4, - QuestTranslation.translate("betterquesting.btn.designer")); + btnDesign = new PanelButton(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 128, 0, -144), 0), 4, QuestTranslation.translate("betterquesting.btn.designer")); btnDesign.setActive(selected != null); cvRight.addPanel(btnDesign); - PanelButton btnTextEditor = new PanelButton(new GuiTransform(GuiAlign.TOP_RIGHT, new GuiPadding(-16, 48, 0, -64), 0), 9, "Aa"); + PanelButton btnTextEditor = new PanelButton(new GuiTransform(GuiAlign.TOP_RIGHT, new GuiPadding(-16, 48, 0, -64), 0), 8, "Aa"); cvRight.addPanel(btnTextEditor); // Dividers @@ -225,10 +194,8 @@ public void onButtonClick() { btnIcon.setActive(true); btnVis.setActive(true); btnVis.setText(QuestTranslation.translate("betterquesting.btn.show") + ": " + selected.getProperty(NativeProps.VISIBILITY)); - if (!tfName.isFocused()) - tfName.setText(selected.getUnlocalisedName()); - if (!tfDesc.isFocused()) - tfDesc.setText(selected.getUnlocalisedDescription()); + if (!tfName.isFocused()) tfName.setText(selected.getUnlocalisedName()); + if (!tfDesc.isFocused()) tfDesc.setText(selected.getUnlocalisedDescription()); } } @@ -309,23 +276,14 @@ private void onButtonPress(PEventButton event) { { DBEntry entry = ((PanelButtonStorage>) btn).getStoredValue(); NBTTagCompound payload = new NBTTagCompound(); - payload.setIntArray("chapterIDs", new int[] { - entry.getID() - }); + payload.setIntArray("chapterIDs", new int[]{entry.getID()}); payload.setInteger("action", 1); NetChapterEdit.sendEdit(payload); } else if (btn.getButtonID() == 7 && btn instanceof PanelButtonStorage) // Move Up { DBEntry entry = ((PanelButtonStorage>) btn).getStoredValue(); int order = QuestLineDatabase.INSTANCE.getOrderIndex(entry.getID()); - if (order > 0) - SendReorder(order, false); - } else if (btn.getButtonID() == 8 && btn instanceof PanelButtonStorage) // Move Down - { - DBEntry entry = ((PanelButtonStorage>) btn).getStoredValue(); - int order = QuestLineDatabase.INSTANCE.getOrderIndex(entry.getID()); - if (order < QuestLineDatabase.INSTANCE.getSortedEntries().size() - 1) - SendReorder(order, true); + if (order > 0) SendReorder(order); } else if (btn.getButtonID() == 8) // Big Description Editor { mc.displayGuiScreen(new GuiTextEditor(this, tfDesc.getRawText(), value -> { @@ -346,20 +304,13 @@ private void reloadList() { for (DBEntry entry : QuestLineDatabase.INSTANCE.getSortedEntries()) { IQuestLine ql = entry.getValue(); - PanelButtonStorage> tmp = new PanelButtonStorage<>(new GuiRectangle(0, i * 16, w - 48, 16, 0), - 5, - QuestTranslation.translate(ql.getUnlocalisedName()), - entry); + PanelButtonStorage> tmp = new PanelButtonStorage<>(new GuiRectangle(0, i * 16, w - 32, 16, 0), 5, QuestTranslation.translate(ql.getUnlocalisedName()), entry); tmp.setActive(entry.getID() != selID); lineList.addPanel(tmp); - lineList.addPanel(new PanelButtonStorage<>(new GuiRectangle(w - 48, i * 16, 16, 16, 0), 6, "", entry).setIcon(PresetIcon.ICON_TRASH.getTexture())); - PanelButton btnUp = new PanelButtonStorage<>(new GuiRectangle(w - 32, i * 16, 16, 16, 0), 7, "", entry).setIcon(PresetIcon.ICON_UP.getTexture()); - btnUp.setActive(i > 0); + lineList.addPanel(new PanelButtonStorage<>(new GuiRectangle(w - 32, i * 16, 16, 16, 0), 6, "", entry).setIcon(PresetIcon.ICON_TRASH.getTexture())); + PanelButton btnUp = new PanelButtonStorage<>(new GuiRectangle(w - 16, i * 16, 16, 16, 0), 7, "", entry).setIcon(PresetIcon.ICON_UP.getTexture()); + btnUp.setActive(QuestLineDatabase.INSTANCE.getSortedEntries().size() > 1); lineList.addPanel(btnUp); - PanelButton btnDown = new PanelButtonStorage<>(new GuiRectangle(w - 16, i * 16, 16, 16, 0), 8, "", entry).setIcon(PresetIcon.ICON_DOWN - .getTexture()); - btnDown.setActive(i < QuestLineDatabase.INSTANCE.getSortedEntries().size() - 1); - lineList.addPanel(btnDown); i++; } } @@ -376,18 +327,16 @@ private void SendChanges(DBEntry chapter) { NetChapterEdit.sendEdit(payload); } - private void SendReorder(int indexToShift, boolean down) { - if (indexToShift < 0) - return; + private void SendReorder(int indexToShift) { + if (indexToShift < 0) return; List> entries = QuestLineDatabase.INSTANCE.getSortedEntries(); - if (indexToShift >= entries.size()) - return; + if (indexToShift >= entries.size()) return; int[] chapterIDs = new int[entries.size()]; for (int i = 0; i < entries.size(); i++) { chapterIDs[i] = entries.get(i).getID(); } - int indexFrom = (indexToShift + (down ? 1 : -1) + chapterIDs.length) % chapterIDs.length; + int indexFrom = (indexToShift - 1 + chapterIDs.length) % chapterIDs.length; int tmp = chapterIDs[indexToShift]; chapterIDs[indexToShift] = chapterIDs[indexFrom]; chapterIDs[indexFrom] = tmp; @@ -397,5 +346,4 @@ private void SendReorder(int indexToShift, boolean down) { payload.setInteger("action", 2); NetChapterEdit.sendEdit(payload); } - } From 4d67d198c5de781c2e0e8374ac218bcdcedf66b2 Mon Sep 17 00:00:00 2001 From: KatatsumuriPan Date: Sat, 2 Mar 2024 22:38:13 +0900 Subject: [PATCH 6/7] Allow cyclic up/down --- .../gui2/editors/nbt/PanelScrollingNBT.java | 120 +++++++++--------- 1 file changed, 59 insertions(+), 61 deletions(-) diff --git a/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java b/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java index 411855a48..d3174bf9a 100644 --- a/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java +++ b/src/main/java/betterquesting/client/gui2/editors/nbt/PanelScrollingNBT.java @@ -1,14 +1,5 @@ package betterquesting.client.gui2.editors.nbt; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Stack; - -import org.lwjgl.input.Keyboard; - import betterquesting.NBTUtil; import betterquesting.api.utils.BigItemStack; import betterquesting.api.utils.JsonHelper; @@ -34,6 +25,12 @@ import betterquesting.api2.client.gui.themes.presets.PresetColor; import betterquesting.api2.client.gui.themes.presets.PresetIcon; import betterquesting.api2.utils.QuestTranslation; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Stack; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.passive.EntityPig; @@ -46,6 +43,7 @@ import net.minecraft.nbt.NBTTagString; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import org.lwjgl.input.Keyboard; // Self contained editing panel // TODO: Add ability for expansions to register modules for identifying and providing custom editors to various NBT data sets (inventory, tinker tool, magic, @@ -97,16 +95,16 @@ private PanelScrollingNBT(IGuiRect rect, int btnEdit, int btnAdv, int btnUp, int // TODO: Implement this with a proper way of displaying and choosing between options (and setting priority for default) /*private final List, Consumer>> filterMap = new ArrayList<>(); - + public void registerHandler(Predicate filter, Consumer action) { filterMap.add(new Pair<>(filter, action)); } - + @Nullable public List> getHandler(@Nonnull NBTBase tag) { List> list = new ArrayList<>(); - + for(Pair, Consumer> p : filterMap) { if(p.getKey().test(tag)) @@ -114,7 +112,7 @@ public void registerHandler(Predicate filter, Consumer action) list.add(p.getValue()); } } - + return list; }*/ @@ -170,9 +168,9 @@ private void refreshList() { if (entry.getId() == 10) // Object { PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), - btnEdit, - getButtonTitle((NBTTagCompound) entry), - k); + btnEdit, + getButtonTitle((NBTTagCompound) entry), + k); this.addPanel(btn); btn = new PanelButtonStorage<>(new GuiRectangle(width - 32, i * 16, 16, 16, 0), btnAdv, "...", k); @@ -184,8 +182,8 @@ private void refreshList() { } else if (entry.getId() == 8) // Text { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 32, 16, 0), - "" + ((NBTTagString) entry).getString(), - FieldFilterString.INSTANCE); + "" + ((NBTTagString) entry).getString(), + FieldFilterString.INSTANCE); text.setCallback(new CallbackNBTTagString(tag, k)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); @@ -194,20 +192,20 @@ private void refreshList() { } else if (entry.getId() == 1) // Byte/Boolean { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw / 2, 16, 0), - "" + ((NBTPrimitive) entry).getByte(), - FieldFilterNumber.BYTE); + "" + ((NBTPrimitive) entry).getByte(), + FieldFilterNumber.BYTE); text.setMaxLength(Integer.MAX_VALUE); // Put callback here this.addPanel(text); PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw + rw / 2, i * 16, (int) Math.ceil(rw / 2F) - 16, 16, 0), - btnEdit, - ((NBTPrimitive) entry).getByte() > 0 ? "true" : "false", - k); + btnEdit, + ((NBTPrimitive) entry).getByte() > 0 ? "true" : "false", + k); this.addPanel(btn); text.setMaxLength(Integer.MAX_VALUE) .setCallback(new CallbackMulti<>(new CallbackNBTPrimitive<>(tag, k, Byte.class), - value -> btn.setText(value > 0 ? "true" : "false"))); + value -> btn.setText(value > 0 ? "true" : "false"))); btn.setCallback(value -> { boolean flag = tag.getByte(value) > 0; tag.setByte(value, flag ? (byte) 0 : (byte) 1); @@ -220,8 +218,8 @@ private void refreshList() { case 2: // Short { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 16, 16, 0), - "" + ((NBTPrimitive) entry).getShort(), - FieldFilterNumber.SHORT); + "" + ((NBTPrimitive) entry).getShort(), + FieldFilterNumber.SHORT); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Short.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; @@ -229,8 +227,8 @@ private void refreshList() { case 3: // Integer { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 16, 16, 0), - "" + ((NBTPrimitive) entry).getInt(), - FieldFilterNumber.INT); + "" + ((NBTPrimitive) entry).getInt(), + FieldFilterNumber.INT); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Integer.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; @@ -238,8 +236,8 @@ private void refreshList() { case 4: // Long { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 16, 16, 0), - "" + ((NBTPrimitive) entry).getLong(), - FieldFilterNumber.LONG); + "" + ((NBTPrimitive) entry).getLong(), + FieldFilterNumber.LONG); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Long.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; @@ -247,8 +245,8 @@ private void refreshList() { case 5: // Float { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 16, 16, 0), - "" + ((NBTPrimitive) entry).getFloat(), - FieldFilterNumber.FLOAT); + "" + ((NBTPrimitive) entry).getFloat(), + FieldFilterNumber.FLOAT); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Float.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; @@ -256,8 +254,8 @@ private void refreshList() { case 6: // Double { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 16, 16, 0), - "" + ((NBTPrimitive) entry).getDouble(), - FieldFilterNumber.DOUBLE); + "" + ((NBTPrimitive) entry).getDouble(), + FieldFilterNumber.DOUBLE); text.setCallback(new CallbackNBTPrimitive<>(tag, k, Double.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; @@ -265,7 +263,7 @@ private void refreshList() { } } else { PanelTextBox err = new PanelTextBox(new GuiRectangle(lw, i * 16 + 4, rw - 16, 12, 0), - entry.getClass().getSimpleName() + " Not Supported Yet").setAlignment(1); + entry.getClass().getSimpleName() + " Not Supported Yet").setAlignment(1); err.setColor(PresetColor.TEXT_MAIN.getColor()); this.addPanel(err); } @@ -298,9 +296,9 @@ private void refreshList() { if (entry.getId() == 10) // Object { PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw, i * 16, rw - 80, 16, 0), - btnEdit, - getButtonTitle((NBTTagCompound) entry), - i); + btnEdit, + getButtonTitle((NBTTagCompound) entry), + i); this.addPanel(btn); btn = new PanelButtonStorage<>(new GuiRectangle(width - 80, i * 16, 16, 16, 0), btnAdv, "...", i); @@ -312,8 +310,8 @@ private void refreshList() { } else if (entry.getId() == 8) // Text { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 80, 16, 0), - "" + ((NBTTagString) entry).getString(), - FieldFilterString.INSTANCE); + "" + ((NBTTagString) entry).getString(), + FieldFilterString.INSTANCE); text.setCallback(new CallbackNBTTagString(list, i)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); @@ -322,19 +320,19 @@ private void refreshList() { } else if (entry.getId() == 1) // Byte/Boolean { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw / 2, 16, 0), - "" + ((NBTPrimitive) entry).getByte(), - FieldFilterNumber.BYTE); + "" + ((NBTPrimitive) entry).getByte(), + FieldFilterNumber.BYTE); this.addPanel(text); PanelButtonStorage btn = new PanelButtonStorage<>(new GuiRectangle(lw + rw / 2, i * 16, (int) Math.ceil(rw / 2F) - 64, 16, 0), - btnEdit, - ((NBTPrimitive) entry).getByte() > 0 ? "true" : "false", - i); + btnEdit, + ((NBTPrimitive) entry).getByte() > 0 ? "true" : "false", + i); this.addPanel(btn); text.setMaxLength(Integer.MAX_VALUE) .setCallback(new CallbackMulti<>(new CallbackNBTPrimitive<>(list, i, Byte.class), - value -> btn.setText(value > 0 ? "true" : "false"))); + value -> btn.setText(value > 0 ? "true" : "false"))); btn.setCallback(value -> { boolean flag = ((NBTTagByte) list.get(value)).getByte() > 0; list.set(value, new NBTTagByte(flag ? (byte) 0 : (byte) 1)); @@ -347,8 +345,8 @@ private void refreshList() { case 2: // Short { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 64, 16, 0), - "" + ((NBTPrimitive) entry).getShort(), - FieldFilterNumber.SHORT); + "" + ((NBTPrimitive) entry).getShort(), + FieldFilterNumber.SHORT); text.setCallback(new CallbackNBTPrimitive<>(list, i, Short.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; @@ -356,8 +354,8 @@ private void refreshList() { case 3: // Integer { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 64, 16, 0), - "" + ((NBTPrimitive) entry).getInt(), - FieldFilterNumber.INT); + "" + ((NBTPrimitive) entry).getInt(), + FieldFilterNumber.INT); text.setCallback(new CallbackNBTPrimitive<>(list, i, Integer.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; @@ -365,8 +363,8 @@ private void refreshList() { case 4: // Long { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 64, 16, 0), - "" + ((NBTPrimitive) entry).getLong(), - FieldFilterNumber.LONG); + "" + ((NBTPrimitive) entry).getLong(), + FieldFilterNumber.LONG); text.setCallback(new CallbackNBTPrimitive<>(list, i, Long.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; @@ -374,8 +372,8 @@ private void refreshList() { case 5: // Float { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 64, 16, 0), - "" + ((NBTPrimitive) entry).getFloat(), - FieldFilterNumber.FLOAT); + "" + ((NBTPrimitive) entry).getFloat(), + FieldFilterNumber.FLOAT); text.setCallback(new CallbackNBTPrimitive<>(list, i, Float.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; @@ -383,8 +381,8 @@ private void refreshList() { case 6: // Double { PanelTextField text = new PanelTextField<>(new GuiRectangle(lw, i * 16, rw - 64, 16, 0), - "" + ((NBTPrimitive) entry).getDouble(), - FieldFilterNumber.DOUBLE); + "" + ((NBTPrimitive) entry).getDouble(), + FieldFilterNumber.DOUBLE); text.setCallback(new CallbackNBTPrimitive<>(list, i, Double.class)).setMaxLength(Integer.MAX_VALUE); this.addPanel(text); break; @@ -392,20 +390,20 @@ private void refreshList() { } } else { PanelTextBox err = new PanelTextBox(new GuiRectangle(lw, i * 16 + 4, rw - 48, 12, 0), - entry.getClass().getSimpleName() + " Not Supported Yet").setAlignment(1); + entry.getClass().getSimpleName() + " Not Supported Yet").setAlignment(1); err.setColor(PresetColor.TEXT_MAIN.getColor()); this.addPanel(err); } PanelButton btnUp = new PanelButtonStorage<>(new GuiRectangle(width - 64, i * 16, 16, 16, 0), this.btnUp, "", i).setIcon(PresetIcon.ICON_UP .getTexture()); - btnUp.setActive(i > 0); + btnUp.setActive(list.tagCount() > 1); this.addPanel(btnUp); PanelButton btnDown = new PanelButtonStorage<>(new GuiRectangle(width - 48, i * 16, 16, 16, 0), this.btnDown, "", i).setIcon( - PresetIcon.ICON_DOWN - .getTexture()); - btnDown.setActive(i < list.tagCount() - 1); + PresetIcon.ICON_DOWN + .getTexture()); + btnDown.setActive(list.tagCount() > 1); this.addPanel(btnDown); PanelButtonStorage btnInsert = new PanelButtonStorage<>(new GuiRectangle(width - 32, i * 16, 16, 16, 0), this.btnInsert, "+", i); From c5c2d62e9d278fe38c5a5514082af4f76e31567c Mon Sep 17 00:00:00 2001 From: KatatsumuriPan Date: Fri, 15 Mar 2024 15:07:59 +0900 Subject: [PATCH 7/7] Fix backward compatibility --- src/main/java/betterquesting/NBTReplaceUtil.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/betterquesting/NBTReplaceUtil.java diff --git a/src/main/java/betterquesting/NBTReplaceUtil.java b/src/main/java/betterquesting/NBTReplaceUtil.java new file mode 100644 index 000000000..c6ec331fb --- /dev/null +++ b/src/main/java/betterquesting/NBTReplaceUtil.java @@ -0,0 +1,10 @@ +package betterquesting; + +import net.minecraft.nbt.NBTBase; + +@Deprecated +public class NBTReplaceUtil { + public static T replaceStrings(T baseTag, String key, String replace) { + return NBTUtil.replaceStrings(baseTag, key, replace); + } +}