Try to lower the amount of time spent on each move event as mentioned in

issue #26
This commit is contained in:
graywolf336 2014-05-08 19:30:20 -05:00
parent 0bb679329d
commit 3e54d79dd3
10 changed files with 38 additions and 40 deletions

View File

@ -742,7 +742,7 @@ public class JailIO {
try { try {
if(con == null) this.prepareStorage(false); 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`," PreparedStatement pPS = con.prepareStatement("REPLACE INTO `" + prefix + "prisoners` (`uuid`, `name`, `jail`, `cell`, `muted`, `time`,"
+ "`offlinePending`, `toBeTransferred`, `jailer`, `reason`, `inventory`, `armor`, `previousLocation`, `previousGameMode`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); + "`offlinePending`, `toBeTransferred`, `jailer`, `reason`, `inventory`, `armor`, `previousLocation`, `previousGameMode`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
pPS.setString(1, p.getUUID().toString()); pPS.setString(1, p.getUUID().toString());
@ -848,7 +848,7 @@ public class JailIO {
//Null all the prisoners out before we save them again, this way no prisoners are left behind //Null all the prisoners out before we save them again, this way no prisoners are left behind
flat.set(node + "prisoners", null); flat.set(node + "prisoners", null);
for(Prisoner p : j.getPrisonersNotInCells()) { for(Prisoner p : j.getPrisonersNotInCells().values()) {
String pNode = node + "prisoners." + p.getUUID().toString() + "."; String pNode = node + "prisoners." + p.getUUID().toString() + ".";
flat.set(pNode + "name", p.getLastKnownName()); flat.set(pNode + "name", p.getLastKnownName());
flat.set(pNode + "muted", p.isMuted()); flat.set(pNode + "muted", p.isMuted());

View File

@ -171,7 +171,7 @@ public class JailMain extends JavaPlugin {
if(getConfig().getBoolean(Settings.SCOREBOARDENABLED.getPath())) { if(getConfig().getBoolean(Settings.SCOREBOARDENABLED.getPath())) {
for(Jail j : jm.getJails()) { for(Jail j : jm.getJails()) {
for(Prisoner p : j.getAllPrisoners()) { for(Prisoner p : j.getAllPrisoners().values()) {
if(getServer().getPlayer(p.getUUID()) != null) { if(getServer().getPlayer(p.getUUID()) != null) {
this.sbm.addScoreBoard(getServer().getPlayer(p.getUUID()), p); this.sbm.addScoreBoard(getServer().getPlayer(p.getUUID()), p);
} }

View File

@ -174,11 +174,11 @@ public class JailManager {
* *
* @return HashSet of Prisoners. * @return HashSet of Prisoners.
*/ */
public HashSet<Prisoner> getAllPrisoners() { public HashMap<UUID, Prisoner> getAllPrisoners() {
HashSet<Prisoner> prisoners = new HashSet<Prisoner>(); HashMap<UUID, Prisoner> prisoners = new HashMap<UUID, Prisoner>();
for(Jail j : jails.values()) for(Jail j : jails.values())
prisoners.addAll(j.getAllPrisoners()); prisoners.putAll(j.getAllPrisoners());
return prisoners; return prisoners;
} }
@ -243,7 +243,7 @@ public class JailManager {
*/ */
public Jail getJailPlayerIsInByLastKnownName(String username) { public Jail getJailPlayerIsInByLastKnownName(String username) {
for(Jail j : jails.values()) for(Jail j : jails.values())
for(Prisoner p : j.getAllPrisoners()) for(Prisoner p : j.getAllPrisoners().values())
if(p.getLastKnownName().equalsIgnoreCase(username)) if(p.getLastKnownName().equalsIgnoreCase(username))
return j; return j;
@ -257,7 +257,7 @@ public class JailManager {
* @return {@link Prisoner prisoner} data * @return {@link Prisoner prisoner} data
*/ */
public Prisoner getPrisonerByLastKnownName(String username) { public Prisoner getPrisonerByLastKnownName(String username) {
for(Prisoner p : this.getAllPrisoners()) for(Prisoner p : this.getAllPrisoners().values())
if(p.getLastKnownName().equalsIgnoreCase(username)) if(p.getLastKnownName().equalsIgnoreCase(username))
return p; return p;
@ -286,7 +286,7 @@ public class JailManager {
Jail j = getJail(jail); Jail j = getJail(jail);
if(j != null) { if(j != null) {
for(Prisoner p : j.getAllPrisoners()) { for(Prisoner p : j.getAllPrisoners().values()) {
getPlugin().getPrisonerManager().releasePrisoner(getPlugin().getServer().getPlayer(p.getUUID()), p); getPlugin().getPrisonerManager().releasePrisoner(getPlugin().getServer().getPlayer(p.getUUID()), p);
} }
@ -310,7 +310,7 @@ public class JailManager {
return getPlugin().getJailIO().getLanguageString(LangString.NOJAILS); return getPlugin().getJailIO().getLanguageString(LangString.NOJAILS);
}else { }else {
for(Jail j : getJails()) { for(Jail j : getJails()) {
for(Prisoner p : j.getAllPrisoners()) { for(Prisoner p : j.getAllPrisoners().values()) {
getPlugin().getPrisonerManager().releasePrisoner(getPlugin().getServer().getPlayer(p.getUUID()), p); getPlugin().getPrisonerManager().releasePrisoner(getPlugin().getServer().getPlayer(p.getUUID()), p);
} }
} }

View File

@ -66,7 +66,7 @@ public class JailTimer {
} }
for(Jail j : pl.getJailManager().getJails()) { 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 //only execute this code if the prisoner's time is more than 0 milliseconds
if(p.getRemainingTime() > 0) { if(p.getRemainingTime() > 0) {
Player player = pl.getServer().getPlayer(p.getUUID()); Player player = pl.getServer().getPlayer(p.getUUID());

View File

@ -84,7 +84,7 @@ public class ScoreBoardManager {
/** Updates the prisoners time on their scoreboard. */ /** Updates the prisoners time on their scoreboard. */
private void updatePrisonersTime() { private void updatePrisonersTime() {
for(Jail j : pl.getJailManager().getJails()) { for(Jail j : pl.getJailManager().getJails()) {
for(Prisoner p : j.getAllPrisoners()) { for(Prisoner p : j.getAllPrisoners().values()) {
if(pl.getServer().getPlayer(p.getUUID()) != null) { if(pl.getServer().getPlayer(p.getUUID()) != null) {
addScoreBoard(pl.getServer().getPlayer(p.getUUID()), p); addScoreBoard(pl.getServer().getPlayer(p.getUUID()), p);
} }

View File

@ -23,7 +23,7 @@ import com.graywolf336.jail.Util;
public class Jail { public class Jail {
private JailMain plugin; private JailMain plugin;
private HashMap<String, Cell> cells; private HashMap<String, Cell> cells;
private HashSet<Prisoner> nocellPrisoners;//prisoners who aren't in a cell private HashMap<UUID, Prisoner> nocellPrisoners;//prisoners who aren't in a cell
private String name = "", world = ""; private String name = "", world = "";
private int minX, minY, minZ, maxX, maxY, maxZ; private int minX, minY, minZ, maxX, maxY, maxZ;
private SimpleLocation in, free; private SimpleLocation in, free;
@ -32,7 +32,7 @@ public class Jail {
this.plugin = plugin; this.plugin = plugin;
this.name = name; this.name = name;
cells = new HashMap<String, Cell>(); cells = new HashMap<String, Cell>();
nocellPrisoners = new HashSet<Prisoner>(); nocellPrisoners = new HashMap<UUID, Prisoner>();
} }
/** Gets the instance of the plugin's main class. */ /** Gets the instance of the plugin's main class. */
@ -135,7 +135,7 @@ public class Jail {
/** Add a prisoner to this jail. */ /** Add a prisoner to this jail. */
public void addPrisoner(Prisoner p) { 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. */ /** 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 //Replace all the current no cell prisoners with
//a new hashset of prisoners. //a new hashset of prisoners.
this.nocellPrisoners = new HashSet<Prisoner>(); this.nocellPrisoners = new HashMap<UUID, Prisoner>();
} }
/** Gets a HashSet of <b>all</b> the prisoners, the ones in cells and ones who aren't. */ /** Gets a HashMap of <b>all</b> the prisoners, the ones in cells and ones who aren't. */
public HashSet<Prisoner> getAllPrisoners() { public HashMap<UUID, Prisoner> getAllPrisoners() {
HashSet<Prisoner> all = new HashSet<Prisoner>(nocellPrisoners); //initalize the temp one to return with the prisoners not in any cells HashMap<UUID, Prisoner> all = new HashMap<UUID, Prisoner>(nocellPrisoners); //initalize the temp one to return with the prisoners not in any cells
for(Cell c : cells.values()) for(Cell c : cells.values())
if(c.hasPrisoner()) if(c.hasPrisoner())
all.add(c.getPrisoner()); all.put(c.getPrisoner().getUUID(), c.getPrisoner());
return all; return all;
} }
@ -272,7 +272,7 @@ public class Jail {
} }
/** Gets a HashSet of the prisoners <b>not</b> in cells.*/ /** Gets a HashSet of the prisoners <b>not</b> in cells.*/
public HashSet<Prisoner> getPrisonersNotInCells() { public HashMap<UUID, Prisoner> getPrisonersNotInCells() {
return this.nocellPrisoners; return this.nocellPrisoners;
} }
@ -303,11 +303,7 @@ public class Jail {
* @return true if is a prisoner, false if not. * @return true if is a prisoner, false if not.
*/ */
private boolean isPlayerAPrisoner(UUID uuid) { private boolean isPlayerAPrisoner(UUID uuid) {
for(Prisoner p : this.getAllPrisoners()) return this.getAllPrisoners().containsKey(uuid);
if(p.getUUID().equals(uuid))
return true;
return false;
} }
/** /**
@ -317,9 +313,7 @@ public class Jail {
* @return true if is jailed in a cell, false if not. * @return true if is jailed in a cell, false if not.
*/ */
public boolean isJailedInACell(UUID uuid) { public boolean isJailedInACell(UUID uuid) {
for(Prisoner p : nocellPrisoners) if(this.nocellPrisoners.containsKey(uuid)) return false;
if(p.getUUID().equals(uuid))
return false;
for(Cell c : cells.values()) for(Cell c : cells.values())
if(c.getPrisoner() != null) if(c.getPrisoner() != null)
@ -336,7 +330,7 @@ public class Jail {
* @return the prisoner instance, can be null * @return the prisoner instance, can be null
*/ */
public Prisoner getPrisonerByLastKnownName(String name) { public Prisoner getPrisonerByLastKnownName(String name) {
for(Prisoner p : this.getAllPrisoners()) for(Prisoner p : this.getAllPrisoners().values())
if(p.getLastKnownName().equalsIgnoreCase(name)) if(p.getLastKnownName().equalsIgnoreCase(name))
return p; return p;
@ -350,9 +344,12 @@ public class Jail {
* @return the prisoner instance, can be null * @return the prisoner instance, can be null
*/ */
public Prisoner getPrisoner(UUID uuid) { public Prisoner getPrisoner(UUID uuid) {
for(Prisoner p : this.getAllPrisoners()) if(this.nocellPrisoners.containsKey(uuid)) return this.nocellPrisoners.get(uuid);
if(p.getUUID().equals(uuid))
return p; for(Cell c : cells.values())
if(c.hasPrisoner())
if(c.getPrisoner().getUUID().equals(uuid))
return c.getPrisoner();
return null; return null;
} }

View File

@ -1,6 +1,6 @@
package com.graywolf336.jail.command.subcommands; package com.graywolf336.jail.command.subcommands;
import java.util.HashSet; import java.util.Collection;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -41,13 +41,13 @@ public class JailListCommand implements Command {
//No jail was found //No jail was found
sender.sendMessage(" " + jm.getPlugin().getJailIO().getLanguageString(LangString.NOJAIL, args[1])); sender.sendMessage(" " + jm.getPlugin().getJailIO().getLanguageString(LangString.NOJAIL, args[1]));
}else { }else {
HashSet<Prisoner> pris = j.getAllPrisoners(); Collection<Prisoner> pris = j.getAllPrisoners().values();
if(pris.isEmpty()) { if(pris.isEmpty()) {
//If there are no prisoners, then send that message //If there are no prisoners, then send that message
sender.sendMessage(" " + jm.getPlugin().getJailIO().getLanguageString(LangString.NOPRISONERS, j.getName())); sender.sendMessage(" " + jm.getPlugin().getJailIO().getLanguageString(LangString.NOPRISONERS, j.getName()));
}else { }else {
for(Prisoner p : j.getAllPrisoners()) { for(Prisoner p : pris) {
//graywolf663: Being gray's evil twin; CONSOLE (10) //graywolf663: Being gray's evil twin; CONSOLE (10)
//prisoner: reason; jailer (time in minutes) //prisoner: reason; jailer (time in minutes)
sender.sendMessage(ChatColor.BLUE + " " + p.getLastKnownName() + ": " + p.getReason() + "; " + p.getJailer() + " (" + p.getRemainingTimeInMinutes() + " mins)"); sender.sendMessage(ChatColor.BLUE + " " + p.getLastKnownName() + ": " + p.getReason() + "; " + p.getJailer() + " (" + p.getRemainingTimeInMinutes() + " mins)");

View File

@ -41,7 +41,7 @@ public class JailTransferAllCommand implements Command {
jm.getPlugin().debug("Sending the transferring off, jail checks all came clean."); jm.getPlugin().debug("Sending the transferring off, jail checks all came clean.");
Jail old = jm.getJail(args[1]); Jail old = jm.getJail(args[1]);
HashSet<Prisoner> oldPrisoners = new HashSet<Prisoner>(old.getAllPrisoners()); HashSet<Prisoner> oldPrisoners = new HashSet<Prisoner>(old.getAllPrisoners().values());
//Transfer all the prisoners //Transfer all the prisoners
for(Prisoner p : oldPrisoners) { for(Prisoner p : oldPrisoners) {

View File

@ -27,8 +27,9 @@ public class MoveProtectionListener implements Listener {
//Other wise we don't need to deal with it. //Other wise we don't need to deal with it.
if(pl.getConfig().getBoolean(Settings.MOVEPROTECTION.getPath())) { if(pl.getConfig().getBoolean(Settings.MOVEPROTECTION.getPath())) {
//Let's be sure the player we're dealing with is in jail //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()); Prisoner p = j.getPrisoner(event.getPlayer().getUniqueId());
//If the player is being teleported, let's ignore it //If the player is being teleported, let's ignore it

View File

@ -76,7 +76,7 @@ public class PlayerListener implements Listener {
Set<Player> rec = new HashSet<Player>(event.getRecipients()); Set<Player> rec = new HashSet<Player>(event.getRecipients());
for(Jail j : pl.getJailManager().getJails()) for(Jail j : pl.getJailManager().getJails())
for(Prisoner p : j.getAllPrisoners()) for(Prisoner p : j.getAllPrisoners().values())
rec.remove(pl.getServer().getPlayer(p.getUUID())); rec.remove(pl.getServer().getPlayer(p.getUUID()));
event.getRecipients().clear(); event.getRecipients().clear();