From 9a17f2a8e0ace885b4b6adac97d310129090a1c0 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Wed, 10 Jul 2019 02:22:15 -0700 Subject: [PATCH 01/28] Update to trident 2.0.0 Refactored code to support trident 2.0.0 --- build.gradle | 2 +- .../java/com/clubobsidian/dynamicgui/DynamicGui.java | 11 +++++------ .../dynamicgui/listener/EntityClickListener.java | 3 +-- .../dynamicgui/listener/InventoryClickListener.java | 3 +-- .../dynamicgui/listener/InventoryCloseListener.java | 3 +-- .../dynamicgui/listener/InventoryOpenListener.java | 3 +-- .../dynamicgui/listener/PlayerInteractListener.java | 3 +-- .../listener/bukkit/EntityClickListener.java | 2 +- .../listener/bukkit/InventoryClickListener.java | 2 +- .../listener/bukkit/InventoryCloseListener.java | 6 +++--- .../listener/bukkit/InventoryOpenListener.java | 2 +- .../listener/bukkit/PlayerInteractListener.java | 2 +- .../listener/sponge/EntityClickListener.java | 2 +- .../listener/sponge/InventoryClickListener.java | 2 +- .../listener/sponge/InventoryCloseListener.java | 4 ++-- .../listener/sponge/InventoryOpenListener.java | 2 +- .../listener/sponge/PlayerInteractListener.java | 2 +- 17 files changed, 24 insertions(+), 30 deletions(-) diff --git a/build.gradle b/build.gradle index f1ea0c693..12b4df8fb 100644 --- a/build.gradle +++ b/build.gradle @@ -59,7 +59,7 @@ dependencies { compile 'org.apache.commons:commons-lang3:3.9' compile 'commons-io:commons-io:2.6' compile 'com.github.clubobsidian:wrappy:1.8.0' - compile 'com.github.clubobsidian:trident:1.1.0' + compile 'com.github.clubobsidian:trident:2.0.0' compile 'com.udojava:EvalEx:2.1' compile 'com.github.ClubObsidian:FuzzUtil:1.1.0' } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java b/src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java index 4b09a9b15..18984f18a 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java +++ b/src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java @@ -61,9 +61,8 @@ import com.clubobsidian.dynamicgui.replacer.Replacer; import com.clubobsidian.dynamicgui.server.FakeServer; import com.clubobsidian.dynamicgui.util.ChatColor; - -import com.clubobsidian.trident.EventManager; -import com.clubobsidian.trident.impl.javaassist.JavaAssistEventManager; +import com.clubobsidian.trident.EventBus; +import com.clubobsidian.trident.eventbus.javassist.JavassistEventBus; import com.clubobsidian.wrappy.Configuration; @@ -83,13 +82,13 @@ public class DynamicGui { private boolean redis; private Map serverPlayerCount; - private EventManager eventManager; + private EventBus eventManager; private DynamicGuiPlugin plugin; private FakeServer server; private LoggerWrapper loggerWrapper; private DynamicGui(DynamicGuiPlugin plugin, FakeServer server, LoggerWrapper loggerWrapper) { - this.eventManager = new JavaAssistEventManager(); + this.eventManager = new JavassistEventBus(); this.plugin = plugin; this.server = server; this.loggerWrapper = loggerWrapper; @@ -312,7 +311,7 @@ public DynamicGuiPlugin getPlugin() return this.plugin; } - public EventManager getEventManager() + public EventBus getEventBus() { return this.eventManager; } diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/EntityClickListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/EntityClickListener.java index f720170c6..c3e20233e 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/EntityClickListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/EntityClickListener.java @@ -22,9 +22,8 @@ import com.clubobsidian.dynamicgui.manager.dynamicgui.GuiManager; import com.clubobsidian.dynamicgui.registry.npc.NPC; import com.clubobsidian.trident.EventHandler; -import com.clubobsidian.trident.Listener; -public class EntityClickListener implements Listener { +public class EntityClickListener { @EventHandler public void onEntityClick(PlayerInteractEntityEvent e) diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryClickListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryClickListener.java index 6936ff160..3b258c272 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryClickListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryClickListener.java @@ -28,9 +28,8 @@ import com.clubobsidian.dynamicgui.util.FunctionUtil; import com.clubobsidian.trident.EventHandler; -import com.clubobsidian.trident.Listener; -public class InventoryClickListener implements Listener { +public class InventoryClickListener { @EventHandler public void invClick(final InventoryClickEvent e) diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryCloseListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryCloseListener.java index 11a19b238..d53eda78d 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryCloseListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryCloseListener.java @@ -20,9 +20,8 @@ import com.clubobsidian.dynamicgui.event.player.PlayerQuitEvent; import com.clubobsidian.dynamicgui.manager.dynamicgui.GuiManager; import com.clubobsidian.trident.EventHandler; -import com.clubobsidian.trident.Listener; -public class InventoryCloseListener implements Listener { +public class InventoryCloseListener { @EventHandler public void inventoryClose(final InventoryCloseEvent e) diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryOpenListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryOpenListener.java index 737d63c93..2ce41359f 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryOpenListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryOpenListener.java @@ -18,9 +18,8 @@ import com.clubobsidian.dynamicgui.event.inventory.InventoryOpenEvent; import com.clubobsidian.dynamicgui.manager.dynamicgui.GuiManager; import com.clubobsidian.trident.EventHandler; -import com.clubobsidian.trident.Listener; -public class InventoryOpenListener implements Listener { +public class InventoryOpenListener { @EventHandler public void inventoryOpen(final InventoryOpenEvent e) diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/PlayerInteractListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/PlayerInteractListener.java index 0972ffedd..bb78ad069 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/PlayerInteractListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/PlayerInteractListener.java @@ -22,9 +22,8 @@ import com.clubobsidian.dynamicgui.world.LocationWrapper; import com.clubobsidian.trident.EventHandler; -import com.clubobsidian.trident.Listener; -public class PlayerInteractListener implements Listener { +public class PlayerInteractListener { @EventHandler public void playerInteract(final PlayerInteractEvent e) diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/EntityClickListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/EntityClickListener.java index 21dc0d823..94c427068 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/EntityClickListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/EntityClickListener.java @@ -37,7 +37,7 @@ public void onEntityClick(PlayerInteractEntityEvent e) PlayerWrapper playerWrapper = new BukkitPlayerWrapper(e.getPlayer()); EntityWrapper entityWrapper = new BukkitEntityWrapper(e.getRightClicked()); - DynamicGui.get().getEventManager().callEvent(new com.clubobsidian.dynamicgui.event.inventory.PlayerInteractEntityEvent(playerWrapper, entityWrapper)); + DynamicGui.get().getEventBus().callEvent(new com.clubobsidian.dynamicgui.event.inventory.PlayerInteractEntityEvent(playerWrapper, entityWrapper)); } } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryClickListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryClickListener.java index 16902063f..1d2af0e9b 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryClickListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryClickListener.java @@ -78,7 +78,7 @@ public void onInventoryClick(InventoryClickEvent e) } com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent clickEvent = new com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent(playerWrapper, inventoryWrapper, itemStackWrapper, slot, clickType, view); - DynamicGui.get().getEventManager().callEvent(clickEvent); + DynamicGui.get().getEventBus().callEvent(clickEvent); if(clickEvent.isCanceled()) { e.setCancelled(true); diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryCloseListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryCloseListener.java index d0957a8c1..c8f0561e0 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryCloseListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryCloseListener.java @@ -38,7 +38,7 @@ public void inventoryClose(InventoryCloseEvent e) { PlayerWrapper playerWrapper = new BukkitPlayerWrapper((Player) e.getPlayer()); InventoryWrapper inventoryWrapper = new BukkitInventoryWrapper(e.getInventory()); - DynamicGui.get().getEventManager().callEvent(new com.clubobsidian.dynamicgui.event.inventory.InventoryCloseEvent(playerWrapper, inventoryWrapper)); + DynamicGui.get().getEventBus().callEvent(new com.clubobsidian.dynamicgui.event.inventory.InventoryCloseEvent(playerWrapper, inventoryWrapper)); } } @@ -46,13 +46,13 @@ public void inventoryClose(InventoryCloseEvent e) public void onQuit(PlayerQuitEvent e) { PlayerWrapper playerWrapper = new BukkitPlayerWrapper(e.getPlayer()); - DynamicGui.get().getEventManager().callEvent(new com.clubobsidian.dynamicgui.event.player.PlayerQuitEvent(playerWrapper)); + DynamicGui.get().getEventBus().callEvent(new com.clubobsidian.dynamicgui.event.player.PlayerQuitEvent(playerWrapper)); } @EventHandler public void onKick(PlayerKickEvent e) { PlayerWrapper playerWrapper = new BukkitPlayerWrapper(e.getPlayer()); - DynamicGui.get().getEventManager().callEvent(new com.clubobsidian.dynamicgui.event.player.PlayerKickEvent(playerWrapper)); + DynamicGui.get().getEventBus().callEvent(new com.clubobsidian.dynamicgui.event.player.PlayerKickEvent(playerWrapper)); } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryOpenListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryOpenListener.java index 8eaabefcd..e0cec08e5 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryOpenListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryOpenListener.java @@ -39,7 +39,7 @@ public void inventoryOpen(InventoryOpenEvent e) PlayerWrapper playerWrapper = new BukkitPlayerWrapper(player); InventoryWrapper inventoryWrapper = new BukkitInventoryWrapper(e.getInventory()); com.clubobsidian.dynamicgui.event.inventory.InventoryOpenEvent inventoryOpenEvent = new com.clubobsidian.dynamicgui.event.inventory.InventoryOpenEvent(playerWrapper, inventoryWrapper); - DynamicGui.get().getEventManager().callEvent(inventoryOpenEvent); + DynamicGui.get().getEventBus().callEvent(inventoryOpenEvent); } } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/PlayerInteractListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/PlayerInteractListener.java index ca0c8c14e..da9ce9b62 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/PlayerInteractListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/PlayerInteractListener.java @@ -38,7 +38,7 @@ public void interact(final PlayerInteractEvent e) PlayerWrapper playerWrapper = new BukkitPlayerWrapper(e.getPlayer()); LocationWrapper locationWrapper = new BukkitLocationWrapper(e.getClickedBlock().getLocation()); com.clubobsidian.dynamicgui.event.block.PlayerInteractEvent interactEvent = new com.clubobsidian.dynamicgui.event.block.PlayerInteractEvent(playerWrapper, locationWrapper, action); - DynamicGui.get().getEventManager().callEvent(interactEvent); + DynamicGui.get().getEventBus().callEvent(interactEvent); } } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/EntityClickListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/EntityClickListener.java index d5119037a..57a45cd2b 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/EntityClickListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/EntityClickListener.java @@ -37,7 +37,7 @@ public void onEntityClick(InteractEntityEvent e, @First Player player) PlayerWrapper playerWrapper = new SpongePlayerWrapper(player); EntityWrapper entityWrapper = new SpongeEntityWrapper(e.getTargetEntity()); - DynamicGui.get().getEventManager().callEvent(new com.clubobsidian.dynamicgui.event.inventory.PlayerInteractEntityEvent(playerWrapper, entityWrapper)); + DynamicGui.get().getEventBus().callEvent(new com.clubobsidian.dynamicgui.event.inventory.PlayerInteractEntityEvent(playerWrapper, entityWrapper)); } } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryClickListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryClickListener.java index 1aafa4bc5..51f96bc11 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryClickListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryClickListener.java @@ -102,7 +102,7 @@ else if (e instanceof ClickInventoryEvent.Secondary) InventoryWrapper inventoryWrapper = new SpongeInventoryWrapper(inventory); com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent clickEvent = new com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent(playerWrapper, inventoryWrapper, itemStackWrapper, slotIndexClicked, clickType, view); - DynamicGui.get().getEventManager().callEvent(clickEvent); + DynamicGui.get().getEventBus().callEvent(clickEvent); if(clickEvent.isCanceled()) { e.setCancelled(true); diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryCloseListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryCloseListener.java index 2cff9da4a..a8ce0bff1 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryCloseListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryCloseListener.java @@ -35,7 +35,7 @@ public void onInventoryClose(InteractInventoryEvent.Close e, @First Player playe { PlayerWrapper playerWrapper = new SpongePlayerWrapper(player); InventoryWrapper inventoryWrapper = new SpongeInventoryWrapper(e.getTargetInventory()); - DynamicGui.get().getEventManager().callEvent(new com.clubobsidian.dynamicgui.event.inventory.InventoryCloseEvent(playerWrapper, inventoryWrapper)); + DynamicGui.get().getEventBus().callEvent(new com.clubobsidian.dynamicgui.event.inventory.InventoryCloseEvent(playerWrapper, inventoryWrapper)); } //TODO - Check if kick event is needed @@ -43,6 +43,6 @@ public void onInventoryClose(InteractInventoryEvent.Close e, @First Player playe public void onQuit(ClientConnectionEvent.Disconnect e, @First Player player) { PlayerWrapper playerWrapper = new SpongePlayerWrapper(player); - DynamicGui.get().getEventManager().callEvent(new com.clubobsidian.dynamicgui.event.player.PlayerQuitEvent(playerWrapper)); + DynamicGui.get().getEventBus().callEvent(new com.clubobsidian.dynamicgui.event.player.PlayerQuitEvent(playerWrapper)); } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryOpenListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryOpenListener.java index fb1294320..855b355e3 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryOpenListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryOpenListener.java @@ -36,6 +36,6 @@ public void onInventoryOpen(InteractInventoryEvent.Open e, @First Player player) PlayerWrapper playerWrapper = new SpongePlayerWrapper(player); InventoryWrapper inventoryWrapper = new SpongeInventoryWrapper(e.getTargetInventory()); com.clubobsidian.dynamicgui.event.inventory.InventoryOpenEvent inventoryOpenEvent = new com.clubobsidian.dynamicgui.event.inventory.InventoryOpenEvent(playerWrapper, inventoryWrapper); - DynamicGui.get().getEventManager().callEvent(inventoryOpenEvent); + DynamicGui.get().getEventBus().callEvent(inventoryOpenEvent); } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/PlayerInteractListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/PlayerInteractListener.java index a357dfa6a..9ffec8e3c 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/PlayerInteractListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/PlayerInteractListener.java @@ -51,7 +51,7 @@ public void playerInteract(InteractBlockEvent e, @First Player player) PlayerWrapper playerWrapper = new SpongePlayerWrapper(player); LocationWrapper locationWrapper = new SpongeLocationWrapper>(location.get()); com.clubobsidian.dynamicgui.event.block.PlayerInteractEvent interactEvent = new com.clubobsidian.dynamicgui.event.block.PlayerInteractEvent(playerWrapper, locationWrapper, action); - DynamicGui.get().getEventManager().callEvent(interactEvent); + DynamicGui.get().getEventBus().callEvent(interactEvent); } } } From 00dcf2e5caba2cb7f6e37f32f80779f3e8f3622b Mon Sep 17 00:00:00 2001 From: virustotalop Date: Mon, 19 Aug 2019 05:48:03 -0700 Subject: [PATCH 02/28] Shade trident Shade trident to com.clubobsidian.dynamicgui.shaded.trident package --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 12b4df8fb..a3d9f6705 100644 --- a/build.gradle +++ b/build.gradle @@ -43,6 +43,7 @@ shadowJar { relocate 'com.google.common', 'com.clubobsidian.dynamicgui.shaded.guava' relocate 'com.google.gson', 'com.clubobsidian.dynamicgui.shaded.gson' relocate 'org.yaml.snakeyaml', 'com.clubobsidian.dynamicgui.shaded.snakeyaml' + relocate 'com.clubobsidian.trident', 'com.clubobsidian.dynamicgui.shaded.trident' baseName = 'DynamicGui' classifier = '' } From 73a2132c81b0d09aafde4f8978ffdbd4b93fbbac Mon Sep 17 00:00:00 2001 From: virustotalop Date: Mon, 19 Aug 2019 06:29:15 -0700 Subject: [PATCH 03/28] Update to trident 2.0.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a3d9f6705..dbabdf6b5 100644 --- a/build.gradle +++ b/build.gradle @@ -60,7 +60,7 @@ dependencies { compile 'org.apache.commons:commons-lang3:3.9' compile 'commons-io:commons-io:2.6' compile 'com.github.clubobsidian:wrappy:1.8.0' - compile 'com.github.clubobsidian:trident:2.0.0' + compile 'com.github.clubobsidian:trident:2.0.1' compile 'com.udojava:EvalEx:2.1' compile 'com.github.ClubObsidian:FuzzUtil:1.1.0' } \ No newline at end of file From 890f60cb49886e6bf9d16d0adfe2088045f7f7a9 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Tue, 20 Aug 2019 23:07:22 -0700 Subject: [PATCH 04/28] Make changes for DynamicGui 4.x Made necessary changes for DynamicGui 4.x. Numerous code changes and a whole new function system, npc system and many more features. --- build.gradle | 1 + .../dynamicgui/builder/FunctionBuilder.java | 7 +- .../dynamicgui/builder/GuiBuilder.java | 6 +- .../dynamicgui/builder/SlotBuilder.java | 6 +- .../dynamicgui/function/EmptyFunction.java | 46 --- .../dynamicgui/gui/FunctionOwner.java | 3 +- .../com/clubobsidian/dynamicgui/gui/Gui.java | 27 +- .../com/clubobsidian/dynamicgui/gui/Slot.java | 102 +------ .../listener/EntityClickListener.java | 32 ++- .../listener/InventoryClickListener.java | 15 +- .../manager/dynamicgui/FunctionManager.java | 33 +-- .../manager/dynamicgui/GuiManager.java | 262 +++++------------- .../dynamicgui/plugin/DynamicGuiPlugin.java | 2 +- .../plugin/bukkit/BukkitPlugin.java | 54 ---- .../plugin/sponge/SpongePlugin.java | 12 - .../dynamicgui/registry/npc/NPCRegistry.java | 3 +- .../npc/citizens/CitizensRegistry.java | 8 +- .../dynamicgui/util/FunctionUtil.java | 178 +++--------- .../dynamicgui/util/ReflectionUtil.java | 4 +- 19 files changed, 197 insertions(+), 604 deletions(-) delete mode 100644 src/main/java/com/clubobsidian/dynamicgui/function/EmptyFunction.java diff --git a/build.gradle b/build.gradle index dbabdf6b5..25f5a4ac2 100644 --- a/build.gradle +++ b/build.gradle @@ -61,6 +61,7 @@ dependencies { compile 'commons-io:commons-io:2.6' compile 'com.github.clubobsidian:wrappy:1.8.0' compile 'com.github.clubobsidian:trident:2.0.1' + compile 'com.github.clubobsidian:dynamicguiparser:1.6.0' compile 'com.udojava:EvalEx:2.1' compile 'com.github.ClubObsidian:FuzzUtil:1.1.0' } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/builder/FunctionBuilder.java b/src/main/java/com/clubobsidian/dynamicgui/builder/FunctionBuilder.java index 43374ab83..db57f00f4 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/builder/FunctionBuilder.java +++ b/src/main/java/com/clubobsidian/dynamicgui/builder/FunctionBuilder.java @@ -15,8 +15,7 @@ */ package com.clubobsidian.dynamicgui.builder; -import com.clubobsidian.dynamicgui.function.EmptyFunction; -import com.clubobsidian.dynamicgui.function.Function; +import com.clubobsidian.dynamicgui.parser.function.FunctionData; public class FunctionBuilder { @@ -35,8 +34,8 @@ public FunctionBuilder setData(String data) return this; } - public Function build() + public FunctionData build() { - return new EmptyFunction(this.name, this.data); + return new FunctionData(this.name, this.data); } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/builder/GuiBuilder.java b/src/main/java/com/clubobsidian/dynamicgui/builder/GuiBuilder.java index 2dea2dcd3..31b13ab22 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/builder/GuiBuilder.java +++ b/src/main/java/com/clubobsidian/dynamicgui/builder/GuiBuilder.java @@ -133,8 +133,8 @@ public GuiBuilder addFailFunction(String failOn, Function function) return this; } - public Gui build() + /*public Gui build() { - return new Gui(this.name, this.type, this.title, this.rows, this.close, this.modeEnum, this.npcIds, this.slots, this.locs, this.functions, this.failFunctions); - } + return new Gui(this.name, this.type, this.title, this.rows, this.close, this.modeEnum, this.npcIds, this.slots, this.locs); + }*/ } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/builder/SlotBuilder.java b/src/main/java/com/clubobsidian/dynamicgui/builder/SlotBuilder.java index 9b968a7a4..b9dc90a9b 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/builder/SlotBuilder.java +++ b/src/main/java/com/clubobsidian/dynamicgui/builder/SlotBuilder.java @@ -252,8 +252,8 @@ public SlotBuilder addLore(ArrayList lore) return this; } - public Slot build() + /*public Slot build() { - return new Slot(this.icon, this.name, this.nbt, this.data, this.close, this.lore, this.enchants, this.index, this.functions, this.failFunctions, this.leftClickFunctions, this.leftClickFailFunctions, this.rightClickFunctions, this.rightClickFailFunctions, this.middleClickFunctions, this.middleClickFailFunctions, this.loadFunctions, this.failLoadFunctions, this.amount); - } + return new Slot(this.index, this.amount,this.icon, this.name, this.nbt, this.data, this.close, this.lore, this.enchants); + }*/ } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/function/EmptyFunction.java b/src/main/java/com/clubobsidian/dynamicgui/function/EmptyFunction.java deleted file mode 100644 index fbb8d7521..000000000 --- a/src/main/java/com/clubobsidian/dynamicgui/function/EmptyFunction.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright 2019 Club Obsidian and contributors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.clubobsidian.dynamicgui.function; - -import com.clubobsidian.dynamicgui.entity.PlayerWrapper; - -/** - * - * @author virustotal - * - * This function is empty on purpose. Meant as a data - * holder for internal usage. By design this is how DynamicGUI - * was written but Function is now an abstract class. This is - * subject to change in the future. - */ -public class EmptyFunction extends Function { - - /** - * - */ - private static final long serialVersionUID = -1802471782257186804L; - - public EmptyFunction(String name, String data) - { - super(name, data); - } - - @Override - public boolean function(PlayerWrapper playerWrapper) - { - return false; - } -} \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/FunctionOwner.java b/src/main/java/com/clubobsidian/dynamicgui/gui/FunctionOwner.java index 40af6dd91..135cf4b37 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/FunctionOwner.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/FunctionOwner.java @@ -21,7 +21,6 @@ public interface FunctionOwner { - public List getFunctions(); - public List getFailFunctions(String key); + } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java b/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java index 27cb87079..cc8ef4d1f 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java @@ -22,11 +22,11 @@ import org.apache.commons.lang3.SerializationUtils; import com.clubobsidian.dynamicgui.entity.PlayerWrapper; -import com.clubobsidian.dynamicgui.function.Function; import com.clubobsidian.dynamicgui.inventory.InventoryWrapper; import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; import com.clubobsidian.dynamicgui.manager.dynamicgui.ReplacerManager; import com.clubobsidian.dynamicgui.manager.inventory.InventoryManager; +import com.clubobsidian.dynamicgui.parser.gui.GuiToken; import com.clubobsidian.dynamicgui.util.ChatColor; import com.clubobsidian.dynamicgui.world.LocationWrapper; @@ -45,11 +45,10 @@ public class Gui implements Serializable, FunctionOwner { private Boolean close; private ModeEnum modeEnum; private List> locations; - private List npcIds; - private List functions; - private Map> failFunctions; + private Map> npcIds; private transient InventoryWrapper inventoryWrapper; - public Gui(String name, String type, String title, int rows, Boolean close, ModeEnum modeEnum, List npcIds, List slots, List> locations, List functions, Map> failFunctions) + private transient GuiToken token; + public Gui(String name, String type, String title, int rows, Boolean close, ModeEnum modeEnum, Map> npcIds, List slots, List> locations, GuiToken token) { this.name = name; this.type = type; @@ -60,9 +59,8 @@ public Gui(String name, String type, String title, int rows, Boolean close, Mode this.modeEnum = modeEnum; this.npcIds = npcIds; this.locations = locations; - this.functions = functions; - this.failFunctions = failFunctions; this.inventoryWrapper = null; + this.token = token; } public InventoryWrapper buildInventory(PlayerWrapper player) @@ -145,7 +143,7 @@ public void setClose(Boolean close) this.close = close; } - public List getNpcIds() + public Map> getNpcIds() { return this.npcIds; } @@ -160,19 +158,14 @@ public ModeEnum getModeEnum() return this.modeEnum; } - public List getFunctions() - { - return this.functions; - } - - public List getFailFunctions(String key) + public InventoryWrapper getInventoryWrapper() { - return this.failFunctions.get(key); + return this.inventoryWrapper; } - public InventoryWrapper getInventoryWrapper() + public GuiToken getToken() { - return this.inventoryWrapper; + return this.token; } public Gui clone() diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java b/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java index 49d4ed036..7ad1ba790 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java @@ -18,14 +18,13 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import java.util.Map; import com.clubobsidian.dynamicgui.enchantment.EnchantmentWrapper; import com.clubobsidian.dynamicgui.entity.PlayerWrapper; -import com.clubobsidian.dynamicgui.function.Function; import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; import com.clubobsidian.dynamicgui.manager.dynamicgui.ReplacerManager; import com.clubobsidian.dynamicgui.manager.inventory.ItemStackManager; +import com.clubobsidian.dynamicgui.parser.slot.SlotToken; public class Slot implements Serializable, FunctionOwner { @@ -38,46 +37,17 @@ public class Slot implements Serializable, FunctionOwner { private String nbt; private short data; private int index; - private List loadFunctions; - private Map> failLoadFunctions; - //All clicks - private List functions; - private Map> failFunctions; - //Left click - private List leftClickFunctions; - private Map> leftClickFailFunctions; - //Right click - private List rightClickFunctions; - private Map> rightClickFailFunctions; - //Middle click - private List middleClickFunctions; - private Map> middleClickFailFunctions; + private List lore; private List enchants; private Boolean close; private int amount; private ItemStackWrapper itemStack; private Gui owner; - - public Slot(String icon, String name, String nbt, short data, Boolean close, List lore, List enchants, int index, List functions, List leftClickFunctions, Map> leftClickFailFunctions, List rightClickFunctions, Map> rightClickFailFunctions, List middleClickFunctions, Map> middleClickFailFunctions, Map> failFunctions, List loadFunctions, Map> failLoadFunctions) - { - this(icon, name, nbt, data, close, lore, enchants, index, functions, failFunctions, leftClickFunctions, leftClickFailFunctions, rightClickFunctions, rightClickFailFunctions, middleClickFunctions, middleClickFailFunctions, loadFunctions, failLoadFunctions, 1); - //, ArrayList leftClickFunctions, HashMap> leftClickFailFunctions, ArrayList rightClickFunctions, HashMap> rightClickFailFunctions, ArrayList middleClickFunctions, HashMap> middleClickFailFunctions, - } - - public Slot(String icon, String name, String nbt, short data, Boolean close, List lore, List enchants, int index, List functions, Map> failFunctions, List leftClickFunctions, Map> leftClickFailFunctions, List rightClickFunctions, Map> rightClickFailFunctions, List middleClickFunctions, Map> middleClickFailFunctions, List loadFunctions, Map> failLoadFunctions, int amount) + private transient SlotToken token; + public Slot(int index, int amount, String icon, String name, String nbt, short data, Boolean close, List lore, List enchants, SlotToken token) { this.icon = icon; - this.failFunctions = failFunctions; - this.loadFunctions = loadFunctions; - this.failLoadFunctions = failLoadFunctions; - this.functions = functions; - this.leftClickFunctions = leftClickFunctions; - this.leftClickFailFunctions = leftClickFailFunctions; - this.rightClickFunctions = rightClickFunctions; - this.rightClickFailFunctions = rightClickFailFunctions; - this.middleClickFunctions = middleClickFunctions; - this.middleClickFailFunctions = middleClickFailFunctions; this.data = data; this.name = name; this.nbt = nbt; @@ -86,11 +56,7 @@ public Slot(String icon, String name, String nbt, short data, Boolean close, Lis this.close = close; this.index = index; this.amount = amount; - } - - public String getIcon() - { - return this.icon; + this.token = token; } public int getIndex() @@ -103,59 +69,19 @@ public void setIndex(int index) this.index = index; } - public short getData() - { - return this.data; - } - - public List getFunctions() - { - return this.functions; - } - - public List getFailFunctions(String key) - { - return this.failFunctions.get(key); - } - - public List getLeftClickFunctions() - { - return this.leftClickFunctions; - } - - public List getLeftClickFailFunctions(String key) - { - return this.leftClickFailFunctions.get(key); - } - - public List getRightClickFunctions() - { - return this.rightClickFunctions; - } - - public List getRightClickFailFunctions(String key) - { - return this.rightClickFailFunctions.get(key); - } - - public List getMiddleClickFunctions() - { - return this.middleClickFunctions; - } - - public List getMiddleClickFailFunctions(String key) + public int getAmount() { - return this.middleClickFailFunctions.get(key); + return this.amount; } - public List getLoadFailFunctions(String key) + public String getIcon() { - return this.failLoadFunctions.get(key); + return this.icon; } - public List getLoadFunctions() + public short getData() { - return this.loadFunctions; + return this.data; } public Boolean getClose() @@ -168,14 +94,14 @@ public void setClose(Boolean close) this.close = close; } - public int getAmount() + public SlotToken getToken() { - return this.amount; + return this.token; } public ItemStackWrapper buildItemStack(PlayerWrapper playerWrapper) { - ItemStackWrapper builderItem = ItemStackManager.get().createItemStackWrapper(this.icon, this.getAmount()); + ItemStackWrapper builderItem = ItemStackManager.get().createItemStackWrapper(this.icon, this.amount); if(this.getData() != 0) builderItem.setDurability(this.getData()); diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/EntityClickListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/EntityClickListener.java index c3e20233e..2a290755c 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/EntityClickListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/EntityClickListener.java @@ -15,12 +15,17 @@ */ package com.clubobsidian.dynamicgui.listener; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; + import com.clubobsidian.dynamicgui.DynamicGui; import com.clubobsidian.dynamicgui.entity.EntityWrapper; import com.clubobsidian.dynamicgui.event.inventory.PlayerInteractEntityEvent; import com.clubobsidian.dynamicgui.gui.Gui; import com.clubobsidian.dynamicgui.manager.dynamicgui.GuiManager; import com.clubobsidian.dynamicgui.registry.npc.NPC; +import com.clubobsidian.dynamicgui.registry.npc.NPCRegistry; import com.clubobsidian.trident.EventHandler; public class EntityClickListener { @@ -30,17 +35,32 @@ public void onEntityClick(PlayerInteractEntityEvent e) { if(GuiManager.get().hasGuiCurrently(e.getPlayerWrapper())) return; - + EntityWrapper entityWrapper = e.getEntityWrapper(); - NPC npc = DynamicGui.get().getPlugin().getNPC(entityWrapper); - if(npc != null) + List registeries = DynamicGui.get().getPlugin().getNPCRegistries(); + for(NPCRegistry registry : registeries) { for(Gui gui : GuiManager.get().getGuis()) { - if(gui.getNpcIds().contains(npc.getMeta().getId())) + Iterator>> it = gui.getNpcIds().entrySet().iterator(); + while(it.hasNext()) { - GuiManager.get().openGui(e.getPlayerWrapper(), gui); - break; + Entry> next = it.next(); + String registryName = next.getKey(); + List ids = next.getValue(); + + if(registryName.equals(registry.getName())) + { + NPC npc = registry.getNPC(entityWrapper); + if(npc != null) + { + if(ids.contains(npc.getMeta().getId())) + { + GuiManager.get().openGui(e.getPlayerWrapper(), gui); + break; + } + } + } } } } diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryClickListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryClickListener.java index 3b258c272..0a5fda7fa 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryClickListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryClickListener.java @@ -19,12 +19,13 @@ import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent; -import com.clubobsidian.dynamicgui.function.Function; import com.clubobsidian.dynamicgui.gui.Gui; import com.clubobsidian.dynamicgui.gui.InventoryView; import com.clubobsidian.dynamicgui.gui.Slot; import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; import com.clubobsidian.dynamicgui.manager.dynamicgui.GuiManager; +import com.clubobsidian.dynamicgui.parser.function.FunctionType; +import com.clubobsidian.dynamicgui.parser.function.tree.FunctionNode; import com.clubobsidian.dynamicgui.util.FunctionUtil; import com.clubobsidian.trident.EventHandler; @@ -78,15 +79,13 @@ public void invClick(final InventoryClickEvent e) if(slot == null) return; - List functions = slot.getFunctions(); - List leftClickFunctions = slot.getLeftClickFunctions(); - List rightClickFunctions = slot.getRightClickFunctions(); - List middleClickFunctions = slot.getMiddleClickFunctions(); + List functions = slot.getToken().getFunctionTree().getRootNodes(); - if(functions == null && leftClickFunctions == null && rightClickFunctions == null && middleClickFunctions != null) + if(functions.size() == 0) return; - FunctionUtil.tryFunctions(gui, slot, e.getClick(), player); + String clickString = e.getClick().toString(); + FunctionUtil.tryFunctions(slot, FunctionType.valueOf(clickString), player); Boolean close = null; if(slot.getClose() != null) @@ -98,7 +97,5 @@ else if(gui.getClose() != null) if(close) player.closeInventory(); - - } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/FunctionManager.java b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/FunctionManager.java index abcc3cab2..92e063659 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/FunctionManager.java +++ b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/FunctionManager.java @@ -45,7 +45,13 @@ public static FunctionManager get() public Function getFunctionByName(String functionName) { String normalized = StringFuzz.normalize(functionName); - return this.functions.get(normalized); + Function function = this.functions.get(normalized); + if(function == null) + { + return null; + } + + return function.clone(); } public List getFunctions() @@ -65,29 +71,4 @@ public boolean removeFunctionByName(String functionName) String normalized = StringFuzz.normalize(functionName); return this.functions.keySet().remove(normalized); } - - public String[] parseData(String data) - { - String[] ar = new String[2]; - String dat = null; - String[] args = data.split(":"); - - if(data.charAt(data.indexOf(":") + 1) == ' ') - { - dat = args[1].substring(1); - } - else - { - dat = args[1]; - } - if(args.length > 2) - { - for(int i = 2; i < args.length; i++) - dat += ":" + args[i]; - } - - ar[0] = args[0]; - ar[1] = dat; - return ar; - } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java index 6a900fce1..52d2f6c10 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java +++ b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java @@ -22,8 +22,10 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.UUID; import org.apache.commons.io.FileUtils; @@ -31,8 +33,6 @@ import com.clubobsidian.dynamicgui.DynamicGui; import com.clubobsidian.dynamicgui.enchantment.EnchantmentWrapper; import com.clubobsidian.dynamicgui.entity.PlayerWrapper; -import com.clubobsidian.dynamicgui.function.EmptyFunction; -import com.clubobsidian.dynamicgui.function.Function; import com.clubobsidian.dynamicgui.gui.Gui; import com.clubobsidian.dynamicgui.gui.ModeEnum; import com.clubobsidian.dynamicgui.gui.Slot; @@ -40,12 +40,14 @@ import com.clubobsidian.dynamicgui.manager.entity.EntityManager; import com.clubobsidian.dynamicgui.manager.material.MaterialManager; import com.clubobsidian.dynamicgui.manager.world.LocationManager; +import com.clubobsidian.dynamicgui.parser.function.FunctionType; +import com.clubobsidian.dynamicgui.parser.gui.GuiToken; +import com.clubobsidian.dynamicgui.parser.slot.SlotToken; import com.clubobsidian.dynamicgui.plugin.DynamicGuiPlugin; import com.clubobsidian.dynamicgui.server.ServerType; import com.clubobsidian.dynamicgui.util.ChatColor; import com.clubobsidian.dynamicgui.util.FunctionUtil; import com.clubobsidian.dynamicgui.world.LocationWrapper; -import com.clubobsidian.fuzzutil.StringFuzz; import com.clubobsidian.wrappy.Configuration; import com.clubobsidian.wrappy.ConfigurationSection; @@ -53,8 +55,6 @@ public class GuiManager { private static GuiManager instance; - private static int GUI_MAX_SIZE = 54; - private List guis; private Map playerGuis; private GuiManager() @@ -152,13 +152,20 @@ public boolean openGui(PlayerWrapper playerWrapper, Gui gui) } Gui clonedGui = gui.clone(); - boolean ran = FunctionUtil.tryGuiFunctions(clonedGui, playerWrapper); + + //Run gui load functions + boolean ran = FunctionUtil.tryFunctions(gui, FunctionType.LOAD, playerWrapper); if(ran) { InventoryWrapper inventoryWrapper = clonedGui.buildInventory(playerWrapper); - FunctionUtil.tryLoadFunctions(playerWrapper, clonedGui); + + //Run slot load functions + for(Slot slot : clonedGui.getSlots()) + { + FunctionUtil.tryFunctions(slot, FunctionType.LOAD, playerWrapper); + } if(inventoryWrapper == null) return false; @@ -267,225 +274,84 @@ public void loadRemoteGuis() private void loadGuiFromConfiguration(String guiName, Configuration config) { - String guiType = config.getString("gui-type"); - if(guiType != null) - guiType = guiType.toUpperCase(); - - String guiTitle = config.getString("gui-title"); - int rows = config.getInteger("rows"); - if(rows == 0) - rows = 1; - - int lastSlot = getLastSlot(config) + 1; - - int calculatedRow = (lastSlot) / 9; - if(lastSlot % 9 != 0) - calculatedRow += 1; - - if(calculatedRow > rows) - rows = calculatedRow; - - List slots = this.createSlots(rows, config); - - final Gui gui = this.createGui(config, DynamicGui.get().getPlugin(), guiName, guiType, guiTitle, rows, slots); + GuiToken guiToken = new GuiToken(config); + List slots = this.createSlots(guiToken); + final Gui gui = this.createGui(guiToken, guiName, slots, DynamicGui.get().getPlugin()); this.guis.add(gui); DynamicGui.get().getLogger().info("gui \"" + gui.getName() + "\" has been loaded!"); } - - private Map> createFailFunctions(ConfigurationSection section, String end) - { - Map> failFunctions = new HashMap<>(); //check ends with - for(String key : section.getKeys()) - { - if(key.endsWith(end)) - { - List failFuncs = new ArrayList<>(); - for(String string : section.getStringList(key)) - { - String[] array = FunctionManager.get().parseData(string); - if(FunctionManager.get().getFunctionByName(array[0]) == null) - { - DynamicGui.get().getLogger().error("A function cannot be found by the name " + array[0] + " is a dependency not yet loaded?"); - } - - Function func = new EmptyFunction(array[0], array[1]); - failFuncs.add(func); - } - String[] split = key.split("-"); - String str = StringFuzz.normalize(split[0]); - if(split.length > 3) - { - for(int j = 1; j < split.length - 1; j++) - { - str += "-" + split[j]; - } - } - failFunctions.put(str, failFuncs); - } - } - return failFunctions; - } - - private List createFunctions(ConfigurationSection section, String name) - { - List functions = new ArrayList<>(); - if(section.get(name) != null) - { - for(String string : section.getStringList(name)) - { - String[] array = FunctionManager.get().parseData(string); - if(FunctionManager.get().getFunctionByName(array[0]) == null) - { - DynamicGui.get().getLogger().error("A function cannot be found by the name " + array[0] + " is a dependency not yet loaded?"); - } - Function func = new EmptyFunction(array[0], array[1]); - functions.add(func); - - } - } - return functions; - } - - private List createSlots(int rows, Configuration yaml) + private List createSlots(GuiToken guiToken) { List slots = new ArrayList<>(); - for(int i = 0; i < rows * 9; i++) + Iterator> it = guiToken.getSlots().entrySet().iterator(); + while(it.hasNext()) { - if(yaml.get("" + i) != null) - { - ConfigurationSection section = yaml.getConfigurationSection(i + ""); - String icon = MaterialManager.get().normalizeMaterial(section.getString("icon")); - String name = null; + Entry next = it.next(); + int index = next.getKey(); + SlotToken slotToken = next.getValue(); + + String icon = MaterialManager.get().normalizeMaterial(slotToken.getIcon()); + String name = slotToken.getName(); - if(section.get("name") != null) - { - name = ChatColor.translateAlternateColorCodes('&', section.getString("name")); - } + if(name != null) + { + name = ChatColor.translateAlternateColorCodes('&', name); + } - String nbt = null; - if(section.get("nbt") != null) - { - nbt = section.getString("nbt"); - } - - List functions = this.createFunctions(section, "functions"); - List leftClickFunctions = this.createFunctions(section, "leftclick-functions"); - List rightClickFunctions = this.createFunctions(section, "rightclick-functions"); - List middleClickFunctions = this.createFunctions(section, "middleclick-functions"); - - - Map> failFunctions = this.createFailFunctions(section, "-failfunctions"); - Map> leftClickFailFunctions = this.createFailFunctions(section, "-leftclickfailfunctions"); - Map> rightClickFailFunctions = this.createFailFunctions(section, "-rightclickfailfunctions"); - Map> middleClickFailFunctions = this.createFailFunctions(section, "-middleclickfailfunctions"); - //fail functions - - List loadFunctions = this.createFunctions(section, "load-functions"); - Map> loadFailFunctions = this.createFailFunctions(section, "-loadfailfunctions"); - - - List lore = null; - if(section.get("lore") != null) - { - lore = new ArrayList<>(); - for(String ls : section.getStringList("lore")) - { - lore.add(ChatColor.translateAlternateColorCodes('&', ls)); - } - } + String nbt = slotToken.getNbt(); - List enchants = null; - if(section.get("enchants") != null) - { - enchants = new ArrayList(); - for(String ench : section.getStringList("enchants")) - { - String[] args = ench.split(","); - enchants.add(new EnchantmentWrapper(args[0], Integer.parseInt(args[1]))); - } - } - int amount = 1; - if(section.get("amount") != null) - { - amount = section.getInteger("amount"); - } + List lore = new ArrayList<>(); + for(String ls : slotToken.getLore()) + { + lore.add(ChatColor.translateAlternateColorCodes('&', ls)); + } - Boolean close = null; - if(section.get("close") != null) - { - close = section.getBoolean("close"); - } + List enchants = new ArrayList(); - short data = 0; - if(section.get("data") != null) - { - data = (short) section.getInteger("data"); - } - - slots.add(new Slot(icon, name, nbt, data, close, lore, enchants, i, functions, failFunctions, leftClickFunctions, leftClickFailFunctions, rightClickFunctions, rightClickFailFunctions, middleClickFunctions, middleClickFailFunctions, loadFunctions, loadFailFunctions, amount)); + for(String ench : slotToken.getEnchants()) + { + String[] args = ench.split(","); + enchants.add(new EnchantmentWrapper(args[0], Integer.parseInt(args[1]))); } + + int amount = slotToken.getAmount(); + + boolean close = slotToken.isClosed(); + + short data = slotToken.getData(); + + slots.add(new Slot(index, amount, icon, name, nbt, data, close, lore, enchants, slotToken)); } + return slots; } - - private Gui createGui(final Configuration yaml, final DynamicGuiPlugin plugin, final String guiName, final String guiType, final String guiTitle, final int rows, final List slots) + + private Gui createGui(final GuiToken guiToken, final String guiName, final List slots, final DynamicGuiPlugin plugin) { - //int commandsLoaded = 0; - if(yaml.get("alias") != null) + String type = guiToken.getType(); + String title = guiToken.getTitle(); + int rows = guiToken.getRows(); + + for(String alias : guiToken.getAlias()) { - for(String alias : yaml.getStringList("alias")) - { - plugin.createCommand(guiName, alias); - } + plugin.createCommand(guiName, alias); } - Boolean close = null; - if(yaml.get("close") != null) - { - close = yaml.getBoolean("close"); - } + boolean close = guiToken.isClosed(); List> locations = new ArrayList<>(); - if(yaml.get("locations") != null) - { - for(String location : yaml.getStringList("locations")) - { - locations.add(LocationManager.get().toLocationWrapper(location)); - } - } - - ModeEnum modeEnum = ModeEnum.ADD; - if(yaml.get("mode") != null) + for(String location : guiToken.getLocations()) { - modeEnum = ModeEnum.valueOf(yaml.getString("mode").toUpperCase()); + locations.add(LocationManager.get().toLocationWrapper(location)); } - List npcIds = new ArrayList<>(); - - if(yaml.get("npc-ids") != null) - { - npcIds = yaml.getIntegerList("npc-ids"); - } + ModeEnum modeEnum = ModeEnum.valueOf(guiToken.getMode().toString()); - List functions = this.createFunctions(yaml, "functions"); - Map> failFunctions = this.createFailFunctions(yaml, "-failfunctions"); + Map> npcIds = guiToken.getNpcs(); - return new Gui(guiName, guiType, guiTitle, rows, close, modeEnum, npcIds, slots, locations, functions, failFunctions); - } - - private int getLastSlot(Configuration yaml) - { - int lastIndex = 0; - for(int i = 0; i < GuiManager.GUI_MAX_SIZE; i++) - { - if(yaml.get(String.valueOf(i)) != null) - { - lastIndex = i; - } - } - return lastIndex; + return new Gui(guiName, type, title, rows, close, modeEnum, npcIds, slots, locations, guiToken); } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/plugin/DynamicGuiPlugin.java b/src/main/java/com/clubobsidian/dynamicgui/plugin/DynamicGuiPlugin.java index e45a40d13..adbb0da00 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/plugin/DynamicGuiPlugin.java +++ b/src/main/java/com/clubobsidian/dynamicgui/plugin/DynamicGuiPlugin.java @@ -22,7 +22,7 @@ import com.clubobsidian.dynamicgui.permission.Permission; import com.clubobsidian.dynamicgui.registry.npc.NPCRegistry; -public interface DynamicGuiPlugin extends NPCRegistry { +public interface DynamicGuiPlugin { public void start(); public void stop(); diff --git a/src/main/java/com/clubobsidian/dynamicgui/plugin/bukkit/BukkitPlugin.java b/src/main/java/com/clubobsidian/dynamicgui/plugin/bukkit/BukkitPlugin.java index 5391cd058..60d13b6a9 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/plugin/bukkit/BukkitPlugin.java +++ b/src/main/java/com/clubobsidian/dynamicgui/plugin/bukkit/BukkitPlugin.java @@ -122,33 +122,6 @@ public void stop() } - //TODO - /*@Override - public void onPluginMessageReceived(String channel, Player player, byte[] message) - { - //System.out.println("received: " + channel); - if (channel.equals("BungeeCord") || channel.equals("RedisBungee")) - { - ByteArrayDataInput in = ByteStreams.newDataInput(message); - String packet = in.readUTF(); - if(packet != null) - { - if(packet.equals("PlayerCount")) - { - //System.out.println("player count"); - String server = in.readUTF(); - //System.out.println("server: " + server); - if(this.serverPlayerCount.containsKey(server)) - { - int playerCount = in.readInt(); - //System.out.println("count: " + playerCount); - this.serverPlayerCount.put(server, playerCount); - } - } - } - } - }*/ - @Override public Economy getEconomy() { @@ -167,33 +140,6 @@ public List getNPCRegistries() return this.npcRegistries; } - @Override - public boolean isNPC(EntityWrapper entity) - { - for(NPCRegistry registry : this.getNPCRegistries()) - { - if(registry.isNPC(entity)) - { - return true; - } - } - return false; - } - - @Override - public NPC getNPC(EntityWrapper entityWrapper) - { - for(NPCRegistry registry : this.getNPCRegistries()) - { - NPC npc = registry.getNPC(entityWrapper); - if(npc != null) - { - return npc; - } - } - return null; - } - @Override public File getConfigFile() { diff --git a/src/main/java/com/clubobsidian/dynamicgui/plugin/sponge/SpongePlugin.java b/src/main/java/com/clubobsidian/dynamicgui/plugin/sponge/SpongePlugin.java index a13668d6c..59ef4645a 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/plugin/sponge/SpongePlugin.java +++ b/src/main/java/com/clubobsidian/dynamicgui/plugin/sponge/SpongePlugin.java @@ -117,18 +117,6 @@ public void stop() } - @Override - public boolean isNPC(EntityWrapper entity) { - // TODO Auto-generated method stub - return false; - } - - @Override - public NPC getNPC(EntityWrapper entity) { - // TODO Auto-generated method stub - return null; - } - @Override public Economy getEconomy() { diff --git a/src/main/java/com/clubobsidian/dynamicgui/registry/npc/NPCRegistry.java b/src/main/java/com/clubobsidian/dynamicgui/registry/npc/NPCRegistry.java index 311aa8e0c..80abaa6de 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/registry/npc/NPCRegistry.java +++ b/src/main/java/com/clubobsidian/dynamicgui/registry/npc/NPCRegistry.java @@ -19,7 +19,8 @@ public interface NPCRegistry { - public abstract boolean isNPC(EntityWrapper entityWrapper); + public String getName(); + public boolean isNPC(EntityWrapper entityWrapper); public NPC getNPC(EntityWrapper entityWrapper); } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/registry/npc/citizens/CitizensRegistry.java b/src/main/java/com/clubobsidian/dynamicgui/registry/npc/citizens/CitizensRegistry.java index 0ad325640..f349a36c2 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/registry/npc/citizens/CitizensRegistry.java +++ b/src/main/java/com/clubobsidian/dynamicgui/registry/npc/citizens/CitizensRegistry.java @@ -28,7 +28,7 @@ public class CitizensRegistry implements NPCRegistry { - private static String PLUGIN_NAME = "Citizens"; + private static final String PLUGIN_NAME = "Citizens"; private Class citizensApiClass; private Class npcClass; @@ -59,6 +59,12 @@ private Object getNPCRegistry() return null; } + @Override + public String getName() + { + return PLUGIN_NAME; + } + @Override public boolean isNPC(EntityWrapper entityWrapper) { diff --git a/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java b/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java index d3988dbbc..6d4c25996 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java +++ b/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java @@ -19,167 +19,81 @@ import com.clubobsidian.dynamicgui.DynamicGui; import com.clubobsidian.dynamicgui.entity.PlayerWrapper; -import com.clubobsidian.dynamicgui.event.inventory.Click; import com.clubobsidian.dynamicgui.function.Function; import com.clubobsidian.dynamicgui.gui.FunctionOwner; import com.clubobsidian.dynamicgui.gui.Gui; import com.clubobsidian.dynamicgui.gui.Slot; import com.clubobsidian.dynamicgui.manager.dynamicgui.FunctionManager; -import com.clubobsidian.dynamicgui.manager.dynamicgui.ReplacerManager; +import com.clubobsidian.dynamicgui.parser.function.FunctionData; +import com.clubobsidian.dynamicgui.parser.function.FunctionToken; +import com.clubobsidian.dynamicgui.parser.function.FunctionType; +import com.clubobsidian.dynamicgui.parser.function.tree.FunctionNode; +import com.clubobsidian.dynamicgui.parser.function.tree.FunctionTree; -public class FunctionUtil { +public final class FunctionUtil { - public static boolean tryGuiFunctions(Gui owner, PlayerWrapper playerWrapper) + private FunctionUtil() {} + + public static boolean tryFunctions(FunctionOwner owner, FunctionType type, PlayerWrapper playerWrapper) { - FunctionResponse result = null; - if(owner.getFunctions() != null) + if(owner instanceof Gui) { - result = tryFunctions(owner, playerWrapper, owner.getFunctions(), owner); - if(!result.result) - { - List failFunctions = owner.getFailFunctions(result.failedFunction); - if(failFunctions != null) - { - tryFunctions(owner, playerWrapper, failFunctions, owner); - } - return false; - } + Gui gui = (Gui) owner; + FunctionTree tree = gui.getToken().getFunctions(); + return recurFunctionNodes(tree.getRootNodes(), type, playerWrapper); } - return true; - } - - public static void tryLoadFunctions(PlayerWrapper playerWrapper, Gui gui) - { - for(Slot slot : gui.getSlots()) + else if(owner instanceof Slot) { - FunctionResponse result = FunctionUtil.tryFunctions(gui, playerWrapper, slot.getLoadFunctions(), slot); - if(!result.result) - { - List failFunctions = slot.getLoadFailFunctions(result.failedFunction); - if(failFunctions != null) - { - tryFunctions(gui, playerWrapper, failFunctions, slot); - } - } + Slot slot = (Slot) owner; + FunctionTree tree = slot.getToken().getFunctionTree(); + return recurFunctionNodes(tree.getRootNodes(), type, playerWrapper); } + return false; } - - public static void tryFunctions(Gui gui, Slot slot, Click inventoryClick, PlayerWrapper playerWrapper) + + private static boolean recurFunctionNodes(List functionNodes, FunctionType type, PlayerWrapper playerWrapper) { - FunctionResponse result = null; - if(slot.getFunctions() != null) - { - result = tryFunctions(gui, playerWrapper, slot.getFunctions(), slot); - if(!result.result) - { - List failFunctions = slot.getFailFunctions(result.failedFunction); - if(failFunctions != null) - { - tryFunctions(gui, playerWrapper, failFunctions, slot); - } - } - } - if(inventoryClick == Click.LEFT && slot.getLeftClickFunctions() != null) - { - result = tryFunctions(gui, playerWrapper, slot.getLeftClickFunctions(), slot); - if(!result.result) - { - List failFunctions = slot.getLeftClickFailFunctions(result.failedFunction); - if(failFunctions != null) - { - tryFunctions(gui, playerWrapper, failFunctions, slot); - } - - return; - } - } - else if(inventoryClick == Click.RIGHT && slot.getRightClickFunctions() != null) - { - result = tryFunctions(gui, playerWrapper, slot.getRightClickFunctions(), slot); - if(!result.result) - { - List failFunctions = slot.getRightClickFailFunctions(result.failedFunction); - if(failFunctions != null) - { - tryFunctions(gui, playerWrapper, failFunctions, slot); - } - - return; - } - } - else if(inventoryClick == Click.MIDDLE && slot.getMiddleClickFunctions() != null) + for(FunctionNode node : functionNodes) { - result = tryFunctions(gui, playerWrapper, slot.getMiddleClickFunctions(), slot); - if(!result.result) + FunctionToken functionToken = node.getToken(); + if(functionToken.getTypes().contains(type)) { - List failFunctions = slot.getMiddleClickFailFunctions(result.failedFunction); - if(failFunctions != null) + if(type != FunctionType.FAIL) { - tryFunctions(gui, playerWrapper, failFunctions, slot); + boolean ran = runFunctionData(functionToken.getFunctions(), playerWrapper); + if(!ran) + { + runFunctionData(functionToken.getFailOnFunctions(), playerWrapper); + return false; + } } - - return; } + return recurFunctionNodes(node.getChildren(), type, playerWrapper); } + return true; } - private static FunctionResponse tryFunctions(Gui gui, PlayerWrapper playerWrapper, List functions, FunctionOwner owner) + private static boolean runFunctionData(List datas, PlayerWrapper playerWrapper) { - FunctionResponse response = new FunctionResponse(true); - for(int i = 0; i < functions.size(); i++) + for(FunctionData data : datas) { - Function func = functions.get(i); - Function myFunc = null; - try - { - if(FunctionManager.get().getFunctionByName(func.getName()) == null) - { - DynamicGui.get().getLogger().error("Cannot find " + func.getName() + " for gui \"" + gui.getName() +"\" continuing!"); - continue; - } - - myFunc = FunctionManager.get().getFunctionByName(func.getName()).clone(); - String newData = func.getData(); - if(newData != null && newData.length() > 0) - { - newData = ReplacerManager.get().replace(func.getData(), playerWrapper); - } - myFunc.setData(newData); - myFunc.setOwner(owner); - myFunc.setIndex(i); - } - catch (IllegalArgumentException | SecurityException ex) + Function function = FunctionManager.get().getFunctionByName(data.getName()); + if(function == null) { - ex.printStackTrace(); + DynamicGui.get().getLogger().error("Invalid function " + data.getName()); + return false; } - - //Runs the function - boolean result = myFunc.function(playerWrapper); - if(!result) + if(data.getData() != null) { - //If the function fails return a failed function response - response = new FunctionResponse(false, func.getName()); - break; + function.setData(data.getData()); } + boolean ran = function.function(playerWrapper); + if(!ran) + { + return false; + } } - return response; - } - - private static class FunctionResponse - { - private boolean result; - private String failedFunction; - - public FunctionResponse(boolean result) - { - this(result, null); - } - - public FunctionResponse(boolean result, String failedFunction) - { - this.result = result; - this.failedFunction = failedFunction; - } + return true; } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/util/ReflectionUtil.java b/src/main/java/com/clubobsidian/dynamicgui/util/ReflectionUtil.java index 6cf65e124..0ab587c83 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/util/ReflectionUtil.java +++ b/src/main/java/com/clubobsidian/dynamicgui/util/ReflectionUtil.java @@ -18,8 +18,10 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; -public class ReflectionUtil { +public final class ReflectionUtil { + private ReflectionUtil() {} + public static Class classForName(String name) { try From 2367b6a7812f9f9f4fe5a2f40799aa76a6f3416a Mon Sep 17 00:00:00 2001 From: virustotalop Date: Tue, 20 Aug 2019 23:28:42 -0700 Subject: [PATCH 05/28] No longer make parser classes transient Parser classes shouldn't be transient, bump DynamicGui. --- build.gradle | 2 +- src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java | 2 +- .../clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 25f5a4ac2..67c8263b2 100644 --- a/build.gradle +++ b/build.gradle @@ -61,7 +61,7 @@ dependencies { compile 'commons-io:commons-io:2.6' compile 'com.github.clubobsidian:wrappy:1.8.0' compile 'com.github.clubobsidian:trident:2.0.1' - compile 'com.github.clubobsidian:dynamicguiparser:1.6.0' + compile 'com.github.clubobsidian:dynamicguiparser:df423bd50a' compile 'com.udojava:EvalEx:2.1' compile 'com.github.ClubObsidian:FuzzUtil:1.1.0' } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java b/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java index cc8ef4d1f..d71d8c42c 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java @@ -47,7 +47,7 @@ public class Gui implements Serializable, FunctionOwner { private List> locations; private Map> npcIds; private transient InventoryWrapper inventoryWrapper; - private transient GuiToken token; + private GuiToken token; public Gui(String name, String type, String title, int rows, Boolean close, ModeEnum modeEnum, Map> npcIds, List slots, List> locations, GuiToken token) { this.name = name; diff --git a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java index 52d2f6c10..a4fb0c760 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java +++ b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java @@ -158,7 +158,6 @@ public boolean openGui(PlayerWrapper playerWrapper, Gui gui) if(ran) { - InventoryWrapper inventoryWrapper = clonedGui.buildInventory(playerWrapper); //Run slot load functions From 26ebdba1669c2fb971e07cbd435ac3b4c6d20859 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Tue, 20 Aug 2019 23:29:53 -0700 Subject: [PATCH 06/28] Make SlotToken not transient --- src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java b/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java index 7ad1ba790..310d858ec 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java @@ -44,7 +44,7 @@ public class Slot implements Serializable, FunctionOwner { private int amount; private ItemStackWrapper itemStack; private Gui owner; - private transient SlotToken token; + private SlotToken token; public Slot(int index, int amount, String icon, String name, String nbt, short data, Boolean close, List lore, List enchants, SlotToken token) { this.icon = icon; From 6d7ea4d3d2d9bff83c071bb59848b559bed32bbb Mon Sep 17 00:00:00 2001 From: virustotalop Date: Wed, 21 Aug 2019 01:07:08 -0700 Subject: [PATCH 07/28] Run fail functions --- .../dynamicgui/util/FunctionUtil.java | 90 +++++++++++++++---- 1 file changed, 75 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java b/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java index 6d4c25996..6c891789a 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java +++ b/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java @@ -15,6 +15,7 @@ */ package com.clubobsidian.dynamicgui.util; +import java.util.ArrayList; import java.util.List; import com.clubobsidian.dynamicgui.DynamicGui; @@ -40,19 +41,19 @@ public static boolean tryFunctions(FunctionOwner owner, FunctionType type, Playe { Gui gui = (Gui) owner; FunctionTree tree = gui.getToken().getFunctions(); - return recurFunctionNodes(tree.getRootNodes(), type, playerWrapper); + return recurFunctionNodes(null, tree.getRootNodes(), type, playerWrapper); } else if(owner instanceof Slot) { Slot slot = (Slot) owner; FunctionTree tree = slot.getToken().getFunctionTree(); - return recurFunctionNodes(tree.getRootNodes(), type, playerWrapper); + return recurFunctionNodes(null, tree.getRootNodes(), type, playerWrapper); } return false; } - - private static boolean recurFunctionNodes(List functionNodes, FunctionType type, PlayerWrapper playerWrapper) + + private static boolean recurFunctionNodes(FunctionResponse fail, List functionNodes, FunctionType type, PlayerWrapper playerWrapper) { for(FunctionNode node : functionNodes) { @@ -61,39 +62,98 @@ private static boolean recurFunctionNodes(List functionNodes, Func { if(type != FunctionType.FAIL) { - boolean ran = runFunctionData(functionToken.getFunctions(), playerWrapper); - if(!ran) + FunctionResponse response = runFunctionData(functionToken.getFunctions(), playerWrapper); + + if(!response.result) { - runFunctionData(functionToken.getFailOnFunctions(), playerWrapper); + if(response.failedFunction == null) + { + return false; + } + + recurFunctionNodes(response, node.getChildren(), FunctionType.FAIL, playerWrapper); return false; } } + else if(type == FunctionType.FAIL) + { + if(isFail(fail, functionToken)) + { + FunctionResponse response = runFunctionData(functionToken.getFunctions(), playerWrapper); + if(!response.result) + { + recurFunctionNodes(response, node.getChildren(), FunctionType.FAIL, playerWrapper); + return false; + } + } + } } - return recurFunctionNodes(node.getChildren(), type, playerWrapper); + + return recurFunctionNodes(null, node.getChildren(), type, playerWrapper); } return true; } - - private static boolean runFunctionData(List datas, PlayerWrapper playerWrapper) + + private static FunctionResponse runFunctionData(List datas, PlayerWrapper playerWrapper) { for(FunctionData data : datas) { - Function function = FunctionManager.get().getFunctionByName(data.getName()); + String functionName = data.getName(); + String functionData = data.getData(); + Function function = FunctionManager.get().getFunctionByName(functionName); if(function == null) { DynamicGui.get().getLogger().error("Invalid function " + data.getName()); - return false; + return new FunctionResponse(false); } if(data.getData() != null) { - function.setData(data.getData()); + function.setData(functionData); } boolean ran = function.function(playerWrapper); if(!ran) { - return false; + return new FunctionResponse(false, functionName, functionData); } } - return true; + return new FunctionResponse(true); + } + + private static boolean isFail(FunctionResponse response, FunctionToken token) + { + for(FunctionData data : token.getFailOnFunctions()) + { + if(data.getName().equals(response.failedFunction)) + { + if(data.getData() == null) + { + return true; + } + else if(data.getData().equals(response.data)) + { + return true; + } + } + } + + return false; + } + + private static class FunctionResponse + { + private boolean result; + private String failedFunction; + private String data; + public FunctionResponse(boolean result) + { + this(result, null, null); + } + + public FunctionResponse(boolean result, String failedFunction, String data) + { + this.result = result; + this.failedFunction = failedFunction; + this.data = data; + } } } \ No newline at end of file From 111a92e36dd0ee9faeccf6711a12f8e6bc0d7457 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Wed, 21 Aug 2019 01:31:03 -0700 Subject: [PATCH 08/28] Drop pay function --- src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java b/src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java index 18984f18a..408197185 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java +++ b/src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java @@ -222,8 +222,6 @@ private void loadFunctions() //FunctionApi.get().addFunction(new ExpPayFunction("payexp")); FunctionManager.get().addFunction(new GuiFunction("gui")); - - FunctionManager.get().addFunction(new MoneyWithdrawFunction("pay")); FunctionManager.get().addFunction(new MoneyWithdrawFunction("moneywithdraw")); FunctionManager.get().addFunction(new MoneyDepositFunction("moneydeposit")); FunctionManager.get().addFunction(new MoneyBalanceFunction("moneybalance")); From b2a0b3373671f4623f83231190a817ccbcde9fc9 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Wed, 21 Aug 2019 02:40:08 -0700 Subject: [PATCH 09/28] Correctly set function owner --- .../plugin/bukkit/BukkitPlugin.java | 2 -- .../dynamicgui/util/FunctionUtil.java | 20 +++++++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/clubobsidian/dynamicgui/plugin/bukkit/BukkitPlugin.java b/src/main/java/com/clubobsidian/dynamicgui/plugin/bukkit/BukkitPlugin.java index 60d13b6a9..ba97cad32 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/plugin/bukkit/BukkitPlugin.java +++ b/src/main/java/com/clubobsidian/dynamicgui/plugin/bukkit/BukkitPlugin.java @@ -35,7 +35,6 @@ import com.clubobsidian.dynamicgui.command.bukkit.CustomCommandExecutor; import com.clubobsidian.dynamicgui.economy.Economy; import com.clubobsidian.dynamicgui.economy.bukkit.VaultEconomy; -import com.clubobsidian.dynamicgui.entity.EntityWrapper; import com.clubobsidian.dynamicgui.listener.bukkit.EntityClickListener; import com.clubobsidian.dynamicgui.listener.bukkit.InventoryClickListener; import com.clubobsidian.dynamicgui.listener.bukkit.InventoryCloseListener; @@ -46,7 +45,6 @@ import com.clubobsidian.dynamicgui.permission.Permission; import com.clubobsidian.dynamicgui.permission.bukkit.VaultPermission; import com.clubobsidian.dynamicgui.plugin.DynamicGuiPlugin; -import com.clubobsidian.dynamicgui.registry.npc.NPC; import com.clubobsidian.dynamicgui.registry.npc.NPCRegistry; import com.clubobsidian.dynamicgui.registry.npc.citizens.CitizensRegistry; import com.clubobsidian.dynamicgui.registry.replacer.impl.PlaceholderApiReplacerRegistry; diff --git a/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java b/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java index 6c891789a..7752ea5af 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java +++ b/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java @@ -15,7 +15,6 @@ */ package com.clubobsidian.dynamicgui.util; -import java.util.ArrayList; import java.util.List; import com.clubobsidian.dynamicgui.DynamicGui; @@ -41,19 +40,19 @@ public static boolean tryFunctions(FunctionOwner owner, FunctionType type, Playe { Gui gui = (Gui) owner; FunctionTree tree = gui.getToken().getFunctions(); - return recurFunctionNodes(null, tree.getRootNodes(), type, playerWrapper); + return recurFunctionNodes(null, owner, tree.getRootNodes(), type, playerWrapper); } else if(owner instanceof Slot) { Slot slot = (Slot) owner; FunctionTree tree = slot.getToken().getFunctionTree(); - return recurFunctionNodes(null, tree.getRootNodes(), type, playerWrapper); + return recurFunctionNodes(null, owner, tree.getRootNodes(), type, playerWrapper); } return false; } - private static boolean recurFunctionNodes(FunctionResponse fail, List functionNodes, FunctionType type, PlayerWrapper playerWrapper) + private static boolean recurFunctionNodes(FunctionResponse fail, FunctionOwner owner, List functionNodes, FunctionType type, PlayerWrapper playerWrapper) { for(FunctionNode node : functionNodes) { @@ -62,7 +61,7 @@ private static boolean recurFunctionNodes(FunctionResponse fail, List datas, PlayerWrapper playerWrapper) + private static FunctionResponse runFunctionData(FunctionOwner owner, List datas, PlayerWrapper playerWrapper) { for(FunctionData data : datas) { @@ -108,6 +107,7 @@ private static FunctionResponse runFunctionData(List datas, Player } if(data.getData() != null) { + function.setOwner(owner); function.setData(functionData); } boolean ran = function.function(playerWrapper); From 4a83e40623d42f08d3769688a151c618c495529b Mon Sep 17 00:00:00 2001 From: virustotalop Date: Wed, 21 Aug 2019 02:50:19 -0700 Subject: [PATCH 10/28] Built with dynamicgui parser 1.7.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 67c8263b2..1b59285fc 100644 --- a/build.gradle +++ b/build.gradle @@ -61,7 +61,7 @@ dependencies { compile 'commons-io:commons-io:2.6' compile 'com.github.clubobsidian:wrappy:1.8.0' compile 'com.github.clubobsidian:trident:2.0.1' - compile 'com.github.clubobsidian:dynamicguiparser:df423bd50a' + compile 'com.github.clubobsidian:dynamicguiparser:1.7.1' compile 'com.udojava:EvalEx:2.1' compile 'com.github.ClubObsidian:FuzzUtil:1.1.0' } \ No newline at end of file From 8222505851011c380e93c9cca7e0cfd4632c70fb Mon Sep 17 00:00:00 2001 From: virustotalop Date: Wed, 21 Aug 2019 03:19:10 -0700 Subject: [PATCH 11/28] Add user defined macros to readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index beef8895a..da93ba68c 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ Designed to make writing menus easy. * Custom replacers * Built-in replacer support * Support for [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) + * User defined macros * Loading guis from a remote location * Currently supports loading from a webserver * Different gui types From 124ef9f1a25196d05e22593fd152abf2b41fe7a2 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Wed, 21 Aug 2019 03:44:08 -0700 Subject: [PATCH 12/28] FunctionOwners now implement FunctionTree FunctionOwner implementation were implementing their specific token type now they implement the FunctionTree. --- .../dynamicgui/gui/FunctionOwner.java | 6 ++---- .../com/clubobsidian/dynamicgui/gui/Gui.java | 13 +++++++------ .../com/clubobsidian/dynamicgui/gui/Slot.java | 12 +++++++----- .../listener/InventoryClickListener.java | 2 +- .../manager/dynamicgui/GuiManager.java | 4 ++-- .../dynamicgui/util/FunctionUtil.java | 18 +----------------- 6 files changed, 20 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/FunctionOwner.java b/src/main/java/com/clubobsidian/dynamicgui/gui/FunctionOwner.java index 135cf4b37..48dd1d6e0 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/FunctionOwner.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/FunctionOwner.java @@ -15,12 +15,10 @@ */ package com.clubobsidian.dynamicgui.gui; -import java.util.List; - -import com.clubobsidian.dynamicgui.function.Function; +import com.clubobsidian.dynamicgui.parser.function.tree.FunctionTree; public interface FunctionOwner { - + public FunctionTree getFunctions(); } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java b/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java index d71d8c42c..477f84d12 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java @@ -26,7 +26,7 @@ import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; import com.clubobsidian.dynamicgui.manager.dynamicgui.ReplacerManager; import com.clubobsidian.dynamicgui.manager.inventory.InventoryManager; -import com.clubobsidian.dynamicgui.parser.gui.GuiToken; +import com.clubobsidian.dynamicgui.parser.function.tree.FunctionTree; import com.clubobsidian.dynamicgui.util.ChatColor; import com.clubobsidian.dynamicgui.world.LocationWrapper; @@ -47,8 +47,8 @@ public class Gui implements Serializable, FunctionOwner { private List> locations; private Map> npcIds; private transient InventoryWrapper inventoryWrapper; - private GuiToken token; - public Gui(String name, String type, String title, int rows, Boolean close, ModeEnum modeEnum, Map> npcIds, List slots, List> locations, GuiToken token) + private FunctionTree functions; + public Gui(String name, String type, String title, int rows, Boolean close, ModeEnum modeEnum, Map> npcIds, List slots, List> locations, FunctionTree functions) { this.name = name; this.type = type; @@ -60,7 +60,7 @@ public Gui(String name, String type, String title, int rows, Boolean close, Mode this.npcIds = npcIds; this.locations = locations; this.inventoryWrapper = null; - this.token = token; + this.functions = functions; } public InventoryWrapper buildInventory(PlayerWrapper player) @@ -163,9 +163,10 @@ public InventoryWrapper getInventoryWrapper() return this.inventoryWrapper; } - public GuiToken getToken() + @Override + public FunctionTree getFunctions() { - return this.token; + return this.functions; } public Gui clone() diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java b/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java index 310d858ec..146a67f51 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java @@ -24,6 +24,7 @@ import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; import com.clubobsidian.dynamicgui.manager.dynamicgui.ReplacerManager; import com.clubobsidian.dynamicgui.manager.inventory.ItemStackManager; +import com.clubobsidian.dynamicgui.parser.function.tree.FunctionTree; import com.clubobsidian.dynamicgui.parser.slot.SlotToken; public class Slot implements Serializable, FunctionOwner { @@ -44,8 +45,8 @@ public class Slot implements Serializable, FunctionOwner { private int amount; private ItemStackWrapper itemStack; private Gui owner; - private SlotToken token; - public Slot(int index, int amount, String icon, String name, String nbt, short data, Boolean close, List lore, List enchants, SlotToken token) + private FunctionTree functions; + public Slot(int index, int amount, String icon, String name, String nbt, short data, Boolean close, List lore, List enchants, FunctionTree functions) { this.icon = icon; this.data = data; @@ -56,7 +57,7 @@ public Slot(int index, int amount, String icon, String name, String nbt, short d this.close = close; this.index = index; this.amount = amount; - this.token = token; + this.functions = functions; } public int getIndex() @@ -94,9 +95,10 @@ public void setClose(Boolean close) this.close = close; } - public SlotToken getToken() + @Override + public FunctionTree getFunctions() { - return this.token; + return this.functions; } public ItemStackWrapper buildItemStack(PlayerWrapper playerWrapper) diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryClickListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryClickListener.java index 0a5fda7fa..ef1945881 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryClickListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryClickListener.java @@ -79,7 +79,7 @@ public void invClick(final InventoryClickEvent e) if(slot == null) return; - List functions = slot.getToken().getFunctionTree().getRootNodes(); + List functions = slot.getFunctions().getRootNodes(); if(functions.size() == 0) return; diff --git a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java index a4fb0c760..93deda499 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java +++ b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java @@ -321,7 +321,7 @@ private List createSlots(GuiToken guiToken) short data = slotToken.getData(); - slots.add(new Slot(index, amount, icon, name, nbt, data, close, lore, enchants, slotToken)); + slots.add(new Slot(index, amount, icon, name, nbt, data, close, lore, enchants, slotToken.getFunctionTree())); } @@ -351,6 +351,6 @@ private Gui createGui(final GuiToken guiToken, final String guiName, final List< Map> npcIds = guiToken.getNpcs(); - return new Gui(guiName, type, title, rows, close, modeEnum, npcIds, slots, locations, guiToken); + return new Gui(guiName, type, title, rows, close, modeEnum, npcIds, slots, locations, guiToken.getFunctions()); } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java b/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java index 7752ea5af..96731db22 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java +++ b/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java @@ -21,14 +21,11 @@ import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.function.Function; import com.clubobsidian.dynamicgui.gui.FunctionOwner; -import com.clubobsidian.dynamicgui.gui.Gui; -import com.clubobsidian.dynamicgui.gui.Slot; import com.clubobsidian.dynamicgui.manager.dynamicgui.FunctionManager; import com.clubobsidian.dynamicgui.parser.function.FunctionData; import com.clubobsidian.dynamicgui.parser.function.FunctionToken; import com.clubobsidian.dynamicgui.parser.function.FunctionType; import com.clubobsidian.dynamicgui.parser.function.tree.FunctionNode; -import com.clubobsidian.dynamicgui.parser.function.tree.FunctionTree; public final class FunctionUtil { @@ -36,20 +33,7 @@ private FunctionUtil() {} public static boolean tryFunctions(FunctionOwner owner, FunctionType type, PlayerWrapper playerWrapper) { - if(owner instanceof Gui) - { - Gui gui = (Gui) owner; - FunctionTree tree = gui.getToken().getFunctions(); - return recurFunctionNodes(null, owner, tree.getRootNodes(), type, playerWrapper); - } - else if(owner instanceof Slot) - { - Slot slot = (Slot) owner; - FunctionTree tree = slot.getToken().getFunctionTree(); - return recurFunctionNodes(null, owner, tree.getRootNodes(), type, playerWrapper); - } - - return false; + return recurFunctionNodes(null, owner, owner.getFunctions().getRootNodes(), type, playerWrapper); } private static boolean recurFunctionNodes(FunctionResponse fail, FunctionOwner owner, List functionNodes, FunctionType type, PlayerWrapper playerWrapper) From 56d5e0685480c4a3a32d095d8bc90e2a0fa3de72 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Wed, 21 Aug 2019 23:24:27 -0700 Subject: [PATCH 13/28] Start creating skeleton for animations --- .../dynamicgui/animation/AnimationHolder.java | 8 +++++++ .../dynamicgui/animation/Refresh.java | 7 ++++++ .../replacer/animation/AnimationReplacer.java | 23 +++++++++++++++++++ .../replacer/animation/package-info.java | 1 + 4 files changed, 39 insertions(+) create mode 100644 src/main/java/com/clubobsidian/dynamicgui/animation/AnimationHolder.java create mode 100644 src/main/java/com/clubobsidian/dynamicgui/animation/Refresh.java create mode 100644 src/main/java/com/clubobsidian/dynamicgui/replacer/animation/AnimationReplacer.java create mode 100644 src/main/java/com/clubobsidian/dynamicgui/replacer/animation/package-info.java diff --git a/src/main/java/com/clubobsidian/dynamicgui/animation/AnimationHolder.java b/src/main/java/com/clubobsidian/dynamicgui/animation/AnimationHolder.java new file mode 100644 index 000000000..d7ed5bfc3 --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/animation/AnimationHolder.java @@ -0,0 +1,8 @@ +package com.clubobsidian.dynamicgui.animation; + +public interface AnimationHolder extends Refresh { + + public int currentTick(); + public int tick(); + +} \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/animation/Refresh.java b/src/main/java/com/clubobsidian/dynamicgui/animation/Refresh.java new file mode 100644 index 000000000..e2fe34534 --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/animation/Refresh.java @@ -0,0 +1,7 @@ +package com.clubobsidian.dynamicgui.animation; + +public interface Refresh { + + public int getUpdateInterval(); + +} diff --git a/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/AnimationReplacer.java b/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/AnimationReplacer.java new file mode 100644 index 000000000..a2d346551 --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/AnimationReplacer.java @@ -0,0 +1,23 @@ +package com.clubobsidian.dynamicgui.replacer.animation; + +import com.clubobsidian.dynamicgui.animation.AnimationHolder; +import com.clubobsidian.dynamicgui.entity.PlayerWrapper; +import com.clubobsidian.dynamicgui.replacer.Replacer; + +public class AnimationReplacer extends Replacer { + + private AnimationHolder holder; + public AnimationReplacer(String toReplace, AnimationHolder holder) + { + super(toReplace); + this.holder = holder; + } + + @Override + public String replacement(String text, PlayerWrapper playerWrapper) + { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/package-info.java b/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/package-info.java new file mode 100644 index 000000000..df9b1b0f1 --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/package-info.java @@ -0,0 +1 @@ +package com.clubobsidian.dynamicgui.replacer.animation; \ No newline at end of file From 618f298413e61e96534962809ae81e675bbca9c0 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Wed, 21 Aug 2019 23:26:22 -0700 Subject: [PATCH 14/28] Refactor Gui buildInventory method player arg to playerWrapper --- src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java b/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java index 477f84d12..cdc85c35f 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java @@ -63,9 +63,9 @@ public Gui(String name, String type, String title, int rows, Boolean close, Mode this.functions = functions; } - public InventoryWrapper buildInventory(PlayerWrapper player) + public InventoryWrapper buildInventory(PlayerWrapper playerWrapper) { - String inventoryTitle = ReplacerManager.get().replace(this.title, player); + String inventoryTitle = ReplacerManager.get().replace(this.title, playerWrapper); if(inventoryTitle.length() > 32) inventoryTitle = inventoryTitle.substring(0,31); @@ -87,7 +87,7 @@ public InventoryWrapper buildInventory(PlayerWrapper player) if(slot != null) { slot.setOwner(this); - ItemStackWrapper item = slot.buildItemStack(player); + ItemStackWrapper item = slot.buildItemStack(playerWrapper); if(this.modeEnum == ModeEnum.ADD) { From 389f58d0e22ba2ac6da5c991dbb875c5dad82e90 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Thu, 22 Aug 2019 00:49:14 -0700 Subject: [PATCH 15/28] Initial animation support Initial annimation support, there are some caveats to this build such as load functions not really being supported. This could be done but I am unsure if it should be done. --- build.gradle | 2 +- .../clubobsidian/dynamicgui/DynamicGui.java | 5 ++ .../dynamicgui/animation/AnimationHolder.java | 4 +- .../{Refresh.java => Refreshable.java} | 2 +- .../function/impl/SetLoreFunction.java | 5 +- .../function/impl/SetNameFunction.java | 7 +- .../com/clubobsidian/dynamicgui/gui/Slot.java | 40 ++++++++-- .../manager/dynamicgui/AnimationManager.java | 76 +++++++++++++++++++ .../dynamicgui/AnimationReplacerManager.java | 58 ++++++++++++++ .../manager/dynamicgui/GuiManager.java | 4 +- .../replacer/AnimationReplacerRegistry.java | 25 ++++++ .../DynamicGuiAnimationReplacerRegistry.java | 64 ++++++++++++++++ .../replacer/AnimationReplacer.java | 35 +++++++++ .../replacer/animation/AnimationReplacer.java | 23 ------ .../animation/impl/TestAnimationReplacer.java | 34 +++++++++ .../replacer/animation/package-info.java | 1 - 16 files changed, 348 insertions(+), 37 deletions(-) rename src/main/java/com/clubobsidian/dynamicgui/animation/{Refresh.java => Refreshable.java} (73%) create mode 100644 src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationManager.java create mode 100644 src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationReplacerManager.java create mode 100644 src/main/java/com/clubobsidian/dynamicgui/registry/replacer/AnimationReplacerRegistry.java create mode 100644 src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/DynamicGuiAnimationReplacerRegistry.java create mode 100644 src/main/java/com/clubobsidian/dynamicgui/replacer/AnimationReplacer.java delete mode 100644 src/main/java/com/clubobsidian/dynamicgui/replacer/animation/AnimationReplacer.java create mode 100644 src/main/java/com/clubobsidian/dynamicgui/replacer/animation/impl/TestAnimationReplacer.java delete mode 100644 src/main/java/com/clubobsidian/dynamicgui/replacer/animation/package-info.java diff --git a/build.gradle b/build.gradle index 1b59285fc..3681c46e9 100644 --- a/build.gradle +++ b/build.gradle @@ -61,7 +61,7 @@ dependencies { compile 'commons-io:commons-io:2.6' compile 'com.github.clubobsidian:wrappy:1.8.0' compile 'com.github.clubobsidian:trident:2.0.1' - compile 'com.github.clubobsidian:dynamicguiparser:1.7.1' + compile 'com.github.clubobsidian:dynamicguiparser:f08fa6af54' compile 'com.udojava:EvalEx:2.1' compile 'com.github.ClubObsidian:FuzzUtil:1.1.0' } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java b/src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java index 408197185..95a5d4f96 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java +++ b/src/main/java/com/clubobsidian/dynamicgui/DynamicGui.java @@ -52,11 +52,14 @@ import com.clubobsidian.dynamicgui.function.impl.StatisticFunction; import com.clubobsidian.dynamicgui.function.impl.condition.ConditionFunction; import com.clubobsidian.dynamicgui.logger.LoggerWrapper; +import com.clubobsidian.dynamicgui.manager.dynamicgui.AnimationManager; +import com.clubobsidian.dynamicgui.manager.dynamicgui.AnimationReplacerManager; import com.clubobsidian.dynamicgui.manager.dynamicgui.FunctionManager; import com.clubobsidian.dynamicgui.manager.dynamicgui.GuiManager; import com.clubobsidian.dynamicgui.manager.dynamicgui.ReplacerManager; import com.clubobsidian.dynamicgui.messaging.MessagingRunnable; import com.clubobsidian.dynamicgui.plugin.DynamicGuiPlugin; +import com.clubobsidian.dynamicgui.registry.replacer.impl.DynamicGuiAnimationReplacerRegistry; import com.clubobsidian.dynamicgui.registry.replacer.impl.DynamicGuiReplacerRegistry; import com.clubobsidian.dynamicgui.replacer.Replacer; import com.clubobsidian.dynamicgui.server.FakeServer; @@ -104,6 +107,8 @@ private void init() this.checkForProxy(); this.registerListeners(); ReplacerManager.get().registerReplacerRegistry(DynamicGuiReplacerRegistry.get()); + AnimationReplacerManager.get().registerReplacerRegistry(DynamicGuiAnimationReplacerRegistry.get()); + AnimationManager.get(); } private void setupFileStructure() diff --git a/src/main/java/com/clubobsidian/dynamicgui/animation/AnimationHolder.java b/src/main/java/com/clubobsidian/dynamicgui/animation/AnimationHolder.java index d7ed5bfc3..f8c807f14 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/animation/AnimationHolder.java +++ b/src/main/java/com/clubobsidian/dynamicgui/animation/AnimationHolder.java @@ -1,8 +1,8 @@ package com.clubobsidian.dynamicgui.animation; -public interface AnimationHolder extends Refresh { +public interface AnimationHolder extends Refreshable { - public int currentTick(); + public int getCurrentTick(); public int tick(); } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/animation/Refresh.java b/src/main/java/com/clubobsidian/dynamicgui/animation/Refreshable.java similarity index 73% rename from src/main/java/com/clubobsidian/dynamicgui/animation/Refresh.java rename to src/main/java/com/clubobsidian/dynamicgui/animation/Refreshable.java index e2fe34534..9cd8fef6d 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/animation/Refresh.java +++ b/src/main/java/com/clubobsidian/dynamicgui/animation/Refreshable.java @@ -1,6 +1,6 @@ package com.clubobsidian.dynamicgui.animation; -public interface Refresh { +public interface Refreshable { public int getUpdateInterval(); diff --git a/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetLoreFunction.java b/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetLoreFunction.java index 5acc7d3f3..7d51b248a 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetLoreFunction.java +++ b/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetLoreFunction.java @@ -25,6 +25,7 @@ import com.clubobsidian.dynamicgui.gui.Slot; import com.clubobsidian.dynamicgui.inventory.InventoryWrapper; import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; +import com.clubobsidian.dynamicgui.manager.dynamicgui.AnimationReplacerManager; import com.clubobsidian.dynamicgui.manager.dynamicgui.ReplacerManager; import com.clubobsidian.dynamicgui.util.ChatColor; @@ -64,14 +65,14 @@ public boolean function(PlayerWrapper playerWrapper) for(String str : this.getData().split(";")) { String l = ReplacerManager.get().replace(ChatColor.translateAlternateColorCodes('&', str), playerWrapper); - + l = AnimationReplacerManager.get().replace(slot, playerWrapper, l); lore.add(l); } } else { String l = ReplacerManager.get().replace(ChatColor.translateAlternateColorCodes('&', this.getData()), playerWrapper); - + l = AnimationReplacerManager.get().replace(slot, playerWrapper, l); lore.add(l); } diff --git a/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetNameFunction.java b/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetNameFunction.java index 1d553ad11..d1eacf96e 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetNameFunction.java +++ b/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetNameFunction.java @@ -22,6 +22,8 @@ import com.clubobsidian.dynamicgui.gui.Slot; import com.clubobsidian.dynamicgui.inventory.InventoryWrapper; import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; +import com.clubobsidian.dynamicgui.manager.dynamicgui.AnimationReplacerManager; +import com.clubobsidian.dynamicgui.manager.dynamicgui.ReplacerManager; import com.clubobsidian.dynamicgui.util.ChatColor; public class SetNameFunction extends Function { @@ -52,7 +54,10 @@ public boolean function(PlayerWrapper playerWrapper) if(inv != null) { ItemStackWrapper item = slot.getItemStack(); - item.setName(ChatColor.translateAlternateColorCodes('&', this.getData())); + String newName = ChatColor.translateAlternateColorCodes('&', this.getData()); + newName = ReplacerManager.get().replace(newName, playerWrapper); + newName = AnimationReplacerManager.get().replace(slot, playerWrapper, newName); + item.setName(newName); inv.setItem(slot.getIndex(), item); return true; } diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java b/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java index 146a67f51..418c72655 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java @@ -19,15 +19,16 @@ import java.util.ArrayList; import java.util.List; +import com.clubobsidian.dynamicgui.animation.AnimationHolder; import com.clubobsidian.dynamicgui.enchantment.EnchantmentWrapper; import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; +import com.clubobsidian.dynamicgui.manager.dynamicgui.AnimationReplacerManager; import com.clubobsidian.dynamicgui.manager.dynamicgui.ReplacerManager; import com.clubobsidian.dynamicgui.manager.inventory.ItemStackManager; import com.clubobsidian.dynamicgui.parser.function.tree.FunctionTree; -import com.clubobsidian.dynamicgui.parser.slot.SlotToken; -public class Slot implements Serializable, FunctionOwner { +public class Slot implements Serializable, FunctionOwner, AnimationHolder { /** * @@ -46,7 +47,9 @@ public class Slot implements Serializable, FunctionOwner { private ItemStackWrapper itemStack; private Gui owner; private FunctionTree functions; - public Slot(int index, int amount, String icon, String name, String nbt, short data, Boolean close, List lore, List enchants, FunctionTree functions) + private final int updateInterval; + private int tick; + public Slot(int index, int amount, String icon, String name, String nbt, short data, Boolean close, List lore, List enchants, FunctionTree functions, int updateInterval) { this.icon = icon; this.data = data; @@ -58,6 +61,8 @@ public Slot(int index, int amount, String icon, String name, String nbt, short d this.index = index; this.amount = amount; this.functions = functions; + this.updateInterval = updateInterval; + this.tick = 0; } public int getIndex() @@ -112,6 +117,7 @@ public ItemStackWrapper buildItemStack(PlayerWrapper playerWrapper) { String newName = this.name; newName = ReplacerManager.get().replace(newName, playerWrapper); + newName = AnimationReplacerManager.get().replace(this, playerWrapper, newName); builderItem.setName(newName); } @@ -124,9 +130,10 @@ public ItemStackWrapper buildItemStack(PlayerWrapper playerWrapper) for(int i = 0; i < newLore.size(); i++) { - newLore.set(i, ReplacerManager.get().replace(newLore.get(i), playerWrapper)); + String lore = ReplacerManager.get().replace(newLore.get(i), playerWrapper); + lore = AnimationReplacerManager.get().replace(this, playerWrapper, lore); + newLore.set(i, lore); } - builderItem.setLore(newLore); } @@ -160,4 +167,27 @@ public Gui getOwner() { return this.owner; } + + @Override + public int getUpdateInterval() + { + return this.updateInterval; + } + + @Override + public int getCurrentTick() + { + return this.tick; + } + + @Override + public int tick() + { + this.tick += 1; + + if(this.tick > 20) + this.tick = 1; + + return this.tick; + } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationManager.java b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationManager.java new file mode 100644 index 000000000..cf7263fc4 --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationManager.java @@ -0,0 +1,76 @@ +package com.clubobsidian.dynamicgui.manager.dynamicgui; + +import java.util.Iterator; +import java.util.Map.Entry; +import java.util.UUID; + +import com.clubobsidian.dynamicgui.DynamicGui; +import com.clubobsidian.dynamicgui.entity.PlayerWrapper; +import com.clubobsidian.dynamicgui.gui.Gui; +import com.clubobsidian.dynamicgui.gui.Slot; +import com.clubobsidian.dynamicgui.inventory.InventoryWrapper; +import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; + +public class AnimationManager { + + private static AnimationManager instance; + + public static AnimationManager get() + { + if(instance == null) + { + instance = new AnimationManager(); + } + return instance; + } + + + private AnimationManager() + { + this.createScheduler(); + } + + private void createScheduler() + { + DynamicGui.get().getServer().getScheduler().scheduleSyncRepeatingTask(DynamicGui.get().getPlugin(), new Runnable() + { + @Override + public void run() + { + Iterator> it = GuiManager.get().getPlayerGuis().entrySet().iterator(); + while(it.hasNext()) + { + Entry next = it.next(); + UUID key = next.getKey(); + PlayerWrapper playerWrapper = DynamicGui.get().getServer().getPlayer(key); + Gui gui = next.getValue(); + + boolean updated = false; + for(Slot slot : gui.getSlots()) + { + if(slot.getUpdateInterval() == 0) + { + continue; + } + + slot.tick(); + if(slot.getCurrentTick() % slot.getUpdateInterval() == 0) + { + updated = true; + ItemStackWrapper itemStackWrapper = slot.buildItemStack(playerWrapper); + int slotIndex = slot.getIndex(); + + InventoryWrapper inventoryWrapper = slot.getOwner().getInventoryWrapper(); + inventoryWrapper.setItem(slotIndex, itemStackWrapper); + } + } + + if(updated) + { + playerWrapper.updateInventory(); + } + } + } + }, 1L, 1L); + } +} \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationReplacerManager.java b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationReplacerManager.java new file mode 100644 index 000000000..fa769ef32 --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationReplacerManager.java @@ -0,0 +1,58 @@ +/* + Copyright 2019 Club Obsidian and contributors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.clubobsidian.dynamicgui.manager.dynamicgui; + +import java.util.ArrayList; +import java.util.List; + +import com.clubobsidian.dynamicgui.animation.AnimationHolder; +import com.clubobsidian.dynamicgui.entity.PlayerWrapper; +import com.clubobsidian.dynamicgui.registry.replacer.AnimationReplacerRegistry; + +public class AnimationReplacerManager { + + private static AnimationReplacerManager instance; + + private List registries; + private AnimationReplacerManager() + { + this.registries = new ArrayList<>(); + } + + public static AnimationReplacerManager get() + { + if(instance == null) + { + instance = new AnimationReplacerManager(); + } + return instance; + } + + public String replace(AnimationHolder holder, PlayerWrapper playerWrapper, String text) + { + String newText = text; + for(AnimationReplacerRegistry registry : this.registries) + { + newText = registry.replace(holder, playerWrapper, newText); + } + return newText; + } + + public void registerReplacerRegistry(AnimationReplacerRegistry replacerRegistry) + { + this.registries.add(replacerRegistry); + } +} \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java index 93deda499..4e0e80962 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java +++ b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java @@ -320,8 +320,10 @@ private List createSlots(GuiToken guiToken) boolean close = slotToken.isClosed(); short data = slotToken.getData(); + + int updateInterval = slotToken.getUpdateInterval(); - slots.add(new Slot(index, amount, icon, name, nbt, data, close, lore, enchants, slotToken.getFunctionTree())); + slots.add(new Slot(index, amount, icon, name, nbt, data, close, lore, enchants, slotToken.getFunctionTree(), updateInterval)); } diff --git a/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/AnimationReplacerRegistry.java b/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/AnimationReplacerRegistry.java new file mode 100644 index 000000000..2b06ad004 --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/AnimationReplacerRegistry.java @@ -0,0 +1,25 @@ +/* + Copyright 2019 Club Obsidian and contributors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.clubobsidian.dynamicgui.registry.replacer; + +import com.clubobsidian.dynamicgui.animation.AnimationHolder; +import com.clubobsidian.dynamicgui.entity.PlayerWrapper; + +public interface AnimationReplacerRegistry { + + public String replace(AnimationHolder holder, PlayerWrapper playerWrapper, String text); + +} \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/DynamicGuiAnimationReplacerRegistry.java b/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/DynamicGuiAnimationReplacerRegistry.java new file mode 100644 index 000000000..3e64573f3 --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/DynamicGuiAnimationReplacerRegistry.java @@ -0,0 +1,64 @@ +/* + Copyright 2019 Club Obsidian and contributors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.clubobsidian.dynamicgui.registry.replacer.impl; + +import java.util.HashMap; +import java.util.Map; + +import com.clubobsidian.dynamicgui.animation.AnimationHolder; +import com.clubobsidian.dynamicgui.entity.PlayerWrapper; +import com.clubobsidian.dynamicgui.registry.replacer.AnimationReplacerRegistry; +import com.clubobsidian.dynamicgui.replacer.AnimationReplacer; +import com.clubobsidian.dynamicgui.replacer.animation.impl.TestAnimationReplacer; + +public class DynamicGuiAnimationReplacerRegistry implements AnimationReplacerRegistry { + + private static DynamicGuiAnimationReplacerRegistry instance; + + private Map replacers; + private DynamicGuiAnimationReplacerRegistry() + { + this.replacers = new HashMap<>(); + this.addReplacer(new TestAnimationReplacer("%test-animation%")); + } + + public static DynamicGuiAnimationReplacerRegistry get() + { + if(instance == null) + { + instance = new DynamicGuiAnimationReplacerRegistry(); + } + return instance; + } + + public boolean addReplacer(AnimationReplacer replacer) + { + return this.replacers.put(replacer.getToReplace(), replacer) == null; + } + + @Override + public String replace(AnimationHolder holder, PlayerWrapper playerWrapper, String text) + { + for(AnimationReplacer replacer : this.replacers.values()) + { + if(text.contains(replacer.getToReplace())) + { + text = text.replace(replacer.getToReplace(), replacer.replacement(playerWrapper, holder, text)); + } + } + return text; + } +} \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/replacer/AnimationReplacer.java b/src/main/java/com/clubobsidian/dynamicgui/replacer/AnimationReplacer.java new file mode 100644 index 000000000..b3b9fb11c --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/replacer/AnimationReplacer.java @@ -0,0 +1,35 @@ +/* + Copyright 2019 Club Obsidian and contributors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.clubobsidian.dynamicgui.replacer; + +import com.clubobsidian.dynamicgui.animation.AnimationHolder; +import com.clubobsidian.dynamicgui.entity.PlayerWrapper; + +public abstract class AnimationReplacer { + + private String toReplace; + public AnimationReplacer(String toReplace) + { + this.toReplace = toReplace; + } + + public String getToReplace() + { + return this.toReplace; + } + + public abstract String replacement(PlayerWrapper playerWrapper, AnimationHolder holder, String text); +} \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/AnimationReplacer.java b/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/AnimationReplacer.java deleted file mode 100644 index a2d346551..000000000 --- a/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/AnimationReplacer.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.clubobsidian.dynamicgui.replacer.animation; - -import com.clubobsidian.dynamicgui.animation.AnimationHolder; -import com.clubobsidian.dynamicgui.entity.PlayerWrapper; -import com.clubobsidian.dynamicgui.replacer.Replacer; - -public class AnimationReplacer extends Replacer { - - private AnimationHolder holder; - public AnimationReplacer(String toReplace, AnimationHolder holder) - { - super(toReplace); - this.holder = holder; - } - - @Override - public String replacement(String text, PlayerWrapper playerWrapper) - { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/impl/TestAnimationReplacer.java b/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/impl/TestAnimationReplacer.java new file mode 100644 index 000000000..317a799ea --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/impl/TestAnimationReplacer.java @@ -0,0 +1,34 @@ +/* + Copyright 2019 Club Obsidian and contributors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.clubobsidian.dynamicgui.replacer.animation.impl; + +import com.clubobsidian.dynamicgui.animation.AnimationHolder; +import com.clubobsidian.dynamicgui.entity.PlayerWrapper; +import com.clubobsidian.dynamicgui.replacer.AnimationReplacer; + +public class TestAnimationReplacer extends AnimationReplacer { + + public TestAnimationReplacer(String toReplace) + { + super(toReplace); + } + + @Override + public String replacement(PlayerWrapper playerWrapper, AnimationHolder holder, String text) + { + return String.valueOf(holder.getCurrentTick()); + } +} \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/package-info.java b/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/package-info.java deleted file mode 100644 index df9b1b0f1..000000000 --- a/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package com.clubobsidian.dynamicgui.replacer.animation; \ No newline at end of file From 5deb7b0364d74f48af3853cc3073b59f8f90ecc0 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Thu, 22 Aug 2019 01:10:39 -0700 Subject: [PATCH 16/28] Refactor code to allow multiline animations Use semicolon for multiline, some code was refactored to allow this. --- .../function/impl/SetLoreFunction.java | 15 ++++---- .../com/clubobsidian/dynamicgui/gui/Slot.java | 18 +++++++--- .../DynamicGuiAnimationReplacerRegistry.java | 2 ++ .../impl/MultiLineTestAnimationReplacer.java | 35 +++++++++++++++++++ 4 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/clubobsidian/dynamicgui/replacer/animation/impl/MultiLineTestAnimationReplacer.java diff --git a/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetLoreFunction.java b/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetLoreFunction.java index 7d51b248a..6593b29ea 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetLoreFunction.java +++ b/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetLoreFunction.java @@ -60,20 +60,21 @@ public boolean function(PlayerWrapper playerWrapper) ItemStackWrapper item = slot.getItemStack(); List lore = new ArrayList<>(); - if(this.getData().contains(";")) + + String newData = this.getData(); + newData = ReplacerManager.get().replace(ChatColor.translateAlternateColorCodes('&', this.getData()), playerWrapper); + newData = AnimationReplacerManager.get().replace(slot, playerWrapper, newData); + + if(newData.contains(";")) { for(String str : this.getData().split(";")) { - String l = ReplacerManager.get().replace(ChatColor.translateAlternateColorCodes('&', str), playerWrapper); - l = AnimationReplacerManager.get().replace(slot, playerWrapper, l); - lore.add(l); + lore.add(str); } } else { - String l = ReplacerManager.get().replace(ChatColor.translateAlternateColorCodes('&', this.getData()), playerWrapper); - l = AnimationReplacerManager.get().replace(slot, playerWrapper, l); - lore.add(l); + lore.add(newData); } item.setLore(lore); diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java b/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java index 418c72655..fb0544fba 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java @@ -126,13 +126,21 @@ public ItemStackWrapper buildItemStack(PlayerWrapper playerWrapper) List newLore = new ArrayList<>(); for(String newString : this.lore) - newLore.add(newString); - - for(int i = 0; i < newLore.size(); i++) { - String lore = ReplacerManager.get().replace(newLore.get(i), playerWrapper); + String lore = ReplacerManager.get().replace(newString, playerWrapper); lore = AnimationReplacerManager.get().replace(this, playerWrapper, lore); - newLore.set(i, lore); + if(lore.contains(";")) + { + String[] split = lore.split(";"); + for(String sp : split) + { + newLore.add(sp); + } + } + else + { + newLore.add(lore); + } } builderItem.setLore(newLore); diff --git a/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/DynamicGuiAnimationReplacerRegistry.java b/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/DynamicGuiAnimationReplacerRegistry.java index 3e64573f3..fc27864b0 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/DynamicGuiAnimationReplacerRegistry.java +++ b/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/DynamicGuiAnimationReplacerRegistry.java @@ -22,6 +22,7 @@ import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.registry.replacer.AnimationReplacerRegistry; import com.clubobsidian.dynamicgui.replacer.AnimationReplacer; +import com.clubobsidian.dynamicgui.replacer.animation.impl.MultiLineTestAnimationReplacer; import com.clubobsidian.dynamicgui.replacer.animation.impl.TestAnimationReplacer; public class DynamicGuiAnimationReplacerRegistry implements AnimationReplacerRegistry { @@ -33,6 +34,7 @@ private DynamicGuiAnimationReplacerRegistry() { this.replacers = new HashMap<>(); this.addReplacer(new TestAnimationReplacer("%test-animation%")); + this.addReplacer(new MultiLineTestAnimationReplacer("%test-multiline-animation%")); } public static DynamicGuiAnimationReplacerRegistry get() diff --git a/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/impl/MultiLineTestAnimationReplacer.java b/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/impl/MultiLineTestAnimationReplacer.java new file mode 100644 index 000000000..5a9639774 --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/impl/MultiLineTestAnimationReplacer.java @@ -0,0 +1,35 @@ +/* + Copyright 2019 Club Obsidian and contributors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.clubobsidian.dynamicgui.replacer.animation.impl; + +import com.clubobsidian.dynamicgui.animation.AnimationHolder; +import com.clubobsidian.dynamicgui.entity.PlayerWrapper; +import com.clubobsidian.dynamicgui.replacer.AnimationReplacer; + +public class MultiLineTestAnimationReplacer extends AnimationReplacer { + + public MultiLineTestAnimationReplacer(String toReplace) + { + super(toReplace); + } + + @Override + public String replacement(PlayerWrapper playerWrapper, AnimationHolder holder, String text) + { + int tick = holder.getCurrentTick(); + return String.valueOf(tick + ";" + tick + ";"); + } +} \ No newline at end of file From 2bae214f9d9888dfb4412da32a00124b83ecb6f9 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Thu, 22 Aug 2019 01:14:18 -0700 Subject: [PATCH 17/28] Refactor new line lore character to \n Lore now uses \n as the new line character. --- .../dynamicgui/function/impl/SetLoreFunction.java | 4 ++-- src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java | 4 ++-- .../animation/impl/MultiLineTestAnimationReplacer.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetLoreFunction.java b/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetLoreFunction.java index 6593b29ea..63be99562 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetLoreFunction.java +++ b/src/main/java/com/clubobsidian/dynamicgui/function/impl/SetLoreFunction.java @@ -65,9 +65,9 @@ public boolean function(PlayerWrapper playerWrapper) newData = ReplacerManager.get().replace(ChatColor.translateAlternateColorCodes('&', this.getData()), playerWrapper); newData = AnimationReplacerManager.get().replace(slot, playerWrapper, newData); - if(newData.contains(";")) + if(newData.contains("\n")) { - for(String str : this.getData().split(";")) + for(String str : this.getData().split("\n")) { lore.add(str); } diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java b/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java index fb0544fba..5e96ff1b5 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/Slot.java @@ -129,9 +129,9 @@ public ItemStackWrapper buildItemStack(PlayerWrapper playerWrapper) { String lore = ReplacerManager.get().replace(newString, playerWrapper); lore = AnimationReplacerManager.get().replace(this, playerWrapper, lore); - if(lore.contains(";")) + if(lore.contains("\n")) { - String[] split = lore.split(";"); + String[] split = lore.split("\n"); for(String sp : split) { newLore.add(sp); diff --git a/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/impl/MultiLineTestAnimationReplacer.java b/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/impl/MultiLineTestAnimationReplacer.java index 5a9639774..19d78bb90 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/impl/MultiLineTestAnimationReplacer.java +++ b/src/main/java/com/clubobsidian/dynamicgui/replacer/animation/impl/MultiLineTestAnimationReplacer.java @@ -30,6 +30,6 @@ public MultiLineTestAnimationReplacer(String toReplace) public String replacement(PlayerWrapper playerWrapper, AnimationHolder holder, String text) { int tick = holder.getCurrentTick(); - return String.valueOf(tick + ";" + tick + ";"); + return tick + "\n" + tick + "\n" + tick; } } \ No newline at end of file From a5f1b9e9520f7d3187d885a85997ed43cba565e9 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Thu, 22 Aug 2019 02:24:09 -0700 Subject: [PATCH 18/28] Add rgb for color codes for gif support Gif support will be added so ChatColor now holds the rgb values of each color as well as the java color object for easy accessibility. --- .../dynamicgui/util/ChatColor.java | 64 ++++++++++++++----- 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/clubobsidian/dynamicgui/util/ChatColor.java b/src/main/java/com/clubobsidian/dynamicgui/util/ChatColor.java index 8ded84858..325309651 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/util/ChatColor.java +++ b/src/main/java/com/clubobsidian/dynamicgui/util/ChatColor.java @@ -15,24 +15,26 @@ */ package com.clubobsidian.dynamicgui.util; +import java.awt.Color; + public enum ChatColor { - AQUA('b'), - BLACK('0'), - BLUE('9'), - DARK_AQUA('3'), - DARK_BLUE('1'), - DARK_GRAY('8'), - DARK_GREEN('2'), - DARK_PURPLE('5'), - DARK_RED('4'), - GOLD('6'), - GRAY('7'), - GREEN('a'), - LIGHT_PURPLE('d'), - RED('c'), - WHITE('f'), - YELLOW('e'), + AQUA('b', 85, 255, 255), + BLACK('0', 0, 0, 0), + BLUE('9', 85, 85, 255), + DARK_AQUA('3', 0, 170, 170), + DARK_BLUE('1', 0, 0, 170), + DARK_GRAY('8', 85 , 85, 85), + DARK_GREEN('2', 0, 170, 0), + DARK_PURPLE('5', 170, 0, 170), + DARK_RED('4', 170, 0, 0), + GOLD('6', 170, 170, 0), + GRAY('7', 170, 170, 170), + GREEN('a', 85, 255, 85), + LIGHT_PURPLE('d', 255, 85, 255), + RED('c', 255, 85, 85), + WHITE('f', 255, 255, 255), + YELLOW('e', 255, 255, 85), //Formatting BOLD('l', true), ITALIC('o', true), @@ -45,9 +47,17 @@ public enum ChatColor { private char colorCode; private boolean formatting; - private ChatColor(char colorCode) + private int red; + private int green; + private int blue; + private Color color; + private ChatColor(char colorCode, int red, int green, int blue) { this(colorCode, false); + this.red = red; + this.green = green; + this.blue = blue; + this.color = new Color(red, green, blue); } private ChatColor(char colorCode, boolean formatting) @@ -71,6 +81,26 @@ public boolean isFormatting() return this.formatting; } + public int getRed() + { + return this.red; + } + + public int getGreen() + { + return this.green; + } + + public int getBlue() + { + return this.blue; + } + + public Color getJavaColor() + { + return this.color; + } + public static String translateAlternateColorCodes(char translate, String message) { char[] chars = message.toCharArray(); From 729e5bd350b3d221858cb92ddc75ca7f75387b89 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Thu, 22 Aug 2019 05:26:40 -0700 Subject: [PATCH 19/28] Gui title animation test Initial test of gui title animation. There are a few hacks that seem to make this more stable. Those being delaying the title update by one tick and checking if the gui is open and checking if the gui is open on inventory close. Seems to be stable at 10 ticks and semi-stable at 5 ticks. --- build.gradle | 2 +- .../com/clubobsidian/dynamicgui/gui/Gui.java | 35 +++++- .../inventory/InventoryWrapper.java | 3 + .../bukkit/BukkitInventoryWrapper.java | 101 ++++++++++++++++++ .../sponge/SpongeInventoryWrapper.java | 7 ++ .../listener/InventoryCloseListener.java | 21 +++- .../manager/dynamicgui/AnimationManager.java | 58 ++++++++++ .../manager/dynamicgui/GuiManager.java | 4 +- .../dynamicgui/util/ReflectionUtil.java | 21 +++- .../util/bukkit/BukkitReflectionUtil.java | 51 +++++++++ 10 files changed, 295 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/clubobsidian/dynamicgui/util/bukkit/BukkitReflectionUtil.java diff --git a/build.gradle b/build.gradle index 3681c46e9..c1c542dca 100644 --- a/build.gradle +++ b/build.gradle @@ -61,7 +61,7 @@ dependencies { compile 'commons-io:commons-io:2.6' compile 'com.github.clubobsidian:wrappy:1.8.0' compile 'com.github.clubobsidian:trident:2.0.1' - compile 'com.github.clubobsidian:dynamicguiparser:f08fa6af54' + compile 'com.github.clubobsidian:dynamicguiparser:f07fdd7401' compile 'com.udojava:EvalEx:2.1' compile 'com.github.ClubObsidian:FuzzUtil:1.1.0' } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java b/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java index cdc85c35f..df38020b8 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java @@ -21,9 +21,11 @@ import org.apache.commons.lang3.SerializationUtils; +import com.clubobsidian.dynamicgui.animation.AnimationHolder; import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.inventory.InventoryWrapper; import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; +import com.clubobsidian.dynamicgui.manager.dynamicgui.AnimationReplacerManager; import com.clubobsidian.dynamicgui.manager.dynamicgui.ReplacerManager; import com.clubobsidian.dynamicgui.manager.inventory.InventoryManager; import com.clubobsidian.dynamicgui.parser.function.tree.FunctionTree; @@ -31,7 +33,7 @@ import com.clubobsidian.dynamicgui.world.LocationWrapper; -public class Gui implements Serializable, FunctionOwner { +public class Gui implements Serializable, FunctionOwner, AnimationHolder { /** * @@ -48,7 +50,9 @@ public class Gui implements Serializable, FunctionOwner { private Map> npcIds; private transient InventoryWrapper inventoryWrapper; private FunctionTree functions; - public Gui(String name, String type, String title, int rows, Boolean close, ModeEnum modeEnum, Map> npcIds, List slots, List> locations, FunctionTree functions) + private final int updateInterval; + private int tick; + public Gui(String name, String type, String title, int rows, Boolean close, ModeEnum modeEnum, Map> npcIds, List slots, List> locations, FunctionTree functions, int updateInterval) { this.name = name; this.type = type; @@ -61,11 +65,15 @@ public Gui(String name, String type, String title, int rows, Boolean close, Mode this.locations = locations; this.inventoryWrapper = null; this.functions = functions; + this.updateInterval = updateInterval; + this.tick = 0; } public InventoryWrapper buildInventory(PlayerWrapper playerWrapper) { String inventoryTitle = ReplacerManager.get().replace(this.title, playerWrapper); + inventoryTitle = AnimationReplacerManager.get().replace(this, playerWrapper, inventoryTitle); + if(inventoryTitle.length() > 32) inventoryTitle = inventoryTitle.substring(0,31); @@ -169,6 +177,29 @@ public FunctionTree getFunctions() return this.functions; } + @Override + public int getUpdateInterval() + { + return this.updateInterval; + } + + @Override + public int getCurrentTick() + { + return this.tick; + } + + @Override + public int tick() + { + this.tick += 1; + + if(this.tick > 20) + this.tick = 1; + + return this.tick; + } + public Gui clone() { return SerializationUtils.clone(this); diff --git a/src/main/java/com/clubobsidian/dynamicgui/inventory/InventoryWrapper.java b/src/main/java/com/clubobsidian/dynamicgui/inventory/InventoryWrapper.java index 26ebcee1f..9b9234579 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/inventory/InventoryWrapper.java +++ b/src/main/java/com/clubobsidian/dynamicgui/inventory/InventoryWrapper.java @@ -17,6 +17,8 @@ import java.io.Serializable; +import com.clubobsidian.dynamicgui.entity.PlayerWrapper; + public abstract class InventoryWrapper implements Serializable { /** @@ -39,6 +41,7 @@ public T getInventory() public abstract void setItem(int index, ItemStackWrapper itemStackWrapper); public abstract int getSize(); public abstract int getContentSize(); + public abstract void setTitle(PlayerWrapper playerWrapper, String title); public int addItem(ItemStackWrapper itemStackWrapper) { diff --git a/src/main/java/com/clubobsidian/dynamicgui/inventory/bukkit/BukkitInventoryWrapper.java b/src/main/java/com/clubobsidian/dynamicgui/inventory/bukkit/BukkitInventoryWrapper.java index 75a3a6340..eca1438fa 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/inventory/bukkit/BukkitInventoryWrapper.java +++ b/src/main/java/com/clubobsidian/dynamicgui/inventory/bukkit/BukkitInventoryWrapper.java @@ -16,13 +16,21 @@ package com.clubobsidian.dynamicgui.inventory.bukkit; import java.io.Serializable; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import org.bukkit.Material; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import com.clubobsidian.dynamicgui.DynamicGui; +import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.inventory.InventoryWrapper; import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; +import com.clubobsidian.dynamicgui.util.ReflectionUtil; +import com.clubobsidian.dynamicgui.util.bukkit.BukkitReflectionUtil; public class BukkitInventoryWrapper extends InventoryWrapper implements Serializable { @@ -31,6 +39,20 @@ public class BukkitInventoryWrapper extends InventoryWrappe */ private static final long serialVersionUID = 954426075975347755L; + private static Class nmsPlayerClass; + private static Class packetPlayOutOpenWindowClass; + + private static Method getHandle; + private static Method sendPacket; + + private static Field playerConnection; + private static Field containerCounter; + + private static Constructor packetConstructor; + private static Constructor chatMessageConstructor; + + private final Object[] extraChatComponents = new Object[0]; + public BukkitInventoryWrapper(T inventory) { super(inventory); @@ -67,4 +89,83 @@ public int getContentSize() } return contentSize; } + + @Override + public void setTitle(PlayerWrapper playerWrapper, String title) + { + if(packetPlayOutOpenWindowClass == null) + { + packetPlayOutOpenWindowClass = BukkitReflectionUtil.getNMSClass("PacketPlayOutOpenWindow"); + } + + if(packetConstructor == null) + { + Class iChatBaseComponentClass = BukkitReflectionUtil.getNMSClass("IChatBaseComponent"); + try + { + packetConstructor = packetPlayOutOpenWindowClass.getDeclaredConstructor(int.class, String.class, iChatBaseComponentClass, int.class); + packetConstructor.setAccessible(true); + } + catch (NoSuchMethodException | SecurityException e) + { + e.printStackTrace(); + } + } + + if(chatMessageConstructor == null) + { + Class chatMessageClass = BukkitReflectionUtil.getNMSClass("ChatMessage"); + chatMessageConstructor = chatMessageClass.getDeclaredConstructors()[0]; + } + + if(getHandle == null) + { + Class craftPlayer = BukkitReflectionUtil.getCraftClass("entity", "CraftPlayer"); + getHandle = ReflectionUtil.getMethod(craftPlayer, "getHandle"); + } + + if(nmsPlayerClass == null) + { + nmsPlayerClass = BukkitReflectionUtil.getNMSClass("EntityPlayer"); + } + + if(playerConnection == null) + { + playerConnection = ReflectionUtil.getFieldByName(nmsPlayerClass, "playerConnection"); + } + + if(sendPacket == null) + { + Class playerConnectionClass = BukkitReflectionUtil.getNMSClass("PlayerConnection"); + Class packetClass = BukkitReflectionUtil.getNMSClass("Packet"); + sendPacket = ReflectionUtil.getMethod(playerConnectionClass, "sendPacket", packetClass); + } + + if(containerCounter == null) + { + containerCounter = ReflectionUtil.getFieldByName(nmsPlayerClass, "containerCounter"); + } + + try + { + Object player = playerWrapper.getPlayer(); + Object nmsPlayer = getHandle.invoke(player); + + String inventoryType = "minecraft:" + this.getInventory().getType().toString().toLowerCase(); + int size = this.getInventory().getSize(); + int containerId = containerCounter.getInt(nmsPlayer); + Object chatComponent = chatMessageConstructor.newInstance(title, extraChatComponents); + Object packet = packetConstructor.newInstance(containerId, inventoryType, chatComponent, size); + + if(playerWrapper.getOpenInventoryWrapper().getInventory() != null) + { + Object playerCon = playerConnection.get(nmsPlayer); + sendPacket.invoke(playerCon, packet); + } + } + catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException e) + { + e.printStackTrace(); + } + } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/inventory/sponge/SpongeInventoryWrapper.java b/src/main/java/com/clubobsidian/dynamicgui/inventory/sponge/SpongeInventoryWrapper.java index f4a3ac3da..7e589cf25 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/inventory/sponge/SpongeInventoryWrapper.java +++ b/src/main/java/com/clubobsidian/dynamicgui/inventory/sponge/SpongeInventoryWrapper.java @@ -26,6 +26,7 @@ import org.spongepowered.api.item.inventory.query.QueryOperationTypes; import com.clubobsidian.dynamicgui.DynamicGui; +import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.inventory.InventoryWrapper; import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; @@ -91,4 +92,10 @@ public int getContentSize() { return this.getInventory().size(); } + + @Override + public void setTitle(PlayerWrapper playerWrapper, String title) + { + // TODO Auto-generated method stub + } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryCloseListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryCloseListener.java index d53eda78d..51ac51d75 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryCloseListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryCloseListener.java @@ -15,9 +15,12 @@ */ package com.clubobsidian.dynamicgui.listener; +import com.clubobsidian.dynamicgui.DynamicGui; +import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.event.inventory.InventoryCloseEvent; import com.clubobsidian.dynamicgui.event.player.PlayerKickEvent; import com.clubobsidian.dynamicgui.event.player.PlayerQuitEvent; +import com.clubobsidian.dynamicgui.gui.Gui; import com.clubobsidian.dynamicgui.manager.dynamicgui.GuiManager; import com.clubobsidian.trident.EventHandler; @@ -26,15 +29,29 @@ public class InventoryCloseListener { @EventHandler public void inventoryClose(final InventoryCloseEvent e) { - if(GuiManager.get().hasGuiCurrently(e.getPlayerWrapper())) + PlayerWrapper playerWrapper = e.getPlayerWrapper(); + Gui gui = GuiManager.get().getCurrentGui(playerWrapper); + if(gui != null) { + + //Cleanup active gui GuiManager.get().cleanupGui(e.getPlayerWrapper()); + + DynamicGui.get().getServer().getScheduler().scheduleSyncDelayedTask(DynamicGui.get().getPlugin(), () -> + { + System.out.println("close"); + Gui newGui = GuiManager.get().getCurrentGui(playerWrapper); + if(newGui == null) + { + playerWrapper.closeInventory(); + } + }, 1L); } } @EventHandler public void onQuit(final PlayerQuitEvent e) - { +{ if(GuiManager.get().hasGuiCurrently(e.getPlayerWrapper())) { GuiManager.get().cleanupGui(e.getPlayerWrapper()); diff --git a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationManager.java b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationManager.java index cf7263fc4..552df9326 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationManager.java +++ b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationManager.java @@ -1,6 +1,8 @@ package com.clubobsidian.dynamicgui.manager.dynamicgui; +import java.util.ArrayList; import java.util.Iterator; +import java.util.List; import java.util.Map.Entry; import java.util.UUID; @@ -37,6 +39,7 @@ private void createScheduler() @Override public void run() { + List titleUpdates = new ArrayList<>(); Iterator> it = GuiManager.get().getPlayerGuis().entrySet().iterator(); while(it.hasNext()) { @@ -46,6 +49,22 @@ public void run() Gui gui = next.getValue(); boolean updated = false; + + if(gui.getUpdateInterval() != 0) + { + gui.tick(); + + if(gui.getCurrentTick() % gui.getUpdateInterval() == 0) + { + String title = gui.getTitle(); + title = ReplacerManager.get().replace(title, playerWrapper); + title = AnimationReplacerManager.get().replace(gui, playerWrapper, title); + titleUpdates.add(new TitleUpdater(gui, playerWrapper, title)); + updated = true; + } + } + + for(Slot slot : gui.getSlots()) { if(slot.getUpdateInterval() == 0) @@ -69,8 +88,47 @@ public void run() { playerWrapper.updateInventory(); } + + //Schedule title updates for the next tick + DynamicGui.get().getServer().getScheduler().scheduleSyncDelayedTask(DynamicGui.get().getPlugin(), () -> + { + for(TitleUpdater updater : titleUpdates) + { + updater.update(); + } + }, 1L); } } }, 1L, 1L); } + + private static class TitleUpdater + { + private Gui gui; + private PlayerWrapper playerWrapper; + private String title; + TitleUpdater(Gui gui, PlayerWrapper playerWrapper, String title) + { + this.gui = gui; + this.playerWrapper = playerWrapper; + this.title = title; + } + + public boolean update() + { + Gui currentGui = GuiManager.get().getCurrentGui(this.playerWrapper); + if(currentGui != null && currentGui.equals(this.gui)) + { + this.playerWrapper.updateInventory(); + this.gui.getInventoryWrapper().setTitle(this.playerWrapper, this.title); + this.playerWrapper.updateInventory(); + } + else + { + this.playerWrapper.closeInventory(); + } + + return false; + } + } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java index 4e0e80962..05c08fc1f 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java +++ b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java @@ -353,6 +353,8 @@ private Gui createGui(final GuiToken guiToken, final String guiName, final List< Map> npcIds = guiToken.getNpcs(); - return new Gui(guiName, type, title, rows, close, modeEnum, npcIds, slots, locations, guiToken.getFunctions()); + int updateInterval = guiToken.getUpdateInterval(); + + return new Gui(guiName, type, title, rows, close, modeEnum, npcIds, slots, locations, guiToken.getFunctions(), updateInterval); } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/util/ReflectionUtil.java b/src/main/java/com/clubobsidian/dynamicgui/util/ReflectionUtil.java index 0ab587c83..b3bb51fa2 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/util/ReflectionUtil.java +++ b/src/main/java/com/clubobsidian/dynamicgui/util/ReflectionUtil.java @@ -17,6 +17,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.lang.reflect.Modifier; public final class ReflectionUtil { @@ -84,6 +85,7 @@ public static Field getFieldByName(Class searchIn, String name) { Field f = searchIn.getDeclaredField(name); f.setAccessible(true); + removeFinal(f); return f; } catch (NoSuchFieldException | SecurityException e) @@ -99,14 +101,29 @@ public static Field getFieldByType(Class searchIn, Class type) if(f.getType() == type) { f.setAccessible(true); + removeFinal(f); return f; } } return null; } - + + private static void removeFinal(Field f) + { + try + { + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); + } + catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) + { + e.printStackTrace(); + } + } + public static class ReflectionHelper { - + public T get(Field field) { return this.get(field, null); diff --git a/src/main/java/com/clubobsidian/dynamicgui/util/bukkit/BukkitReflectionUtil.java b/src/main/java/com/clubobsidian/dynamicgui/util/bukkit/BukkitReflectionUtil.java new file mode 100644 index 000000000..e20e07ed3 --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/util/bukkit/BukkitReflectionUtil.java @@ -0,0 +1,51 @@ +package com.clubobsidian.dynamicgui.util.bukkit; + +public final class BukkitReflectionUtil { + + private BukkitReflectionUtil() {} + + public static Class getCraftClass(String className) + { + String version = VersionUtil.getVersion(); + try + { + Class clazz = Class.forName("org.bukkit.craftbukkit." + version + "." + className); + return clazz; + } + catch (ClassNotFoundException e) + { + e.printStackTrace(); + } + return null; + } + + public static Class getNMSClass(String className) + { + String version = VersionUtil.getVersion(); + try + { + Class clazz = Class.forName("net.minecraft.server." + version + "." + className); + return clazz; + } + catch (ClassNotFoundException e) + { + e.printStackTrace(); + } + return null; + } + + public static Class getCraftClass(String packageName, String className) + { + String version = VersionUtil.getVersion(); + try + { + Class clazz = Class.forName("org.bukkit.craftbukkit." + version + "." + packageName + "." + className); + return clazz; + } + catch (ClassNotFoundException e) + { + e.printStackTrace(); + } + return null; + } +} \ No newline at end of file From d8e11833028b7ea5fce846f2de63f922df3ec1e9 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Thu, 22 Aug 2019 21:11:10 -0700 Subject: [PATCH 20/28] Revert "Gui title animation test" This reverts commit 729e5bd350b3d221858cb92ddc75ca7f75387b89. --- build.gradle | 2 +- .../com/clubobsidian/dynamicgui/gui/Gui.java | 35 +----- .../inventory/InventoryWrapper.java | 3 - .../bukkit/BukkitInventoryWrapper.java | 101 ------------------ .../sponge/SpongeInventoryWrapper.java | 7 -- .../listener/InventoryCloseListener.java | 21 +--- .../manager/dynamicgui/AnimationManager.java | 58 ---------- .../manager/dynamicgui/GuiManager.java | 4 +- .../dynamicgui/util/ReflectionUtil.java | 21 +--- .../util/bukkit/BukkitReflectionUtil.java | 51 --------- 10 files changed, 8 insertions(+), 295 deletions(-) delete mode 100644 src/main/java/com/clubobsidian/dynamicgui/util/bukkit/BukkitReflectionUtil.java diff --git a/build.gradle b/build.gradle index c1c542dca..3681c46e9 100644 --- a/build.gradle +++ b/build.gradle @@ -61,7 +61,7 @@ dependencies { compile 'commons-io:commons-io:2.6' compile 'com.github.clubobsidian:wrappy:1.8.0' compile 'com.github.clubobsidian:trident:2.0.1' - compile 'com.github.clubobsidian:dynamicguiparser:f07fdd7401' + compile 'com.github.clubobsidian:dynamicguiparser:f08fa6af54' compile 'com.udojava:EvalEx:2.1' compile 'com.github.ClubObsidian:FuzzUtil:1.1.0' } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java b/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java index df38020b8..cdc85c35f 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java +++ b/src/main/java/com/clubobsidian/dynamicgui/gui/Gui.java @@ -21,11 +21,9 @@ import org.apache.commons.lang3.SerializationUtils; -import com.clubobsidian.dynamicgui.animation.AnimationHolder; import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.inventory.InventoryWrapper; import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; -import com.clubobsidian.dynamicgui.manager.dynamicgui.AnimationReplacerManager; import com.clubobsidian.dynamicgui.manager.dynamicgui.ReplacerManager; import com.clubobsidian.dynamicgui.manager.inventory.InventoryManager; import com.clubobsidian.dynamicgui.parser.function.tree.FunctionTree; @@ -33,7 +31,7 @@ import com.clubobsidian.dynamicgui.world.LocationWrapper; -public class Gui implements Serializable, FunctionOwner, AnimationHolder { +public class Gui implements Serializable, FunctionOwner { /** * @@ -50,9 +48,7 @@ public class Gui implements Serializable, FunctionOwner, AnimationHolder { private Map> npcIds; private transient InventoryWrapper inventoryWrapper; private FunctionTree functions; - private final int updateInterval; - private int tick; - public Gui(String name, String type, String title, int rows, Boolean close, ModeEnum modeEnum, Map> npcIds, List slots, List> locations, FunctionTree functions, int updateInterval) + public Gui(String name, String type, String title, int rows, Boolean close, ModeEnum modeEnum, Map> npcIds, List slots, List> locations, FunctionTree functions) { this.name = name; this.type = type; @@ -65,15 +61,11 @@ public Gui(String name, String type, String title, int rows, Boolean close, Mode this.locations = locations; this.inventoryWrapper = null; this.functions = functions; - this.updateInterval = updateInterval; - this.tick = 0; } public InventoryWrapper buildInventory(PlayerWrapper playerWrapper) { String inventoryTitle = ReplacerManager.get().replace(this.title, playerWrapper); - inventoryTitle = AnimationReplacerManager.get().replace(this, playerWrapper, inventoryTitle); - if(inventoryTitle.length() > 32) inventoryTitle = inventoryTitle.substring(0,31); @@ -177,29 +169,6 @@ public FunctionTree getFunctions() return this.functions; } - @Override - public int getUpdateInterval() - { - return this.updateInterval; - } - - @Override - public int getCurrentTick() - { - return this.tick; - } - - @Override - public int tick() - { - this.tick += 1; - - if(this.tick > 20) - this.tick = 1; - - return this.tick; - } - public Gui clone() { return SerializationUtils.clone(this); diff --git a/src/main/java/com/clubobsidian/dynamicgui/inventory/InventoryWrapper.java b/src/main/java/com/clubobsidian/dynamicgui/inventory/InventoryWrapper.java index 9b9234579..26ebcee1f 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/inventory/InventoryWrapper.java +++ b/src/main/java/com/clubobsidian/dynamicgui/inventory/InventoryWrapper.java @@ -17,8 +17,6 @@ import java.io.Serializable; -import com.clubobsidian.dynamicgui.entity.PlayerWrapper; - public abstract class InventoryWrapper implements Serializable { /** @@ -41,7 +39,6 @@ public T getInventory() public abstract void setItem(int index, ItemStackWrapper itemStackWrapper); public abstract int getSize(); public abstract int getContentSize(); - public abstract void setTitle(PlayerWrapper playerWrapper, String title); public int addItem(ItemStackWrapper itemStackWrapper) { diff --git a/src/main/java/com/clubobsidian/dynamicgui/inventory/bukkit/BukkitInventoryWrapper.java b/src/main/java/com/clubobsidian/dynamicgui/inventory/bukkit/BukkitInventoryWrapper.java index eca1438fa..75a3a6340 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/inventory/bukkit/BukkitInventoryWrapper.java +++ b/src/main/java/com/clubobsidian/dynamicgui/inventory/bukkit/BukkitInventoryWrapper.java @@ -16,21 +16,13 @@ package com.clubobsidian.dynamicgui.inventory.bukkit; import java.io.Serializable; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import org.bukkit.Material; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import com.clubobsidian.dynamicgui.DynamicGui; -import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.inventory.InventoryWrapper; import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; -import com.clubobsidian.dynamicgui.util.ReflectionUtil; -import com.clubobsidian.dynamicgui.util.bukkit.BukkitReflectionUtil; public class BukkitInventoryWrapper extends InventoryWrapper implements Serializable { @@ -39,20 +31,6 @@ public class BukkitInventoryWrapper extends InventoryWrappe */ private static final long serialVersionUID = 954426075975347755L; - private static Class nmsPlayerClass; - private static Class packetPlayOutOpenWindowClass; - - private static Method getHandle; - private static Method sendPacket; - - private static Field playerConnection; - private static Field containerCounter; - - private static Constructor packetConstructor; - private static Constructor chatMessageConstructor; - - private final Object[] extraChatComponents = new Object[0]; - public BukkitInventoryWrapper(T inventory) { super(inventory); @@ -89,83 +67,4 @@ public int getContentSize() } return contentSize; } - - @Override - public void setTitle(PlayerWrapper playerWrapper, String title) - { - if(packetPlayOutOpenWindowClass == null) - { - packetPlayOutOpenWindowClass = BukkitReflectionUtil.getNMSClass("PacketPlayOutOpenWindow"); - } - - if(packetConstructor == null) - { - Class iChatBaseComponentClass = BukkitReflectionUtil.getNMSClass("IChatBaseComponent"); - try - { - packetConstructor = packetPlayOutOpenWindowClass.getDeclaredConstructor(int.class, String.class, iChatBaseComponentClass, int.class); - packetConstructor.setAccessible(true); - } - catch (NoSuchMethodException | SecurityException e) - { - e.printStackTrace(); - } - } - - if(chatMessageConstructor == null) - { - Class chatMessageClass = BukkitReflectionUtil.getNMSClass("ChatMessage"); - chatMessageConstructor = chatMessageClass.getDeclaredConstructors()[0]; - } - - if(getHandle == null) - { - Class craftPlayer = BukkitReflectionUtil.getCraftClass("entity", "CraftPlayer"); - getHandle = ReflectionUtil.getMethod(craftPlayer, "getHandle"); - } - - if(nmsPlayerClass == null) - { - nmsPlayerClass = BukkitReflectionUtil.getNMSClass("EntityPlayer"); - } - - if(playerConnection == null) - { - playerConnection = ReflectionUtil.getFieldByName(nmsPlayerClass, "playerConnection"); - } - - if(sendPacket == null) - { - Class playerConnectionClass = BukkitReflectionUtil.getNMSClass("PlayerConnection"); - Class packetClass = BukkitReflectionUtil.getNMSClass("Packet"); - sendPacket = ReflectionUtil.getMethod(playerConnectionClass, "sendPacket", packetClass); - } - - if(containerCounter == null) - { - containerCounter = ReflectionUtil.getFieldByName(nmsPlayerClass, "containerCounter"); - } - - try - { - Object player = playerWrapper.getPlayer(); - Object nmsPlayer = getHandle.invoke(player); - - String inventoryType = "minecraft:" + this.getInventory().getType().toString().toLowerCase(); - int size = this.getInventory().getSize(); - int containerId = containerCounter.getInt(nmsPlayer); - Object chatComponent = chatMessageConstructor.newInstance(title, extraChatComponents); - Object packet = packetConstructor.newInstance(containerId, inventoryType, chatComponent, size); - - if(playerWrapper.getOpenInventoryWrapper().getInventory() != null) - { - Object playerCon = playerConnection.get(nmsPlayer); - sendPacket.invoke(playerCon, packet); - } - } - catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException e) - { - e.printStackTrace(); - } - } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/inventory/sponge/SpongeInventoryWrapper.java b/src/main/java/com/clubobsidian/dynamicgui/inventory/sponge/SpongeInventoryWrapper.java index 7e589cf25..f4a3ac3da 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/inventory/sponge/SpongeInventoryWrapper.java +++ b/src/main/java/com/clubobsidian/dynamicgui/inventory/sponge/SpongeInventoryWrapper.java @@ -26,7 +26,6 @@ import org.spongepowered.api.item.inventory.query.QueryOperationTypes; import com.clubobsidian.dynamicgui.DynamicGui; -import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.inventory.InventoryWrapper; import com.clubobsidian.dynamicgui.inventory.ItemStackWrapper; @@ -92,10 +91,4 @@ public int getContentSize() { return this.getInventory().size(); } - - @Override - public void setTitle(PlayerWrapper playerWrapper, String title) - { - // TODO Auto-generated method stub - } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryCloseListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryCloseListener.java index 51ac51d75..d53eda78d 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryCloseListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/InventoryCloseListener.java @@ -15,12 +15,9 @@ */ package com.clubobsidian.dynamicgui.listener; -import com.clubobsidian.dynamicgui.DynamicGui; -import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.event.inventory.InventoryCloseEvent; import com.clubobsidian.dynamicgui.event.player.PlayerKickEvent; import com.clubobsidian.dynamicgui.event.player.PlayerQuitEvent; -import com.clubobsidian.dynamicgui.gui.Gui; import com.clubobsidian.dynamicgui.manager.dynamicgui.GuiManager; import com.clubobsidian.trident.EventHandler; @@ -29,29 +26,15 @@ public class InventoryCloseListener { @EventHandler public void inventoryClose(final InventoryCloseEvent e) { - PlayerWrapper playerWrapper = e.getPlayerWrapper(); - Gui gui = GuiManager.get().getCurrentGui(playerWrapper); - if(gui != null) + if(GuiManager.get().hasGuiCurrently(e.getPlayerWrapper())) { - - //Cleanup active gui GuiManager.get().cleanupGui(e.getPlayerWrapper()); - - DynamicGui.get().getServer().getScheduler().scheduleSyncDelayedTask(DynamicGui.get().getPlugin(), () -> - { - System.out.println("close"); - Gui newGui = GuiManager.get().getCurrentGui(playerWrapper); - if(newGui == null) - { - playerWrapper.closeInventory(); - } - }, 1L); } } @EventHandler public void onQuit(final PlayerQuitEvent e) -{ + { if(GuiManager.get().hasGuiCurrently(e.getPlayerWrapper())) { GuiManager.get().cleanupGui(e.getPlayerWrapper()); diff --git a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationManager.java b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationManager.java index 552df9326..cf7263fc4 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationManager.java +++ b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/AnimationManager.java @@ -1,8 +1,6 @@ package com.clubobsidian.dynamicgui.manager.dynamicgui; -import java.util.ArrayList; import java.util.Iterator; -import java.util.List; import java.util.Map.Entry; import java.util.UUID; @@ -39,7 +37,6 @@ private void createScheduler() @Override public void run() { - List titleUpdates = new ArrayList<>(); Iterator> it = GuiManager.get().getPlayerGuis().entrySet().iterator(); while(it.hasNext()) { @@ -49,22 +46,6 @@ public void run() Gui gui = next.getValue(); boolean updated = false; - - if(gui.getUpdateInterval() != 0) - { - gui.tick(); - - if(gui.getCurrentTick() % gui.getUpdateInterval() == 0) - { - String title = gui.getTitle(); - title = ReplacerManager.get().replace(title, playerWrapper); - title = AnimationReplacerManager.get().replace(gui, playerWrapper, title); - titleUpdates.add(new TitleUpdater(gui, playerWrapper, title)); - updated = true; - } - } - - for(Slot slot : gui.getSlots()) { if(slot.getUpdateInterval() == 0) @@ -88,47 +69,8 @@ public void run() { playerWrapper.updateInventory(); } - - //Schedule title updates for the next tick - DynamicGui.get().getServer().getScheduler().scheduleSyncDelayedTask(DynamicGui.get().getPlugin(), () -> - { - for(TitleUpdater updater : titleUpdates) - { - updater.update(); - } - }, 1L); } } }, 1L, 1L); } - - private static class TitleUpdater - { - private Gui gui; - private PlayerWrapper playerWrapper; - private String title; - TitleUpdater(Gui gui, PlayerWrapper playerWrapper, String title) - { - this.gui = gui; - this.playerWrapper = playerWrapper; - this.title = title; - } - - public boolean update() - { - Gui currentGui = GuiManager.get().getCurrentGui(this.playerWrapper); - if(currentGui != null && currentGui.equals(this.gui)) - { - this.playerWrapper.updateInventory(); - this.gui.getInventoryWrapper().setTitle(this.playerWrapper, this.title); - this.playerWrapper.updateInventory(); - } - else - { - this.playerWrapper.closeInventory(); - } - - return false; - } - } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java index 05c08fc1f..4e0e80962 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java +++ b/src/main/java/com/clubobsidian/dynamicgui/manager/dynamicgui/GuiManager.java @@ -353,8 +353,6 @@ private Gui createGui(final GuiToken guiToken, final String guiName, final List< Map> npcIds = guiToken.getNpcs(); - int updateInterval = guiToken.getUpdateInterval(); - - return new Gui(guiName, type, title, rows, close, modeEnum, npcIds, slots, locations, guiToken.getFunctions(), updateInterval); + return new Gui(guiName, type, title, rows, close, modeEnum, npcIds, slots, locations, guiToken.getFunctions()); } } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/util/ReflectionUtil.java b/src/main/java/com/clubobsidian/dynamicgui/util/ReflectionUtil.java index b3bb51fa2..0ab587c83 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/util/ReflectionUtil.java +++ b/src/main/java/com/clubobsidian/dynamicgui/util/ReflectionUtil.java @@ -17,7 +17,6 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.lang.reflect.Modifier; public final class ReflectionUtil { @@ -85,7 +84,6 @@ public static Field getFieldByName(Class searchIn, String name) { Field f = searchIn.getDeclaredField(name); f.setAccessible(true); - removeFinal(f); return f; } catch (NoSuchFieldException | SecurityException e) @@ -101,29 +99,14 @@ public static Field getFieldByType(Class searchIn, Class type) if(f.getType() == type) { f.setAccessible(true); - removeFinal(f); return f; } } return null; } - - private static void removeFinal(Field f) - { - try - { - Field modifiersField = Field.class.getDeclaredField("modifiers"); - modifiersField.setAccessible(true); - modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); - } - catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) - { - e.printStackTrace(); - } - } - + public static class ReflectionHelper { - + public T get(Field field) { return this.get(field, null); diff --git a/src/main/java/com/clubobsidian/dynamicgui/util/bukkit/BukkitReflectionUtil.java b/src/main/java/com/clubobsidian/dynamicgui/util/bukkit/BukkitReflectionUtil.java deleted file mode 100644 index e20e07ed3..000000000 --- a/src/main/java/com/clubobsidian/dynamicgui/util/bukkit/BukkitReflectionUtil.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.clubobsidian.dynamicgui.util.bukkit; - -public final class BukkitReflectionUtil { - - private BukkitReflectionUtil() {} - - public static Class getCraftClass(String className) - { - String version = VersionUtil.getVersion(); - try - { - Class clazz = Class.forName("org.bukkit.craftbukkit." + version + "." + className); - return clazz; - } - catch (ClassNotFoundException e) - { - e.printStackTrace(); - } - return null; - } - - public static Class getNMSClass(String className) - { - String version = VersionUtil.getVersion(); - try - { - Class clazz = Class.forName("net.minecraft.server." + version + "." + className); - return clazz; - } - catch (ClassNotFoundException e) - { - e.printStackTrace(); - } - return null; - } - - public static Class getCraftClass(String packageName, String className) - { - String version = VersionUtil.getVersion(); - try - { - Class clazz = Class.forName("org.bukkit.craftbukkit." + version + "." + packageName + "." + className); - return clazz; - } - catch (ClassNotFoundException e) - { - e.printStackTrace(); - } - return null; - } -} \ No newline at end of file From 366bdd2739f88318d6772a5bf30160bc700b1ff7 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Thu, 22 Aug 2019 23:20:53 -0700 Subject: [PATCH 21/28] Optimize replacer registry --- .../entity/bukkit/BukkitPlayerWrapper.java | 13 ++++++++++--- .../replacer/impl/DynamicGuiReplacerRegistry.java | 6 +++++- .../impl/PlaceholderApiReplacerRegistry.java | 3 +-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/clubobsidian/dynamicgui/entity/bukkit/BukkitPlayerWrapper.java b/src/main/java/com/clubobsidian/dynamicgui/entity/bukkit/BukkitPlayerWrapper.java index 5e0d74d21..8e31d8b76 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/entity/bukkit/BukkitPlayerWrapper.java +++ b/src/main/java/com/clubobsidian/dynamicgui/entity/bukkit/BukkitPlayerWrapper.java @@ -158,7 +158,14 @@ public void playEffect(String effect, int data) @Override public int getStatistic(Statistic statistic) { - return this.getPlayer().getStatistic(org.bukkit.Statistic.valueOf(statistic.getBukkitID())); + try + { + return this.getPlayer().getStatistic(org.bukkit.Statistic.valueOf(statistic.getBukkitID())); + } + catch(Exception ex) + { + return -1; + } } @Override @@ -181,12 +188,12 @@ else if(StatisticType.ENTITY == statistic.getStatisticType()) return this.getPlayer().getStatistic(org.bukkit.Statistic.valueOf(statistic.getBukkitID()), EntityType.valueOf(upperData)); } } - catch(IllegalArgumentException ex) + catch(Exception ex) { //Ignore and return -1 return -1; } - return -1; + return 0; } @SuppressWarnings("deprecation") diff --git a/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/DynamicGuiReplacerRegistry.java b/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/DynamicGuiReplacerRegistry.java index 959931360..14bea50b9 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/DynamicGuiReplacerRegistry.java +++ b/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/DynamicGuiReplacerRegistry.java @@ -17,6 +17,9 @@ import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.commons.lang3.StringUtils; import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.manager.entity.EntityManager; @@ -55,7 +58,8 @@ public String replace(PlayerWrapper playerWrapper, String text) { if(text.contains(replacer.getToReplace())) { - text = text.replace(replacer.getToReplace(), replacer.replacement(text, playerWrapper)); + text = StringUtils.replace(text, replacer.getToReplace(), replacer.replacement(text, playerWrapper)); + //text.replace(replacer.getToReplace(), replacer.getToReplace()); } } return text; diff --git a/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/PlaceholderApiReplacerRegistry.java b/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/PlaceholderApiReplacerRegistry.java index 4c43fd48e..3e57be0f9 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/PlaceholderApiReplacerRegistry.java +++ b/src/main/java/com/clubobsidian/dynamicgui/registry/replacer/impl/PlaceholderApiReplacerRegistry.java @@ -19,7 +19,6 @@ import java.lang.reflect.Method; import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; import com.clubobsidian.dynamicgui.entity.PlayerWrapper; import com.clubobsidian.dynamicgui.registry.replacer.ReplacerRegistry; @@ -40,7 +39,7 @@ public String replace(PlayerWrapper playerWrapper, String text) { try { - return (String) this.setPlaceHolders.invoke(null, (Player) playerWrapper.getPlayer(), text); + return (String) this.setPlaceHolders.invoke(null, playerWrapper.getPlayer(), text); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { From e6f96adcc6e1303491aed03456d5d317d0c6b527 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Sun, 25 Aug 2019 03:46:56 -0700 Subject: [PATCH 22/28] Fix function parsing not using replacers Functions wern't using replacers with the new function system. --- .../java/com/clubobsidian/dynamicgui/util/FunctionUtil.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java b/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java index 96731db22..bc4e62ab3 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java +++ b/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java @@ -22,6 +22,7 @@ import com.clubobsidian.dynamicgui.function.Function; import com.clubobsidian.dynamicgui.gui.FunctionOwner; import com.clubobsidian.dynamicgui.manager.dynamicgui.FunctionManager; +import com.clubobsidian.dynamicgui.manager.dynamicgui.ReplacerManager; import com.clubobsidian.dynamicgui.parser.function.FunctionData; import com.clubobsidian.dynamicgui.parser.function.FunctionToken; import com.clubobsidian.dynamicgui.parser.function.FunctionType; @@ -92,7 +93,8 @@ private static FunctionResponse runFunctionData(FunctionOwner owner, List Date: Tue, 27 Aug 2019 01:11:45 -0700 Subject: [PATCH 23/28] Get builders working again --- build.gradle | 2 +- .../builder/FunctionTokenBuilder.java | 87 +++++++++ .../dynamicgui/builder/GuiBuilder.java | 54 +++--- .../dynamicgui/builder/SlotBuilder.java | 166 +++--------------- 4 files changed, 143 insertions(+), 166 deletions(-) create mode 100644 src/main/java/com/clubobsidian/dynamicgui/builder/FunctionTokenBuilder.java diff --git a/build.gradle b/build.gradle index 3681c46e9..aff296b07 100644 --- a/build.gradle +++ b/build.gradle @@ -61,7 +61,7 @@ dependencies { compile 'commons-io:commons-io:2.6' compile 'com.github.clubobsidian:wrappy:1.8.0' compile 'com.github.clubobsidian:trident:2.0.1' - compile 'com.github.clubobsidian:dynamicguiparser:f08fa6af54' + compile 'com.github.clubobsidian:dynamicguiparser:0acfc562ca' compile 'com.udojava:EvalEx:2.1' compile 'com.github.ClubObsidian:FuzzUtil:1.1.0' } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/builder/FunctionTokenBuilder.java b/src/main/java/com/clubobsidian/dynamicgui/builder/FunctionTokenBuilder.java new file mode 100644 index 000000000..192f2f9bd --- /dev/null +++ b/src/main/java/com/clubobsidian/dynamicgui/builder/FunctionTokenBuilder.java @@ -0,0 +1,87 @@ +package com.clubobsidian.dynamicgui.builder; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import com.clubobsidian.dynamicgui.parser.function.FunctionData; +import com.clubobsidian.dynamicgui.parser.function.FunctionToken; +import com.clubobsidian.dynamicgui.parser.function.FunctionType; + +public class FunctionTokenBuilder { + + private String name; + private List types; + private List functions; + private List failOnFunctions; + public FunctionTokenBuilder() + { + this.name = UUID.randomUUID().toString(); + this.types = new ArrayList<>(); + this.functions = new ArrayList<>(); + this.failOnFunctions = new ArrayList<>(); + } + + public FunctionTokenBuilder addType(String type) + { + FunctionType functionType = FunctionType.valueOf(type.toUpperCase()); + this.types.add(functionType); + return this; + } + + public FunctionTokenBuilder addType(String... types) + { + for(String t : types) + { + this.addType(t); + } + return this; + } + + public FunctionTokenBuilder addFunction(String name, String data) + { + return this.addFailOnFunction(new FunctionData(name, data)); + } + + public FunctionTokenBuilder addFunction(FunctionData data) + { + this.functions.add(data); + return this; + } + + public FunctionTokenBuilder addFunction(FunctionData...datas) + { + for(FunctionData data : datas) + { + this.addFunction(data); + } + + return this; + } + + public FunctionTokenBuilder addFailOnFunction(String name, String data) + { + return this.addFailOnFunction(new FunctionData(name, data)); + } + + public FunctionTokenBuilder addFailOnFunction(FunctionData data) + { + this.failOnFunctions.add(data); + return this; + } + + public FunctionTokenBuilder addFailOnFunction(FunctionData...datas) + { + for(FunctionData data : datas) + { + this.addFunction(data); + } + + return this; + } + + public FunctionToken build() + { + return new FunctionToken(this.name, this.types, this.functions, this.failOnFunctions); + } +} \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/builder/GuiBuilder.java b/src/main/java/com/clubobsidian/dynamicgui/builder/GuiBuilder.java index 31b13ab22..080988504 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/builder/GuiBuilder.java +++ b/src/main/java/com/clubobsidian/dynamicgui/builder/GuiBuilder.java @@ -20,10 +20,10 @@ import java.util.List; import java.util.Map; -import com.clubobsidian.dynamicgui.function.Function; import com.clubobsidian.dynamicgui.gui.Gui; import com.clubobsidian.dynamicgui.gui.ModeEnum; import com.clubobsidian.dynamicgui.gui.Slot; +import com.clubobsidian.dynamicgui.parser.function.tree.FunctionTree; import com.clubobsidian.dynamicgui.world.LocationWrapper; public class GuiBuilder { @@ -34,11 +34,16 @@ public class GuiBuilder { private int rows; private Boolean close; private ModeEnum modeEnum; - private List npcIds = new ArrayList<>(); - private List slots = new ArrayList<>(); - private List> locs = new ArrayList<>(); - private List functions = new ArrayList<>(); - private Map> failFunctions = new HashMap<>(); + private Map> npcIds; + private List slots; + private List> locs; + private FunctionTree functionTree; + public GuiBuilder() + { + this.npcIds = new HashMap<>(); + this.slots = new ArrayList<>(); + this.locs = new ArrayList<>(); + } public GuiBuilder setType(String type) { @@ -81,26 +86,33 @@ public GuiBuilder setModeEnum(ModeEnum modeEnum) return this; } - public GuiBuilder addNpcId(Integer id) + public GuiBuilder addNpcId(String plugin, Integer id) { - this.npcIds.add(id); + List npcs = this.npcIds.get(plugin); + if(npcs == null) + { + npcs = new ArrayList<>(); + this.npcIds.put(plugin, npcs); + } + + npcs.add(id); return this; } - public GuiBuilder addNpcId(Integer[] npcIds) + public GuiBuilder addNpcId(String plugin, Integer[] npcIds) { for(Integer id : npcIds) { - this.npcIds.add(id); + this.addNpcId(plugin, id); } return this; } - public GuiBuilder addNpcId(List npcIds) + public GuiBuilder addNpcId(String plugin, List npcIds) { for(Integer id : npcIds) { - this.npcIds.add(id); + this.addNpcId(plugin, id); } return this; } @@ -117,24 +129,14 @@ public GuiBuilder addLocation(LocationWrapper loc) return this; } - public GuiBuilder addFunction(Function function) + public GuiBuilder setFunctionTree(FunctionTree functionTree) { - this.functions.add(function); + this.functionTree = functionTree; return this; } - public GuiBuilder addFailFunction(String failOn, Function function) + public Gui build() { - if(this.failFunctions.get(failOn) == null) - { - this.failFunctions.put(failOn, new ArrayList<>()); - } - this.failFunctions.get(failOn).add(function); - return this; + return new Gui(this.name, this.type, this.title, this.rows, this.close, this.modeEnum, this.npcIds, this.slots, this.locs, this.functionTree); } - - /*public Gui build() - { - return new Gui(this.name, this.type, this.title, this.rows, this.close, this.modeEnum, this.npcIds, this.slots, this.locs); - }*/ } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/builder/SlotBuilder.java b/src/main/java/com/clubobsidian/dynamicgui/builder/SlotBuilder.java index b9dc90a9b..94e03ecbd 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/builder/SlotBuilder.java +++ b/src/main/java/com/clubobsidian/dynamicgui/builder/SlotBuilder.java @@ -16,15 +16,13 @@ package com.clubobsidian.dynamicgui.builder; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.bukkit.Material; import com.clubobsidian.dynamicgui.enchantment.EnchantmentWrapper; -import com.clubobsidian.dynamicgui.function.Function; import com.clubobsidian.dynamicgui.gui.Slot; +import com.clubobsidian.dynamicgui.parser.function.tree.FunctionTree; public class SlotBuilder { @@ -36,22 +34,15 @@ public class SlotBuilder { private List lore; private List enchants; private int index; - - private List functions = new ArrayList<>(); - private Map> failFunctions = new HashMap<>(); - - private List leftClickFunctions = new ArrayList<>(); - private Map> leftClickFailFunctions = new HashMap<>(); - - private List rightClickFunctions = new ArrayList<>(); - private Map> rightClickFailFunctions = new HashMap<>(); - - private List middleClickFunctions = new ArrayList<>(); - private Map> middleClickFailFunctions = new HashMap<>(); - - private List loadFunctions = new ArrayList<>(); - private Map> failLoadFunctions = new HashMap<>(); - private int amount = 1; + private int amount; + private int updateInterval; + private FunctionTree functionTree; + public SlotBuilder() + { + this.enchants = new ArrayList<>(); + this.amount = 1; + this.updateInterval = 0; + } public SlotBuilder setIcon(Material icon) { @@ -107,153 +98,50 @@ public SlotBuilder setAmount(int amount) return this; } - public SlotBuilder addFunction(Function func) - { - this.functions.add(func); - return this; - } - - public SlotBuilder addFailFunction(String key, Function func) - { - if(this.failFunctions.containsKey(key)) - { - if(this.failFunctions.get(key) != null) - { - this.failFunctions.get(key).add(func); - return this; - } - } - - List funcs = new ArrayList<>(); - funcs.add(func); - this.failFunctions.put(key, funcs); - return this; - } - - public SlotBuilder addLeftClickFunction(Function func) - { - this.leftClickFunctions.add(func); - return this; - } - - public SlotBuilder addLeftClickFailFunction(String key, Function func) - { - if(this.leftClickFailFunctions.containsKey(key)) - { - if(this.leftClickFailFunctions.get(key) != null) - { - this.leftClickFailFunctions.get(key).add(func); - return this; - } - } - - ArrayList funcs = new ArrayList(); - funcs.add(func); - this.leftClickFailFunctions.put(key, funcs); - return this; - } - - public SlotBuilder addRightClickFunction(Function func) + public SlotBuilder setUpdateInterval(int interval) { - this.rightClickFunctions.add(func); + this.updateInterval = interval; return this; } - public SlotBuilder addRightClickFailFunction(String key, Function func) + public SlotBuilder addLore(String lore) { - if(this.rightClickFailFunctions.containsKey(key)) + if(this.lore == null) { - if(this.rightClickFailFunctions.get(key) != null) - { - this.rightClickFailFunctions.get(key).add(func); - return this; - } + this.lore = new ArrayList(); + this.lore.add(lore); } - - List funcs = new ArrayList<>(); - funcs.add(func); - this.rightClickFailFunctions.put(key, funcs); - return this; - } - - public SlotBuilder addMiddleClickFunction(Function func) - { - this.middleClickFunctions.add(func); - return this; - } - - public SlotBuilder addMiddleClickFailFunction(String key, Function func) - { - if(this.middleClickFailFunctions.containsKey(key)) + else { - if(this.middleClickFailFunctions.get(key) != null) - { - this.middleClickFailFunctions.get(key).add(func); - return this; - } + this.lore.add(lore); } - - List funcs = new ArrayList<>(); - funcs.add(func); - this.middleClickFailFunctions.put(key, funcs); return this; } - public SlotBuilder addFailLoadFunction(String key, Function func) + public SlotBuilder addLore(String... lore) { - if(this.failLoadFunctions.containsKey(key)) + for(String l : lore) { - if(this.failLoadFunctions.get(key) != null) - { - this.failLoadFunctions.get(key).add(func); - return this; - } + this.addLore(l); } - List funcs = new ArrayList<>(); - funcs.add(func); - this.failLoadFunctions.put(key, funcs); return this; } - public SlotBuilder addLoadFunction(Function func) + public SlotBuilder addEnchant(EnchantmentWrapper enchant) { - this.loadFunctions.add(func); + this.enchants.add(enchant); return this; } - public SlotBuilder addLore(String lore) + public SlotBuilder setFunctionTree(FunctionTree functionTree) { - if(this.lore == null) - { - this.lore = new ArrayList(); - this.lore.add(lore); - } - else - { - this.lore.add(lore); - } + this.functionTree = functionTree; return this; } - public SlotBuilder addLore(ArrayList lore) + public Slot build() { - if(this.lore == null) - { - this.lore = lore; - } - else - { - for(String str : lore) - { - this.lore.add(str); - } - } - return this; + return new Slot(this.index, this.amount,this.icon, this.name, this.nbt, this.data, this.close, this.lore, this.enchants, this.functionTree, this.updateInterval); } - - /*public Slot build() - { - return new Slot(this.index, this.amount,this.icon, this.name, this.nbt, this.data, this.close, this.lore, this.enchants); - }*/ } \ No newline at end of file From 15f85741b21de8abc985c685bc621cf2c5254bfc Mon Sep 17 00:00:00 2001 From: virustotalop Date: Tue, 27 Aug 2019 01:13:12 -0700 Subject: [PATCH 24/28] Add missing license header --- .../dynamicgui/builder/FunctionTokenBuilder.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/com/clubobsidian/dynamicgui/builder/FunctionTokenBuilder.java b/src/main/java/com/clubobsidian/dynamicgui/builder/FunctionTokenBuilder.java index 192f2f9bd..47afb97e7 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/builder/FunctionTokenBuilder.java +++ b/src/main/java/com/clubobsidian/dynamicgui/builder/FunctionTokenBuilder.java @@ -1,3 +1,18 @@ +/* + Copyright 2019 Club Obsidian and contributors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ package com.clubobsidian.dynamicgui.builder; import java.util.ArrayList; From 75a7967e7593f0ca64131915712adfc13df4800d Mon Sep 17 00:00:00 2001 From: virustotalop Date: Tue, 27 Aug 2019 02:21:13 -0700 Subject: [PATCH 25/28] Change FunctionUtil to support FunctionType.ALL The FunctionUtil now supports the all click function type, so that it runs on all clicks. --- build.gradle | 2 +- .../java/com/clubobsidian/dynamicgui/util/FunctionUtil.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index aff296b07..f206cd027 100644 --- a/build.gradle +++ b/build.gradle @@ -61,7 +61,7 @@ dependencies { compile 'commons-io:commons-io:2.6' compile 'com.github.clubobsidian:wrappy:1.8.0' compile 'com.github.clubobsidian:trident:2.0.1' - compile 'com.github.clubobsidian:dynamicguiparser:0acfc562ca' + compile 'com.github.clubobsidian:dynamicguiparser:de8f03eeef' compile 'com.udojava:EvalEx:2.1' compile 'com.github.ClubObsidian:FuzzUtil:1.1.0' } \ No newline at end of file diff --git a/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java b/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java index bc4e62ab3..8d5815365 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java +++ b/src/main/java/com/clubobsidian/dynamicgui/util/FunctionUtil.java @@ -42,7 +42,8 @@ private static boolean recurFunctionNodes(FunctionResponse fail, FunctionOwner o for(FunctionNode node : functionNodes) { FunctionToken functionToken = node.getToken(); - if(functionToken.getTypes().contains(type)) + List types = functionToken.getTypes(); + if(types.contains(type) || (type.isClick() && types.contains(FunctionType.ALL))) { if(type != FunctionType.FAIL) { From 851bef33c9f64634eef233f929ba66652257fcae Mon Sep 17 00:00:00 2001 From: virustotalop Date: Tue, 27 Aug 2019 02:56:40 -0700 Subject: [PATCH 26/28] Start support of shift clicking Add initial event support for shift clicking --- .../event/inventory/InventoryClickEvent.java | 9 ++++++++- .../listener/bukkit/InventoryClickListener.java | 4 +++- .../listener/sponge/InventoryClickListener.java | 14 +++++++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/clubobsidian/dynamicgui/event/inventory/InventoryClickEvent.java b/src/main/java/com/clubobsidian/dynamicgui/event/inventory/InventoryClickEvent.java index 6a5af9ad4..8ecc26a78 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/event/inventory/InventoryClickEvent.java +++ b/src/main/java/com/clubobsidian/dynamicgui/event/inventory/InventoryClickEvent.java @@ -28,14 +28,16 @@ public class InventoryClickEvent extends InventoryEvent implements Cancelable { private ItemStackWrapper itemStackWrapper; private int slot; private Click click; + private boolean shiftClick; private InventoryView view; private boolean cancelled = false; - public InventoryClickEvent(PlayerWrapper playerWrapper, InventoryWrapper inventoryWrapper, ItemStackWrapper itemStackWrapper, int slot, Click click, InventoryView view) + public InventoryClickEvent(PlayerWrapper playerWrapper, InventoryWrapper inventoryWrapper, ItemStackWrapper itemStackWrapper, int slot, Click click, boolean shiftClick, InventoryView view) { super(playerWrapper, inventoryWrapper); this.itemStackWrapper = itemStackWrapper; this.slot = slot; this.click = click; + this.shiftClick = shiftClick; this.view = view; } @@ -59,6 +61,11 @@ public Click getClick() return this.click; } + public boolean isShiftClick() + { + return this.shiftClick; + } + @Override public boolean isCanceled() { diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryClickListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryClickListener.java index 1d2af0e9b..924fd0c54 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryClickListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/bukkit/InventoryClickListener.java @@ -77,7 +77,9 @@ public void onInventoryClick(InventoryClickEvent e) itemStackWrapper = new BukkitItemStackWrapper(itemStack); } - com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent clickEvent = new com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent(playerWrapper, inventoryWrapper, itemStackWrapper, slot, clickType, view); + boolean shiftClick = e.isShiftClick(); + + com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent clickEvent = new com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent(playerWrapper, inventoryWrapper, itemStackWrapper, slot, clickType, shiftClick, view); DynamicGui.get().getEventBus().callEvent(clickEvent); if(clickEvent.isCanceled()) { diff --git a/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryClickListener.java b/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryClickListener.java index 51f96bc11..f5586c830 100644 --- a/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryClickListener.java +++ b/src/main/java/com/clubobsidian/dynamicgui/listener/sponge/InventoryClickListener.java @@ -46,6 +46,7 @@ public class InventoryClickListener { public void inventoryClick(ClickInventoryEvent e, @First Player player) { Click clickType = null; + boolean shift = false; if(e instanceof ClickInventoryEvent.Primary) { clickType = Click.LEFT; @@ -58,6 +59,17 @@ else if (e instanceof ClickInventoryEvent.Secondary) { clickType = Click.RIGHT; } + else if(e instanceof ClickInventoryEvent.Shift.Primary) + { + clickType = Click.LEFT; + shift = true; + } + else if(e instanceof ClickInventoryEvent.Shift.Secondary) + { + clickType = Click.RIGHT; + shift = true; + } + DynamicGui.get().getLogger().info("Event name: " + e.getClass().getName()); @@ -101,7 +113,7 @@ else if (e instanceof ClickInventoryEvent.Secondary) PlayerWrapper playerWrapper = new SpongePlayerWrapper(player); InventoryWrapper inventoryWrapper = new SpongeInventoryWrapper(inventory); - com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent clickEvent = new com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent(playerWrapper, inventoryWrapper, itemStackWrapper, slotIndexClicked, clickType, view); + com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent clickEvent = new com.clubobsidian.dynamicgui.event.inventory.InventoryClickEvent(playerWrapper, inventoryWrapper, itemStackWrapper, slotIndexClicked, clickType, shift, view); DynamicGui.get().getEventBus().callEvent(clickEvent); if(clickEvent.isCanceled()) { From ebfe5c5210c8b405a71f24dcb4be399811853c61 Mon Sep 17 00:00:00 2001 From: virustotalop Date: Tue, 27 Aug 2019 03:00:55 -0700 Subject: [PATCH 27/28] Build with fixed parser for load functions Parser was considered load functions a subset of click functions, this is fixed in the referenced commit. --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f206cd027..dddf3d8c4 100644 --- a/build.gradle +++ b/build.gradle @@ -61,7 +61,7 @@ dependencies { compile 'commons-io:commons-io:2.6' compile 'com.github.clubobsidian:wrappy:1.8.0' compile 'com.github.clubobsidian:trident:2.0.1' - compile 'com.github.clubobsidian:dynamicguiparser:de8f03eeef' + compile 'com.github.clubobsidian:dynamicguiparser:4f56cd4bbd' compile 'com.udojava:EvalEx:2.1' compile 'com.github.ClubObsidian:FuzzUtil:1.1.0' } \ No newline at end of file From 829955c46b7e716a53fffaa6d160dfba464de07c Mon Sep 17 00:00:00 2001 From: virustotalop Date: Mon, 16 Sep 2019 21:11:17 -0700 Subject: [PATCH 28/28] Update plugin.yml to 4.0.0 --- src/main/resources/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 246ffdbce..174493778 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: DynamicGui main: com.clubobsidian.dynamicgui.plugin.bukkit.BukkitPlugin -version: 3.5.1 +version: 4.0.0 author: VirusTotal softdepend: [Vault, PlaceholderAPI, RedisBungee, PlayerPoints, Citizens, Rankup] commands: