summaryrefslogtreewikicommitdiff
path: root/src/main/java/net/tylermurphy/hideAndSeek/Main.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/Main.java')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/Main.java159
1 files changed, 120 insertions, 39 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/Main.java b/src/main/java/net/tylermurphy/hideAndSeek/Main.java
index ac6c2d5..1248551 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/Main.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/Main.java
@@ -19,68 +19,125 @@
package net.tylermurphy.hideAndSeek;
-import java.io.File;
-import java.util.List;
-
+import net.tylermurphy.hideAndSeek.configuration.Config;
+import net.tylermurphy.hideAndSeek.configuration.Items;
+import net.tylermurphy.hideAndSeek.configuration.Localization;
import net.tylermurphy.hideAndSeek.database.Database;
-import net.tylermurphy.hideAndSeek.util.UUIDFetcher;
+import net.tylermurphy.hideAndSeek.game.Board;
+import net.tylermurphy.hideAndSeek.game.PlayerLoader;
+import net.tylermurphy.hideAndSeek.game.util.Status;
+import net.tylermurphy.hideAndSeek.util.CommandHandler;
+import net.tylermurphy.hideAndSeek.game.Game;
+import net.tylermurphy.hideAndSeek.game.listener.*;
+import net.tylermurphy.hideAndSeek.util.PAPIExpansion;
+import net.tylermurphy.hideAndSeek.util.TabCompleter;
import org.bukkit.Bukkit;
-
+import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.event.Listener;
-import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPlugin;
-import org.bukkit.plugin.messaging.PluginMessageListener;
-import org.bukkit.scheduler.BukkitTask;
-
-import net.tylermurphy.hideAndSeek.game.CommandHandler;
-import net.tylermurphy.hideAndSeek.game.EventListener;
-import net.tylermurphy.hideAndSeek.util.TabCompleter;
-import net.tylermurphy.hideAndSeek.game.Game;
-import net.tylermurphy.hideAndSeek.configuration.Config;
-import net.tylermurphy.hideAndSeek.configuration.Localization;
-import net.tylermurphy.hideAndSeek.configuration.Items;
-import net.tylermurphy.hideAndSeek.game.Board;
+import org.bukkit.plugin.java.JavaPluginLoader;
import org.jetbrains.annotations.NotNull;
+import java.io.File;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static net.tylermurphy.hideAndSeek.configuration.Config.exitPosition;
+import static net.tylermurphy.hideAndSeek.configuration.Config.exitWorld;
+
public class Main extends JavaPlugin implements Listener {
- public static Main plugin;
- public static File root, data;
- private int onTickTask;
+ private static Main instance;
+ private static int version;
- public void onEnable() {
- plugin = this;
- root = this.getServer().getWorldContainer();
- data = this.getDataFolder();
- getServer().getPluginManager().registerEvents(new EventListener(), this);
+ private final Database database;
+ private final Board board;
+
+ private Game game;
+
+ public Main() {
+ super();
+ onConstructed();
+
+ board = new Board();
+ database = new Database();
+ }
+
+ protected Main(JavaPluginLoader loader, PluginDescriptionFile description, File dataFolder, File file) {
+ super(loader, description, dataFolder, file);
+ onConstructed();
+
+ board = new Board();
+ database = new Database();
+ }
+
+ private void onConstructed(){
+
+ instance = this;
+
+ Matcher matcher = Pattern.compile("MC: \\d\\.(\\d+)").matcher(Bukkit.getVersion());
+ if (matcher.find()) {
+ version = Integer.parseInt(matcher.group(1));
+ } else {
+ throw new IllegalArgumentException("Failed to parse server version from: " + Bukkit.getVersion());
+ }
Config.loadConfig();
Localization.loadLocalization();
Items.loadItems();
+ }
+
+ public void onEnable() {
+
+ this.registerListeners();
+
CommandHandler.registerCommands();
- Board.reload();
- Database.init();
- UUIDFetcher.init();
- onTickTask = Bukkit.getServer().getScheduler().runTaskTimer(this, () -> {
- try{
- Game.onTick();
- } catch (Exception e) {
- e.printStackTrace();
- }
- },0,1).getTaskId();
+ game = new Game(board);
+
+ getServer().getScheduler().runTaskTimer(this, this::onTick,0,1).getTaskId();
Bukkit.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
+
+ if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
+ new PAPIExpansion().register();
+ }
}
-
+
public void onDisable() {
- Main.plugin.getServer().getScheduler().cancelTask(onTickTask);
+
+ version = 0;
+
+ board.getPlayers().forEach(player -> {
+ board.removeBoard(player);
+ PlayerLoader.unloadPlayer(player);
+ player.teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
+ });
+
Bukkit.getServer().getMessenger().unregisterOutgoingPluginChannel(this);
- UUIDFetcher.cleanup();
- Board.cleanup();
+ board.cleanup();
+ }
+
+ private void onTick() {
+ if(game.getStatus() == Status.ENDED) game = new Game(board);
+ game.onTick();
+ }
+
+ private void registerListeners() {
+ getServer().getPluginManager().registerEvents(new BlockedCommandHandler(), this);
+ getServer().getPluginManager().registerEvents(new ChatHandler(), this);
+ getServer().getPluginManager().registerEvents(new DamageHandler(), this);
+ getServer().getPluginManager().registerEvents(new InteractHandler(), this);
+ getServer().getPluginManager().registerEvents(new InventoryHandler(), this);
+ getServer().getPluginManager().registerEvents(new JoinLeaveHandler(), this);
+ getServer().getPluginManager().registerEvents(new MovementHandler(), this);
+ getServer().getPluginManager().registerEvents(new PlayerHandler(), this);
+ getServer().getPluginManager().registerEvents(new RespawnHandler(), this);
}
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String label, String[] args) {
@@ -90,5 +147,29 @@ public class Main extends JavaPlugin implements Listener {
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
return TabCompleter.handleTabComplete(sender, args);
}
+
+ public static Main getInstance() {
+ return instance;
+ }
+
+ public File getWorldContainer() {
+ return this.getServer().getWorldContainer();
+ }
+
+ public Database getDatabase() {
+ return database;
+ }
+
+ public Board getBoard(){
+ return board;
+ }
+
+ public Game getGame(){
+ return game;
+ }
+
+ public boolean supports(int v){
+ return version >= v;
+ }
} \ No newline at end of file