diff --git a/pom.xml b/pom.xml
index 6cc8cf1..974e19a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,5 +77,10 @@
1.18.12
provided
+
+ org.reflections
+ reflections
+ 0.9.12
+
diff --git a/src/main/java/eu/endermite/togglepvp/TogglePvP.java b/src/main/java/eu/endermite/togglepvp/TogglePvP.java
index a9e87aa..ba2f525 100644
--- a/src/main/java/eu/endermite/togglepvp/TogglePvP.java
+++ b/src/main/java/eu/endermite/togglepvp/TogglePvP.java
@@ -9,13 +9,18 @@ import eu.endermite.togglepvp.listeners.unspecific.*;
import eu.endermite.togglepvp.listeners.wolf.*;
import eu.endermite.togglepvp.players.PlayerManager;
import eu.endermite.togglepvp.players.SmartCache;
+import eu.endermite.togglepvp.util.Listener;
import eu.endermite.togglepvp.util.DatabaseSQLite;
import lombok.Getter;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;
+import org.reflections.Reflections;
+import org.reflections.scanners.TypeAnnotationsScanner;
import java.io.File;
+import java.lang.reflect.InvocationTargetException;
import java.util.Objects;
+import java.util.Set;
public final class TogglePvP extends JavaPlugin {
@@ -31,33 +36,30 @@ public final class TogglePvP extends JavaPlugin {
File dbFile = new File("plugins/TogglePvP");
sqLite = new DatabaseSQLite("jdbc:sqlite:plugins/TogglePvP/TogglePvP.db", dbFile);
sqLite.createDatabaseFile();
- sqLite.testConnection();
+ if (!sqLite.testConnection()) {
+ getLogger().severe("Error with accessing database.");
+ getLogger().severe("Plugin will now disable.");
+ getServer().getPluginManager().disablePlugin(this);
+ }
playerManager = new PlayerManager();
SmartCache.runSmartCache();
- getServer().getPluginManager().registerEvents(new PlayerJoinAndLeaveListener(), this);
- getServer().getPluginManager().registerEvents(new PlayerAttackListener(), this);
- getServer().getPluginManager().registerEvents(new PlayerHitByProjectileListener(), this);
- getServer().getPluginManager().registerEvents(new AreaEffectCloudApplyListener(), this);
- getServer().getPluginManager().registerEvents(new PlayerHitBySplashPotionListener(), this);
- getServer().getPluginManager().registerEvents(new EntityHitByLightningListener(), this);
- getServer().getPluginManager().registerEvents(new LightningBlockIgniteListener(), this);
- getServer().getPluginManager().registerEvents(new PlayerHitByFireworkListener(), this);
- getServer().getPluginManager().registerEvents(new FishingListener(), this);
- getServer().getPluginManager().registerEvents(new LavaDumpAndIgniteListener(), this);
- getServer().getPluginManager().registerEvents(new PlaceWitherRoseListener(), this);
- getServer().getPluginManager().registerEvents(new PlayerHitByExplosionListener(), this);
- getServer().getPluginManager().registerEvents(new WolfTargettingPlayerListener(), this);
- getServer().getPluginManager().registerEvents(new WolfAttackPlayerListener(), this);
- getServer().getPluginManager().registerEvents(new PlayerAttackWolfListener(), this);
- getServer().getPluginManager().registerEvents(new PlayerHitWolfWithProjectile(), this);
- getServer().getPluginManager().registerEvents(new WolfHitBySplashPotionListener(), this);
- getServer().getPluginManager().registerEvents(new WolfHitByFireworkListener(), this);
- getServer().getPluginManager().registerEvents(new WolfTargettingWolfListener(), this);
- getServer().getPluginManager().registerEvents(new WolfHitByExplosionListener(), this);
- getServer().getPluginManager().registerEvents(new WolfLeashListener(), this);
+ // Register listeners
+ Reflections reflections = new Reflections(new String[]{"eu.endermite.togglepvp"});
+ Set> listenerClasses = reflections.getTypesAnnotatedWith(Listener.class);
+ listenerClasses.forEach((listener)-> {
+ try {
+ getServer().getPluginManager().registerEvents((org.bukkit.event.Listener) listener.getConstructor().newInstance(), this);
+ } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
+ e.printStackTrace();
+ getLogger().severe("Error with registering listeners.");
+ getLogger().severe("Plugin will now disable.");
+ getServer().getPluginManager().disablePlugin(this);
+ }
+ });
+ // Register command
Objects.requireNonNull(getCommand("pvp")).setExecutor(new MainCommand());
Objects.requireNonNull(getCommand("pvp")).setTabCompleter(new MainCommand());
}
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerAttackListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerAttackListener.java
index b947a2e..7709e38 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerAttackListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerAttackListener.java
@@ -9,6 +9,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
+@eu.endermite.togglepvp.util.Listener
public class PlayerAttackListener implements Listener {
/**
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java
index 08d99dd..4a0d116 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java
@@ -11,10 +11,9 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.metadata.FixedMetadataValue;
-
import java.util.UUID;
-
+@eu.endermite.togglepvp.util.Listener
public class PlayerHitByExplosionListener implements Listener {
/**
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByFireworkListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByFireworkListener.java
index c4da785..ed5283a 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByFireworkListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByFireworkListener.java
@@ -8,6 +8,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
+@eu.endermite.togglepvp.util.Listener
public class PlayerHitByFireworkListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByProjectileListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByProjectileListener.java
index 7e1dc89..cd7487b 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByProjectileListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByProjectileListener.java
@@ -9,6 +9,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
+@eu.endermite.togglepvp.util.Listener
public class PlayerHitByProjectileListener implements Listener {
/**
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitBySplashPotionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitBySplashPotionListener.java
index ce69e6c..f4797e2 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitBySplashPotionListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitBySplashPotionListener.java
@@ -11,6 +11,7 @@ import org.bukkit.event.Listener;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
+@eu.endermite.togglepvp.util.Listener
public class PlayerHitBySplashPotionListener implements Listener {
/**
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerJoinAndLeaveListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerJoinAndLeaveListener.java
index d81bd0d..78f114f 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerJoinAndLeaveListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerJoinAndLeaveListener.java
@@ -4,9 +4,9 @@ import eu.endermite.togglepvp.TogglePvP;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
-
import java.util.HashMap;
+@eu.endermite.togglepvp.util.Listener
public class PlayerJoinAndLeaveListener implements Listener {
/**
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/WolfAttackPlayerListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/WolfAttackPlayerListener.java
index cd513b5..c89246a 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/player/WolfAttackPlayerListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/player/WolfAttackPlayerListener.java
@@ -8,6 +8,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
+@eu.endermite.togglepvp.util.Listener
public class WolfAttackPlayerListener implements Listener {
/**
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java
index e22c952..d2d97d1 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java
@@ -11,9 +11,9 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.AreaEffectCloudApplyEvent;
import org.bukkit.potion.PotionEffectType;
-
import java.util.Iterator;
+@eu.endermite.togglepvp.util.Listener
public class AreaEffectCloudApplyListener implements Listener {
@EventHandler(ignoreCancelled = true)
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/EntityHitByLightningListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/EntityHitByLightningListener.java
index dd67a16..e13d375 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/EntityHitByLightningListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/EntityHitByLightningListener.java
@@ -15,6 +15,7 @@ import org.bukkit.metadata.FixedMetadataValue;
* Listen for lightning strikes and tag the trident spawned ones.
* Idea from aasmus' PvPToggle plugin
*/
+@eu.endermite.togglepvp.util.Listener
public class EntityHitByLightningListener implements Listener {
/**
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java
index 3b0ff1b..a724a07 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java
@@ -10,6 +10,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
+@eu.endermite.togglepvp.util.Listener
public class FishingListener implements Listener {
ConfigCache config = TogglePvP.getPlugin().getConfigCache();
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java
index 4475aa1..5a03ede 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java
@@ -15,6 +15,8 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.util.BoundingBox;
+
+@eu.endermite.togglepvp.util.Listener
public class LavaDumpAndIgniteListener implements Listener {
private ConfigCache config = TogglePvP.getPlugin().getConfigCache();
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LightningBlockIgniteListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LightningBlockIgniteListener.java
index a52a813..b90cfd1 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LightningBlockIgniteListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LightningBlockIgniteListener.java
@@ -10,6 +10,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
+@eu.endermite.togglepvp.util.Listener
public class LightningBlockIgniteListener implements Listener {
/**
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java
index 4decdca..3c037e8 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java
@@ -15,6 +15,7 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.util.BoundingBox;
+@eu.endermite.togglepvp.util.Listener
public class PlaceWitherRoseListener implements Listener {
private ConfigCache config = TogglePvP.getPlugin().getConfigCache();
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerAttackWolfListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerAttackWolfListener.java
index 6fd8c7b..bb09928 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerAttackWolfListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerAttackWolfListener.java
@@ -10,6 +10,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
+@eu.endermite.togglepvp.util.Listener
public class PlayerAttackWolfListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerHitWolfWithProjectile.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerHitWolfWithProjectile.java
index 4dd80e6..21e2862 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerHitWolfWithProjectile.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerHitWolfWithProjectile.java
@@ -11,6 +11,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
+@eu.endermite.togglepvp.util.Listener
public class PlayerHitWolfWithProjectile implements Listener {
/**
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByExplosionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByExplosionListener.java
index a27f5aa..efb2c13 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByExplosionListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByExplosionListener.java
@@ -4,15 +4,14 @@ import eu.endermite.togglepvp.TogglePvP;
import eu.endermite.togglepvp.config.ConfigCache;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.PluginMessages;
-import org.bukkit.entity.Player;
import org.bukkit.entity.Wolf;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
-
import java.util.UUID;
+@eu.endermite.togglepvp.util.Listener
public class WolfHitByExplosionListener implements Listener {
/**
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByFireworkListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByFireworkListener.java
index a8763ed..271eb3c 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByFireworkListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByFireworkListener.java
@@ -9,6 +9,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
+@eu.endermite.togglepvp.util.Listener
public class WolfHitByFireworkListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitBySplashPotionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitBySplashPotionListener.java
index fd816b9..9dfb625 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitBySplashPotionListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitBySplashPotionListener.java
@@ -13,6 +13,7 @@ import org.bukkit.event.Listener;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
+@eu.endermite.togglepvp.util.Listener
public class WolfHitBySplashPotionListener implements Listener {
/**
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfLeashListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfLeashListener.java
index 9be6399..ffd5c28 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfLeashListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfLeashListener.java
@@ -10,6 +10,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
+@eu.endermite.togglepvp.util.Listener
public class WolfLeashListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingPlayerListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingPlayerListener.java
index f0a8786..1e01116 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingPlayerListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingPlayerListener.java
@@ -2,13 +2,13 @@ package eu.endermite.togglepvp.listeners.wolf;
import eu.endermite.togglepvp.TogglePvP;
import eu.endermite.togglepvp.players.SmartCache;
-import org.bukkit.entity.Fox;
import org.bukkit.entity.Player;
import org.bukkit.entity.Wolf;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
+@eu.endermite.togglepvp.util.Listener
public class WolfTargettingPlayerListener implements Listener {
/**
* Stops wolves with owners targetting players with pvp off
diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingWolfListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingWolfListener.java
index 9b54246..f11b428 100644
--- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingWolfListener.java
+++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingWolfListener.java
@@ -6,6 +6,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
+@eu.endermite.togglepvp.util.Listener
public class WolfTargettingWolfListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
diff --git a/src/main/java/eu/endermite/togglepvp/util/DatabaseSQLite.java b/src/main/java/eu/endermite/togglepvp/util/DatabaseSQLite.java
index cf23134..d217d92 100644
--- a/src/main/java/eu/endermite/togglepvp/util/DatabaseSQLite.java
+++ b/src/main/java/eu/endermite/togglepvp/util/DatabaseSQLite.java
@@ -36,7 +36,7 @@ public class DatabaseSQLite {
return true;
}
- public void testConnection() {
+ public boolean testConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(url);
@@ -48,10 +48,12 @@ public class DatabaseSQLite {
if (conn != null) {
conn.close();
}
+ return true;
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
+ return false;
}
public HashMap getPlayerInfo(UUID uuid) {
diff --git a/src/main/java/eu/endermite/togglepvp/util/Listener.java b/src/main/java/eu/endermite/togglepvp/util/Listener.java
new file mode 100644
index 0000000..9731a8c
--- /dev/null
+++ b/src/main/java/eu/endermite/togglepvp/util/Listener.java
@@ -0,0 +1,11 @@
+package eu.endermite.togglepvp.util;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+
+public @interface Listener {}