diff --git a/src/main/java/com/graywolf336/jail/JailIO.java b/src/main/java/com/graywolf336/jail/JailIO.java index fdbf6b3..b82de83 100644 --- a/src/main/java/com/graywolf336/jail/JailIO.java +++ b/src/main/java/com/graywolf336/jail/JailIO.java @@ -378,7 +378,6 @@ public class JailIO { //that doesn't exist anymore List cellsToRemove = new LinkedList(); - int cs = 0; try { if(con == null) this.prepareStorage(false); PreparedStatement ps = con.prepareStatement("SELECT * FROM " + prefix + "cells"); @@ -405,7 +404,6 @@ public class JailIO { j.addCell(c, false); - cs++; }else { cellsToRemove.add(set.getInt("cellid")); } @@ -444,8 +442,6 @@ public class JailIO { } } - pl.getLogger().info("Loaded " + cs + (cs == 1 ? " cell." : " cells.")); - //This list contains a string which refers to the name of the prisoner in sql //this list only gets populated if there are prisoners which reference a jail //that doesn't exist anymore @@ -538,6 +534,9 @@ public class JailIO { int js = pl.getJailManager().getJails().size(); pl.getLogger().info("Loaded " + js + (js == 1 ? " jail." : " jails.")); + int cs = pl.getJailManager().getAllCells().size(); + pl.getLogger().info("Loaded " + cs + (cs == 1 ? " cell." : " cells.")); + int ps = pl.getJailManager().getAllPrisoners().size(); pl.getLogger().info("Loaded " + ps + (ps == 1 ? " prisoner." : " prisoners.")); } @@ -644,6 +643,21 @@ public class JailIO { pl.getLogger().severe("Failed to load the jail " + j.getName() + " as the world '" + j.getWorldName() + "' does not exist (is null). Did you remove this world?"); } + /** Saves everything about a jail, don't usually call this. */ + public void saveEverything() { + long st = System.currentTimeMillis(); + + for(Jail j : pl.getJailManager().getJails()) { + saveJail(j); + + for(Cell c : j.getCells()) { + saveCell(j, c); + } + } + + pl.debug("Saving everything took " + (System.currentTimeMillis() - st) + " millis."); + } + /** * Saves the provided {@link Jail jail} to the storage system we are using. * @@ -728,7 +742,7 @@ public class JailIO { try { if(con == null) this.prepareStorage(false); - for(Prisoner p : j.getPrisonersNotInCells()) { + for(Prisoner p : j.getPrisonersNotInCells().values()) { PreparedStatement pPS = con.prepareStatement("REPLACE INTO `" + prefix + "prisoners` (`uuid`, `name`, `jail`, `cell`, `muted`, `time`," + "`offlinePending`, `toBeTransferred`, `jailer`, `reason`, `inventory`, `armor`, `previousLocation`, `previousGameMode`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); pPS.setString(1, p.getUUID().toString()); @@ -834,7 +848,7 @@ public class JailIO { //Null all the prisoners out before we save them again, this way no prisoners are left behind flat.set(node + "prisoners", null); - for(Prisoner p : j.getPrisonersNotInCells()) { + for(Prisoner p : j.getPrisonersNotInCells().values()) { String pNode = node + "prisoners." + p.getUUID().toString() + "."; flat.set(pNode + "name", p.getLastKnownName()); flat.set(pNode + "muted", p.isMuted()); @@ -908,11 +922,12 @@ public class JailIO { pPS.setFloat(6, p.getRemainingTime()); pPS.setBoolean(7, p.isOfflinePending()); pPS.setBoolean(8, p.isToBeTransferred()); - pPS.setString(9, p.getReason()); - pPS.setBytes(10, p.getInventory().getBytes()); - pPS.setBytes(11, p.getArmor().getBytes()); - pPS.setString(12, p.getPreviousLocationString()); - pPS.setString(13, p.getPreviousGameMode().toString()); + pPS.setString(9, p.getJailer()); + pPS.setString(10, p.getReason()); + pPS.setBytes(11, p.getInventory().getBytes()); + pPS.setBytes(12, p.getArmor().getBytes()); + pPS.setString(13, p.getPreviousLocationString()); + pPS.setString(14, p.getPreviousGameMode().toString()); pPS.executeUpdate(); pPS.close(); diff --git a/src/main/java/com/graywolf336/jail/JailMain.java b/src/main/java/com/graywolf336/jail/JailMain.java index 0d016d7..5559e18 100644 --- a/src/main/java/com/graywolf336/jail/JailMain.java +++ b/src/main/java/com/graywolf336/jail/JailMain.java @@ -51,8 +51,8 @@ public class JailMain extends JavaPlugin { //Try to load the old stuff before we load anything, esp the storage stuff LegacyManager lm = new LegacyManager(this); if(lm.doWeNeedToConvert()) { - boolean converted = lm.convertOldData(); - if(!converted) getLogger().severe("We was unable to convert some, or all, of the old data."); + lm.convertOldData(); + if(!lm.wasAnythingConverted()) getLogger().severe("We was unable to convert some, or all, of the old data."); } io = new JailIO(this); @@ -67,6 +67,11 @@ public class JailMain extends JavaPlugin { io.loadJails(); + //If we converted something, let's save EVERYTHING including the cells + if(lm.wasAnythingConverted()) { + io.saveEverything(); + } + cmdHand = new CommandHandler(this); jh = new JailHandler(this); pm = new PrisonerManager(this); @@ -166,7 +171,7 @@ public class JailMain extends JavaPlugin { if(getConfig().getBoolean(Settings.SCOREBOARDENABLED.getPath())) { for(Jail j : jm.getJails()) { - for(Prisoner p : j.getAllPrisoners()) { + for(Prisoner p : j.getAllPrisoners().values()) { if(getServer().getPlayer(p.getUUID()) != null) { this.sbm.addScoreBoard(getServer().getPlayer(p.getUUID()), p); } diff --git a/src/main/java/com/graywolf336/jail/JailManager.java b/src/main/java/com/graywolf336/jail/JailManager.java index 4631136..27dfb59 100644 --- a/src/main/java/com/graywolf336/jail/JailManager.java +++ b/src/main/java/com/graywolf336/jail/JailManager.java @@ -155,17 +155,30 @@ public class JailManager { return this.jails.get(name) != null; } + /** + * Gets all the {@link Cell cells} in the jail system, best for system wide count of the cells or touching each cell. + * + * @return HashSet of all the Cells. + */ + public HashSet getAllCells() { + HashSet cells = new HashSet(); + + for(Jail j : jails.values()) + cells.addAll(j.getCells()); + + return cells; + } + /** * Gets all the prisoners in the system, best for a system wide count of the prisoners or accessing all the prisoners at once. * * @return HashSet of Prisoners. */ - public HashSet getAllPrisoners() { - HashSet prisoners = new HashSet(); + public HashMap getAllPrisoners() { + HashMap prisoners = new HashMap(); - for(Jail j : jails.values()) { - prisoners.addAll(j.getAllPrisoners()); - } + for(Jail j : jails.values()) + prisoners.putAll(j.getAllPrisoners()); return prisoners; } @@ -230,7 +243,7 @@ public class JailManager { */ public Jail getJailPlayerIsInByLastKnownName(String username) { for(Jail j : jails.values()) - for(Prisoner p : j.getAllPrisoners()) + for(Prisoner p : j.getAllPrisoners().values()) if(p.getLastKnownName().equalsIgnoreCase(username)) return j; @@ -244,7 +257,7 @@ public class JailManager { * @return {@link Prisoner prisoner} data */ public Prisoner getPrisonerByLastKnownName(String username) { - for(Prisoner p : this.getAllPrisoners()) + for(Prisoner p : this.getAllPrisoners().values()) if(p.getLastKnownName().equalsIgnoreCase(username)) return p; @@ -273,7 +286,7 @@ public class JailManager { Jail j = getJail(jail); if(j != null) { - for(Prisoner p : j.getAllPrisoners()) { + for(Prisoner p : j.getAllPrisoners().values()) { getPlugin().getPrisonerManager().releasePrisoner(getPlugin().getServer().getPlayer(p.getUUID()), p); } @@ -297,7 +310,7 @@ public class JailManager { return getPlugin().getJailIO().getLanguageString(LangString.NOJAILS); }else { for(Jail j : getJails()) { - for(Prisoner p : j.getAllPrisoners()) { + for(Prisoner p : j.getAllPrisoners().values()) { getPlugin().getPrisonerManager().releasePrisoner(getPlugin().getServer().getPlayer(p.getUUID()), p); } } diff --git a/src/main/java/com/graywolf336/jail/JailTimer.java b/src/main/java/com/graywolf336/jail/JailTimer.java index 9ae4503..a226f96 100644 --- a/src/main/java/com/graywolf336/jail/JailTimer.java +++ b/src/main/java/com/graywolf336/jail/JailTimer.java @@ -66,7 +66,7 @@ public class JailTimer { } for(Jail j : pl.getJailManager().getJails()) { - for(Prisoner p : j.getAllPrisoners()) { + for(Prisoner p : j.getAllPrisoners().values()) { //only execute this code if the prisoner's time is more than 0 milliseconds if(p.getRemainingTime() > 0) { Player player = pl.getServer().getPlayer(p.getUUID()); diff --git a/src/main/java/com/graywolf336/jail/ScoreBoardManager.java b/src/main/java/com/graywolf336/jail/ScoreBoardManager.java index 1ae541e..0c8f0a2 100644 --- a/src/main/java/com/graywolf336/jail/ScoreBoardManager.java +++ b/src/main/java/com/graywolf336/jail/ScoreBoardManager.java @@ -43,13 +43,13 @@ public class ScoreBoardManager { * @param pris data for the provided prisoner */ public void addScoreBoard(Player player, Prisoner pris) { - if(!boards.containsKey(player.getName())) { + if(!boards.containsKey(player.getUniqueId())) { boards.put(player.getUniqueId(), man.getNewScoreboard()); - Objective o = boards.get(player.getName()).registerNewObjective("test", "dummy"); + Objective o = boards.get(player.getUniqueId()).registerNewObjective("test", "dummy"); o.setDisplaySlot(DisplaySlot.SIDEBAR); o.setDisplayName(Util.getColorfulMessage(pl.getConfig().getString(Settings.SCOREBOARDTITLE.getPath()))); o.getScore(time).setScore(pris.getRemainingTimeInMinutesInt()); - player.setScoreboard(boards.get(player.getName())); + player.setScoreboard(boards.get(player.getUniqueId())); }else { updatePrisonersBoard(player, pris); } @@ -84,7 +84,7 @@ public class ScoreBoardManager { /** Updates the prisoners time on their scoreboard. */ private void updatePrisonersTime() { for(Jail j : pl.getJailManager().getJails()) { - for(Prisoner p : j.getAllPrisoners()) { + for(Prisoner p : j.getAllPrisoners().values()) { if(pl.getServer().getPlayer(p.getUUID()) != null) { addScoreBoard(pl.getServer().getPlayer(p.getUUID()), p); } @@ -99,6 +99,6 @@ public class ScoreBoardManager { * @param pris data for the player */ private void updatePrisonersBoard(Player player, Prisoner pris) { - boards.get(player.getName()).getObjective("test").getScore(time).setScore(pris.getRemainingTimeInMinutesInt()); + boards.get(player.getUniqueId()).getObjective("test").getScore(time).setScore(pris.getRemainingTimeInMinutesInt()); } } diff --git a/src/main/java/com/graywolf336/jail/beans/Jail.java b/src/main/java/com/graywolf336/jail/beans/Jail.java index ae2a749..487071f 100644 --- a/src/main/java/com/graywolf336/jail/beans/Jail.java +++ b/src/main/java/com/graywolf336/jail/beans/Jail.java @@ -23,7 +23,7 @@ import com.graywolf336.jail.Util; public class Jail { private JailMain plugin; private HashMap cells; - private HashSet nocellPrisoners;//prisoners who aren't in a cell + private HashMap nocellPrisoners;//prisoners who aren't in a cell private String name = "", world = ""; private int minX, minY, minZ, maxX, maxY, maxZ; private SimpleLocation in, free; @@ -32,7 +32,7 @@ public class Jail { this.plugin = plugin; this.name = name; cells = new HashMap(); - nocellPrisoners = new HashSet(); + nocellPrisoners = new HashMap(); } /** Gets the instance of the plugin's main class. */ @@ -135,7 +135,7 @@ public class Jail { /** Add a prisoner to this jail. */ public void addPrisoner(Prisoner p) { - this.nocellPrisoners.add(p); + this.nocellPrisoners.put(p.getUUID(), p); } /** Removes a prisoner from this jail, doesn't remove it from the cell. */ @@ -246,16 +246,16 @@ public class Jail { //Replace all the current no cell prisoners with //a new hashset of prisoners. - this.nocellPrisoners = new HashSet(); + this.nocellPrisoners = new HashMap(); } - /** Gets a HashSet of all the prisoners, the ones in cells and ones who aren't. */ - public HashSet getAllPrisoners() { - HashSet all = new HashSet(nocellPrisoners); //initalize the temp one to return with the prisoners not in any cells + /** Gets a HashMap of all the prisoners, the ones in cells and ones who aren't. */ + public HashMap getAllPrisoners() { + HashMap all = new HashMap(nocellPrisoners); //initalize the temp one to return with the prisoners not in any cells for(Cell c : cells.values()) if(c.hasPrisoner()) - all.add(c.getPrisoner()); + all.put(c.getPrisoner().getUUID(), c.getPrisoner()); return all; } @@ -272,7 +272,7 @@ public class Jail { } /** Gets a HashSet of the prisoners not in cells.*/ - public HashSet getPrisonersNotInCells() { + public HashMap getPrisonersNotInCells() { return this.nocellPrisoners; } @@ -303,11 +303,7 @@ public class Jail { * @return true if is a prisoner, false if not. */ private boolean isPlayerAPrisoner(UUID uuid) { - for(Prisoner p : this.getAllPrisoners()) - if(p.getUUID().equals(uuid)) - return true; - - return false; + return this.getAllPrisoners().containsKey(uuid); } /** @@ -317,9 +313,7 @@ public class Jail { * @return true if is jailed in a cell, false if not. */ public boolean isJailedInACell(UUID uuid) { - for(Prisoner p : nocellPrisoners) - if(p.getUUID().equals(uuid)) - return false; + if(this.nocellPrisoners.containsKey(uuid)) return false; for(Cell c : cells.values()) if(c.getPrisoner() != null) @@ -336,7 +330,7 @@ public class Jail { * @return the prisoner instance, can be null */ public Prisoner getPrisonerByLastKnownName(String name) { - for(Prisoner p : this.getAllPrisoners()) + for(Prisoner p : this.getAllPrisoners().values()) if(p.getLastKnownName().equalsIgnoreCase(name)) return p; @@ -350,9 +344,12 @@ public class Jail { * @return the prisoner instance, can be null */ public Prisoner getPrisoner(UUID uuid) { - for(Prisoner p : this.getAllPrisoners()) - if(p.getUUID().equals(uuid)) - return p; + if(this.nocellPrisoners.containsKey(uuid)) return this.nocellPrisoners.get(uuid); + + for(Cell c : cells.values()) + if(c.hasPrisoner()) + if(c.getPrisoner().getUUID().equals(uuid)) + return c.getPrisoner(); return null; } diff --git a/src/main/java/com/graywolf336/jail/command/subcommands/JailListCommand.java b/src/main/java/com/graywolf336/jail/command/subcommands/JailListCommand.java index 04e14e0..b1d33e8 100644 --- a/src/main/java/com/graywolf336/jail/command/subcommands/JailListCommand.java +++ b/src/main/java/com/graywolf336/jail/command/subcommands/JailListCommand.java @@ -1,6 +1,6 @@ package com.graywolf336.jail.command.subcommands; -import java.util.HashSet; +import java.util.Collection; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -41,13 +41,13 @@ public class JailListCommand implements Command { //No jail was found sender.sendMessage(" " + jm.getPlugin().getJailIO().getLanguageString(LangString.NOJAIL, args[1])); }else { - HashSet pris = j.getAllPrisoners(); + Collection pris = j.getAllPrisoners().values(); if(pris.isEmpty()) { //If there are no prisoners, then send that message sender.sendMessage(" " + jm.getPlugin().getJailIO().getLanguageString(LangString.NOPRISONERS, j.getName())); }else { - for(Prisoner p : j.getAllPrisoners()) { + for(Prisoner p : pris) { //graywolf663: Being gray's evil twin; CONSOLE (10) //prisoner: reason; jailer (time in minutes) sender.sendMessage(ChatColor.BLUE + " " + p.getLastKnownName() + ": " + p.getReason() + "; " + p.getJailer() + " (" + p.getRemainingTimeInMinutes() + " mins)"); diff --git a/src/main/java/com/graywolf336/jail/command/subcommands/JailTransferAllCommand.java b/src/main/java/com/graywolf336/jail/command/subcommands/JailTransferAllCommand.java index e34f43f..81fddca 100644 --- a/src/main/java/com/graywolf336/jail/command/subcommands/JailTransferAllCommand.java +++ b/src/main/java/com/graywolf336/jail/command/subcommands/JailTransferAllCommand.java @@ -41,7 +41,7 @@ public class JailTransferAllCommand implements Command { jm.getPlugin().debug("Sending the transferring off, jail checks all came clean."); Jail old = jm.getJail(args[1]); - HashSet oldPrisoners = new HashSet(old.getAllPrisoners()); + HashSet oldPrisoners = new HashSet(old.getAllPrisoners().values()); //Transfer all the prisoners for(Prisoner p : oldPrisoners) { diff --git a/src/main/java/com/graywolf336/jail/legacy/LegacyManager.java b/src/main/java/com/graywolf336/jail/legacy/LegacyManager.java index 27dc2ff..8cc5135 100644 --- a/src/main/java/com/graywolf336/jail/legacy/LegacyManager.java +++ b/src/main/java/com/graywolf336/jail/legacy/LegacyManager.java @@ -27,9 +27,11 @@ import com.graywolf336.jail.enums.Settings; public class LegacyManager { private JailMain pl; private YamlConfiguration global; + private boolean wasConverted; public LegacyManager(JailMain plugin) { this.pl = plugin; + this.wasConverted = false; } /** Returns true/false if the old config, global.yml, exists and needs to be converted. */ @@ -37,6 +39,15 @@ public class LegacyManager { return new File(pl.getDataFolder(), "global.yml").exists(); } + /** + * Returns true if we converted anything and it was successful. + * + * @return true if everything converted successfully, was if not. + */ + public boolean wasAnythingConverted() { + return this.wasConverted; + } + public boolean convertOldData() { File f = new File(pl.getDataFolder(), "global.yml"); @@ -64,6 +75,7 @@ public class LegacyManager { loadOldConfig(); loadOldData(); moveOldConfigs(); + this.wasConverted = true; pl.getLogger().info("...finished converting configs and data."); return true; }catch (Exception e) { @@ -380,6 +392,27 @@ public class LegacyManager { count++; } break; + case PricePerMinute: + if(global.contains(s.getString())) { + c.set(Settings.JAILPAYPRICEPERMINUTE.getPath(), OldSettings.getGlobalInt(global, s)); + pl.debug(Settings.JAILPAYPRICEPERMINUTE.getPath() + " <-- " + s.getString()); + count++; + } + case PriceForInfiniteJail: + if(global.contains(s.getString())) { + c.set(Settings.JAILPAYPRICEINFINITE.getPath(), OldSettings.getGlobalInt(global, s)); + pl.debug(Settings.JAILPAYPRICEINFINITE.getPath() + " <-- " + s.getString()); + count++; + } + case JailPayCurrency: + if(global.contains(s.getString())) { + Material mat = Material.getMaterial(OldSettings.getGlobalInt(global, s)); + if(mat != null) { + c.set(Settings.JAILPAYITEM.getPath(), mat.toString().toLowerCase()); + pl.debug(Settings.JAILPAYPRICEINFINITE.getPath() + " <-- " + s.getString()); + count++; + } + } default: break; } diff --git a/src/main/java/com/graywolf336/jail/legacy/OldInputOutput.java b/src/main/java/com/graywolf336/jail/legacy/OldInputOutput.java index 48dce58..25db076 100644 --- a/src/main/java/com/graywolf336/jail/legacy/OldInputOutput.java +++ b/src/main/java/com/graywolf336/jail/legacy/OldInputOutput.java @@ -191,7 +191,7 @@ public class OldInputOutput { //Load the prisoner if he is a valid prisoner if(!player.isEmpty()) { - Prisoner p = j.getPrisonerByLastKnownName(name); + Prisoner p = j.getPrisonerByLastKnownName(player); if(p != null) { j.removePrisoner(p); diff --git a/src/main/java/com/graywolf336/jail/legacy/OldSetting.java b/src/main/java/com/graywolf336/jail/legacy/OldSetting.java index 9bfe8f5..c186a54 100644 --- a/src/main/java/com/graywolf336/jail/legacy/OldSetting.java +++ b/src/main/java/com/graywolf336/jail/legacy/OldSetting.java @@ -50,9 +50,9 @@ public enum OldSetting { PrisonersRecieveMessages("Protections.PlayerRecievesMessages", true), //done //JailPay - PricePerMinute("JailPay.PricePerMinute", 10),//TODO - PriceForInfiniteJail("JailPay.PriceForInfiniteJail", 9999),//TODO - JailPayCurrency("JailPay.Currency", 0),//TODO + PricePerMinute("JailPay.PricePerMinute", 10),//done + PriceForInfiniteJail("JailPay.PriceForInfiniteJail", 9999),//done + JailPayCurrency("JailPay.Currency", 0),//done //Guards GuardHealth("Guards.GuardHealth", 8),//TODO diff --git a/src/main/java/com/graywolf336/jail/listeners/MoveProtectionListener.java b/src/main/java/com/graywolf336/jail/listeners/MoveProtectionListener.java index 5c8f76a..2f3fd35 100644 --- a/src/main/java/com/graywolf336/jail/listeners/MoveProtectionListener.java +++ b/src/main/java/com/graywolf336/jail/listeners/MoveProtectionListener.java @@ -27,8 +27,9 @@ public class MoveProtectionListener implements Listener { //Other wise we don't need to deal with it. if(pl.getConfig().getBoolean(Settings.MOVEPROTECTION.getPath())) { //Let's be sure the player we're dealing with is in jail - if(pl.getJailManager().isPlayerJailed(event.getPlayer().getUniqueId())) { - Jail j = pl.getJailManager().getJailPlayerIsIn(event.getPlayer().getUniqueId()); + + Jail j = pl.getJailManager().getJailPlayerIsIn(event.getPlayer().getUniqueId()); + if(j != null) { Prisoner p = j.getPrisoner(event.getPlayer().getUniqueId()); //If the player is being teleported, let's ignore it diff --git a/src/main/java/com/graywolf336/jail/listeners/PlayerListener.java b/src/main/java/com/graywolf336/jail/listeners/PlayerListener.java index 7c33f8f..9aa9a97 100644 --- a/src/main/java/com/graywolf336/jail/listeners/PlayerListener.java +++ b/src/main/java/com/graywolf336/jail/listeners/PlayerListener.java @@ -76,7 +76,7 @@ public class PlayerListener implements Listener { Set rec = new HashSet(event.getRecipients()); for(Jail j : pl.getJailManager().getJails()) - for(Prisoner p : j.getAllPrisoners()) + for(Prisoner p : j.getAllPrisoners().values()) rec.remove(pl.getServer().getPlayer(p.getUUID())); event.getRecipients().clear();