Gotta debug NBT gui

This commit is contained in:
2025-03-18 15:57:27 -05:00
parent 79b4facfb8
commit 6374afd543
16 changed files with 59 additions and 29 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -17,30 +17,23 @@ public class NBTStorage implements JsonSerializable<NBTStorage> {
public Map<String, String> caughtItems = new HashMap<>();
public static ItemStack toItem(String data) {
try {
byte[] bytes = Base64.getDecoder().decode(data);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
ItemStack item = (ItemStack) objectInputStream.readObject();
objectInputStream.close();
return item;
} catch (IOException | ClassNotFoundException e) {
Sentinel.getInstance().getLogger().warning("Could not deserialize ItemStack: " + e.getMessage());
return null;
public static ItemStack toItem(String serializedString) {
if (serializedString.equals("null")) return null;
byte[] decodedBytes = Base64.getDecoder().decode(serializedString);
String mapString = new String(decodedBytes);
// Remove the curly braces and split by commas to get key-value pairs
String[] keyValuePairs = mapString.substring(1, mapString.length() - 1).split(", ");
Map<String, Object> deserializedMap = new HashMap<>();
for (String pair : keyValuePairs) {
String[] keyValue = pair.split("=");
deserializedMap.put(keyValue[0], keyValue[1]);
}
ItemStack item = ItemStack.deserialize(deserializedMap);
return item;
}
public static String toB64(ItemStack item) {
try {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(item);
objectOutputStream.close();
return Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray());
} catch (IOException e) {
Sentinel.getInstance().getLogger().warning("Could not serialize ItemStack: " + e.getMessage());
return null;
}
public static String toB64(ItemStack itemStack) {
Map<String, Object> serializedMap = itemStack.serialize();
return Base64.getEncoder().encodeToString(serializedMap.toString().getBytes());
}
}

View File

@@ -60,7 +60,7 @@ public class ChatEvent implements CustomListener {
UrlFilterGUI.updater.invokeCallbacks(e);
ProfanityFilterGUI.updater.invokeCallbacks(e);
SpamFilterGUI.updater.invokeCallbacks(e);
NewWhitelistGUI.
NewWhitelistGUI.updater.invokeCallbacks(e);
DangerousCommand.updater.invokeCallbacks(e);
LoggedCommand.updater.invokeCallbacks(e);
SpecificCommand.updater.invokeCallbacks(e);

View File

@@ -23,6 +23,8 @@ public abstract class PaginatedGUI<T> {
protected static final Map<UUID, Set<String>> activeFilters = new HashMap<>();
protected static final Map<UUID, FilterOperator> chosenOperator = new HashMap<>();
protected abstract CustomGui backGUI();
public CustomGui createGUI(Player p) {
ServerUtils.verbose("Creating GUI for player: %s", p.getName());
int page = currentPages.compute(p.getUniqueId(), (k, v) -> realizePage(p, v == null ? 0 : v));
@@ -40,10 +42,10 @@ public abstract class PaginatedGUI<T> {
protected abstract String getTitle(Player p);
protected void setupPage(Player p, Inventory inv) {
ServerUtils.verbose("Setting up page for player: %s", p.getName());
ServerUtils.verbose(1,"Setting up page for player: %s", p.getName());
int page = currentPages.compute(p.getUniqueId(), (k, v) -> realizePage(p, v == null ? 0 : v));
List<T> filtered = filterEntries(p, chosenOperator.computeIfAbsent(p.getUniqueId(), v -> FilterOperator.AND));
ServerUtils.verbose("Current page: %d, Total entries: %d", page, filtered.size());
ServerUtils.verbose(1,"Current page: %d, Total entries: %d", page, filtered.size());
// Clear previous items
for (int i = 0; i < ITEMS_PER_PAGE; i++) {
@@ -67,7 +69,7 @@ public abstract class PaginatedGUI<T> {
protected abstract ItemStack createDisplayItem(T item);
protected void openFilterMenu(Player p) {
ServerUtils.verbose("Creating filter menu for %s", p);
ServerUtils.verbose(1,"Creating filter menu for %s", p);
Set<String> filters = activeFilters.computeIfAbsent(p.getUniqueId(), k -> new HashSet<>());
CustomGui.GuiBuilder filterGui = CustomGui.create()
@@ -101,6 +103,10 @@ public abstract class PaginatedGUI<T> {
protected void changePage(Player p, int direction) {
int current = currentPages.getOrDefault(p.getUniqueId(), 0);
if (current + direction < 0) {
p.openInventory(backGUI().getInventory());
return;
}
int newPage = realizePage(p, current + direction);
currentPages.put(p.getUniqueId(), newPage);
p.openInventory(createGUI(p).getInventory());
@@ -114,6 +120,9 @@ public abstract class PaginatedGUI<T> {
}
private ItemStack createNavigationItem(String direction, int pageTo) {
if (pageTo < 0) {
return Items.BACK;
}
return new ItemBuilder()
.material(Material.ARROW)
.name(Text.color("&b" + direction + "&7 Page"))

View File

@@ -5,6 +5,7 @@ import io.github.itzispyder.pdk.plugin.gui.CustomGui;
import io.github.itzispyder.pdk.utils.misc.Pair;
import me.trouper.sentinel.Sentinel;
import me.trouper.sentinel.data.storage.NBTStorage;
import me.trouper.sentinel.server.gui.MainGUI;
import me.trouper.sentinel.server.gui.PaginatedGUI;
import me.trouper.sentinel.utils.ServerUtils;
import me.trouper.sentinel.utils.Text;
@@ -25,6 +26,11 @@ public class NBTGui extends PaginatedGUI<Map.Entry<String,String>> {
this.nbtStorage = Sentinel.getInstance().getDirector().io.nbtStorage;
}
@Override
protected CustomGui backGUI() {
return new MainGUI().home;
}
@Override
protected String getTitle(Player p) {
return Text.color("&6&lItem Ownership &7(" + getFilterCount(p) + " items)");

View File

@@ -32,6 +32,11 @@ public class NewWhitelistGUI extends PaginatedGUI<CommandBlockHolder> {
private static final Map<UUID, String> chosenPlayer = new HashMap<>();
@Override
protected CustomGui backGUI() {
return new MainGUI().home;
}
@Override
protected String getTitle(Player p) {
return Text.color("&6&lCommand Blocks &7(" + getFilterCount(p) + " filters)");
@@ -94,9 +99,26 @@ public class NewWhitelistGUI extends PaginatedGUI<CommandBlockHolder> {
e -> {
if (e.isLeftClick()) toggleFilter(p, "USER");
else if (e.isRightClick()) {
queuePlayer(p,(cfg,value)->{
chosenPlayer.put(p.getUniqueId(),value.getAll().toString());
},chosenPlayer.getOrDefault(p.getUniqueId(),"null"));
}
})
});
}
public static ConfigUpdater<AsyncChatEvent, ViolationConfig> updater = new ConfigUpdater<>(Sentinel.getInstance().getDirector().io.violationConfig);
protected void queuePlayer(Player player, BiConsumer<ViolationConfig, Args> action, String currentValue) {
MainGUI.awaitingCallback.add(player.getUniqueId());
player.closeInventory();
updater.queuePlayer(player, 20*60, (e)->{
e.setCancelled(true);
return LegacyComponentSerializer.legacySection().serialize(e.message());
}, (cfg, newValue) -> {
action.accept(cfg,new Args(newValue.split("\\s+")));
player.sendMessage(Text.prefix("Value updated successfully"));
openFilterMenu(player);
});
player.sendMessage(Component.text(Text.prefix("Enter the new value in chat. The value is currently set to &b%s&7. (Click to insert)".formatted(currentValue))).clickEvent(ClickEvent.suggestCommand(currentValue)));
}
@Override