diff --git a/src/main/java/io/github/dre2n/dungeonsxl/config/DMessages.java b/src/main/java/io/github/dre2n/dungeonsxl/config/DMessages.java index 12995638..9b2465b3 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/config/DMessages.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/config/DMessages.java @@ -129,6 +129,7 @@ public enum DMessages implements Messages { LOG_ERROR_NO_CONSOLE_COMMAND("Log_Error_NoConsoleCommand", "&6/dxl &v1&4 can not be executed as Console!"), LOG_GENERATE_NEW_WORLD("Log_GenerateNewWorld", "&6Generate new world..."), LOG_NEW_DUNGEON("Log_NewDungeon", "&6New Dungeon"), + LOG_NEW_PLAYER_DATA("Log_NewPlayerData", "&6A new player data file has been created and saved as &v1."), LOG_WORLD_GENERATION_FINISHED("Log_WorldGenerationFinished", "&6World generation finished!"), PLAYER_BLOCK_INFO("Player_BlockInfo", "&6Block-ID: &2&v1"), PLAYER_CHECKPOINT_REACHED("Player_CheckpointReached", "&6Checkpoint reached!"), diff --git a/src/main/java/io/github/dre2n/dungeonsxl/config/PlayerData.java b/src/main/java/io/github/dre2n/dungeonsxl/config/PlayerData.java index b28af371..30ef52bf 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/config/PlayerData.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/config/PlayerData.java @@ -17,10 +17,14 @@ package io.github.dre2n.dungeonsxl.config; import io.github.dre2n.commons.config.BRConfig; +import io.github.dre2n.commons.util.messageutil.MessageUtil; import io.github.dre2n.dungeonsxl.DungeonsXL; import java.io.File; +import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @author Daniel Saukel @@ -55,7 +59,7 @@ public class PlayerData extends BRConfig { * @return the time when the player finished the dungeon for the last time */ public long getTimeLastPlayed(String dungeon) { - Long time = timeLastPlayed.get(dungeon); + Long time = timeLastPlayed.get(dungeon.toLowerCase()); if (time == null) { return -1; } else { @@ -70,7 +74,7 @@ public class PlayerData extends BRConfig { * the time when the dungeon was finished */ public void setTimeLastPlayed(String dungeon, long time) { - timeLastPlayed.put(dungeon, time); + timeLastPlayed.put(dungeon.toLowerCase(), time); save(); } @@ -79,7 +83,7 @@ public class PlayerData extends BRConfig { * the finished dungeon */ public void logTimeLastPlayed(String dungeon) { - timeLastPlayed.put(dungeon, System.currentTimeMillis()); + timeLastPlayed.put(dungeon.toLowerCase(), System.currentTimeMillis()); save(); } @@ -89,16 +93,30 @@ public class PlayerData extends BRConfig { config.createSection("timeLastPlayed"); } + if (!file.exists()) { + try { + file.createNewFile(); + MessageUtil.log(plugin, DMessages.LOG_NEW_PLAYER_DATA.getMessage(file.getName())); + } catch (IOException exception) { + } + } + save(); } @Override public void load() { - if (config.contains("timeLastPlayed")) { + if (config.isConfigurationSection("timeLastPlayed")) { for (String key : config.getConfigurationSection("timeLastPlayed").getKeys(false)) { - timeLastPlayed.put(key, config.getLong(key)); + timeLastPlayed.put(key, config.getLong("timeLastPlayed." + key)); } } } + @Override + public void save() { + config.set("timeLastPlayed", timeLastPlayed); + super.save(); + } + } diff --git a/src/main/java/io/github/dre2n/dungeonsxl/game/Game.java b/src/main/java/io/github/dre2n/dungeonsxl/game/Game.java index 31daddfa..912b40ab 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/game/Game.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/game/Game.java @@ -79,8 +79,8 @@ public class Game { started = false; world = new GameWorld(); dGroup.setGameWorld(world); - fetchRules(); world.load(worldName); + fetchRules(); } public Game(DGroup dGroup, GameType type, GameWorld world) { diff --git a/src/main/java/io/github/dre2n/dungeonsxl/global/DPortal.java b/src/main/java/io/github/dre2n/dungeonsxl/global/DPortal.java index 43d3d6fe..0d4b9c16 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/global/DPortal.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/global/DPortal.java @@ -196,12 +196,12 @@ public class DPortal extends GlobalProtection { } if (game == null) { - game = new Game(dGroup); + game = new Game(dGroup, target); + } else { + game.setWorld(target); + dGroup.setGameWorld(target); } - game.setWorld(target); - dGroup.setGameWorld(target); - new DGamePlayer(player, target); } diff --git a/src/main/java/io/github/dre2n/dungeonsxl/player/DGamePlayer.java b/src/main/java/io/github/dre2n/dungeonsxl/player/DGamePlayer.java index bfdcf4b1..6defb843 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/player/DGamePlayer.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/player/DGamePlayer.java @@ -40,15 +40,12 @@ import io.github.dre2n.dungeonsxl.reward.Reward; import io.github.dre2n.dungeonsxl.trigger.DistanceTrigger; import io.github.dre2n.dungeonsxl.world.GameWorld; import java.io.File; -import java.io.IOException; import java.util.concurrent.CopyOnWriteArrayList; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Damageable; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -452,7 +449,7 @@ public class DGamePlayer extends DInstancePlayer { return true; } - GameRules rules = Game.getByPlayer(player).getRules(); + GameRules rules = game.getRules(); if (!checkTime(game)) { MessageUtil.sendMessage(player, DMessages.ERROR_COOLDOWN.getMessage(String.valueOf(rules.getTimeToNextPlay()))); @@ -521,6 +518,7 @@ public class DGamePlayer extends DInstancePlayer { } } + return true; } @@ -540,7 +538,6 @@ public class DGamePlayer extends DInstancePlayer { } } } - return true; } @@ -549,8 +546,6 @@ public class DGamePlayer extends DInstancePlayer { } public void ready(GameType gameType) { - ready = true; - DGroup dGroup = DGroup.getByPlayer(getPlayer()); if (dGroup == null) { @@ -564,12 +559,15 @@ public class DGamePlayer extends DInstancePlayer { } else { game.setType(gameType); } + game.fetchRules(); if (!checkRequirements(game)) { MessageUtil.sendMessage(player, DMessages.ERROR_REQUIREMENTS.getMessage()); return; } + ready = true; + for (DGroup gameGroup : game.getDGroups()) { if (!gameGroup.isPlaying()) { gameGroup.startGame(game); @@ -633,11 +631,7 @@ public class DGamePlayer extends DInstancePlayer { } } - boolean invalid = false; - - if (dGroup.getDungeon() == null) { - invalid = true; - } + boolean invalid = !dGroup.getDungeon().isMultiFloor(); for (Player player : dGroup.getPlayers()) { DGamePlayer dPlayer = getByPlayer(player); diff --git a/src/main/java/io/github/dre2n/dungeonsxl/player/DGroup.java b/src/main/java/io/github/dre2n/dungeonsxl/player/DGroup.java index 7e1644a9..f9aacc90 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/player/DGroup.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/player/DGroup.java @@ -103,9 +103,9 @@ public class DGroup { addPlayer(player); } - Dungeon dungeon = plugin.getDungeons().getDungeon(identifier); + dungeon = plugin.getDungeons().getDungeon(identifier); if (multiFloor && dungeon != null) { - dungeonName = identifier; + dungeonName = dungeon.getName(); mapName = dungeon.getConfig().getStartFloor(); unplayedFloors = dungeon.getConfig().getFloors(); @@ -295,6 +295,21 @@ public class DGroup { this.gameWorld = gameWorld; } + /** + * @return the dungeon + */ + public Dungeon getDungeon() { + return dungeon; + } + + /** + * @param dungeon + * the dungeon to set + */ + public void setDungeon(Dungeon dungeon) { + this.dungeon = dungeon; + } + /** * @return the dungeonName */ @@ -310,21 +325,6 @@ public class DGroup { this.dungeonName = dungeonName; } - /** - * @return the dungeon - */ - public Dungeon getDungeon() { - return dungeon; - } - - /** - * @param dungeon - * the dungeon to set (saved by name only) - */ - public void setDungeon(Dungeon dungeon) { - dungeonName = dungeon.getName(); - } - /** * @return if the group is playing */ diff --git a/src/main/java/io/github/dre2n/dungeonsxl/sign/ReadySign.java b/src/main/java/io/github/dre2n/dungeonsxl/sign/ReadySign.java index af80c5f5..6eb0eef3 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/sign/ReadySign.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/sign/ReadySign.java @@ -117,10 +117,10 @@ public class ReadySign extends DSign { if (getGameWorld().getSignClass().isEmpty() || dPlayer.getDClass() != null) { GameType forced = getGameWorld().getConfig().getForcedGameType(); dPlayer.ready(forced == null ? gameType : forced); - MessageUtil.sendMessage(dPlayer.getPlayer(), plugin.getMessageConfig().getMessage(DMessages.PLAYER_READY)); + } - } else { - MessageUtil.sendMessage(dPlayer.getPlayer(), plugin.getMessageConfig().getMessage(DMessages.ERROR_READY)); + if (dPlayer.isReady()) { + MessageUtil.sendMessage(dPlayer.getPlayer(), plugin.getMessageConfig().getMessage(dPlayer.isReady() ? DMessages.PLAYER_READY : DMessages.ERROR_READY)); } }