From 3580ea0b2c2050b5a08e455c51c6f0db0b477651 Mon Sep 17 00:00:00 2001 From: Avior <2bazert@gmail.com> Date: Wed, 5 Sep 2018 20:11:38 +0200 Subject: [PATCH] quick --- .gitignore | 164 +--------- .gitlab-ci.yml | 60 ++++ .idea/.name | 1 - .idea/codeStyleSettings.xml | 9 - .idea/compiler.xml | 18 -- .idea/encodings.xml | 6 - .idea/kotlinc.xml | 7 - ...oglecode_json_simple_json_simple_1_1_1.xml | 13 - .../Maven__commons_lang_commons_lang_2_6.xml | 13 - .idea/libraries/Maven__junit_junit_4_10.xml | 13 - .../Maven__org_hamcrest_hamcrest_core_1_1.xml | 13 - .idea/misc.xml | 18 -- .idea/modules.xml | 8 - .idea/runConfigurations/BetterTP.xml | 27 -- .idea/runConfigurations/Windows_Server.xml | 11 - .idea/vcs.xml | 6 - BetterTP.iml | 35 --- buildNumber.properties | 3 + dependency-reduced-pom.xml | 139 +++++++++ pom.xml | 194 ++++++------ settings-security.xml | 3 + settings.xml | 12 + .../Minecraft/BetterTP/Api/API.java | 19 ++ .../DeltaWings/Minecraft/BetterTP/Charts.java | 32 ++ .../Minecraft/BetterTP/Commands/Bettertp.java | 63 +++- .../Minecraft/BetterTP/Commands/Home.java | 2 + .../Minecraft/BetterTP/Commands/Homelist.java | 3 +- .../Minecraft/BetterTP/Libs/FileManager.java | 89 ++++++ .../DeltaWings/Minecraft/BetterTP/Main.java | 12 +- .../Minecraft/BetterTP/Metrics.java | 284 ------------------ .../BetterTP/TabCompleter/BettertpTab.java | 9 +- .../BetterTP/TabCompleter/DelhomeTab.java | 20 ++ .../BetterTP/TabCompleter/HomeTab.java | 19 ++ 33 files changed, 592 insertions(+), 733 deletions(-) create mode 100644 .gitlab-ci.yml delete mode 100644 .idea/.name delete mode 100644 .idea/codeStyleSettings.xml delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/encodings.xml delete mode 100644 .idea/kotlinc.xml delete mode 100644 .idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml delete mode 100644 .idea/libraries/Maven__commons_lang_commons_lang_2_6.xml delete mode 100644 .idea/libraries/Maven__junit_junit_4_10.xml delete mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/runConfigurations/BetterTP.xml delete mode 100644 .idea/runConfigurations/Windows_Server.xml delete mode 100644 .idea/vcs.xml delete mode 100644 BetterTP.iml create mode 100644 buildNumber.properties create mode 100644 dependency-reduced-pom.xml create mode 100644 settings-security.xml create mode 100644 settings.xml create mode 100644 src/main/java/net/DeltaWings/Minecraft/BetterTP/Api/API.java create mode 100644 src/main/java/net/DeltaWings/Minecraft/BetterTP/Charts.java create mode 100644 src/main/java/net/DeltaWings/Minecraft/BetterTP/Libs/FileManager.java delete mode 100644 src/main/java/net/DeltaWings/Minecraft/BetterTP/Metrics.java create mode 100644 src/main/java/net/DeltaWings/Minecraft/BetterTP/TabCompleter/DelhomeTab.java create mode 100644 src/main/java/net/DeltaWings/Minecraft/BetterTP/TabCompleter/HomeTab.java diff --git a/.gitignore b/.gitignore index 8e6d769..78e6485 100644 --- a/.gitignore +++ b/.gitignore @@ -1,159 +1,9 @@ -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 +#VSCode +.vscode -# User-specific stuff: -.idea/workspace.xml -.idea/tasks.xml - -# Sensitive or high-churn files: -.idea/dataSources.ids -.idea/dataSources.xml -.idea/dataSources.local.xml -.idea/sqlDataSources.xml -.idea/dynamic.xml -.idea/uiDesigner.xml - -# Gradle: -.idea/gradle.xml -.idea/libraries - -# Mongo Explorer plugin: -.idea/mongoSettings.xml - -## File-based project format: -*.iws - -## Plugin-specific files: - -# IntelliJ -/out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties -src/test/ +#Java target/ -/.idea/dictionaries/ -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff: -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/dictionaries - -# Sensitive or high-churn files: -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.xml -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml - -# Gradle: -.idea/**/gradle.xml -.idea/**/libraries - -# CMake -cmake-build-debug/ - -# Mongo Explorer plugin: -.idea/**/mongoSettings.xml - -## File-based project format: - -## Plugin-specific files: - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin - -# JIRA plugin - -# Cursive Clojure plugin -.idea/replstate.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -### Maven template -pom.xml.tag -pom.xml.releaseBackup -pom.xml.versionsBackup -pom.xml.next -release.properties -dependency-reduced-pom.xml -buildNumber.properties -.mvn/timing.properties - -# Avoid ignoring Maven wrapper jar file (.jar files are usually ignored) -!/.mvn/wrapper/maven-wrapper.jar -### Linux template -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* -### Windows template -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msm -*.msp - -# Windows shortcuts -*.lnk -### Java template -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* +.classpath +.project +.settings/ +bin/ \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..46bd39c --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,60 @@ +# This file is a template, and might need editing before it works on your project. +--- + +variables: + # This will supress any download for dependencies and plugins or upload messages which would clutter the console log. + # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work. + MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true" + # As of Maven 3.3.0 instead of this you may define these options in `.mvn/maven.config` so the same config is used + # when running from the command line. + # `installAtEnd` and `deployAtEnd` are only effective with recent version of the corresponding plugins. + MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true" + +# Cache downloaded dependencies and plugins between builds. +# To keep cache across branches add 'key: "$CI_JOB_REF_NAME"' +cache: + paths: + - .m2/repository + +# For `master` branch run `mvn deploy` automatically. +# Here you need to decide whether you want to use JDK7 or 8. +# To get this working you need to define a volume while configuring your gitlab-ci-multi-runner. +# Mount your `settings.xml` as `/root/.m2/settings.xml` which holds your secrets. +# See https://maven.apache.org/settings.html +Build: + # Use stage test here, so the pages job may later pickup the created site. + stage: build + script: + - mvn -B clean install + - mvn -B test + # Archive up the built documentation site. + artifacts: + paths: + - target/ + image: maven + +Test: + # Use stage test here, so the pages job may later pickup the created site. + stage: test + script: + - mvn -B test + # Archive up the built documentation site. + artifacts: + paths: + - target/ + image: maven + +Deploy: + # Use stage test here, so the pages job may later pickup the created site. + stage: deploy + script: + - cp ./settings-security.xml $HOME/.m2/settings-security.xml + - cp ./settings.xml $HOME/.m2/settings.xml + - mvn -B deploy + only: + - tags + # Archive up the built documentation site. + artifacts: + paths: + - target + image: maven diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index 991d088..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -BetterTP \ No newline at end of file diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml deleted file mode 100644 index 5555dd2..0000000 --- a/.idea/codeStyleSettings.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 419d939..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index b26911b..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml deleted file mode 100644 index 1c24f9a..0000000 --- a/.idea/kotlinc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml b/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml deleted file mode 100644 index f3f3738..0000000 --- a/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml b/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml deleted file mode 100644 index 2ec8376..0000000 --- a/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__junit_junit_4_10.xml b/.idea/libraries/Maven__junit_junit_4_10.xml deleted file mode 100644 index ed8bf5f..0000000 --- a/.idea/libraries/Maven__junit_junit_4_10.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml deleted file mode 100644 index acdf443..0000000 --- a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 8b5c9a3..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 7ddb7d9..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/runConfigurations/BetterTP.xml b/.idea/runConfigurations/BetterTP.xml deleted file mode 100644 index 9d15b4f..0000000 --- a/.idea/runConfigurations/BetterTP.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/runConfigurations/Windows_Server.xml b/.idea/runConfigurations/Windows_Server.xml deleted file mode 100644 index 7d51cc1..0000000 --- a/.idea/runConfigurations/Windows_Server.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/BetterTP.iml b/BetterTP.iml deleted file mode 100644 index b4374a5..0000000 --- a/BetterTP.iml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - SPIGOT - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/buildNumber.properties b/buildNumber.properties new file mode 100644 index 0000000..d785c61 --- /dev/null +++ b/buildNumber.properties @@ -0,0 +1,3 @@ +#maven.buildNumber.plugin properties file +#Wed Aug 29 23:55:34 CEST 2018 +buildNumber=8 diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml new file mode 100644 index 0000000..d72fbf0 --- /dev/null +++ b/dependency-reduced-pom.xml @@ -0,0 +1,139 @@ + + + 4.0.0 + net.DeltaWings + BetterTP + BetterTP + 1.0.0 + The best teleportation plugin + https://delta-wings.net/ + + + + org.apache.maven.wagon + wagon-ftp + 1.0-beta-6 + + + clean package + + + true + src/main/resources + + + ${project.name} + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + maven-shade-plugin + 3.1.1 + + + package + + shade + + + + + true + + + org.bstats + net.DeltaWings.Minecraft.BetterTP.Libs + + + + + + + + + spigotmc-repo + https://hub.spigotmc.org/nexus/content/groups/public/ + + + bstats-repo + http://repo.bstats.org/content/repositories/releases/ + + + + + org.spigotmc + spigot-api + 1.13.1-R0.1-SNAPSHOT + provided + + + commons-lang + commons-lang + + + json-simple + com.googlecode.json-simple + + + guava + com.google.guava + + + gson + com.google.code.gson + + + snakeyaml + org.yaml + + + bungeecord-chat + net.md-5 + + + + + org.bukkit + bukkit + 1.13.1-R0.1-SNAPSHOT + provided + + + commons-lang + commons-lang + + + json-simple + com.googlecode.json-simple + + + guava + com.google.guava + + + gson + com.google.code.gson + + + snakeyaml + org.yaml + + + + + + + ftp-repository + ftp://***REMOVED***/files/m2/ + + + + UTF-8 + + diff --git a/pom.xml b/pom.xml index af96b41..8637eb6 100644 --- a/pom.xml +++ b/pom.xml @@ -1,95 +1,115 @@ - 4.0.0 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - Delta-Wings - BetterTP - BetterTP - 1.0.0 - jar - The best teleportation plugin - https://delta-wings.net/ + net.DeltaWings + BetterTP - - UTF-8 - - - scm:svn:http://127.0.0.1/dummy - scm:svn:https://127.0.0.1/dummy - HEAD - http://127.0.0.1/dummy - - - ${project.artifactId}-${project.version} - clean package - - - 3.1 - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 + BetterTP + 1.0.0 + The best teleportation plugin + https://delta-wings.net/ - - - - org.codehaus.mojo - buildnumber-maven-plugin - 1.4 - - - buildnumber - validate - - create - - - - - {0,number} - - buildNumber - - false - false - unknownbuild - - - - - - src/main/resources - true - - - + jar - - - spigotmc-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - sonatype - https://oss.sonatype.org/content/groups/public/ - - + + UTF-8 + - - - org.spigotmc - spigot-api - 1.12-R0.1-SNAPSHOT - provided - - - org.bukkit - bukkit - 1.12-R0.1-SNAPSHOT - provided - - + + + ftp-repository + ftp://***REMOVED***/files/m2/ + + + + + ${project.name} + clean package + + + org.apache.maven.wagon + wagon-ftp + 1.0-beta-6 + + + + + 3.1 + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.1 + + true + + + org.bstats + net.DeltaWings.Minecraft.BetterTP.Libs + + + + + + package + + shade + + + + + + + + + src/main/resources + true + + + + + + + spigotmc-repo + https://hub.spigotmc.org/nexus/content/groups/public/ + + + + bstats-repo + http://repo.bstats.org/content/repositories/releases/ + + + + + + org.spigotmc + spigot-api + 1.13.1-R0.1-SNAPSHOT + provided + + + + org.bukkit + bukkit + 1.13.1-R0.1-SNAPSHOT + provided + + + + org.bstats + bstats-bukkit + 1.2 + compile + + \ No newline at end of file diff --git a/settings-security.xml b/settings-security.xml new file mode 100644 index 0000000..b0d6082 --- /dev/null +++ b/settings-security.xml @@ -0,0 +1,3 @@ + + {***REMOVED***} + \ No newline at end of file diff --git a/settings.xml b/settings.xml new file mode 100644 index 0000000..cb9f520 --- /dev/null +++ b/settings.xml @@ -0,0 +1,12 @@ + + + + + ftp-repository + deltawinbo + {***REMOVED***} + + + \ No newline at end of file diff --git a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Api/API.java b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Api/API.java new file mode 100644 index 0000000..d745aa1 --- /dev/null +++ b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Api/API.java @@ -0,0 +1,19 @@ +package net.DeltaWings.Minecraft.BetterTP.Api; + +import java.util.ArrayList; + +import net.DeltaWings.Minecraft.BetterTP.Libs.Config; + +/** + * API + */ +public class API { + + public static ArrayList homelist(String player) { + Config c = new Config("data", player); + if(c.exist()) { + return c.getSection(""); + } + return new ArrayList<>(); + } +} \ No newline at end of file diff --git a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Charts.java b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Charts.java new file mode 100644 index 0000000..226bab8 --- /dev/null +++ b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Charts.java @@ -0,0 +1,32 @@ +package net.DeltaWings.Minecraft.BetterTP; + +import java.io.File; +import java.util.concurrent.Callable; + +import org.bstats.bukkit.Metrics; + +import net.DeltaWings.Minecraft.BetterTP.Libs.Config; +import net.DeltaWings.Minecraft.BetterTP.Libs.FileManager; + +public class Charts { + + private Main i = Main.getInstance(); + private String j = File.separator; + private final File d = new File(i.getDataFolder() + j + "data"); + + public Charts(Metrics metrics) { + + metrics.addCustomChart(new Metrics.SingleLineChart("home_number", new Callable(){ + + @Override + public Integer call() throws Exception { + Integer result = 0; + for (String conf : FileManager.listFiles(d)) { + Config c = new Config("data", conf); + result += c.getSection("").size(); + } + return result; + } + })); + } +} diff --git a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Commands/Bettertp.java b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Commands/Bettertp.java index ac550ee..2487438 100644 --- a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Commands/Bettertp.java +++ b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Commands/Bettertp.java @@ -1,7 +1,9 @@ package net.DeltaWings.Minecraft.BetterTP.Commands; +import net.DeltaWings.Minecraft.BetterTP.Api.API; import net.DeltaWings.Minecraft.BetterTP.Libs.Config; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -12,13 +14,23 @@ import java.io.IOException; public class Bettertp implements CommandExecutor { + Config m = new Config("", "messages"); + @Override public boolean onCommand(CommandSender s, Command unu2, String unu1, String[] a) { - Config m = new Config("", "messages"); + Config g = new Config("", "config"); if(s instanceof Player && s.hasPermission("bettertp.admin")) { Player p = (Player) s; - if(a.length == 2) { + if((a.length == 2 || a.length == 3) && a[0].equalsIgnoreCase("home")) { + if(a.length == 2) home(s, a[1], "home"); + else home(s, a[1], a[2]); + } else if((a.length == 2 || a.length == 3) && a[0].equalsIgnoreCase("delhome")) { + if(a.length == 2) delhome(s, a[1], "home"); + else delhome(s, a[1], a[2]); + } else if(a.length == 2 && a[0].equalsIgnoreCase("homelist")) { + homelist(s, a[1]); + } else if(a.length == 2) { if(a[0].equalsIgnoreCase("set")) { if(a[1].equalsIgnoreCase("spawn")) { Config c = null; @@ -98,4 +110,51 @@ public class Bettertp implements CommandExecutor { } return false; } + + + + + + private void set() { + + } + + private void help() { + + } + + private void home(CommandSender s, String player, String home) { + Config cp = new Config("data", player); + if(cp.exist()) { + String t = home+"."; + ((Player) s).teleport(new Location(Bukkit.getServer().getWorld(cp.getString(t+"world")), cp.getDouble(t+"x"), cp.getDouble(t+"y"), cp.getDouble(t+"z"))); + } + ((Player) s).sendMessage("Sended you to " + player + " home : " + home); + } + + private void delhome(CommandSender s, String player, String home) { + Config cp = new Config("data", player); + if(cp.exist() && cp.isSet(home)) { + cp.set(home, null); + try { + cp.save(); + } catch ( IOException e ) { + e.printStackTrace(); + s.sendMessage("Error, Please call an Admin !"); + } + s.sendMessage(m.getString("home.deleted").replace("[home]", home).replace("&", "§")); + } + } + + private void homelist(CommandSender s, String player) { + Config c = new Config("", "messages"); + s.sendMessage(c.getString("help.top").replace("[help]", "Homelist").replace("&", "§")); + for(String a : API.homelist(s.getName())) { + s.sendMessage(("&4| &9").replace("&", "§") + a); + } + s.sendMessage(c.getString("help.bottom").replace("[help]", "Homelist").replace("&", "§")); + + } } + + diff --git a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Commands/Home.java b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Commands/Home.java index 677876e..e5cdcb4 100644 --- a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Commands/Home.java +++ b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Commands/Home.java @@ -53,3 +53,5 @@ public class Home implements CommandExecutor { return false; } } + +// /home [home] \ No newline at end of file diff --git a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Commands/Homelist.java b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Commands/Homelist.java index a1b7628..51e91ba 100644 --- a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Commands/Homelist.java +++ b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Commands/Homelist.java @@ -1,6 +1,7 @@ package net.DeltaWings.Minecraft.BetterTP.Commands; import net.DeltaWings.Minecraft.BetterTP.Libs.Config; +import net.DeltaWings.Minecraft.BetterTP.Api.API; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -13,7 +14,7 @@ public class Homelist implements CommandExecutor { if(s instanceof Player) { Config c = new Config("", "messages"); s.sendMessage(c.getString("help.top").replace("[help]", "Homelist").replace("&", "§")); - for(String a : new Config("data", s.getName()).getSection("")) { + for(String a : API.homelist(s.getName())) { s.sendMessage(("&4| &9").replace("&", "§") + a); } s.sendMessage(c.getString("help.bottom").replace("[help]", "Homelist").replace("&", "§")); diff --git a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Libs/FileManager.java b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Libs/FileManager.java new file mode 100644 index 0000000..631fcc9 --- /dev/null +++ b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Libs/FileManager.java @@ -0,0 +1,89 @@ +package net.DeltaWings.Minecraft.BetterTP.Libs; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +public class FileManager { + + + public static List listFiles(String path) { + String[] t = new File(path).list(); + if(t == null) return new ArrayList<>(); + else return Arrays.asList(t); + } + + public static List listFiles(File path) { + String[] t = path.list(); + if(t == null) return new ArrayList<>(); + else return Arrays.asList(t); + } + + public static void delete(File path) { + path.delete(); + } + + public static void delete(String path) { + File f = new File(path); + f.delete(); + } + + public static void createFile(String path) { + try { + new File(path).createNewFile(); + } catch ( IOException e ) { + e.printStackTrace(); + } + } + + public static void createFile(File path) { + try { + path.createNewFile(); + } catch ( IOException e ) { + e.printStackTrace(); + } + } + + public static void createFolder(File path) { + path.mkdirs(); + } + + public static void createFolder(String path) { + new File(path).mkdirs(); + } + + public static void archive(String srcFolder, String destZipFile) { + try { + FileOutputStream f = new FileOutputStream(destZipFile); + ZipOutputStream z = new ZipOutputStream(f); + b(srcFolder, z); + z.close(); + } catch ( Exception e ) { + e.printStackTrace(); + } + } + + private static void a(String p, String s, ZipOutputStream z) throws Exception { + File f = new File(s); + if (f.isDirectory()) b(s, z); + else { + byte[] b = new byte[1024]; + int l; + FileInputStream i = new FileInputStream(s); + z.putNextEntry(new ZipEntry(p + "/" + f.getName())); + while ((l = i.read(b)) > 0) z.write(b, 0, l); + } + } + + private static void b(String s, ZipOutputStream z) throws Exception { + File f = new File(s); + String[] l = f.list(); + if(l != null) for (String n : l) a(f.getName(), s + File.separator + n, z); + } +} \ No newline at end of file diff --git a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Main.java b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Main.java index 4d6f394..2fbeed8 100644 --- a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Main.java +++ b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Main.java @@ -8,6 +8,8 @@ import org.bukkit.command.PluginCommand; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; +import org.bstats.bukkit.Metrics; + import java.io.IOException; import java.util.logging.Level; @@ -36,6 +38,8 @@ public final class Main extends JavaPlugin { debug("Loading Variables"); PluginManager pm = getServer().getPluginManager(); PluginCommand bettertp = getCommand("Bettertp"); + PluginCommand home = getCommand("Home"); + PluginCommand delhome = getCommand("Delhome"); debug("Loaded variables"); debug("Loading Configuration"); @@ -59,15 +63,17 @@ public final class Main extends JavaPlugin { bettertp.setTabCompleter(new BettertpTab()); getCommand("Spawn").setExecutor(new Spawn()); getCommand("Lobby").setExecutor(new Lobby()); - getCommand("Home").setExecutor(new Home()); + home.setExecutor(new Home()); + home.setTabCompleter(new HomeTab()); getCommand("Sethome").setExecutor(new Sethome()); - getCommand("Delhome").setExecutor(new Delhome()); + delhome.setExecutor(new Delhome()); + delhome.setTabCompleter(new DelhomeTab()); getCommand("Homelist").setExecutor(new Homelist()); debug("Loaded Commands"); debug("Enabling Metrics"); - //new Metrics(this); + new Charts(new Metrics(this)); log("Metrics Started : https://bstats.org/plugin/bukkit/plugin/"); log("Loaded !"); diff --git a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Metrics.java b/src/main/java/net/DeltaWings/Minecraft/BetterTP/Metrics.java deleted file mode 100644 index 44afacb..0000000 --- a/src/main/java/net/DeltaWings/Minecraft/BetterTP/Metrics.java +++ /dev/null @@ -1,284 +0,0 @@ -package net.DeltaWings.Minecraft.BetterTP; - -import org.bukkit.Bukkit; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.plugin.ServicePriority; -import org.bukkit.plugin.java.JavaPlugin; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -import javax.net.ssl.HttpsURLConnection; -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.net.URL; -import java.util.Timer; -import java.util.TimerTask; -import java.util.UUID; -import java.util.logging.Level; -import java.util.zip.GZIPOutputStream; - -/** - * bStats collects some data for plugin authors. - * - * Check out https://bStats.org/ to learn more about bStats! - */ -public class Metrics { - - static { - // Maven's Relocate is clever and changes strings, too. So we have to use this little "trick" ... :D - final String defaultPackage = new String(new byte[] { 'o', 'r', 'g', '.', 'b', 's', 't', 'a', 't', 's' }); - final String examplePackage = new String(new byte[] { 'y', 'o', 'u', 'r', '.', 'p', 'a', 'c', 'k', 'a', 'g', 'e' }); - // We want to make sure nobody just copy & pastes the example and use the wrong package names - if (Metrics.class.getPackage().getName().equals(defaultPackage) || Metrics.class.getPackage().getName().equals(examplePackage)) { - throw new IllegalStateException("bStats Metrics class has not been relocated correctly!"); - } - } - - // The version of this bStats class - public static final int B_STATS_VERSION = 1; - - // The url to which the data is sent - private static final String URL = "https://bStats.org/submitData/bukkit"; - - // Should failed requests be logged? - private static boolean logFailedRequests; - - // The uuid of the server - private static String serverUUID; - - // The plugin - private final JavaPlugin plugin; - - /** - * Class constructor. - * - * @param plugin The plugin which stats should be submitted. - */ - public Metrics(JavaPlugin plugin) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null!"); - } - this.plugin = plugin; - - // Get the config file - File bStatsFolder = new File(plugin.getDataFolder().getParentFile(), "bStats"); - File configFile = new File(bStatsFolder, "config.yml"); - YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile); - - // Check if the config file exists - if (!config.isSet("serverUuid")) { - - // Add default values - config.addDefault("enabled", true); - // Every server gets it's unique random id. - config.addDefault("serverUuid", UUID.randomUUID().toString()); - // Should failed request be logged? - config.addDefault("logFailedRequests", false); - - // Inform the server owners about bStats - config.options().header( - "bStats collects some data for plugin authors like how many servers are using their plugins.\n" + - "To honor their work, you should not disable it.\n" + - "This has nearly no effect on the server performance!\n" + - "Check out https://bStats.org/ to learn more :)" - ).copyDefaults(true); - try { - config.save(configFile); - } catch (IOException ignored) { } - } - - // Load the data - serverUUID = config.getString("serverUuid"); - logFailedRequests = config.getBoolean("logFailedRequests", false); - if (config.getBoolean("enabled", true)) { - boolean found = false; - // Search for all other bStats Metrics classes to see if we are the first one - for (Class service : Bukkit.getServicesManager().getKnownServices()) { - try { - service.getField("B_STATS_VERSION"); // Our identifier :) - found = true; // We aren't the first - break; - } catch (NoSuchFieldException ignored) { } - } - // Register our service - Bukkit.getServicesManager().register(Metrics.class, this, plugin, ServicePriority.Normal); - if (!found) { - // We are the first! - startSubmitting(); - } - } - } - - /** - * Starts the Scheduler which submits our data every 30 minutes. - */ - private void startSubmitting() { - final Timer timer = new Timer(true); // We use a timer cause the Bukkit scheduler is affected by server lags - timer.scheduleAtFixedRate(new TimerTask() { - @Override - public void run() { - if (!plugin.isEnabled()) { // Plugin was disabled - timer.cancel(); - return; - } - // Nevertheless we want our code to run in the Bukkit main thread, so we have to use the Bukkit scheduler - // Don't be afraid! The connection to the bStats server is still async, only the stats collection is sync ;) - Bukkit.getScheduler().runTask(plugin, () -> submitData()); - } - }, 1000*60*5, 1000*60*30); - // Submit the data every 30 minutes, first time after 5 minutes to give other plugins enough time to start - // WARNING: Changing the frequency has no effect but your plugin WILL be blocked/deleted! - // WARNING: Just don't do it! - } - - /** - * Gets the plugin specific data. - * This method is called using Reflection. - * - * @return The plugin specific data. - */ - public JSONObject getPluginData() { - JSONObject data = new JSONObject(); - - String pluginName = plugin.getDescription().getName(); - String pluginVersion = plugin.getDescription().getVersion(); - - data.put("pluginName", pluginName); // Append the name of the plugin - data.put("pluginVersion", pluginVersion); // Append the version of the plugin - JSONArray customCharts = new JSONArray(); - data.put("customCharts", customCharts); - - return data; - } - - /** - * Gets the server specific data. - * - * @return The server specific data. - */ - private JSONObject getServerData() { - // Minecraft specific data - int playerAmount = Bukkit.getOnlinePlayers().size(); - int onlineMode = Bukkit.getOnlineMode() ? 1 : 0; - String bukkitVersion = Bukkit.getVersion(); - bukkitVersion = bukkitVersion.substring(bukkitVersion.indexOf("MC: ") + 4, bukkitVersion.length() - 1); - - // OS/Java specific data - String javaVersion = System.getProperty("java.version"); - String osName = System.getProperty("os.name"); - String osArch = System.getProperty("os.arch"); - String osVersion = System.getProperty("os.version"); - int coreCount = Runtime.getRuntime().availableProcessors(); - - JSONObject data = new JSONObject(); - - data.put("serverUUID", serverUUID); - - data.put("playerAmount", playerAmount); - data.put("onlineMode", onlineMode); - data.put("bukkitVersion", bukkitVersion); - - data.put("javaVersion", javaVersion); - data.put("osName", osName); - data.put("osArch", osArch); - data.put("osVersion", osVersion); - data.put("coreCount", coreCount); - - return data; - } - - /** - * Collects the data and sends it afterwards. - */ - private void submitData() { - final JSONObject data = getServerData(); - - JSONArray pluginData = new JSONArray(); - // Search for all other bStats Metrics classes to get their plugin data - for (Class service : Bukkit.getServicesManager().getKnownServices()) { - try { - service.getField("B_STATS_VERSION"); // Our identifier :) - } catch (NoSuchFieldException ignored) { - continue; // Continue "searching" - } - // Found one! - try { - pluginData.add(service.getMethod("getPluginData").invoke(Bukkit.getServicesManager().load(service))); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { } - } - - data.put("plugins", pluginData); - - // Create a new thread for the connection to the bStats server - new Thread(() -> { - try { - // Send the data - sendData(data); - } catch (Exception e) { - // Something went wrong! :( - if (logFailedRequests) { - plugin.getLogger().log(Level.WARNING, "Could not submit plugin stats of " + plugin.getName(), e); - } - } - }).start(); - } - - /** - * Sends the data to the bStats server. - * - * @param data The data to send. - * @throws Exception If the request failed. - */ - private static void sendData(JSONObject data) throws Exception { - if (data == null) { - throw new IllegalArgumentException("Data cannot be null!"); - } - if (Bukkit.isPrimaryThread()) { - throw new IllegalAccessException("This method must not be called from the main thread!"); - } - HttpsURLConnection connection = (HttpsURLConnection) new URL(URL).openConnection(); - - // Compress the data to save bandwidth - byte[] compressedData = compress(data.toString()); - - // Add headers - connection.setRequestMethod("POST"); - connection.addRequestProperty("Accept", "application/json"); - connection.addRequestProperty("Connection", "close"); - connection.addRequestProperty("Content-Encoding", "gzip"); // We gzip our request - connection.addRequestProperty("Content-Length", String.valueOf(compressedData.length)); - connection.setRequestProperty("Content-Type", "application/json"); // We send our data in JSON format - connection.setRequestProperty("User-Agent", "MC-Server/" + B_STATS_VERSION); - - // Send data - connection.setDoOutput(true); - DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); - outputStream.write(compressedData); - outputStream.flush(); - outputStream.close(); - - connection.getInputStream().close(); // We don't care about the response - Just send our data :) - } - - /** - * Gzips the given String. - * - * @param str The string to gzip. - * @return The gzipped String. - * @throws IOException If the compression failed. - */ - private static byte[] compress(final String str) throws IOException { - if (str == null) { - return null; - } - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - GZIPOutputStream gzip = new GZIPOutputStream(outputStream); - gzip.write(str.getBytes("UTF-8")); - gzip.close(); - return outputStream.toByteArray(); - } - -} \ No newline at end of file diff --git a/src/main/java/net/DeltaWings/Minecraft/BetterTP/TabCompleter/BettertpTab.java b/src/main/java/net/DeltaWings/Minecraft/BetterTP/TabCompleter/BettertpTab.java index 84cf052..231a880 100644 --- a/src/main/java/net/DeltaWings/Minecraft/BetterTP/TabCompleter/BettertpTab.java +++ b/src/main/java/net/DeltaWings/Minecraft/BetterTP/TabCompleter/BettertpTab.java @@ -1,6 +1,9 @@ package net.DeltaWings.Minecraft.BetterTP.TabCompleter; import net.DeltaWings.Minecraft.BetterTP.Main; +import net.DeltaWings.Minecraft.BetterTP.Api.API; +import net.DeltaWings.Minecraft.BetterTP.Libs.Config; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; @@ -11,7 +14,7 @@ import java.util.List; public class BettertpTab implements TabCompleter { - private final String[] menu = new String[]{"set", "del", "delete", "help", "config"}, setdel = new String[]{"spawn","lobby"}, confopt = new String[]{""}; + private final String[] menu = new String[]{"set", "del", "delete", "help", "home", "delhome"}, setdel = new String[]{"spawn","lobby"}, confopt = new String[]{""}; @Override public List onTabComplete(CommandSender s, Command c, String unused, String[] a) { @@ -36,6 +39,10 @@ public class BettertpTab implements TabCompleter { for (String t : y) if (t.startsWith(a[1].toLowerCase())) l.add(t); return l; } else return Arrays.asList(y); + } else if(a.length == 3) { + if(a[0].equalsIgnoreCase("home") || a[0].equalsIgnoreCase("delhome")) { + return API.homelist(a[1]); + } } return null; } diff --git a/src/main/java/net/DeltaWings/Minecraft/BetterTP/TabCompleter/DelhomeTab.java b/src/main/java/net/DeltaWings/Minecraft/BetterTP/TabCompleter/DelhomeTab.java new file mode 100644 index 0000000..47671a3 --- /dev/null +++ b/src/main/java/net/DeltaWings/Minecraft/BetterTP/TabCompleter/DelhomeTab.java @@ -0,0 +1,20 @@ +package net.DeltaWings.Minecraft.BetterTP.TabCompleter; + +import net.DeltaWings.Minecraft.BetterTP.Libs.Config; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; + +import java.util.List; + +public class DelhomeTab implements TabCompleter { + + @Override + public List onTabComplete(CommandSender s, Command u1, String unused, String[] a) { + if( a.length == 1) { + Config c = new Config("data", s.getName()); + return c.getSection(""); + } else return null; + } +} diff --git a/src/main/java/net/DeltaWings/Minecraft/BetterTP/TabCompleter/HomeTab.java b/src/main/java/net/DeltaWings/Minecraft/BetterTP/TabCompleter/HomeTab.java new file mode 100644 index 0000000..df61376 --- /dev/null +++ b/src/main/java/net/DeltaWings/Minecraft/BetterTP/TabCompleter/HomeTab.java @@ -0,0 +1,19 @@ +package net.DeltaWings.Minecraft.BetterTP.TabCompleter; + +import net.DeltaWings.Minecraft.BetterTP.Api.API; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; + +import java.util.List; + +public class HomeTab implements TabCompleter { + + @Override + public List onTabComplete(CommandSender s, Command u1, String unused, String[] a) { + if( a.length == 1) { + return API.homelist(s.getName()); + } else return null; + } +}