From ca49a605c06022fdad7d2c3fea64bb508874bcdf Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Sat, 29 Apr 2023 19:42:04 +0100 Subject: [PATCH] add folia support (not tested) --- .gitignore | 3 +- build.gradle | 5 +- common/build.gradle | 3 + .../znpcsplus/scheduling/TaskScheduler.java | 15 + folia/build.gradle | 4 + .../znpcsplus/scheduling/FoliaScheduler.java | 22 ++ .../lol/pyr/znpcsplus/util/FoliaUtil.java | 12 + .../znpcservers/gui/ConversationGUI.java | 304 ------------------ .../znpcservers/user/EventService.java | 55 ---- .../znpcservers/utility/SchedulerUtils.java | 38 --- .../lol/pyr/znpcsplus/user/UserListener.java | 38 --- settings.gradle | 2 +- {plugin => spigot}/build.gradle | 5 +- .../znpcservers/UnexpectedCallException.java | 0 .../listeners/InventoryListener.java | 0 .../reflection/ReflectionBuilder.java | 0 .../reflection/ReflectionLazyLoader.java | 0 .../reflection/ReflectionPackage.java | 0 .../znpcservers/reflection/Reflections.java | 0 .../reflection/types/ClassReflection.java | 0 .../reflection/types/FieldReflection.java | 0 .../reflection/types/MethodReflection.java | 0 .../znpcservers/utility/BungeeUtils.java | 0 .../znetworkw/znpcservers/utility/Utils.java | 0 .../utility/inventory/ZInventory.java | 0 .../utility/inventory/ZInventoryCallback.java | 0 .../utility/inventory/ZInventoryHolder.java | 0 .../utility/inventory/ZInventoryItem.java | 0 .../utility/inventory/ZInventoryPage.java | 0 .../utility/itemstack/ItemStackBuilder.java | 0 .../itemstack/ItemStackSerializer.java | 0 .../main/java/lol/pyr/znpcsplus/ZNPCsApi.java | 0 .../java/lol/pyr/znpcsplus/ZNPCsPlus.java | 9 +- .../znpcsplus/config/ComponentSerializer.java | 0 .../lol/pyr/znpcsplus/config/Configs.java | 0 .../lol/pyr/znpcsplus/config/MainConfig.java | 0 .../pyr/znpcsplus/config/MessageConfig.java | 0 .../pyr/znpcsplus/entity/PacketEntity.java | 0 .../lol/pyr/znpcsplus/hologram/Hologram.java | 0 .../pyr/znpcsplus/hologram/HologramLine.java | 0 .../InteractionPacketListener.java | 11 +- .../pyr/znpcsplus/interaction/NPCAction.java | 0 .../interaction/NPCActionDeserializer.java | 0 .../znpcsplus/interaction/NPCActionType.java | 0 .../types/ConsoleCommandAction.java | 0 .../interaction/types/MessageAction.java | 0 .../types/PlayerCommandAction.java | 0 .../interaction/types/SwitchServerAction.java | 0 .../znpcsplus/metadata/MetadataFactory.java | 0 .../pyr/znpcsplus/metadata/V1_13Factory.java | 0 .../pyr/znpcsplus/metadata/V1_14Factory.java | 0 .../pyr/znpcsplus/metadata/V1_16Factory.java | 0 .../pyr/znpcsplus/metadata/V1_17Factory.java | 0 .../pyr/znpcsplus/metadata/V1_8Factory.java | 0 .../pyr/znpcsplus/metadata/V1_9Factory.java | 0 .../main/java/lol/pyr/znpcsplus/npc/NPC.java | 0 .../lol/pyr/znpcsplus/npc/NPCRegistry.java | 0 .../pyr/znpcsplus/packets/PacketFactory.java | 0 .../pyr/znpcsplus/packets/V1_14Factory.java | 0 .../pyr/znpcsplus/packets/V1_19Factory.java | 0 .../pyr/znpcsplus/packets/V1_8Factory.java | 2 +- .../pyr/znpcsplus/packets/V1_9Factory.java | 0 .../znpcsplus/scheduling/SpigotScheduler.java | 20 ++ .../znpcsplus/skin/BaseSkinDescriptor.java | 0 .../java/lol/pyr/znpcsplus/skin/Skin.java | 0 .../pyr/znpcsplus/skin/cache/CachedId.java | 0 .../pyr/znpcsplus/skin/cache/SkinCache.java | 0 .../skin/cache/SkinCacheCleanTask.java | 0 .../skin/descriptor/FetchingDescriptor.java | 0 .../skin/descriptor/MirrorDescriptor.java | 0 .../skin/descriptor/PrefetchedDescriptor.java | 0 .../znpcsplus/tasks/NPCVisibilityTask.java | 0 .../pyr/znpcsplus/updater/UpdateChecker.java | 0 .../updater/UpdateNotificationListener.java | 0 .../java/lol/pyr/znpcsplus/user/User.java | 10 +- .../lol/pyr/znpcsplus/user/UserListener.java | 24 ++ .../lol/pyr/znpcsplus/util/LazyLoader.java | 0 .../lol/pyr/znpcsplus/util/StringUtils.java | 0 .../java/lol/pyr/znpcsplus/util/Viewable.java | 0 .../src/main/resources/plugin.yml | 0 80 files changed, 122 insertions(+), 460 deletions(-) create mode 100644 common/build.gradle create mode 100644 common/src/main/java/lol/pyr/znpcsplus/scheduling/TaskScheduler.java create mode 100644 folia/build.gradle create mode 100644 folia/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java create mode 100644 folia/src/main/java/lol/pyr/znpcsplus/util/FoliaUtil.java delete mode 100644 plugin/src/main/java/io/github/znetworkw/znpcservers/gui/ConversationGUI.java delete mode 100644 plugin/src/main/java/io/github/znetworkw/znpcservers/user/EventService.java delete mode 100644 plugin/src/main/java/io/github/znetworkw/znpcservers/utility/SchedulerUtils.java delete mode 100644 plugin/src/main/java/lol/pyr/znpcsplus/user/UserListener.java rename {plugin => spigot}/build.gradle (96%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/UnexpectedCallException.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionBuilder.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionLazyLoader.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionPackage.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/reflection/Reflections.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/reflection/types/ClassReflection.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/reflection/types/FieldReflection.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/reflection/types/MethodReflection.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/utility/BungeeUtils.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/utility/Utils.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventory.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryCallback.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryHolder.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryItem.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryPage.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackBuilder.java (100%) rename {plugin => spigot}/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackSerializer.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/ZNPCsApi.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java (95%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/config/ComponentSerializer.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/config/Configs.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/config/MainConfig.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/config/MessageConfig.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/hologram/Hologram.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java (78%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/metadata/V1_13Factory.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/metadata/V1_14Factory.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/metadata/V1_16Factory.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/metadata/V1_17Factory.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/metadata/V1_8Factory.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/metadata/V1_9Factory.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/npc/NPC.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/packets/V1_14Factory.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/packets/V1_19Factory.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java (98%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java (100%) create mode 100644 spigot/src/main/java/lol/pyr/znpcsplus/scheduling/SpigotScheduler.java rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/skin/BaseSkinDescriptor.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/skin/Skin.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/skin/cache/CachedId.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCache.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/skin/descriptor/FetchingDescriptor.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/skin/descriptor/MirrorDescriptor.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/skin/descriptor/PrefetchedDescriptor.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/user/User.java (86%) create mode 100644 spigot/src/main/java/lol/pyr/znpcsplus/user/UserListener.java rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/util/LazyLoader.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/util/StringUtils.java (100%) rename {plugin => spigot}/src/main/java/lol/pyr/znpcsplus/util/Viewable.java (100%) rename {plugin => spigot}/src/main/resources/plugin.yml (100%) diff --git a/.gitignore b/.gitignore index ca98d55..a21785e 100644 --- a/.gitignore +++ b/.gitignore @@ -43,8 +43,7 @@ bin/ .DS_Store /run/ +/spigot/run/ /.idea/ gradle.properties - -gradle.properties diff --git a/build.gradle b/build.gradle index 7cf1348..37c2c85 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ subprojects { version "1.0.5" compileJava { - options.release.set(16) + options.release.set(17) } repositories { @@ -16,5 +16,8 @@ subprojects { maven { url "https://repo.codemc.io/repository/maven-snapshots/" } + maven { + url "https://repo.papermc.io/repository/maven-public/" + } } } \ No newline at end of file diff --git a/common/build.gradle b/common/build.gradle new file mode 100644 index 0000000..d214f85 --- /dev/null +++ b/common/build.gradle @@ -0,0 +1,3 @@ +dependencies { + compileOnly "org.spigotmc:spigot-api:1.19.4-R0.1-SNAPSHOT" +} \ No newline at end of file diff --git a/common/src/main/java/lol/pyr/znpcsplus/scheduling/TaskScheduler.java b/common/src/main/java/lol/pyr/znpcsplus/scheduling/TaskScheduler.java new file mode 100644 index 0000000..505ce59 --- /dev/null +++ b/common/src/main/java/lol/pyr/znpcsplus/scheduling/TaskScheduler.java @@ -0,0 +1,15 @@ +package lol.pyr.znpcsplus.scheduling; + +import org.bukkit.plugin.Plugin; + +public abstract class TaskScheduler { + protected final Plugin plugin; + + public TaskScheduler(Plugin plugin) { + this.plugin = plugin; + } + + public abstract void runAsync(Runnable runnable); + + public abstract void runLaterAsync(Runnable runnable, long ticks); +} diff --git a/folia/build.gradle b/folia/build.gradle new file mode 100644 index 0000000..98aa04f --- /dev/null +++ b/folia/build.gradle @@ -0,0 +1,4 @@ +dependencies { + compileOnly "dev.folia:folia-api:1.19.4-R0.1-SNAPSHOT" + compileOnly project(":common") +} diff --git a/folia/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java b/folia/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java new file mode 100644 index 0000000..364c51f --- /dev/null +++ b/folia/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java @@ -0,0 +1,22 @@ +package lol.pyr.znpcsplus.scheduling; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +import java.util.concurrent.TimeUnit; + +public class FoliaScheduler extends TaskScheduler { + public FoliaScheduler(Plugin plugin) { + super(plugin); + } + + @Override + public void runAsync(Runnable runnable) { + Bukkit.getAsyncScheduler().runNow(plugin, task -> runnable.run()); + } + + @Override + public void runLaterAsync(Runnable runnable, long ticks) { + Bukkit.getAsyncScheduler().runDelayed(plugin, task -> runnable.run(), ticks * 50, TimeUnit.MILLISECONDS); + } +} diff --git a/folia/src/main/java/lol/pyr/znpcsplus/util/FoliaUtil.java b/folia/src/main/java/lol/pyr/znpcsplus/util/FoliaUtil.java new file mode 100644 index 0000000..ecbba61 --- /dev/null +++ b/folia/src/main/java/lol/pyr/znpcsplus/util/FoliaUtil.java @@ -0,0 +1,12 @@ +package lol.pyr.znpcsplus.util; + +public class FoliaUtil { + public static boolean isFolia() { + try { + Class.forName("io.papermc.paper.threadedregions.RegionizedServer"); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } +} diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/gui/ConversationGUI.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/gui/ConversationGUI.java deleted file mode 100644 index 8934342..0000000 --- a/plugin/src/main/java/io/github/znetworkw/znpcservers/gui/ConversationGUI.java +++ /dev/null @@ -1,304 +0,0 @@ -package io.github.znetworkw.znpcservers.gui; - -import com.google.common.base.Joiner; -import com.google.common.base.Splitter; -import io.github.znetworkw.znpcservers.utility.inventory.ZInventory; -import io.github.znetworkw.znpcservers.utility.inventory.ZInventoryPage; -import org.bukkit.entity.Player; - -public class ConversationGUI extends ZInventory { - private static final Splitter SPACE_SPLITTER = Splitter.on(" "); - private static final Joiner SPACE_JOINER = Joiner.on(" "); - - public ConversationGUI(Player player) { - super(player); - this.setCurrentPage(new MainPage(this)); - } - - static class MainPage extends ZInventoryPage { - public MainPage(ZInventory inventory) { - super(inventory, "Conversations", 6); - } - - @Override - public void update() { - - } - /* - - int pageID = 1; - - public MainPage(ZInventory inventory) { - super(inventory, "Conversations", 6); - } - - @Override - public void update() { - - int size = ConfigurationConstants.NPC_CONVERSATIONS.size(); - - addItem(ItemStackBuilder.forMaterial(Material.BARRIER).setName(ChatColor.RED + "Close").build(), getRows() - 5, clickEvent -> this.getPlayer().closeInventory()); - - if (pageID > 1) { - addItem(ItemStackBuilder.forMaterial(Material.ARROW) - .setName(ChatColor.GRAY + "Previous page") - .build(), - getRows() - 6, - clickEvent -> { - pageID -= 1; - openInventory(); - }); - } - - if (size > 45 * pageID) { - addItem(ItemStackBuilder.forMaterial(Material.ARROW) - .setName(ChatColor.GRAY + "Next page") - .build(), - getRows() - 4, - clickEvent -> { - pageID += 1; - openInventory(); - }); - } - int slots = (getRows() - 9) * pageID; - int min = Math.min(slots, size); - - for (int i = slots - (getRows() - 9); i < min; ++i) { - Conversation conversation = ConfigurationConstants.NPC_CONVERSATIONS.get(i); - this.addItem(ItemStackBuilder.forMaterial(Material.PAPER).setName(ChatColor.GREEN + conversation.getName()).setLore("&7this conversation has &b" + conversation.getTexts().size() + " &7texts,", "&7it will activate when a player is on a &b" + conversation.getRadius() + "x" + conversation.getRadius() + " &7radius,", "&7or when a player interacts with an npc.", "&7when the conversation is finish, there is a &b" + conversation.getCooldown() + "s &7delay to start again.", "&f&lUSES", " &bLeft-click &7to manage texts.", " &bRight-click &7to add a new text.", " &bQ &7to change the radius.", " &bMiddle-click &7to change the cooldown.").build(), i - ((getRows() - 9) * (pageID - 1)), clickEvent -> { - if (clickEvent.getClick() == ClickType.DROP) { - Utils.sendTitle(this.getPlayer(), "&b&lCHANGE RADIUS", "&7Type the new radius..."); - EventService.addService(User.get(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> { - if (!ConfigurationConstants.NPC_CONVERSATIONS.contains(conversation)) { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND); - } else { - Integer radius = Ints.tryParse(event.getMessage()); - if (radius == null) { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER); - } else if (radius < 0) { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER); - } else { - conversation.setRadius(radius); - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS); - } - } - }).addConsumer(event -> this.openInventory()); - } else if (clickEvent.isRightClick()) { - Utils.sendTitle(this.getPlayer(), "&e&lADD LINE", "&7Type the new line..."); - EventService.addService(User.get(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> { - if (!ConfigurationConstants.NPC_CONVERSATIONS.contains(conversation)) { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND); - } else { - conversation.getTexts().add(new ConversationKey(event.getMessage())); - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS); - } - }).addConsumer(event -> this.openInventory()); - } else if (clickEvent.isLeftClick()) { - new EditConversationPage(this.getInventory(), conversation).openInventory(); - } else if (clickEvent.getClick() == ClickType.MIDDLE) { - Utils.sendTitle(this.getPlayer(), "&6&lCHANGE COOLDOWN", "&7Type the new cooldown..."); - EventService.addService(User.get(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> { - if (!ConfigurationConstants.NPC_CONVERSATIONS.contains(conversation)) { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND); - } else { - Integer cooldown = Ints.tryParse(event.getMessage()); - if (cooldown == null) { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER); - } else if (cooldown < 0) { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER); - } else { - conversation.setDelay(cooldown); - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS); - } - } - }).addConsumer(event -> this.openInventory()); - } - }); - } - } - - @Override - public String getPageName() { - return super.getPageName() + " - " + pageID + "/" + (int) (Math.ceil((double) ConfigurationConstants.NPC_CONVERSATIONS.size() / (double) 45)); - } - - static class ActionManagementPage extends ZInventoryPage { - private final Conversation conversation; - private final ConversationKey conversationKey; - - int pageID = 1; - - public ActionManagementPage(ZInventory inventory, Conversation conversation, ConversationKey conversationKey) { - super(inventory, "Editing " + conversationKey.getTextFormatted(), 6); - this.conversation = conversation; - this.conversationKey = conversationKey; - } - - @Override - public void update() { - if (pageID > 1) { - addItem(ItemStackBuilder.forMaterial(Material.ARROW) - .setName(ChatColor.GRAY + "Previous page") - .build(), - getRows() - 6, - clickEvent -> { - pageID -= 1; - openInventory(); - }); - } - if (conversationKey.getActions().size() > 45 *pageID) { - addItem(ItemStackBuilder.forMaterial(Material.ARROW) - .setName(ChatColor.GRAY + "Next page") - .build(), - getRows() - 4, - clickEvent -> { - pageID += 1; - openInventory(); - }); - } - int slots = (getRows() - 9) * pageID; - int min = Math.min(slots, conversationKey.getActions().size()); - - for (int i = slots - (getRows() - 9); i < min; i++) { - NPCAction znpcAction = this.conversationKey.getActions().get(i); - this.addItem(ItemStackBuilder.forMaterial(Material.ANVIL).setName(ChatColor.AQUA + znpcAction.getAction().substring(0, Math.min(znpcAction.getAction().length(), 24)) + "....").setLore("&7this action type is &b" + znpcAction.getActionType(), "&f&lUSES", " &bRight-click &7to remove text.").build(), i - ((getRows() - 9) * (pageID - 1)), clickEvent -> { - if (clickEvent.isRightClick()) { - this.conversationKey.getActions().remove(znpcAction); - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS); - this.openInventory(); - } - }); - } - this.addItem(ItemStackBuilder.forMaterial(Material.EMERALD).setName(ChatColor.AQUA + "ADD A NEW ACTION").setLore("&7click here...").build(), this.getRows() - 5, clickEvent -> { - Utils.sendTitle(this.getPlayer(), "&d&lADD ACTION", "&7Type the new action..."); - EventService.addService(User.get(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> { - if (ConfigurationConstants.NPC_CONVERSATIONS.contains(this.conversation) && this.conversation.getTexts().contains(this.conversationKey)) { - List stringList = SPACE_SPLITTER.splitToList(event.getMessage()); - if (stringList.size() < 2) { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INCORRECT_USAGE); - } else { - this.conversationKey.getActions().add(new NPCAction(stringList.get(0).toUpperCase(), SPACE_JOINER.join(Iterables.skip(stringList, 1)))); - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS); - } - } else { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND); - } - }).addConsumer(event -> this.openInventory()); - }); - } - } - - @SuppressWarnings({"UnstableApiUsage"}) - static class EditConversationPage extends ZInventoryPage { - private final Conversation conversation; - - int pageID = 1; - - public EditConversationPage(ZInventory inventory, Conversation conversation) { - super(inventory, "Editing conversation " + conversation.getName(), 6); - this.conversation = conversation; - } - - @Override - public void update() { - if (pageID > 1) { - addItem(ItemStackBuilder.forMaterial(Material.ARROW) - .setName(ChatColor.GRAY + "Previous page") - .build(), - getRows() - 6, - clickEvent -> { - pageID -= 1; - openInventory(); - }); - } - if (conversation.getTexts().size() > 45 * pageID) { - addItem(ItemStackBuilder.forMaterial(Material.ARROW) - .setName(ChatColor.GRAY + "Next page") - .build(), - getRows() - 4, - clickEvent -> { - pageID += 1; - openInventory(); - }); - } - int slots = (getRows() - 9) * pageID; - int min = Math.min(slots, conversation.getTexts().size()); - - for (int i = slots - (getRows() - 9); i < min; i++) { - ConversationKey conversationKey = this.conversation.getTexts().get(i); - this.addItem(ItemStackBuilder.forMaterial(Material.NAME_TAG).setName(ChatColor.AQUA + conversationKey.getTextFormatted() + "....").setLore("&7this conversation text has a delay of &b" + conversationKey.getCooldown() + "s &7to be executed,", "&7the sound for the text is &b" + (conversationKey.getSoundName() == null ? "NONE" : conversationKey.getSoundName()) + "&7,", "&7before sending the text there is a delay of &b" + conversationKey.getCooldown() + "s", "&7the index for the text is &b" + i + "&7,", "&7and the conversation has currently &b" + conversationKey.getActions().size() + " actions&7.", "&f&lUSES", " &bLeft-click &7to change the position.", " &bRight-click &7to remove text.", " &bLeft-Shift-click &7to change the sound.", " &bMiddle-click &7to change the delay.", " &bRight-Shift-click &7to edit the text.", " &bQ &7to manage actions.").build(), i, clickEvent -> { - if (clickEvent.getClick() == ClickType.SHIFT_LEFT) { - Utils.sendTitle(this.getPlayer(), "&c&lCHANGE SOUND", "&7Type the new sound..."); - EventService.addService(User.get(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> { - if (ConfigurationConstants.NPC_CONVERSATIONS.contains(this.conversation) && this.conversation.getTexts().contains(conversationKey)) { - String sound = event.getMessage().trim(); - conversationKey.setSoundName(sound); - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS); - } else { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND); - } - }).addConsumer(event -> this.openInventory()); - } else if (clickEvent.getClick() == ClickType.SHIFT_RIGHT) { - Utils.sendTitle(this.getPlayer(), "&a&lEDIT TEXT", "&7Type the new text..."); - EventService.addService(User.get(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> { - if (ConfigurationConstants.NPC_CONVERSATIONS.contains(this.conversation) && this.conversation.getTexts().contains(conversationKey)) { - conversationKey.getLines().clear(); - conversationKey.getLines().addAll(SPACE_SPLITTER.splitToList(event.getMessage())); - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS); - } else { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND); - } - }).addConsumer(event -> this.openInventory()); - } else if (clickEvent.isLeftClick()) { - Utils.sendTitle(this.getPlayer(), "&e&lCHANGE POSITION &a>=0&c<=" + this.conversation.getTexts().size(), "&7Type the new position..."); - EventService.addService(User.get(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> { - if (ConfigurationConstants.NPC_CONVERSATIONS.contains(this.conversation) && this.conversation.getTexts().contains(conversationKey)) { - Integer position = Ints.tryParse(event.getMessage()); - if (position == null) { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER); - } else if (position >= 0 && position <= this.conversation.getTexts().size() - 1) { - Collections.swap(this.conversation.getTexts(), this.conversation.getTexts().indexOf(conversationKey), position); - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS); - } else { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_SIZE); - } - } else { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND); - } - }).addConsumer(event -> this.openInventory()); - } else if (clickEvent.isRightClick()) { - this.conversation.getTexts().remove(conversationKey); - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS); - this.openInventory(); - } else if (clickEvent.getClick() == ClickType.MIDDLE) { - Utils.sendTitle(this.getPlayer(), "&d&lCHANGE DELAY", "&7Type the new delay..."); - EventService.addService(User.get(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> { - if (ConfigurationConstants.NPC_CONVERSATIONS.contains(this.conversation) && this.conversation.getTexts().contains(conversationKey)) { - Integer delay = Ints.tryParse(event.getMessage()); - if (delay == null) { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER); - } else if (delay < 0) { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER); - } else { - conversationKey.setDelay(delay); - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS); - } - } else { - Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND); - } - }).addConsumer(event -> this.openInventory()); - } else if (clickEvent.getClick() == ClickType.DROP) { - new ActionManagementPage(this.getInventory(), this.conversation, conversationKey).openInventory(); - } - }); - } - } - - @Override - public String getPageName() { - return super.getPageName() + " - " + pageID + "/" + (int) (Math.ceil((double) conversation.getTexts().size() / (double) 45)); - } - } - */ - } -} diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/user/EventService.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/user/EventService.java deleted file mode 100644 index 0954960..0000000 --- a/plugin/src/main/java/io/github/znetworkw/znpcservers/user/EventService.java +++ /dev/null @@ -1,55 +0,0 @@ -package io.github.znetworkw.znpcservers.user; - -import lol.pyr.znpcsplus.ZNPCsPlus; -import lol.pyr.znpcsplus.user.User; -import org.bukkit.event.Event; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.function.Consumer; - -public class EventService { - private final Class eventClass; - private final List> eventConsumers; - - protected EventService(Class eventClass, List> eventConsumers) { - this.eventClass = eventClass; - this.eventConsumers = eventConsumers; - } - - public Class getEventClass() { - return this.eventClass; - } - - public List> getEventConsumers() { - return this.eventConsumers; - } - - public EventService addConsumer(Consumer consumer) { - this.getEventConsumers().add(consumer); - return this; - } - - public void runAll(T event) { - ZNPCsPlus.SCHEDULER.runNextTick(() -> this.eventConsumers.forEach(consumer -> consumer.accept(event))); - } - - public static EventService addService(User user, Class eventClass) { - if (EventService.hasService(user, eventClass)) throw new IllegalStateException(eventClass.getSimpleName() + " is already register for " + user.getUuid().toString()); - EventService service = new EventService<>(eventClass, new ArrayList<>()); - user.getEventServices().add(service); - user.getPlayer().closeInventory(); - return service; - } - - @SuppressWarnings("unchecked") - public static EventService findService(User user, Class eventClass) { - Objects.requireNonNull(EventService.class); - return user.getEventServices().stream().filter(eventService -> eventService.getEventClass().isAssignableFrom(eventClass)).map(EventService.class::cast).findFirst().orElse(null); - } - - public static boolean hasService(User user, Class eventClass) { - return user.getEventServices().stream().anyMatch(eventService -> eventService.getEventClass() == eventClass); - } -} diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/SchedulerUtils.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/SchedulerUtils.java deleted file mode 100644 index 394b89e..0000000 --- a/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/SchedulerUtils.java +++ /dev/null @@ -1,38 +0,0 @@ -package io.github.znetworkw.znpcservers.utility; - -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.scheduler.BukkitTask; - -public class SchedulerUtils { - private final Plugin plugin; - - public SchedulerUtils(Plugin plugin) { - this.plugin = plugin; - } - - public BukkitTask runTaskTimer(BukkitRunnable bukkitRunnable, int delay) { - return runTaskTimer(bukkitRunnable, delay, delay); - } - - public BukkitTask runTaskTimer(BukkitRunnable bukkitRunnable, int delay, int continuousDelay) { - return bukkitRunnable.runTaskTimer(this.plugin, delay, continuousDelay); - } - - public BukkitTask runTaskTimerAsynchronously(Runnable runnable, int delay, int continuousDelay) { - return Bukkit.getScheduler().runTaskTimerAsynchronously(this.plugin, runnable, delay, continuousDelay); - } - - public void runTaskLaterSync(Runnable runnable, int delay) { - Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, runnable, delay); - } - - public BukkitTask runNextTick(Runnable runnable) { - return Bukkit.getScheduler().runTask(this.plugin, runnable); - } - - public void runAsync(Runnable runnable) { - Bukkit.getScheduler().runTaskAsynchronously(plugin, runnable); - } -} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/user/UserListener.java b/plugin/src/main/java/lol/pyr/znpcsplus/user/UserListener.java deleted file mode 100644 index 3c9a2f3..0000000 --- a/plugin/src/main/java/lol/pyr/znpcsplus/user/UserListener.java +++ /dev/null @@ -1,38 +0,0 @@ -package lol.pyr.znpcsplus.user; - -import io.github.znetworkw.znpcservers.user.EventService; -import lol.pyr.znpcsplus.ZNPCsPlus; -import org.bukkit.Bukkit; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -public class UserListener implements Listener { - public UserListener(ZNPCsPlus plugin) { - Bukkit.getPluginManager().registerEvents(this, plugin); - } - - @EventHandler - public void onJoin(PlayerJoinEvent event) { - User.get(event.getPlayer()); - } - - @EventHandler - public void onQuit(PlayerQuitEvent event) { - User.remove(event.getPlayer().getUniqueId()); - } - - @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) - public void onTalk(AsyncPlayerChatEvent event) { - User zUser = User.get(event.getPlayer()); - if (EventService.hasService(zUser, AsyncPlayerChatEvent.class)) { - event.setCancelled(true); - EventService eventService = EventService.findService(zUser, AsyncPlayerChatEvent.class); - eventService.runAll(event); - zUser.getEventServices().remove(eventService); - } - } -} diff --git a/settings.gradle b/settings.gradle index 13c6ed6..cc12245 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,3 @@ rootProject.name = "ZNPCsPlus" -include "api", "plugin" \ No newline at end of file +include "api", "spigot", "folia", "common" \ No newline at end of file diff --git a/plugin/build.gradle b/spigot/build.gradle similarity index 96% rename from plugin/build.gradle rename to spigot/build.gradle index 6cc6396..525ebaf 100644 --- a/plugin/build.gradle +++ b/spigot/build.gradle @@ -10,9 +10,6 @@ repositories { maven { url "https://jitpack.io/" } - maven { - url "https://repo.papermc.io/repository/maven-public/" - } } dependencies { @@ -32,6 +29,8 @@ dependencies { implementation "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" implementation project(":api") + implementation project(":common") + implementation project(":folia") } shadowJar { diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/UnexpectedCallException.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/UnexpectedCallException.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/UnexpectedCallException.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/UnexpectedCallException.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionBuilder.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionBuilder.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionBuilder.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionBuilder.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionLazyLoader.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionLazyLoader.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionLazyLoader.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionLazyLoader.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionPackage.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionPackage.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionPackage.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionPackage.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/Reflections.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/Reflections.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/Reflections.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/Reflections.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/types/ClassReflection.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/types/ClassReflection.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/types/ClassReflection.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/types/ClassReflection.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/types/FieldReflection.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/types/FieldReflection.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/types/FieldReflection.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/types/FieldReflection.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/types/MethodReflection.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/types/MethodReflection.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/types/MethodReflection.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/reflection/types/MethodReflection.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/BungeeUtils.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/utility/BungeeUtils.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/utility/BungeeUtils.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/utility/BungeeUtils.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/Utils.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/utility/Utils.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/utility/Utils.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/utility/Utils.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventory.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventory.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventory.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventory.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryCallback.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryCallback.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryCallback.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryCallback.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryHolder.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryHolder.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryHolder.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryHolder.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryItem.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryItem.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryItem.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryItem.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryPage.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryPage.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryPage.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryPage.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackBuilder.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackBuilder.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackBuilder.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackBuilder.java diff --git a/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackSerializer.java b/spigot/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackSerializer.java similarity index 100% rename from plugin/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackSerializer.java rename to spigot/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackSerializer.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNPCsApi.java b/spigot/src/main/java/lol/pyr/znpcsplus/ZNPCsApi.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/ZNPCsApi.java rename to spigot/src/main/java/lol/pyr/znpcsplus/ZNPCsApi.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java b/spigot/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java similarity index 95% rename from plugin/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java rename to spigot/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java index f29423a..b56a02f 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java +++ b/spigot/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java @@ -6,7 +6,6 @@ import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes; import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder; import io.github.znetworkw.znpcservers.listeners.InventoryListener; import io.github.znetworkw.znpcservers.utility.BungeeUtils; -import io.github.znetworkw.znpcservers.utility.SchedulerUtils; import lol.pyr.znpcsplus.api.ZApiProvider; import lol.pyr.znpcsplus.api.entity.EntityProperty; import lol.pyr.znpcsplus.api.npc.NPCType; @@ -16,6 +15,9 @@ import lol.pyr.znpcsplus.interaction.types.ConsoleCommandAction; import lol.pyr.znpcsplus.interaction.types.MessageAction; import lol.pyr.znpcsplus.npc.NPC; import lol.pyr.znpcsplus.npc.NPCRegistry; +import lol.pyr.znpcsplus.scheduling.FoliaScheduler; +import lol.pyr.znpcsplus.scheduling.SpigotScheduler; +import lol.pyr.znpcsplus.scheduling.TaskScheduler; import lol.pyr.znpcsplus.skin.cache.SkinCache; import lol.pyr.znpcsplus.skin.cache.SkinCacheCleanTask; import lol.pyr.znpcsplus.skin.descriptor.FetchingDescriptor; @@ -26,6 +28,7 @@ import lol.pyr.znpcsplus.updater.UpdateChecker; import lol.pyr.znpcsplus.updater.UpdateNotificationListener; import lol.pyr.znpcsplus.user.User; import lol.pyr.znpcsplus.user.UserListener; +import lol.pyr.znpcsplus.util.FoliaUtil; import lol.pyr.znpcsplus.util.ZLocation; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.Component; @@ -46,7 +49,7 @@ public class ZNPCsPlus extends JavaPlugin { public static File PLUGIN_FOLDER; public static File PATH_FOLDER; private static final int PLUGIN_ID = 18244; - public static SchedulerUtils SCHEDULER; + public static TaskScheduler SCHEDULER; public static BungeeUtils BUNGEE_UTILS; public static BukkitAudiences ADVENTURE; public static boolean PLACEHOLDERS_SUPPORTED; @@ -116,7 +119,7 @@ public class ZNPCsPlus extends JavaPlugin { log(ChatColor.WHITE + " * Registering components..."); getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); new Metrics(this, PLUGIN_ID); - SCHEDULER = new SchedulerUtils(this); + SCHEDULER = FoliaUtil.isFolia() ? new FoliaScheduler(this) : new SpigotScheduler(this); BUNGEE_UTILS = new BungeeUtils(this); Bukkit.getOnlinePlayers().forEach(User::get); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/config/ComponentSerializer.java b/spigot/src/main/java/lol/pyr/znpcsplus/config/ComponentSerializer.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/config/ComponentSerializer.java rename to spigot/src/main/java/lol/pyr/znpcsplus/config/ComponentSerializer.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/config/Configs.java b/spigot/src/main/java/lol/pyr/znpcsplus/config/Configs.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/config/Configs.java rename to spigot/src/main/java/lol/pyr/znpcsplus/config/Configs.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/config/MainConfig.java b/spigot/src/main/java/lol/pyr/znpcsplus/config/MainConfig.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/config/MainConfig.java rename to spigot/src/main/java/lol/pyr/znpcsplus/config/MainConfig.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/config/MessageConfig.java b/spigot/src/main/java/lol/pyr/znpcsplus/config/MessageConfig.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/config/MessageConfig.java rename to spigot/src/main/java/lol/pyr/znpcsplus/config/MessageConfig.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java b/spigot/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java rename to spigot/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/hologram/Hologram.java b/spigot/src/main/java/lol/pyr/znpcsplus/hologram/Hologram.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/hologram/Hologram.java rename to spigot/src/main/java/lol/pyr/znpcsplus/hologram/Hologram.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java b/spigot/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java rename to spigot/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java b/spigot/src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java similarity index 78% rename from plugin/src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java rename to spigot/src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java index b17e2dd..8689f3c 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java +++ b/spigot/src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java @@ -4,7 +4,6 @@ import com.github.retrooper.packetevents.event.PacketListener; import com.github.retrooper.packetevents.event.PacketReceiveEvent; import com.github.retrooper.packetevents.protocol.packettype.PacketType; import com.github.retrooper.packetevents.wrapper.play.client.WrapperPlayClientInteractEntity; -import lol.pyr.znpcsplus.ZNPCsPlus; import lol.pyr.znpcsplus.npc.NPC; import lol.pyr.znpcsplus.npc.NPCRegistry; import lol.pyr.znpcsplus.user.User; @@ -23,11 +22,9 @@ public class InteractionPacketListener implements PacketListener { NPC npc = NPCRegistry.get().getByEntityId(packet.getEntityId()); if (npc == null) return; - ZNPCsPlus.SCHEDULER.runNextTick(() -> { - for (NPCAction action : npc.getActions()) { - if (action.getCooldown() > 0 && !user.actionCooldownCheck(action)) continue; - action.run(player); - } - }); + for (NPCAction action : npc.getActions()) { + if (action.getCooldown() > 0 && !user.actionCooldownCheck(action)) continue; + action.run(player); + } } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java b/spigot/src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java rename to spigot/src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java b/spigot/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java rename to spigot/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java b/spigot/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java rename to spigot/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java b/spigot/src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java rename to spigot/src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java b/spigot/src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java rename to spigot/src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java b/spigot/src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java rename to spigot/src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java b/spigot/src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java rename to spigot/src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java b/spigot/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java rename to spigot/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_13Factory.java b/spigot/src/main/java/lol/pyr/znpcsplus/metadata/V1_13Factory.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_13Factory.java rename to spigot/src/main/java/lol/pyr/znpcsplus/metadata/V1_13Factory.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14Factory.java b/spigot/src/main/java/lol/pyr/znpcsplus/metadata/V1_14Factory.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14Factory.java rename to spigot/src/main/java/lol/pyr/znpcsplus/metadata/V1_14Factory.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_16Factory.java b/spigot/src/main/java/lol/pyr/znpcsplus/metadata/V1_16Factory.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_16Factory.java rename to spigot/src/main/java/lol/pyr/znpcsplus/metadata/V1_16Factory.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17Factory.java b/spigot/src/main/java/lol/pyr/znpcsplus/metadata/V1_17Factory.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17Factory.java rename to spigot/src/main/java/lol/pyr/znpcsplus/metadata/V1_17Factory.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_8Factory.java b/spigot/src/main/java/lol/pyr/znpcsplus/metadata/V1_8Factory.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_8Factory.java rename to spigot/src/main/java/lol/pyr/znpcsplus/metadata/V1_8Factory.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_9Factory.java b/spigot/src/main/java/lol/pyr/znpcsplus/metadata/V1_9Factory.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_9Factory.java rename to spigot/src/main/java/lol/pyr/znpcsplus/metadata/V1_9Factory.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NPC.java b/spigot/src/main/java/lol/pyr/znpcsplus/npc/NPC.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/npc/NPC.java rename to spigot/src/main/java/lol/pyr/znpcsplus/npc/NPC.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java b/spigot/src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java rename to spigot/src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java b/spigot/src/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java rename to spigot/src/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_14Factory.java b/spigot/src/main/java/lol/pyr/znpcsplus/packets/V1_14Factory.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_14Factory.java rename to spigot/src/main/java/lol/pyr/znpcsplus/packets/V1_14Factory.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_19Factory.java b/spigot/src/main/java/lol/pyr/znpcsplus/packets/V1_19Factory.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_19Factory.java rename to spigot/src/main/java/lol/pyr/znpcsplus/packets/V1_19Factory.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java b/spigot/src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java similarity index 98% rename from plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java rename to spigot/src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java index 73925dc..9f3293a 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java +++ b/spigot/src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java @@ -35,7 +35,7 @@ public class V1_8Factory implements PacketFactory { sendPacket(player, new WrapperPlayServerSpawnPlayer(entity.getEntityId(), entity.getUuid(), location.toVector3d(), location.getYaw(), location.getPitch(), List.of())); sendAllMetadata(player, entity, properties); - ZNPCsPlus.SCHEDULER.runTaskLaterSync(() -> removeTabPlayer(player, entity), 60); + ZNPCsPlus.SCHEDULER.runLaterAsync(() -> removeTabPlayer(player, entity), 60); }); } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java b/spigot/src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java rename to spigot/src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java diff --git a/spigot/src/main/java/lol/pyr/znpcsplus/scheduling/SpigotScheduler.java b/spigot/src/main/java/lol/pyr/znpcsplus/scheduling/SpigotScheduler.java new file mode 100644 index 0000000..77d01e2 --- /dev/null +++ b/spigot/src/main/java/lol/pyr/znpcsplus/scheduling/SpigotScheduler.java @@ -0,0 +1,20 @@ +package lol.pyr.znpcsplus.scheduling; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +public class SpigotScheduler extends TaskScheduler { + public SpigotScheduler(Plugin plugin) { + super(plugin); + } + + @Override + public void runAsync(Runnable runnable) { + Bukkit.getScheduler().runTaskAsynchronously(plugin, runnable); + } + + @Override + public void runLaterAsync(Runnable runnable, long ticks) { + Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, runnable, ticks); + } +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/skin/BaseSkinDescriptor.java b/spigot/src/main/java/lol/pyr/znpcsplus/skin/BaseSkinDescriptor.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/skin/BaseSkinDescriptor.java rename to spigot/src/main/java/lol/pyr/znpcsplus/skin/BaseSkinDescriptor.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/skin/Skin.java b/spigot/src/main/java/lol/pyr/znpcsplus/skin/Skin.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/skin/Skin.java rename to spigot/src/main/java/lol/pyr/znpcsplus/skin/Skin.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/CachedId.java b/spigot/src/main/java/lol/pyr/znpcsplus/skin/cache/CachedId.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/CachedId.java rename to spigot/src/main/java/lol/pyr/znpcsplus/skin/cache/CachedId.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCache.java b/spigot/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCache.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCache.java rename to spigot/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCache.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java b/spigot/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java rename to spigot/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/FetchingDescriptor.java b/spigot/src/main/java/lol/pyr/znpcsplus/skin/descriptor/FetchingDescriptor.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/FetchingDescriptor.java rename to spigot/src/main/java/lol/pyr/znpcsplus/skin/descriptor/FetchingDescriptor.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/MirrorDescriptor.java b/spigot/src/main/java/lol/pyr/znpcsplus/skin/descriptor/MirrorDescriptor.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/MirrorDescriptor.java rename to spigot/src/main/java/lol/pyr/znpcsplus/skin/descriptor/MirrorDescriptor.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/PrefetchedDescriptor.java b/spigot/src/main/java/lol/pyr/znpcsplus/skin/descriptor/PrefetchedDescriptor.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/PrefetchedDescriptor.java rename to spigot/src/main/java/lol/pyr/znpcsplus/skin/descriptor/PrefetchedDescriptor.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java b/spigot/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java rename to spigot/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java b/spigot/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java rename to spigot/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java b/spigot/src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java rename to spigot/src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/user/User.java b/spigot/src/main/java/lol/pyr/znpcsplus/user/User.java similarity index 86% rename from plugin/src/main/java/lol/pyr/znpcsplus/user/User.java rename to spigot/src/main/java/lol/pyr/znpcsplus/user/User.java index eff4b04..7fc90a6 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/user/User.java +++ b/spigot/src/main/java/lol/pyr/znpcsplus/user/User.java @@ -1,11 +1,12 @@ package lol.pyr.znpcsplus.user; -import io.github.znetworkw.znpcservers.user.EventService; import lol.pyr.znpcsplus.interaction.NPCAction; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import java.util.*; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; public class User { private final static Map USER_MAP = new HashMap<>(); @@ -29,7 +30,6 @@ public class User { private final UUID uuid; private long lastNPCInteraction; private final Map actionCooldownMap = new HashMap<>(); - private final List> eventServices = new ArrayList<>(); public User(UUID uuid) { this.uuid = uuid; @@ -47,10 +47,6 @@ public class User { return false; } - public List> getEventServices() { - return eventServices; - } - public UUID getUuid() { return uuid; } diff --git a/spigot/src/main/java/lol/pyr/znpcsplus/user/UserListener.java b/spigot/src/main/java/lol/pyr/znpcsplus/user/UserListener.java new file mode 100644 index 0000000..42b4d09 --- /dev/null +++ b/spigot/src/main/java/lol/pyr/znpcsplus/user/UserListener.java @@ -0,0 +1,24 @@ +package lol.pyr.znpcsplus.user; + +import lol.pyr.znpcsplus.ZNPCsPlus; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +public class UserListener implements Listener { + public UserListener(ZNPCsPlus plugin) { + Bukkit.getPluginManager().registerEvents(this, plugin); + } + + @EventHandler + public void onJoin(PlayerJoinEvent event) { + User.get(event.getPlayer()); + } + + @EventHandler + public void onQuit(PlayerQuitEvent event) { + User.remove(event.getPlayer().getUniqueId()); + } +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/util/LazyLoader.java b/spigot/src/main/java/lol/pyr/znpcsplus/util/LazyLoader.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/util/LazyLoader.java rename to spigot/src/main/java/lol/pyr/znpcsplus/util/LazyLoader.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/util/StringUtils.java b/spigot/src/main/java/lol/pyr/znpcsplus/util/StringUtils.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/util/StringUtils.java rename to spigot/src/main/java/lol/pyr/znpcsplus/util/StringUtils.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java b/spigot/src/main/java/lol/pyr/znpcsplus/util/Viewable.java similarity index 100% rename from plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java rename to spigot/src/main/java/lol/pyr/znpcsplus/util/Viewable.java diff --git a/plugin/src/main/resources/plugin.yml b/spigot/src/main/resources/plugin.yml similarity index 100% rename from plugin/src/main/resources/plugin.yml rename to spigot/src/main/resources/plugin.yml