diff --git a/.idea/libraries/Maven__com_github_TBMCPlugins_ButtonCore_Towny_master_v1_0_g8d3b6b6_296.xml b/.idea/libraries/Maven__com_github_TBMCPlugins_ButtonCore_Towny_master_248b0d8d0a_1.xml
similarity index 55%
rename from .idea/libraries/Maven__com_github_TBMCPlugins_ButtonCore_Towny_master_v1_0_g8d3b6b6_296.xml
rename to .idea/libraries/Maven__com_github_TBMCPlugins_ButtonCore_Towny_master_248b0d8d0a_1.xml
index 8991a67..0d3e00e 100644
--- a/.idea/libraries/Maven__com_github_TBMCPlugins_ButtonCore_Towny_master_v1_0_g8d3b6b6_296.xml
+++ b/.idea/libraries/Maven__com_github_TBMCPlugins_ButtonCore_Towny_master_248b0d8d0a_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_github_milkbowl_VaultAPI_master_c8cb88f27a_1.xml b/.idea/libraries/Maven__com_github_milkbowl_VaultAPI_master_431c5273c2_1.xml
similarity index 55%
rename from .idea/libraries/Maven__com_github_milkbowl_VaultAPI_master_c8cb88f27a_1.xml
rename to .idea/libraries/Maven__com_github_milkbowl_VaultAPI_master_431c5273c2_1.xml
index b5aaa43..19b24a3 100644
--- a/.idea/libraries/Maven__com_github_milkbowl_VaultAPI_master_c8cb88f27a_1.xml
+++ b/.idea/libraries/Maven__com_github_milkbowl_VaultAPI_master_431c5273c2_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 0b24af5..fc07820 100755
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -4,6 +4,7 @@
+
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..e96534f
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/BuildConfigUpdater/BuildConfigUpdater.iml b/BuildConfigUpdater/BuildConfigUpdater.iml
index 4902d56..73696cd 100644
--- a/BuildConfigUpdater/BuildConfigUpdater.iml
+++ b/BuildConfigUpdater/BuildConfigUpdater.iml
@@ -12,7 +12,6 @@
-
diff --git a/BuildConfigUpdater/src/main/java/BCUMain.java b/BuildConfigUpdater/src/main/java/BCUMain.java
index bca7209..07666d3 100644
--- a/BuildConfigUpdater/src/main/java/BCUMain.java
+++ b/BuildConfigUpdater/src/main/java/BCUMain.java
@@ -1,4 +1,4 @@
-import buttondevteam.lib.PluginUpdater;
+import buttondevteam.component.updater.PluginUpdater;
import java.util.List;
import java.util.stream.Collectors;
diff --git a/ButtonCore/lombok.config b/ButtonCore/lombok.config
new file mode 100644
index 0000000..d959b09
--- /dev/null
+++ b/ButtonCore/lombok.config
@@ -0,0 +1 @@
+lombok.var.flagUsage = ALLOW
diff --git a/ButtonCore/pom.xml b/ButtonCore/pom.xml
index 3750f03..2bbce2d 100755
--- a/ButtonCore/pom.xml
+++ b/ButtonCore/pom.xml
@@ -72,6 +72,26 @@
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ false
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+
+
+ attach-sources
+
+ jar
+
+
+
+
diff --git a/ButtonCore/src/main/java/buttondevteam/component/commands/CommandComponent.java b/ButtonCore/src/main/java/buttondevteam/component/commands/CommandComponent.java
new file mode 100644
index 0000000..b85ad34
--- /dev/null
+++ b/ButtonCore/src/main/java/buttondevteam/component/commands/CommandComponent.java
@@ -0,0 +1,15 @@
+package buttondevteam.component.commands;
+
+import buttondevteam.lib.architecture.Component;
+
+public class CommandComponent extends Component { //TODO: Do we just move everything here?
+ @Override
+ public void enable() {
+
+ }
+
+ @Override
+ public void disable() {
+
+ }
+}
diff --git a/ButtonCore/src/main/java/buttondevteam/component/restart/RestartComponent.java b/ButtonCore/src/main/java/buttondevteam/component/restart/RestartComponent.java
new file mode 100644
index 0000000..8184b8a
--- /dev/null
+++ b/ButtonCore/src/main/java/buttondevteam/component/restart/RestartComponent.java
@@ -0,0 +1,20 @@
+package buttondevteam.component.restart;
+
+import buttondevteam.core.PrimeRestartCommand;
+import buttondevteam.core.ScheduledRestartCommand;
+import buttondevteam.lib.architecture.Component;
+import buttondevteam.lib.chat.TBMCChatAPI;
+
+public class RestartComponent extends Component {
+ @Override
+ public void enable() {
+ //TODO: Permissions for the commands
+ TBMCChatAPI.AddCommand(getPlugin(), ScheduledRestartCommand.class);
+ TBMCChatAPI.AddCommand(getPlugin(), PrimeRestartCommand.class);
+ }
+
+ @Override
+ public void disable() {
+
+ }
+}
diff --git a/ButtonCore/src/main/java/buttondevteam/lib/PluginUpdater.java b/ButtonCore/src/main/java/buttondevteam/component/updater/PluginUpdater.java
similarity index 97%
rename from ButtonCore/src/main/java/buttondevteam/lib/PluginUpdater.java
rename to ButtonCore/src/main/java/buttondevteam/component/updater/PluginUpdater.java
index ca758f8..ce2e993 100755
--- a/ButtonCore/src/main/java/buttondevteam/lib/PluginUpdater.java
+++ b/ButtonCore/src/main/java/buttondevteam/component/updater/PluginUpdater.java
@@ -1,5 +1,6 @@
-package buttondevteam.lib;
+package buttondevteam.component.updater;
+import buttondevteam.lib.TBMCCoreAPI;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -136,7 +137,7 @@ public class PluginUpdater {
public static List GetPluginNames() {
List ret = new ArrayList<>();
try {
- String resp = TBMCCoreAPI.DownloadString("https://api.github.com/orgs/TBMCPlugins/repos");
+ String resp = TBMCCoreAPI.DownloadString("https://api.github.com/orgs/" + "TBMCPlugins" + "/repos"); //TODO: PluginUpdater
JsonArray arr = new JsonParser().parse(resp).getAsJsonArray();
for (JsonElement obj : arr) {
JsonObject jobj = obj.getAsJsonObject();
diff --git a/ButtonCore/src/main/java/buttondevteam/component/updater/PluginUpdaterComponent.java b/ButtonCore/src/main/java/buttondevteam/component/updater/PluginUpdaterComponent.java
new file mode 100644
index 0000000..2425631
--- /dev/null
+++ b/ButtonCore/src/main/java/buttondevteam/component/updater/PluginUpdaterComponent.java
@@ -0,0 +1,16 @@
+package buttondevteam.component.updater;
+
+import buttondevteam.lib.architecture.Component;
+import buttondevteam.lib.chat.TBMCChatAPI;
+
+public class PluginUpdaterComponent extends Component {
+ @Override
+ public void enable() {
+ TBMCChatAPI.AddCommand(getPlugin(), UpdatePluginCommand.class);
+ }
+
+ @Override
+ public void disable() { //TODO: Unregister commands and such
+
+ }
+}
diff --git a/ButtonCore/src/main/java/buttondevteam/core/UpdatePluginCommand.java b/ButtonCore/src/main/java/buttondevteam/component/updater/UpdatePluginCommand.java
similarity index 94%
rename from ButtonCore/src/main/java/buttondevteam/core/UpdatePluginCommand.java
rename to ButtonCore/src/main/java/buttondevteam/component/updater/UpdatePluginCommand.java
index ba5b309..ee006c4 100755
--- a/ButtonCore/src/main/java/buttondevteam/core/UpdatePluginCommand.java
+++ b/ButtonCore/src/main/java/buttondevteam/component/updater/UpdatePluginCommand.java
@@ -1,6 +1,6 @@
-package buttondevteam.core;
+package buttondevteam.component.updater;
-import buttondevteam.lib.PluginUpdater;
+import buttondevteam.core.MainPlugin;
import buttondevteam.lib.TBMCCoreAPI;
import buttondevteam.lib.chat.CommandClass;
import buttondevteam.lib.chat.TBMCCommandBase;
diff --git a/ButtonCore/src/main/java/buttondevteam/core/ComponentCommand.java b/ButtonCore/src/main/java/buttondevteam/core/ComponentCommand.java
new file mode 100644
index 0000000..a83037b
--- /dev/null
+++ b/ButtonCore/src/main/java/buttondevteam/core/ComponentCommand.java
@@ -0,0 +1,30 @@
+package buttondevteam.core;
+
+import buttondevteam.lib.chat.CommandClass;
+import buttondevteam.lib.chat.TBMCCommandBase;
+import org.bukkit.command.CommandSender;
+
+@CommandClass(modOnly = true)
+public class ComponentCommand extends TBMCCommandBase {
+ @Override
+ public boolean OnCommand(CommandSender sender, String alias, String[] args) {
+ if (args.length < 2)
+ return false;
+ switch (args[0]) {
+ case "enable":
+ break;
+ case "disable":
+ break;
+ case "list":
+ break;
+ default:
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String[] GetHelpText(String alias) {
+ return new String[0];
+ }
+}
diff --git a/ButtonCore/src/main/java/buttondevteam/core/ComponentManager.java b/ButtonCore/src/main/java/buttondevteam/core/ComponentManager.java
new file mode 100644
index 0000000..0c3c51b
--- /dev/null
+++ b/ButtonCore/src/main/java/buttondevteam/core/ComponentManager.java
@@ -0,0 +1,57 @@
+package buttondevteam.core;
+
+import buttondevteam.lib.TBMCCoreAPI;
+import buttondevteam.lib.architecture.Component;
+import lombok.val;
+
+public final class ComponentManager {
+ private ComponentManager() {}
+
+ private static boolean componentsEnabled = false;
+
+ /**
+ * This flag is used to enable components registered after the others were enabled.
+ * @return Whether already registered components have been enabled
+ */
+ public static boolean areComponentsEnabled() { return componentsEnabled; }
+
+ /**
+ * Enables components based on a configuration - any component registered afterwards will be also enabled
+ */
+ public static void enableComponents() {
+ //Component.getComponents().values().stream().filter(c->cs.getConfigurationSection(c.getClass().getSimpleName()).getBoolean("enabled")).forEach(c-> {
+ Component.getComponents().values().stream().filter(c -> c.shouldBeEnabled().get()).forEach(c -> {
+ try {
+ Component.setComponentEnabled(c, true);
+ } catch (Exception e) {
+ TBMCCoreAPI.SendException("Failed to enable one of the components: " + c.getClass().getSimpleName(), e);
+ }
+ });
+ componentsEnabled = true;
+ }
+
+ /**
+ * Disables all components that are enabled
+ */
+ public static void disableComponents() {
+ Component.getComponents().values().stream().filter(Component::isEnabled).forEach(c -> {
+ try {
+ Component.setComponentEnabled(c, false);
+ } catch (Exception e) {
+ TBMCCoreAPI.SendException("Failed to disable one of the components: " + c.getClass().getSimpleName(), e);
+ }
+ });
+ componentsEnabled = false;
+ }
+
+ /**
+ * Will also return false if the component is not registered.
+ *
+ * @param cl The component class
+ * @return Whether the component is registered and enabled
+ */
+ public static boolean isEnabled(Class extends Component> cl) {
+ val c = Component.getComponents().get(cl);
+ return c != null && c.isEnabled();
+ }
+}
diff --git a/ButtonCore/src/main/java/buttondevteam/core/MainPlugin.java b/ButtonCore/src/main/java/buttondevteam/core/MainPlugin.java
index ef0768f..b3a4aaa 100755
--- a/ButtonCore/src/main/java/buttondevteam/core/MainPlugin.java
+++ b/ButtonCore/src/main/java/buttondevteam/core/MainPlugin.java
@@ -1,7 +1,10 @@
package buttondevteam.core;
-import buttondevteam.lib.PluginUpdater;
+import buttondevteam.component.restart.RestartComponent;
+import buttondevteam.component.updater.PluginUpdater;
+import buttondevteam.component.updater.PluginUpdaterComponent;
import buttondevteam.lib.TBMCCoreAPI;
+import buttondevteam.lib.architecture.Component;
import buttondevteam.lib.chat.Channel;
import buttondevteam.lib.chat.ChatRoom;
import buttondevteam.lib.chat.Color;
@@ -47,9 +50,9 @@ public class MainPlugin extends JavaPlugin {
setupPermissions();
Test = getConfig().getBoolean("test", true);
saveConfig();
- TBMCChatAPI.AddCommand(this, UpdatePluginCommand.class);
- TBMCChatAPI.AddCommand(this, ScheduledRestartCommand.class);
- TBMCChatAPI.AddCommand(this, PrimeRestartCommand.class);
+ Component.registerComponent(this, new PluginUpdaterComponent());
+ Component.registerComponent(this, new RestartComponent());
+ ComponentManager.enableComponents();
TBMCChatAPI.AddCommand(this, MemberCommand.class);
TBMCCoreAPI.RegisterEventsForExceptions(new PlayerListener(), this);
ChromaGamerBase.addConverter(commandSender -> Optional.ofNullable(commandSender instanceof ConsoleCommandSender || commandSender instanceof BlockCommandSender
@@ -82,6 +85,7 @@ public class MainPlugin extends JavaPlugin {
@Override
public void onDisable() {
+ ComponentManager.disableComponents();
logger.info("Saving player data...");
TBMCPlayerBase.savePlayers();
logger.info("Player data saved.");
diff --git a/ButtonCore/src/main/java/buttondevteam/core/PlayerListener.java b/ButtonCore/src/main/java/buttondevteam/core/PlayerListener.java
index af8220e..be7c10b 100755
--- a/ButtonCore/src/main/java/buttondevteam/core/PlayerListener.java
+++ b/ButtonCore/src/main/java/buttondevteam/core/PlayerListener.java
@@ -1,7 +1,7 @@
package buttondevteam.core;
import buttondevteam.lib.TBMCSystemChatEvent;
-import buttondevteam.lib.chat.IDiscordSender;
+import buttondevteam.lib.chat.IFakePlayer;
import buttondevteam.lib.player.TBMCPlayerBase;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -43,7 +43,7 @@ public class PlayerListener implements Listener {
if (PrimeRestartCommand.isLoud())
Bukkit.broadcastMessage("§cNobody is online anymore. Restarting.");
Bukkit.spigot().restart();
- } else if (!(event.getPlayer() instanceof IDiscordSender) && System.nanoTime() - 10 * 1000000000L - lasttime > 0) { //Ten seconds passed since last reminder
+ } else if (!(event.getPlayer() instanceof IFakePlayer) && System.nanoTime() - 10 * 1000000000L - lasttime > 0) { //Ten seconds passed since last reminder
lasttime = System.nanoTime();
if (PrimeRestartCommand.isLoud())
Bukkit.broadcastMessage(ChatColor.DARK_RED + "The server will restart as soon as nobody is online.");
diff --git a/ButtonCore/src/main/java/buttondevteam/lib/TBMCChatEvent.java b/ButtonCore/src/main/java/buttondevteam/lib/TBMCChatEvent.java
index 3c44345..f304cde 100755
--- a/ButtonCore/src/main/java/buttondevteam/lib/TBMCChatEvent.java
+++ b/ButtonCore/src/main/java/buttondevteam/lib/TBMCChatEvent.java
@@ -1,8 +1,9 @@
package buttondevteam.lib;
import buttondevteam.lib.chat.Channel;
-import buttondevteam.lib.player.ChromaGamerBase;
+import buttondevteam.lib.chat.ChatMessage;
import lombok.Getter;
+import lombok.experimental.Delegate;
import org.bukkit.command.CommandSender;
import org.bukkit.event.HandlerList;
@@ -16,28 +17,19 @@ import javax.annotation.Nullable;
*/
@Getter
public class TBMCChatEvent extends TBMCChatEventBase {
- public TBMCChatEvent(CommandSender sender, ChromaGamerBase user, Channel channel, String message, int score, boolean fromcmd, String groupid) {
- super(channel, message, score, groupid);
- this.sender = sender;
- this.fromcmd = fromcmd;
- this.ignoreSenderPermissions = false;
- this.user = user;
- }
-
- public TBMCChatEvent(CommandSender sender, ChromaGamerBase user, Channel channel, String message, int score, boolean fromcmd, String groupid, boolean ignoreSenderPermissions) {
- super(channel, message, score, groupid);
- this.sender = sender;
- this.user = user;
- this.fromcmd = fromcmd;
- this.ignoreSenderPermissions = ignoreSenderPermissions;
+ public TBMCChatEvent(Channel channel, ChatMessage cm, Channel.RecipientTestResult rtr) {
+ super(channel, cm.getMessage(), rtr.score, rtr.groupID);
+ this.cm = cm;
}
private static final HandlerList handlers = new HandlerList();
- private final CommandSender sender;
- private final boolean fromcmd;
- private final boolean ignoreSenderPermissions;
- private final ChromaGamerBase user;
+ @Delegate //<-- Backwards compatibility
+ private ChatMessage cm;
+
+ private boolean isIgnoreSenderPermissions() {
+ return cm.getPermCheck() != cm.getSender();
+ }
// TODO: Message object with data?
/**
@@ -45,7 +37,7 @@ public class TBMCChatEvent extends TBMCChatEventBase {
*/
@Override
public boolean shouldSendTo(CommandSender sender) {
- if (isIgnoreSenderPermissions() && sender.equals(this.sender))
+ if (isIgnoreSenderPermissions() && sender.equals(this.cm.getSender()))
return true; //Allow sending the message no matter what
return super.shouldSendTo(sender);
}
@@ -55,7 +47,7 @@ public class TBMCChatEvent extends TBMCChatEventBase {
*/
@Override
public int getMCScore(CommandSender sender) {
- if (isIgnoreSenderPermissions() && sender.equals(this.sender))
+ if (isIgnoreSenderPermissions() && sender.equals(this.cm.getSender()))
return getScore(); //Send in the correct group no matter what
return super.getMCScore(sender);
}
@@ -66,7 +58,7 @@ public class TBMCChatEvent extends TBMCChatEventBase {
@Nullable
@Override
public String getGroupID(CommandSender sender) {
- if (isIgnoreSenderPermissions() && sender.equals(this.sender))
+ if (isIgnoreSenderPermissions() && sender.equals(this.cm.getSender()))
return getGroupID(); //Send in the correct group no matter what
return super.getGroupID(sender);
}
diff --git a/ButtonCore/src/main/java/buttondevteam/lib/TBMCCoreAPI.java b/ButtonCore/src/main/java/buttondevteam/lib/TBMCCoreAPI.java
index 76498d5..e114196 100755
--- a/ButtonCore/src/main/java/buttondevteam/lib/TBMCCoreAPI.java
+++ b/ButtonCore/src/main/java/buttondevteam/lib/TBMCCoreAPI.java
@@ -1,5 +1,6 @@
package buttondevteam.lib;
+import buttondevteam.component.updater.PluginUpdater;
import buttondevteam.core.MainPlugin;
import buttondevteam.lib.player.ChromaGamerBase;
import buttondevteam.lib.potato.DebugPotato;
diff --git a/ButtonCore/src/main/java/buttondevteam/lib/architecture/ButtonPlugin.java b/ButtonCore/src/main/java/buttondevteam/lib/architecture/ButtonPlugin.java
new file mode 100644
index 0000000..c37a529
--- /dev/null
+++ b/ButtonCore/src/main/java/buttondevteam/lib/architecture/ButtonPlugin.java
@@ -0,0 +1,52 @@
+package buttondevteam.lib.architecture;
+
+import buttondevteam.lib.TBMCCoreAPI;
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Function;
+
+public abstract class ButtonPlugin extends JavaPlugin {
+ private final HashMap> datamap = new HashMap<>();
+ private ConfigurationSection section;
+
+ protected abstract void pluginEnable();
+
+ protected abstract void pluginDisable();
+
+ @Override
+ public void onEnable() {
+ section = getConfig().getConfigurationSection("global");
+ if (section == null) section = getConfig().createSection("global");
+ try {
+ pluginEnable();
+ } catch (Exception e) {
+ TBMCCoreAPI.SendException("Error while enabling plugin " + getName() + "!", e);
+ }
+ }
+
+ @Override
+ public void onDisable() {
+ try {
+ pluginDisable();
+ } catch (Exception e) {
+ TBMCCoreAPI.SendException("Error while disabling plugin " + getName() + "!", e);
+ }
+ }
+
+ /**
+ * @see IHaveConfig#getData(Map, ConfigurationSection, String, Object)
+ */
+ protected ConfigData getData(String path, T def) {
+ return IHaveConfig.getData(datamap, section, path, def);
+ }
+
+ /**
+ * @see IHaveConfig#getData(Map, ConfigurationSection, String, Object, Function, Function)
+ */
+ protected ConfigData getData(String path, T def, Function