diff --git a/src/nl/Steffion/BlockHunt/Arena.java b/src/nl/Steffion/BlockHunt/Arena.java new file mode 100644 index 0000000..3d8810d --- /dev/null +++ b/src/nl/Steffion/BlockHunt/Arena.java @@ -0,0 +1,45 @@ +package nl.Steffion.BlockHunt; + +import java.util.List; + +import nl.Steffion.BlockHunt.Serializables.LocationSerializable; + +import org.bukkit.entity.Player; + +public class Arena { + public String arenaName; + public LocationSerializable pos1; + public LocationSerializable pos2; + public int maxPlayers; + public int minPlayers; + public int amountSeekersOnStart; + public int timeInLobbyUntilStart; + public int waitingTimeSeeker; + public int gameTime; + public List playersInArena; + + public Arena (String arenaName, LocationSerializable pos1, + LocationSerializable pos2, int maxPlayers, int minPlayers, + int amountSeekersOnStart, int timeInLobbyUntilStart, + int waitingTimeSeeker, int gameTime, List playersInArena) { + this.arenaName = arenaName; + this.pos1 = pos1; + this.pos2 = pos2; + this.maxPlayers = maxPlayers; + this.minPlayers = minPlayers; + this.amountSeekersOnStart = amountSeekersOnStart; + this.timeInLobbyUntilStart = timeInLobbyUntilStart; + this.waitingTimeSeeker = waitingTimeSeeker; + this.gameTime = gameTime; + this.playersInArena = playersInArena; + } + + public enum ArenaType { + maxPlayers, + minPlayers, + amountSeekersOnStart, + timeInLobbyUntilStart, + waitingTimeSeeker, + gameTime; + } +} \ No newline at end of file diff --git a/src/nl/Steffion/BlockHunt/ArenaHandler.java b/src/nl/Steffion/BlockHunt/ArenaHandler.java new file mode 100644 index 0000000..d3dcd04 --- /dev/null +++ b/src/nl/Steffion/BlockHunt/ArenaHandler.java @@ -0,0 +1,44 @@ +package nl.Steffion.BlockHunt; + +import nl.Steffion.BlockHunt.Managers.ConfigC; +import nl.Steffion.BlockHunt.Managers.MessageM; +import nl.Steffion.BlockHunt.Managers.MessageM.CType; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class ArenaHandler { + public static void loadArenas() { + W.arenaList.clear(); + for (String arenaName : W.arenas.getFile().getKeys(false)) { + W.arenaList.add((Arena) W.arenas.getFile().get(arenaName)); + } + } + + public static void sendMessage(Arena arena, String message, Boolean tag, + String... vars) { + for (Player player : arena.playersInArena) { + String pMessage = message.replaceAll("%player%", player.getName()); + player.sendMessage(MessageM.replaceAll(CType.TAG(tag) + pMessage, + vars)); + } + message = message.replaceAll("%player%", "Console"); + Bukkit.getConsoleSender().sendMessage( + MessageM.replaceAll(CType.TAG(tag) + message, vars)); + } + + public static void sendFMessage(Arena arena, ConfigC location, Boolean tag, + String... vars) { + for (Player player : arena.playersInArena) { + String pMessage = location.config.getFile() + .get(location.getLocation()).toString() + .replaceAll("%player%", player.getName()); + player.sendMessage(MessageM.replaceAll(CType.TAG(tag) + pMessage, + vars)); + } + String message = location.config.getFile().get(location.getLocation()) + .toString().replaceAll("%player%", "Console"); + Bukkit.getConsoleSender().sendMessage( + MessageM.replaceAll(CType.TAG(tag) + message, vars)); + } +} diff --git a/src/nl/Steffion/BlockHunt/BlockHunt.java b/src/nl/Steffion/BlockHunt/BlockHunt.java index 744bb8b..a43ff66 100644 --- a/src/nl/Steffion/BlockHunt/BlockHunt.java +++ b/src/nl/Steffion/BlockHunt/BlockHunt.java @@ -5,6 +5,7 @@ import nl.Steffion.BlockHunt.Listeners.OnPlayerInteractEvent; import nl.Steffion.BlockHunt.Managers.CommandC; import nl.Steffion.BlockHunt.Managers.ConfigC; import nl.Steffion.BlockHunt.Managers.MessageM; +import nl.Steffion.BlockHunt.Serializables.ArenaSerializable; import nl.Steffion.BlockHunt.Serializables.LocationSerializable; import org.bukkit.command.Command; @@ -21,17 +22,20 @@ public class BlockHunt extends JavaPlugin implements Listener { public void onEnable() { getServer().getPluginManager().registerEvents(this, this); - getServer().getPluginManager().registerEvents(new OnPlayerInteractEvent(), - this); getServer().getPluginManager().registerEvents( - new OnInventoryClickEvent(), - this); + new OnPlayerInteractEvent(), this); + getServer().getPluginManager().registerEvents( + new OnInventoryClickEvent(), this); ConfigurationSerialization.registerClass(LocationSerializable.class, "Location"); + ConfigurationSerialization.registerClass(ArenaSerializable.class, + "Arena"); W.newFiles(); + ArenaHandler.loadArenas(); + MessageM.sendFMessage(null, ConfigC.log_Enabled, true, "name-" + W.pluginName, "version-" + W.pluginVersion, "autors-" + W.pluginAutors); diff --git a/src/nl/Steffion/BlockHunt/Commands/CMDcreate.java b/src/nl/Steffion/BlockHunt/Commands/CMDcreate.java index b19d97d..3e11ee8 100644 --- a/src/nl/Steffion/BlockHunt/Commands/CMDcreate.java +++ b/src/nl/Steffion/BlockHunt/Commands/CMDcreate.java @@ -1,11 +1,13 @@ package nl.Steffion.BlockHunt.Commands; +import nl.Steffion.BlockHunt.ArenaHandler; import nl.Steffion.BlockHunt.W; import nl.Steffion.BlockHunt.Managers.CommandC; import nl.Steffion.BlockHunt.Managers.ConfigC; import nl.Steffion.BlockHunt.Managers.MessageM; import nl.Steffion.BlockHunt.Managers.PlayerM; import nl.Steffion.BlockHunt.Managers.PlayerM.PermsC; +import nl.Steffion.BlockHunt.Serializables.ArenaSerializable; import org.bukkit.command.Command; import org.bukkit.entity.Player; @@ -26,22 +28,15 @@ public class CMDcreate extends DefaultCMD { && W.pos2.get(player) != null) { if (W.pos1.get(player).getWorld() .equals(W.pos2.get(player).getWorld())) { - W.arenas.getFile().set(args[1] + ".name", args[1]); - W.arenas.getFile().set(args[1] + ".pos1", - W.pos1.get(player)); - W.arenas.getFile().set(args[1] + ".pos2", - W.pos2.get(player)); - W.arenas.getFile().set(args[1] + ".maxPlayers", 12); - W.arenas.getFile().set(args[1] + ".minPlayers", 3); - W.arenas.getFile().set( - args[1] + ".amountSeekersOnStart", 1); - W.arenas.getFile().set( - args[1] + ".timeInLobbyUntilStart", 90); - W.arenas.getFile().set( - args[1] + ".waitingTimeSeeker", 20); - W.arenas.getFile().set(args[1] + ".gameTime", 200); + ArenaSerializable arena = new ArenaSerializable( + args[1], W.pos1.get(player), + W.pos2.get(player), 12, 3, 1, 90, 20, 200, + null); + W.arenas.getFile().set(args[1], arena); W.arenas.save(); + ArenaHandler.loadArenas(); + MessageM.sendFMessage(player, ConfigC.normal_createCreatedArena, true, "name-" + args[1]); diff --git a/src/nl/Steffion/BlockHunt/Serializables/ArenaSerializable.java b/src/nl/Steffion/BlockHunt/Serializables/ArenaSerializable.java new file mode 100644 index 0000000..ca00344 --- /dev/null +++ b/src/nl/Steffion/BlockHunt/Serializables/ArenaSerializable.java @@ -0,0 +1,55 @@ +package nl.Steffion.BlockHunt.Serializables; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import nl.Steffion.BlockHunt.Arena; + +import org.bukkit.Bukkit; +import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.configuration.serialization.SerializableAs; +import org.bukkit.entity.Player; + +@SerializableAs("Arena") +public class ArenaSerializable extends Arena implements + ConfigurationSerializable { + public ArenaSerializable (String arenaName, LocationSerializable pos1, + LocationSerializable pos2, int maxPlayers, int minPlayers, + int amountSeekersOnStart, int timeInLobbyUntilStart, + int waitingTimeSeeker, int gameTime, List playersInArena) { + super(arenaName, pos1, pos2, maxPlayers, minPlayers, + amountSeekersOnStart, timeInLobbyUntilStart, waitingTimeSeeker, + gameTime, playersInArena); + } + + @Override + public Map serialize() { + Map map = new HashMap(); + map.put("arenaName", arenaName); + map.put("pos1", pos1); + map.put("pos2", pos2); + map.put("maxPlayers", maxPlayers); + map.put("minPlayers", minPlayers); + map.put("amountSeekersOnStart", amountSeekersOnStart); + map.put("timeInLobbyUntilStart", timeInLobbyUntilStart); + map.put("waitingTimeSeeker", waitingTimeSeeker); + map.put("gameTime", gameTime); + return map; + } + + public static ArenaSerializable deserialize(Map map) { + LocationSerializable loc = new LocationSerializable( + Bukkit.getWorld("world"), 0, 0, 0, 0, 0); + return new ArenaSerializable((String) M.g(map, "arenaName", + "UNKNOWN_NAME"), (LocationSerializable) M.g(map, "pos1", loc), + (LocationSerializable) M.g(map, "pos2", loc), (Integer) M.g( + map, "maxPlayers", 12), (Integer) M.g(map, + "minPlayers", 3), (Integer) M.g(map, + "amountSeekersOnStart", 1), (Integer) M.g(map, + "timeInLobbyUntilStart", 90), (Integer) M.g(map, + "waitingTimeSeeker", 20), (Integer) M.g(map, + "gameTime", 200), new ArrayList()); + } +} diff --git a/src/nl/Steffion/BlockHunt/W.java b/src/nl/Steffion/BlockHunt/W.java index ffd49c7..9397ff1 100644 --- a/src/nl/Steffion/BlockHunt/W.java +++ b/src/nl/Steffion/BlockHunt/W.java @@ -26,6 +26,7 @@ public class W { public static ConfigM config = new ConfigM("config", ""); public static ConfigM messages = new ConfigM("messages", ""); public static ConfigM arenas = new ConfigM("arenas", ""); + public static ArrayList arenaList = new ArrayList(); public static void newFiles() { ConfigM.setDefaults();