diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index ff96281..c8c13d6 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -26,6 +26,11 @@
+
+
+
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index fa2b941..e75c06a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -12,5 +12,8 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/Plugin/SimplifyTools.iml b/Plugin/SimplifyTools.iml
new file mode 100644
index 0000000..c0e03ea
--- /dev/null
+++ b/Plugin/SimplifyTools.iml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 15d44a5..32d6b5a 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,7 @@
# SimplifyTools
-### An 'All-in-one' helper plugin for Minecraft Spigot Servers with a goal of combine useful plugins to a one.
-| Build Status | [![Build Status](https://ci.ditservices.hu/job/SimplifyTools/badge/icon)](https://ci.ditservices.hu/job/SimplifyTools/) |
-|:-------------:|:-----------------------------------------------------------------------------------------------------------------:|
-| MC Version | ![ MC Version](https://ci.ditservices.hu/job/SimplifyTools/badge/icon?subject=MC&status=1.18.2&color=darkblue) |
-| Lines of code | ![ Lines of code](https://tokei.rs/b1/github/LabodiDavid/SimplifyTools?category=code) |
-| Files | ![ Files](https://tokei.rs/b1/github/LabodiDavid/SimplifyTools?category=files) |
+### An 'All-in-one' plugin for MC servers.
+#### TabList Customizing, Custom Advancement, Connect messages, AutoSave, Logger
+ [![Build Status](https://ci.ditservices.hu/job/SimplifyTools/badge/icon)](https://ci.ditservices.hu/job/SimplifyTools/) ![ MC Version](https://ci.ditservices.hu/job/SimplifyTools/badge/icon?subject=MC&status=1.12%20-%201.19.3&color=darkblue) ![Git latest release](https://img.shields.io/github/v/release/LabodiDavid/SimplifyTools) [![bStats](https://ci.ditservices.hu/job/SimplifyTools/badge/icon?subject=bStats&status=3.0&color=brightgreen)](https://bstats.org/plugin/bukkit/SimplifyTools/15108) ![ Lines of code](https://tokei.rs/b1/github/LabodiDavid/SimplifyTools?category=code)
## Features
- **Tab Manager** - Allows you to specify colored texts, with animations on the tab window.
@@ -25,27 +22,13 @@
_________________
### [Commands & Permissions](docs/cmd_perms.md)
_________________
+### [Building from source](docs/BUILDING.md)
+_________________
### If you have an idea or bug report [Create an issue](https://github.com/LabodiDavid/SimplifyTools/issues/new/choose) or [Create a pull request](https://github.com/LabodiDavid/SimplifyTools/compare)
_________________
## Main goal
My main goal is to create a single plugin that has many features, so it's can replace plugins that i often use on my servers while lowering the plugins count.
_________________
-## Building
-#### Dependencies:
-- spigot-api-1.18.2-R0.1-SNAPSHOT-shaded.jar (from Spigot Repo Downloads Automatically OR **BuildTools** generated `Spigot\Spigot-API\target\`)
-- brigadier-1.0.18.jar (from **BuildTools** generated `spigot-x.xx.x.jar\META-INF\libraries\`)
-- craftbukkit-1.18.2-R0.1-SNAPSHOT.jar (from downloaded `craftbukkit-x.xx.x.jar\META-INF\versions\`)
-##### Installing Dependencies:
-You can install the dependencies to your maven repository through CLI like this:
-
-- mvn install:install-file -Dfile=spigot-api-1.18.2-R0.1-SNAPSHOT-shaded.jar -DgroupId=org.spigotmc -DartifactId=spigot-api -Dversion=1.18.2-R0.1-SNAPSHOT -Dpackaging=jar
-
-
-- mvn install:install-file -Dfile=craftbukkit-1.18.2-R0.1-SNAPSHOT.jar -DgroupId=org.bukkit -DartifactId=craftbukkit -Dversion=1.18.2-R0.1-SNAPSHOT -Dpackaging=jar
-
-
-- mvn install:install-file -Dfile=brigadier-1.0.18.jar -DgroupId=com.mojang -DartifactId=brigadier -Dversion=1.0.18 -Dpackaging=jar
-_________________
## 3rd party libraries used by this plugin
### [Config-Updater by tchristofferson](https://github.com/tchristofferson/Config-Updater)
### [SpigotUpdateChecker by JEFF-Media-GbR](https://github.com/JEFF-Media-GbR/Spigot-UpdateChecker)
\ No newline at end of file
diff --git a/SimplifyTools.iml b/SimplifyTools.iml
index 56ab901..3a671dc 100644
--- a/SimplifyTools.iml
+++ b/SimplifyTools.iml
@@ -25,21 +25,19 @@
-
-
-
+
+
+
+
-
+
-
+
-
-
-
-
-
+
+
\ No newline at end of file
diff --git a/docs/BUILDING.md b/docs/BUILDING.md
new file mode 100644
index 0000000..a1d0a77
--- /dev/null
+++ b/docs/BUILDING.md
@@ -0,0 +1,30 @@
+## SimplifyTools - Building
+Some of these dependencies only needed
+#### Dependencies:
+- (1.18.2) - spigot-api-1.18.2-R0.1-SNAPSHOT-shaded.jar (from Spigot Repo Downloads Automatically OR **BuildTools** compiled `Spigot\Spigot-API\target\`)
+- (1.18.2) - brigadier-1.0.18.jar (from **BuildTools** compiled `spigot-x.xx.x.jar\META-INF\libraries\`)
+- (1.18.2) - craftbukkit-1.18.2-R0.1-SNAPSHOT.jar (from downloaded `craftbukkit-x.xx.x.jar\META-INF\versions\`)
+- (1.16.5) - spigot-1.16.5.jar (**BuildTools** compiled)
+- (1.15.2) - spigot-1.15.2.jar (**BuildTools** compiled)
+- (1.14.4) - spigot-1.14.4.jar (**BuildTools** compiled)
+##### Installing Dependencies:
+You can install the dependencies to your maven repository through CLI like this:
+
+- mvn install:install-file -Dfile=spigot-api-1.18.2-R0.1-SNAPSHOT-shaded.jar -DgroupId=org.spigotmc -DartifactId=spigot-api -Dversion=1.18.2-R0.1-SNAPSHOT -Dpackaging=jar
+
+
+- mvn install:install-file -Dfile=craftbukkit-1.18.2-R0.1-SNAPSHOT.jar -DgroupId=org.bukkit -DartifactId=craftbukkit -Dversion=1.18.2-R0.1-SNAPSHOT -Dpackaging=jar
+
+
+- mvn install:install-file -Dfile=brigadier-1.0.18.jar -DgroupId=com.mojang -DartifactId=brigadier -Dversion=1.0.18 -Dpackaging=jar
+
+
+- mvn install:install-file -Dfile=spigot-1.16.5.jar -DgroupId=org.spigotmc -DartifactId=spigot -Dversion=1.16.5-R0.1-SNAPSHOT -Dpackaging=jar
+
+
+- mvn install:install-file -Dfile=spigot-1.15.2.jar -DgroupId=org.spigotmc -DartifactId=spigot -Dversion=1.15.2-R0.1-SNAPSHOT -Dpackaging=jar
+
+
+- mvn install:install-file -Dfile=spigot-1.14.4.jar -DgroupId=org.spigotmc -DartifactId=spigot -Dversion=1.14.4-R0.1-SNAPSHOT -Dpackaging=jar
+
+- mvn install:install-file -Dfile=spigot-1.17.1.jar -DgroupId=org.spigotmc -DartifactId=spigot -Dversion=1.17.1-R0.1-SNAPSHOT -Dpackaging=jar
\ No newline at end of file
diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md
index b43b13d..dceb667 100644
--- a/docs/ChangeLog.md
+++ b/docs/ChangeLog.md
@@ -1,4 +1,9 @@
# SimplifyTools - Changelog
+ - 1.2.0
+ - Added TPS command `/st tps`
+ - Added `{MOTD}`, `{TPS}` variable for TAB customization in the config
+ - Refactored code for multi version support (1.12 - 1.19.3)
+ - Fixes [#1](https://github.com/LabodiDavid/SimplifyTools/issues/1)
- 1.1.0
- Updated to 1.18.2
- Minor changes
diff --git a/docs/cmd_perms.md b/docs/cmd_perms.md
index 16f87b9..f6f4854 100644
--- a/docs/cmd_perms.md
+++ b/docs/cmd_perms.md
@@ -1,8 +1,9 @@
-## SimplifyTools Commands
+## SimplifyTools - Commands
You can use the following commands to use the features of SimplifyTools.
- **/st**: The main SimplifyTools command.
Requires `st.st`
- **/st help**: Displays all SimplifyTools related commands.
Requires `st.help`
- **/st ping**: Displays your ping to the current server.
Requires `st.ping`
+- **/st tps**: Displays plugin calculated TPS.
Requires `st.tps`
- **/st stats**: Displays your gameplay statistics.
Requires `st.stats`
- **/st save-all**: Saves the players, worlds data on the server.
Requires `st.save`
- **/st pmanager** : A built-in plugin manager.
Requires `st.pmanager.*`
@@ -10,7 +11,7 @@ You can use the following commands to use the features of SimplifyTools.
- **/st pmanager unload** : Plugin unload.
Requires `st.pmanager.unload (can be inherited from st.pmanager.*)`
- **/st reload**: Plugin settings reload.
Requires `st.reload`
-## SimplifyTools Wildcard Permissions
+## SimplifyTools - Wildcard Permissions
- **st.*** - Wildcard permission for all commands, permissions for this plugin.
- **st.pmanager.*** - Wildcard permission for the plugin manager commands.
diff --git a/docs/img/1.gif b/docs/img/1.gif
index 7b1ceb8..3b4aa52 100644
Binary files a/docs/img/1.gif and b/docs/img/1.gif differ
diff --git a/pom.xml b/pom.xml
index 99b98b6..e2ecf6d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,9 +4,9 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- tk.ditservices
+ hu.ditservices
SimplifyTools
- 1.1.0
+ 1.2.0
jar
SimplifyTools
@@ -42,7 +42,7 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.7.0
+ 3.10.1
${java.version}
@@ -51,17 +51,17 @@
org.apache.maven.plugins
maven-shade-plugin
- 3.1.0
+ 3.2.1
com.jeff_media.updatechecker
- tk.ditservices.updatechecker
+ hu.ditservices.updatechecker
org.bstats
- tk.ditservices.bstats
+ hu.ditservices.bstats
@@ -107,6 +107,10 @@
sonatype
https://oss.sonatype.org/content/groups/public/
+
+ dmulloy2-repo
+ https://repo.dmulloy2.net/repository/public/
+
@@ -116,24 +120,6 @@
2.2.0
compile
-
- org.spigotmc
- spigot-api
- 1.18.2-R0.1-SNAPSHOT
- provided
-
-
- org.bukkit
- craftbukkit
- 1.18.2-R0.1-SNAPSHOT
- provided
-
-
- com.mojang
- brigadier
- 1.0.18
- provided
-
org.bstats
bstats-bukkit
@@ -141,5 +127,22 @@
compile
+
+ org.spigotmc
+ spigot-api
+ 1.19.3-R0.1-SNAPSHOT
+ provided
+
+
+
+ org.bukkit
+ craftbukkit
+ 1.19.3-R0.1-SNAPSHOT
+ provided
+
+
+
+
+
diff --git a/src/main/java/hu/ditservices/STPlugin.java b/src/main/java/hu/ditservices/STPlugin.java
new file mode 100644
index 0000000..c917c46
--- /dev/null
+++ b/src/main/java/hu/ditservices/STPlugin.java
@@ -0,0 +1,159 @@
+package hu.ditservices;
+
+import hu.ditservices.handlers.DITTabCompleter;
+import hu.ditservices.handlers.SaveHandler;
+import hu.ditservices.handlers.TabHandler;
+import hu.ditservices.utils.*;
+import hu.ditservices.utils.Math;
+import org.bstats.bukkit.Metrics;
+import hu.ditservices.commands.DitCmd;
+import hu.ditservices.listeners.ChatEvents;
+import hu.ditservices.listeners.LogChat;
+import hu.ditservices.listeners.LogCommand;
+import hu.ditservices.listeners.LogConnect;
+import com.tchristofferson.configupdater.ConfigUpdater;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.PluginCommand;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.event.Listener;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import com.jeff_media.updatechecker.UpdateCheckSource;
+import com.jeff_media.updatechecker.UpdateChecker;
+import com.jeff_media.updatechecker.UserAgentBuilder;
+
+import java.io.*;
+import java.lang.management.ManagementFactory;
+import java.util.Collections;
+import java.util.Objects;
+import java.util.logging.Logger;
+
+public final class STPlugin extends JavaPlugin implements CommandExecutor, Listener {
+ private static STPlugin instance;
+ private final Logger log = Bukkit.getLogger();
+
+ public FileConfiguration config = getConfig();
+
+ public long ServerStartTime;
+
+ @Override
+ public void onEnable() {
+ instance = this;
+ try {
+ this.Init();
+ } catch (Exception e) {
+ this.log.warning("[SimplifyTools] - INITIALIZATION ERROR: "+e.getMessage());
+ this.log.warning("[SimplifyTools] - Plugin disabled!");
+ this.setEnabled(false);
+ return;
+ }
+ //this.dplug = new DitPluginManager(this);
+ this.log.info(this.getPrefix()+"Started running.");
+ }
+
+
+ private void Init() throws Exception {
+ this.ServerStartTime = ManagementFactory.getRuntimeMXBean().getStartTime();
+ if (Version.ServerVersion.isCurrentLower(Version.ServerVersion.v1_12_R1)){
+ throw new Exception("The server version is not supported! Update to a version between 1.12 - 1.19.3 to run this plugin.");
+ }
+ if (this.Reload()){
+
+
+ TabHandler tab = new TabHandler();
+ PluginCommand ditCmd = this.getCommand("st");
+ ditCmd.setExecutor(new DitCmd(this));
+ ditCmd.setTabCompleter(new DITTabCompleter());
+
+ getServer().getPluginManager().registerEvents(this, this);
+ getServer().getPluginManager().registerEvents(new LogChat(this), this);
+ getServer().getPluginManager().registerEvents(new LogCommand(this), this);
+ getServer().getPluginManager().registerEvents(new LogConnect(this), this);
+ if (this.config.isSet("CustomAdvancement.enabled") && this.config.getBoolean("CustomAdvancement.enabled")){
+ getServer().getPluginManager().registerEvents(new ChatEvents(this), this);
+ this.log.info(this.getPrefix()+"Custom Advancement Messages enabled!");
+ }
+ Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new TPS(), 0, 1);
+
+ if (this.config.getBoolean("Saving.enabled") && this.config.getInt("Saving.interval")>0){
+ Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new SaveHandler(), 0L, Math.convert(Math.Convert.SECONDS,Math.Convert.TICKS,instance.config.getInt("Saving.interval")));
+ }
+
+ new UpdateChecker(this, UpdateCheckSource.GITHUB_RELEASE_TAG, "LabodiDavid/SimplifyTools")
+ .setDownloadLink("https://github.com/LabodiDavid/SimplifyTools/releases")
+ .setDonationLink("https://paypal.me/labodidavid")
+ .setChangelogLink("https://github.com/LabodiDavid/SimplifyTools/blob/main/docs/ChangeLog.md")
+ .setNotifyOpsOnJoin(true)
+ .setNotifyByPermissionOnJoin("st.admin")
+ .setUserAgent(new UserAgentBuilder().addPluginNameAndVersion())
+ .checkEveryXHours(24)
+ .checkNow();
+
+ Metrics metrics = new Metrics(this, 15108);
+ }
+ }
+ public String getPrefix(){
+ if (this.config.isSet("Prefix") && !Objects.requireNonNull(this.config.getString("Prefix")).isEmpty()){
+ return ChatColor.translateAlternateColorCodes('&', this.config.getString("Prefix"));
+ }else{
+ return ChatColor.translateAlternateColorCodes('&',"&a[&fSimplify&7Tools&2] &4- &f");
+ }
+ }
+
+ public static STPlugin getInstance(){
+ return instance;
+ }
+
+ public static String getUptime(){
+ int uptime = (int)(System.currentTimeMillis() - instance.ServerStartTime)/1000;
+ String returnText = "";
+
+ // Get remaining seconds from total minutes.
+ int seconds = uptime % 60;
+ // Convert to minutes, get remaining minutes from total hours.
+ int minutes = (uptime / 60) % 60;
+ // Convert to hours, get remaining hours from total days.
+ int hours = (uptime / 3600) % 24;
+ // Convert to days.
+ int days = uptime / 86400;
+
+ if (days>1){
+ returnText = returnText+ days+" days ";
+ }
+ if (hours>1){
+ returnText = returnText+ hours+ " hours ";
+ }
+ if (minutes>1){
+ returnText = returnText+ minutes+ " min ";
+ }
+ if (seconds>1){
+ returnText = returnText+ seconds+ "s ";
+ }
+
+ return returnText;
+
+ }
+
+ public boolean Reload(){
+ File configFile = new File(getDataFolder(), "config.yml");
+
+ try {
+ if (!configFile.exists()){
+ this.saveDefaultConfig();
+ }
+ ConfigUpdater.update(this, "config.yml", configFile, Collections.emptyList());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ reloadConfig();
+ this.config = getConfig();
+
+ return true;
+ }
+ @Override
+ public void onDisable() {
+ System.out.println(this.getPrefix()+" stopped.");
+ }
+}
diff --git a/src/main/java/hu/ditservices/commands/DitCmd.java b/src/main/java/hu/ditservices/commands/DitCmd.java
new file mode 100644
index 0000000..ca8e92a
--- /dev/null
+++ b/src/main/java/hu/ditservices/commands/DitCmd.java
@@ -0,0 +1,123 @@
+package hu.ditservices.commands;
+
+import hu.ditservices.utils.TPS;
+import hu.ditservices.STPlugin;
+import hu.ditservices.utils.Cooldown;
+import hu.ditservices.utils.Version;
+import org.bukkit.ChatColor;
+import org.bukkit.command.*;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.entity.Player;
+
+public class DitCmd implements CommandExecutor {
+ private final String noArgMsg;
+ private final STPlugin plugin;
+ private final Cooldown cd;
+ private final FileConfiguration config;
+
+ public DitCmd(final STPlugin instance){
+ this.plugin = instance;
+ this.noArgMsg = plugin.getPrefix()+ ChatColor.DARK_RED + "To list all SimplifyTools commands use the '/help SIMPLIFYTOOLS' command!";
+ this.cd = new Cooldown(plugin);
+ this.config = plugin.config;
+ }
+
+ public boolean addToCoolDown(CommandSender sender){
+ if (sender instanceof Player){
+ Player p = (Player) sender;
+ this.cd.Add(p);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+ if (command.getName().equals("st")){
+
+ if (cd.Check(sender)){
+ if (command.getName().equals("st") && args.length==0)
+ {
+ this.addToCoolDown(sender);
+ sender.sendMessage(plugin.getPrefix()+ChatColor.GREEN+"Version: "+plugin.getDescription().getVersion());
+ sender.sendMessage(this.noArgMsg);
+ return true;
+ }
+ if (command.getName().equals("st") && args[0].contains("help"))
+ {
+ sender.sendMessage(plugin.getPrefix()+ChatColor.GREEN+"Version: "+plugin.getDescription().getVersion());
+ sender.sendMessage(this.noArgMsg);
+ return true;
+ }
+ if (command.getName().equals("st") && args[0].contains("settings"))
+ {
+ this.addToCoolDown(sender);
+ sender.sendMessage(plugin.getPrefix()+ ChatColor.GREEN+" === Plugin Information === ");
+ sender.sendMessage(plugin.getPrefix()+ChatColor.GREEN+"Plugin Version: "+plugin.getDescription().getVersion());
+ sender.sendMessage(plugin.getPrefix()+ChatColor.GREEN+"Server Version: "+ Version.ServerVersion.getCurrent().toString());
+ sender.sendMessage(ChatColor.GREEN+" -------- Features -------- ");
+ sender.sendMessage(plugin.getPrefix()+ChatColor.GREEN+"Tab customization: "+(config.getBoolean("Tab.enabled") ? ChatColor.GREEN+"Enabled" : ChatColor.RED+"Disabled"));
+ sender.sendMessage(plugin.getPrefix()+ChatColor.GREEN+"Custom Advancement Msg: "+(config.getBoolean("CustomAdvancement.enabled") ? ChatColor.GREEN+"Enabled" : ChatColor.RED+"Disabled"));
+ sender.sendMessage(ChatColor.GREEN+" ========================== ");
+ return true;
+ }
+
+ if (command.getName().equals("st") && args[0].contains("reload") && sender.hasPermission("st.reload")){
+
+ if(plugin.Reload()){
+ this.addToCoolDown(sender);
+ sender.sendMessage(plugin.getPrefix()+ChatColor.GREEN+"Successfully reload!");
+ sender.sendMessage(plugin.getPrefix()+ChatColor.RED+"Notice: Restart your server if the settings didn't applied.");
+ return true;
+ }
+ }
+
+ if (command.getName().equals("st") && args[0].contains("tps") && sender.hasPermission("st.tps")){
+ this.addToCoolDown(sender);
+ sender.sendMessage(plugin.getPrefix()+ChatColor.GREEN+"Plugin Calculated TPS: "+TPS.getColor()+String.format("%.2f", TPS.getTPS()));
+ return true;
+
+ }
+
+ if (command.getName().equalsIgnoreCase("st") && args[0].contains("pmanager")){
+
+ if (sender.hasPermission("st.pmanager.unload") || sender.hasPermission("st.pmanager.load") || sender.hasPermission("st.pmanager")) {
+ this.addToCoolDown(sender);
+ if (args.length==1){
+ sender.sendMessage(plugin.getPrefix()+ChatColor.DARK_RED+"Invalid arguments!");
+ return true;
+ }
+ if (args[1].equalsIgnoreCase("load")) {
+ //PluginCmd.handleLoad(sender,args);
+ PluginCmd.LoadPlugin(sender,args);
+ }
+ if (args[1].equalsIgnoreCase("unload")) {
+ //PluginCmd.handleUnload(sender,args);
+ PluginCmd.UnloadPlugin(sender, args);
+ }
+ }
+ }
+
+
+ if (command.getName().equalsIgnoreCase("st") && args[0].contains("save-all") && sender.hasPermission("st.save")){
+ this.addToCoolDown(sender);
+ return SaveCmd.Run(sender);
+ }
+
+ if (command.getName().equalsIgnoreCase("st") && args[0].contains("ping") && sender.hasPermission("st.ping")){
+ this.addToCoolDown(sender);
+ return PingCmd.Run(sender);
+ }
+ if (command.getName().equalsIgnoreCase("st") && args[0].contains("stats") && sender.hasPermission("st.stats")){
+ this.addToCoolDown(sender);
+ return StatCmd.Run(sender);
+ }
+ }else{
+ cd.CDText(sender);
+ }
+ }
+ return true;
+ }
+
+
+}
diff --git a/src/main/java/tk/ditservices/commands/PingCmd.java b/src/main/java/hu/ditservices/commands/PingCmd.java
similarity index 61%
rename from src/main/java/tk/ditservices/commands/PingCmd.java
rename to src/main/java/hu/ditservices/commands/PingCmd.java
index e4a8570..227847f 100644
--- a/src/main/java/tk/ditservices/commands/PingCmd.java
+++ b/src/main/java/hu/ditservices/commands/PingCmd.java
@@ -1,25 +1,26 @@
-package tk.ditservices.commands;
+package hu.ditservices.commands;
-import tk.ditservices.DITSystem;
+import hu.ditservices.STPlugin;
+import hu.ditservices.utils.Server;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
public class PingCmd {
public static boolean Run(CommandSender sender) {
- DITSystem plugin = DITSystem.getInstance();
+ STPlugin plugin = STPlugin.getInstance();
if (sender instanceof Player) {
Player player = (Player) sender;
try {
- player.sendMessage(plugin.getPrefix() + "Your response time to the server: " + player.getPing() + " ms");
+ player.sendMessage(plugin.getPrefix() + "Your response time to the server: " + Server.getPlayerPing(player) + " ms");
return true;
} catch (IllegalArgumentException | SecurityException e) {
e.printStackTrace();
}
} else {
if (sender instanceof ConsoleCommandSender) {
- ConsoleCommandSender konzoladmin = (ConsoleCommandSender) sender;
- konzoladmin.sendMessage(plugin.getPrefix() + "For this command you have to be a player!");
+ ConsoleCommandSender consoleCommandSender = (ConsoleCommandSender) sender;
+ consoleCommandSender.sendMessage(plugin.getPrefix() + "For this command you have to be a player!");
return true;
}
}
diff --git a/src/main/java/tk/ditservices/commands/PluginCmd.java b/src/main/java/hu/ditservices/commands/PluginCmd.java
similarity index 75%
rename from src/main/java/tk/ditservices/commands/PluginCmd.java
rename to src/main/java/hu/ditservices/commands/PluginCmd.java
index bbf6799..620a5a2 100644
--- a/src/main/java/tk/ditservices/commands/PluginCmd.java
+++ b/src/main/java/hu/ditservices/commands/PluginCmd.java
@@ -1,9 +1,9 @@
-package tk.ditservices.commands;
+package hu.ditservices.commands;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
-import tk.ditservices.DITSystem;
-//import tk.ditservices.DitPluginManager;
+import hu.ditservices.STPlugin;
+//import hu.ditservices.DitPluginManager;
import org.bukkit.command.CommandSender;
@@ -11,30 +11,30 @@ public class PluginCmd {
public static boolean LoadPlugin(CommandSender sender, String[] args){
Plugin plugin = Bukkit.getPluginManager().getPlugin(args[2]);
if (plugin == null) {
- sender.sendMessage(DITSystem.getInstance().getPrefix()+"Plugin not exist!");
+ sender.sendMessage(STPlugin.getInstance().getPrefix()+"Plugin not exist!");
return false;
}
if (plugin.isEnabled()){
- sender.sendMessage(DITSystem.getInstance().getPrefix()+"Plugin "+plugin.getName()+" already enabled!");
+ sender.sendMessage(STPlugin.getInstance().getPrefix()+"Plugin "+plugin.getName()+" already enabled!");
return true;
}
Bukkit.getPluginManager().enablePlugin(plugin);
- sender.sendMessage(DITSystem.getInstance().getPrefix()+"Plugin "+plugin.getName()+" successfully enabled!");
+ sender.sendMessage(STPlugin.getInstance().getPrefix()+"Plugin "+plugin.getName()+" successfully enabled!");
return true;
}
public static boolean UnloadPlugin(CommandSender sender, String[] args){
Plugin plugin = Bukkit.getPluginManager().getPlugin(args[2]);
if (plugin == null) {
- sender.sendMessage(DITSystem.getInstance().getPrefix()+"Plugin not exist!");
+ sender.sendMessage(STPlugin.getInstance().getPrefix()+"Plugin not exist!");
return false;
}
if (!plugin.isEnabled()){
- sender.sendMessage(DITSystem.getInstance().getPrefix()+"Plugin "+plugin.getName()+" already disabled!");
+ sender.sendMessage(STPlugin.getInstance().getPrefix()+"Plugin "+plugin.getName()+" already disabled!");
return true;
}
Bukkit.getPluginManager().disablePlugin(plugin);
- sender.sendMessage(DITSystem.getInstance().getPrefix()+"Plugin "+plugin.getName()+" successfully disabled!");
+ sender.sendMessage(STPlugin.getInstance().getPrefix()+"Plugin "+plugin.getName()+" successfully disabled!");
return true;
}
diff --git a/src/main/java/hu/ditservices/commands/SaveCmd.java b/src/main/java/hu/ditservices/commands/SaveCmd.java
new file mode 100644
index 0000000..a9ff925
--- /dev/null
+++ b/src/main/java/hu/ditservices/commands/SaveCmd.java
@@ -0,0 +1,21 @@
+package hu.ditservices.commands;
+
+import hu.ditservices.STPlugin;
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+import org.bukkit.command.CommandSender;
+
+public class SaveCmd {
+ public static boolean Run(CommandSender sender){
+ STPlugin plugin = STPlugin.getInstance();
+ String p = plugin.config.getString("Saving.broadcastMsgProgress").replace("{PREFIX}",plugin.getPrefix());
+ String d = plugin.config.getString("Saving.broadcastMsgDone").replace("{PREFIX}",plugin.getPrefix());
+ Bukkit.broadcast(p,"st.st");
+ for(World w : Bukkit.getServer().getWorlds()){
+ w.save();
+ }
+ Bukkit.savePlayers();
+ Bukkit.broadcast(d,"st.st");
+ return true;
+ }
+}
diff --git a/src/main/java/tk/ditservices/commands/StatCmd.java b/src/main/java/hu/ditservices/commands/StatCmd.java
similarity index 84%
rename from src/main/java/tk/ditservices/commands/StatCmd.java
rename to src/main/java/hu/ditservices/commands/StatCmd.java
index 6d4b5c5..ba46a57 100644
--- a/src/main/java/tk/ditservices/commands/StatCmd.java
+++ b/src/main/java/hu/ditservices/commands/StatCmd.java
@@ -1,6 +1,6 @@
-package tk.ditservices.commands;
+package hu.ditservices.commands;
-import tk.ditservices.DITSystem;
+import hu.ditservices.STPlugin;
import org.bukkit.ChatColor;
import org.bukkit.Statistic;
import org.bukkit.command.CommandSender;
@@ -10,7 +10,7 @@ public class StatCmd {
public static boolean Run(CommandSender sender){
Player player = (Player) sender;
- player.sendMessage(DITSystem.getInstance().getPrefix()+ ChatColor.GREEN+" === Your statistics === ");
+ player.sendMessage(STPlugin.getInstance().getPrefix()+ ChatColor.GREEN+" === Your statistics === ");
player.sendMessage(ChatColor.AQUA+"Connects: "+(player.getStatistic(Statistic.LEAVE_GAME)+1));
player.sendMessage(ChatColor.AQUA+"Deaths: "+player.getStatistic(Statistic.DEATHS));
player.sendMessage(ChatColor.AQUA+"Mob kills: "+player.getStatistic(Statistic.MOB_KILLS));
diff --git a/src/main/java/tk/ditservices/DITTabCompleter.java b/src/main/java/hu/ditservices/handlers/DITTabCompleter.java
similarity index 99%
rename from src/main/java/tk/ditservices/DITTabCompleter.java
rename to src/main/java/hu/ditservices/handlers/DITTabCompleter.java
index 1631ff1..b15050b 100644
--- a/src/main/java/tk/ditservices/DITTabCompleter.java
+++ b/src/main/java/hu/ditservices/handlers/DITTabCompleter.java
@@ -1,4 +1,4 @@
-package tk.ditservices;
+package hu.ditservices.handlers;
import org.bukkit.Bukkit;
import org.bukkit.command.*;
diff --git a/src/main/java/tk/ditservices/DitPluginManager.java b/src/main/java/hu/ditservices/handlers/DitPluginManager.java
similarity index 99%
rename from src/main/java/tk/ditservices/DitPluginManager.java
rename to src/main/java/hu/ditservices/handlers/DitPluginManager.java
index 2317f7c..95b8b5f 100644
--- a/src/main/java/tk/ditservices/DitPluginManager.java
+++ b/src/main/java/hu/ditservices/handlers/DitPluginManager.java
@@ -1,5 +1,6 @@
-package tk.ditservices;
-import tk.ditservices.DITSystem;
+package hu.ditservices.handlers;
+/*
+import hu.ditservices.DITSystem;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.PluginCommand;
@@ -9,7 +10,8 @@ import org.bukkit.plugin.*;
import java.io.File;
import java.lang.reflect.Field;
import java.util.*;
-/*
+
+
public class DitPluginManager {
private static DITSystem plugin;
public DitPluginManager(DITSystem instance){
diff --git a/src/main/java/hu/ditservices/handlers/SaveHandler.java b/src/main/java/hu/ditservices/handlers/SaveHandler.java
new file mode 100644
index 0000000..63e77fa
--- /dev/null
+++ b/src/main/java/hu/ditservices/handlers/SaveHandler.java
@@ -0,0 +1,33 @@
+package hu.ditservices.handlers;
+
+import hu.ditservices.STPlugin;
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+import org.bukkit.entity.Player;
+
+public class SaveHandler implements Runnable{
+ STPlugin plugin = STPlugin.getInstance();
+ @Override
+ public void run() {
+
+ String p = plugin.config.isSet("Saving.broadcastMsgProgress") ? plugin.config.getString("Saving.broadcastMsgProgress").replace("{PREFIX}",plugin.getPrefix()) : plugin.getPrefix()+"Auto save in progress..";
+ String d = plugin.config.isSet("Saving.broadcastMsgDone") ? plugin.config.getString("Saving.broadcastMsgDone").replace("{PREFIX}",plugin.getPrefix()) : plugin.getPrefix()+"Auto save done.";
+ if (Bukkit.getOnlinePlayers().size()>0){
+ for (Player player : Bukkit.getOnlinePlayers()){
+ player.sendMessage(p);
+ }
+ }
+ plugin.getLogger().info(p);
+ for(World w : Bukkit.getServer().getWorlds()){
+ w.save();
+ }
+ Bukkit.savePlayers();
+ if (Bukkit.getOnlinePlayers().size()>0){
+ for (Player player : Bukkit.getOnlinePlayers()){
+ player.sendMessage(d);
+ }
+ }
+ plugin.getLogger().info(d);
+
+ }
+}
diff --git a/src/main/java/hu/ditservices/handlers/TabHandler.java b/src/main/java/hu/ditservices/handlers/TabHandler.java
new file mode 100644
index 0000000..fb89104
--- /dev/null
+++ b/src/main/java/hu/ditservices/handlers/TabHandler.java
@@ -0,0 +1,268 @@
+package hu.ditservices.handlers;
+
+import hu.ditservices.STPlugin;
+import hu.ditservices.utils.*;
+import hu.ditservices.utils.Math;
+import hu.ditservices.utils.reflection.ClazzContainer;
+import hu.ditservices.utils.reflection.Reflection;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.entity.Player;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TabHandler {
+ public final List headers = new ArrayList<>();
+ public final List footers = new ArrayList<>();
+
+ private Integer refreshRate;
+
+ private final STPlugin plugin;
+ public List headeranimList = new ArrayList<>();
+ public List footeranimList = new ArrayList<>();
+
+ private final ArrayList formatArray = new ArrayList<>();
+ public final List DynamicHeaders = new ArrayList<>();
+ public final List DynamicFooters = new ArrayList<>();
+
+ private int count1 = 0; //headers
+ private int count2 = 0; //footers
+ private Object packet;
+
+ public TabHandler() throws Exception {
+
+ this.plugin = STPlugin.getInstance();
+ if(this.init()){
+ if (headers.isEmpty() && footers.isEmpty()){
+ plugin.getLogger().warning(plugin.getPrefix()+"TAB customization disabled because empty customization config!");
+ return;
+ }
+ this.updateTab();
+ /*packet = plugin.getProtocolManager().createPacket(PacketType.Play.Server.PLAYER_LIST_HEADER_FOOTER);
+ boolean both = headers.size() > 0 && footers.size() > 0;
+ boolean header = !both && headers.size() > 0;
+ boolean footer = !both && footers.size() > 0;*/
+
+ //scheduleSyncRepeatingTask
+ //Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new TabRunnable(this),20, Math.convert(Math.Convert.SECONDS,Math.Convert.TICKS,this.refreshRate));
+ }
+
+ }
+
+ private boolean init() throws Exception {
+ if (plugin.getConfig().getBoolean("Tab.enabled")){
+
+ int availProcessors = Server.getCpuCores();
+ if (availProcessors < 3) {
+ plugin.getLogger().warning("You're currently having " + availProcessors + " CPU processors, which is not enough to run a minecraft server with scheduled plugins including SimplifyTools.");
+ plugin.getLogger().warning("You will be experiencing many lags during the server is running. Consider upgrading your CPU to at least reach 3 cores.");
+ }
+
+
+ if (plugin.getConfig().isSet("Tab.refreshRate")){
+ this.refreshRate = plugin.getConfig().getInt("Tab.refreshRate");
+ }else{
+ this.refreshRate=1;
+ }
+
+ //Getting the tab lines from the config
+ headeranimList = plugin.getConfig().getStringList("Tab.headerAnimation");
+ footeranimList = plugin.getConfig().getStringList("Tab.footerAnimation");
+
+ //Investigating lines where we need to run the formatting every tab refresh for example for the RAM usage.
+ //Only storing those lines indexes.
+ formatArray.add("{TOTALRAM}");
+ formatArray.add("{FREERAM}");
+ formatArray.add("{USEDRAM}");
+ formatArray.add("{AVERAGEPING}");
+ formatArray.add("{ONLINEPLAYERS}");
+ formatArray.add("{MAXPLAYERS}");
+ formatArray.add("{MOTD}");
+ formatArray.add("{UPTIME}");
+ formatArray.add("{TPS}");
+ for (String f: formatArray){
+ for (int i = 0; i {
+ try {
+ if (Bukkit.getOnlinePlayers().size()==0){
+ return;
+ }
+
+ if (count1 >= headers.size()) {
+ count1 = 0;
+ }
+ if (count2 >= footers.size()) {
+ count2 = 0;
+ }
+ //Re adding all lines where we replaced something like the RAM usage to every refresh
+ //display current value. (We check those lines in the init())
+ if (DynamicHeaders.size() > 0 && count1 < DynamicHeaders.size()) {
+ if (DynamicHeaders.get(count1) == count1) {
+ addHeaderFooter(true, headeranimList.get(count1), true, count1);
+ }
+ }
+ if (DynamicFooters.size() > 0 && count2 < DynamicFooters.size()) {
+ if (DynamicFooters.get(count2) == count2) {
+ addHeaderFooter(false, footeranimList.get(count2), true, count2);
+ }
+ }
+ /*
+ if (both){
+ plugin.getLogger().info("DEBUG: Sending both (header) JSON: "+WrappedChatComponent.fromHandle(headers.get(count1)).getJson());
+ plugin.getLogger().info("DEBUG: Sending both (footer) JSON: "+WrappedChatComponent.fromHandle(footers.get(count2)).getJson());
+
+ packet.getChatComponents().write(0, WrappedChatComponent.fromHandle(headers.get(count1))).write(1,WrappedChatComponent.fromHandle(footers.get(count2)));
+ }else{
+ if (header){
+ plugin.getLogger().info("DEBUG: Sending header JSON: "+WrappedChatComponent.fromHandle(headers.get(count1)).getJson());
+
+ packet.getChatComponents().write(0, WrappedChatComponent.fromHandle(headers.get(count1))).write(1,WrappedChatComponent.fromText("{\"text\":\"\"}"));
+ }else{
+ if (footer){
+ plugin.getLogger().info("DEBUG: Sending footer JSON: "+WrappedChatComponent.fromHandle(footers.get(count2)).getJson());
+
+ packet.getChatComponents().write(0,WrappedChatComponent.fromText("{\"text\":\"\"}")).write(1,WrappedChatComponent.fromHandle(footers.get(count2)));
+ }
+ }
+ }
+
+ if (Bukkit.getOnlinePlayers().size() > 0) {
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ plugin.getProtocolManager().sendServerPacket(player, packet);
+ }
+ }*/
+
+
+ if (Version.ServerVersion.isCurrentEqualOrLower(Version.ServerVersion.v1_12_R1)) {
+ packet = ClazzContainer.buildPacketPlayOutPlayerListHeaderFooter(headers.get(count1),footers.get(count2));
+ for (Player player : Bukkit.getOnlinePlayers()){
+ Reflection.sendPacket(player,packet);
+ }
+ }else{
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ player.setPlayerListHeaderFooter(headers.get(count1),footers.get(count2));
+ }
+ }
+
+
+ if (headers.size() > 1) {
+ count1++;
+ }
+ if (footers.size() > 1) {
+ count2++;
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ },0,Math.convert(Math.Convert.SECONDS,Math.Convert.TICKS,this.refreshRate));
+
+ }
+
+
+
+ /**
+ * Manages the adding of the tab line and the final formatting of the text.
+ * @param header If true the text will be added to the header, otherwise to the footer.
+ * @param text The formatted tab line text.
+ * @param dynamic If the text contains a replace which need to run every tab refresh then it's true.
+ * @param index Index of the 'dynamic' line. This is an overloading so there we need the index[0] element.
+ */
+ private void addHeaderFooter(boolean header,String text,boolean dynamic,int... index) throws Exception {
+ try {
+ //JsonObject json = new JsonObject();
+ //json.addProperty("text",format(text));
+ String Json = "{\"text\": \""+format(text)+"\"}";
+ //String Json = format(text);
+ //Json = Json.trim();
+ //plugin.getLogger().info("JSON!: "+Json);
+ Object tabText = Reflection.asChatSerializer(Json);
+
+ //plugin.getLogger().info("DEBUG: Adding JSON: "+Json);
+ if (header){
+ if (dynamic){
+
+ headers.set(index[0], Reflection.getChatSerializerString(tabText));
+ //headers.set(index[0],Json);
+ }else {
+ //headers.add(Json);
+ headers.add(Reflection.getChatSerializerString(tabText));
+ }
+ }else{
+ if (dynamic){
+ //footers.set(index[0],Json);
+ footers.set(index[0], Reflection.getChatSerializerString(tabText));
+ }else {
+ //footers.add(Json);
+ footers.add(Reflection.getChatSerializerString(tabText));
+ }
+ }
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+
+ }
+
+
+ /**
+ * Replaces the msg values to their represents and recognizes MC color codes.
+ * @param msg The text.
+ * @return Replaced text with recognized MC color codes.
+ */
+ private String format(String msg){
+ if (msg.contains("{TOTALRAM}")){
+ msg = msg.replace("{TOTALRAM}",String.valueOf(Server.getRAM(Server.RAM.TOTAL)));
+ }
+ if (msg.contains("{FREERAM}")){
+ msg = msg.replace("{FREERAM}",String.valueOf(Server.getRAM(Server.RAM.FREE)));
+ }
+ if (msg.contains("{USEDRAM}")){
+ msg = msg.replace("{USEDRAM}",String.valueOf(Server.getRAM(Server.RAM.USED)));
+ }
+ if (msg.contains("{AVERAGEPING}")){
+ msg = msg.replace("{AVERAGEPING}",String.valueOf(Server.getAveragePing()));
+ }
+ if (msg.contains("{ONLINEPLAYERS}")){
+ msg = msg.replace("{ONLINEPLAYERS}",String.valueOf(plugin.getServer().getOnlinePlayers().size()));
+ }
+ if (msg.contains("{MAXPLAYERS}")){
+ msg = msg.replace("{MAXPLAYERS}",String.valueOf(plugin.getServer().getMaxPlayers()));
+ }
+ if (msg.contains("{UPTIME}")){
+ msg = msg.replace("{UPTIME}", STPlugin.getUptime());
+ }
+ if (msg.contains("{MOTD}")){
+ msg = msg.replace("{MOTD}", plugin.getServer().getMotd()); //LegacyComponentSerializer.legacyAmpersand().serialize(plugin.getServer().motd().asComponent())
+ }
+ if (msg.contains("{TPS}")){
+ msg = msg.replace("{TPS}",String.format("%.2f", TPS.getTPS()));
+ }
+ return ChatColor.translateAlternateColorCodes('&',msg);
+ }
+}
diff --git a/src/main/java/tk/ditservices/listeners/ChatEvents.java b/src/main/java/hu/ditservices/listeners/ChatEvents.java
similarity index 70%
rename from src/main/java/tk/ditservices/listeners/ChatEvents.java
rename to src/main/java/hu/ditservices/listeners/ChatEvents.java
index bdc2e9c..5832344 100644
--- a/src/main/java/tk/ditservices/listeners/ChatEvents.java
+++ b/src/main/java/hu/ditservices/listeners/ChatEvents.java
@@ -1,6 +1,6 @@
-package tk.ditservices.listeners;
+package hu.ditservices.listeners;
-import tk.ditservices.DITSystem;
+import hu.ditservices.STPlugin;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
@@ -9,26 +9,24 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
-import tk.ditservices.utils.AdvancementHelper;
+import hu.ditservices.utils.AdvancementHelper;
public class ChatEvents implements Listener {
- private DITSystem plugin;
+ private STPlugin plugin;
private FileConfiguration config;
- public ChatEvents(DITSystem instance){
+ public ChatEvents(STPlugin instance){
this.plugin = instance;
this.config = plugin.config;
}
@EventHandler(priority = EventPriority.MONITOR)
public void onAdvance(PlayerAdvancementDoneEvent e){
- if (config.isSet("CustomAdvancement.enabled")){
- if (config.getBoolean("CustomAdvancement.enabled")){
- AdvancementHelper helper = new AdvancementHelper(plugin,this.config);
+ if (config.isSet("CustomAdvancement.enabled") && config.getBoolean("CustomAdvancement.enabled")){
+ AdvancementHelper helper = new AdvancementHelper(this.config);
if(helper.check(e.getAdvancement().getKey().getKey())) {
final Player player = e.getPlayer();
String title = helper.find(e.getAdvancement().getKey().getKey());
Bukkit.broadcastMessage(plugin.getPrefix()+ChatColor.translateAlternateColorCodes('&', helper.getText(player.getName(),title)));
}
- }
}
}
diff --git a/src/main/java/tk/ditservices/listeners/LogChat.java b/src/main/java/hu/ditservices/listeners/LogChat.java
similarity index 64%
rename from src/main/java/tk/ditservices/listeners/LogChat.java
rename to src/main/java/hu/ditservices/listeners/LogChat.java
index 985e219..11da830 100644
--- a/src/main/java/tk/ditservices/listeners/LogChat.java
+++ b/src/main/java/hu/ditservices/listeners/LogChat.java
@@ -1,7 +1,7 @@
-package tk.ditservices.listeners;
+package hu.ditservices.listeners;
-import tk.ditservices.DITLog;
-import tk.ditservices.DITSystem;
+import hu.ditservices.utils.Logger;
+import hu.ditservices.STPlugin;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
@@ -11,9 +11,9 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
public class LogChat implements Listener {
- DITSystem plugin;
+ STPlugin plugin;
FileConfiguration config;
- public LogChat(DITSystem instance){
+ public LogChat(STPlugin instance){
this.plugin = instance;
this.config = plugin.config;
}
@@ -22,8 +22,8 @@ public class LogChat implements Listener {
if (config.getBoolean("Log.Chat")) {
Player player = event.getPlayer();
String format = config.isSet("Log.FormatChat") ? config.getString("Log.FormatChat") : "[{DATE}] - {TIME} - {ACTION} - {PLAYERNAME}: {MSG}";
- String LogMsg = format.replace("{DATE}",DITLog.getDate()).replace("{TIME}",DITLog.getTime()).replace("{PLAYERNAME}",player.getDisplayName()).replace("{MSG}",event.getMessage()).replace("{ACTION}","[CHAT]");
- DITLog.logLine(ChatColor.stripColor(LogMsg));
+ String LogMsg = format.replace("{DATE}", Logger.getDate()).replace("{TIME}", Logger.getTime()).replace("{PLAYERNAME}",player.getDisplayName()).replace("{MSG}",event.getMessage()).replace("{ACTION}","[CHAT]");
+ Logger.logLine(ChatColor.stripColor(LogMsg));
}
}
}
diff --git a/src/main/java/tk/ditservices/listeners/LogCommand.java b/src/main/java/hu/ditservices/listeners/LogCommand.java
similarity index 64%
rename from src/main/java/tk/ditservices/listeners/LogCommand.java
rename to src/main/java/hu/ditservices/listeners/LogCommand.java
index b643479..3577653 100644
--- a/src/main/java/tk/ditservices/listeners/LogCommand.java
+++ b/src/main/java/hu/ditservices/listeners/LogCommand.java
@@ -1,7 +1,7 @@
-package tk.ditservices.listeners;
+package hu.ditservices.listeners;
-import tk.ditservices.DITLog;
-import tk.ditservices.DITSystem;
+import hu.ditservices.utils.Logger;
+import hu.ditservices.STPlugin;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
@@ -11,9 +11,9 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
public class LogCommand implements Listener {
- DITSystem plugin;
+ STPlugin plugin;
FileConfiguration config;
- public LogCommand(DITSystem instance){
+ public LogCommand(STPlugin instance){
this.plugin = instance;
this.config = plugin.config;
@@ -23,8 +23,8 @@ public class LogCommand implements Listener {
if (config.getBoolean("Log.Command")) {
Player player = event.getPlayer();
String format = config.isSet("Log.FormatCommand") ? config.getString("Log.FormatCommand") : "[{DATE}] - {TIME} - {ACTION} - {PLAYERNAME}: {COMMAND}";
- String LogMsg = format.replace("{DATE}",DITLog.getDate()).replace("{TIME}",DITLog.getTime()).replace("{PLAYERNAME}",player.getDisplayName()).replace("{COMMAND}",event.getMessage()).replace("{ACTION}","[COMMAND]");
- DITLog.logLine(ChatColor.stripColor(LogMsg));
+ String LogMsg = format.replace("{DATE}", Logger.getDate()).replace("{TIME}", Logger.getTime()).replace("{PLAYERNAME}",player.getDisplayName()).replace("{COMMAND}",event.getMessage()).replace("{ACTION}","[COMMAND]");
+ Logger.logLine(ChatColor.stripColor(LogMsg));
}
}
}
diff --git a/src/main/java/tk/ditservices/listeners/LogConnect.java b/src/main/java/hu/ditservices/listeners/LogConnect.java
similarity index 77%
rename from src/main/java/tk/ditservices/listeners/LogConnect.java
rename to src/main/java/hu/ditservices/listeners/LogConnect.java
index 18f6383..bc0f718 100644
--- a/src/main/java/tk/ditservices/listeners/LogConnect.java
+++ b/src/main/java/hu/ditservices/listeners/LogConnect.java
@@ -1,7 +1,7 @@
-package tk.ditservices.listeners;
+package hu.ditservices.listeners;
-import tk.ditservices.DITLog;
-import tk.ditservices.DITSystem;
+import hu.ditservices.utils.Logger;
+import hu.ditservices.STPlugin;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
@@ -13,11 +13,11 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
public class LogConnect implements Listener {
- DITSystem plugin;
+ STPlugin plugin;
private String JoinMsg;
private String LeaveMsg;
FileConfiguration config;
- public LogConnect(DITSystem instance){
+ public LogConnect(STPlugin instance){
this.plugin = instance;
this.config = plugin.config;
if (config.getBoolean("CustomMsg.enabled")){
@@ -39,8 +39,8 @@ public class LogConnect implements Listener {
if (config.getBoolean("Log.Connect")) {
String format = config.isSet("Log.FormatConnect") ? config.getString("Log.FormatConnect") : "[{DATE}] - {TIME} - {ACTION} - {PLAYERNAME} UUID: {UUID}";
- String LogMsg = format.replace("{DATE}",DITLog.getDate()).replace("{TIME}",DITLog.getTime()).replace("{PLAYERNAME}",player.getDisplayName()).replace("{UUID}",player.getUniqueId().toString()).replace("{ACTION}","[CONNECT]");
- DITLog.logLine(ChatColor.stripColor(LogMsg));
+ String LogMsg = format.replace("{DATE}", Logger.getDate()).replace("{TIME}", Logger.getTime()).replace("{PLAYERNAME}",player.getDisplayName()).replace("{UUID}",player.getUniqueId().toString()).replace("{ACTION}","[CONNECT]");
+ Logger.logLine(ChatColor.stripColor(LogMsg));
}
}
@EventHandler(priority = EventPriority.MONITOR)
@@ -55,8 +55,8 @@ public class LogConnect implements Listener {
}
if (config.getBoolean("Log.Connect")) {
String format = config.isSet("Log.FormatConnect") ? config.getString("Log.FormatConnect") : "[{DATE}] - {TIME} - {ACTION} - {PLAYERNAME} UUID: {UUID}";
- String LogMsg = format.replace("{DATE}",DITLog.getDate()).replace("{TIME}",DITLog.getTime()).replace("{PLAYERNAME}",player.getDisplayName()).replace("{UUID}",player.getUniqueId().toString()).replace("{ACTION}","[DISCONNECT]");
- DITLog.logLine(ChatColor.stripColor(LogMsg));
+ String LogMsg = format.replace("{DATE}", Logger.getDate()).replace("{TIME}", Logger.getTime()).replace("{PLAYERNAME}",player.getDisplayName()).replace("{UUID}",player.getUniqueId().toString()).replace("{ACTION}","[DISCONNECT]");
+ Logger.logLine(ChatColor.stripColor(LogMsg));
}
if (config.getBoolean("Saving.enabled")){
if(config.getBoolean("Saving.onDisconnect")){
diff --git a/src/main/java/tk/ditservices/utils/AdvancementHelper.java b/src/main/java/hu/ditservices/utils/AdvancementHelper.java
similarity index 76%
rename from src/main/java/tk/ditservices/utils/AdvancementHelper.java
rename to src/main/java/hu/ditservices/utils/AdvancementHelper.java
index 79b8edf..16bbcd2 100644
--- a/src/main/java/tk/ditservices/utils/AdvancementHelper.java
+++ b/src/main/java/hu/ditservices/utils/AdvancementHelper.java
@@ -1,13 +1,20 @@
-package tk.ditservices.utils;
+package hu.ditservices.utils;
-import tk.ditservices.DITSystem;
+import hu.ditservices.STPlugin;
+import org.bukkit.GameRule;
+import org.bukkit.World;
import org.bukkit.configuration.file.FileConfiguration;
+import java.lang.reflect.Method;
+import java.util.List;
+
public class AdvancementHelper {
- private DITSystem plugin;
- private FileConfiguration config;
- public AdvancementHelper(DITSystem instance, FileConfiguration c){
- this.plugin = instance;
+ private final STPlugin plugin = STPlugin.getInstance();
+ private final FileConfiguration config;
+
+ private boolean initialized = false;
+
+ public AdvancementHelper(FileConfiguration c){
this.config = c;
this.initialize();
}
@@ -108,7 +115,32 @@ public class AdvancementHelper {
if (config.isSet("CustomAdvancement.formats.challenge")) {
out_type[2] = config.getString("CustomAdvancement.formats.challenge");
}
+ String disablemsg = plugin.getPrefix()+"Disabling vanilla advancement messages for ";
+ List worlds = this.plugin.getServer().getWorlds();
+ Method setRuleMethod, getRuleMethod;
+ try {
+ for (World w : worlds) {
+ if (Version.ServerVersion.isCurrentEqualOrLower(Version.ServerVersion.v1_12_R1)){
+ getRuleMethod = w.getClass().getDeclaredMethod("getGameRuleValue", String.class);
+ if (getRuleMethod.invoke(w,"announceAdvancements")=="true"){
+ setRuleMethod = w.getClass().getDeclaredMethod("setGameRuleValue", String.class, String.class);
+ setRuleMethod.invoke(w,"announceAdvancements", "false");
+ this.plugin.getLogger().info(disablemsg + w.getName());
+ }
+ }else{
+ getRuleMethod = w.getClass().getDeclaredMethod("getGameRuleValue", GameRule.class);
+ if ((boolean)getRuleMethod.invoke(w,GameRule.ANNOUNCE_ADVANCEMENTS)){
+ setRuleMethod = w.getClass().getDeclaredMethod("setGameRule", GameRule.class, Object.class);
+ setRuleMethod.invoke(w,GameRule.ANNOUNCE_ADVANCEMENTS,false);
+ this.plugin.getLogger().info(disablemsg + w.getName());
+ }
+ }
+ //w.setGameRule(GameRule.ANNOUNCE_ADVANCEMENTS, false);
+ }
+ } catch (Exception e){
+ e.printStackTrace();
+ }
}
public String getText(String PlayerName,String title){
String rtrn = this.out_type[this.type];
diff --git a/src/main/java/tk/ditservices/utils/Cooldown.java b/src/main/java/hu/ditservices/utils/Cooldown.java
similarity index 82%
rename from src/main/java/tk/ditservices/utils/Cooldown.java
rename to src/main/java/hu/ditservices/utils/Cooldown.java
index 6809dfa..f9af53c 100644
--- a/src/main/java/tk/ditservices/utils/Cooldown.java
+++ b/src/main/java/hu/ditservices/utils/Cooldown.java
@@ -1,23 +1,23 @@
-package tk.ditservices.utils;
+package hu.ditservices.utils;
-import tk.ditservices.DITSystem;
+import hu.ditservices.STPlugin;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
-import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
-import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class Cooldown {
- private int delay = 2; //seconds
- DITSystem plugin;
- Map cooldowns = new HashMap<>();
- public long time_left;
+ STPlugin plugin;
FileConfiguration config;
- public Cooldown(DITSystem instance){
+
+ Map cooldowns = new HashMap<>();
+ private int delay = 2; //seconds
+ public long time_left;
+
+ public Cooldown(STPlugin instance){
this.plugin = instance;
this.config = plugin.config;
if (config.isSet("Cooldown.seconds")){
@@ -38,21 +38,14 @@ public class Cooldown {
if (this.cooldowns.containsKey(player.getName())) {
if (this.cooldowns.get(player.getName()) > System.currentTimeMillis()) {
this.time_left = (this.cooldowns.get(player.getName()) - System.currentTimeMillis()) / 1000;
- if (this.time_left == 0) {
- return true;
- }
- return false;
+ return this.time_left == 0;
}
return true;
}
- } else{
+ } else {
return true;
}
}
- if (sender instanceof ConsoleCommandSender){
- return true;
- }
-
return true;
}
public void Add(Player player){
diff --git a/src/main/java/tk/ditservices/DITLog.java b/src/main/java/hu/ditservices/utils/Logger.java
similarity index 84%
rename from src/main/java/tk/ditservices/DITLog.java
rename to src/main/java/hu/ditservices/utils/Logger.java
index 72d24ad..b860a15 100644
--- a/src/main/java/tk/ditservices/DITLog.java
+++ b/src/main/java/hu/ditservices/utils/Logger.java
@@ -1,4 +1,4 @@
-package tk.ditservices;
+package hu.ditservices.utils;
import java.io.BufferedWriter;
@@ -10,7 +10,7 @@ import java.util.Calendar;
import org.bukkit.event.Listener;
-public class DITLog implements Listener {
+public class Logger implements Listener {
public static String Location = "plugins/SimplifyTools/logs/";
/**
@@ -34,9 +34,9 @@ public class DITLog implements Listener {
* @param text The text to log.
*/
public static void logLine(String text){
- String fileName = DITLog.getDate()+".txt";
+ String fileName = Logger.getDate()+".txt";
- File file = new File(DITLog.Location+fileName);
+ File file = new File(Logger.Location+fileName);
if (!file.exists()){ createFile(); }
try {
@@ -51,12 +51,12 @@ public class DITLog implements Listener {
private static void createFile(){
String fileName = getDate() + ".txt";
- File directory = new File(DITLog.Location);
+ File directory = new File(Logger.Location);
if(!directory.exists()){
directory.mkdirs();
}
- File file = new File(DITLog.Location + fileName);
+ File file = new File(Logger.Location + fileName);
if( !file.exists() ){
try {
file.createNewFile();
diff --git a/src/main/java/tk/ditservices/utils/Math.java b/src/main/java/hu/ditservices/utils/Math.java
similarity index 95%
rename from src/main/java/tk/ditservices/utils/Math.java
rename to src/main/java/hu/ditservices/utils/Math.java
index b64e201..cddfccd 100644
--- a/src/main/java/tk/ditservices/utils/Math.java
+++ b/src/main/java/hu/ditservices/utils/Math.java
@@ -1,4 +1,4 @@
-package tk.ditservices.utils;
+package hu.ditservices.utils;
import java.io.IOException;
diff --git a/src/main/java/tk/ditservices/utils/Server.java b/src/main/java/hu/ditservices/utils/Server.java
similarity index 70%
rename from src/main/java/tk/ditservices/utils/Server.java
rename to src/main/java/hu/ditservices/utils/Server.java
index 08177a8..ba0d521 100644
--- a/src/main/java/tk/ditservices/utils/Server.java
+++ b/src/main/java/hu/ditservices/utils/Server.java
@@ -1,12 +1,12 @@
-package tk.ditservices.utils;
+package hu.ditservices.utils;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.lang.Math;
-import java.lang.reflect.InvocationTargetException;
-
public class Server {
+
+
public enum RAM {
FREE,USED,TOTAL
}
@@ -17,7 +17,6 @@ public class Server {
public static long getRAM(Server.RAM t) {
long mb = 1048576L;
Runtime runtime = Runtime.getRuntime();
- runtime.gc();
if (t == RAM.FREE){
return runtime.freeMemory() / mb;
}
@@ -30,16 +29,27 @@ public class Server {
return 0;
}
+ /**
+ * Get the CPU cores of the MC server.
+ */
+ public static int getCpuCores(){
+ return Runtime.getRuntime().availableProcessors();
+ }
+
+
/**
* Get a player's ping.
* @param player The player object.
+ * @return Returns the player's ping in integer.
*/
public static int getPlayerPing(Player player){
try {
- //Object entityPlayer = player.getClass().getMethod("getHandle").invoke(player);
- //return (int) entityPlayer.getClass().getField("ping").get(entityPlayer);
+ if (Version.ServerVersion.isCurrentLower(Version.ServerVersion.v1_16_R1)){
+ Object entityPlayer = player.getClass().getMethod("getHandle").invoke(player);
+ return (int) entityPlayer.getClass().getField("ping").get(entityPlayer);
+ }
return player.getPing();
- } catch (IllegalArgumentException | SecurityException e) {
+ } catch (Exception e) {
e.printStackTrace();
return -1;
}
@@ -54,7 +64,7 @@ public class Server {
if (Bukkit.getOnlinePlayers().size() !=0){
onlineplayers =Bukkit.getOnlinePlayers().size();
for (Player player : Bukkit.getOnlinePlayers()){
- sum += player.getPing();
+ sum += Server.getPlayerPing(player);
}
avg = Math.floorDiv(sum,onlineplayers);
diff --git a/src/main/java/hu/ditservices/utils/TPS.java b/src/main/java/hu/ditservices/utils/TPS.java
new file mode 100644
index 0000000..3ba28f2
--- /dev/null
+++ b/src/main/java/hu/ditservices/utils/TPS.java
@@ -0,0 +1,61 @@
+package hu.ditservices.utils;
+
+import org.bukkit.ChatColor;
+
+public class TPS implements Runnable {
+
+ public static int TICK_COUNT = 0;
+ public static long[] TICKS = new long[600];
+ public static long LAST_TICK = 0L;
+
+
+
+ public static double getTPS() {
+ return getTPS(100);
+ }
+
+ public static ChatColor getColor(double... tps){
+ double s = TPS.getTPS();
+ if (tps.length>0){
+ s = tps[0];
+ }
+
+ if (s == 18.0) {
+ return ChatColor.GREEN;
+ } else if (s >= 15.0) {
+ return ChatColor.YELLOW;
+ } else {
+ return ChatColor.RED;
+ }
+ }
+
+
+ public static double getTPS(int ticks) {
+ try {
+ if (TICK_COUNT < ticks) {
+ return 20.0D;
+ }
+ int target = (TICK_COUNT - 1 - ticks) % TICKS.length;
+ long elapsed = System.currentTimeMillis() - TICKS[target];
+
+ return ticks / (elapsed / 1000.0D);
+ } catch (Exception ignored){
+
+ }
+ return 0;
+ }
+
+ public static long getElapsed(int tickID) {
+ if (TICK_COUNT - tickID >= TICKS.length) {
+ }
+
+ long time = TICKS[(tickID % TICKS.length)];
+ return System.currentTimeMillis() - time;
+ }
+ @Override
+ public void run() {
+ TICKS[(TICK_COUNT % TICKS.length)] = System.currentTimeMillis();
+
+ TICK_COUNT += 1;
+ }
+}
diff --git a/src/main/java/hu/ditservices/utils/Version.java b/src/main/java/hu/ditservices/utils/Version.java
new file mode 100644
index 0000000..07dce36
--- /dev/null
+++ b/src/main/java/hu/ditservices/utils/Version.java
@@ -0,0 +1,100 @@
+package hu.ditservices.utils;
+
+import java.util.regex.Pattern;
+
+public class Version {
+ public enum ServerVersion {
+ v1_8_R1,
+ v1_8_R2,
+ v1_8_R3,
+ v1_9_R1,
+ v1_9_R2,
+ v1_10_R1,
+ v1_11_R1,
+ v1_12_R1,
+ v1_13_R1,
+ v1_13_R2,
+ v1_14_R1,
+ v1_14_R2,
+ v1_15_R1,
+ v1_15_R2,
+ v1_16_R1,
+ v1_16_R2,
+ v1_16_R3,
+ v1_17_R1,
+ v1_17_R2,
+ v1_18_R1,
+ v1_18_R2,
+ v1_19_R1,
+ v1_19_R2;
+
+ private int value;
+
+ private static String[] arrayVersion;
+ private static ServerVersion current;
+
+ ServerVersion() {
+ value = Integer.valueOf(getNumberEscapeSequence().matcher(name()).replaceAll(""));
+ }
+
+ public static ServerVersion getCurrent() {
+ if (current != null)
+ return current;
+
+ String[] v = getArrayVersion();
+ String vv = v[v.length - 1];
+ for (ServerVersion one : values()) {
+ if (one.name().equalsIgnoreCase(vv)) {
+ current = one;
+ break;
+ }
+ }
+
+ if (current == null) {
+ current = ServerVersion.v1_16_R3;
+ }
+
+ return current;
+ }
+
+ public static String[] getArrayVersion() {
+ if (arrayVersion == null) {
+ arrayVersion = org.bukkit.Bukkit.getServer().getClass().getPackage().getName().split("\\.");
+ }
+
+ return arrayVersion;
+ }
+
+ public static boolean isCurrentEqualOrHigher(ServerVersion v) {
+ return getCurrent().value >= v.value;
+ }
+
+ public static boolean isCurrentHigher(ServerVersion v) {
+ return getCurrent().value > v.value;
+ }
+
+ public static boolean isCurrentLower(ServerVersion v) {
+ return getCurrent().value < v.value;
+ }
+
+ public static boolean isCurrentEqualOrLower(ServerVersion v) {
+ return getCurrent().value <= v.value;
+ }
+
+ public static boolean isCurrentEqual(ServerVersion v) {
+ return getCurrent().value == v.value;
+ }
+ }
+
+ private static final Pattern COMMA_SPACE_SEPARATED_PATTERN = Pattern.compile(", ");
+ private static final Pattern NUMBER_ESCAPE_SEQUENCE = Pattern.compile("[^\\d]");
+
+ public static Pattern getCommaSpaceSeparatedPattern() {
+ return COMMA_SPACE_SEPARATED_PATTERN;
+ }
+
+ public static Pattern getNumberEscapeSequence() {
+ return NUMBER_ESCAPE_SEQUENCE;
+ }
+
+}
diff --git a/src/main/java/hu/ditservices/utils/reflection/ClazzContainer.java b/src/main/java/hu/ditservices/utils/reflection/ClazzContainer.java
new file mode 100644
index 0000000..0177100
--- /dev/null
+++ b/src/main/java/hu/ditservices/utils/reflection/ClazzContainer.java
@@ -0,0 +1,93 @@
+package hu.ditservices.utils.reflection;
+
+import hu.ditservices.utils.Version;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+public final class ClazzContainer {
+ private static Class> packet, ChatComponentTextClass, CraftPlayerClass, IChatBaseComponentClass, PacketPlayOutPlayerListHeaderFooterClass;
+ private static Object ChatComponentText, IChatBaseComponent;
+
+ static {
+ try {
+ IChatBaseComponentClass = classByName("net.minecraft.network.chat", "IChatBaseComponent");
+ packet = classByName("net.minecraft.network.protocol", "Packet");
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+ public ClazzContainer(){
+
+ }
+
+ public static Class> classByName(String newPackageName, String name) throws ClassNotFoundException {
+ if (Version.ServerVersion.isCurrentLower(Version.ServerVersion.v1_17_R1) || newPackageName == null) {
+ newPackageName = "net.minecraft.server." + Version.ServerVersion.getArrayVersion()[3];
+ }
+
+ return Class.forName(newPackageName + "." + name);
+ }
+
+ public static Object buildChatComponentText(String text) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
+ Constructor> constructor;
+ if (Version.ServerVersion.isCurrentEqualOrHigher(Version.ServerVersion.v1_17_R1)){
+ if (ChatComponentTextClass == null){
+ ChatComponentTextClass = Reflection.getClass("net.minecraft.network.chat.ChatComponentText");
+ }
+
+ constructor = ChatComponentTextClass.getConstructor(String.class);
+ return constructor.newInstance(text);
+ }else{
+ if (ChatComponentTextClass == null){
+ ChatComponentTextClass = Reflection.getClass("net.minecraft.server.%v.ChatComponentText");
+ }
+ constructor = Reflection.getClass("net.minecraft.server.%v.ChatComponentText").getConstructor(String.class);
+ return constructor.newInstance(text);
+ }
+ }
+
+ public static Object buildPacketPlayOutPlayerListHeaderFooter(Object header, Object footer) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
+ Constructor> constructor;
+ Field headerField;
+ Field footerField;
+ Object packet;
+ if (Version.ServerVersion.isCurrentEqualOrHigher(Version.ServerVersion.v1_17_R1)){
+ if (PacketPlayOutPlayerListHeaderFooterClass == null){
+ PacketPlayOutPlayerListHeaderFooterClass = Reflection.getClass("net.minecraft.network.protocol.game.PacketPlayOutPlayerListHeaderFooter");
+ }
+ }else{
+ if (PacketPlayOutPlayerListHeaderFooterClass == null){
+ PacketPlayOutPlayerListHeaderFooterClass = Reflection.getClass("net.minecraft.server.%v.PacketPlayOutPlayerListHeaderFooter");
+ }
+ }
+ if (Version.ServerVersion.isCurrentEqualOrLower(Version.ServerVersion.v1_12_R1)){
+ constructor = PacketPlayOutPlayerListHeaderFooterClass.getConstructor();
+ packet = constructor.newInstance();
+ try {
+ headerField = packet.getClass().getDeclaredField("a");
+ headerField.setAccessible(true);
+ headerField.set(packet, buildChatComponentText((String) header));
+ footerField = packet.getClass().getDeclaredField("b");
+ footerField.setAccessible(true);
+ footerField.set(packet, buildChatComponentText((String) footer));
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ }else{
+ constructor = PacketPlayOutPlayerListHeaderFooterClass.getConstructor(IChatBaseComponentClass,IChatBaseComponentClass);
+ packet = constructor.newInstance(header,footer);
+ }
+ return packet;
+ }
+
+
+ public static Class> getIChatBaseComponent() {
+ return IChatBaseComponentClass;
+ }
+ public static Class> getPacket() {
+ return packet;
+ }
+}
diff --git a/src/main/java/hu/ditservices/utils/reflection/Reflection.java b/src/main/java/hu/ditservices/utils/reflection/Reflection.java
new file mode 100644
index 0000000..f24f188
--- /dev/null
+++ b/src/main/java/hu/ditservices/utils/reflection/Reflection.java
@@ -0,0 +1,122 @@
+package hu.ditservices.utils.reflection;
+
+import hu.ditservices.utils.Version;
+import org.bukkit.entity.Player;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+public class Reflection {
+
+ private static Method playerHandleMethod, sendPacketMethod, chatSerializerMethodA,chatSerializerMethodgetString;
+ private static Field playerConnectionField;
+ private static Class> chatSerializer;
+
+ private Reflection(){}
+
+
+ public static Class> getClass(String name) {
+ try {
+ return Class.forName(name.replace("%v",Version.ServerVersion.getCurrent().toString()));
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public static Class> getCraftClass(String className) throws ClassNotFoundException {
+ return Class.forName("org.bukkit.craftbukkit." + Version.ServerVersion.getArrayVersion()[3] + "." + className);
+ }
+
+ public static Object getPlayerHandle(Player player) throws Exception {
+ if (playerHandleMethod == null) {
+ playerHandleMethod = player.getClass().getDeclaredMethod("getHandle");
+ }
+
+ return playerHandleMethod.invoke(player);
+ }
+
+ public static void sendPacket(Player player, Object packet) {
+ if (player == null) {
+ return;
+ }
+
+ try {
+ Object playerHandle = getPlayerHandle(player);
+
+ if (playerConnectionField == null) {
+ playerConnectionField = playerHandle.getClass().getDeclaredField(
+ (Version.ServerVersion.isCurrentEqualOrHigher(Version.ServerVersion.v1_17_R1) ? "b" : "playerConnection"));
+ }
+
+ Object playerConnection = playerConnectionField.get(playerHandle);
+
+ if (sendPacketMethod == null) {
+ sendPacketMethod = playerConnection.getClass().getDeclaredMethod(
+ Version.ServerVersion.isCurrentEqualOrHigher(Version.ServerVersion.v1_18_R1) ? "a" : "sendPacket",
+ ClazzContainer.getPacket());
+ }
+
+ sendPacketMethod.invoke(playerConnection, packet);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static String getChatSerializerString(Object serializer) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+ if (chatSerializerMethodgetString==null){
+ if (Version.ServerVersion.isCurrentEqualOrLower(Version.ServerVersion.v1_12_R1)){
+ chatSerializerMethodgetString = ClazzContainer.getIChatBaseComponent().getDeclaredMethod("getText");
+ }else{
+ chatSerializerMethodgetString = ClazzContainer.getIChatBaseComponent().getDeclaredMethod("getString");
+ }
+ }
+ return (String) chatSerializerMethodgetString.invoke(serializer);
+ //return (String) ClazzContainer.getIChatBaseComponent().cast(chatSerializerMethodgetString.invoke(serializer));
+ }
+
+
+
+ public static Object asChatSerializer(String json) throws Exception {
+ try {
+ if (Version.ServerVersion.isCurrentEqualOrHigher(Version.ServerVersion.v1_17_R1)){
+ if (chatSerializer==null){
+ chatSerializer = Class.forName("net.minecraft.network.chat.IChatBaseComponent$ChatSerializer");
+ }
+
+ }else{
+ if (chatSerializer==null){
+ chatSerializer = Class.forName("net.minecraft.server." + Version.ServerVersion.getArrayVersion()[3] + ".IChatBaseComponent$ChatSerializer");
+ }
+ }
+ if (chatSerializerMethodA == null) {
+ chatSerializerMethodA = chatSerializer.getMethod("a", String.class);
+ }
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ return chatSerializerMethodA.invoke(chatSerializer,json);
+ //return ClazzContainer.getIChatBaseComponent().cast(chatSerializerMethodA.invoke(chatSerializer, json));
+ }
+
+ /*public static Class> getNMSClassRegex(String nmsClass) {
+
+ String version = null;
+ Pattern pat = Pattern.compile("net\\.minecraft\\.(?:server)?\\.(v(?:\\d_)+R\\d)");
+ for (Package p : Package.getPackages()) {
+ String name = p.getName();
+ Matcher m = pat.matcher(name);
+ if (m.matches()) version = m.group(1);
+ }
+
+ if (version == null) return null;
+
+ try {
+ return Class.forName(String.format(nmsClass, version));
+ } catch (ClassNotFoundException e) {
+ return null;
+ }
+
+ }*/
+}
diff --git a/src/main/java/tk/ditservices/DITSystem.java b/src/main/java/tk/ditservices/DITSystem.java
deleted file mode 100644
index e1b385b..0000000
--- a/src/main/java/tk/ditservices/DITSystem.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package tk.ditservices;
-
-import org.bstats.bukkit.Metrics;
-import org.bukkit.scheduler.BukkitScheduler;
-import tk.ditservices.commands.DitCmd;
-import tk.ditservices.listeners.ChatEvents;
-import tk.ditservices.listeners.LogChat;
-import tk.ditservices.listeners.LogCommand;
-import tk.ditservices.listeners.LogConnect;
-import com.tchristofferson.configupdater.ConfigUpdater;
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.GameRule;
-import org.bukkit.World;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.PluginCommand;
-import org.bukkit.configuration.file.FileConfiguration;
-import org.bukkit.event.Listener;
-import org.bukkit.plugin.java.JavaPlugin;
-import tk.ditservices.utils.Math;
-
-import com.jeff_media.updatechecker.UpdateCheckSource;
-import com.jeff_media.updatechecker.UpdateChecker;
-import com.jeff_media.updatechecker.UserAgentBuilder;
-
-import java.io.*;
-import java.util.Collections;
-import java.util.List;
-import java.util.logging.Logger;
-
-public final class DITSystem extends JavaPlugin implements CommandExecutor, Listener {
- private static DITSystem instance;
- Logger log = Bukkit.getLogger();
- //private DitPluginManager dplug;
- public TabManager tab;
-
- public FileConfiguration config;
-
-
- @Override
- public void onEnable() {
- saveDefaultConfig();
- instance = this;
- this.DIT_initialize();
- this.tab = new TabManager(this,this.config);
- //this.dplug = new DitPluginManager(this);
- System.out.println(this.getPrefix()+"Started running.");
-
- new UpdateChecker(this, UpdateCheckSource.GITHUB_RELEASE_TAG, "LabodiDavid/SimplifyTools")
- .setDownloadLink("https://github.com/LabodiDavid/SimplifyTools/releases")
- .setDonationLink("https://paypal.me/labodidavid")
- .setChangelogLink("https://github.com/LabodiDavid/SimplifyTools/blob/main/docs/ChangeLog.md")
- .setNotifyOpsOnJoin(true)
- .setNotifyByPermissionOnJoin("st.admin")
- .setUserAgent(new UserAgentBuilder().addPluginNameAndVersion())
- .checkEveryXHours(24)
- .checkNow();
- Metrics metrics = new Metrics(this, 15108);
- }
-
- private void DIT_initialize() {
- if (this.Reload()){
- initOptions();
-
- PluginCommand ditCmd = this.getCommand("st");
- ditCmd.setExecutor(new DitCmd(this));
- ditCmd.setTabCompleter(new DITTabCompleter());
-
- getServer().getPluginManager().registerEvents(this, this);
- getServer().getPluginManager().registerEvents(new LogChat(this), this);
- getServer().getPluginManager().registerEvents(new LogCommand(this), this);
- getServer().getPluginManager().registerEvents(new LogConnect(this), this);
- getServer().getPluginManager().registerEvents(new ChatEvents(this), this);
-
- }
- }
- public String getPrefix(){
- if (this.config.isSet("Prefix")){
- return ChatColor.translateAlternateColorCodes('&', this.config.getString("Prefix"));
- }else{
- return ChatColor.translateAlternateColorCodes('&',"&a[&fSimplify&7Tools&2] &4- &f");
- }
- }
- public static DITSystem getInstance(){
- return instance;
- }
- public void initOptions(){
-
- if (config.getBoolean("Saving.enabled") && config.getInt("Saving.interval")>0){
- BukkitScheduler scheduler = getServer().getScheduler();
- scheduler.scheduleSyncRepeatingTask(instance, new Runnable() {
- @Override
- public void run() {
- String p = config.isSet("Saving.broadcastMsgProgress") ? config.getString("Saving.broadcastMsgProgress").replace("{PREFIX}",instance.getPrefix()) : instance.getPrefix()+"Auto save in progress..";
- String d = config.isSet("Saving.broadcastMsgDone") ? config.getString("Saving.broadcastMsgDone").replace("{PREFIX}",instance.getPrefix()) : instance.getPrefix()+"Auto save done.";
- Bukkit.broadcast(p,"st.st");
- for(World w : Bukkit.getServer().getWorlds()){
- w.save();
- }
- Bukkit.savePlayers();
- Bukkit.broadcast(d,"st.st");
- }
- }, 0L, Math.convert(Math.Convert.SECONDS,Math.Convert.TICKS,instance.config.getInt("Saving.interval")));
- }
-
- if (this.config.isSet("CustomAdvancement.enabled")) {
- if(config.getBoolean("CustomAdvancement.enabled")){
-
- List worlds = getServer().getWorlds();
- for (World w : worlds) {
- if(w.getGameRuleValue(GameRule.ANNOUNCE_ADVANCEMENTS)) {
- w.setGameRule(GameRule.ANNOUNCE_ADVANCEMENTS, false);
- log.info(this.getPrefix()+"Disabling vanilla advancement messages for " + w.getName());
- }
- }
- }
- }
-
- }
- public boolean Reload(){
- File configFile = new File(getDataFolder(), "config.yml");
- try {
- ConfigUpdater.update(this, "config.yml", configFile, Collections.emptyList());
- } catch (IOException e) {
- e.printStackTrace();
- }
- reloadConfig();
- this.config = getConfig();
-
- return true;
- }
- @Override
- public void onDisable() {
- System.out.println(this.getPrefix()+" stopped.");
- }
-}
diff --git a/src/main/java/tk/ditservices/TabManager.java b/src/main/java/tk/ditservices/TabManager.java
deleted file mode 100644
index 9129a79..0000000
--- a/src/main/java/tk/ditservices/TabManager.java
+++ /dev/null
@@ -1,208 +0,0 @@
-package tk.ditservices;
-
-import net.minecraft.network.chat.ChatComponentText;
-import net.minecraft.network.chat.IChatBaseComponent;
-import net.minecraft.network.protocol.game.PacketPlayOutPlayerListHeaderFooter;
-import net.minecraft.server.network.PlayerConnection;
-import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer;
-import tk.ditservices.utils.Math;
-import tk.ditservices.utils.Server;
-/*import net.minecraft.server.v1_16_R3.ChatComponentText;
-import net.minecraft.server.v1_16_R3.IChatBaseComponent;
-import net.minecraft.server.v1_16_R3.PacketPlayOutPlayerListHeaderFooter;
-*/
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.configuration.file.FileConfiguration;
-//import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
-import org.bukkit.entity.Player;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-
-public class TabManager {
- private List headers = new ArrayList<>();
- private List footers = new ArrayList<>();
-
- private Integer refreshRate;
-
- private DITSystem plugin;
- private FileConfiguration config;
- private List headeranimList = new ArrayList();
- private List footeranimList = new ArrayList();
-
- private ArrayList formatArray = new ArrayList<>();
- private List DynamicHeaders = new ArrayList<>();
- private List DynamicFooters = new ArrayList<>();
-
- private enum AddLine {
- HEADER, FOOTER
- }
-
- public TabManager(DITSystem instance,FileConfiguration c){
-
- this.plugin = instance;
- this.config = c;
-
- if(this.init()){
- this.showTab();
- }
-
- }
-
-
-
- public void showTab(){
- if (headers.isEmpty() && footers.isEmpty()){
- return;
- }
- Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
- int count1 = 0; //headers
- int count2 = 0; //footers
- @Override
- public void run() {
- try {
- //Tab code
-
- if (count1>=headers.size()){
- count1=0;
- }
- if (count2>=footers.size()){
- count2=0;
- }
- //Re adding all lines where we replaced something like the RAM usage to every refresh
- //display current value. (We check those lines in the init())
- if (DynamicHeaders.size()>0 && count1 < DynamicHeaders.size()){
- if (DynamicHeaders.get(count1) == count1){
- addHeaderFooter(AddLine.HEADER,headeranimList.get(count1),true,count1);
- }
- }
- if (DynamicFooters.size()>0 && count2 < DynamicFooters.size()){
- if (DynamicFooters.get(count2) == count2){
- addHeaderFooter(AddLine.FOOTER,footeranimList.get(count2),true,count2);
- }
- }
-
- PacketPlayOutPlayerListHeaderFooter packet = new PacketPlayOutPlayerListHeaderFooter(headers.get(count1),footers.get(count2));
-
- if (Bukkit.getOnlinePlayers().size() !=0){
- for (Player player : Bukkit.getOnlinePlayers()){
- PlayerConnection pConn = ((CraftPlayer)player).getHandle().b;
- //((CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);
- pConn.a(packet);
- }
- }
- if (headers.size()>1){
- count1++;
- }
- if (footers.size()>1){
- count2++;
- }
-
- } catch (Exception e){
- e.printStackTrace();
- }
- }
- },10, Math.convert(Math.Convert.SECONDS,Math.Convert.TICKS,this.refreshRate));
- }
-
- private boolean init(){
- if (config.getBoolean("Tab.enabled")){
- if (config.isSet("Tab.refreshRate")){
- this.refreshRate = config.getInt("Tab.refreshRate");
- }else{
- this.refreshRate=40;
- }
-
- //Getting the tab lines from the config
- headeranimList = config.getStringList("Tab.headerAnimation");
- footeranimList = config.getStringList("Tab.footerAnimation");
-
- //Investigating lines where we need to run the formatting every tab refresh for example for the RAM usage.
- //Only storing those lines indexes.
- formatArray.add("{TOTALRAM}");
- formatArray.add("{FREERAM}");
- formatArray.add("{USEDRAM}");
- formatArray.add("{AVERAGEPING}");
- formatArray.add("{ONLINEPLAYERS}");
- formatArray.add("{MAXPLAYERS}");
- for (String f: formatArray){
- for (int i = 0; i