Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug Fixes and Improvements on nbt editor gui #101

Open
wants to merge 8 commits into
base: 1.12
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 2 additions & 26 deletions src/main/java/betterquesting/NBTReplaceUtil.java
Original file line number Diff line number Diff line change
@@ -1,34 +1,10 @@
package betterquesting;

import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;

@Deprecated
public class NBTReplaceUtil {
@SuppressWarnings("unchecked")
public static <T extends NBTBase> T replaceStrings(T baseTag, String key, String replace) {
if (baseTag == null) {
return null;
}

if (baseTag instanceof NBTTagCompound) {
NBTTagCompound compound = (NBTTagCompound) baseTag;

for (String k : compound.getKeySet()) {
compound.setTag(k, replaceStrings(compound.getTag(k), key, replace));
}
} else if (baseTag instanceof NBTTagList) {
NBTTagList list = (NBTTagList) baseTag;

for (int i = 0; i < list.tagCount(); i++) {
list.set(i, replaceStrings(list.get(i), key, replace));
}
} else if (baseTag instanceof NBTTagString) {
NBTTagString tString = (NBTTagString) baseTag;
return (T) new NBTTagString(tString.getString().replaceAll(key, replace));
}

return baseTag; // Either isn't a string or doesn't contain one
return NBTUtil.replaceStrings(baseTag, key, replace);
}
}
49 changes: 49 additions & 0 deletions src/main/java/betterquesting/NBTUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package betterquesting;

import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;

public class NBTUtil {

@SuppressWarnings("unchecked")
public static <T extends NBTBase> T replaceStrings(T baseTag, String key, String replace) {
if (baseTag == null) {
return null;
}

if (baseTag instanceof NBTTagCompound) {
NBTTagCompound compound = (NBTTagCompound) baseTag;

for (String k : compound.getKeySet()) {
compound.setTag(k, replaceStrings(compound.getTag(k), key, replace));
}
} else if (baseTag instanceof NBTTagList) {
NBTTagList list = (NBTTagList) baseTag;

for (int i = 0; i < list.tagCount(); i++) {
list.set(i, replaceStrings(list.get(i), key, replace));
}
} else if (baseTag instanceof NBTTagString) {
NBTTagString tString = (NBTTagString) baseTag;
return (T) new NBTTagString(tString.getString().replaceAll(key, replace));
}

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);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,5 @@ public void addPanel(String name, Function<GuiRectangle, IGuiPanel> panelFactory
addPanel(panelFactory.apply(rect));
rowNum++;
}

}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<NBTTagCompound> comCallback;
private final ICallback<NBTTagList> lstCallback;
Expand Down Expand Up @@ -55,20 +133,23 @@ 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);

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);

Expand Down Expand Up @@ -114,4 +195,5 @@ private void onButtonPress(PEventButton event) {
}
}
}

}
Loading