diff options
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/Main.java')
-rw-r--r-- | src/main/java/net/tylermurphy/hideAndSeek/Main.java | 159 |
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 |