From d7c79d7eac7355ed6e02defa02f7bd5e94ca92db Mon Sep 17 00:00:00 2001 From: aroooo Date: Thu, 20 Oct 2022 17:48:16 +0200 Subject: [PATCH] initial project commit --- .idea/.gitignore | 8 ++ .idea/compiler.xml | 23 +++ .idea/discord.xml | 7 + .idea/inspectionProfiles/Project_Default.xml | 10 ++ .idea/jarRepositories.xml | 35 +++++ .idea/misc.xml | 14 ++ .idea/uiDesigner.xml | 124 ++++++++++++++++ core/dependency-reduced-pom.xml | 118 ++++++++++++++++ core/pom.xml | 124 ++++++++++++++++ .../com/yoshiplex/rainbow/RainbowText.java | 104 ++++++++++++++ .../net/artelnatif/nicko/NickoBukkit.java | 94 +++++++++++++ .../artelnatif/nicko/anvil/AnvilManager.java | 87 ++++++++++++ .../artelnatif/nicko/bungee/NickoBungee.java | 33 +++++ .../bungee/event/ServerSwitchListener.java | 32 +++++ .../pluginchannel/PluginChannelHelper.java | 17 +++ .../nicko/command/NickoCommand.java | 56 ++++++++ .../nicko/command/NickoPermissions.java | 16 +++ .../nicko/command/NickoTabCompleter.java | 27 ++++ .../nicko/command/sub/NickoCheckSubCmd.java | 41 ++++++ .../nicko/command/sub/NickoDebugSubCmd.java | 54 +++++++ .../command/sub/NickoDisguiseSubCmd.java | 80 +++++++++++ .../nicko/command/sub/NickoGUISubCmd.java | 49 +++++++ .../nicko/command/sub/NickoSubCmd.java | 15 ++ .../nicko/config/NickoConfiguration.java | 41 ++++++ .../nicko/disguise/AppearanceManager.java | 71 ++++++++++ .../nicko/disguise/NickoProfile.java | 42 ++++++ .../nicko/event/PlayerJoinListener.java | 24 ++++ .../nicko/event/PlayerQuitListener.java | 15 ++ .../java/net/artelnatif/nicko/i18n/I18N.java | 13 ++ .../net/artelnatif/nicko/impl/Internals.java | 10 ++ .../nicko/impl/InternalsProvider.java | 29 ++++ .../artelnatif/nicko/mojang/MojangAPI.java | 89 ++++++++++++ .../artelnatif/nicko/mojang/MojangSkin.java | 13 ++ .../artelnatif/nicko/mojang/MojangUtils.java | 26 ++++ .../pluginchannel/UpdateMessageHandler.java | 22 +++ .../nicko/storage/PlayerDataStore.java | 69 +++++++++ .../net/artelnatif/nicko/storage/Storage.java | 26 ++++ .../nicko/storage/StorageProvider.java | 7 + .../nicko/storage/json/JSONStorage.java | 70 ++++++++++ .../storage/json/JSONStorageProvider.java | 22 +++ .../nicko/storage/sql/SQLStorage.java | 36 +++++ .../nicko/storage/sql/SQLStorageProvider.java | 39 ++++++ .../artelnatif/nicko/utils/PlayerUtils.java | 9 ++ .../artelnatif/nicko/utils/ServerUtils.java | 22 +++ core/src/main/resources/bungee.yml | 4 + core/src/main/resources/config.yml | 28 ++++ core/src/main/resources/plugin.yml | 7 + .../artelnatif/nicko/test/MojangAPITest.java | 87 ++++++++++++ core/target/classes/bungee.yml | 4 + .../com/yoshiplex/rainbow/RainbowText.class | Bin 0 -> 3592 bytes core/target/classes/config.yml | 26 ++++ .../net/artelnatif/nicko/NickoBukkit.class | Bin 0 -> 3514 bytes .../artelnatif/nicko/anvil/AnvilManager.class | Bin 0 -> 4776 bytes .../artelnatif/nicko/bungee/NickoBungee.class | Bin 0 -> 1349 bytes .../bungee/event/ServerSwitchListener.class | Bin 0 -> 1574 bytes .../pluginchannel/PluginChannelHelper.class | Bin 0 -> 1547 bytes .../nicko/command/NickoCommand.class | Bin 0 -> 3167 bytes .../NickoPermissions$Player$Command.class | Bin 0 -> 653 bytes .../command/NickoPermissions$Player.class | Bin 0 -> 539 bytes .../nicko/command/NickoPermissions.class | Bin 0 -> 1464 bytes .../nicko/command/NickoTabCompleter.class | Bin 0 -> 2324 bytes .../nicko/command/sub/NickoCheckSubCmd.class | Bin 0 -> 3200 bytes .../nicko/command/sub/NickoDebugSubCmd.class | Bin 0 -> 3285 bytes .../command/sub/NickoDisguiseSubCmd.class | Bin 0 -> 5638 bytes .../nicko/command/sub/NickoGUISubCmd.class | Bin 0 -> 3478 bytes .../nicko/command/sub/NickoSubCmd.class | Bin 0 -> 601 bytes .../nicko/config/NickoConfiguration.class | Bin 0 -> 1870 bytes .../nicko/disguise/AppearanceManager.class | Bin 0 -> 3311 bytes .../nicko/disguise/NickoProfile.class | Bin 0 -> 1681 bytes .../nicko/event/PlayerJoinListener.class | Bin 0 -> 2344 bytes .../nicko/event/PlayerQuitListener.class | Bin 0 -> 1070 bytes .../nicko/i18n/I18N$Message$Command.class | Bin 0 -> 1079 bytes .../artelnatif/nicko/i18n/I18N$Message.class | Bin 0 -> 1287 bytes .../net/artelnatif/nicko/i18n/I18N.class | Bin 0 -> 470 bytes .../net/artelnatif/nicko/impl/Internals.class | Bin 0 -> 302 bytes .../nicko/impl/InternalsProvider.class | Bin 0 -> 2837 bytes .../artelnatif/nicko/mojang/MojangAPI$1.class | Bin 0 -> 1339 bytes .../artelnatif/nicko/mojang/MojangAPI.class | Bin 0 -> 5377 bytes .../artelnatif/nicko/mojang/MojangSkin.class | Bin 0 -> 2416 bytes .../artelnatif/nicko/mojang/MojangUtils.class | Bin 0 -> 1361 bytes .../nicko/storage/PlayerDataStore.class | Bin 0 -> 4412 bytes .../artelnatif/nicko/storage/Storage.class | Bin 0 -> 877 bytes .../nicko/storage/StorageProvider.class | Bin 0 -> 177 bytes .../nicko/storage/json/JSONStorage.class | Bin 0 -> 4600 bytes .../storage/json/JSONStorageProvider.class | Bin 0 -> 737 bytes .../nicko/storage/sql/SQLStorage.class | Bin 0 -> 1301 bytes .../storage/sql/SQLStorageProvider.class | Bin 0 -> 1973 bytes .../artelnatif/nicko/utils/PlayerUtils.class | Bin 0 -> 560 bytes core/target/classes/plugin.yml | 7 + core/target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 38 +++++ .../compile/default-compile/inputFiles.lst | 33 +++++ .../default-testCompile/createdFiles.lst | 1 + .../default-testCompile/inputFiles.lst | 1 + core/target/nicko-core-1.0-SNAPSHOT.jar | Bin 0 -> 170849 bytes .../original-nicko-core-1.0-SNAPSHOT.jar | Bin 0 -> 50380 bytes .../artelnatif/nicko/test/MojangAPITest.class | Bin 0 -> 4749 bytes dist/dependency-reduced-pom.xml | 36 +++++ dist/pom.xml | 57 ++++++++ pom.xml | 24 ++++ target/maven-archiver/pom.properties | 5 + target/original-nicko-1.0-SNAPSHOT.jar | Bin 0 -> 1710 bytes v1_18_R1/pom.xml | 29 ++++ .../java/net/artelnatif/impl/v1_18_R1.java | 132 ++++++++++++++++++ .../net/artelnatif/impl/v1_18_R1.class | Bin 0 -> 11055 bytes v1_18_R1/target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 1 + .../compile/default-compile/inputFiles.lst | 1 + .../default-testCompile/inputFiles.lst | 0 .../target/nicko-v1_18_R1-1.0-SNAPSHOT.jar | Bin 0 -> 6111 bytes v1_18_R2/pom.xml | 29 ++++ .../net/artelnatif/nicko/impl/v1_18_R2.java | 131 +++++++++++++++++ .../net/artelnatif/nicko/impl/v1_18_R2.class | Bin 0 -> 11132 bytes v1_18_R2/target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 1 + .../compile/default-compile/inputFiles.lst | 1 + .../target/nicko-v1_18_R2-1.0-SNAPSHOT.jar | Bin 0 -> 6302 bytes 117 files changed, 2561 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/discord.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 core/dependency-reduced-pom.xml create mode 100644 core/pom.xml create mode 100644 core/src/main/java/com/yoshiplex/rainbow/RainbowText.java create mode 100644 core/src/main/java/net/artelnatif/nicko/NickoBukkit.java create mode 100644 core/src/main/java/net/artelnatif/nicko/anvil/AnvilManager.java create mode 100644 core/src/main/java/net/artelnatif/nicko/bungee/NickoBungee.java create mode 100644 core/src/main/java/net/artelnatif/nicko/bungee/event/ServerSwitchListener.java create mode 100644 core/src/main/java/net/artelnatif/nicko/bungee/pluginchannel/PluginChannelHelper.java create mode 100644 core/src/main/java/net/artelnatif/nicko/command/NickoCommand.java create mode 100644 core/src/main/java/net/artelnatif/nicko/command/NickoPermissions.java create mode 100644 core/src/main/java/net/artelnatif/nicko/command/NickoTabCompleter.java create mode 100644 core/src/main/java/net/artelnatif/nicko/command/sub/NickoCheckSubCmd.java create mode 100644 core/src/main/java/net/artelnatif/nicko/command/sub/NickoDebugSubCmd.java create mode 100644 core/src/main/java/net/artelnatif/nicko/command/sub/NickoDisguiseSubCmd.java create mode 100644 core/src/main/java/net/artelnatif/nicko/command/sub/NickoGUISubCmd.java create mode 100644 core/src/main/java/net/artelnatif/nicko/command/sub/NickoSubCmd.java create mode 100644 core/src/main/java/net/artelnatif/nicko/config/NickoConfiguration.java create mode 100644 core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java create mode 100644 core/src/main/java/net/artelnatif/nicko/disguise/NickoProfile.java create mode 100644 core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java create mode 100644 core/src/main/java/net/artelnatif/nicko/event/PlayerQuitListener.java create mode 100644 core/src/main/java/net/artelnatif/nicko/i18n/I18N.java create mode 100644 core/src/main/java/net/artelnatif/nicko/impl/Internals.java create mode 100644 core/src/main/java/net/artelnatif/nicko/impl/InternalsProvider.java create mode 100644 core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java create mode 100644 core/src/main/java/net/artelnatif/nicko/mojang/MojangSkin.java create mode 100644 core/src/main/java/net/artelnatif/nicko/mojang/MojangUtils.java create mode 100644 core/src/main/java/net/artelnatif/nicko/pluginchannel/UpdateMessageHandler.java create mode 100644 core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java create mode 100644 core/src/main/java/net/artelnatif/nicko/storage/Storage.java create mode 100644 core/src/main/java/net/artelnatif/nicko/storage/StorageProvider.java create mode 100644 core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorage.java create mode 100644 core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorageProvider.java create mode 100644 core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorage.java create mode 100644 core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorageProvider.java create mode 100644 core/src/main/java/net/artelnatif/nicko/utils/PlayerUtils.java create mode 100644 core/src/main/java/net/artelnatif/nicko/utils/ServerUtils.java create mode 100644 core/src/main/resources/bungee.yml create mode 100644 core/src/main/resources/config.yml create mode 100644 core/src/main/resources/plugin.yml create mode 100644 core/src/test/java/net/artelnatif/nicko/test/MojangAPITest.java create mode 100644 core/target/classes/bungee.yml create mode 100644 core/target/classes/com/yoshiplex/rainbow/RainbowText.class create mode 100644 core/target/classes/config.yml create mode 100644 core/target/classes/net/artelnatif/nicko/NickoBukkit.class create mode 100644 core/target/classes/net/artelnatif/nicko/anvil/AnvilManager.class create mode 100644 core/target/classes/net/artelnatif/nicko/bungee/NickoBungee.class create mode 100644 core/target/classes/net/artelnatif/nicko/bungee/event/ServerSwitchListener.class create mode 100644 core/target/classes/net/artelnatif/nicko/bungee/pluginchannel/PluginChannelHelper.class create mode 100644 core/target/classes/net/artelnatif/nicko/command/NickoCommand.class create mode 100644 core/target/classes/net/artelnatif/nicko/command/NickoPermissions$Player$Command.class create mode 100644 core/target/classes/net/artelnatif/nicko/command/NickoPermissions$Player.class create mode 100644 core/target/classes/net/artelnatif/nicko/command/NickoPermissions.class create mode 100644 core/target/classes/net/artelnatif/nicko/command/NickoTabCompleter.class create mode 100644 core/target/classes/net/artelnatif/nicko/command/sub/NickoCheckSubCmd.class create mode 100644 core/target/classes/net/artelnatif/nicko/command/sub/NickoDebugSubCmd.class create mode 100644 core/target/classes/net/artelnatif/nicko/command/sub/NickoDisguiseSubCmd.class create mode 100644 core/target/classes/net/artelnatif/nicko/command/sub/NickoGUISubCmd.class create mode 100644 core/target/classes/net/artelnatif/nicko/command/sub/NickoSubCmd.class create mode 100644 core/target/classes/net/artelnatif/nicko/config/NickoConfiguration.class create mode 100644 core/target/classes/net/artelnatif/nicko/disguise/AppearanceManager.class create mode 100644 core/target/classes/net/artelnatif/nicko/disguise/NickoProfile.class create mode 100644 core/target/classes/net/artelnatif/nicko/event/PlayerJoinListener.class create mode 100644 core/target/classes/net/artelnatif/nicko/event/PlayerQuitListener.class create mode 100644 core/target/classes/net/artelnatif/nicko/i18n/I18N$Message$Command.class create mode 100644 core/target/classes/net/artelnatif/nicko/i18n/I18N$Message.class create mode 100644 core/target/classes/net/artelnatif/nicko/i18n/I18N.class create mode 100644 core/target/classes/net/artelnatif/nicko/impl/Internals.class create mode 100644 core/target/classes/net/artelnatif/nicko/impl/InternalsProvider.class create mode 100644 core/target/classes/net/artelnatif/nicko/mojang/MojangAPI$1.class create mode 100644 core/target/classes/net/artelnatif/nicko/mojang/MojangAPI.class create mode 100644 core/target/classes/net/artelnatif/nicko/mojang/MojangSkin.class create mode 100644 core/target/classes/net/artelnatif/nicko/mojang/MojangUtils.class create mode 100644 core/target/classes/net/artelnatif/nicko/storage/PlayerDataStore.class create mode 100644 core/target/classes/net/artelnatif/nicko/storage/Storage.class create mode 100644 core/target/classes/net/artelnatif/nicko/storage/StorageProvider.class create mode 100644 core/target/classes/net/artelnatif/nicko/storage/json/JSONStorage.class create mode 100644 core/target/classes/net/artelnatif/nicko/storage/json/JSONStorageProvider.class create mode 100644 core/target/classes/net/artelnatif/nicko/storage/sql/SQLStorage.class create mode 100644 core/target/classes/net/artelnatif/nicko/storage/sql/SQLStorageProvider.class create mode 100644 core/target/classes/net/artelnatif/nicko/utils/PlayerUtils.class create mode 100644 core/target/classes/plugin.yml create mode 100644 core/target/maven-archiver/pom.properties create mode 100644 core/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 core/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 core/target/nicko-core-1.0-SNAPSHOT.jar create mode 100644 core/target/original-nicko-core-1.0-SNAPSHOT.jar create mode 100644 core/target/test-classes/net/artelnatif/nicko/test/MojangAPITest.class create mode 100644 dist/dependency-reduced-pom.xml create mode 100644 dist/pom.xml create mode 100644 pom.xml create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/original-nicko-1.0-SNAPSHOT.jar create mode 100644 v1_18_R1/pom.xml create mode 100644 v1_18_R1/src/main/java/net/artelnatif/impl/v1_18_R1.java create mode 100644 v1_18_R1/target/classes/net/artelnatif/impl/v1_18_R1.class create mode 100644 v1_18_R1/target/maven-archiver/pom.properties create mode 100644 v1_18_R1/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 v1_18_R1/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 v1_18_R1/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 v1_18_R1/target/nicko-v1_18_R1-1.0-SNAPSHOT.jar create mode 100644 v1_18_R2/pom.xml create mode 100644 v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java create mode 100644 v1_18_R2/target/classes/net/artelnatif/nicko/impl/v1_18_R2.class create mode 100644 v1_18_R2/target/maven-archiver/pom.properties create mode 100644 v1_18_R2/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 v1_18_R2/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 v1_18_R2/target/nicko-v1_18_R2-1.0-SNAPSHOT.jar diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..1541cee --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..8cf359d --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..670784a --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..ba31031 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..06e8b35 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/dependency-reduced-pom.xml b/core/dependency-reduced-pom.xml new file mode 100644 index 0000000..551faa3 --- /dev/null +++ b/core/dependency-reduced-pom.xml @@ -0,0 +1,118 @@ + + + + nicko-parent + net.artelnatif + 1.0-SNAPSHOT + + 4.0.0 + nicko-core + 1.0-SNAPSHOT + + + + true + ${basedir}/src/main/resources/ + + + + + maven-surefire-plugin + 2.12.4 + + true + + + + maven-shade-plugin + 3.3.1-SNAPSHOT + + + package + + shade + + + + + net.artelnatif:nicko-* + xyz.upperlevel.spigot.book:spigot-book-api + net.wesjd:anvilgui + + + + + xyz.upperlevel.spigot.book + net.artelnatif.bookapi + + + net.wesjd.anvilgui + net.artelnatif.anvilgui + + + false + + + + + + + + + bungeecord-repo + https://oss.sonatype.org/content/repositories/snapshots + + + spigot-repo + https://hub.spigotmc.org/nexus/content/groups/public/ + + + codemc-snapshots + https://repo.codemc.io/repository/maven-snapshots/ + + + + + org.spigotmc + spigot-api + 1.18.2-R0.1-SNAPSHOT + provided + + + net.md-5 + bungeecord-api + 1.18-R0.1-SNAPSHOT + compile + + + com.google.guava + guava + 31.1-jre + provided + + + org.junit.jupiter + junit-jupiter-api + 5.8.2 + test + + + opentest4j + org.opentest4j + + + junit-platform-commons + org.junit.platform + + + apiguardian-api + org.apiguardian + + + + + + 17 + 17 + + diff --git a/core/pom.xml b/core/pom.xml new file mode 100644 index 0000000..2bae2bb --- /dev/null +++ b/core/pom.xml @@ -0,0 +1,124 @@ + + + 4.0.0 + + nicko-core + 1.0-SNAPSHOT + + + net.artelnatif + nicko-parent + 1.0-SNAPSHOT + + + + 17 + 17 + + + + + bungeecord-repo + https://oss.sonatype.org/content/repositories/snapshots + + + spigot-repo + https://hub.spigotmc.org/nexus/content/groups/public/ + + + codemc-snapshots + https://repo.codemc.io/repository/maven-snapshots/ + + + + + + org.spigotmc + spigot-api + 1.18.2-R0.1-SNAPSHOT + provided + + + net.md-5 + bungeecord-api + 1.18-R0.1-SNAPSHOT + + + xyz.upperlevel.spigot.book + spigot-book-api + 1.6 + + + net.wesjd + anvilgui + 1.5.3-SNAPSHOT + + + com.google.guava + guava + 31.1-jre + provided + + + org.junit.jupiter + junit-jupiter-api + 5.8.2 + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + true + + + + org.apache.maven.plugins + maven-shade-plugin + 3.3.1-SNAPSHOT + + + package + + shade + + + + + net.artelnatif:nicko-* + xyz.upperlevel.spigot.book:spigot-book-api + net.wesjd:anvilgui + + + + + xyz.upperlevel.spigot.book + net.artelnatif.bookapi + + + net.wesjd.anvilgui + net.artelnatif.anvilgui + + + + false + + + + + + + + true + ${basedir}/src/main/resources/ + + + + \ No newline at end of file diff --git a/core/src/main/java/com/yoshiplex/rainbow/RainbowText.java b/core/src/main/java/com/yoshiplex/rainbow/RainbowText.java new file mode 100644 index 0000000..19e926b --- /dev/null +++ b/core/src/main/java/com/yoshiplex/rainbow/RainbowText.java @@ -0,0 +1,104 @@ +package com.yoshiplex.rainbow; + +import java.util.Arrays; +import java.util.List; + +public class RainbowText { + private static final List RAINBOW = Arrays.asList("§4", "§c", "§6", "§a", "§2", "§b", "§3", "§9", "§1", "§5", "§d"); + private int place; + private List rainbowArray = null; + // STOPSHIP: 7/28/22 i18n + private String text = "You did not provide any text."; + private String fancyText = "§4You did not provide any text"; + private String prefix = ""; + + public RainbowText(String text) { + this(text, (String) null); + } + + public RainbowText(String text, String formatCode) { + place = 0; + if (text != null) { + this.text = text; + } + if (formatCode != null) { + prefix = formatCode; + } + rainbowArray = RAINBOW; + updateFancy(); + } + + private void updateFancy() { + int spot = place; + String fancyText = ""; + for (char l : text.toCharArray()) { + String letter = Character.toString(l); + String t1 = fancyText; + if (!letter.equalsIgnoreCase(" ")) { + fancyText = t1 + rainbowArray.get(spot) + prefix + letter; + if (spot == rainbowArray.size() - 1) { + spot = 0; + } else { + spot++; + } + } else { + fancyText = t1 + letter; + } + } + this.fancyText = fancyText; + } + + public void moveRainbow() { + if (rainbowArray.size() - 1 == place) { + place = 0; + } else { + place++; + } + updateFancy(); + } + + public void moveRainbowRight() { + if (place == 0) { + place = rainbowArray.size() - 1; + } else { + place--; + } + updateFancy(); + } + + public String getOrigonalText() { + return this.text; + } + + public String getText() { + return this.fancyText; + } + + public void setPlace(int place) { + if (place > RAINBOW.size() - 1 || place < 0) { + return; + } + this.place = place; + updateFancy(); + } + + public int getPlace() { + return this.place; + } + + public List getRainbow() { + return rainbowArray; + } + + public String getFormatPrefix() { + return this.prefix; + } + + public void setFormatPrefix(String prefix) { + this.prefix = prefix; + } + + public static List getDefaultRainbow() { + return RAINBOW; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/NickoBukkit.java b/core/src/main/java/net/artelnatif/nicko/NickoBukkit.java new file mode 100644 index 0000000..4e42077 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/NickoBukkit.java @@ -0,0 +1,94 @@ +package net.artelnatif.nicko; + +import net.artelnatif.nicko.bungee.NickoBungee; +import net.artelnatif.nicko.command.NickoCommand; +import net.artelnatif.nicko.command.NickoTabCompleter; +import net.artelnatif.nicko.config.NickoConfiguration; +import net.artelnatif.nicko.event.PlayerJoinListener; +import net.artelnatif.nicko.event.PlayerQuitListener; +import net.artelnatif.nicko.impl.Internals; +import net.artelnatif.nicko.impl.InternalsProvider; +import net.artelnatif.nicko.mojang.MojangAPI; +import net.artelnatif.nicko.pluginchannel.UpdateMessageHandler; +import net.artelnatif.nicko.storage.PlayerDataStore; +import net.artelnatif.nicko.utils.ServerUtils; +import org.bukkit.command.PluginCommand; +import org.bukkit.plugin.java.JavaPlugin; + +public class NickoBukkit extends JavaPlugin { + private static NickoBukkit plugin; + + private NickoConfiguration nickoConfiguration; + private MojangAPI mojangAPI; + private PlayerDataStore dataStore; + + @Override + public void onEnable() { + plugin = this; + + final PluginCommand command = getCommand("nicko"); + if (command != null) { + command.setExecutor(new NickoCommand()); + command.setTabCompleter(new NickoTabCompleter()); + } + + getServer().getPluginManager().registerEvents(new PlayerJoinListener(), this); + getServer().getPluginManager().registerEvents(new PlayerQuitListener(), this); + + mojangAPI = new MojangAPI(); + nickoConfiguration = new NickoConfiguration(this); + + getLogger().info("Loading configuration..."); + saveDefaultConfig(); + + getLogger().info("Loading persistence..."); + dataStore = new PlayerDataStore(this); + if (!dataStore.getStorage().getProvider().init()) { + dataStore.getStorage().setError(true); + getLogger().warning("Failed to open persistence, data will NOT be saved!"); + } + + if (nickoConfiguration.isBungeecordEnabled()) { + getLogger().info("Enabling Bungeecord support..."); + if (ServerUtils.checkBungeeCordHook()) { + getServer().getMessenger().registerIncomingPluginChannel(this, NickoBungee.NICKO_PLUGIN_CHANNEL_UPDATE, new UpdateMessageHandler()); + } + } + + getLogger().info("Nicko (Bukkit) has been enabled."); + } + + @Override + public void onDisable() { + getLogger().info("Closing persistence..."); + if (!dataStore.getStorage().getProvider().close()) { + getLogger().warning("Failed to close persistence!"); + } + if (dataStore.getStorage().isError()) { + dataStore.getStorage().setError(false); + } + + if (nickoConfiguration.isBungeecordEnabled()) { + getServer().getMessenger().unregisterIncomingPluginChannel(this); + getServer().getMessenger().unregisterOutgoingPluginChannel(this); + } + + getLogger().info("Nicko (Bukkit) has been disabled."); + } + + public static NickoBukkit getInstance() { + return plugin; + } + + public MojangAPI getMojangAPI() { + return mojangAPI; + } + + public NickoConfiguration getNickoConfig() { return nickoConfiguration; } + + public PlayerDataStore getDataStore() { return dataStore; } + + public Internals getInternals() { + return InternalsProvider.getInternals(); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/anvil/AnvilManager.java b/core/src/main/java/net/artelnatif/nicko/anvil/AnvilManager.java new file mode 100644 index 0000000..56a687a --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/anvil/AnvilManager.java @@ -0,0 +1,87 @@ +package net.artelnatif.nicko.anvil; + +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.disguise.AppearanceManager; +import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.mojang.MojangUtils; +import net.wesjd.anvilgui.AnvilGUI; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class AnvilManager { + private final Player player; + private final NickoProfile profile; + private final AppearanceManager appearanceManager; + + public AnvilManager(Player player) { + this.player = player; + this.appearanceManager = AppearanceManager.get(player); + this.profile = appearanceManager.getProfile(); + } + + public void openNameAndSkinAnvil() { + final AnvilGUI.Builder skin = getSkinAnvil(); + final AnvilGUI.Builder name = new AnvilGUI.Builder() + .plugin(NickoBukkit.getInstance()) + .itemLeft(getLeftItem()) + .onComplete((anvilPlayer, response) -> { + if (MojangUtils.isUsernameInvalid(response)) { + return AnvilGUI.Response.text("Invalid username!"); + } else { + profile.setName(response); + skin.open(player); + return AnvilGUI.Response.close(); + } + }) + .text("New name..."); + + name.open(player); + } + + public void openNameAnvil() { + new AnvilGUI.Builder() + .plugin(NickoBukkit.getInstance()) + .itemLeft(getLeftItem()) + .onComplete((anvilPlayer, response) -> { + if (MojangUtils.isUsernameInvalid(response)) { + return AnvilGUI.Response.text("Invalid username!"); + } else { + appearanceManager.setName(response); + appearanceManager.updatePlayer(false); + return AnvilGUI.Response.close(); + } + }) + .text("New name...") + .open(player); + } + + public void openSkinAnvil() { + getSkinAnvil().open(player); + } + + private AnvilGUI.Builder getSkinAnvil() { + return new AnvilGUI.Builder() + .plugin(NickoBukkit.getInstance()) + .itemLeft(getLeftItem()) + .onComplete((anvilPlayer, response) -> { + if (MojangUtils.isUsernameInvalid(response)) { + return AnvilGUI.Response.text("Invalid username!"); + } else { + appearanceManager.setSkin(response); + appearanceManager.updatePlayer(true); + return AnvilGUI.Response.close(); + } + }) + .text("New skin..."); + } + + private ItemStack getLeftItem() { + final ItemStack item = new ItemStack(Material.PAPER); + final ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("§0ID"); + item.setItemMeta(meta); + return item; + } +} \ No newline at end of file diff --git a/core/src/main/java/net/artelnatif/nicko/bungee/NickoBungee.java b/core/src/main/java/net/artelnatif/nicko/bungee/NickoBungee.java new file mode 100644 index 0000000..8222e15 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/bungee/NickoBungee.java @@ -0,0 +1,33 @@ +package net.artelnatif.nicko.bungee; + +import net.md_5.bungee.api.plugin.Plugin; + +public class NickoBungee extends Plugin { + public static final String NICKO_PLUGIN_CHANNEL_BASE = "nicko:"; + public static final String NICKO_PLUGIN_CHANNEL_FETCH = NICKO_PLUGIN_CHANNEL_BASE + "fetch"; + public static final String NICKO_PLUGIN_CHANNEL_UPDATE = NICKO_PLUGIN_CHANNEL_BASE + "update"; + + private static NickoBungee plugin; + + @Override + public void onEnable() { + getLogger().info("Registering channels..."); + getProxy().registerChannel(NICKO_PLUGIN_CHANNEL_FETCH); + getProxy().registerChannel(NICKO_PLUGIN_CHANNEL_UPDATE); + + getLogger().info("Nicko (Bungee) has been enabled."); + } + + @Override + public void onDisable() { + getLogger().info("Unregistering channels..."); + getProxy().unregisterChannel(NICKO_PLUGIN_CHANNEL_FETCH); + getProxy().unregisterChannel(NICKO_PLUGIN_CHANNEL_UPDATE); + + getLogger().info("Nicko (Bungee) has been disabled."); + } + + public static NickoBungee getInstance() { + return plugin; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/bungee/event/ServerSwitchListener.java b/core/src/main/java/net/artelnatif/nicko/bungee/event/ServerSwitchListener.java new file mode 100644 index 0000000..5877a1c --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/bungee/event/ServerSwitchListener.java @@ -0,0 +1,32 @@ +package net.artelnatif.nicko.bungee.event; + +import net.artelnatif.nicko.bungee.NickoBungee; +import net.artelnatif.nicko.bungee.pluginchannel.PluginChannelHelper; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.connection.Server; +import net.md_5.bungee.api.event.ServerSwitchEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; + +public class ServerSwitchListener implements Listener { + + /* + * Nicko Message Format + * FETCH: nicko:skin/fetch + * - UUID + * + * UPDATE: nicko:skin/update + * - UUID + * - Skin + * - Name + */ + + @EventHandler + public void onSwitch(ServerSwitchEvent event) { + final ServerInfo from = event.getFrom(); + final ProxiedPlayer player = event.getPlayer(); + final Server to = player.getServer(); + PluginChannelHelper.sendMessage(from, NickoBungee.NICKO_PLUGIN_CHANNEL_FETCH, player.getUniqueId().toString()); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/bungee/pluginchannel/PluginChannelHelper.java b/core/src/main/java/net/artelnatif/nicko/bungee/pluginchannel/PluginChannelHelper.java new file mode 100644 index 0000000..a428a5d --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/bungee/pluginchannel/PluginChannelHelper.java @@ -0,0 +1,17 @@ +package net.artelnatif.nicko.bungee.pluginchannel; + +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import net.md_5.bungee.api.config.ServerInfo; + +public class PluginChannelHelper { + public static boolean sendMessage(final ServerInfo info, final String channel, final String... data) { + final ByteArrayDataOutput output = ByteStreams.newDataOutput(); + output.writeUTF(channel); + for (String elt : data) { + output.writeUTF(elt); + } + System.out.printf("(%s) PluginMessage <-> %s", info.getSocketAddress().toString(), output); + return info.sendData(channel, output.toByteArray(), false); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/command/NickoCommand.java b/core/src/main/java/net/artelnatif/nicko/command/NickoCommand.java new file mode 100644 index 0000000..4f24e42 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/command/NickoCommand.java @@ -0,0 +1,56 @@ +package net.artelnatif.nicko.command; + +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.command.sub.NickoCheckSubCmd; +import net.artelnatif.nicko.command.sub.NickoDebugSubCmd; +import net.artelnatif.nicko.command.sub.NickoDisguiseSubCmd; +import net.artelnatif.nicko.command.sub.NickoGUISubCmd; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; + +public class NickoCommand implements CommandExecutor { + private final String opPrefix = "§c(OP)"; + private String helpMessage = """ + §cNicko §8§o[{version}] §f- §2Help: + §6/nicko disguise §f- §7Change your appearance. + §6/nicko revert §f- §7Revert your appearance to your default skin and name. + §6/nicko help §f- §7Prints this help message. + """; + private String adminHelpMessage = """ + {admin} §6/nicko disguise §b §f- §7Change designed player's appearance. + {admin} §6/nicko revert §b §f- §7Revert designed player's appearance to their default skin and name. + {admin} §6/nicko check §b §f- §7Prints detailed information about designed player's appearance. + """.replace("{admin}", opPrefix); + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (args.length >= 1) { + switch (args[0]) { + case "disguise" -> new NickoDisguiseSubCmd(this).execute(sender); + case "debug" -> new NickoDebugSubCmd(this).execute(sender, args); + case "check" -> new NickoCheckSubCmd(this).execute(sender, args); + case "gui" -> new NickoGUISubCmd(this).execute(sender, args); + default -> sendHelpMessages(sender); + } + } else { + sendHelpMessages(sender); + } + + return false; + } + + public void sendHelpMessages(CommandSender sender) { + helpMessage = helpMessage.replace("{version}", NickoBukkit.getInstance().getDescription().getVersion()); + if (sender instanceof ConsoleCommandSender) { + helpMessage = ChatColor.stripColor(helpMessage); + adminHelpMessage = ChatColor.stripColor(adminHelpMessage); + } + sender.sendMessage(helpMessage); + if (sender.isOp()) { + sender.sendMessage(adminHelpMessage); + } + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/command/NickoPermissions.java b/core/src/main/java/net/artelnatif/nicko/command/NickoPermissions.java new file mode 100644 index 0000000..a1dac76 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/command/NickoPermissions.java @@ -0,0 +1,16 @@ +package net.artelnatif.nicko.command; + +import net.artelnatif.nicko.NickoBukkit; + +public class NickoPermissions { + + public static final String NICKO_PERMISSION_BASE = "nicko."; + // TODO: 20/06/2022 i18n + public static final String NICKO_PERMISSION_MISSING = NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cMissing permission."; + + public static final class Player { + public static final class Command { + public static final String NICKO_PERMISSION_PLAYER_COMMAND_USE = NICKO_PERMISSION_BASE + "use"; + } + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/command/NickoTabCompleter.java b/core/src/main/java/net/artelnatif/nicko/command/NickoTabCompleter.java new file mode 100644 index 0000000..90f820e --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/command/NickoTabCompleter.java @@ -0,0 +1,27 @@ +package net.artelnatif.nicko.command; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; + +import java.util.Collections; +import java.util.List; + +public class NickoTabCompleter implements TabCompleter { + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + if (sender instanceof Player) { + if (args.length == 1) { + return List.of("disguise", "revert", "help", "check"); + } else if (args.length == 2 && !args[0].equalsIgnoreCase("help")) { + return Bukkit.getOnlinePlayers().stream().map(HumanEntity::getName).toList(); + } else { + return Collections.emptyList(); + } + } + return null; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/command/sub/NickoCheckSubCmd.java b/core/src/main/java/net/artelnatif/nicko/command/sub/NickoCheckSubCmd.java new file mode 100644 index 0000000..da93eb6 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/command/sub/NickoCheckSubCmd.java @@ -0,0 +1,41 @@ +package net.artelnatif.nicko.command.sub; + +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.command.NickoCommand; +import net.artelnatif.nicko.disguise.AppearanceManager; +import net.artelnatif.nicko.utils.PlayerUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.StringJoiner; + +public class NickoCheckSubCmd extends NickoSubCmd { + public NickoCheckSubCmd(NickoCommand nickoCommand) { + super(nickoCommand); + } + + public void execute(CommandSender sender, String[] args) { + final String targetName = args[1]; + final Player target = Bukkit.getPlayerExact(targetName); + + AppearanceManager appearanceManager; + if (PlayerUtils.isPlayerOffline(target)) { + appearanceManager = AppearanceManager.get(targetName); + } else { + appearanceManager = AppearanceManager.get(target); + } + + final StringJoiner builder = new StringJoiner("\n"); + builder.add("§c" + NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§f- §6Check for:§f§o" + targetName); + if (!appearanceManager.hasData()) { + builder.add("§cThis player has not data."); + } else { + builder.add("§7- §fNicked: " + (appearanceManager.isNicked() ? "§a✔" : "§c❌")); + builder.add("§7- §fNickname: §6" + (appearanceManager.getName().equals(targetName) ? "N/A" : appearanceManager.getName())); + builder.add("§7- §fSkin: §6" + (appearanceManager.getSkin().equals(targetName) ? "N/A" : appearanceManager.getSkin())); + } + + sender.sendMessage(builder.toString()); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/command/sub/NickoDebugSubCmd.java b/core/src/main/java/net/artelnatif/nicko/command/sub/NickoDebugSubCmd.java new file mode 100644 index 0000000..4160f8e --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/command/sub/NickoDebugSubCmd.java @@ -0,0 +1,54 @@ +package net.artelnatif.nicko.command.sub; + +import com.yoshiplex.rainbow.RainbowText; +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.command.NickoCommand; +import net.artelnatif.nicko.disguise.AppearanceManager; +import net.artelnatif.nicko.mojang.MojangUtils; +import net.artelnatif.nicko.utils.PlayerUtils; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class NickoDebugSubCmd extends NickoSubCmd { + + public NickoDebugSubCmd(NickoCommand nickoCommand) { + super(nickoCommand); + } + + public void execute(CommandSender sender, String[] args) { + Player target; + String name, skin; + if (args.length == 3) { + target = (Player) sender; + name = args[1]; + skin = args[2]; + } else { + final String playerName = args[1]; + target = Bukkit.getPlayer(playerName); + + if(args.length < 3) { + sender.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cMissing argument."); + } + + name = args[2]; + skin = args[3]; + if (PlayerUtils.isPlayerOffline(target)) { + sender.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cSpecified player is offline."); + return; + } + } + + final AppearanceManager appearanceManager = AppearanceManager.get(target.getPlayer()); + + if (MojangUtils.isUsernameInvalid(name) || MojangUtils.isUsernameInvalid(skin)) { + sender.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cSpecified username is invalid."); + } + + appearanceManager.setNameAndSkin(name, skin); + final RainbowText whooshText = new RainbowText("Whoosh!"); + target.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + whooshText.getText()); + target.playSound(target.getLocation(), Sound.ENTITY_ITEM_FRAME_PLACE, 1, 1); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/command/sub/NickoDisguiseSubCmd.java b/core/src/main/java/net/artelnatif/nicko/command/sub/NickoDisguiseSubCmd.java new file mode 100644 index 0000000..9d3c0ab --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/command/sub/NickoDisguiseSubCmd.java @@ -0,0 +1,80 @@ +package net.artelnatif.nicko.command.sub; + +import com.yoshiplex.rainbow.RainbowText; +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.command.NickoCommand; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BookMeta; +import xyz.upperlevel.spigot.book.BookUtil; + +import java.util.Random; + +public class NickoDisguiseSubCmd extends NickoSubCmd { + + public NickoDisguiseSubCmd(NickoCommand nickoCommand) { + super(nickoCommand); + } + + public void execute(CommandSender sender) { + if (sender instanceof Player player) { + final String disguiseBaseCommand = "/nicko gui {player} "; + final String disguiseNameCommand = disguiseBaseCommand + "name"; + final String disguiseSkinCommand = disguiseBaseCommand + "skin"; + final String disguiseBothCommand = disguiseBaseCommand + "full"; + + final RainbowText text = new RainbowText(NickoBukkit.getInstance().getNickoConfig().getDisguiseKitHeader()); + final int displacement = new Random().nextInt(RainbowText.getDefaultRainbow().size() - 1); + text.setPlace(displacement); + + final ItemStack book = BookUtil.writtenBook() + .author("Nicko") + .title("§6Nicko - Book of magic") + .generation(BookMeta.Generation.ORIGINAL) + .pages( + new BookUtil.PageBuilder() + .add( + new TextComponent(text.getText()) + ) + .newLine() + .newLine() + .add("§0This disguise kit will help you change your name and skin.") + .newLine() + .newLine() + .add("§0Go through each page until the end or cancel the process at any time by exiting any of the interfaces.") + .build(), + new BookUtil.PageBuilder() + .add( + BookUtil.TextBuilder.of("§6> §0Change my skin") + .onHover(BookUtil.HoverAction.showText("Clicking this will prompt you a menu to change your skin.")) + .onClick(BookUtil.ClickAction.runCommand(disguiseSkinCommand.replace("{player}", player.getName()))) + .build() + ) + .newLine() + .newLine() + .add( + BookUtil.TextBuilder.of("§6> §0Change my name") + .onHover(BookUtil.HoverAction.showText("Clicking this will prompt you a menu to change your name.")) + .onClick(BookUtil.ClickAction.runCommand(disguiseNameCommand.replace("{player}", player.getName()))) + .build() + ) + .newLine() + .newLine() + .add( + BookUtil.TextBuilder.of("§6> §0Change both") + .onHover(BookUtil.HoverAction.showText("Clicking this will prompt you a menu to change both your name and your skin.")) + .onClick(BookUtil.ClickAction.runCommand(disguiseBothCommand.replace("{player}", player.getName()))) + .build() + ) + .build() + ) + .build(); + + BookUtil.openPlayer(player, book); + } else { + sender.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "This command can only be performed by players!"); + } + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/command/sub/NickoGUISubCmd.java b/core/src/main/java/net/artelnatif/nicko/command/sub/NickoGUISubCmd.java new file mode 100644 index 0000000..6b15083 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/command/sub/NickoGUISubCmd.java @@ -0,0 +1,49 @@ +package net.artelnatif.nicko.command.sub; + +import com.yoshiplex.rainbow.RainbowText; +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.anvil.AnvilManager; +import net.artelnatif.nicko.command.NickoCommand; +import net.artelnatif.nicko.command.NickoPermissions; +import net.artelnatif.nicko.utils.PlayerUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class NickoGUISubCmd extends NickoSubCmd { + public NickoGUISubCmd(NickoCommand nickoCommand) { + super(nickoCommand); + } + + public void execute(CommandSender sender, String[] args) { + Player target; + if (args.length < 3) { + target = (Player) sender; + } else { + final String playerName = args[1]; + target = Bukkit.getPlayerExact(playerName); + if (PlayerUtils.isPlayerOffline(target)) { + sender.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cSpecified player is offline."); + return; + } + + if (!sender.hasPermission(NickoPermissions.Player.Command.NICKO_PERMISSION_PLAYER_COMMAND_USE)) { + sender.sendMessage(NickoPermissions.NICKO_PERMISSION_MISSING); + return; + } + } + + final AnvilManager manager = new AnvilManager(target); + final String arg = args.length < 3 ? args[1] : args[2]; + switch (arg) { + case "name" -> manager.openNameAnvil(); + case "skin" -> manager.openSkinAnvil(); + case "full" -> manager.openNameAndSkinAnvil(); + default -> + sender.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cInvalid argument."); + } + + final RainbowText whooshText = target == sender ? new RainbowText("Success!") : new RainbowText("Success! %player% is now undercover!".replace("%player%", target.getName())); + sender.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + whooshText.getText()); + } +} \ No newline at end of file diff --git a/core/src/main/java/net/artelnatif/nicko/command/sub/NickoSubCmd.java b/core/src/main/java/net/artelnatif/nicko/command/sub/NickoSubCmd.java new file mode 100644 index 0000000..0c94674 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/command/sub/NickoSubCmd.java @@ -0,0 +1,15 @@ +package net.artelnatif.nicko.command.sub; + +import net.artelnatif.nicko.command.NickoCommand; + +public class NickoSubCmd { + private final NickoCommand nickoCommand; + + public NickoSubCmd(NickoCommand nickoCommand) { + this.nickoCommand = nickoCommand; + } + + public NickoCommand getMainCommand() { + return nickoCommand; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/config/NickoConfiguration.java b/core/src/main/java/net/artelnatif/nicko/config/NickoConfiguration.java new file mode 100644 index 0000000..8e852ed --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/config/NickoConfiguration.java @@ -0,0 +1,41 @@ +package net.artelnatif.nicko.config; + +import net.artelnatif.nicko.NickoBukkit; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; + +public class NickoConfiguration { + private final NickoBukkit nicko; + + public NickoConfiguration(NickoBukkit nicko) { + this.nicko = nicko; + } + + public String getPrefix() { + return getConfig().getString("prefix"); + } + + public String getDisguiseKitHeader() { + return getConfig().getString("disguisekit.header"); + } + + public ConfigurationSection getBungeecordSection() { return getConfig().getConfigurationSection("bungeecord"); } + + public ConfigurationSection getStorageSction() { return getConfig().getConfigurationSection("storage"); } + + public ConfigurationSection getRedisSection() { return getBungeecordSection().getConfigurationSection("redis"); } + + public boolean isLocalStorage() { return getStorageSction().getBoolean("local"); } + + public boolean isBungeecordEnabled() { return getBungeecordSection().getBoolean("enabled"); } + + public String getStorageUsername() { return getStorageSction().getString("username"); } + + public String getStoragePassword() { return getStorageSction().getString("password"); } + + public String getStorageAddress() { return getStorageSction().getString("address"); } + + private FileConfiguration getConfig() { + return nicko.getConfig(); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java b/core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java new file mode 100644 index 0000000..654a906 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java @@ -0,0 +1,71 @@ +package net.artelnatif.nicko.disguise; + +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.storage.PlayerDataStore; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class AppearanceManager { + private final NickoProfile profile; + private final Player player; + private final NickoBukkit instance = NickoBukkit.getInstance(); + private final PlayerDataStore dataStore = instance.getDataStore(); + + private AppearanceManager(UUID uuid) { + this.player = Bukkit.getPlayer(uuid); + this.profile = dataStore.getData(uuid).orElse(NickoProfile.EMPTY_PROFILE); + } + + private AppearanceManager(String name) { + this.player = null; + this.profile = dataStore.getOfflineData(name).orElse(NickoProfile.EMPTY_PROFILE); + } + + public static AppearanceManager get(Player player) { + return new AppearanceManager(player.getUniqueId()); + } + + public static AppearanceManager get(String name) { + return new AppearanceManager(name); + } + + public boolean hasData() { + return !profile.isEmpty(); + } + + public boolean isNicked() { + return hasData() && !profile.getSkin().equals(player.getName()) || !profile.getName().equals(player.getName()); + } + + public void setSkin(String skin) { + profile.setSkin(skin); + } + + public String getSkin() { + return profile.getSkin(); + } + + public void setName(String name) { + profile.setName(name); + } + + public String getName() { + return profile.getName(); + } + + public NickoProfile getProfile() { + return profile; + } + + public void setNameAndSkin(String name, String skin) { + this.profile.setName(name); + this.profile.setSkin(skin); + updatePlayer(true); + } + + public void updatePlayer(boolean skinChange) { + NickoBukkit.getInstance().getInternals().updateProfile(player, profile, skinChange); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/disguise/NickoProfile.java b/core/src/main/java/net/artelnatif/nicko/disguise/NickoProfile.java new file mode 100644 index 0000000..c7832b1 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/disguise/NickoProfile.java @@ -0,0 +1,42 @@ +package net.artelnatif.nicko.disguise; + +public class NickoProfile { + public static final NickoProfile EMPTY_PROFILE = new NickoProfile(null, null); + + private String name; + private String skin; + + public NickoProfile(String name, String skin) { + this.name = name; + this.skin = skin; + } + + public boolean isEmpty() { + return this != NickoProfile.EMPTY_PROFILE || (name == null && skin == null); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSkin() { + return skin; + } + + public void setSkin(String skin) { + this.skin = skin; + } + + @Override + public String toString() { + return "NickoProfile{" + + "name='" + name + '\'' + + ", skin='" + skin + '\'' + + ", empty='" + isEmpty() + '\'' + + '}'; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java b/core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java new file mode 100644 index 0000000..71ff57d --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java @@ -0,0 +1,24 @@ +package net.artelnatif.nicko.event; + +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.disguise.AppearanceManager; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +public class PlayerJoinListener implements Listener { + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + final Player player = event.getPlayer(); + Bukkit.getScheduler().runTaskLater(NickoBukkit.getInstance(), () -> { + final AppearanceManager appearanceManager = AppearanceManager.get(player); + + if (appearanceManager.hasData()) { + final boolean skinChange = !player.getName().equals(appearanceManager.getSkin()); + appearanceManager.updatePlayer(skinChange); + } + }, 20L); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/event/PlayerQuitListener.java b/core/src/main/java/net/artelnatif/nicko/event/PlayerQuitListener.java new file mode 100644 index 0000000..ff7e28f --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/event/PlayerQuitListener.java @@ -0,0 +1,15 @@ +package net.artelnatif.nicko.event; + +import net.artelnatif.nicko.NickoBukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; + +public class PlayerQuitListener implements Listener { + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + final Player player = event.getPlayer(); + NickoBukkit.getInstance().getDataStore().saveData(player); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/i18n/I18N.java b/core/src/main/java/net/artelnatif/nicko/i18n/I18N.java new file mode 100644 index 0000000..c1e75d5 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/i18n/I18N.java @@ -0,0 +1,13 @@ +package net.artelnatif.nicko.i18n; + +import net.artelnatif.nicko.NickoBukkit; + +public class I18N { + public static final class Message { + public static final String BASE = NickoBukkit.getInstance().getNickoConfig().getPrefix() + " "; + + public static final class Command { + public static final String TARGET_OFFLINE = BASE + "§cSpecified player is offline. Try again."; + } + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/impl/Internals.java b/core/src/main/java/net/artelnatif/nicko/impl/Internals.java new file mode 100644 index 0000000..7a319af --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/impl/Internals.java @@ -0,0 +1,10 @@ +package net.artelnatif.nicko.impl; + +import net.artelnatif.nicko.disguise.NickoProfile; +import org.bukkit.entity.Player; + +public interface Internals { + void updateSelf(Player player); + void updateOthers(Player player); + void updateProfile(Player player, NickoProfile profile, boolean skinChange); +} diff --git a/core/src/main/java/net/artelnatif/nicko/impl/InternalsProvider.java b/core/src/main/java/net/artelnatif/nicko/impl/InternalsProvider.java new file mode 100644 index 0000000..bb5c236 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/impl/InternalsProvider.java @@ -0,0 +1,29 @@ +package net.artelnatif.nicko.impl; + +import org.bukkit.Bukkit; + +import java.lang.reflect.InvocationTargetException; +import java.util.logging.Level; + +public class InternalsProvider { + private static Internals internals; + + static { + try { + final String packageName = Internals.class.getPackage().getName(); + final String bukkitVersion = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; + final String fullClassName = packageName + "." + bukkitVersion; + System.out.println("[DEBUG] packageName = " + packageName); + System.out.println("[DEBUG] bukkitVersion = " + bukkitVersion); + System.out.println("[DEBUG] Searching for " + fullClassName + "..."); + internals = (Internals) Class.forName(fullClassName).getConstructors()[0].newInstance(); + } catch (InvocationTargetException | ClassNotFoundException | InstantiationException | IllegalAccessException | + ClassCastException exception) { + Bukkit.getLogger().log(Level.SEVERE, "Nicko could not find a valid implementation for this server version. Is your server supported?"); + } + } + + public static Internals getInternals() { + return internals; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java b/core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java new file mode 100644 index 0000000..5b07444 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java @@ -0,0 +1,89 @@ +package net.artelnatif.nicko.mojang; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonParser; + +import javax.annotation.Nonnull; +import javax.net.ssl.HttpsURLConnection; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.Optional; +import java.util.concurrent.ExecutionException; + +public class MojangAPI { + public static final String URL_NAME = "https://api.mojang.com/users/profiles/minecraft/{name}"; + public static final String URL_SKIN = "https://sessionserver.mojang.com/session/minecraft/profile/{uuid}?unsigned=false"; + + private final CacheLoader> loader = new CacheLoader<>() { + @Nonnull + public Optional load(@Nonnull String uuid) throws Exception { + return getSkinFromMojang(uuid); + } + }; + private final LoadingCache> cache = CacheBuilder + .newBuilder() + .build(loader); + + public Optional getSkin(String uuid) throws IOException, ExecutionException { + return cache.get(uuid); + } + + public Optional getUUID(String name) throws IOException { + final String parametrizedUrl = URL_NAME.replace("{name}", name); + final JsonObject object = getRequestToUrl(parametrizedUrl); + if (hasNoError(object)) { + return Optional.of(object.get("id").getAsString()); + } + return Optional.empty(); + } + + private Optional getSkinFromMojang(String uuid) throws IOException { + final String parametrizedUrl = URL_SKIN.replace("{uuid}", uuid); + final JsonObject object = getRequestToUrl(parametrizedUrl); + if (hasNoError(object)) { + final MojangSkin skin = MojangSkin.buildFromJson(object); + return Optional.of(skin); + } + + return Optional.empty(); + } + + private JsonObject getRequestToUrl(String parametrizedUrl) throws IOException { + final URL url = new URL(parametrizedUrl); + final HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); + con.setDoInput(true); + con.setRequestMethod("GET"); + + final BufferedReader input = new BufferedReader(new InputStreamReader(con.getInputStream())); + final StringBuilder builder = new StringBuilder(); + String line; + while ((line = input.readLine()) != null) { + builder.append(line); + } + + try { + final JsonElement jsonElt = JsonParser.parseString(builder.toString()); + return jsonElt.getAsJsonObject(); + } catch (JsonParseException | IllegalStateException exception) { + System.out.println("Failed to parse request (" + parametrizedUrl + ")! Does the username exists?"); + return getErrorObject(); + } + } + + private JsonObject getErrorObject() { + final JsonObject errorObject = new JsonObject(); + errorObject.addProperty("error", "An error occurred."); + return errorObject; + } + + private boolean hasNoError(JsonObject object) { + return object.get("error") == null; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/mojang/MojangSkin.java b/core/src/main/java/net/artelnatif/nicko/mojang/MojangSkin.java new file mode 100644 index 0000000..4d1ad1b --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/mojang/MojangSkin.java @@ -0,0 +1,13 @@ +package net.artelnatif.nicko.mojang; + +import com.google.gson.JsonObject; + +public record MojangSkin(String name, String value, String signature) { + public static MojangSkin buildFromJson(JsonObject object) { + final String name = object.get("name").getAsString(); + final JsonObject properties = object.get("properties").getAsJsonArray().get(0).getAsJsonObject(); + final String value = properties.get("value").getAsString(); + final String signature = properties.get("signature").getAsString(); + return new MojangSkin(name, value, signature); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/mojang/MojangUtils.java b/core/src/main/java/net/artelnatif/nicko/mojang/MojangUtils.java new file mode 100644 index 0000000..135c210 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/mojang/MojangUtils.java @@ -0,0 +1,26 @@ +package net.artelnatif.nicko.mojang; + +import java.util.UUID; +import java.util.regex.Pattern; + +public class MojangUtils { + public static boolean isUsernameInvalid(String username) { + return !Pattern.matches("^\\w{3,16}$", username); + } + + public static UUID fromTrimmed(String trimmedUUID) throws IllegalArgumentException { + if (trimmedUUID == null) throw new IllegalArgumentException(); + StringBuilder builder = new StringBuilder(trimmedUUID.trim()); + /* Backwards adding to avoid index adjustments */ + try { + builder.insert(20, "-"); + builder.insert(16, "-"); + builder.insert(12, "-"); + builder.insert(8, "-"); + } catch (StringIndexOutOfBoundsException e) { + throw new IllegalArgumentException(); + } + + return UUID.fromString(builder.toString()); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/pluginchannel/UpdateMessageHandler.java b/core/src/main/java/net/artelnatif/nicko/pluginchannel/UpdateMessageHandler.java new file mode 100644 index 0000000..aab7624 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/pluginchannel/UpdateMessageHandler.java @@ -0,0 +1,22 @@ +package net.artelnatif.nicko.pluginchannel; + +import com.google.common.io.ByteArrayDataInput; +import com.google.common.io.ByteStreams; +import net.artelnatif.nicko.bungee.NickoBungee; +import org.bukkit.entity.Player; +import org.bukkit.plugin.messaging.PluginMessageListener; + +public class UpdateMessageHandler implements PluginMessageListener { + @Override + public void onPluginMessageReceived(String channel, Player player, byte[] message) { + if(!channel.equals(NickoBungee.NICKO_PLUGIN_CHANNEL_UPDATE)) { + return; + } + + final ByteArrayDataInput in = ByteStreams.newDataInput(message); + final String subchannel = in.readUTF(); + if(subchannel.equals(NickoBungee.NICKO_PLUGIN_CHANNEL_UPDATE)) { + // TODO: 10/20/22 update player + } + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java b/core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java new file mode 100644 index 0000000..c3f4ea3 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java @@ -0,0 +1,69 @@ +package net.artelnatif.nicko.storage; + +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.mojang.MojangUtils; +import net.artelnatif.nicko.storage.json.JSONStorage; +import net.artelnatif.nicko.storage.sql.SQLStorage; +import org.bukkit.entity.Player; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Optional; +import java.util.UUID; + +public class PlayerDataStore { + private final Storage storage; + + public PlayerDataStore(NickoBukkit instance) { + this.storage = instance.getNickoConfig().isLocalStorage() ? new JSONStorage() : new SQLStorage(instance); + } + + public static final HashMap PROFILES = new HashMap<>(); + + public Optional getData(UUID uuid) { + if(storage.isError()) { + return Optional.empty(); + } + + if (PROFILES.containsKey(uuid)) { + return Optional.of(PROFILES.get(uuid)); + } else if (storage.isStored(uuid)) { + Optional retrievedProfile = storage.retrieve(uuid); + retrievedProfile.ifPresent(profile -> PROFILES.put(uuid, profile)); + return retrievedProfile; + } else { + return Optional.empty(); + } + } + + public Optional getOfflineData(String name) { + if(storage.isError()) { + return Optional.empty(); + } + + try { + final Optional uuidTrimmed = NickoBukkit.getInstance().getMojangAPI().getUUID(name); + if (uuidTrimmed.isPresent()) { + final UUID uuid = MojangUtils.fromTrimmed(uuidTrimmed.get()); + return getData(uuid); + } + return Optional.empty(); + } catch (IOException e) { + return Optional.empty(); + } + } + + public void saveData(Player player) { + if(storage.isError()) { + return; + } + + storage.store(player.getUniqueId(), PROFILES.get(player.getUniqueId())); + PROFILES.remove(player.getUniqueId()); + } + + public Storage getStorage() { + return storage; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/storage/Storage.java b/core/src/main/java/net/artelnatif/nicko/storage/Storage.java new file mode 100644 index 0000000..77cd9b4 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/storage/Storage.java @@ -0,0 +1,26 @@ +package net.artelnatif.nicko.storage; + +import net.artelnatif.nicko.disguise.NickoProfile; + +import java.util.Optional; +import java.util.UUID; + +public abstract class Storage { + private boolean error = false; + + public abstract StorageProvider getProvider(); + + public abstract void store(UUID uuid, NickoProfile profile); + + public abstract boolean isStored(UUID uuid); + + public abstract Optional retrieve(UUID uuid); + + public boolean isError() { + return error; + } + + public void setError(boolean error) { + this.error = error; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/storage/StorageProvider.java b/core/src/main/java/net/artelnatif/nicko/storage/StorageProvider.java new file mode 100644 index 0000000..41b66de --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/storage/StorageProvider.java @@ -0,0 +1,7 @@ +package net.artelnatif.nicko.storage; + +public interface StorageProvider { + boolean init(); + + boolean close(); +} diff --git a/core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorage.java b/core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorage.java new file mode 100644 index 0000000..56ec416 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorage.java @@ -0,0 +1,70 @@ +package net.artelnatif.nicko.storage.json; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.storage.Storage; +import net.artelnatif.nicko.storage.StorageProvider; + +import java.io.*; +import java.util.Optional; +import java.util.UUID; + +public class JSONStorage extends Storage { + final Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create(); + final File directory = new File(NickoBukkit.getInstance().getDataFolder() + "/players/"); + + @Override + public StorageProvider getProvider() { return new JSONStorageProvider(directory); } + + @Override + public void store(UUID uuid, NickoProfile profile) { + final String profileToJson = gson.toJson(profile); + final File file = new File(directory, uuid.toString() + ".json"); + + try { + if (checkFileExists(file)) { + try (FileWriter fileWriter = new FileWriter(file)) { + try (BufferedWriter writer = new BufferedWriter(fileWriter)) { + writer.write(profileToJson); + } + } catch (IOException e) { + System.out.println("Could not write to file."); + throw new RuntimeException(e); + } + } + } catch (IOException e) { + System.out.println("Could not create file."); + throw new RuntimeException(e); + } + } + + @Override + public boolean isStored(UUID uuid) { + final File directory = new File(NickoBukkit.getInstance().getDataFolder() + "/players/"); + final File file = new File(directory, uuid.toString() + ".json"); + return file.exists(); + } + + @Override + public Optional retrieve(UUID uuid) { + final File directory = new File(NickoBukkit.getInstance().getDataFolder() + "/players/"); + final File file = new File(directory, uuid.toString() + ".json"); + try (FileReader fileReader = new FileReader(file)) { + try (BufferedReader reader = new BufferedReader(fileReader)) { + NickoProfile value = gson.fromJson(reader, NickoProfile.class); + return Optional.of(value); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private boolean checkFileExists(File file) throws IOException { + if (!file.exists()) { + return file.createNewFile(); + } + return true; + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorageProvider.java b/core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorageProvider.java new file mode 100644 index 0000000..ac2be77 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorageProvider.java @@ -0,0 +1,22 @@ +package net.artelnatif.nicko.storage.json; + +import net.artelnatif.nicko.storage.StorageProvider; + +import java.io.File; + +public class JSONStorageProvider implements StorageProvider { + private final File directory; + + public JSONStorageProvider(File directory) { + this.directory = directory; + } + + @Override + public boolean init() + { + return directory.exists() || directory.mkdirs(); + } + + @Override + public boolean close() { return true; } +} diff --git a/core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorage.java b/core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorage.java new file mode 100644 index 0000000..70e80b1 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorage.java @@ -0,0 +1,36 @@ +package net.artelnatif.nicko.storage.sql; + +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.storage.Storage; +import net.artelnatif.nicko.storage.StorageProvider; + +import java.util.Optional; +import java.util.UUID; + +public class SQLStorage extends Storage { + private final NickoBukkit instance; + + public SQLStorage(NickoBukkit instance) { + this.instance = instance; + } + + @Override + public StorageProvider getProvider() { + return new SQLStorageProvider(instance); + } + + @Override + public void store(UUID uuid, NickoProfile profile) { + } + + @Override + public boolean isStored(UUID uuid) { + return false; + } + + @Override + public Optional retrieve(UUID uuid) { + return Optional.empty(); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorageProvider.java b/core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorageProvider.java new file mode 100644 index 0000000..98b781f --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorageProvider.java @@ -0,0 +1,39 @@ +package net.artelnatif.nicko.storage.sql; + +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.config.NickoConfiguration; +import net.artelnatif.nicko.storage.StorageProvider; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class SQLStorageProvider implements StorageProvider { + private final NickoBukkit instance; + private Connection connection; + + public SQLStorageProvider(NickoBukkit instance) { + this.instance = instance; + } + + @Override + public boolean init() { + try { + final NickoConfiguration config = instance.getNickoConfig(); + connection = DriverManager.getConnection("jdbc://" + config.getStorageAddress(), config.getStorageUsername(), config.getStoragePassword()); + return !connection.isClosed() && connection != null; + } catch (SQLException e) { + return false; + } + } + + @Override + public boolean close() { + try { + connection.close(); + return connection.isClosed(); + } catch (SQLException e) { + return false; + } + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/utils/PlayerUtils.java b/core/src/main/java/net/artelnatif/nicko/utils/PlayerUtils.java new file mode 100644 index 0000000..4c646e5 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/utils/PlayerUtils.java @@ -0,0 +1,9 @@ +package net.artelnatif.nicko.utils; + +import org.bukkit.entity.Player; + +public class PlayerUtils { + public static boolean isPlayerOffline(Player player) { + return player == null || !player.isOnline(); + } +} diff --git a/core/src/main/java/net/artelnatif/nicko/utils/ServerUtils.java b/core/src/main/java/net/artelnatif/nicko/utils/ServerUtils.java new file mode 100644 index 0000000..25c2268 --- /dev/null +++ b/core/src/main/java/net/artelnatif/nicko/utils/ServerUtils.java @@ -0,0 +1,22 @@ +package net.artelnatif.nicko.utils; + +import net.artelnatif.nicko.NickoBukkit; +import org.bukkit.Server; +import org.bukkit.configuration.file.YamlConfiguration; + +public class ServerUtils { + public static boolean checkBungeeCordHook() { + final NickoBukkit instance = NickoBukkit.getInstance(); + final Server server = instance.getServer(); + final YamlConfiguration config = server.spigot().getConfig(); + if (!config.getConfigurationSection("settings").getBoolean("settings.bungeecord")) { + instance.getLogger().severe("Hummm. You have enabled BungeeCord support inside Nicko,"); + instance.getLogger().severe("but it seems that your server is not hooked to your BungeeCord instance."); + instance.getLogger().severe("If the server is already hooked to BungeeCord, please enable it into your spigot.yml aswell."); + instance.getLogger().severe("The plugin will not continue."); + instance.getServer().getPluginManager().disablePlugin(instance); + return false; + } + return true; + } +} diff --git a/core/src/main/resources/bungee.yml b/core/src/main/resources/bungee.yml new file mode 100644 index 0000000..0902daf --- /dev/null +++ b/core/src/main/resources/bungee.yml @@ -0,0 +1,4 @@ +name: ${project.parent.name} +main: net.artelnatif.nicko.bungee.NickoBungee +version: ${project.version} +author: Aro diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml new file mode 100644 index 0000000..584532e --- /dev/null +++ b/core/src/main/resources/config.yml @@ -0,0 +1,28 @@ +# Nicko ${project.version} - Config: + +prefix: "§8[§6Nicko§8] " + +bungeecord: + # Enables Bungeecord support, switching through servers will keep player's skins. + enabled: false + redis: + username: "" + password: "" + # Time To Live, the time the data will be stored on a player-by-player basis. + ttl: -1 + + +disguisekit: + # The rainbow header text in the book. + header: "Nicko's Disguise Kit" + +storage: + # Indicates wherever the data will be stored + # locally through a .json file or a (My)SQL database. + local: true + # SQL database's address + address: "localhost" + # SQL database's username. + username: "" + # SQL database's password. + password: "" \ No newline at end of file diff --git a/core/src/main/resources/plugin.yml b/core/src/main/resources/plugin.yml new file mode 100644 index 0000000..0730592 --- /dev/null +++ b/core/src/main/resources/plugin.yml @@ -0,0 +1,7 @@ +name: ${project.parent.name} +main: net.artelnatif.nicko.NickoBukkit +version: ${project.version} +author: Aro +api-version: 1.18 +commands: + nicko: diff --git a/core/src/test/java/net/artelnatif/nicko/test/MojangAPITest.java b/core/src/test/java/net/artelnatif/nicko/test/MojangAPITest.java new file mode 100644 index 0000000..0fd8a47 --- /dev/null +++ b/core/src/test/java/net/artelnatif/nicko/test/MojangAPITest.java @@ -0,0 +1,87 @@ +package net.artelnatif.nicko.test; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import net.artelnatif.nicko.mojang.MojangAPI; +import net.artelnatif.nicko.mojang.MojangSkin; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import javax.net.ssl.HttpsURLConnection; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.Optional; +import java.util.concurrent.ExecutionException; + +public class MojangAPITest { + public static final String NAME = "Notch"; + public static final String URL_NAME = "https://api.mojang.com/users/profiles/minecraft/{name}"; + public static final String URL_SKIN = "https://sessionserver.mojang.com/session/minecraft/profile/{uuid}?unsigned=false"; + + public static JsonObject object = null; + + @Test + @DisplayName("MojangAPI - GET - Name") + public void testGetMojangAPIName() throws IOException { + final URL url = new URL(URL_NAME.replace("{name}", NAME)); + final HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); + urlConnection.setRequestMethod("GET"); + urlConnection.setDoOutput(true); + + //DataOutputStream output = new DataOutputStream(urlConnection.getOutputStream()); + //output.writeBytes(); + //output.flush(); + //output.close(); + + final BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); + final StringBuilder response = new StringBuilder(); + String inputLine; + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + object = JsonParser.parseString(response.toString()).getAsJsonObject(); + Assertions.assertEquals(NAME, object.get("name").getAsString()); + } + + @Test + @DisplayName("MojangAPI - GET - Skin") + public void testGetMojangAPISkin() throws IOException { + final URL url = new URL(URL_SKIN.replace("{uuid}", object.get("id").getAsString().replaceAll("-", ""))); + final HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); + urlConnection.setRequestMethod("GET"); + urlConnection.setDoOutput(true); + + final BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); + final StringBuilder response = new StringBuilder(); + String inputLine; + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + System.out.println(response); + } + + @Test + @DisplayName("MojangAPI - New Methods") + public void testNewMojangAPIMethods() throws IOException { + final MojangAPI mojangAPI = new MojangAPI(); + final Optional uuid = mojangAPI.getUUID(NAME); + Assertions.assertTrue(uuid.isPresent()); + + final Optional skin; + try { + skin = mojangAPI.getSkin(uuid.get()); + } catch (ExecutionException e) { + throw new RuntimeException(e); + } + + Assertions.assertTrue(skin.isPresent()); + Assertions.assertDoesNotThrow(this::testNewMojangAPIMethods); + } +} diff --git a/core/target/classes/bungee.yml b/core/target/classes/bungee.yml new file mode 100644 index 0000000..52d8a71 --- /dev/null +++ b/core/target/classes/bungee.yml @@ -0,0 +1,4 @@ +name: Nicko +main: net.artelnatif.nicko.bungee.NickoBungee +version: 1.0-SNAPSHOT +author: Aro diff --git a/core/target/classes/com/yoshiplex/rainbow/RainbowText.class b/core/target/classes/com/yoshiplex/rainbow/RainbowText.class new file mode 100644 index 0000000000000000000000000000000000000000..dfebbf4a5a2be6c99a5f4cd94e2eff4626e77949 GIT binary patch literal 3592 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 Ucf7SwchILBo=5$?i0y~}0FQ&YGXMYp literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/anvil/AnvilManager.class b/core/target/classes/net/artelnatif/nicko/anvil/AnvilManager.class new file mode 100644 index 0000000000000000000000000000000000000000..fe1cfdc63623bb19a70d8155ca366306ac0dc844 GIT binary patch literal 4776 zcmb7H`Fj)B6+KV38C#6O2uz6CyaBRgEC@*(P?FX*n3zb8gBJ>2$I{r0J(^K9BZIr8 zS(mgad8b=Er{hoBHLvnXx>Ipf(LR2;?;0j0PmWN-^S zH6o%ku3JS9dIeNMnOZU|FK!HN0Op47Eav@?((is$FV2kjkCY8Fub0va`UU!=SGQOh zMIV}?IDxo=0Tl@(1-ctX!-F{DF+^Y|VU1gkD+4XizmbbVd&r|coK!J{l*haBf?){^ z*RY~!%25(eKGMG1x4=)atvIdXA)N71W%PM>+|>&Ly+jpawP7uj*mh|pC8wucEw|)h zdPKzs@IirAgTr#Sz{MI=jW%u%Ta4L!R>e7_1zN~bb49?8H>N^;dZxXFTiHL5@rpy) zWpdA#t(|lm0v#sPZb6T-4;NKDiE#?Ei#jPoVWFtj)~Zb*r(+O! zN`@mNaB2Ht*vi8(7VD>4@pRw@huKOuD0oKTNC;^I8ns~x(+Xx(%;Ji`-q7l-=ISLw zGfAAu;mHe^1vVThk2sLvJLd42d+h7qM*Q1VWYTFBP`g9vXf@L#|-nvVGl8!8AmTk3XfaM znrY-W0C}wyY?ph2Mcw6KQ%@8w$_kbx@o%sqZdQ6P>rTaif)-vkcVg!6qVJWH^ncAn67XADc9C>Q4R(zG@wdvPpd z=QMLxV`lI>7;JX08w{bJ``bA7uo&-?r9>JqY~@4UwOQt_z_Cpuu-0M;Q_@ACeO(yO zR>5~zs%$Lms^R=yr|^0+qClB9Bv0d&HAzJyI!&!Gm)H8kCxrfo1g1Cfu3z%EUx%yF zXGVG*YK>2=r7DSI^+M?cufb-uVi2VL0oWQ}^`9me>L%7B(tk=|#V^!bwZX8`!Fl1-y5_@k5_@@QOz``$ozB%{vz;b*dqT96P6f^gvA6yyIb%#dBnS= z;urX32VUdA-{rttDt_*LRpi$l6|dqoR=sh{(o3VJ<~X{e;I6>IO)4=fXOPW2{;kDb z!84V{any7WP)~z-=6Sg9{?~8h`h5s}$Lcy%e;Mx3x|j;^^1C zIZqH?!8iCtksbg+Mc>4ZK;0_@*2K9pi3*Np?xFAM9UNQ5@d^exa;k!d6Un=H6sX{_ z*oP|^$qo{RQo-1jbr8L@5xhjTpo9mjE&*PU}79F^)Q zK7b?ey{hVTpt@aprCzwasLLC>JYY*l`-0j7K@rBhH*l|vrc~0mfel&Th6y_M7MJ-k z?II3fnAk^%eU#YG6ML3IhePW6s_J+P3e;IaG`sI%^6Hzod_|;HOmfGf$3aCkobt?Vxx;qG)Q2;uKMwCWnk ve#58Cz2EZx&-g3e2;SbTzTM{ADpz%JMIYYAJr)y}&wudwPy7r2!GrGsDN!2R literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/bungee/NickoBungee.class b/core/target/classes/net/artelnatif/nicko/bungee/NickoBungee.class new file mode 100644 index 0000000000000000000000000000000000000000..818fc6a481b7926115855070d072b468af0ab36e GIT binary patch literal 1349 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 RG&1t|hCSqXjf^6={uAhjlwtq? literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/command/NickoCommand.class b/core/target/classes/net/artelnatif/nicko/command/NickoCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..2e3e80a4747aa0a9cc817ba892837da09b867d11 GIT binary patch literal 3167 zcma)8U2_vv7=BKZbVFEZhyn(ogbK7xvEj2|0~Kuns|5GxYc<0vAU9oMw2>o0R>=5hY)eMVO6!->1ip+H%t zWV+>s>B`oHgQFF?A~RR*hLbVsb!j+;Rg{BmERLjDZ=T_7K>m**SUyX*`ad+-v2my4a_qA6eEMtuU&t!1{Lkf{M)dpO0ggK&&JSjdC1= zT>8kyv72(4{~GoR>|eGT-9{m($g!|urW%FOS}B1&*sof_0fE83iDgB!7j(XVTCpC~ zaR^TkUwK6q8y?-<(Klf``!1A zBTDa+0*6+h?ZV>tDFdEbu>qqhi(3X9RR$czh=yYVxs`cv;`#9w`R zc=AfgIUUbqT3{{N$D~_y%(^N_fdNWri)y{vD4SMp(x2Kc9%m_2(2ICU!+9MSa8aOl zg?s`DYMl-mzQDuOxagJ8@XA7gt*2(xwp_a^7i3uiuffnz&{0H*0^96h*?XgQ)pn@V z--MufX2a(0e{VRgmZ*v{3PSAL+T=;TmjwLuOPB1?KW0r zQ(d>QE}MEdwIQX=;gQ?u{=(;X`MZgnpqwbWs58m`4cN%tEu1}`=z%meaG8|A8@Li^ z5;v$>>ZAE40WbsbJ%u^CqRXR_I!}%d?EJ9?{Uu0#XkRVigP~s z{%iko9!SShJLb@P6GM@q&L(z~9`Na%QAKA+Kkm~TVv0_Z&iQm_=TPVR&QB@hRSxwR z;n>2li{l8#sXN&75|P+PfkRE??_gMwhX>NpIUH#sdk06=#?$`BXcOr>7*iX^{f!e% z#It05rZq=CqtFNxa9P4dmabKGZe~+dw3h~5V{*&Z^W9vaa2QEbai#<-D{J{i NzRfiGU9LOu-hU6|e8d0% literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/command/NickoPermissions$Player$Command.class b/core/target/classes/net/artelnatif/nicko/command/NickoPermissions$Player$Command.class new file mode 100644 index 0000000000000000000000000000000000000000..a4000ac1f73655568feaf98af568b7d9a6863c7f GIT binary patch literal 653 zcmbtR$w~u35Ph9(k{GwR#^t036?721xqyrjgOf>cG~g+8#x{1G^uTmS@UuJ#9{d15 zN~{?L!JB&M_o^OU)T^qu_m@`yhgh|cVc1r}*gQ5ORNTm0Tgl))vV&+itUkq3V8H@l7mMf1hF8A!TW*Mxn-C`Fd zx+lO;!x$>WJI#Uo)-$qC>6dB30?DAVYKlpm#|&nPvzQ~yU>*x8 SGb|EUNvToIGGU3{3Thu}h^r+4 literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/command/NickoPermissions$Player.class b/core/target/classes/net/artelnatif/nicko/command/NickoPermissions$Player.class new file mode 100644 index 0000000000000000000000000000000000000000..da08338f6000458e62b31b81c34ac696e89eb992 GIT binary patch literal 539 zcmbVJ%SuBr5IxgZYOVI6RlDy(1seo$V|7yyg;EPj_vvla)O!=SNd-U4mEgh;@T0`J zZCCDU2IkB;1DV(N&*v9_OB_^?LtdazMG+-JeWqTOjFo+ocaxcp0-@A1)`TlU{_tol zP$ryN9i&Qwj;#vjQCbtdI2pMlQFbba85`*|G2R_IZE9&%@DDo+ sXCa3Q`z#G?vH{gaTx8s0md7^x9BQa9uz?-MCMyCB?4pepNBe010zGbx3;+NC literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/command/NickoPermissions.class b/core/target/classes/net/artelnatif/nicko/command/NickoPermissions.class new file mode 100644 index 0000000000000000000000000000000000000000..e4c29d96a41232e8b4d23a804a040c4ca98ff986 GIT binary patch literal 1464 zcmbVMTT|0O6#ljp(w1pZE`a zcAP(D(73#F;=tFkTIeYHsJNf?O^eccBWMc@SOF>vgH+mQb5BU+-Om0=Q z&D}$xONO3h!!qP5Lsx2cJBA3N3SugHp)w>aAvNwuVOm@o`<$1p_U&wEssj$u_Yaq8u$iZP5cjMR8lP<)-sH-A%MQ+>n7}m!lPazw!7zV8wzV3!_JV3l!l@aqOQlkj(PA$9YICRb{Bi(J%+{h9!!P+OBZ6 z_^wHkc;42zxy>EJ3!k$!t&ytg>x7g){$KmT7aeiI~!b=wsXwzz7;i1#lY!H0)Q#pWZt%`je4eixGj?3 z47ZN!qJ#R|7X4uPGp+D!y2x_VEE`f}B6vb*XWu^P1rK~yB~d@aAz?(#S(b3JCU;#y z)9(qI%b+xyq~IyTbXyNPm8M{gVe-$a6d~vXrf7dcw2&cc^Ar+bxZ!g*iKmV7Y3BXy z=w+HXjc!JF_uOZ&kN)!vo!&DEaf?p1NvAMNTm*Ax#&iA)5dQ+@1brvCbczw+6Rvum zXy@q+JVg=4ZQ??>gLz*XLK+KLBsxNx_vm|!3~}S=qL&FQQ^E^Gtmz0W!G$6wE$1Gon(hd!hfq*Y|l z&rmqzM_eS%&kD+t8|hvuQ|8*wT<~?V-ur!p$Pb zkgXeD!#6yUg-X`0I1;YRVwfR)Ak0=41%^!RK-8LpC}LE>n2K>sFbs#WeQB6l+3+ZG zpR>=fH(UNYCjGxj<|4CK0rVWsV^YDCifLTv%Dp08!)}mB{NQubTW{EoD@xoG4C6^W zk)A%cm%|J$DR@oA>$uD?l3-{#B#L}Bgxt1G!xj-)9uYa4#8h%jlNdJ~TOY&~Tvc#Q z#dXXwjCGjlC=s`wbOpBJaFn>z8||ee1R_&e5GO! zkBIpWMTULkG=)~?R<+K_g75R1bX+>qgI03&XY!VcjiLZ+)Gns*u9O|8>9@{ki$peE zhCA(+NUHzy%_wAV+qm<>mnZgI;-*OpUCVsBgd^$BN;nPJuOBeGNx2Q^EFRz{uM%<1C&?~gi)mUARUKfg2Ev&BFws1=( z_dMY#Fc_|$s^VD%QP58(nKGO8XuHjDIrGc3_1AAIQzr|~|mH2O07X6B!O{St0} zL}RcG3}Kl@HBvwc4`{`(f>m;IpXR?IO|F2A8^1&O2`iK7=jq4D7YB-i#i3&U1S7{J z$~?yP$#m*=ap+f^`x(gmxziA44M`_!w&;+zrzCgkT1;4V1}eFx$iyLEff$2C1p}6duyF h51-QZXW^`Z9r^|te@?Qm@ht=zB*~HF0EaL!`2s!dnz8@@ literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/command/sub/NickoCheckSubCmd.class b/core/target/classes/net/artelnatif/nicko/command/sub/NickoCheckSubCmd.class new file mode 100644 index 0000000000000000000000000000000000000000..da74b44532a3a30eb5880a8d18704c407e5ad156 GIT binary patch literal 3200 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 Z{>tZVeEzMWkwtYMp5*iI_$SZa`hR;8;`smo literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/command/sub/NickoGUISubCmd.class b/core/target/classes/net/artelnatif/nicko/command/sub/NickoGUISubCmd.class new file mode 100644 index 0000000000000000000000000000000000000000..1bffbe67166b37accfc692125882446a5064ed0b GIT binary patch literal 3478 zcmb7G*;gCa9sVu|jSyo)1lSg7Y+(aNVG+iTlOmJFiWemysD(-GBy|UIfiYr6nHgb7 zo9=tkCg~cdd%AE=`;OJeOIS z7YLs-Ez^5kV7Px`UrwJZ6NpJCXEj6wj@Zs(YOcJzYk_pIqSJqVxjd3u{Kf^9{IZtQx7JVJ)Weo?}{z>EuKW=MD|&DBAFVhM10a zbO`j-HNNbbMYm$pRkapqHQhk%)WSm1w4}g8{d;RkUXS7s4r@4~BaSYCL|r{TI91PD z=vmfsJ;N$cdQX3{KCm@BbmkB~rsE+T4S=bDZ7rCK0;79LDA;layIF4K}*91DKepg^(%)LGxC($o(c*R(j)L$^X=S**jE9JXK zto!7nVNk~qh6!;^%&U1@NxZzY=A|Rh;&L%5UDsG7#GUojFhfTK&h6oO zPz^rJ)6!WnU6-)AJwaylRJ27fN+>K__&5K z9ci2s82Z1AVR_}UnP;bNOkcP%na$_3Q@I=doVz3t+YPJ+R`JQYDhzAYET*1PU#uS; z*=OWSWkc29j$lpA-IN6{oxC2w6q(#*(~95|TrHG~MP*}N#|*9#Z@VO|9A)}W_=;%R zIG)q-$*u2svislFm+Ly7S6@1|Ip?@35Gc2`kyGv%NDA!VsVOn$ct<;rZ zo{?)_1fQml`EsGaeCv+lMa(JSh9hA6?5Un7dP{!i>rI$$!m@8A$|_R}_NsKcBUqq> zDnSc0Ea@;+VQQ>1<&{EeSw|5oJaZ&Psn+pyZC+=V3@1+zCA&(xCi*+h>lBwV*w#_1 zs#7k-cx5=MdKr($YL!&lZjJb@M*QKpr!|xXQg!pKTD4oZ&84f^>V*>uGNpBby*F20 znUl_pF;}Fwu?f3i6lV>`RQt+d$XhaL@T9yas9qPW=*ci zLfNBP#OI^>QTq8hfXy=JJ;Pyu1-fcQ?7YSVqCw)QG$4y=Y^uW@uVtzFS#c)lg0wP3 z`9!C^j()np3tyGGz#bRS?yf+QjTA|nZY|lY36(1XCnl(W{~96VfxKrFmM4u;C34Zc zU3LocqN!rr?!&v41;Z+t*h|jaw&!||QJR$Al0EOXhVe!eZ{oWezNgaj`z)~Syfdv; zds$YV2El!EkuL|^Sr>S#Hj68SfzZo*_7tVtGhy4y`wL_j5F({9fejQuf@9B zzG}i>5s@*9#k}dsbOb--jVAuIQOK8M!CWxqd?E{^A1(=Wfu`2-&M+bf(;$HTG9n|S6n`Wnw_ z8%S`U^Y@2BYTw5Fw7(BGoz*(E-;w7Of9g*m5$CU)zhpeLi7Oj8spi=Y98>eP4IHlZ z>4l0>w9?dTI|Lh7$ox7g_s<=2iEo`Zt{36yv?edvF_ugDkfCe2o;Vi=-}8v z*gJ6$hxyVzLX+ZrTz26M9^_N#D4xVIWO?!odU#d$LZT0UVeS4E{rEeQ_y-0=gwMJZ zQsOd3{II@&X0%Yp=kW!O?RXSl#5sgi5UZi)>Pz@CL#)oeg0B*exEQH$%;2B+8oo{r zNj={nZxiKr;hXptZB+pnMccvusw-a8koh+{{)0{p-^O=*uN(0?_5Z*hf8>w1@ne4JBIQr`vilj4NOARZ&cDDr_%-7H0|*by AdjJ3c literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/command/sub/NickoSubCmd.class b/core/target/classes/net/artelnatif/nicko/command/sub/NickoSubCmd.class new file mode 100644 index 0000000000000000000000000000000000000000..aa2419531c06f11fcc60fafafc07dfc0dde5716d GIT binary patch literal 601 zcmb7B%TB^T6g^W4g<7D#aP5wVG9Tb$L&6Gifnh%_BM!FHq_lpQCK?kLet;ikyi*!u zSdciA+_{f)&)mn?_s1uIE1bBnP;p>;sG`Q;uf&t!ktPQb!NkCKICXit=u(>xAjdMAR2JO`5`6wzFy%GjmT&K}g7e%bxWR!dY? zYbmoEq4aN8=iT0Jj;+4jS(2xr94k|r|7Tu9vkRQk#4Xwtm2GBDnnijQO_D9L#$=ng z+kXe^58mLs6qq*27Ahp`u+gCF!Y8YyGlOra%}VLFrMoZbDMbN+jF^XKoc-vFNCbqpbNL=cwIi7tlTBlV-IR8>P$ z-WHE|$zkYP(+%BOXXr?#_M?yxjUXnY8!|)2;EtkN4zC)jqgNC|FCCjo$uugurtAtM z=f2l08a54vPIm^wR6cN}yJWL=e5^a!7=?<<=s_<-RO60EVpvY5@}{LJMR%GX%nzVc z^eR`j>CqH7DbX^t#ZcVG)ZJQF5?a+7={~_`z01=Q(P%?fuY-0 z(X%jcV*0AmU5!71y1BEwAb>TXT#GlX+ynKSg{b%XELPKw-muNJH1N#unF`>Lf2+joYYL)~Ur z2xgbsouRDPfO~E)GYrtKTq!9k<&kHFCcbE!OCwxNf`2`J3&Y@&n5F zeE&cAk~TT_d{G(t&S!3T+R}Cv%$il=;v7;3U%m%2B4bQazlG=)BCxnk=q*O?op?;o zCuD8Ys2Go>e}bjwejxIVtPryFjH5%0AWSQxw04cGA#XO_YU^Z)Q9)(&dxqyebA{$G zF_y05Mxw8d{;yb{oc0AY(j` r@v;qLC6F-@zzB(Ni?7EL{fix!(%%uOW3{!8=?m+nh88=nVz2%IMj@GO literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/disguise/AppearanceManager.class b/core/target/classes/net/artelnatif/nicko/disguise/AppearanceManager.class new file mode 100644 index 0000000000000000000000000000000000000000..a4e20ea0e077604d6c3e530d19d074f7540d0ddd GIT binary patch literal 3311 zcmbVOTXz#x6#h<=cAE4wltRL#0xcj-L+nsm1q>(!f(Fxzl%iAxrs*^tnoh!Gg4P?} zZ~s95fG<9%%LdT3Tt54wT<&vbG8xhtSo$(2IWv2I-~RUHoWKA1{Z9br@Le2Th$x71 zbfbr1;Er}rQ!AQTR_B)Q=p~z>=d58G_Dc+r^w{+{dJ$6)=ja1x7&diV)ht`Dn3`>@ zs-{s|ud1`+d7-hsZjgCjS+@&j-PX*K&Tuq6R(zUGE`|hlC>Y?_i9rT6&|t-=mm5Z1 zSEp+=U9*Jy8O_wny2a3Icz}nW4ku#T&5=ZkffL(HnyoF^Rg37J2%}r4_k^X+SF}yt z@+>6vy&U_npCPu=b~GMLBg{=4&)|T9gB*u2%&@a+mDOb_sM^vsMob-ahHSbh^VYD9 zin_R1xRe_!`b>1wHtbE8tE70C;|PvYZflZ1!~XE^<2Z&<1!;~kWC$xT8zF%(D6XIk z#{x*USSB(m#t3N+8f9=Mt`Kxo63&lKf z4OTtSIv2-DOe&b-cpfh>3~uK}dR47_rA|n#V0@iIns+vj)cQ2X84-z6b7%@Za~x-J zjv+zn%&o3g3{w|1#E^DHl71I#%P`9=zcRU=OnrD6=M_wIT);(!y;W~qMlFSRq?*SkPPBSUu5wbM-ej=rcuvt)a*?;FP4Pu z9LKzTv!>NWl;Z2F91FPSl*hulVKVG)5%Y&GqP))WM(fjAZ9|Xa29^}O#ql=Yd2C`i zdQq12yA7>U?_lf9v)mYQ%0g1U&7p~)l)7#U65>UPW2Lp{pe3-%QN|h#henNBT5ok- zG`-{u#5)}8s5rx;VA{Gxbxi1^VZ+1Ns8v+&!(1OsR29@X?t+Hbk-&<7+=fcs<JchPMjia{~S=+~e)J>*IUv|Q=HqqU#DqcH-8 zI{o_)5otG-c>tDq2xSZXnapqKZ(`RL_GFGf#LyN-#MYkUO+5Q6=sEEhvRgRy3)y$U zrssb2&~t#$`{~Y+K#DE}2MKi&yU?IFDF*}h@GkuWrtls%iGg5JaG7knOeR8@FdvN< zpF|_+qmjZ8_K+NVeKaOK8WVUQ9}s+uWcbLXahhl_qL}yti5r6=IoKSn@ z+ac+XJ72m&3ojqLUM5{HG3n(2Ug>mj$mbv?X@E>=1iKFMvbr+uKWNc`Xi!| zpJ*>4HFt;{@%b5W1G`V(bfYVAUby(gb6KMZgv&FTCT73KKF9Oxw2VB$B102zdb>CM zyJ6U)KI}6-Y`Uo)NJb<&jc&peg*Hv-qCjH;mTKr$yL!a+7C25fysY%-R7=cDQw*QV zG%;};x$aKVDuU^Cqv+IE^>OQUJuz`=gwR>;q%%o$rb6gARl~%Q7fk17C!JG)bUwr9 zuDwdD2&Y?w(`lUZ8FzcJe1R`rY~k%7m=?d4T~lW!Wt2HLyxc#MH|dXY9703)U-!H T(gR82D|}5Z8NMNBUHJB2jQj#S literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/disguise/NickoProfile.class b/core/target/classes/net/artelnatif/nicko/disguise/NickoProfile.class new file mode 100644 index 0000000000000000000000000000000000000000..9a36ceb81bf8c503d6d44fe38e53454c69086eb2 GIT binary patch literal 1681 zcma)6T~8B16g|_HZmC-eRZzqaP_R(Y`mItX+1S-ND2d|A)Uo zUwrTjO*HY<#2;n6cXyT5R^!Xeox69=J@?!@`|bOuF94=7okapk11S?7NDFj7l85*8=G&%dzxTf#m4eawjtAG>|p12c|&DQMxQWt!zhXYrX7P^@dwsv;2*1 z%U9(EJ}!Fhx@9YYlq0ujD^z!L)U;BJp z+jF<7vjP*<|4&-U5>T&+KI|7TEPr;Zshg|o+v>SL*6QQThgsDl0>%GA8C$06XWTW?C||W4wXnUls=Ot+%HkEOZe7~T z(zEy+Ia7MmB9gh9mi5NGY({QlL+OP;>wTkbn2{3x&w$=G%$Ns5)Tj|*Y-nY)8}>^e zGgY^vsmRvcZLhB8f)@A0JAR7$Oe1yOb+xZO*_>B;(_QoPX`IgD49*%j#|=0yFuXew zmh;$csB)Mo?8%(0YuBT`J&&`E0z=T7(pj^WKU{U)#&)yP+K!m#w~I?pnyO9sgIIj{ z5GrvcBZwJk+cit8N(L7N#^c35HWUIwG=&M8^d$QEHIbFzmmBQ#+-T20@Q~7aluj%BJD@#Z`Up`P z-+@t@*g@`1aAAFYl0R03Zpc4f-^8s zdW-HC=qbI2@fBUP<-Wp5y+kVcimoOJ7D&@2h8d#O4D5j@&GF!CvNw56kbf8>v~m?? z+WAfgyQKpX`nVqF?Cw{E8D_eyw1fxk*Nsi(y@n)*zD@Ld-ziL;}MM zV@Ld$TMn01>uKpoloiA9JzLu9K0_>>DJJm-&KXFWNWo-SbiJxoYSrtuvc$2F%4$0N zM0nP-VA^qQxuv%m&Q*m9HyLKrnOsy+DqEejRkBHpVAQ~vi3=EKxDXNC2!I$&vQ;S8 zM5W~jk0IS_&hMO9q5MCRWO@RV2Bu70!exdzDU`)MB^=3>eP~I$Tz9QqJ$8^%gtRSv z#bsGAED+Ft>14-=*BKL6FiVViEy=K&9vp2Z*Cl+fB_%I8BAXx+`Ztln9BvqxH}NJG z2tUHbz$l3xLfz+nJ;#-%XRimo>9nf0B(n9C?T5b8lbnC!Xv0M0Ei4*Ho5)~^!Rkv& z#rCT$+ZWb)vnjZzDa>=ptJME(-D(ldu1~Rn#>0#9%7wR*J@TMYn?`krw=kk1Dg!D`%)aX zT({S9wy%T~o`Eff>1dciZ+4Cu;+t-Tf*j4+QtY-GCE@Ms%3~PMxn=GYxo7Kjdo!+T zHo0&0FaAMJWGNh1cAaBb>CN{U_eC~SWJm;-8G7n5L~HiFWe9ONJYkp_+;cutk88s7?Tcflq!578r;Gv!`0sKddr#ON%~YS zn>D&yiD-5}cN>4bGw${$`HZ?}IA2h_T+j1nJ739y+w#idv8^+DshfdL{_p6*rc&K- zUF9o}H}gW(+=@RsjBk?o7T+1*CQ2wX%y)ahmd9>gSh*m0(%^@@tX%JeA=QYk{)kq2 zTPXwxDfAa|u3K+4qnA&+zas6?qqu+46jAa2e;7iZts8Chw&hLkI0ajY>==fLmBS=9 zP&HA&J{9%0q!!zBxbF+!z!AgE*GTFYuK|bQ+S#I1z#%!fL5M?Octr0&jAnYBX?#p8 zi)Kc1V(C|~U+7~9AJeFhL9g-?8qH7u+t{HM!zaj*lvd_sC`R*@%hG<16D6gP8(zx*SvExm-rK#O-@;DeuF#D7LSwzfR`0{68au^_Z5vQEZm9H-DO zVxF8`B)pD4^K|kVie#Ux2VM|6^khEA=Y;(Q?WPd>6LSV`J!Crm1KJwGm-vci&DGbm SSAn2^jdqf>W224+rvC=9sgE)M literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/event/PlayerQuitListener.class b/core/target/classes/net/artelnatif/nicko/event/PlayerQuitListener.class new file mode 100644 index 0000000000000000000000000000000000000000..4fc3c08aef047f8f79a37b87b90d5b2b6b88a5e4 GIT binary patch literal 1070 zcmah|+foxj5IqeEOTt1TUJwKgijqKJc#m4;wX`bY1#90Y%NU0&v()Y+ReY8&(el9$ z@S`kyHo=gp1Yf#qy7!#!KHL5K&(B`~p5UN}8O(af`N(6AP(G18DI#gw;(hBxg_bb) zSQ~Ah5@xHlpon=CJQRH_z$a|SNn5nKosPCb^^~#VERyFc5g#)5v8(MX7bX-| zwwU~Xn5@VRA2)G};4}QCwDQQt3F8l@;Zx4bwi@>N55ZiwvFc&X#~rK_>Jy7k0Tbp^ z*;9^;uu+|^N-gkkm#{aHe4zYD@}^F$GAi*Jd)tK&PVV~^`#9tM@B5wcy literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/i18n/I18N$Message$Command.class b/core/target/classes/net/artelnatif/nicko/i18n/I18N$Message$Command.class new file mode 100644 index 0000000000000000000000000000000000000000..c27e0114d7e50cf90857e17b0b217eb9cad3831b GIT binary patch literal 1079 zcmb7DTTc@~6#k|Zwyi5*y&$MiwICPmQlChQCeTo6Qc6M_eDJ|cx6^j$cBa`KNcvCw z2R^G0COr7yqd&@cmTjP>gy_Sb+kA7*+3%eB_51t>fH!!ZLJSiY;x;BR#V~uq&$#1p z)piaWC&D!hQ`=HW^Oj*^b?rEb1d56u_cg%em`omz{bR;#qS^2-Z1%|}7>kVm6)%2QUH4drHbXPdhRH7M_xNEdO zVE8o3{ty@?-6z^S5o9Y`cTf9;@rjH?{<>Hn^u;ys4G*XrOGkbWu=5)^mq^mnw53AqSkN= zED&mWjF{{G*TNm#gA-hu||HQvx zOwjP)5Aa7B?{*uhX~CB}cV^B#_s+R@_t)>Up8!^|oaaDKT z?;i@+FpR87CCwVcPZ=qVT{5%d?l@Fvd*w{5rf+SM9Cv?+oz(mBEB@PS(vnO z9XA;A0}Hq?oFPdyeDFn0erA}Y^yeB?jW1Qbm?kZ6+L*=+!&Hkm1?6|S`6x|;yzuQN zU|7iZM-CuM;x_JBn6+^ia}+hOT3J|D&URtBlGzbK!0RM!eB*8P9YeZ53Eh?S0YS#g zQi)2twJ-c#zVFdVx~yI9?Qvg*`|e@fG$hrV9o(tD)J2BGitBZ!BvsXI-xZrOq)&z= z=0m**QxSpL(t)w?h++2fXVD~XXl(-H^P?SM8u}m@A3;6^2Tv^&Lamo*n$9~R)v<00 zCu&F}|0Z{h_D>kT^a|evMxmV`6+}9rKqDHXnP=1n8dCCN^<5!v@%+UbKk+fcCPP}4X;D{fUF$> zkik6d5?J^foa@{G=^wC8ape?O&oBji!>y2s;hc$nTX;xkF=VmWS#x;YVPkkg$Y*## YyBQ2oxjDR~VqcN>n$|a1!5XIj0C*BvD*ylh literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/i18n/I18N.class b/core/target/classes/net/artelnatif/nicko/i18n/I18N.class new file mode 100644 index 0000000000000000000000000000000000000000..64575545c5537f3b2d49a38a6ac1334e4a1d91a1 GIT binary patch literal 470 zcma)2%Sr=55UkE?OtPAX&s;wm8K|kMX{ww4`ThC^aEFr`3MdMc0+dl9G*{|f$w=9ye4MXz=m?ctV~x8f6fdu4 z0y~6LtDRJ-(~(uqyhv-pw?vx$z{*j7FeQ|R$wCtvV`KGn9nW?8tmY9r?Qs&SXr@x* zb#9j2tH}sw>iKyI^{LL>MEg#eK$~!}J*zv>S*Dg+;DFHk zUu}1o#IdpqLNKycr^85PndZSo9>y#$!8ru))gR)^n`NxBk{b<_uRlQ_Y!pyq^xtfv k&KTr8z%HvI_81FjpviBASqu9(WZvFzfg^O-Y2g^1KefwhC;$Ke literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/impl/Internals.class b/core/target/classes/net/artelnatif/nicko/impl/Internals.class new file mode 100644 index 0000000000000000000000000000000000000000..2b8f0a3e671a55030aad34e5a337f5718012d13c GIT binary patch literal 302 zcmaKo!A=4}42J)LvIuB=0Zv@tVjqBbCD9NdA@RU%Si0-5<1Cr&n(%5Kd;lKGI4i`H z@zSPg`}hBP`ug|;@Q6Wz7GdN?*#s5mjoOU8O^cH4+rjaZR|(#@D!~=uesA6lJL7X+ zZugQZp;sSvMrAE7BMis$GUU9ii^3|4SF1-}IdhaSoxBhR=i#NkN~j38=W-Rw%sL@F z|Fb^-)8o!od2K7~PR literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/impl/InternalsProvider.class b/core/target/classes/net/artelnatif/nicko/impl/InternalsProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..292301ce3cb38bce72ec211644428110ebfbd1fb GIT binary patch literal 2837 zcma)8S##4y9RIByqS#Rgm~bal9Dy8Q6?#$3Q4$hxaYBlNY0K5Mym5qO$(3Y7df)fm zKJ**(wa^)t$xJ(a?icD?r+*zzyhDlSnDz{x>nB3KuR8!X~ma124 zhMF~9VVm4=7Hq4bmxRrb&|5Hu(cA`DGZHp49NYk95?ioULQ2Lq3^5F@yD@EW$6-j8 zg}cDD3NH(W?PKG)b&3$2Nn!_fO4uc1H})`W?VwSF48(>MPnVROyC5bknp68r|@*U!7Gj{s#I)Noy^@HNYgEKfdcFj zx8T)G3Z&XI?pcPzT}89`8jNmyo48_44b*)2?f-Wm8BGjJ2i17E1UuksVTdv}&TE=*oCwuR z48#A@IL)1Po4kI!A>$@)1&x=p%4M(dhFiT4@3fLXwxRZt<O-c-kXYwX4Q?7Vp^`Uq?;v$D-CYwCB++-qAE<+ z4}n6(q`1qvqd5MMP-sv%6y3Cvb(9sWZnxl0y;iem@RrUcQO2?aUB+Eh7_uKQ2$ITCDHsKA>)ts8_ITDa9NWlz zZ(R);2AOJU?aJ`VbbKQMh_UaqW`q}1e=QjBK{uv4y7xMoZBB6+BZWwvp71ReG(@1A&)`w52rEXl9nYwoI zmJ-RAaz-KK=hRFsWLu^J^p^~KTIjsswzf=t>$eO`r_)qKS<@7@pHAUO_=cVt9f9i> z4+-Bf?E7z0>h~ac*iUbu7~PMQVDA+~yEyIX`9yz%PAaX8)=d+?f<2&33|0DjXb`JO ze>ot4g&Lg_cojB5Jmz5^1N1zE^fR4Vgm*7-J1sSA2dRw{g_Rm;Vz7zrmmgto6Z?Zh zYP5+Xy(e-LldCue%ss^MiB&uUG;xad1bwcxKe~$Z{{HAAOf@kZKN0^8u_m7X0|UQ6 z`U!(1`Q?YWohmi4^ng4CjmRPv!u4vnE{1C%Twf&fJjc@%C18Nu+>8+nVw5hx_R z_}L$2oV`NjMU(TA+u5C+nP;Av*`L3@eFv}#zknPD9OOOR!63t;62|9|5uxHnzV($1 zPPO0FCtP*>om8yvZx1q3~(j)yfZe za4h@{yEZjH5)q-SNF~i0!$76lc2UHLgOZ0)j4{k-!etok2-7;1YAe#+9tDOjr4%IgKZ0IAw zFw&Gt>?Ykq5xwDuA!){%I^bcON79}zlzCffhH5r|@^XU!l0;HcW4Bo{xSMBzNcqJM zW*Nr+uq==uGp7|%olNsS z^LbzC?`oxzFeJy>>yG<8;$2}xbS=Wd)s*)RPefoY8=Ut1LdEc*nPCuDZrAZI!}1^W zZ2{btPNG0;N!$2h|8XtZcF=5Wsvy)c4d#w8$C{csv@2rsTE~XL+g3_M8zGNl5o3m? zafqHXE0ydkrriMj!*~d)GVRvrK1b56)xUt%zQXxLryM3}9V8o&@tksKHh1zGZ`Z?}?B<0mmQ&&P2`k@MVifIZoL)Lkc&oGzzl`&7!Cb2+r zk$%VG(V?_Xs1-7{sIU5{^&c2N$NihAJpvxN0+*;WwC`d43xhcI(x{?F#yQmSJasD4 R`Xbd7u|(3Pz_x<){RTiANOAxG literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/mojang/MojangAPI.class b/core/target/classes/net/artelnatif/nicko/mojang/MojangAPI.class new file mode 100644 index 0000000000000000000000000000000000000000..7715ee26e9bc589cc0fa24cb3aba6961dda3aba9 GIT binary patch literal 5377 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 literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/mojang/MojangUtils.class b/core/target/classes/net/artelnatif/nicko/mojang/MojangUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..e65d7825db9ec45ffab61244828e4533e73a5f2f GIT binary patch literal 1361 zcma)6TTc@~7(LS#wrm$#N`c}P0i_pUMHDYZQK#WPI}NkPI0i35tStbTIT*!(B%= zRGXLhfx4_Y4!2DPsjNALZC+s*P2|pgl6P#~EM*#I=C?IF&tJLREbvTnLqddM;4C0( z7`&tzvv$cXbJKZzP~dxxZkaN|B9E@RhH45P`<$yAMQ+RJMvsJE1#$HKk*Nn`2#}aE zLoAVO&{I<=BZ`Z{q)QCl|HwdCbA^G83Shs2YZxHwbhE;3@^CDXZKiDgOHFA;!Vp99 zENM?e)-3XaCD&QnnzLN9SZT;TiW>@sMOs0}^3XDpNJ&U57{Mq*$5~}oSF;OL#4Xz@ z*E1jbS4N)VYB5C!sZtq+P41|g?Qp}?9DPeQ^}?>DmaQGJWfrU5DwUt=9GJI?oFSak zP5#U+Z*qG@+cannQvSQ)8KH-(*B58?}ntwgb&*V3l91sVF9 zSn4&Wiu^7p86oE_*DmlUx^OJgVCKXMdsbjE@H1J`Z zTCptJThuBZ028=PUv0R9NtzMC3xpQ9a8yd2pzR%`z##(u_cY~ipb0k6gmD-5X#GCD zE%3F^Fk*awQDPE|-zm^f{c`FnLZ=9?AEWcjDWdDCBgBqzA(xKCqL+_w^?5oHsSlL; zAm|Map)A&8(?_^|g2V^X8OIbJVX!7GMHi9CO zDqQHNxETbIp;ckzGF^rukvO%}gl5&0V(=?J3Gb88EfE`&Fc_pbAV7#Py|Xm-VeS{F Crb9;n literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/storage/PlayerDataStore.class b/core/target/classes/net/artelnatif/nicko/storage/PlayerDataStore.class new file mode 100644 index 0000000000000000000000000000000000000000..1c775f3f99750ede23f4e2de8df09ef0e7b02704 GIT binary patch literal 4412 zcmbVP>su7p9e&S(3@jreDv?Bu5>#$7l88-Nf{CaV!p(3=O`EpEGK&MdGwaMO4e2Fq zk~V3R^nRoFdwQ=n$x5{ClP~?!r~gX-gFdzIIWw$-47B#ko|!Yh+xz}5=j`AAeeZVKNTEtYwT>OA5olaAmrWyYIt#|c+@h5Y1ZoCs#|{Pss@gkd)2KzAhO~})=mLiw zD=*g3U)H!N6z+8A=3oV_6MaC^sSqFPo7gxaBS$)i=* z$)wSMT^bs7>_(G7&%LQL2HPKXvu1uOa6NOuQc#}Juvg$jqA5R=GZuZr-P<~w%$qBg zcg_q<>5t&FD13oq$fZ!+duDlu9wDfv}@?l(TOgB zCRIVDz|I>JMVUP_FR;TZ6oVCkX6AnL_l(4QLPrk_f!fKZCN2z*o}Uuf6O+AY`d7xx zB4h2v!x|pZaSD9`yYE^!Dp5N8BZZcdcag*EiOFGsj;-_yO2(*&GWg5jJou1~593)j zX<~Zs)?x?HpUl8rNu479&O#=!(j`qF)$uXeXLYt8(Ij{0WHn|5_O7=`ykIqukJxMu zU8J#qD;jJai&zpk{@=r%VO#p-Ip?{BY0oYcWJR^bD>5N?Rb*+lXhDY~OHAUH^F~9F z^{6_~c8%eQ^UulJVOi9}gRddbQNpsoe%D(t=G1v$uqf;)c*B^mIgSnEV%Y9O|C&kzPVgQ|zzd79oe zYCG0=sW4}G)8<^BJ5B1Sn>9UKzDJwY!4;c{?@1;~^2&2D%1Y%Zp_f{Y(Wo6;lXc_G zD6n%XFtbY>)REuD^=UL8%|jM=40&Y+5l^XPvjiGrUllJrG&TZSDXxP$8{x+ zaw$k2r#BT-QsdsUS$XZ5$mR0Pj^vY-F7Z`*PB2mX!tgh?j?AoM7E~TpXQ|SPx{`w? z5%MNM32ZiAzzJ>re=}C=o68ZXgYBbR^)~yA-BnbV6M_4;mJ>*mtID;aeXFUxUZjyE z5jN({!rZ*s7LB8}lN?RO@Yv<0>0Szfg+7pFuGBp@J>{0XtaX8>H>>ro>s62Bny$~f zZr}%=Ssb&1EAG6%s|LSG1O6z`dM7Qmv+OQe#;A&y8fMPSvgdd`sV~Ie z{t?evq!c>1Xgc$G%WoTX-KA17K8d2#hJ~T3WrN~0`z0>^zkdu}Zm%1kf05-OGoPQb z11r;r>swsEX35rD@E8%#4U=U|6T}C{y36>;D)w?Q-^2VGa^syR%E&7e zV+u-&fuBSlTn5em7F^@dItZd9U_wfV%%Iv;K z7qU+KDil;-S9yCER|RBh)k7IFzh!(pw)2Un@6=&45s*is&G0Y&ATOq8i0biJJ@!@N z@52xABf6K#se-8IXH^mwC&+v2FsKqash0xYR$`WMX^|AwBd<)$Yu84)xOn1NJ dUJ7sGS6pRazvkXG^7amHD8mA4xQRcb$T++kRO7mh%uz?gX^P7p*{#CBn_Ap`oP<^UCxE`&g|{=ukyu2 zW8wpUfPa)>=B_3r@K9f7b|y35_s#75`TP3@z&>6#Q9(6;7s5wPVChOtm5fyq$r`egwJOqbPpZ-?%qLYF1T(uL3~pf{Zs*+&$;r@SEF?EHf0 zRDUA)PEiGqIahSn;h}*=io>!JOIQXxIuNWBeidtlU&qtJZ(x%upA|S;^m>jLWSLEp zXEwj{1HreVfQeWPuzH8YFG(o>65C|Cxkqw%lv-!&0ht>#)MkOOURKQz7@Y@a;#bsN G!OksT`o)0& literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/storage/StorageProvider.class b/core/target/classes/net/artelnatif/nicko/storage/StorageProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..1ee20f8a5b71202568b3e4410b3922c1fb5be282 GIT binary patch literal 177 zcmZ9GJr2S!4254xf1ncshX4tY6R@&^)Q!yqQ@KQml!hLTfdgnO@iJ27{!$LIs~th*mi!B2AK(4bUU4m6Rr&;oAGS-i*(02Y23?Ia%u=+FYvZPi>N9h@$Na6}LazT@sHuF5k;tPMeEAapT literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/storage/json/JSONStorage.class b/core/target/classes/net/artelnatif/nicko/storage/json/JSONStorage.class new file mode 100644 index 0000000000000000000000000000000000000000..d4f7743321b1172162349d5f6a0966c3d2d776d0 GIT binary patch literal 4600 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 YbE9U8LlkX5(PBzDoLS-iYPeee1F9Y{E&u=k literal 0 HcmV?d00001 diff --git a/core/target/classes/net/artelnatif/nicko/storage/sql/SQLStorageProvider.class b/core/target/classes/net/artelnatif/nicko/storage/sql/SQLStorageProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..a956c247ae706dff5ff64517b7b04a974d8545db GIT binary patch literal 1973 zcmah}U3U{z6y3K;J877HkhTd$#R4t1DR!_GD@{RYpn|5Qm{Qi#r`yS;on|@{XC_tt ziOWCW3v0PtOHg_6(FcE%OWAi4l0Zg%m^=5}d(J-l-1G70-!Fa#a2=1b7(mKE+QcA+ z1jdi#iL_kl9a#7GkCYt=46Qq!6WtI<%`fZ?BZFZBSreyV3aof4vSbh`*OQU+*zz2^ z?ptBx2l7B!;n%KJeNd^k#GSxDacU|M$T(gYNzYaS7b=Me+Zt!1S+6@$DT`5z85lQl z8aaWP|1%I6Jy21MQ1-pY&Vj)4{6exHJ65oIl$!wq@jZH-#FT-&i2}|DEG2sVS95{W zeWT}?t{0|F>p=ba$^2p z6?$KV&&?;-TW?)2>{n!xyRJlMx{uktB3lH;BDb!D~Mhe>9$ zY)YFm=83>}y_MKjY=PdDUd>hEY{mEM%|@xe7<*1$Gu(aBPzmZ^_2{=IWvRCx+Yn{x zx>YAqr3`jhg-5l0d(E(co(c_A1?Ku9Od@XJp}@KSR%MD?QQ|yXX#fHr zbIs|A%~>;`JB$Am&j+!_wM1!?=L7s_i@!h=7oWlSDb`)*I!aw&3~7vGm_ztFrF=^p zH}DB1+QsNB5ZuIa8}mn6Xw3EE&oG{2q*7dbj)@nT2Do{L-^{PL_zVlYU-%903w)1J zz5fG7`Uj*_Pb;aX!~*$W!wOkwHhHqvYlee)24{FP%_z>stY)Z_;T*Vy4ce{Idl|Q5 zg!MMlJG3nz^%qtROx_g#P!tAjxU5idwL|`hk|v*Tk-I9;VcDUT!$gNxj=_QtKFsMl vfr}ipvz>>U>>-lxAuNHLMl$^3cn{JspAAR z)tw|#!}*_ln}p?bQDmnbwV`x vjJ&>AZGFOSy}@F5gk?U#G@c1I@GE8gk*Z>soymTH literal 0 HcmV?d00001 diff --git a/core/target/classes/plugin.yml b/core/target/classes/plugin.yml new file mode 100644 index 0000000..a02a10f --- /dev/null +++ b/core/target/classes/plugin.yml @@ -0,0 +1,7 @@ +name: Nicko +main: net.artelnatif.nicko.NickoBukkit +version: 1.0-SNAPSHOT +author: Aro +api-version: 1.18 +commands: + nicko: diff --git a/core/target/maven-archiver/pom.properties b/core/target/maven-archiver/pom.properties new file mode 100644 index 0000000..b6edbe6 --- /dev/null +++ b/core/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Oct 13 10:30:55 CEST 2022 +groupId=net.artelnatif +artifactId=nicko-core +version=1.0-SNAPSHOT diff --git a/core/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/core/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..2b7a49e --- /dev/null +++ b/core/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,38 @@ +net/artelnatif/nicko/disguise/AppearanceManager.class +net/artelnatif/nicko/mojang/MojangSkin.class +net/artelnatif/nicko/command/NickoPermissions$Player.class +net/artelnatif/nicko/impl/Internals.class +net/artelnatif/nicko/anvil/AnvilManager.class +net/artelnatif/nicko/bungee/event/ServerSwitchListener.class +com/yoshiplex/rainbow/RainbowText.class +net/artelnatif/nicko/storage/PlayerDataStore.class +net/artelnatif/nicko/command/sub/NickoDisguiseSubCmd.class +net/artelnatif/nicko/mojang/MojangAPI$1.class +net/artelnatif/nicko/i18n/I18N$Message$Command.class +net/artelnatif/nicko/mojang/MojangAPI.class +net/artelnatif/nicko/command/NickoTabCompleter.class +net/artelnatif/nicko/i18n/I18N$Message.class +net/artelnatif/nicko/event/PlayerJoinListener.class +net/artelnatif/nicko/command/NickoCommand.class +net/artelnatif/nicko/disguise/NickoProfile.class +net/artelnatif/nicko/event/PlayerQuitListener.class +net/artelnatif/nicko/impl/InternalsProvider.class +net/artelnatif/nicko/config/NickoConfiguration.class +net/artelnatif/nicko/storage/json/JSONStorage.class +net/artelnatif/nicko/bungee/pluginchannel/PluginChannelHelper.class +net/artelnatif/nicko/storage/sql/SQLStorage.class +net/artelnatif/nicko/mojang/MojangUtils.class +net/artelnatif/nicko/command/NickoPermissions$Player$Command.class +net/artelnatif/nicko/utils/PlayerUtils.class +net/artelnatif/nicko/i18n/I18N.class +net/artelnatif/nicko/storage/sql/SQLStorageProvider.class +net/artelnatif/nicko/storage/StorageProvider.class +net/artelnatif/nicko/command/sub/NickoGUISubCmd.class +net/artelnatif/nicko/command/sub/NickoCheckSubCmd.class +net/artelnatif/nicko/bungee/NickoBungee.class +net/artelnatif/nicko/command/sub/NickoSubCmd.class +net/artelnatif/nicko/command/NickoPermissions.class +net/artelnatif/nicko/command/sub/NickoDebugSubCmd.class +net/artelnatif/nicko/storage/Storage.class +net/artelnatif/nicko/NickoBukkit.class +net/artelnatif/nicko/storage/json/JSONStorageProvider.class diff --git a/core/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/core/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..6021fe6 --- /dev/null +++ b/core/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,33 @@ +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/command/NickoPermissions.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorage.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/event/PlayerQuitListener.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/disguise/NickoProfile.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/command/NickoTabCompleter.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/storage/json/JSONStorageProvider.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/com/yoshiplex/rainbow/RainbowText.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/impl/InternalsProvider.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/anvil/AnvilManager.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/bungee/event/ServerSwitchListener.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/command/sub/NickoCheckSubCmd.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/storage/StorageProvider.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/NickoBukkit.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/storage/Storage.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/bungee/NickoBungee.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/bungee/pluginchannel/PluginChannelHelper.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/utils/PlayerUtils.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorageProvider.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/config/NickoConfiguration.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/command/sub/NickoDebugSubCmd.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/command/NickoCommand.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/command/sub/NickoSubCmd.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/i18n/I18N.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/impl/Internals.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/command/sub/NickoDisguiseSubCmd.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/storage/sql/SQLStorage.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/mojang/MojangSkin.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/command/sub/NickoGUISubCmd.java +/home/aro/IdeaProjects/Nicko/core/src/main/java/net/artelnatif/nicko/mojang/MojangUtils.java diff --git a/core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..10b8fe5 --- /dev/null +++ b/core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1 @@ +net/artelnatif/nicko/test/MojangAPITest.class diff --git a/core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..78a145a --- /dev/null +++ b/core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1 @@ +/home/aro/IdeaProjects/Nicko/core/src/test/java/net/artelnatif/nicko/test/MojangAPITest.java diff --git a/core/target/nicko-core-1.0-SNAPSHOT.jar b/core/target/nicko-core-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..0edbadc77551aa13c65090fadca0522dd6bab5ac GIT binary patch literal 170849 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℞uJ9?^Y<j5W(3)qQ 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 literal 0 HcmV?d00001 diff --git a/dist/dependency-reduced-pom.xml b/dist/dependency-reduced-pom.xml new file mode 100644 index 0000000..dd3ab08 --- /dev/null +++ b/dist/dependency-reduced-pom.xml @@ -0,0 +1,36 @@ + + + + nicko-parent + net.artelnatif + 1.0-SNAPSHOT + + 4.0.0 + dist + 1.0-SNAPSHOT + + ../target + nicko-${project.version} + + + maven-shade-plugin + 3.3.1-SNAPSHOT + + + package + + shade + + + + + net.artelnatif:nicko-* + + + + + + + + + diff --git a/dist/pom.xml b/dist/pom.xml new file mode 100644 index 0000000..f090d9e --- /dev/null +++ b/dist/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + + net.artelnatif + nicko-parent + 1.0-SNAPSHOT + + + dist + 1.0-SNAPSHOT + + + ../target + nicko-${project.version} + + + org.apache.maven.plugins + maven-shade-plugin + 3.3.1-SNAPSHOT + + + package + + shade + + + + + net.artelnatif:nicko-* + + + + + + + + + + + + net.artelnatif + nicko-core + ${project.parent.version} + + + net.artelnatif + nicko-v1_18_R2 + ${project.parent.version} + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..08ef469 --- /dev/null +++ b/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + net.artelnatif + nicko-parent + 1.0-SNAPSHOT + Nicko + pom + + + core + dist + v1_18_R2 + v1_18_R1 + + + + 17 + 17 + + \ No newline at end of file diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..3d5d6e9 --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Oct 13 10:30:56 CEST 2022 +groupId=net.artelnatif +artifactId=dist +version=1.0-SNAPSHOT diff --git a/target/original-nicko-1.0-SNAPSHOT.jar b/target/original-nicko-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..74679f2484f43e70ccc12947ea3ca0b234c03127 GIT binary patch literal 1710 zcmWIWW@h1H0D-%~zM)_Sl;8x?zOEsTx}JV+`TRsgZ*3~+9=KSU$gDb`lo)+nNojal9t?R_W{$xqm6fx}s zDiu5DbO#B02L+eR)mkee!!0z~I7qZc_;k=`k)E$QUwA5a&hauX_Bybs)Agr7Ue~&C zFS845#kR~7xZ?B}U=G7{KR>d=audr^^WeU~R4j+7I4`wCFR`d3H775zBr^?3WgxKcdH8}1|EWob zFCFHZx#nBY)=T?BwuR#zu3e`PCjoCcbS*NrTA1>!xFEL zpD#22>p6DK+hCPly3y^-I)mGJ+cT_7*{(nS$nw8xM|=c-wp8IlUQwP|&t{$9a`~RO zTd()$oF5kjl9mhW_sH5H=8Z1Cr|wDTHqYG*gGuA+iOe3p6a-o+A75zlYXTXO!d9M zJE7q2;~#T^`G3WJSTob}&{Wmz3?hIRrCkS$;mTLMziuU|nlx?9*-GzyBwe|LCzlv?Suw zmVhrMl6=uy%Nd`UTw1s@A#&n@nMu1ooKrgYN25+@$EErFJ^I}-{ijb>aqL^*$}(S~ zwQbXGl^wfPr@DlzFS?WV-%Ejg;tk>RvyWbV^u6zQcmHf>d07iJQ6BxPi3?v@KYSng zI7a5}w7oXAC+i|uXPvW%13gxSeDKxrKKnR`@1#cP2YPpw6Gk;cYYpY`0b+E3F@u1v4#Ta02W@Hj!#$6r(eE + + 4.0.0 + + + net.artelnatif + nicko-parent + 1.0-SNAPSHOT + + + nicko-v1_18_R1 + 1.0-SNAPSHOT + + + + org.spigotmc + spigot + 1.18.1-R0.1-SNAPSHOT + provided + + + net.artelnatif + nicko-core + 1.0-SNAPSHOT + + + \ No newline at end of file diff --git a/v1_18_R1/src/main/java/net/artelnatif/impl/v1_18_R1.java b/v1_18_R1/src/main/java/net/artelnatif/impl/v1_18_R1.java new file mode 100644 index 0000000..1bd0558 --- /dev/null +++ b/v1_18_R1/src/main/java/net/artelnatif/impl/v1_18_R1.java @@ -0,0 +1,132 @@ +package net.artelnatif.impl; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; +import com.mojang.authlib.properties.PropertyMap; +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.impl.Internals; +import net.artelnatif.nicko.mojang.MojangSkin; +import net.minecraft.network.chat.IChatBaseComponent; +import net.minecraft.network.protocol.game.*; +import net.minecraft.network.syncher.DataWatcher; +import net.minecraft.network.syncher.DataWatcherObject; +import net.minecraft.network.syncher.DataWatcherRegistry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.EntityPlayer; +import net.minecraft.world.level.EnumGamemode; +import net.minecraft.world.level.World; +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_18_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.inventory.ItemStack; + +import java.io.IOException; +import java.util.Optional; +import java.util.concurrent.ExecutionException; + +public class v1_18_R1 implements Internals { + @Override + public void updateSelf(Player player) { + final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); + final ResourceKey levelResourceKey = entityPlayer.x().aa(); + final CraftWorld world = entityPlayer.W().getWorld(); + // again, wtf is that + // f*ck obfuscation + final PacketPlayOutRespawn respawn = new PacketPlayOutRespawn(entityPlayer.W().q_(), + levelResourceKey, world.getSeed(), + entityPlayer.d.b(), entityPlayer.d.c(), + false, + false, + false); + + final boolean wasFlying = player.isFlying(); + final ItemStack itemOnCursor = player.getItemOnCursor(); + entityPlayer.b.a(respawn); + player.setFlying(wasFlying); + player.setItemOnCursor(itemOnCursor); + player.teleport(player.getLocation(), PlayerTeleportEvent.TeleportCause.PLUGIN); + player.updateInventory(); + } + + @Override + public void updateOthers(Player player) { + final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); + final PacketPlayOutEntityDestroy destroy = new PacketPlayOutEntityDestroy(entityPlayer.getBukkitEntity().getEntityId()); + final PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(entityPlayer); + + /* + BIT MASKS: + 0x01 Cape enabled + 0x02 Jacket enabled + 0x04 Left sleeve enabled + 0x08 Right sleeve enabled + 0x10 Left pants leg enabled + 0x20 Right pants leg enabled + 0x40 Hat enabled + */ + final DataWatcher dataWatcher = entityPlayer.ai(); + final DataWatcherObject displayedSkinPartDataWatcher = new DataWatcherObject<>(17, DataWatcherRegistry.a); + dataWatcher.b(displayedSkinPartDataWatcher, (byte) 0x7f); // 127, all masks combined + final PacketPlayOutEntityMetadata entityMetadata = new PacketPlayOutEntityMetadata(entityPlayer.getBukkitEntity().getEntityId(), dataWatcher, true); + + Bukkit.getOnlinePlayers().forEach(online -> { + EntityPlayer onlineEntityPlayer = ((CraftPlayer) online).getHandle(); + if (onlineEntityPlayer.getBukkitEntity().getUniqueId() != player.getUniqueId()) { + onlineEntityPlayer.b.a(destroy); + onlineEntityPlayer.b.a(spawn); + onlineEntityPlayer.b.a(entityMetadata); + } + }); + } + + @Override + public void updateProfile(Player player, NickoProfile profile, boolean skinChange) { + final CraftPlayer craftPlayer = (CraftPlayer) player; + final EntityPlayer entityPlayer = craftPlayer.getHandle(); + Optional skin; + + final PacketPlayOutPlayerInfo remove = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.e, entityPlayer); + entityPlayer.b.a(remove); + + final PacketPlayOutPlayerInfo add = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.a); + final GameProfile gameProfile = new GameProfile(player.getUniqueId(), profile.getName()); + + if (skinChange) { + try { + final Optional uuid = NickoBukkit.getInstance().getMojangAPI().getUUID(profile.getSkin()); + if (uuid.isPresent()) { + skin = NickoBukkit.getInstance().getMojangAPI().getSkin(uuid.get()); + if (skin.isPresent()) { + final PropertyMap properties = gameProfile.getProperties(); + properties.put("textures", new Property("textures", skin.get().value(), skin.get().signature())); + updateSelf(player); + } else { + player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get skin from Mojang."); + } + } else { + player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get username from Mojang. Does the user exists?"); + } + } catch (IOException e) { + player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cAn error occurred."); + } catch (ExecutionException e) { + player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get skin from cache."); + } + } + + add.b().clear(); + add.b().add(new PacketPlayOutPlayerInfo.PlayerInfoData(gameProfile, + player.getPing(), + EnumGamemode.a(player.getGameMode().ordinal()), IChatBaseComponent.a(profile.getName()))); + entityPlayer.b.a(add); + + Bukkit.getOnlinePlayers().forEach(online -> { + EntityPlayer onlineEntityPlayer = ((CraftPlayer) online).getHandle(); + onlineEntityPlayer.b.a(remove); + onlineEntityPlayer.b.a(add); + }); + updateOthers(player); + } +} diff --git a/v1_18_R1/target/classes/net/artelnatif/impl/v1_18_R1.class b/v1_18_R1/target/classes/net/artelnatif/impl/v1_18_R1.class new file mode 100644 index 0000000000000000000000000000000000000000..e354efa2556d6a9423207f01cd3051354769bbe7 GIT binary patch literal 11055 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 IC(k4Jb8@Rq1ONa4 literal 0 HcmV?d00001 diff --git a/v1_18_R1/target/maven-archiver/pom.properties b/v1_18_R1/target/maven-archiver/pom.properties new file mode 100644 index 0000000..11adcc8 --- /dev/null +++ b/v1_18_R1/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Oct 13 10:30:56 CEST 2022 +groupId=net.artelnatif +artifactId=nicko-v1_18_R1 +version=1.0-SNAPSHOT diff --git a/v1_18_R1/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/v1_18_R1/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..27ed777 --- /dev/null +++ b/v1_18_R1/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1 @@ +net/artelnatif/impl/v1_18_R1.class diff --git a/v1_18_R1/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/v1_18_R1/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..86ffd05 --- /dev/null +++ b/v1_18_R1/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1 @@ +/home/aro/IdeaProjects/Nicko/v1_18_R1/src/main/java/net/artelnatif/impl/v1_18_R1.java diff --git a/v1_18_R1/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/v1_18_R1/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/v1_18_R1/target/nicko-v1_18_R1-1.0-SNAPSHOT.jar b/v1_18_R1/target/nicko-v1_18_R1-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..1f31138181e54d8f728b124c3ca105fc8bd0adb8 GIT binary patch literal 6111 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 literal 0 HcmV?d00001 diff --git a/v1_18_R2/pom.xml b/v1_18_R2/pom.xml new file mode 100644 index 0000000..2d8d8f7 --- /dev/null +++ b/v1_18_R2/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + + net.artelnatif + nicko-parent + 1.0-SNAPSHOT + + + nicko-v1_18_R2 + 1.0-SNAPSHOT + + + + org.spigotmc + spigot + 1.18.2-R0.1-SNAPSHOT + provided + + + net.artelnatif + nicko-core + 1.0-SNAPSHOT + + + \ No newline at end of file diff --git a/v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java b/v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java new file mode 100644 index 0000000..6775f40 --- /dev/null +++ b/v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java @@ -0,0 +1,131 @@ +package net.artelnatif.nicko.impl; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; +import com.mojang.authlib.properties.PropertyMap; +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.mojang.MojangSkin; +import net.minecraft.core.Holder; +import net.minecraft.network.chat.IChatBaseComponent; +import net.minecraft.network.protocol.game.*; +import net.minecraft.network.syncher.DataWatcher; +import net.minecraft.network.syncher.DataWatcherObject; +import net.minecraft.network.syncher.DataWatcherRegistry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.EntityPlayer; +import net.minecraft.world.level.EnumGamemode; +import net.minecraft.world.level.World; +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.inventory.ItemStack; + +import java.io.IOException; +import java.util.Optional; +import java.util.concurrent.ExecutionException; + +public class v1_18_R2 implements Internals { + @Override + public void updateSelf(Player player) { + final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); + final ResourceKey levelResourceKey = entityPlayer.x().aa(); + final CraftWorld world = entityPlayer.s.getWorld(); + // wtf is that ? + final PacketPlayOutRespawn respawn = new PacketPlayOutRespawn(Holder.a(entityPlayer.s.q_()), + levelResourceKey, world.getSeed(), + entityPlayer.d.b(), entityPlayer.d.c(), + false, + false, + false); + + final boolean wasFlying = player.isFlying(); + final ItemStack itemOnCursor = player.getItemOnCursor(); + entityPlayer.b.a(respawn); + player.setFlying(wasFlying); + player.setItemOnCursor(itemOnCursor); + player.teleport(player.getLocation(), PlayerTeleportEvent.TeleportCause.PLUGIN); + player.updateInventory(); + } + + @Override + public void updateOthers(Player player) { + final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); + final PacketPlayOutEntityDestroy destroy = new PacketPlayOutEntityDestroy(entityPlayer.getBukkitEntity().getEntityId()); + final PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(entityPlayer); + + /* + BIT MASKS: + 0x01 Cape enabled + 0x02 Jacket enabled + 0x04 Left sleeve enabled + 0x08 Right sleeve enabled + 0x10 Left pants leg enabled + 0x20 Right pants leg enabled + 0x40 Hat enabled + */ + final DataWatcher dataWatcher = entityPlayer.ai(); + final DataWatcherObject displayedSkinPartDataWatcher = new DataWatcherObject<>(17, DataWatcherRegistry.a); + dataWatcher.b(displayedSkinPartDataWatcher, (byte) 0x7f); // 127, all masks combined + final PacketPlayOutEntityMetadata entityMetadata = new PacketPlayOutEntityMetadata(entityPlayer.getBukkitEntity().getEntityId(), dataWatcher, true); + + Bukkit.getOnlinePlayers().forEach(online -> { + EntityPlayer onlineEntityPlayer = ((CraftPlayer) online).getHandle(); + if (onlineEntityPlayer.getBukkitEntity().getUniqueId() != player.getUniqueId()) { + onlineEntityPlayer.b.a(destroy); + onlineEntityPlayer.b.a(spawn); + onlineEntityPlayer.b.a(entityMetadata); + } + }); + } + + @Override + public void updateProfile(Player player, NickoProfile profile, boolean skinChange) { + final CraftPlayer craftPlayer = (CraftPlayer) player; + final EntityPlayer entityPlayer = craftPlayer.getHandle(); + Optional skin; + + final PacketPlayOutPlayerInfo remove = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.e, entityPlayer); + entityPlayer.b.a(remove); + + final PacketPlayOutPlayerInfo add = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.a); + final GameProfile gameProfile = new GameProfile(player.getUniqueId(), profile.getName()); + + if (skinChange) { + try { + final Optional uuid = NickoBukkit.getInstance().getMojangAPI().getUUID(profile.getSkin()); + if (uuid.isPresent()) { + skin = NickoBukkit.getInstance().getMojangAPI().getSkin(uuid.get()); + if (skin.isPresent()) { + final PropertyMap properties = gameProfile.getProperties(); + properties.put("textures", new Property("textures", skin.get().value(), skin.get().signature())); + updateSelf(player); + } else { + player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get skin from Mojang."); + } + } else { + player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get username from Mojang. Does the user exists?"); + } + } catch (IOException e) { + player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cAn error occurred."); + } catch (ExecutionException e) { + player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get skin from cache."); + } + } + + add.b().clear(); + add.b().add(new PacketPlayOutPlayerInfo.PlayerInfoData(gameProfile, + player.getPing(), + EnumGamemode.a(player.getGameMode().ordinal()), IChatBaseComponent.a(profile.getName()))); + entityPlayer.b.a(add); + + Bukkit.getOnlinePlayers().forEach(online -> { + EntityPlayer onlineEntityPlayer = ((CraftPlayer) online).getHandle(); + onlineEntityPlayer.b.a(remove); + onlineEntityPlayer.b.a(add); + }); + updateOthers(player); + } +} diff --git a/v1_18_R2/target/classes/net/artelnatif/nicko/impl/v1_18_R2.class b/v1_18_R2/target/classes/net/artelnatif/nicko/impl/v1_18_R2.class new file mode 100644 index 0000000000000000000000000000000000000000..1c232b200aa2575522485e2812c0dd81c84fb1db GIT binary patch literal 11132 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 AV*mgE literal 0 HcmV?d00001 diff --git a/v1_18_R2/target/maven-archiver/pom.properties b/v1_18_R2/target/maven-archiver/pom.properties new file mode 100644 index 0000000..a1410d5 --- /dev/null +++ b/v1_18_R2/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Oct 13 10:30:56 CEST 2022 +groupId=net.artelnatif +artifactId=nicko-v1_18_R2 +version=1.0-SNAPSHOT diff --git a/v1_18_R2/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/v1_18_R2/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..3d6c76d --- /dev/null +++ b/v1_18_R2/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1 @@ +net/artelnatif/nicko/impl/v1_18_R2.class diff --git a/v1_18_R2/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/v1_18_R2/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..54e9985 --- /dev/null +++ b/v1_18_R2/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1 @@ +/home/aro/IdeaProjects/Nicko/v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java diff --git a/v1_18_R2/target/nicko-v1_18_R2-1.0-SNAPSHOT.jar b/v1_18_R2/target/nicko-v1_18_R2-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..22af3c87b14d201a5b19a64f5023ab11ee864bfb GIT binary patch literal 6302 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 Q8TRGjcG>mu|Ja281AEJIUH||9 literal 0 HcmV?d00001