mirror of
https://github.com/Xiao-MoMi/Custom-Fishing.git
synced 2025-12-26 02:19:21 +00:00
nbt editor
This commit is contained in:
@@ -28,7 +28,6 @@ import net.momirealms.customfishing.api.util.ReflectionUtils;
|
||||
import net.momirealms.customfishing.command.CommandManagerImpl;
|
||||
import net.momirealms.customfishing.compatibility.IntegrationManagerImpl;
|
||||
import net.momirealms.customfishing.compatibility.papi.PlaceholderManagerImpl;
|
||||
import net.momirealms.customfishing.gui.icon.property.item.PriceItem;
|
||||
import net.momirealms.customfishing.libraries.libraryloader.LibraryLoader;
|
||||
import net.momirealms.customfishing.mechanic.action.ActionManagerImpl;
|
||||
import net.momirealms.customfishing.mechanic.bag.BagManagerImpl;
|
||||
|
||||
@@ -19,7 +19,6 @@ public class ScrollUpItem extends ScrollItem implements Icon {
|
||||
builder.setDisplayName("§7Scroll up");
|
||||
if (!gui.canScroll(-1))
|
||||
builder.addLoreLines("§cYou've reached the top");
|
||||
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,6 @@ import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.api.CustomFishingPlugin;
|
||||
import net.momirealms.customfishing.gui.ItemPage;
|
||||
import net.momirealms.customfishing.gui.page.property.PriceEditor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
package net.momirealms.customfishing.gui.icon.property.item;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.gui.ItemPage;
|
||||
import net.momirealms.customfishing.gui.page.property.NBTEditor;
|
||||
import net.momirealms.customfishing.util.ConfigUtils;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder;
|
||||
import xyz.xenondevs.invui.item.impl.AbstractItem;
|
||||
|
||||
public class NBTItem extends AbstractItem {
|
||||
|
||||
private final ItemPage itemPage;
|
||||
|
||||
public NBTItem(ItemPage itemPage) {
|
||||
this.itemPage = itemPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
ItemBuilder itemBuilder = new ItemBuilder(Material.COMMAND_BLOCK)
|
||||
.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FA8072>● NBT"
|
||||
)));
|
||||
var section = itemPage.getSection().getConfigurationSection("nbt");
|
||||
if (section != null) {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<gray>Current value: "
|
||||
)));
|
||||
for (String line : ConfigUtils.getReadableSection(section.getValues(false))) {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
line
|
||||
)));
|
||||
}
|
||||
|
||||
itemBuilder.addLoreLines("").addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to edit"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FF6347> -> Right click to reset"
|
||||
)));
|
||||
} else {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to set"
|
||||
)));
|
||||
}
|
||||
|
||||
return itemBuilder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType.isLeftClick()) {
|
||||
new NBTEditor(player, itemPage, itemPage.getSection());
|
||||
} else if (clickType.isRightClick()) {
|
||||
itemPage.getSection().set("nbt", null);
|
||||
itemPage.save();
|
||||
itemPage.reOpen();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,6 @@ import net.momirealms.customfishing.gui.icon.BackToPageItem;
|
||||
import net.momirealms.customfishing.gui.icon.NextPageItem;
|
||||
import net.momirealms.customfishing.gui.icon.PreviousPageItem;
|
||||
import net.momirealms.customfishing.gui.icon.property.item.*;
|
||||
import net.momirealms.customfishing.gui.icon.property.loot.*;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -73,7 +72,7 @@ public class BaitEditor implements ItemPage {
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Editing " + key)
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit " + key)
|
||||
))
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
@@ -113,6 +112,7 @@ public class BaitEditor implements ItemPage {
|
||||
items.add(new StackableItem(this));
|
||||
items.add(new ItemFlagItem(this));
|
||||
items.add(new Head64Item(this));
|
||||
items.add(new NBTItem(this));
|
||||
return items;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import net.momirealms.customfishing.gui.icon.BackToPageItem;
|
||||
import net.momirealms.customfishing.gui.icon.NextPageItem;
|
||||
import net.momirealms.customfishing.gui.icon.PreviousPageItem;
|
||||
import net.momirealms.customfishing.gui.icon.property.item.*;
|
||||
import net.momirealms.customfishing.gui.icon.property.loot.*;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -73,7 +72,7 @@ public class HookEditor implements ItemPage {
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Editing " + key)
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit " + key)
|
||||
))
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
@@ -113,6 +112,7 @@ public class HookEditor implements ItemPage {
|
||||
items.add(new StackableItem(this));
|
||||
items.add(new ItemFlagItem(this));
|
||||
items.add(new Head64Item(this));
|
||||
items.add(new NBTItem(this));
|
||||
return items;
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ public class ItemEditor implements ItemPage {
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Editing " + key)
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit " + key)
|
||||
))
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
@@ -123,6 +123,7 @@ public class ItemEditor implements ItemPage {
|
||||
items.add(new SizeItem(this));
|
||||
items.add(new ItemFlagItem(this));
|
||||
items.add(new Head64Item(this));
|
||||
items.add(new NBTItem(this));
|
||||
return items;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.momirealms.customfishing.gui.page.item;
|
||||
|
||||
import de.tr7zw.changeme.nbtapi.NBTItem;
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.api.CustomFishingPlugin;
|
||||
@@ -110,13 +111,10 @@ public class ItemSelector implements YamlPage {
|
||||
if (!prefix.equals(SEARCH) && !entry.getKey().startsWith(prefix)) continue;
|
||||
String material = section.getString("material");
|
||||
if (material != null) {
|
||||
if (!material.contains(":")) {
|
||||
material = "CustomFishing:" + type + ":" + key;
|
||||
}
|
||||
ItemStack appearance = CustomFishingPlugin.get().getItemManager().getItemStackAppearance(player, material);
|
||||
ItemBuilder itemBuilder = new ItemBuilder(appearance);
|
||||
if (section.contains("custom-model-data"))
|
||||
itemBuilder.setCustomModelData(section.getInt("custom-model-data"));
|
||||
ItemStack build = CustomFishingPlugin.get().getItemManager().getItemBuilder(section, type, key).build(player);
|
||||
NBTItem nbtItem = new NBTItem(build);
|
||||
nbtItem.removeKey("display");
|
||||
ItemBuilder itemBuilder = new ItemBuilder(nbtItem.getItem());
|
||||
itemList.add(new ItemInList(key, itemBuilder, this));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import net.momirealms.customfishing.gui.icon.BackToPageItem;
|
||||
import net.momirealms.customfishing.gui.icon.NextPageItem;
|
||||
import net.momirealms.customfishing.gui.icon.PreviousPageItem;
|
||||
import net.momirealms.customfishing.gui.icon.property.item.*;
|
||||
import net.momirealms.customfishing.gui.icon.property.loot.*;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -73,7 +72,7 @@ public class RodEditor implements ItemPage {
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Editing " + key)
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit " + key)
|
||||
))
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
@@ -111,6 +110,7 @@ public class RodEditor implements ItemPage {
|
||||
items.add(new DurabilityItem(this));
|
||||
items.add(new RandomDurabilityItem(this));
|
||||
items.add(new ItemFlagItem(this));
|
||||
items.add(new NBTItem(this));
|
||||
return items;
|
||||
}
|
||||
|
||||
|
||||
@@ -89,10 +89,10 @@ public class MaterialEditor {
|
||||
ArrayList<Item> items = new ArrayList<>();
|
||||
for (String lib : ((ItemManagerImpl) CustomFishingPlugin.get().getItemManager()).getItemLibraries()) {
|
||||
switch (lib) {
|
||||
case "MMOItems", "CustomFishing" -> {
|
||||
case "MMOItems" -> {
|
||||
items.add(new SimpleItem(new ItemBuilder(Material.BELL).setDisplayName(lib + ":TYPE:ID")));
|
||||
}
|
||||
case "vanilla" -> {
|
||||
case "vanilla", "CustomFishing" -> {
|
||||
}
|
||||
default -> {
|
||||
items.add(new SimpleItem(new ItemBuilder(Material.BELL).setDisplayName(lib + ":ID")));
|
||||
|
||||
@@ -0,0 +1,686 @@
|
||||
package net.momirealms.customfishing.gui.page.property;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.gui.YamlPage;
|
||||
import net.momirealms.customfishing.gui.icon.BackGroundItem;
|
||||
import net.momirealms.customfishing.util.ConfigUtils;
|
||||
import net.momirealms.customfishing.util.NBTUtils;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.xenondevs.invui.gui.Gui;
|
||||
import xyz.xenondevs.invui.gui.PagedGui;
|
||||
import xyz.xenondevs.invui.gui.structure.Markers;
|
||||
import xyz.xenondevs.invui.item.Item;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder;
|
||||
import xyz.xenondevs.invui.item.impl.AbstractItem;
|
||||
import xyz.xenondevs.invui.window.AnvilWindow;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
public class NBTEditor {
|
||||
|
||||
private final Player player;
|
||||
private final YamlPage parentPage;
|
||||
private ConfigurationSection nbtSection;
|
||||
private ConfigurationSection currentSection;
|
||||
private String value;
|
||||
private String currentNode;
|
||||
|
||||
public NBTEditor(Player player, YamlPage parentPage, ConfigurationSection section) {
|
||||
this.player = player;
|
||||
this.parentPage = parentPage;
|
||||
this.nbtSection = section.getConfigurationSection("nbt");
|
||||
if (this.nbtSection == null)
|
||||
this.nbtSection = section.createSection("nbt");
|
||||
this.currentSection = nbtSection;
|
||||
this.currentNode = "";
|
||||
reOpenMain();
|
||||
}
|
||||
|
||||
public List<Item> getNBTContents() {
|
||||
Deque<Item> deque = new ArrayDeque<>();
|
||||
for (Map.Entry<String, Object> entry : currentSection.getValues(false).entrySet()) {
|
||||
String path = Objects.equals(currentNode, "") ? entry.getKey() : currentNode + "." + entry.getKey();
|
||||
if (entry.getValue() instanceof List<?> list) {
|
||||
deque.addLast(new InvListIcon(path));
|
||||
} else if (entry.getValue() instanceof String str) {
|
||||
deque.addLast(new InvValueIcon(path, str));
|
||||
} else if (entry.getValue() instanceof ConfigurationSection inner) {
|
||||
deque.addFirst(new InvCompoundIcon(path, inner));
|
||||
} else if (entry.getValue() instanceof Map<?,?> map) {
|
||||
deque.addLast(new InvMapIcon(path));
|
||||
}
|
||||
}
|
||||
deque.addLast(new NewCompoundIcon());
|
||||
deque.addLast(new NewListIcon());
|
||||
deque.addLast(new NewValueIcon());
|
||||
if (currentSection.getParent() != null && !currentSection.getName().equals("nbt")) {
|
||||
deque.addLast(new BackToParentIcon());
|
||||
}
|
||||
return new ArrayList<>(deque);
|
||||
}
|
||||
|
||||
public void reOpenMain() {
|
||||
Gui upperGui = Gui.normal()
|
||||
.setStructure("b b c")
|
||||
.addIngredient('b', new ItemStack(Material.AIR))
|
||||
.addIngredient('c', new SaveIcon())
|
||||
.build();
|
||||
|
||||
var gui = PagedGui.items()
|
||||
.setStructure(
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"# # # # c # # # #"
|
||||
)
|
||||
.addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL)
|
||||
.addIngredient('c', parentPage.getBackItem())
|
||||
.addIngredient('#', new BackGroundItem())
|
||||
.setContent(getNBTContents())
|
||||
.build();
|
||||
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit NBT")))
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
.build();
|
||||
|
||||
window.open();
|
||||
}
|
||||
|
||||
public void reOpenAddCompound() {
|
||||
var confirm = new ConfirmCompoundItem();
|
||||
Gui upperGui = Gui.normal()
|
||||
.setStructure("a b c")
|
||||
.addIngredient('a', new ItemBuilder(Material.COMMAND_BLOCK_MINECART).setDisplayName(""))
|
||||
.addIngredient('b', new ItemStack(Material.AIR))
|
||||
.addIngredient('c', confirm)
|
||||
.build();
|
||||
|
||||
value = "";
|
||||
|
||||
var gui = PagedGui.items()
|
||||
.setStructure(
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"# # # # c # # # #"
|
||||
)
|
||||
.addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL)
|
||||
.addIngredient('c', parentPage.getBackItem())
|
||||
.addIngredient('#', new BackGroundItem())
|
||||
.setContent(getNBTContents())
|
||||
.build();
|
||||
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit compound key")
|
||||
))
|
||||
.addRenameHandler(s -> {
|
||||
value = s;
|
||||
confirm.notifyWindows();
|
||||
})
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
.build();
|
||||
|
||||
window.open();
|
||||
}
|
||||
|
||||
public void reOpenAddList() {
|
||||
var confirm = new ConfirmListItem();
|
||||
Gui upperGui = Gui.normal()
|
||||
.setStructure("a b c")
|
||||
.addIngredient('a', new ItemBuilder(Material.CHAIN_COMMAND_BLOCK).setDisplayName(""))
|
||||
.addIngredient('b', new ItemStack(Material.AIR))
|
||||
.addIngredient('c', confirm)
|
||||
.build();
|
||||
|
||||
value = "";
|
||||
|
||||
var gui = PagedGui.items()
|
||||
.setStructure(
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"# # # # c # # # #"
|
||||
)
|
||||
.addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL)
|
||||
.addIngredient('c', parentPage.getBackItem())
|
||||
.addIngredient('#', new BackGroundItem())
|
||||
.setContent(getNBTContents())
|
||||
.build();
|
||||
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit list key")
|
||||
))
|
||||
.addRenameHandler(s -> {
|
||||
value = s;
|
||||
confirm.notifyWindows();
|
||||
})
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
.build();
|
||||
|
||||
window.open();
|
||||
}
|
||||
|
||||
public void reOpenAddValue() {
|
||||
var confirm =new ConfirmValueItem();
|
||||
Gui upperGui = Gui.normal()
|
||||
.setStructure(
|
||||
"a b c"
|
||||
)
|
||||
.addIngredient('a', new ItemBuilder(Material.COMMAND_BLOCK).setDisplayName(""))
|
||||
.addIngredient('b', new ItemStack(Material.AIR))
|
||||
.addIngredient('c', confirm)
|
||||
.build();
|
||||
|
||||
value = "";
|
||||
|
||||
var gui = PagedGui.items()
|
||||
.setStructure(
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"# # # # c # # # #"
|
||||
)
|
||||
.addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL)
|
||||
.addIngredient('c', parentPage.getBackItem())
|
||||
.addIngredient('#', new BackGroundItem())
|
||||
.setContent(getNBTContents())
|
||||
.build();
|
||||
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit key")))
|
||||
.addRenameHandler(s -> {
|
||||
value = s;
|
||||
confirm.notifyWindows();
|
||||
})
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
.build();
|
||||
|
||||
window.open();
|
||||
}
|
||||
|
||||
public void reOpenSetValue(String key, String type) {
|
||||
var save = new SaveValueIcon(key);
|
||||
Gui upperGui = Gui.normal()
|
||||
.setStructure("a b c")
|
||||
.addIngredient('a', new ItemBuilder(Material.COMMAND_BLOCK).setDisplayName(type == null ? "" : "(" + type + ") "))
|
||||
.addIngredient('b', new ItemStack(Material.AIR))
|
||||
.addIngredient('c', save)
|
||||
.build();
|
||||
|
||||
value = "";
|
||||
|
||||
var gui = PagedGui.items()
|
||||
.setStructure(
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"# # # # c # # # #"
|
||||
)
|
||||
.addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL)
|
||||
.addIngredient('c', parentPage.getBackItem())
|
||||
.addIngredient('#', new BackGroundItem())
|
||||
.setContent(getTypeContents(key))
|
||||
.build();
|
||||
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Set value")
|
||||
))
|
||||
.addRenameHandler(s -> {
|
||||
value = s;
|
||||
save.notifyWindows();
|
||||
})
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
.build();
|
||||
|
||||
window.open();
|
||||
}
|
||||
|
||||
public void removeByNode(String node) {
|
||||
nbtSection.set(node, null);
|
||||
parentPage.save();
|
||||
}
|
||||
|
||||
public List<Item> getTypeContents(String key) {
|
||||
ArrayList<Item> list = new ArrayList<>();
|
||||
for (Map.Entry<String, String> entry : Map.of(
|
||||
"String","some text",
|
||||
"Byte","1",
|
||||
"Short","123",
|
||||
"Int","123456",
|
||||
"Long","123456789",
|
||||
"Double", "1.2345",
|
||||
"Float", "1.23",
|
||||
"Boolean", "true",
|
||||
"IntArray", "[111,222,333,444]",
|
||||
"ByteArray","[1,2,3,4]"
|
||||
).entrySet()) {
|
||||
list.add(new TypeItem(key, entry.getKey(), entry.getValue()));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public class TypeItem extends AbstractItem {
|
||||
|
||||
private final String type;
|
||||
private final String tip;
|
||||
private final String key;
|
||||
|
||||
public TypeItem(String key, String type, String tip) {
|
||||
this.type = type;
|
||||
this.tip = tip;
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.BELL).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"(" + type + ") " + tip
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
reOpenSetValue(key, type);
|
||||
}
|
||||
}
|
||||
|
||||
public class ConfirmCompoundItem extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
if (value == null || value.equals("") || value.contains(".") || currentSection.contains(value)) {
|
||||
return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<red>Invaild key"
|
||||
)));
|
||||
}
|
||||
|
||||
return new ItemBuilder(Material.COMMAND_BLOCK_MINECART).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"New key: " + value
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to confirm"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00CED1> -> Right click to cancel"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType.isLeftClick()) {
|
||||
if (value == null || value.equals("") || value.contains(".")) {
|
||||
return;
|
||||
}
|
||||
if (currentSection.contains(value)) {
|
||||
return;
|
||||
}
|
||||
currentSection.createSection(value);
|
||||
parentPage.save();
|
||||
}
|
||||
reOpenMain();
|
||||
}
|
||||
}
|
||||
|
||||
public class ConfirmListItem extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
if (value == null || value.equals("") || value.contains(".") || currentSection.contains(value)) {
|
||||
return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<red>Invaild key"
|
||||
)));
|
||||
}
|
||||
|
||||
return new ItemBuilder(Material.CHAIN_COMMAND_BLOCK).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"New key: " + value
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to confirm"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00CED1> -> Right click to cancel"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType.isLeftClick()) {
|
||||
if (value == null || value.equals("") || value.contains(".")) {
|
||||
return;
|
||||
}
|
||||
if (currentSection.contains(value)) {
|
||||
return;
|
||||
}
|
||||
currentSection.set(value, new ArrayList<>());
|
||||
parentPage.save();
|
||||
}
|
||||
reOpenMain();
|
||||
}
|
||||
}
|
||||
|
||||
public class ConfirmValueItem extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
if (value == null || value.equals("") || value.contains(".") || currentSection.contains(value)) {
|
||||
return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<red>Invaild key"
|
||||
)));
|
||||
}
|
||||
|
||||
return new ItemBuilder(Material.COMMAND_BLOCK).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"New key: " + value
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to confirm"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00CED1> -> Right click to cancel"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType.isLeftClick()) {
|
||||
if (value == null || value.equals("") || value.contains(".")) {
|
||||
return;
|
||||
}
|
||||
if (currentSection.contains(value)) {
|
||||
return;
|
||||
}
|
||||
reOpenSetValue(value, null);
|
||||
} else if (clickType.isRightClick()) {
|
||||
reOpenMain();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class NewCompoundIcon extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.ANVIL).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"Add a new compound"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
reOpenAddCompound();
|
||||
}
|
||||
}
|
||||
|
||||
public class NewListIcon extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.ANVIL).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"Add a new list"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
reOpenAddList();
|
||||
}
|
||||
}
|
||||
|
||||
public class NewValueIcon extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.ANVIL).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"Add a new value"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
reOpenAddValue();
|
||||
}
|
||||
}
|
||||
|
||||
public class InvCompoundIcon extends AbstractItem {
|
||||
|
||||
private final String node;
|
||||
private final ConfigurationSection compound;
|
||||
|
||||
public InvCompoundIcon(String node, ConfigurationSection compound) {
|
||||
this.compound = compound;
|
||||
this.node = node;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
String[] splits = node.split("\\.");
|
||||
return new ItemBuilder(Material.COMMAND_BLOCK_MINECART).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"Compound: " + splits[splits.length -1]
|
||||
))).addLoreLines("")
|
||||
.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to edit"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FF6347> -> Right click to delete"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType.isLeftClick()) {
|
||||
currentSection = compound;
|
||||
currentNode = node;
|
||||
} else if (clickType.isRightClick()) {
|
||||
removeByNode(node);
|
||||
}
|
||||
reOpenMain();
|
||||
}
|
||||
}
|
||||
|
||||
public class InvValueIcon extends AbstractItem {
|
||||
|
||||
private final String node;
|
||||
private final String value;
|
||||
|
||||
public InvValueIcon(String node, String value) {
|
||||
this.node = node;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
String[] splits = node.split("\\.");
|
||||
return new ItemBuilder(Material.REPEATING_COMMAND_BLOCK).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
splits[splits.length -1] + ": " + value
|
||||
)))
|
||||
.addLoreLines("")
|
||||
.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to edit"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FF6347> -> Right click to delete"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
String[] split = node.split("\\.");
|
||||
if (clickType.isLeftClick()) {
|
||||
reOpenSetValue(split[split.length-1], NBTUtils.getTypeAndData(value)[0]);
|
||||
} else if (clickType.isRightClick()) {
|
||||
removeByNode(node);
|
||||
reOpenMain();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class InvListIcon extends AbstractItem {
|
||||
|
||||
private final String node;
|
||||
|
||||
public InvListIcon(String node) {
|
||||
this.node = node;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
String[] splits = node.split("\\.");
|
||||
return new ItemBuilder(Material.CHAIN_COMMAND_BLOCK).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"List: " + splits[splits.length -1]
|
||||
)))
|
||||
.addLoreLines("")
|
||||
.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> <st>Left click to edit</st>"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Use text editor instead"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FF6347> -> Right click to delete"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType.isRightClick()) {
|
||||
removeByNode(node);
|
||||
reOpenMain();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class InvMapIcon extends AbstractItem {
|
||||
|
||||
private final String node;
|
||||
|
||||
public InvMapIcon(String node) {
|
||||
this.node = node;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
String[] splits = node.split("\\.");
|
||||
return new ItemBuilder(Material.COMMAND_BLOCK).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"Map: " + splits[splits.length -1]
|
||||
)))
|
||||
.addLoreLines("")
|
||||
.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> <st>Left click to edit</st>"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Use text editor instead"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FF6347> -> Right click to delete"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType.isRightClick()) {
|
||||
removeByNode(node);
|
||||
reOpenMain();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SaveValueIcon extends AbstractItem {
|
||||
|
||||
private final String key;
|
||||
|
||||
public SaveValueIcon(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
try {
|
||||
NBTUtils.getTypeAndData(value);
|
||||
return new ItemBuilder(Material.COMMAND_BLOCK)
|
||||
.setDisplayName(value)
|
||||
.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to confirm")))
|
||||
.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00CED1> -> Right click to cancel")));
|
||||
} catch (IllegalArgumentException e) {
|
||||
return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"Invalid format"
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType == ClickType.LEFT) {
|
||||
try {
|
||||
NBTUtils.getTypeAndData(value);
|
||||
currentSection.set(key, value);
|
||||
parentPage.save();
|
||||
reOpenMain();
|
||||
} catch (IllegalArgumentException e) {
|
||||
reOpenMain();
|
||||
}
|
||||
} else if (clickType == ClickType.RIGHT) {
|
||||
reOpenMain();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SaveIcon extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
if (nbtSection.getValues(false).size() > 0) {
|
||||
var builder = new ItemBuilder(Material.ACACIA_SIGN).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<green>● NBT Preview"
|
||||
)));
|
||||
for (String line : ConfigUtils.getReadableSection(nbtSection.getValues(false))) {
|
||||
builder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
line
|
||||
)));
|
||||
}
|
||||
return builder;
|
||||
} else {
|
||||
return new ItemBuilder(Material.STRUCTURE_VOID).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00CED1>● Delete property"
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (nbtSection.getValues(false).size() == 0) {
|
||||
Objects.requireNonNull(nbtSection.getParent()).set("nbt", null);
|
||||
}
|
||||
parentPage.save();
|
||||
parentPage.reOpen();
|
||||
}
|
||||
}
|
||||
|
||||
public class BackToParentIcon extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.MINECART).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"Back to parent compound"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
currentSection = currentSection.getParent();
|
||||
currentNode = currentNode.lastIndexOf(".") == -1 ? "" : currentNode.substring(0, currentNode.lastIndexOf("."));
|
||||
reOpenMain();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,7 +62,6 @@ import org.bukkit.event.player.PlayerItemMendEvent;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Damageable;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.util.Vector;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -17,13 +17,9 @@
|
||||
|
||||
package net.momirealms.customfishing.mechanic.misc;
|
||||
|
||||
import io.papermc.paper.event.player.AsyncChatEvent;
|
||||
import io.papermc.paper.event.player.ChatEvent;
|
||||
import net.momirealms.customfishing.api.CustomFishingPlugin;
|
||||
import net.momirealms.customfishing.api.common.Pair;
|
||||
import net.momirealms.customfishing.gui.ItemPage;
|
||||
import net.momirealms.customfishing.gui.ParentPage;
|
||||
import net.momirealms.customfishing.gui.YamlPage;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
@@ -305,4 +305,56 @@ public class ConfigUtils {
|
||||
}
|
||||
return expression.evaluate();
|
||||
}
|
||||
|
||||
public static ArrayList<String> getReadableSection(Map<String, Object> map) {
|
||||
ArrayList<String> list = new ArrayList<>();
|
||||
mapToReadableStringList(map, list, 0, false);
|
||||
return list;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void mapToReadableStringList(Map<String, Object> map, List<String> readableList, int loop_times, boolean isMapList) {
|
||||
boolean first = true;
|
||||
for (Map.Entry<String, Object> entry : map.entrySet()) {
|
||||
Object nbt = entry.getValue();
|
||||
if (nbt instanceof String value) {
|
||||
if (isMapList && first) {
|
||||
first = false;
|
||||
readableList.add(" ".repeat(loop_times - 1) + "<white>- <gold>" + entry.getKey() + ": <white>" + value);
|
||||
} else {
|
||||
readableList.add(" ".repeat(loop_times) + "<gold>" + entry.getKey() + ": <white>" + value);
|
||||
}
|
||||
} else if (nbt instanceof List<?> list) {
|
||||
if (isMapList && first) {
|
||||
first = false;
|
||||
readableList.add(" ".repeat(loop_times - 1) + "<white>- <gold>" + entry.getKey() + ":");
|
||||
} else {
|
||||
readableList.add(" ".repeat(loop_times) + "<gold>" + entry.getKey() + ":");
|
||||
}
|
||||
for (Object value : list) {
|
||||
if (value instanceof Map<?,?> nbtMap) {
|
||||
mapToReadableStringList((Map<String, Object>) nbtMap, readableList, loop_times + 2, true);
|
||||
} else {
|
||||
readableList.add(" ".repeat(loop_times + 1) + "<white>- " + value);
|
||||
}
|
||||
}
|
||||
} else if (nbt instanceof ConfigurationSection section) {
|
||||
if (isMapList && first) {
|
||||
first = false;
|
||||
readableList.add(" ".repeat(loop_times - 1) + "<white>- <gold>" + entry.getKey() + ":");
|
||||
} else {
|
||||
readableList.add(" ".repeat(loop_times) + "<gold>" + entry.getKey() + ":");
|
||||
}
|
||||
mapToReadableStringList(section.getValues(false), readableList, loop_times + 1, false);
|
||||
} else if (nbt instanceof Map<?,?> innerMap) {
|
||||
if (isMapList && first) {
|
||||
first = false;
|
||||
readableList.add(" ".repeat(loop_times - 1) + "<white>- <gold>" + entry.getKey() + ":");
|
||||
} else {
|
||||
readableList.add(" ".repeat(loop_times) + "<gold>" + entry.getKey() + ":");
|
||||
}
|
||||
mapToReadableStringList((Map<String, Object>) innerMap, readableList, loop_times + 1, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,12 +154,12 @@ public class NBTUtils {
|
||||
case NBTTagByteArray -> map.put(key, "(ByteArray) " + Arrays.toString(nbtCompound.getByteArray(key)));
|
||||
case NBTTagIntArray -> map.put(key, "(IntArray) " + Arrays.toString(nbtCompound.getIntArray(key)));
|
||||
case NBTTagCompound -> {
|
||||
Map<String, Object> map1 = compoundToMap(nbtCompound.getCompound(key));
|
||||
Map<String, Object> map1 = compoundToMap(Objects.requireNonNull(nbtCompound.getCompound(key)));
|
||||
if (map1.size() != 0) map.put(key, map1);
|
||||
}
|
||||
case NBTTagList -> {
|
||||
List<Object> list = new ArrayList<>();
|
||||
switch (nbtCompound.getListType(key)) {
|
||||
switch (Objects.requireNonNull(nbtCompound.getListType(key))) {
|
||||
case NBTTagCompound -> nbtCompound.getCompoundList(key).forEach(a -> list.add(compoundToMap(a)));
|
||||
case NBTTagInt -> nbtCompound.getIntegerList(key).forEach(a -> list.add("(Int) " + a));
|
||||
case NBTTagDouble -> nbtCompound.getDoubleList(key).forEach(a -> list.add("(Double) " + a));
|
||||
@@ -181,8 +181,11 @@ public class NBTUtils {
|
||||
* @param str The input value string
|
||||
* @return An array containing type and data strings
|
||||
*/
|
||||
private static String[] getTypeAndData(String str) {
|
||||
public static String[] getTypeAndData(String str) {
|
||||
String[] parts = str.split("\\s+", 2);
|
||||
if (parts.length == 1) {
|
||||
return new String[]{"String", str};
|
||||
}
|
||||
if (parts.length != 2) {
|
||||
throw new IllegalArgumentException("Invalid value format: " + str);
|
||||
}
|
||||
@@ -197,7 +200,7 @@ public class NBTUtils {
|
||||
* @param value The input value containing arrays
|
||||
* @return An array of individual elements
|
||||
*/
|
||||
private static String[] splitValue(String value) {
|
||||
public static String[] splitValue(String value) {
|
||||
return value.substring(value.indexOf('[') + 1, value.lastIndexOf(']'))
|
||||
.replaceAll("\\s", "")
|
||||
.split(",");
|
||||
|
||||
Reference in New Issue
Block a user