1
0
mirror of https://github.com/essentials/Essentials.git synced 2025-08-12 09:35:26 +02:00

Less locks please

This commit is contained in:
snowleo
2012-10-06 16:49:40 +02:00
parent 463c4ff62d
commit fabd88dc25
75 changed files with 805 additions and 1618 deletions

View File

@@ -47,7 +47,8 @@ public class EssentialsTimer implements Runnable
try try
{ {
final IUser user = ess.getUserMap().getUser(player); final IUser user = ess.getUserMap().getUser(player);
if (user == null) { if (user == null)
{
continue; continue;
} }
onlineUsers.add(user); onlineUsers.add(user);
@@ -56,15 +57,9 @@ public class EssentialsTimer implements Runnable
boolean mailDisabled = false; boolean mailDisabled = false;
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
try mailDisabled = settings.getData().getCommands().isDisabled("mail");
{
mailDisabled = settings.getData().getCommands().isDisabled("mail");
}
finally
{
settings.unlock();
}
// New mail notification // New mail notification
if (!mailDisabled && Permissions.MAIL.isAuthorized(user) && !user.gotMailInfo()) if (!mailDisabled && Permissions.MAIL.isAuthorized(user) && !user.gotMailInfo())
{ {

View File

@@ -5,7 +5,6 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IItemDb; import net.ess3.api.IItemDb;
@@ -66,9 +65,7 @@ public class ItemDb implements IItemDb
{ {
final ItemStack stack = get(id.toLowerCase(Locale.ENGLISH)); final ItemStack stack = get(id.toLowerCase(Locale.ENGLISH));
@Cleanup
net.ess3.api.ISettings settings = ess.getSettings(); net.ess3.api.ISettings settings = ess.getSettings();
settings.acquireReadLock();
final int defaultStackSize = settings.getData().getGeneral().getDefaultStacksize(); final int defaultStackSize = settings.getData().getGeneral().getDefaultStacksize();

View File

@@ -4,7 +4,6 @@ import java.io.File;
import java.util.*; import java.util.*;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IJails; import net.ess3.api.IJails;
@@ -55,114 +54,68 @@ public class Jails extends AsyncStorageObjectHolder<net.ess3.settings.Jails> imp
@Override @Override
public Location getJail(final String jailName) throws Exception public Location getJail(final String jailName) throws Exception
{ {
acquireReadLock(); if (getData().getJails() == null || jailName == null
try || !getData().getJails().containsKey(jailName.toLowerCase(Locale.ENGLISH)))
{ {
if (getData().getJails() == null || jailName == null throw new Exception(_("jailNotExist"));
|| !getData().getJails().containsKey(jailName.toLowerCase(Locale.ENGLISH)))
{
throw new Exception(_("jailNotExist"));
}
Location loc = getData().getJails().get(jailName.toLowerCase(Locale.ENGLISH)).getStoredLocation();
if (loc == null || loc.getWorld() == null)
{
throw new Exception(_("jailNotExist"));
}
return loc;
} }
finally Location loc = getData().getJails().get(jailName.toLowerCase(Locale.ENGLISH)).getStoredLocation();
if (loc == null || loc.getWorld() == null)
{ {
unlock(); throw new Exception(_("jailNotExist"));
} }
return loc;
} }
@Override @Override
public Collection<String> getList() throws Exception public Collection<String> getList() throws Exception
{ {
acquireReadLock(); if (getData().getJails() == null)
try
{ {
if (getData().getJails() == null) return Collections.emptyList();
{
return Collections.emptyList();
}
return new ArrayList<String>(getData().getJails().keySet());
}
finally
{
unlock();
} }
return new ArrayList<String>(getData().getJails().keySet());
} }
@Override @Override
public void removeJail(final String jail) throws Exception public void removeJail(final String jail) throws Exception
{ {
acquireWriteLock(); if (getData().getJails() == null)
try
{ {
if (getData().getJails() == null) return;
{
return;
}
getData().getJails().remove(jail.toLowerCase(Locale.ENGLISH));
}
finally
{
unlock();
} }
getData().removeJail(jail.toLowerCase(Locale.ENGLISH));
queueSave();
} }
@Override @Override
public void sendToJail(final IUser user, final String jail) throws Exception public void sendToJail(final IUser user, final String jail) throws Exception
{ {
acquireReadLock(); if (user.isOnline())
try
{ {
if (user.isOnline()) Location loc = getJail(jail);
{ user.getTeleport().now(loc, false, TeleportCause.COMMAND);
Location loc = getJail(jail);
user.getTeleport().now(loc, false, TeleportCause.COMMAND);
}
user.acquireWriteLock();
try
{
user.getData().setJail(jail);
}
finally
{
unlock();
}
}
finally
{
unlock();
} }
user.getData().setJail(jail);
user.queueSave();
} }
@Override @Override
public void setJail(final String jailName, final Location loc) throws Exception public void setJail(final String jailName, final Location loc) throws Exception
{ {
acquireWriteLock(); getData().addJail(jailName.toLowerCase(Locale.ENGLISH), loc);
try queueSave();
{
getData().addJail(jailName.toLowerCase(Locale.ENGLISH), loc);
}
finally
{
unlock();
}
} }
@Override @Override
public void finishRead() public void finishRead()
{ {
} }
@Override @Override
public void finishWrite() public void finishWrite()
{ {
} }
@Override @Override
@@ -177,9 +130,7 @@ public class Jails extends AsyncStorageObjectHolder<net.ess3.settings.Jails> imp
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockBreak(final BlockBreakEvent event) public void onBlockBreak(final BlockBreakEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
if (user.getData().isJailed()) if (user.getData().isJailed())
{ {
event.setCancelled(true); event.setCancelled(true);
@@ -189,9 +140,7 @@ public class Jails extends AsyncStorageObjectHolder<net.ess3.settings.Jails> imp
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockPlace(final BlockPlaceEvent event) public void onBlockPlace(final BlockPlaceEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
if (user.getData().isJailed()) if (user.getData().isJailed())
{ {
event.setCancelled(true); event.setCancelled(true);
@@ -201,9 +150,7 @@ public class Jails extends AsyncStorageObjectHolder<net.ess3.settings.Jails> imp
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockDamage(final BlockDamageEvent event) public void onBlockDamage(final BlockDamageEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
if (user.getData().isJailed()) if (user.getData().isJailed())
{ {
event.setCancelled(true); event.setCancelled(true);
@@ -217,9 +164,7 @@ public class Jails extends AsyncStorageObjectHolder<net.ess3.settings.Jails> imp
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerInteract(final PlayerInteractEvent event) public void onPlayerInteract(final PlayerInteractEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
if (user.getData().isJailed()) if (user.getData().isJailed())
{ {
event.setCancelled(true); event.setCancelled(true);
@@ -229,9 +174,7 @@ public class Jails extends AsyncStorageObjectHolder<net.ess3.settings.Jails> imp
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerRespawn(final PlayerRespawnEvent event) public void onPlayerRespawn(final PlayerRespawnEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
if (!user.getData().isJailed() || user.getData().getJail() == null || user.getData().getJail().isEmpty()) if (!user.getData().isJailed() || user.getData().getJail() == null || user.getData().getJail().isEmpty())
{ {
return; return;
@@ -257,9 +200,7 @@ public class Jails extends AsyncStorageObjectHolder<net.ess3.settings.Jails> imp
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onPlayerTeleport(final PlayerTeleportEvent event) public void onPlayerTeleport(final PlayerTeleportEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
if (!user.getData().isJailed() || user.getData().getJail() == null || user.getData().getJail().isEmpty()) if (!user.getData().isJailed() || user.getData().getJail() == null || user.getData().getJail().isEmpty())
{ {
return; return;
@@ -286,9 +227,7 @@ public class Jails extends AsyncStorageObjectHolder<net.ess3.settings.Jails> imp
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerJoin(final PlayerJoinEvent event) public void onPlayerJoin(final PlayerJoinEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
if (!user.getData().isJailed() || user.getData().getJail() == null || user.getData().getJail().isEmpty()) if (!user.getData().isJailed() || user.getData().getJail() == null || user.getData().getJail().isEmpty())
{ {
return; return;

View File

@@ -32,25 +32,17 @@ public class Kits extends AsyncStorageObjectHolder<net.ess3.settings.Kits> imple
@Override @Override
public Kit getKit(String kitName) throws Exception public Kit getKit(String kitName) throws Exception
{ {
acquireReadLock(); if (getData().getKits() == null || kitName == null
try || !getData().getKits().containsKey(kitName.toLowerCase(Locale.ENGLISH)))
{ {
if (getData().getKits() == null || kitName == null throw new Exception(_("kitError2"));
|| !getData().getKits().containsKey(kitName.toLowerCase(Locale.ENGLISH)))
{
throw new Exception(_("kitError2"));
}
final Kit kit = getData().getKits().get(kitName.toLowerCase(Locale.ENGLISH));
if (kit == null)
{
throw new Exception(_("kitError2"));
}
return kit;
} }
finally final Kit kit = getData().getKits().get(kitName.toLowerCase(Locale.ENGLISH));
if (kit == null)
{ {
unlock(); throw new Exception(_("kitError2"));
} }
return kit;
} }
@Override @Override
@@ -63,26 +55,18 @@ public class Kits extends AsyncStorageObjectHolder<net.ess3.settings.Kits> imple
@Override @Override
public void sendKit(IUser user, Kit kit) throws Exception public void sendKit(IUser user, Kit kit) throws Exception
{ {
final List<ItemStack> itemList = kit.getItems(); final List<ItemStack> itemList = kit.getItems();
user.giveItems(itemList, true); user.giveItems(itemList, true);
} }
@Override @Override
public Collection<String> getList() throws Exception public Collection<String> getList() throws Exception
{ {
acquireReadLock(); if (getData().getKits() == null)
try
{ {
if (getData().getKits() == null) return Collections.emptyList();
{
return Collections.emptyList();
}
return new ArrayList<String>(getData().getKits().keySet());
}
finally
{
unlock();
} }
return new ArrayList<String>(getData().getKits().keySet());
} }
@Override @Override
@@ -94,13 +78,11 @@ public class Kits extends AsyncStorageObjectHolder<net.ess3.settings.Kits> imple
@Override @Override
public void finishRead() public void finishRead()
{ {
} }
@Override @Override
public void finishWrite() public void finishWrite()
{ {
} }
@Override @Override

View File

@@ -20,9 +20,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
public class Teleport implements Runnable, ITeleport public class Teleport implements Runnable, ITeleport
{ {
private static final double MOVE_CONSTANT = 0.3; private static final double MOVE_CONSTANT = 0.3;
private static class Target private static class Target
{ {
private final Location location; private final Location location;
@@ -269,31 +269,15 @@ public class Teleport implements Runnable, ITeleport
@Override @Override
public void back(Trade chargeFor) throws Exception public void back(Trade chargeFor) throws Exception
{ {
user.acquireReadLock(); teleport(new Target(user.getData().getLastLocation().getStoredLocation()), chargeFor, TeleportCause.COMMAND);
try
{
teleport(new Target(user.getData().getLastLocation().getStoredLocation()), chargeFor, TeleportCause.COMMAND);
}
finally
{
user.unlock();
}
} }
@Override @Override
public void back() throws Exception public void back() throws Exception
{ {
user.acquireReadLock(); now(new Target(user.getData().getLastLocation().getStoredLocation()), TeleportCause.COMMAND);
try
{
now(new Target(user.getData().getLastLocation().getStoredLocation()), TeleportCause.COMMAND);
}
finally
{
user.unlock();
}
} }
@Override @Override
public void home(Location loc, Trade chargeFor) throws Exception public void home(Location loc, Trade chargeFor) throws Exception
{ {

View File

@@ -37,15 +37,7 @@ public class Warps extends StorageObjectMap<IWarp> implements IWarps
{ {
continue; continue;
} }
warp.acquireReadLock(); names.add(warp.getData().getName());
try
{
names.add(warp.getData().getName());
}
finally
{
warp.unlock();
}
} }
Collections.sort(names, String.CASE_INSENSITIVE_ORDER); Collections.sort(names, String.CASE_INSENSITIVE_ORDER);
return names; return names;
@@ -59,15 +51,7 @@ public class Warps extends StorageObjectMap<IWarp> implements IWarps
{ {
throw new WarpNotFoundException(_("warpNotExist")); throw new WarpNotFoundException(_("warpNotExist"));
} }
warp.acquireReadLock(); return warp.getData().getLocation().getStoredLocation();
try
{
return warp.getData().getLocation().getStoredLocation();
}
finally
{
warp.unlock();
}
} }
@Override @Override
@@ -83,15 +67,8 @@ public class Warps extends StorageObjectMap<IWarp> implements IWarps
{ {
warp = new WarpHolder(name, ess); warp = new WarpHolder(name, ess);
} }
warp.acquireWriteLock(); warp.getData().setLocation(loc);
try warp.queueSave();
{
warp.getData().setLocation(loc);
}
finally
{
warp.unlock();
}
} }
@Override @Override

View File

@@ -128,7 +128,7 @@ public interface IUser extends OfflinePlayer, CommandSender, IStorageObjectHolde
/** /**
* Since the Player object should not be stored for a long time, this method should be called again with a null * Since the Player object should not be stored for a long time, this method should be called again with a null
* value or the close() method should be called. * value.
* *
* @param player * @param player
*/ */

View File

@@ -5,7 +5,6 @@ import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level; import java.util.logging.Level;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IBackup; import net.ess3.api.IBackup;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
@@ -37,9 +36,7 @@ public class Backup implements Runnable, IBackup
{ {
if (running.compareAndSet(false, true)) if (running.compareAndSet(false, true))
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
final long interval = settings.getData().getGeneral().getBackup().getInterval() * 1200; // minutes -> ticks final long interval = settings.getData().getGeneral().getBackup().getInterval() * 1200; // minutes -> ticks
if (interval < 1200) if (interval < 1200)
{ {
@@ -57,9 +54,7 @@ public class Backup implements Runnable, IBackup
{ {
return; return;
} }
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
final String command = settings.getData().getGeneral().getBackup().getCommand(); final String command = settings.getData().getGeneral().getBackup().getCommand();
if (command == null || command.isEmpty()) if (command == null || command.isEmpty())
{ {

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import net.ess3.Console; import net.ess3.Console;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IUser; import net.ess3.api.IUser;
@@ -19,7 +18,6 @@ public class Commandban extends EssentialsCommand
{ {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
@Cleanup
final IUser user = ess.getUserMap().matchUser(args[0], false, true); final IUser user = ess.getUserMap().matchUser(args[0], false, true);
if (!user.isOnline()) if (!user.isOnline())
{ {
@@ -38,7 +36,6 @@ public class Commandban extends EssentialsCommand
} }
} }
user.acquireWriteLock();
final String senderName = sender instanceof Player ? ((Player)sender).getDisplayName() : Console.NAME; final String senderName = sender instanceof Player ? ((Player)sender).getDisplayName() : Console.NAME;
String banReason; String banReason;
user.getData().setBan(new Ban()); user.getData().setBan(new Ban());
@@ -55,6 +52,7 @@ public class Commandban extends EssentialsCommand
} }
user.setBanned(true); user.setBanned(true);
user.queueSave();
user.getPlayer().kickPlayer(banReason); user.getPlayer().kickPlayer(banReason);
for (Player player : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@@ -16,9 +15,7 @@ public class Commandbanip extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
@Cleanup
final IUser player = ess.getUserMap().getUser(args[0]); final IUser player = ess.getUserMap().getUser(args[0]);
player.acquireReadLock();
if (player == null) if (player == null)
{ {

View File

@@ -1,7 +1,6 @@
package net.ess3.commands; package net.ess3.commands;
import java.util.Locale; import java.util.Locale;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
@@ -18,7 +17,6 @@ public class Commanddelhome extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
@Cleanup
IUser user = sender instanceof IUser ? (IUser)sender : null; IUser user = sender instanceof IUser ? (IUser)sender : null;
String name; String name;
String[] expandedArg; String[] expandedArg;
@@ -51,8 +49,8 @@ public class Commanddelhome extends EssentialsCommand
/* /*
* if (name.equalsIgnoreCase("bed")) { throw new Exception("You cannot remove the vanilla home point"); } * if (name.equalsIgnoreCase("bed")) { throw new Exception("You cannot remove the vanilla home point"); }
*/ */
user.acquireWriteLock();
user.getData().removeHome(name.toLowerCase(Locale.ENGLISH)); user.getData().removeHome(name.toLowerCase(Locale.ENGLISH));
user.queueSave();
sender.sendMessage(_("deleteHome", name)); sender.sendMessage(_("deleteHome", name));
} }
} }

View File

@@ -1,7 +1,6 @@
package net.ess3.commands; package net.ess3.commands;
import java.util.Locale; import java.util.Locale;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
@@ -45,13 +44,11 @@ public class Commandeco extends EssentialsCommand
if (player.canAfford(amount, false)) if (player.canAfford(amount, false))
{ {
player.takeMoney(amount); player.takeMoney(amount);
} }
break; break;
case RESET: case RESET:
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
player.setMoney(amount == 0 ? settings.getData().getEconomy().getStartingBalance() : amount); player.setMoney(amount == 0 ? settings.getData().getEconomy().getStartingBalance() : amount);
break; break;
} }
@@ -77,9 +74,7 @@ public class Commandeco extends EssentialsCommand
break; break;
case RESET: case RESET:
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
player.setMoney(amount == 0 ? settings.getData().getEconomy().getStartingBalance() : amount); player.setMoney(amount == 0 ? settings.getData().getEconomy().getStartingBalance() : amount);
break; break;
} }
@@ -103,8 +98,7 @@ public class Commandeco extends EssentialsCommand
break; break;
case RESET: case RESET:
@Cleanup ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
player.setMoney(amount == 0 ? settings.getData().getEconomy().getStartingBalance() : amount); player.setMoney(amount == 0 ? settings.getData().getEconomy().getStartingBalance() : amount);
break; break;
} }

View File

@@ -15,7 +15,6 @@ public class Commandignore extends EssentialsCommand
} }
IUser player = ess.getUserMap().matchUser(args[0], false, false); IUser player = ess.getUserMap().matchUser(args[0], false, false);
user.acquireWriteLock();
if (user.isIgnoringPlayer(player)) if (user.isIgnoringPlayer(player))
{ {
user.setIgnoredPlayer(player, false); user.setIgnoredPlayer(player, false);
@@ -26,5 +25,6 @@ public class Commandignore extends EssentialsCommand
user.setIgnoredPlayer(player, true); user.setIgnoredPlayer(player, true);
user.sendMessage(_("ignorePlayer", player.getName())); user.sendMessage(_("ignorePlayer", player.getName()));
} }
user.queueSave();
} }
} }

View File

@@ -23,17 +23,18 @@ public class Commandinvsee extends EssentialsCommand
{ {
invUser = ess.getUserMap().matchUser(args[0], false, false); invUser = ess.getUserMap().matchUser(args[0], false, false);
} }
user.acquireWriteLock();
if (invUser == user && user.getData().getInventory() != null) if (invUser == user && user.getData().getInventory() != null)
{ {
invUser.getPlayer().getInventory().setContents(user.getData().getInventory().getBukkitInventory()); invUser.getPlayer().getInventory().setContents(user.getData().getInventory().getBukkitInventory());
user.getData().setInventory(null); user.getData().setInventory(null);
user.queueSave();
user.sendMessage(_("invRestored")); user.sendMessage(_("invRestored"));
throw new NoChargeException(); throw new NoChargeException();
} }
if (user.getData().getInventory() == null) if (user.getData().getInventory() == null)
{ {
user.getData().setInventory(new Inventory(user.getPlayer().getInventory().getContents())); user.getData().setInventory(new Inventory(user.getPlayer().getInventory().getContents()));
user.queueSave();
} }
ItemStack[] invUserStack = invUser.getPlayer().getInventory().getContents(); ItemStack[] invUserStack = invUser.getPlayer().getInventory().getContents();
final int userStackLength = user.getPlayer().getInventory().getContents().length; final int userStackLength = user.getPlayer().getInventory().getContents().length;

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
@@ -51,9 +50,7 @@ public class Commandlightning extends EssentialsCommand
{ {
matchPlayer.getPlayer().damage(power, strike); matchPlayer.getPlayer().damage(power, strike);
} }
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (settings.getData().getCommands().getLightning().isWarnPlayer()) if (settings.getData().getCommands().getLightning().isWarnPlayer())
{ {
matchPlayer.sendMessage(_("lightningSmited")); matchPlayer.sendMessage(_("lightningSmited"));

View File

@@ -6,10 +6,10 @@ import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
import net.ess3.utils.FormatUtil; import net.ess3.utils.FormatUtil;
import net.ess3.utils.Util;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public class Commandlist extends EssentialsCommand public class Commandlist extends EssentialsCommand
{ {
@Override @Override
@@ -40,17 +40,9 @@ public class Commandlist extends EssentialsCommand
} }
sender.sendMessage(online); sender.sendMessage(online);
boolean sortListByGroups = false;
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
try boolean sortListByGroups = sortListByGroups = settings.getData().getCommands().getList().isSortByGroups();
{
sortListByGroups = settings.getData().getCommands().getList().isSortByGroups();
}
finally
{
settings.unlock();
}
if (sortListByGroups) if (sortListByGroups)
{ {
@@ -76,7 +68,7 @@ public class Commandlist extends EssentialsCommand
for (String group : groups) for (String group : groups)
{ {
final StringBuilder groupString = new StringBuilder(); final StringBuilder groupString = new StringBuilder();
groupString.append(_("listGroupTag",FormatUtil.replaceFormat(group))); groupString.append(_("listGroupTag", FormatUtil.replaceFormat(group)));
final List<IUser> users = sort.get(group); final List<IUser> users = sort.get(group);
Collections.sort(users); Collections.sort(users);
boolean first = true; boolean first = true;
@@ -90,18 +82,12 @@ public class Commandlist extends EssentialsCommand
{ {
first = false; first = false;
} }
user.acquireReadLock();
try if (user.getData().isAfk())
{ {
if (user.getData().isAfk()) groupString.append(_("listAfkTag"));
{
groupString.append(_("listAfkTag"));
}
}
finally
{
user.unlock();
} }
if (user.isHidden()) if (user.isHidden())
{ {
groupString.append(_("listHiddenTag")); groupString.append(_("listHiddenTag"));
@@ -140,18 +126,12 @@ public class Commandlist extends EssentialsCommand
{ {
first = false; first = false;
} }
user.acquireReadLock();
try if (user.getData().isAfk())
{ {
if (user.getData().isAfk()) onlineUsers.append(_("listAfkTag"));
{
onlineUsers.append(_("listAfkTag"));
}
}
finally
{
user.unlock();
} }
if (user.isHidden()) if (user.isHidden())
{ {
onlineUsers.append(_("listHiddenTag")); onlineUsers.append(_("listHiddenTag"));

View File

@@ -62,8 +62,8 @@ public class Commandmail extends EssentialsCommand
} }
if (args.length >= 1 && "clear".equalsIgnoreCase(args[0])) if (args.length >= 1 && "clear".equalsIgnoreCase(args[0]))
{ {
user.acquireWriteLock();
user.getData().clearMails(); user.getData().clearMails();
user.queueSave();
user.sendMessage(_("mailCleared")); user.sendMessage(_("mailCleared"));
return; return;
} }

View File

@@ -18,19 +18,11 @@ public class Commandmore extends EssentialsCommand
{ {
throw new Exception(_("cantSpawnItem", "Air")); throw new Exception(_("cantSpawnItem", "Air"));
} }
int defaultStackSize = 0;
int oversizedStackSize = 0;
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
try int defaultStackSize = settings.getData().getGeneral().getDefaultStacksize();
{ int oversizedStackSize = settings.getData().getGeneral().getOversizedStacksize();
defaultStackSize = settings.getData().getGeneral().getDefaultStacksize();
oversizedStackSize = settings.getData().getGeneral().getOversizedStacksize();
}
finally
{
settings.unlock();
}
if (stack.getAmount() >= (Permissions.OVERSIZEDSTACKS.isAuthorized(user) if (stack.getAmount() >= (Permissions.OVERSIZEDSTACKS.isAuthorized(user)
? oversizedStackSize ? oversizedStackSize
: defaultStackSize > 0 ? defaultStackSize : stack.getMaxStackSize())) : defaultStackSize > 0 ? defaultStackSize : stack.getMaxStackSize()))

View File

@@ -1,15 +1,12 @@
package net.ess3.commands; package net.ess3.commands;
import java.util.List;
import java.util.Set; import java.util.Set;
import lombok.Cleanup;
import net.ess3.Console; import net.ess3.Console;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IReplyTo; import net.ess3.api.IReplyTo;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
import net.ess3.utils.FormatUtil; import net.ess3.utils.FormatUtil;
import net.ess3.utils.Util;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@@ -27,9 +24,7 @@ public class Commandmsg extends EssentialsCommand
String message = getFinalArg(args, 1); String message = getFinalArg(args, 1);
if (isUser(sender)) if (isUser(sender))
{ {
@Cleanup IUser user = getUser(sender);;
IUser user = getUser(sender);
user.acquireReadLock();
if (user.getData().isMuted()) if (user.getData().isMuted())
{ {
throw new Exception(_("voiceSilenced")); throw new Exception(_("voiceSilenced"));

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
@@ -8,6 +7,7 @@ import net.ess3.user.UserData.TimestampType;
import net.ess3.utils.DateUtil; import net.ess3.utils.DateUtil;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
public class Commandmute extends EssentialsCommand public class Commandmute extends EssentialsCommand
{ {
@Override @Override
@@ -18,9 +18,7 @@ public class Commandmute extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
@Cleanup
final IUser player = ess.getUserMap().matchUser(args[0], false, true); final IUser player = ess.getUserMap().matchUser(args[0], false, true);
player.acquireReadLock();
if (!player.getData().isMuted() && Permissions.MUTE_EXEMPT.isAuthorized(player)) if (!player.getData().isMuted() && Permissions.MUTE_EXEMPT.isAuthorized(player))
{ {
throw new Exception(_("muteExempt")); throw new Exception(_("muteExempt"));

View File

@@ -1,13 +1,11 @@
package net.ess3.commands; package net.ess3.commands;
import java.util.Locale; import java.util.Locale;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
import net.ess3.utils.FormatUtil; import net.ess3.utils.FormatUtil;
import net.ess3.utils.Util;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -22,9 +20,7 @@ public class Commandnick extends EssentialsCommand
{ {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (!settings.getData().getChat().getChangeDisplayname()) if (!settings.getData().getChat().getChangeDisplayname())
{ {
throw new Exception(_("nickDisplayName")); throw new Exception(_("nickDisplayName"));
@@ -49,9 +45,7 @@ public class Commandnick extends EssentialsCommand
{ {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (!settings.getData().getChat().getChangeDisplayname()) if (!settings.getData().getChat().getChangeDisplayname())
{ {
throw new Exception(_("nickDisplayName")); throw new Exception(_("nickDisplayName"));

View File

@@ -21,8 +21,8 @@ public class Commandpowertool extends EssentialsCommand
// check to see if this is a clear all command // check to see if this is a clear all command
if (command != null && command.equalsIgnoreCase("d:")) if (command != null && command.equalsIgnoreCase("d:"))
{ {
user.acquireWriteLock();
user.getData().clearAllPowertools(); user.getData().clearAllPowertools();
user.queueSave();
user.sendMessage(_("powerToolClearAll")); user.sendMessage(_("powerToolClearAll"));
return; return;
} }
@@ -34,7 +34,6 @@ public class Commandpowertool extends EssentialsCommand
} }
final String itemName = itemStack.getType().toString().toLowerCase(Locale.ENGLISH).replaceAll("_", " "); final String itemName = itemStack.getType().toString().toLowerCase(Locale.ENGLISH).replaceAll("_", " ");
user.acquireReadLock();
List<String> powertools = user.getData().getPowertool(itemStack.getType()); List<String> powertools = user.getData().getPowertool(itemStack.getType());
if (command != null && !command.isEmpty()) if (command != null && !command.isEmpty())
{ {
@@ -57,7 +56,8 @@ public class Commandpowertool extends EssentialsCommand
{ {
throw new Exception(_("powerToolNoSuchCommandAssigned", command, itemName)); throw new Exception(_("powerToolNoSuchCommandAssigned", command, itemName));
} }
powertools = new ArrayList<String>(powertools);
powertools.remove(command); powertools.remove(command);
user.sendMessage(_("powerToolRemove", command, itemName)); user.sendMessage(_("powerToolRemove", command, itemName));
} }
@@ -74,11 +74,7 @@ public class Commandpowertool extends EssentialsCommand
{ {
throw new Exception(_("powerToolAlreadySet", command, itemName)); throw new Exception(_("powerToolAlreadySet", command, itemName));
} }
} powertools = new ArrayList<String>(powertools);
else if (powertools != null && !powertools.isEmpty())
{
// Replace all commands with this one
powertools.clear();
} }
else else
{ {
@@ -91,10 +87,7 @@ public class Commandpowertool extends EssentialsCommand
} }
else else
{ {
if (powertools != null) powertools = new ArrayList<String>();
{
powertools.clear();
}
user.sendMessage(_("powerToolRemoveAll", itemName)); user.sendMessage(_("powerToolRemoveAll", itemName));
} }
@@ -103,7 +96,7 @@ public class Commandpowertool extends EssentialsCommand
user.getData().setPowerToolsEnabled(true); user.getData().setPowerToolsEnabled(true);
user.sendMessage(_("powerToolsEnabled")); user.sendMessage(_("powerToolsEnabled"));
} }
user.acquireWriteLock();
user.getData().setPowertool(itemStack.getType(), powertools); user.getData().setPowertool(itemStack.getType(), powertools);
user.queueSave();
} }
} }

View File

@@ -14,8 +14,8 @@ public class Commandpowertooltoggle extends EssentialsCommand
user.sendMessage(_("noPowerTools")); user.sendMessage(_("noPowerTools"));
return; return;
} }
user.acquireWriteLock();
user.getData().setPowerToolsEnabled(!user.getData().isPowerToolsEnabled()); user.getData().setPowerToolsEnabled(!user.getData().isPowerToolsEnabled());
user.queueSave();
user.sendMessage(user.getData().isPowerToolsEnabled() user.sendMessage(user.getData().isPowerToolsEnabled()
? _("powerToolsEnabled") ? _("powerToolsEnabled")
: _("powerToolsDisabled")); : _("powerToolsDisabled"));

View File

@@ -1,12 +1,10 @@
package net.ess3.commands; package net.ess3.commands;
import java.util.Locale; import java.util.Locale;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.utils.FormatUtil; import net.ess3.utils.FormatUtil;
import net.ess3.utils.Util;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -20,7 +18,6 @@ public class Commandrealname extends EssentialsCommand
{ {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
final String whois = args[0].toLowerCase(Locale.ENGLISH); final String whois = args[0].toLowerCase(Locale.ENGLISH);
for (Player onlinePlayer : server.getOnlinePlayers()) for (Player onlinePlayer : server.getOnlinePlayers())
@@ -32,7 +29,6 @@ public class Commandrealname extends EssentialsCommand
} }
u.setDisplayNick(); u.setDisplayNick();
final String displayName = FormatUtil.stripFormat(u.getPlayer().getDisplayName()).toLowerCase(Locale.ENGLISH); final String displayName = FormatUtil.stripFormat(u.getPlayer().getDisplayName()).toLowerCase(Locale.ENGLISH);
settings.acquireReadLock();
if (!whois.equals(displayName) if (!whois.equals(displayName)
&& !displayName.equals(FormatUtil.stripFormat(settings.getData().getChat().getNicknamePrefix()) + whois) && !displayName.equals(FormatUtil.stripFormat(settings.getData().getChat().getNicknamePrefix()) + whois)
&& !whois.equalsIgnoreCase(u.getName())) && !whois.equalsIgnoreCase(u.getName()))

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
@@ -36,13 +35,11 @@ public class Commandseen extends EssentialsCommand
} }
catch (PlayerNotFoundException e) catch (PlayerNotFoundException e)
{ {
@Cleanup
IUser u = ess.getUserMap().getUser(args[0]); IUser u = ess.getUserMap().getUser(args[0]);
if (u == null) if (u == null)
{ {
throw new Exception(_("playerNotFound")); throw new Exception(_("playerNotFound"));
} }
u.acquireReadLock();
sender.sendMessage(_("seenOffline", u.getPlayer().getDisplayName(), DateUtil.formatDateDiff(u.getTimestamp(TimestampType.LOGOUT)))); sender.sendMessage(_("seenOffline", u.getPlayer().getDisplayName(), DateUtil.formatDateDiff(u.getTimestamp(TimestampType.LOGOUT))));
if (u.isBanned()) if (u.isBanned())
{ {

View File

@@ -1,8 +1,6 @@
package net.ess3.commands; package net.ess3.commands;
import java.util.HashMap;
import java.util.Locale; import java.util.Locale;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
@@ -33,8 +31,8 @@ public class Commandsethome extends EssentialsCommand
if ((user.getHomes().size() < ess.getRanks().getHomeLimit(user)) if ((user.getHomes().size() < ess.getRanks().getHomeLimit(user))
|| (user.getHomes().contains(args[0].toLowerCase(Locale.ENGLISH)))) || (user.getHomes().contains(args[0].toLowerCase(Locale.ENGLISH))))
{ {
user.acquireWriteLock();
user.getData().addHome(args[0].toLowerCase(Locale.ENGLISH), user.getPlayer().getLocation()); user.getData().addHome(args[0].toLowerCase(Locale.ENGLISH), user.getPlayer().getLocation());
user.queueSave();
} }
else else
{ {
@@ -51,7 +49,6 @@ public class Commandsethome extends EssentialsCommand
{ {
if (Permissions.SETHOME_OTHERS.isAuthorized(user)) if (Permissions.SETHOME_OTHERS.isAuthorized(user))
{ {
@Cleanup
IUser usersHome = ess.getUserMap().getUser(ess.getServer().getPlayer(args[0])); IUser usersHome = ess.getUserMap().getUser(ess.getServer().getPlayer(args[0]));
if (usersHome == null) if (usersHome == null)
{ {
@@ -67,15 +64,15 @@ public class Commandsethome extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
usersHome.acquireWriteLock();
usersHome.getData().addHome(name, user.getPlayer().getLocation()); usersHome.getData().addHome(name, user.getPlayer().getLocation());
usersHome.queueSave();
} }
} }
} }
else else
{ {
user.acquireWriteLock();
user.getData().addHome("home", user.getPlayer().getLocation()); user.getData().addHome("home", user.getPlayer().getLocation());
user.queueSave();
} }
user.sendMessage(_("homeSet", user.getPlayer().getLocation().getWorld().getName(), user.getPlayer().getLocation().getBlockX(), user.getPlayer().getLocation().getBlockY(), user.getPlayer().getLocation().getBlockZ())); user.sendMessage(_("homeSet", user.getPlayer().getLocation().getWorld().getName(), user.getPlayer().getLocation().getBlockX(), user.getPlayer().getLocation().getBlockY(), user.getPlayer().getLocation().getBlockZ()));

View File

@@ -136,17 +136,11 @@ public class Commandspawnmob extends EssentialsCommand
if (args.length >= 2) if (args.length >= 2)
{ {
int mobCount = Integer.parseInt(args[1]); int mobCount = Integer.parseInt(args[1]);
int serverLimit = 1;
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
try int serverLimit = settings.getData().getCommands().getSpawnmob().getLimit();
{
serverLimit = settings.getData().getCommands().getSpawnmob().getLimit();
}
finally
{
settings.unlock();
}
if (mobCount > serverLimit) if (mobCount > serverLimit)
{ {
mobCount = serverLimit; mobCount = serverLimit;

View File

@@ -40,11 +40,11 @@ public class Commandtempban extends EssentialsCommand
final long banTimestamp = DateUtil.parseDateDiff(time, true); final long banTimestamp = DateUtil.parseDateDiff(time, true);
final String banReason = _("tempBanned", DateUtil.formatDateDiff(banTimestamp)); final String banReason = _("tempBanned", DateUtil.formatDateDiff(banTimestamp));
user.acquireWriteLock();
user.getData().setBan(new Ban()); user.getData().setBan(new Ban());
user.getData().getBan().setReason(banReason); user.getData().getBan().setReason(banReason);
user.getData().getBan().setTimeout(banTimestamp); user.getData().getBan().setTimeout(banTimestamp);
user.setBanned(true); user.setBanned(true);
user.queueSave();
user.getPlayer().kickPlayer(banReason); user.getPlayer().kickPlayer(banReason);
final String senderName = sender instanceof Player ? ((Player)sender).getDisplayName() : Console.NAME; final String senderName = sender instanceof Player ? ((Player)sender).getDisplayName() : Console.NAME;

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
@@ -19,9 +18,7 @@ public class Commandtogglejail extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
@Cleanup
final IUser player = ess.getUserMap().matchUser(args[0], false, true); final IUser player = ess.getUserMap().matchUser(args[0], false, true);
player.acquireReadLock();
if (args.length >= 2 && !player.getData().isJailed()) if (args.length >= 2 && !player.getData().isJailed())
{ {
@@ -50,7 +47,6 @@ public class Commandtogglejail extends EssentialsCommand
// Check if jail exists // Check if jail exists
ess.getJails().getJail(args[1]); ess.getJails().getJail(args[1]);
} }
player.acquireWriteLock();
player.getData().setJailed(true); player.getData().setJailed(true);
player.sendMessage(_("userJailed")); player.sendMessage(_("userJailed"));
player.getData().setJail(args[1]); player.getData().setJail(args[1]);
@@ -61,6 +57,7 @@ public class Commandtogglejail extends EssentialsCommand
timeDiff = DateUtil.parseDateDiff(time, true); timeDiff = DateUtil.parseDateDiff(time, true);
player.setTimestamp(TimestampType.JAIL, timeDiff); player.setTimestamp(TimestampType.JAIL, timeDiff);
} }
player.queueSave();
sender.sendMessage((timeDiff > 0 sender.sendMessage((timeDiff > 0
? _("playerJailedFor", player.getName(), DateUtil.formatDateDiff(timeDiff)) ? _("playerJailedFor", player.getName(), DateUtil.formatDateDiff(timeDiff))
: _("playerJailed", player.getName()))); : _("playerJailed", player.getName())));
@@ -77,8 +74,8 @@ public class Commandtogglejail extends EssentialsCommand
{ {
final String time = getFinalArg(args, 2); final String time = getFinalArg(args, 2);
final long timeDiff = DateUtil.parseDateDiff(time, true); final long timeDiff = DateUtil.parseDateDiff(time, true);
player.acquireWriteLock();
player.setTimestamp(TimestampType.JAIL, timeDiff); player.setTimestamp(TimestampType.JAIL, timeDiff);
player.queueSave();
sender.sendMessage(_("jailSentenceExtended", DateUtil.formatDateDiff(timeDiff))); sender.sendMessage(_("jailSentenceExtended", DateUtil.formatDateDiff(timeDiff)));
return; return;
} }
@@ -89,7 +86,6 @@ public class Commandtogglejail extends EssentialsCommand
{ {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
player.acquireWriteLock();
player.getData().setJailed(false); player.getData().setJailed(false);
player.setTimestamp(TimestampType.JAIL, 0); player.setTimestamp(TimestampType.JAIL, 0);
player.sendMessage(_("jailReleasedPlayerNotify")); player.sendMessage(_("jailReleasedPlayerNotify"));
@@ -98,6 +94,7 @@ public class Commandtogglejail extends EssentialsCommand
{ {
player.getTeleport().back(); player.getTeleport().back();
} }
player.queueSave();
sender.sendMessage(_("jailReleased", player.getName())); sender.sendMessage(_("jailReleased", player.getName()));
} }
} }

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import net.ess3.Console; import net.ess3.Console;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
@@ -16,18 +15,14 @@ public class Commandtp extends EssentialsCommand
@Override @Override
public void run(final IUser user, final String commandLabel, final String[] args) throws Exception public void run(final IUser user, final String commandLabel, final String[] args) throws Exception
{ {
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
switch (args.length) switch (args.length)
{ {
case 0: case 0:
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
case 1: case 1:
@Cleanup
final IUser player = ess.getUserMap().matchUser(args[0], false, false); final IUser player = ess.getUserMap().matchUser(args[0], false, false);
player.acquireReadLock();
if (!player.getData().isTeleportEnabled()) if (!player.getData().isTeleportEnabled())
{ {
throw new Exception(_("teleportDisabled", player.getPlayer().getDisplayName())); throw new Exception(_("teleportDisabled", player.getPlayer().getDisplayName()));
@@ -49,12 +44,10 @@ public class Commandtp extends EssentialsCommand
throw new Exception(_("needTpohere")); throw new Exception(_("needTpohere"));
} }
user.sendMessage(_("teleporting")); user.sendMessage(_("teleporting"));
@Cleanup
final IUser target = ess.getUserMap().matchUser(args[0], false, false); final IUser target = ess.getUserMap().matchUser(args[0], false, false);
@Cleanup
final IUser toPlayer = ess.getUserMap().matchUser(args[1], false, false); final IUser toPlayer = ess.getUserMap().matchUser(args[1], false, false);
target.acquireReadLock();
toPlayer.acquireReadLock();
if (!target.getData().isTeleportEnabled()) if (!target.getData().isTeleportEnabled())
{ {

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
@@ -17,16 +16,14 @@ public class Commandtpa extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
@Cleanup
IUser player = ess.getUserMap().matchUser(args[0], false, false); IUser player = ess.getUserMap().matchUser(args[0], false, false);
player.acquireReadLock();
if (!player.getData().isTeleportEnabled()) if (!player.getData().isTeleportEnabled())
{ {
throw new Exception(_("teleportDisabled", player.getPlayer().getDisplayName())); throw new Exception(_("teleportDisabled", player.getPlayer().getDisplayName()));
} }
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (user.getPlayer().getWorld() != player.getPlayer().getWorld() && ess.getSettings().getData().getGeneral().isWorldTeleportPermissions() if (user.getPlayer().getWorld() != player.getPlayer().getWorld() && ess.getSettings().getData().getGeneral().isWorldTeleportPermissions()
&& !Permissions.WORLD.isAuthorized(user, user.getPlayer().getWorld().getName())) && !Permissions.WORLD.isAuthorized(user, user.getPlayer().getWorld().getName()))
{ {

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
@@ -33,9 +32,8 @@ public class Commandtpaall extends EssentialsCommand
sender.sendMessage(_("teleportAAll")); sender.sendMessage(_("teleportAAll"));
for (Player onlinePlayer : server.getOnlinePlayers()) for (Player onlinePlayer : server.getOnlinePlayers())
{ {
@Cleanup
final IUser player = ess.getUserMap().getUser(onlinePlayer); final IUser player = ess.getUserMap().getUser(onlinePlayer);
player.acquireReadLock();
if (user == player) if (user == player)
{ {
continue; continue;
@@ -44,9 +42,8 @@ public class Commandtpaall extends EssentialsCommand
{ {
continue; continue;
} }
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (user.getPlayer().getWorld() != player.getPlayer().getWorld() && settings.getData().getGeneral().isWorldTeleportPermissions() if (user.getPlayer().getWorld() != player.getPlayer().getWorld() && settings.getData().getGeneral().isWorldTeleportPermissions()
&& !Permissions.WORLD.isAuthorized(user, user.getPlayer().getWorld().getName())) && !Permissions.WORLD.isAuthorized(user, user.getPlayer().getWorld().getName()))
{ {

View File

@@ -19,30 +19,22 @@ public class Commandtpaccept extends EssentialsCommand
} }
final IUser target = user.getTeleportRequester(); final IUser target = user.getTeleportRequester();
if (target == null if (target == null
|| !target.isOnline() || !target.isOnline()
|| (user.isTpRequestHere() && !Permissions.TPAHERE.isAuthorized(target)) || (user.isTpRequestHere() && !Permissions.TPAHERE.isAuthorized(target))
|| (!user.isTpRequestHere() && !Permissions.TPA.isAuthorized(target) && !Permissions.TPAALL.isAuthorized(target))) || (!user.isTpRequestHere() && !Permissions.TPA.isAuthorized(target) && !Permissions.TPAALL.isAuthorized(target)))
{ {
throw new Exception(_("noPendingRequest")); throw new Exception(_("noPendingRequest"));
} }
if (args.length > 0 && !target.getName().contains(args[0])) if (args.length > 0 && !target.getName().contains(args[0]))
{ {
throw new Exception(_("noPendingRequest")); throw new Exception(_("noPendingRequest"));
} }
int tpaAcceptCancellation = 0;
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock(); int tpaAcceptCancellation = settings.getData().getCommands().getTpa().getTimeout();
try
{
tpaAcceptCancellation = settings.getData().getCommands().getTpa().getTimeout();
}
finally
{
settings.unlock();
}
if (tpaAcceptCancellation != 0 && (System.currentTimeMillis() - user.getTeleportRequestTime()) / 1000 > tpaAcceptCancellation) if (tpaAcceptCancellation != 0 && (System.currentTimeMillis() - user.getTeleportRequestTime()) / 1000 > tpaAcceptCancellation)
{ {

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
@@ -17,16 +16,14 @@ public class Commandtpahere extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
@Cleanup
final IUser player = ess.getUserMap().matchUser(args[0], false, false); final IUser player = ess.getUserMap().matchUser(args[0], false, false);
player.acquireReadLock();
if (!player.getData().isTeleportEnabled()) if (!player.getData().isTeleportEnabled())
{ {
throw new Exception(_("teleportDisabled", player.getPlayer().getDisplayName())); throw new Exception(_("teleportDisabled", player.getPlayer().getDisplayName()));
} }
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (user.getPlayer().getWorld() != player.getPlayer().getWorld() && settings.getData().getGeneral().isWorldTeleportPermissions() if (user.getPlayer().getWorld() != player.getPlayer().getWorld() && settings.getData().getGeneral().isWorldTeleportPermissions()
&& !Permissions.WORLD.isAuthorized(user, user.getPlayer().getWorld().getName())) && !Permissions.WORLD.isAuthorized(user, user.getPlayer().getWorld().getName()))
{ {

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
@@ -39,9 +38,8 @@ public class Commandtpall extends EssentialsCommand
{ {
continue; continue;
} }
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (user.getPlayer().getWorld() != player.getPlayer().getWorld() && settings.getData().getGeneral().isWorldTeleportPermissions() if (user.getPlayer().getWorld() != player.getPlayer().getWorld() && settings.getData().getGeneral().isWorldTeleportPermissions()
&& !Permissions.WORLD.isAuthorized(user, user.getPlayer().getWorld().getName())) && !Permissions.WORLD.isAuthorized(user, user.getPlayer().getWorld().getName()))

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
@@ -11,10 +10,8 @@ public class Commandtphere extends EssentialsCommand
{ {
@Override @Override
public void run(final IUser user, final String commandLabel, final String[] args) throws Exception public void run(final IUser user, final String commandLabel, final String[] args) throws Exception
{ {
@Cleanup
final IUser player = ess.getUserMap().matchUser(args[0], false, false); final IUser player = ess.getUserMap().matchUser(args[0], false, false);
player.acquireReadLock();
if (!player.getData().isTeleportEnabled()) if (!player.getData().isTeleportEnabled())
{ {
throw new Exception(_("teleportDisabled", player.getPlayer().getDisplayName())); throw new Exception(_("teleportDisabled", player.getPlayer().getDisplayName()));

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
@@ -26,9 +25,8 @@ public class Commandtpohere extends EssentialsCommand
{ {
throw new NoSuchFieldException(_("playerNotFound")); throw new NoSuchFieldException(_("playerNotFound"));
} }
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
//todo - common method //todo - common method
if (user.getPlayer().getWorld() != player.getPlayer().getWorld() && settings.getData().getGeneral().isWorldTeleportPermissions() if (user.getPlayer().getWorld() != player.getPlayer().getWorld() && settings.getData().getGeneral().isWorldTeleportPermissions()
&& !Permissions.WORLD.isAuthorized(player, user.getPlayer().getWorld().getName())) && !Permissions.WORLD.isAuthorized(player, user.getPlayer().getWorld().getName()))

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@@ -16,11 +15,11 @@ public class Commandunban extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
@Cleanup
final IUser player = ess.getUserMap().matchUser(args[0], false, true); final IUser player = ess.getUserMap().matchUser(args[0], false, true);
player.acquireWriteLock();
player.getData().setBan(null); player.getData().setBan(null);
player.setBanned(false); player.setBanned(false);
player.queueSave();
sender.sendMessage(_("unbannedPlayer")); sender.sendMessage(_("unbannedPlayer"));
} }
} }

View File

@@ -1,6 +1,5 @@
package net.ess3.commands; package net.ess3.commands;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@@ -17,9 +16,7 @@ public class Commandunbanip extends EssentialsCommand
} }
try try
{ {
@Cleanup
final IUser user = ess.getUserMap().matchUser(args[0], false, true); final IUser user = ess.getUserMap().matchUser(args[0], false, true);
user.acquireReadLock();
ess.getServer().unbanIP(user.getData().getIpAddress()); ess.getServer().unbanIP(user.getData().getIpAddress());
} }
catch (Exception ex) catch (Exception ex)

View File

@@ -2,7 +2,6 @@ package net.ess3.commands;
import java.util.Locale; import java.util.Locale;
import java.util.Set; import java.util.Set;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.craftbukkit.InventoryWorkaround; import net.ess3.craftbukkit.InventoryWorkaround;
@@ -21,13 +20,12 @@ public class Commandunlimited extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
@Cleanup
IUser target = user; IUser target = user;
if (args.length > 1 && Permissions.UNLIMITED_OTHERS.isAuthorized(user)) if (args.length > 1 && Permissions.UNLIMITED_OTHERS.isAuthorized(user))
{ {
target = ess.getUserMap().matchUser(args[1], false, false); target = ess.getUserMap().matchUser(args[1], false, false);
target.acquireReadLock();
} }
if (args[0].equalsIgnoreCase("list")) if (args[0].equalsIgnoreCase("list"))
@@ -103,8 +101,8 @@ public class Commandunlimited extends EssentialsCommand
user.sendMessage(_(message, itemname, target.getPlayer().getDisplayName())); user.sendMessage(_(message, itemname, target.getPlayer().getDisplayName()));
} }
target.sendMessage(_(message, itemname, target.getPlayer().getDisplayName())); target.sendMessage(_(message, itemname, target.getPlayer().getDisplayName()));
target.acquireWriteLock();
target.getData().setUnlimited(stack.getType(), enableUnlimited); target.getData().setUnlimited(stack.getType(), enableUnlimited);
target.queueSave();
return true; return true;
} }

View File

@@ -1,7 +1,6 @@
package net.ess3.commands; package net.ess3.commands;
import java.util.Locale; import java.util.Locale;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
@@ -15,7 +14,6 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public class Commandwhois extends EssentialsCommand public class Commandwhois extends EssentialsCommand
{ {
@Override @Override
@@ -38,21 +36,18 @@ public class Commandwhois extends EssentialsCommand
showhidden = true; showhidden = true;
} }
final String whois = args[0].toLowerCase(Locale.ENGLISH); final String whois = args[0].toLowerCase(Locale.ENGLISH);
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
final int prefixLength = FormatUtil.stripColor(settings.getData().getChat().getNicknamePrefix()).length(); final int prefixLength = FormatUtil.stripColor(settings.getData().getChat().getNicknamePrefix()).length();
boolean foundPlayer = false; boolean foundPlayer = false;
for (Player onlinePlayer : server.getOnlinePlayers()) for (Player onlinePlayer : server.getOnlinePlayers())
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(onlinePlayer); final IUser user = ess.getUserMap().getUser(onlinePlayer);
if (user.isHidden() && !showhidden) if (user.isHidden() && !showhidden)
{ {
continue; continue;
} }
user.acquireReadLock();
final String nickName = FormatUtil.stripFormat(user.getData().getNickname()); final String nickName = FormatUtil.stripFormat(user.getData().getNickname());
if (!whois.equalsIgnoreCase(nickName) if (!whois.equalsIgnoreCase(nickName)
&& !whois.substring(prefixLength).equalsIgnoreCase(nickName) && !whois.substring(prefixLength).equalsIgnoreCase(nickName)
@@ -90,7 +85,7 @@ public class Commandwhois extends EssentialsCommand
? DateUtil.formatDateDiff(user.getTimestamp(UserData.TimestampType.MUTE)) ? DateUtil.formatDateDiff(user.getTimestamp(UserData.TimestampType.MUTE))
: _("true") : _("true")
: _("false")))); : _("false"))));
if (!foundPlayer) if (!foundPlayer)
{ {
throw new NoSuchFieldException(_("playerNotFound")); throw new NoSuchFieldException(_("playerNotFound"));

View File

@@ -51,19 +51,11 @@ public class EssentialsCommandHandler implements ICommandHandler
@Override @Override
public boolean handleCommand(final CommandSender sender, final Command command, final String commandLabel, final String[] args) public boolean handleCommand(final CommandSender sender, final Command command, final String commandLabel, final String[] args)
{ {
boolean disabled = false;
boolean overridden = false;
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
try boolean disabled = settings.getData().getCommands().isDisabled(command.getName());
{ boolean overridden = !disabled || settings.getData().getCommands().isOverridden(command.getName());
disabled = settings.getData().getCommands().isDisabled(command.getName());
overridden = !disabled || settings.getData().getCommands().isOverridden(command.getName());
}
finally
{
settings.unlock();
}
// TODO: Move this stuff to bukkit workarounds // TODO: Move this stuff to bukkit workarounds
// Allow plugins to override the command via onCommand // Allow plugins to override the command via onCommand
if (!overridden && (!commandLabel.startsWith("e") || commandLabel.equalsIgnoreCase(command.getName()))) if (!overridden && (!commandLabel.startsWith("e") || commandLabel.equalsIgnoreCase(command.getName())))
@@ -71,7 +63,7 @@ public class EssentialsCommandHandler implements ICommandHandler
final PluginCommand pc = getAlternative(commandLabel); final PluginCommand pc = getAlternative(commandLabel);
if (pc != null) if (pc != null)
{ {
executed(commandLabel, pc.getLabel()); executed(commandLabel, pc.getLabel());
try try
{ {
@@ -133,7 +125,7 @@ public class EssentialsCommandHandler implements ICommandHandler
sender.sendMessage(_("noAccessCommand")); sender.sendMessage(_("noAccessCommand"));
return true; return true;
} }
IUser user = null; IUser user = null;
if (sender instanceof Player) if (sender instanceof Player)
{ {
@@ -150,7 +142,6 @@ public class EssentialsCommandHandler implements ICommandHandler
} }
else else
{ {
user.acquireReadLock();
user.setPlayerCache((Player)sender); user.setPlayerCache((Player)sender);
try try
{ {
@@ -158,7 +149,7 @@ public class EssentialsCommandHandler implements ICommandHandler
} }
finally finally
{ {
user.unlock(); user.setPlayerCache(null);
} }
} }
return true; return true;

View File

@@ -1,12 +1,10 @@
package net.ess3.economy; package net.ess3.economy;
import java.util.HashMap;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import net.ess3.api.*; import net.ess3.api.*;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
import net.ess3.utils.FormatUtil; import net.ess3.utils.FormatUtil;
import net.ess3.utils.Util;
public class Economy implements IEconomy public class Economy implements IEconomy
@@ -22,64 +20,27 @@ public class Economy implements IEconomy
private double getNPCBalance(String name) throws UserDoesNotExistException private double getNPCBalance(String name) throws UserDoesNotExistException
{ {
npcs.acquireReadLock(); Double balance = npcs.getData().getBalances().get(name.toLowerCase(Locale.ENGLISH));
try if (balance == null)
{ {
Map<String, Double> balances = npcs.getData().getBalances(); throw new UserDoesNotExistException(name);
if (balances == null)
{
throw new UserDoesNotExistException(name);
}
Double balance = npcs.getData().getBalances().get(name.toLowerCase(Locale.ENGLISH));
if (balance == null)
{
throw new UserDoesNotExistException(name);
}
return balance;
}
finally
{
npcs.unlock();
} }
return balance;
} }
private void setNPCBalance(String name, double balance, boolean checkExistance) throws UserDoesNotExistException private void setNPCBalance(String name, double balance, boolean checkExistance) throws UserDoesNotExistException
{ {
npcs.acquireWriteLock(); Map<String, Double> balances = npcs.getData().getBalances();
try if (checkExistance && !balances.containsKey(name.toLowerCase(Locale.ENGLISH)))
{ {
Map<String, Double> balances = npcs.getData().getBalances(); throw new UserDoesNotExistException(name);
if (balances == null)
{
balances = new HashMap<String, Double>();
npcs.getData().setBalances(balances);
}
if (checkExistance && !balances.containsKey(name.toLowerCase(Locale.ENGLISH)))
{
throw new UserDoesNotExistException(name);
}
balances.put(name.toLowerCase(Locale.ENGLISH), balance);
}
finally
{
npcs.unlock();
} }
npcs.getData().setBalance(name.toLowerCase(Locale.ENGLISH), balance);
} }
private double getStartingBalance() private double getStartingBalance()
{ {
double startingBalance = 0; return ess.getSettings().getData().getEconomy().getStartingBalance();
ISettings settings = ess.getSettings();
settings.acquireReadLock();
try
{
startingBalance = settings.getData().getEconomy().getStartingBalance();
}
finally
{
settings.unlock();
}
return startingBalance;
} }
@Override @Override
@@ -182,27 +143,15 @@ public class Economy implements IEconomy
@Override @Override
public void removeNPC(String name) throws UserDoesNotExistException public void removeNPC(String name) throws UserDoesNotExistException
{ {
npcs.acquireWriteLock(); Map<String, Double> balances = npcs.getData().getBalances();
try
if (balances.containsKey(name.toLowerCase(Locale.ENGLISH)))
{ {
Map<String, Double> balances = npcs.getData().getBalances(); npcs.getData().removeBalance(name.toLowerCase(Locale.ENGLISH));
if (balances == null)
{
balances = new HashMap<String, Double>();
npcs.getData().setBalances(balances);
}
if (balances.containsKey(name.toLowerCase(Locale.ENGLISH)))
{
balances.remove(name.toLowerCase(Locale.ENGLISH));
}
else
{
throw new UserDoesNotExistException(name);
}
} }
finally else
{ {
npcs.unlock(); throw new UserDoesNotExistException(name);
} }
} }
} }

View File

@@ -1,9 +1,13 @@
package net.ess3.economy; package net.ess3.economy;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import lombok.AccessLevel;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import net.ess3.storage.MapValueType; import net.ess3.storage.MapValueType;
import net.ess3.storage.StorageObject; import net.ess3.storage.StorageObject;
@@ -13,5 +17,29 @@ import net.ess3.storage.StorageObject;
public class Money implements StorageObject public class Money implements StorageObject
{ {
@MapValueType(Double.class) @MapValueType(Double.class)
private Map<String, Double> balances = new HashMap<String, Double>(); @Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private Map<String, Double> balances;
public Map<String, Double> getBalances()
{
return balances == null
? Collections.<String, Double>emptyMap()
: Collections.unmodifiableMap(balances);
}
public void setBalance(String name, Double value) {
Map<String, Double> balanceMap = new HashMap<String, Double>(getBalances());
balanceMap.put(name, value);
balances = balanceMap;
}
void removeBalance(String name)
{
Map<String, Double> balanceMap = new HashMap<String, Double>(getBalances());
balanceMap.remove(name);
balances = balanceMap;
}
} }

View File

@@ -9,7 +9,6 @@ import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
@@ -81,9 +80,8 @@ public class Trade
throw new ChargeException(_("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase(Locale.ENGLISH).replace("_", " "))); throw new ChargeException(_("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase(Locale.ENGLISH).replace("_", " ")));
} }
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
double money; double money;
if (command != null && !command.isEmpty() if (command != null && !command.isEmpty()
@@ -167,15 +165,14 @@ public class Trade
{ {
throw new ChargeException(_("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase(Locale.ENGLISH).replace("_", " "))); throw new ChargeException(_("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase(Locale.ENGLISH).replace("_", " ")));
} }
InventoryWorkaround.removeItem(user.getPlayer().getInventory() , true, true, getItemStack()); InventoryWorkaround.removeItem(user.getPlayer().getInventory(), true, true, getItemStack());
user.getPlayer().updateInventory(); user.getPlayer().updateInventory();
} }
if (command != null && !command.isEmpty() if (command != null && !command.isEmpty()
&& !Permissions.NOCOMMANDCOST.isAuthorized(user, command)) && !Permissions.NOCOMMANDCOST.isAuthorized(user, command))
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
final double cost = settings.getData().getEconomy().getCommandCost(command.charAt(0) == '/' ? command.substring(1) : command); final double cost = settings.getData().getEconomy().getCommandCost(command.charAt(0) == '/' ? command.substring(1) : command);
if (!user.canAfford(cost) && cost > 0) if (!user.canAfford(cost) && cost > 0)
{ {
@@ -227,9 +224,7 @@ public class Trade
public static void log(String type, String subtype, String event, String sender, Trade charge, String receiver, Trade pay, Location loc, IEssentials ess) public static void log(String type, String subtype, String event, String sender, Trade charge, String receiver, Trade pay, Location loc, IEssentials ess)
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (!settings.getData().getEconomy().isLogEnabled()) if (!settings.getData().getEconomy().isLogEnabled())
{ {
return; return;

View File

@@ -2,7 +2,6 @@ package net.ess3.economy;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IWorth; import net.ess3.api.IWorth;
@@ -15,20 +14,16 @@ import org.bukkit.material.MaterialData;
public class WorthHolder extends AsyncStorageObjectHolder<net.ess3.economy.Worth> implements IWorth public class WorthHolder extends AsyncStorageObjectHolder<net.ess3.economy.Worth> implements IWorth
{ {
@Override @Override
public void finishRead() public void finishRead()
{ {
} }
@Override @Override
public void finishWrite() public void finishWrite()
{ {
} }
public WorthHolder(final IEssentials ess) public WorthHolder(final IEssentials ess)
{ {
super(ess, net.ess3.economy.Worth.class); super(ess, net.ess3.economy.Worth.class);
@@ -38,55 +33,44 @@ public class WorthHolder extends AsyncStorageObjectHolder<net.ess3.economy.Worth
@Override @Override
public double getPrice(final ItemStack itemStack) public double getPrice(final ItemStack itemStack)
{ {
this.acquireReadLock(); final Map<MaterialData, Double> prices = this.getData().getSell();
try if (prices == null || itemStack == null)
{ {
final Map<MaterialData, Double> prices = this.getData().getSell(); return Double.NaN;
if (prices == null || itemStack == null) }
final Double basePrice = prices.get(itemStack.getData());
if (basePrice == null || Double.isNaN(basePrice))
{
return Double.NaN;
}
double multiplier = 1.0;
if (itemStack.getType().getMaxDurability() > 0)
{
multiplier *= (double)itemStack.getDurability() / (double)itemStack.getType().getMaxDurability();
}
if (itemStack.getEnchantments() != null && !itemStack.getEnchantments().isEmpty())
{
final Map<EnchantmentLevel, Double> enchantmentMultipliers = this.getData().getEnchantmentMultiplier();
if (enchantmentMultipliers != null)
{ {
return Double.NaN; for (Map.Entry<Enchantment, Integer> entry : itemStack.getEnchantments().entrySet())
}
final Double basePrice = prices.get(itemStack.getData());
if (basePrice == null || Double.isNaN(basePrice))
{
return Double.NaN;
}
double multiplier = 1.0;
if (itemStack.getType().getMaxDurability() > 0) {
multiplier *= (double)itemStack.getDurability() / (double)itemStack.getType().getMaxDurability();
}
if (itemStack.getEnchantments() != null && !itemStack.getEnchantments().isEmpty())
{
final Map<EnchantmentLevel, Double> enchantmentMultipliers = this.getData().getEnchantmentMultiplier();
if (enchantmentMultipliers != null)
{ {
for (Map.Entry<Enchantment, Integer> entry : itemStack.getEnchantments().entrySet()) final Double enchMult = enchantmentMultipliers.get(new EnchantmentLevel(entry.getKey(), entry.getValue()));
if (enchMult != null)
{ {
final Double enchMult = enchantmentMultipliers.get(new EnchantmentLevel(entry.getKey(), entry.getValue())); multiplier *= enchMult;
if (enchMult != null)
{
multiplier *= enchMult;
}
} }
} }
} }
return basePrice * multiplier;
}
finally
{
this.unlock();
} }
return basePrice * multiplier;
} }
@Override @Override
public void setPrice(final ItemStack itemStack, final double price) public void setPrice(final ItemStack itemStack, final double price)
{ {
acquireWriteLock(); getData().setSellPrice(itemStack.getData(), price);
try { queueSave();
getData().setSellPrice(itemStack.getData(), price);
} finally {
unlock();
}
} }
@Override @Override

View File

@@ -1,6 +1,5 @@
package net.ess3.listener; package net.ess3.listener;
import lombok.Cleanup;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.bukkit.BukkitMaterial; import net.ess3.bukkit.BukkitMaterial;
@@ -33,9 +32,8 @@ public class EssentialsBlockListener implements Listener
return; return;
} }
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
final boolean unlimitedForUser = user.getData().hasUnlimited(itemstack.getType()); final boolean unlimitedForUser = user.getData().hasUnlimited(itemstack.getType());
if (unlimitedForUser && user.getPlayer().getGameMode() != GameMode.CREATIVE) if (unlimitedForUser && user.getPlayer().getGameMode() != GameMode.CREATIVE)

View File

@@ -1,7 +1,6 @@
package net.ess3.listener; package net.ess3.listener;
import java.util.List; import java.util.List;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
@@ -38,15 +37,12 @@ public class EssentialsEntityListener implements Listener
if (eDefend instanceof Player && eAttack instanceof Player) if (eDefend instanceof Player && eAttack instanceof Player)
{ {
@Cleanup
final IUser attacker = ess.getUserMap().getUser((Player)eAttack); final IUser attacker = ess.getUserMap().getUser((Player)eAttack);
@Cleanup
final IUser defender = ess.getUserMap().getUser((Player)eDefend); final IUser defender = ess.getUserMap().getUser((Player)eDefend);
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
attacker.acquireReadLock();
defender.acquireReadLock();
attacker.updateActivity(true); attacker.updateActivity(true);
if (settings.getData().getGeneral().getLoginAttackDelay() > 0 && !Permissions.PVPDELAY_EXEMPT.isAuthorized(attacker) if (settings.getData().getGeneral().getLoginAttackDelay() > 0 && !Permissions.PVPDELAY_EXEMPT.isAuthorized(attacker)
@@ -121,9 +117,8 @@ public class EssentialsEntityListener implements Listener
public void onPlayerDeathEvent(final PlayerDeathEvent event) public void onPlayerDeathEvent(final PlayerDeathEvent event)
{ {
final IUser user = ess.getUserMap().getUser((Player)event.getEntity()); final IUser user = ess.getUserMap().getUser((Player)event.getEntity());
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (Permissions.BACK_ONDEATH.isAuthorized(user) && !settings.getData().getCommands().isDisabled("back")) if (Permissions.BACK_ONDEATH.isAuthorized(user) && !settings.getData().getCommands().isDisabled("back"))
{ {
user.setLastLocation(); user.setLastLocation();
@@ -161,12 +156,10 @@ public class EssentialsEntityListener implements Listener
if (event.getRegainReason() == RegainReason.SATIATED && event.getEntity() instanceof Player) if (event.getRegainReason() == RegainReason.SATIATED && event.getEntity() instanceof Player)
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
@Cleanup
final IUser user = ess.getUserMap().getUser((Player)event.getEntity()); final IUser user = ess.getUserMap().getUser((Player)event.getEntity());
user.acquireReadLock();
if (user.getData().isAfk() && settings.getData().getCommands().getAfk().isFreezeAFKPlayers()) if (user.getData().isAfk() && settings.getData().getCommands().getAfk().isFreezeAFKPlayers())
{ {
event.setCancelled(true); event.setCancelled(true);
@@ -187,18 +180,10 @@ public class EssentialsEntityListener implements Listener
return; return;
} }
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock(); final Boolean prevent = settings.getData().getWorldOptions(event.getLocation().getWorld().getName()).getPreventSpawn(creature);
try if (prevent != null && prevent)
{ {
final Boolean prevent = settings.getData().getWorldOptions(event.getLocation().getWorld().getName()).getPreventSpawn(creature); event.setCancelled(true);
if (prevent != null && prevent)
{
event.setCancelled(true);
}
}
finally
{
settings.unlock();
} }
} }
} }

View File

@@ -7,7 +7,6 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
@@ -60,9 +59,7 @@ public class EssentialsPlayerListener implements Listener
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerChat(final PlayerChatEvent event) public void onPlayerChat(final PlayerChatEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
if (user.getData().isMuted()) if (user.getData().isMuted())
{ {
event.setCancelled(true); event.setCancelled(true);
@@ -85,12 +82,9 @@ public class EssentialsPlayerListener implements Listener
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerMove(final PlayerMoveEvent event) public void onPlayerMove(final PlayerMoveEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (user.getData().isAfk() && settings.getData().getCommands().getAfk().isFreezeAFKPlayers()) if (user.getData().isAfk() && settings.getData().getCommands().getAfk().isFreezeAFKPlayers())
{ {
@@ -120,12 +114,9 @@ public class EssentialsPlayerListener implements Listener
@EventHandler(priority = EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerQuit(final PlayerQuitEvent event) public void onPlayerQuit(final PlayerQuitEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (settings.getData().getCommands().getGod().isRemoveOnDisconnect() && user.isGodModeEnabled()) if (settings.getData().getCommands().getGod().isRemoveOnDisconnect() && user.isGodModeEnabled())
{ {
user.setGodModeEnabled(false); user.setGodModeEnabled(false);
@@ -151,9 +142,8 @@ public class EssentialsPlayerListener implements Listener
return; return;
} }
ess.getBackup().startTask(); ess.getBackup().startTask();
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireWriteLock();
user.updateDisplayName(); user.updateDisplayName();
user.getData().setIpAddress(user.getPlayer().getAddress().getAddress().getHostAddress()); user.getData().setIpAddress(user.getPlayer().getAddress().getAddress().getHostAddress());
@@ -171,10 +161,10 @@ public class EssentialsPlayerListener implements Listener
{ {
user.getPlayer().setSleepingIgnored(true); user.getPlayer().setSleepingIgnored(true);
} }
user.queueSave();
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (!settings.getData().getCommands().isDisabled("motd") && Permissions.MOTD.isAuthorized(user)) if (!settings.getData().getCommands().isDisabled("motd") && Permissions.MOTD.isAuthorized(user))
{ {
@@ -224,9 +214,8 @@ public class EssentialsPlayerListener implements Listener
default: default:
return; return;
} }
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireWriteLock();
user.getData().setNpc(false); user.getData().setNpc(false);
final long currentTime = System.currentTimeMillis(); final long currentTime = System.currentTimeMillis();
@@ -250,14 +239,14 @@ public class EssentialsPlayerListener implements Listener
user.setTimestamp(TimestampType.LOGIN, System.currentTimeMillis()); user.setTimestamp(TimestampType.LOGIN, System.currentTimeMillis());
user.updateCompass(); user.updateCompass();
user.queueSave();
} }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerTeleport(final PlayerTeleportEvent event) public void onPlayerTeleport(final PlayerTeleportEvent event)
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
//There is TeleportCause.COMMMAND but plugins have to actively pass the cause in on their teleports. //There is TeleportCause.COMMMAND but plugins have to actively pass the cause in on their teleports.
if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && settings.getData().getCommands().getBack().isRegisterBackInListener()) if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && settings.getData().getCommands().getBack().isRegisterBackInListener())
{ {
@@ -270,9 +259,8 @@ public class EssentialsPlayerListener implements Listener
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerEggThrow(final PlayerEggThrowEvent event) public void onPlayerEggThrow(final PlayerEggThrowEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
final ItemStack hand = new ItemStack(Material.EGG, 1); final ItemStack hand = new ItemStack(Material.EGG, 1);
if (user.getData().hasUnlimited(hand.getType())) if (user.getData().hasUnlimited(hand.getType()))
{ {
@@ -284,9 +272,8 @@ public class EssentialsPlayerListener implements Listener
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerBucketEmpty(final PlayerBucketEmptyEvent event) public void onPlayerBucketEmpty(final PlayerBucketEmptyEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
if (user.getData().hasUnlimited(event.getBucket())) if (user.getData().hasUnlimited(event.getBucket()))
{ {
event.getItemStack().setType(event.getBucket()); event.getItemStack().setType(event.getBucket());
@@ -311,9 +298,7 @@ public class EssentialsPlayerListener implements Listener
{ {
for (Player player : ess.getServer().getOnlinePlayers()) for (Player player : ess.getServer().getOnlinePlayers())
{ {
@Cleanup
IUser spyer = ess.getUserMap().getUser(player); IUser spyer = ess.getUserMap().getUser(player);
spyer.acquireReadLock();
if (spyer.getData().isSocialspy() && !user.equals(spyer)) if (spyer.getData().isSocialspy() && !user.equals(spyer))
{ {
player.sendMessage(user.getPlayer().getDisplayName() + " : " + event.getMessage()); player.sendMessage(user.getPlayer().getDisplayName() + " : " + event.getMessage());
@@ -329,12 +314,9 @@ public class EssentialsPlayerListener implements Listener
@EventHandler(priority = EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerChangedWorld(final PlayerChangedWorldEvent event) public void onPlayerChangedWorld(final PlayerChangedWorldEvent event)
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
if (settings.getData().getChat().getChangeDisplayname()) if (settings.getData().getChat().getChangeDisplayname())
{ {
user.updateDisplayName(); user.updateDisplayName();
@@ -359,9 +341,7 @@ public class EssentialsPlayerListener implements Listener
@EventHandler(priority = EventPriority.NORMAL) @EventHandler(priority = EventPriority.NORMAL)
public void onPlayerInteract(final PlayerInteractEvent event) public void onPlayerInteract(final PlayerInteractEvent event)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
user.updateActivity(true); user.updateActivity(true);
switch (event.getAction()) switch (event.getAction())
{ {
@@ -370,9 +350,8 @@ public class EssentialsPlayerListener implements Listener
{ {
return; return;
} }
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (settings.getData().getCommands().getHome().isUpdateBedAtDaytime() && event.getClickedBlock().getType() == Material.BED_BLOCK) if (settings.getData().getCommands().getHome().isUpdateBedAtDaytime() && event.getClickedBlock().getType() == Material.BED_BLOCK)
{ {
event.getPlayer().setBedSpawnLocation(event.getClickedBlock().getLocation()); event.getPlayer().setBedSpawnLocation(event.getClickedBlock().getLocation());
@@ -441,16 +420,13 @@ public class EssentialsPlayerListener implements Listener
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerPickupItem(final PlayerPickupItemEvent event) public void onPlayerPickupItem(final PlayerPickupItemEvent event)
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (!settings.getData().getCommands().getAfk().isDisableItemPickupWhileAfk()) if (!settings.getData().getCommands().getAfk().isDisableItemPickupWhileAfk())
{ {
return; return;
} }
@Cleanup
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
user.acquireReadLock();
if (user.getData().isAfk()) if (user.getData().isAfk())
{ {
event.setCancelled(true); event.setCancelled(true);

View File

@@ -65,16 +65,8 @@ public class EssentialsPluginListener implements Listener, IReload
private void checkGroups() private void checkGroups()
{ {
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock(); General.GroupStorage storage = settings.getData().getGeneral().getGroupStorage();
General.GroupStorage storage = General.GroupStorage.FILE;
try
{
storage = settings.getData().getGeneral().getGroupStorage();
}
finally
{
settings.unlock();
}
if (storage == General.GroupStorage.GROUPMANAGER) if (storage == General.GroupStorage.GROUPMANAGER)
{ {
Plugin groupManager = ess.getServer().getPluginManager().getPlugin("GroupManager"); Plugin groupManager = ess.getServer().getPluginManager().getPlugin("GroupManager");

View File

@@ -1,7 +1,6 @@
package net.ess3.metrics; package net.ess3.metrics;
import java.util.logging.Level; import java.util.logging.Level;
import lombok.Cleanup;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
@@ -30,16 +29,15 @@ public class MetricsListener implements Listener
public void onPlayerJoin(final PlayerJoinEvent event) public void onPlayerJoin(final PlayerJoinEvent event)
{ {
final IUser player = ess.getUserMap().getUser(event.getPlayer()); final IUser player = ess.getUserMap().getUser(event.getPlayer());
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (settings.getData().getGeneral().getMetricsEnabled() == null && (Permissions.ESSENTIALS.isAuthorized(event.getPlayer()) || event.getPlayer().hasPermission("bukkit.broadcast.admin"))) if (settings.getData().getGeneral().getMetricsEnabled() == null && (Permissions.ESSENTIALS.isAuthorized(event.getPlayer()) || event.getPlayer().hasPermission("bukkit.broadcast.admin")))
{ {
player.sendMessage("PluginMetrics collects minimal statistic data, starting in about 5 minutes."); player.sendMessage("PluginMetrics collects minimal statistic data, starting in about 5 minutes.");
player.sendMessage("To opt out, run /essentials opt-out"); player.sendMessage("To opt out, run /essentials opt-out");
ess.getLogger().log(Level.INFO, "[Metrics] Admin join - Starting 5 minute opt-out period."); ess.getLogger().log(Level.INFO, "[Metrics] Admin join - Starting 5 minute opt-out period.");
settings.acquireWriteLock();
settings.getData().getGeneral().setMetricsEnabled(true); settings.getData().getGeneral().setMetricsEnabled(true);
settings.queueSave();
ess.getPlugin().scheduleAsyncDelayedTask(starter, 5 * 1200); ess.getPlugin().scheduleAsyncDelayedTask(starter, 5 * 1200);
} }
} }

View File

@@ -2,7 +2,6 @@ package net.ess3.metrics;
import java.util.Locale; import java.util.Locale;
import java.util.logging.Level; import java.util.logging.Level;
import lombok.Cleanup;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.economy.register.Method; import net.ess3.economy.register.Method;
@@ -38,9 +37,7 @@ public class MetricsStarter implements Runnable
final Metrics metrics = new Metrics(ess.getPlugin()); final Metrics metrics = new Metrics(ess.getPlugin());
ess.setMetrics(metrics); ess.setMetrics(metrics);
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (!metrics.isOptOut()) if (!metrics.isOptOut())
{ {
if (settings.getData().getGeneral().getMetricsEnabled() == true) if (settings.getData().getGeneral().getMetricsEnabled() == true)
@@ -128,9 +125,8 @@ public class MetricsStarter implements Runnable
final Graph enabledGraph = metrics.createGraph("EnabledFeatures"); final Graph enabledGraph = metrics.createGraph("EnabledFeatures");
enabledGraph.addPlotter(new SimplePlotter("Total")); enabledGraph.addPlotter(new SimplePlotter("Total"));
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
final String BKcommand = settings.getData().getGeneral().getBackup().getCommand();; final String BKcommand = settings.getData().getGeneral().getBackup().getCommand();;
if (BKcommand != null && !"".equals(BKcommand)) if (BKcommand != null && !"".equals(BKcommand))
{ {

View File

@@ -1,7 +1,6 @@
package net.ess3.ranks; package net.ess3.ranks;
import java.text.MessageFormat; import java.text.MessageFormat;
import lombok.Cleanup;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IRanks; import net.ess3.api.IRanks;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
@@ -11,7 +10,9 @@ import org.anjocaido.groupmanager.GroupManager;
import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler; import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
public class GMGroups implements IRanks {
public class GMGroups implements IRanks
{
private final transient IEssentials ess; private final transient IEssentials ess;
private final transient GroupManager groupManager; private final transient GroupManager groupManager;
@@ -90,32 +91,31 @@ public class GMGroups implements IRanks {
@Override @Override
public MessageFormat getChatFormat(final IUser player) public MessageFormat getChatFormat(final IUser player)
{ {
String format = getRawChatFormat(player); String format = getRawChatFormat(player);
format = FormatUtil.replaceFormat(format); format = FormatUtil.replaceFormat(format);
format = format.replace("{DISPLAYNAME}", "%1$s"); format = format.replace("{DISPLAYNAME}", "%1$s");
format = format.replace("{GROUP}", "{0}"); format = format.replace("{GROUP}", "{0}");
format = format.replace("{MESSAGE}", "%2$s"); format = format.replace("{MESSAGE}", "%2$s");
format = format.replace("{WORLDNAME}", "{1}"); format = format.replace("{WORLDNAME}", "{1}");
format = format.replace("{SHORTWORLDNAME}", "{2}"); format = format.replace("{SHORTWORLDNAME}", "{2}");
format = format.replaceAll("\\{(\\D*)\\}", "\\[$1\\]"); format = format.replaceAll("\\{(\\D*)\\}", "\\[$1\\]");
MessageFormat mFormat = new MessageFormat(format); MessageFormat mFormat = new MessageFormat(format);
return mFormat; return mFormat;
} }
private String getRawChatFormat(final IUser player) private String getRawChatFormat(final IUser player)
{ {
AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(player.getPlayer()); AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(player.getPlayer());
if (handler != null) if (handler != null)
{ {
String chatformat = handler.getPermissionString(player.getName(), "chatformat"); String chatformat = handler.getPermissionString(player.getName(), "chatformat");
if (chatformat != null && !chatformat.isEmpty()) { if (chatformat != null && !chatformat.isEmpty())
{
return chatformat; return chatformat;
} }
} }
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
return settings.getData().getChat().getDefaultFormat(); return settings.getData().getChat().getDefaultFormat();
} }

View File

@@ -7,7 +7,6 @@ import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import lombok.Cleanup;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IRanks; import net.ess3.api.IRanks;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
@@ -43,31 +42,23 @@ public class RanksStorage extends AsyncStorageObjectHolder<Ranks> implements IRa
public Collection<Entry<String, RankOptions>> getGroups(final IUser player) public Collection<Entry<String, RankOptions>> getGroups(final IUser player)
{ {
acquireReadLock(); final Map<String, RankOptions> groups = getData().getRanks();
try if (groups == null || groups.isEmpty())
{ {
final Map<String, RankOptions> groups = getData().getRanks(); return Collections.emptyList();
if (groups == null || groups.isEmpty()) }
final ArrayList<Entry<String, RankOptions>> list = new ArrayList();
for (Entry<String, RankOptions> entry : groups.entrySet())
{
if (Permissions.RANKS.isAuthorized(player, entry.getKey()))
{ {
return Collections.emptyList(); if (entry.getValue() != null)
}
final ArrayList<Entry<String, RankOptions>> list = new ArrayList();
for (Entry<String, RankOptions> entry : groups.entrySet())
{
if (Permissions.RANKS.isAuthorized(player, entry.getKey()))
{ {
if (entry.getValue() != null) list.add(entry);
{
list.add(entry);
}
} }
} }
return list;
}
finally
{
unlock();
} }
return list;
} }
@Override @Override
@@ -173,9 +164,8 @@ public class RanksStorage extends AsyncStorageObjectHolder<Ranks> implements IRa
return groupOptions.getValue().getMessageFormat(); return groupOptions.getValue().getMessageFormat();
} }
} }
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
return settings.getData().getChat().getDefaultFormat(); return settings.getData().getChat().getDefaultFormat();
} }

View File

@@ -1,7 +1,6 @@
package net.ess3.ranks; package net.ess3.ranks;
import java.text.MessageFormat; import java.text.MessageFormat;
import lombok.Cleanup;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IRanks; import net.ess3.api.IRanks;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
@@ -92,9 +91,7 @@ public class VaultGroups implements IRanks
return chatformat; return chatformat;
} }
@Cleanup
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
return settings.getData().getChat().getDefaultFormat(); return settings.getData().getChat().getDefaultFormat();
} }

View File

@@ -35,4 +35,11 @@ public class Jails implements StorageObject
jailMap.put(name, new StoredLocation(loc)); jailMap.put(name, new StoredLocation(loc));
jails = jailMap; jails = jailMap;
} }
public void removeJail(String name)
{
Map<String, StoredLocation> jailMap = new HashMap<String, StoredLocation>(getJails());
jailMap.remove(name);
jails = jailMap;
}
} }

View File

@@ -9,19 +9,17 @@ import net.ess3.storage.AsyncStorageObjectHolder;
public class SettingsHolder extends AsyncStorageObjectHolder<Settings> implements ISettings public class SettingsHolder extends AsyncStorageObjectHolder<Settings> implements ISettings
{ {
@Override @Override
public void finishRead() public void finishRead()
{ {
} }
@Override @Override
public void finishWrite() public void finishWrite()
{ {
} }
private final transient AtomicBoolean debug = new AtomicBoolean(false); private transient volatile boolean debug = false;
public SettingsHolder(final IEssentials ess) public SettingsHolder(final IEssentials ess)
{ {
super(ess, Settings.class); super(ess, Settings.class);
@@ -32,12 +30,8 @@ public class SettingsHolder extends AsyncStorageObjectHolder<Settings> implement
public final void onReload() public final void onReload()
{ {
super.onReload(); super.onReload();
acquireReadLock();
try { debug = getData().getGeneral().isDebug();
debug.set(getData().getGeneral().isDebug());
} finally {
unlock();
}
} }
@Override @Override
@@ -49,29 +43,20 @@ public class SettingsHolder extends AsyncStorageObjectHolder<Settings> implement
@Override @Override
public String getLocale() public String getLocale()
{ {
acquireReadLock(); return getData().getGeneral().getLocale();
try {
return getData().getGeneral().getLocale();
} finally {
unlock();
}
} }
@Override @Override
public boolean isDebug() public boolean isDebug()
{ {
return debug.get(); return debug;
} }
@Override @Override
public void setDebug(final boolean set) public void setDebug(final boolean set)
{ {
debug.set(set); debug = set;
acquireWriteLock(); getData().getGeneral().setDebug(set);
try { queueSave();
getData().getGeneral().setDebug(set);
} finally {
unlock();
}
} }
} }

View File

@@ -29,19 +29,16 @@ import org.bukkit.plugin.EventExecutor;
public class SpawnsHolder extends AsyncStorageObjectHolder<Spawns> implements IEssentialsModule public class SpawnsHolder extends AsyncStorageObjectHolder<Spawns> implements IEssentialsModule
{ {
@Override @Override
public void finishRead() public void finishRead()
{ {
} }
@Override @Override
public void finishWrite() public void finishWrite()
{ {
} }
public SpawnsHolder(final IEssentials ess) public SpawnsHolder(final IEssentials ess)
{ {
super(ess, Spawns.class); super(ess, Spawns.class);
@@ -57,15 +54,8 @@ public class SpawnsHolder extends AsyncStorageObjectHolder<Spawns> implements IE
public void setSpawn(final Location loc, final String group) public void setSpawn(final Location loc, final String group)
{ {
acquireWriteLock(); getData().addSpawn(group, loc);
try queueSave();
{
getData().addSpawn(group, loc);
}
finally
{
unlock();
}
if ("default".equalsIgnoreCase(group)) if ("default".equalsIgnoreCase(group))
{ {
@@ -75,35 +65,27 @@ public class SpawnsHolder extends AsyncStorageObjectHolder<Spawns> implements IE
public Location getSpawn(final String group) public Location getSpawn(final String group)
{ {
acquireReadLock(); if (getData().getSpawns() == null || group == null)
{
return getWorldSpawn();
}
final Map<String, net.ess3.storage.StoredLocation> spawnMap = getData().getSpawns();
String groupName = group.toLowerCase(Locale.ENGLISH);
if (!spawnMap.containsKey(groupName))
{
groupName = "default";
}
if (!spawnMap.containsKey(groupName))
{
return getWorldSpawn();
}
try try
{ {
if (getData().getSpawns() == null || group == null) return spawnMap.get(groupName).getStoredLocation();
{
return getWorldSpawn();
}
final Map<String, net.ess3.storage.StoredLocation> spawnMap = getData().getSpawns();
String groupName = group.toLowerCase(Locale.ENGLISH);
if (!spawnMap.containsKey(groupName))
{
groupName = "default";
}
if (!spawnMap.containsKey(groupName))
{
return getWorldSpawn();
}
try
{
return spawnMap.get(groupName).getStoredLocation();
}
catch (WorldNotLoadedException ex)
{
return getWorldSpawn();
}
} }
finally catch (WorldNotLoadedException ex)
{ {
unlock(); return getWorldSpawn();
} }
} }
@@ -122,70 +104,37 @@ public class SpawnsHolder extends AsyncStorageObjectHolder<Spawns> implements IE
public EventPriority getRespawnPriority() public EventPriority getRespawnPriority()
{ {
acquireReadLock(); for (EventPriority priority : EventPriority.values())
try
{ {
for (EventPriority priority : EventPriority.values()) if (priority.toString().equalsIgnoreCase(getData().getRespawnPriority()))
{ {
if (priority.toString().equalsIgnoreCase(getData().getRespawnPriority())) return priority;
{
return priority;
}
} }
return EventPriority.NORMAL;
}
finally
{
unlock();
} }
return EventPriority.NORMAL;
} }
public Location getNewbieSpawn() public Location getNewbieSpawn()
{ {
acquireReadLock(); if (getData().getNewbieSpawn() == null || getData().getNewbieSpawn().isEmpty()
try || getData().getNewbieSpawn().equalsIgnoreCase("none"))
{ {
if (getData().getNewbieSpawn() == null || getData().getNewbieSpawn().isEmpty() return null;
|| getData().getNewbieSpawn().equalsIgnoreCase("none"))
{
return null;
}
return getSpawn(getData().getNewbieSpawn());
}
finally
{
unlock();
} }
return getSpawn(getData().getNewbieSpawn());
} }
public boolean getAnnounceNewPlayers() public boolean getAnnounceNewPlayers()
{ {
acquireReadLock(); return getData().getNewPlayerAnnouncement() != null && !getData().getNewPlayerAnnouncement().isEmpty();
try
{
return getData().getNewPlayerAnnouncement() != null && !getData().getNewPlayerAnnouncement().isEmpty();
}
finally
{
unlock();
}
} }
public String getAnnounceNewPlayerFormat(IUser user) public String getAnnounceNewPlayerFormat(IUser user)
{ {
acquireReadLock(); return getData().getNewPlayerAnnouncement().replace('&', '\u00a7').replace("\u00a7\u00a7", "&").replace("{PLAYER}", user.getPlayer().getDisplayName()).replace("{DISPLAYNAME}", user.getPlayer().getDisplayName()).replace("{GROUP}", ess.getRanks().getMainGroup(user)).replace("{USERNAME}", user.getName()).replace("{ADDRESS}", user.getPlayer().getAddress().toString());
try
{
return getData().getNewPlayerAnnouncement().replace('&', '\u00a7').replace("\u00a7\u00a7", "&").replace("{PLAYER}", user.getPlayer().getDisplayName()).replace("{DISPLAYNAME}", user.getPlayer().getDisplayName()).replace("{GROUP}", ess.getRanks().getMainGroup(user)).replace("{USERNAME}", user.getName()).replace("{ADDRESS}", user.getPlayer().getAddress().toString());
}
finally
{
unlock();
}
} }
//TODO: Why is this stuff here in the settings folder?
//TODO: Why is this stuff here in the settings folder?
private void registerListeners() private void registerListeners()
{ {
final SpawnPlayerListener playerListener = new SpawnPlayerListener(ess, this); final SpawnPlayerListener playerListener = new SpawnPlayerListener(ess, this);
@@ -224,17 +173,8 @@ public class SpawnsHolder extends AsyncStorageObjectHolder<Spawns> implements IE
{ {
final IUser user = ess.getUserMap().getUser(event.getPlayer()); final IUser user = ess.getUserMap().getUser(event.getPlayer());
boolean respawnAtHome = false;
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock(); boolean respawnAtHome = ess.getSettings().getData().getCommands().getHome().isRespawnAtHome();
try
{
respawnAtHome = ess.getSettings().getData().getCommands().getHome().isRespawnAtHome();
}
finally
{
settings.unlock();
}
if (respawnAtHome) if (respawnAtHome)
{ {
Location home; Location home;

View File

@@ -13,7 +13,7 @@ import org.bukkit.Bukkit;
public abstract class AsyncStorageObjectHolder<T extends StorageObject> implements IStorageObjectHolder<T> public abstract class AsyncStorageObjectHolder<T extends StorageObject> implements IStorageObjectHolder<T>
{ {
private transient T data; private transient T data;
private final transient ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); //private final transient ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
private final transient Class<T> clazz; private final transient Class<T> clazz;
protected final transient IEssentials ess; protected final transient IEssentials ess;
private final transient StorageObjectDataWriter writer; private final transient StorageObjectDataWriter writer;
@@ -52,7 +52,7 @@ public abstract class AsyncStorageObjectHolder<T extends StorageObject> implemen
return data; return data;
} }
@Override /*@Override
public void acquireReadLock() public void acquireReadLock()
{ {
rwl.readLock().lock(); rwl.readLock().lock();
@@ -67,9 +67,9 @@ public abstract class AsyncStorageObjectHolder<T extends StorageObject> implemen
} }
rwl.writeLock().lock(); rwl.writeLock().lock();
rwl.readLock().lock(); rwl.readLock().lock();
} }*/
@Override /*@Override
public void close() public void close()
{ {
unlock(); unlock();
@@ -87,7 +87,15 @@ public abstract class AsyncStorageObjectHolder<T extends StorageObject> implemen
{ {
rwl.readLock().unlock(); rwl.readLock().unlock();
} }
}*/
@Override
public void queueSave()
{
writer.schedule();
} }
@Override @Override
public void onReload() public void onReload()
@@ -123,14 +131,14 @@ public abstract class AsyncStorageObjectHolder<T extends StorageObject> implemen
@Override @Override
public StorageObject getObject() public StorageObject getObject()
{ {
acquireReadLock(); //acquireReadLock();
return getData(); return getData();
} }
@Override @Override
public void onFinish() public void onFinish()
{ {
unlock(); //unlock();
finishWrite(); finishWrite();
} }
} }
@@ -147,11 +155,11 @@ public abstract class AsyncStorageObjectHolder<T extends StorageObject> implemen
public File onStart() throws IOException public File onStart() throws IOException
{ {
final File file = getStorageFile(); final File file = getStorageFile();
while (rwl.getReadHoldCount() > 0) /*while (rwl.getReadHoldCount() > 0)
{ {
rwl.readLock().unlock(); rwl.readLock().unlock();
} }
rwl.writeLock().lock(); rwl.writeLock().lock();*/
return file; return file;
} }
@@ -162,7 +170,7 @@ public abstract class AsyncStorageObjectHolder<T extends StorageObject> implemen
{ {
data = object; data = object;
} }
rwl.writeLock().unlock(); //rwl.writeLock().unlock();
loaded.set(true); loaded.set(true);
} }
@@ -180,7 +188,7 @@ public abstract class AsyncStorageObjectHolder<T extends StorageObject> implemen
Bukkit.getLogger().log(Level.SEVERE, ex.getMessage(), ex); Bukkit.getLogger().log(Level.SEVERE, ex.getMessage(), ex);
} }
} }
rwl.writeLock().unlock(); //rwl.writeLock().unlock();
loaded.set(true); loaded.set(true);
if (exception instanceof FileNotFoundException) if (exception instanceof FileNotFoundException)
{ {

View File

@@ -7,11 +7,11 @@ public interface IStorageObjectHolder<T extends StorageObject> extends IReload
{ {
T getData(); T getData();
void acquireReadLock(); //void acquireReadLock();
void acquireWriteLock(); //void acquireWriteLock();
void close(); void queueSave();
void unlock(); //void unlock();
} }

View File

@@ -6,7 +6,6 @@ import java.util.GregorianCalendar;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import lombok.Cleanup;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.ess3.Console; import net.ess3.Console;
@@ -67,18 +66,6 @@ public class User extends UserBase implements IUser
playerCache = new WeakReference<Player>(player); playerCache = new WeakReference<Player>(player);
} }
private void destroyPlayerCache()
{
playerCache = null;
}
@Override
public void close()
{
super.close();
destroyPlayerCache();
}
@Override @Override
public Player getPlayer() public Player getPlayer()
{ {
@@ -90,21 +77,6 @@ public class User extends UserBase implements IUser
return player; return player;
} }
public void example()
{
// Cleanup will call close at the end of the function
@Cleanup
final User user = this;
// read lock allows to read data from the user
user.acquireReadLock();
final double money = user.getData().getMoney();
// write lock allows only one thread to modify the data
user.acquireWriteLock();
user.getData().setMoney(10 + money);
}
@Override @Override
public void finishRead() public void finishRead()
{ {
@@ -150,20 +122,13 @@ public class User extends UserBase implements IUser
{ {
return; return;
} }
acquireWriteLock(); setMoney(getMoney() + value);
try sendMessage(_("addedToAccount", FormatUtil.displayCurrency(value, ess)));
if (initiator != null)
{ {
setMoney(getMoney() + value); initiator.sendMessage(_("addedToOthersAccount", FormatUtil.displayCurrency(value, ess), this.getPlayer().getDisplayName()));
sendMessage(_("addedToAccount", FormatUtil.displayCurrency(value, ess)));
if (initiator != null)
{
initiator.sendMessage(_("addedToOthersAccount", FormatUtil.displayCurrency(value, ess), this.getPlayer().getDisplayName()));
}
}
finally
{
unlock();
} }
queueSave();
} }
@Override @Override
@@ -220,58 +185,42 @@ public class User extends UserBase implements IUser
@Override @Override
public void setLastLocation() public void setLastLocation()
{ {
acquireWriteLock(); getData().setLastLocation(new net.ess3.storage.StoredLocation(getPlayer().getLocation()));
try queueSave();
{
getData().setLastLocation(new net.ess3.storage.StoredLocation(getPlayer().getLocation()));
}
finally
{
unlock();
}
} }
public String getNick(boolean addprefixsuffix) public String getNick(boolean addprefixsuffix)
{ {
acquireReadLock();
try
{
final String nick = getData().getNickname();
@Cleanup
final ISettings settings = ess.getSettings();
settings.acquireReadLock();
final IRanks groups = ess.getRanks();
// default: {PREFIX}{NICKNAMEPREFIX}{NAME}{SUFFIX}
String displayname = settings.getData().getChat().getDisplaynameFormat();
if (settings.getData().getCommands().isDisabled("nick") || nick == null || nick.isEmpty() || nick.equals(getName()))
{
displayname = displayname.replace("{NAME}", getName());
displayname = displayname.replace("{NICKNAMEPREFIX}", "");
}
else
{
displayname = displayname.replace("{NAME}", nick);
displayname = displayname.replace("{NICKNAMEPREFIX}", settings.getData().getChat().getNicknamePrefix());
}
if (displayname.contains("{PREFIX}")) final String nick = getData().getNickname();
{ final ISettings settings = ess.getSettings();
displayname = displayname.replace("{PREFIX}", groups.getPrefix(this)); final IRanks groups = ess.getRanks();
} // default: {PREFIX}{NICKNAMEPREFIX}{NAME}{SUFFIX}
if (displayname.contains("{SUFFIX}")) String displayname = settings.getData().getChat().getDisplaynameFormat();
{ if (settings.getData().getCommands().isDisabled("nick") || nick == null || nick.isEmpty() || nick.equals(getName()))
displayname = displayname.replace("{SUFFIX}", groups.getSuffix(this));
}
displayname = displayname.replace("{WORLDNAME}", this.getPlayer().getWorld().getName());
displayname = displayname.replace('&', '\u00a7');
displayname = displayname.concat("\u00a7f");
return displayname;
}
finally
{ {
unlock(); displayname = displayname.replace("{NAME}", getName());
displayname = displayname.replace("{NICKNAMEPREFIX}", "");
} }
else
{
displayname = displayname.replace("{NAME}", nick);
displayname = displayname.replace("{NICKNAMEPREFIX}", settings.getData().getChat().getNicknamePrefix());
}
if (displayname.contains("{PREFIX}"))
{
displayname = displayname.replace("{PREFIX}", groups.getPrefix(this));
}
if (displayname.contains("{SUFFIX}"))
{
displayname = displayname.replace("{SUFFIX}", groups.getSuffix(this));
}
displayname = displayname.replace("{WORLDNAME}", this.getPlayer().getWorld().getName());
displayname = displayname.replace('&', '\u00a7');
displayname = displayname.concat("\u00a7f");
return displayname;
} }
@Override @Override
@@ -300,9 +249,7 @@ public class User extends UserBase implements IUser
@Override @Override
public void updateDisplayName() public void updateDisplayName()
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (isOnline() && settings.getData().getChat().getChangeDisplayname()) if (isOnline() && settings.getData().getChat().getChangeDisplayname())
{ {
setDisplayNick(); setDisplayNick();
@@ -355,20 +302,14 @@ public class User extends UserBase implements IUser
public void setAfk(final boolean set) public void setAfk(final boolean set)
{ {
acquireWriteLock();
try this.getPlayer().setSleepingIgnored(Permissions.SLEEPINGIGNORED.isAuthorized(this) ? true : set);
if (set && !getData().isAfk())
{ {
this.getPlayer().setSleepingIgnored(Permissions.SLEEPINGIGNORED.isAuthorized(this) ? true : set); afkPosition = getPlayer().getLocation();
if (set && !getData().isAfk())
{
afkPosition = getPlayer().getLocation();
}
getData().setAfk(set);
}
finally
{
unlock();
} }
getData().setAfk(set);
queueSave();
} }
@Override @Override
@@ -383,109 +324,76 @@ public class User extends UserBase implements IUser
@Override @Override
public boolean checkJailTimeout(final long currentTime) public boolean checkJailTimeout(final long currentTime)
{ {
acquireReadLock(); if (getTimestamp(UserData.TimestampType.JAIL) > 0 && getTimestamp(UserData.TimestampType.JAIL) < currentTime && getData().isJailed())
try
{ {
if (getTimestamp(UserData.TimestampType.JAIL) > 0 && getTimestamp(UserData.TimestampType.JAIL) < currentTime && getData().isJailed())
setTimestamp(UserData.TimestampType.JAIL, 0);
getData().setJailed(false);
sendMessage(_("haveBeenReleased"));
getData().setJail(null);
queueSave();
try
{ {
acquireWriteLock(); teleport.back();
setTimestamp(UserData.TimestampType.JAIL, 0);
getData().setJailed(false);
sendMessage(_("haveBeenReleased"));
getData().setJail(null);
try
{
teleport.back();
}
catch (Exception ex)
{
}
return true;
} }
return false; catch (Exception ex)
} {
finally }
{ return true;
unlock();
} }
return false;
} }
//Returns true if status expired during this check //Returns true if status expired during this check
@Override @Override
public boolean checkMuteTimeout(final long currentTime) public boolean checkMuteTimeout(final long currentTime)
{ {
acquireReadLock(); if (getTimestamp(UserData.TimestampType.MUTE) > 0 && getTimestamp(UserData.TimestampType.MUTE) < currentTime && getData().isMuted())
try
{ {
if (getTimestamp(UserData.TimestampType.MUTE) > 0 && getTimestamp(UserData.TimestampType.MUTE) < currentTime && getData().isMuted()) setTimestamp(UserData.TimestampType.MUTE, 0);
{ sendMessage(_("canTalkAgain"));
acquireWriteLock(); getData().setMuted(false);
setTimestamp(UserData.TimestampType.MUTE, 0); queueSave();
sendMessage(_("canTalkAgain")); return true;
getData().setMuted(false);
return true;
}
return false;
}
finally
{
unlock();
} }
return false;
} }
//Returns true if status expired during this check //Returns true if status expired during this check
@Override @Override
public boolean checkBanTimeout(final long currentTime) public boolean checkBanTimeout(final long currentTime)
{ {
acquireReadLock(); if (getData().getBan() != null && getData().getBan().getTimeout() > 0 && getData().getBan().getTimeout() < currentTime && isBanned())
try
{ {
if (getData().getBan() != null && getData().getBan().getTimeout() > 0 && getData().getBan().getTimeout() < currentTime && isBanned()) getData().setBan(null);
{ setBanned(false);
acquireWriteLock(); queueSave();
getData().setBan(null); return true;
setBanned(false);
return true;
}
return false;
}
finally
{
unlock();
} }
return false;
} }
@Override @Override
public void updateActivity(final boolean broadcast) public void updateActivity(final boolean broadcast)
{ {
acquireReadLock(); if (getData().isAfk())
try
{ {
if (getData().isAfk()) getData().setAfk(false);
queueSave();
if (broadcast && !hidden)
{ {
acquireWriteLock(); ess.broadcastMessage(this, _("userIsNotAway", getPlayer().getDisplayName()));
getData().setAfk(false);
if (broadcast && !hidden)
{
ess.broadcastMessage(this, _("userIsNotAway", getPlayer().getDisplayName()));
}
} }
lastActivity = System.currentTimeMillis();
}
finally
{
unlock();
} }
lastActivity = System.currentTimeMillis();
} }
@Override @Override
public void checkActivity() public void checkActivity()
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
final long autoafkkick = settings.getData().getCommands().getAfk().getAutoAFKKick(); final long autoafkkick = settings.getData().getCommands().getAfk().getAutoAFKKick();
if (autoafkkick > 0 && lastActivity > 0 && (lastActivity + (autoafkkick * 1000)) < System.currentTimeMillis() if (autoafkkick > 0 && lastActivity > 0 && (lastActivity + (autoafkkick * 1000)) < System.currentTimeMillis()
&& !hidden && !hidden
@@ -506,22 +414,15 @@ public class User extends UserBase implements IUser
} }
} }
final long autoafk = settings.getData().getCommands().getAfk().getAutoAFK(); final long autoafk = settings.getData().getCommands().getAfk().getAutoAFK();
acquireReadLock();
try if (!getData().isAfk() && autoafk > 0 && lastActivity + autoafk * 1000 < System.currentTimeMillis() && Permissions.AFK.isAuthorized(this))
{ {
if (!getData().isAfk() && autoafk > 0 && lastActivity + autoafk * 1000 < System.currentTimeMillis() && Permissions.AFK.isAuthorized(this)) setAfk(true);
if (!hidden)
{ {
setAfk(true); ess.broadcastMessage(this, _("userIsAway", getPlayer().getDisplayName()));
if (!hidden)
{
ess.broadcastMessage(this, _("userIsAway", getPlayer().getDisplayName()));
}
} }
} }
finally
{
unlock();
}
} }
@Override @Override
@@ -533,20 +434,10 @@ public class User extends UserBase implements IUser
@Override @Override
public boolean isGodModeEnabled() public boolean isGodModeEnabled()
{ {
acquireReadLock(); final ISettings settings = ess.getSettings();
try return (getData().isGodmode()
{ && !settings.getData().getWorldOptions(getPlayer().getLocation().getWorld().getName()).isGodmode())
@Cleanup || (getData().isAfk() && settings.getData().getCommands().getAfk().isFreezeAFKPlayers());
final ISettings settings = ess.getSettings();
settings.acquireReadLock();
return (getData().isGodmode()
&& !settings.getData().getWorldOptions(getPlayer().getLocation().getWorld().getName()).isGodmode())
|| (getData().isAfk() && settings.getData().getCommands().getAfk().isFreezeAFKPlayers());
}
finally
{
unlock();
}
} }
@Override @Override
@@ -649,9 +540,7 @@ public class User extends UserBase implements IUser
final Map<Integer, ItemStack> overfilled; final Map<Integer, ItemStack> overfilled;
if (Permissions.OVERSIZEDSTACKS.isAuthorized(this)) if (Permissions.OVERSIZEDSTACKS.isAuthorized(this))
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
int oversizedStackSize = settings.getData().getGeneral().getOversizedStacksize(); int oversizedStackSize = settings.getData().getGeneral().getOversizedStacksize();
overfilled = InventoryWorkaround.addItem(getPlayer().getInventory(), true, oversizedStackSize, itemStack); overfilled = InventoryWorkaround.addItem(getPlayer().getInventory(), true, oversizedStackSize, itemStack);
@@ -684,9 +573,7 @@ public class User extends UserBase implements IUser
final double mon = getMoney(); final double mon = getMoney();
if (Permissions.ECO_LOAN.isAuthorized(this)) if (Permissions.ECO_LOAN.isAuthorized(this))
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
return (mon - cost) >= settings.getData().getEconomy().getMinMoney(); return (mon - cost) >= settings.getData().getEconomy().getMinMoney();
} }
return cost <= mon; return cost <= mon;
@@ -710,9 +597,7 @@ public class User extends UserBase implements IUser
public void enableInvulnerabilityAfterTeleport() public void enableInvulnerabilityAfterTeleport()
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
final long time = settings.getData().getGeneral().getTeleportInvulnerability(); final long time = settings.getData().getGeneral().getTeleportInvulnerability();
if (time > 0) if (time > 0)

View File

@@ -3,7 +3,6 @@ package net.ess3.user;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import lombok.Cleanup;
import lombok.Delegate; import lombok.Delegate;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
@@ -36,12 +35,13 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
this.offlinePlayer = base; this.offlinePlayer = base;
onReload(); onReload();
} }
@Override @Override
public void sendMessage(String string) public void sendMessage(String string)
{ {
Player player = offlinePlayer.getPlayer(); Player player = offlinePlayer.getPlayer();
if (player != null) { if (player != null)
{
player.sendMessage(string); player.sendMessage(string);
} }
} }
@@ -50,7 +50,8 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
public void sendMessage(String[] strings) public void sendMessage(String[] strings)
{ {
Player player = offlinePlayer.getPlayer(); Player player = offlinePlayer.getPlayer();
if (player != null) { if (player != null)
{
player.sendMessage(strings); player.sendMessage(strings);
} }
} }
@@ -65,9 +66,12 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
public boolean isPermissionSet(String string) public boolean isPermissionSet(String string)
{ {
Player player = offlinePlayer.getPlayer(); Player player = offlinePlayer.getPlayer();
if (player != null) { if (player != null)
{
return player.isPermissionSet(string); return player.isPermissionSet(string);
} else { }
else
{
return false; return false;
} }
} }
@@ -76,9 +80,12 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
public boolean isPermissionSet(Permission prmsn) public boolean isPermissionSet(Permission prmsn)
{ {
Player player = offlinePlayer.getPlayer(); Player player = offlinePlayer.getPlayer();
if (player != null) { if (player != null)
{
return player.isPermissionSet(prmsn); return player.isPermissionSet(prmsn);
} else { }
else
{
return false; return false;
} }
} }
@@ -87,9 +94,12 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
public boolean hasPermission(String string) public boolean hasPermission(String string)
{ {
Player player = offlinePlayer.getPlayer(); Player player = offlinePlayer.getPlayer();
if (player != null) { if (player != null)
{
return player.hasPermission(string); return player.hasPermission(string);
} else { }
else
{
return false; return false;
} }
} }
@@ -98,9 +108,12 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
public boolean hasPermission(Permission prmsn) public boolean hasPermission(Permission prmsn)
{ {
Player player = offlinePlayer.getPlayer(); Player player = offlinePlayer.getPlayer();
if (player != null) { if (player != null)
{
return player.hasPermission(prmsn); return player.hasPermission(prmsn);
} else { }
else
{
return false; return false;
} }
} }
@@ -162,300 +175,174 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
public long getTimestamp(final UserData.TimestampType name) public long getTimestamp(final UserData.TimestampType name)
{ {
acquireReadLock(); return getData().getTimestamp(name);
try
{
return getData().getTimestamp(name);
}
finally
{
unlock();
}
} }
public void setTimestamp(final UserData.TimestampType name, final long value) public void setTimestamp(final UserData.TimestampType name, final long value)
{ {
acquireWriteLock(); getData().setTimestamp(name, value);
try queueSave();
{
getData().setTimestamp(name, value);
}
finally
{
unlock();
}
} }
public void setMoney(final double value) public void setMoney(final double value)
{ {
acquireWriteLock();
try final ISettings settings = ess.getSettings();
if (Math.abs(value) > settings.getData().getEconomy().getMaxMoney())
{ {
@Cleanup getData().setMoney(value < 0 ? -settings.getData().getEconomy().getMaxMoney() : settings.getData().getEconomy().getMaxMoney());
final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (Math.abs(value) > settings.getData().getEconomy().getMaxMoney())
{
getData().setMoney(value < 0 ? -settings.getData().getEconomy().getMaxMoney() : settings.getData().getEconomy().getMaxMoney());
}
else
{
getData().setMoney(value);
}
} }
finally else
{ {
unlock(); getData().setMoney(value);
} }
queueSave();
} }
public double getMoney() public double getMoney()
{ {
acquireReadLock(); Double money = getData().getMoney();
try
final ISettings settings = ess.getSettings();
if (money == null)
{ {
Double money = getData().getMoney(); money = (double)settings.getData().getEconomy().getStartingBalance();
@Cleanup
final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (money == null)
{
money = (double)settings.getData().getEconomy().getStartingBalance();
}
if (Math.abs(money) > settings.getData().getEconomy().getMaxMoney())
{
money = money < 0 ? -settings.getData().getEconomy().getMaxMoney() : settings.getData().getEconomy().getMaxMoney();
}
return money;
} }
finally if (Math.abs(money) > settings.getData().getEconomy().getMaxMoney())
{ {
unlock(); money = money < 0 ? -settings.getData().getEconomy().getMaxMoney() : settings.getData().getEconomy().getMaxMoney();
} }
return money;
} }
public void setHome(String name, Location loc) public void setHome(String name, Location loc)
{ {
acquireWriteLock(); getData().addHome(Util.sanitizeKey(name), loc);
try queueSave();
{
getData().addHome(Util.sanitizeKey(name), loc);
}
finally
{
unlock();
}
} }
public boolean toggleAfk() public boolean toggleAfk()
{ {
acquireWriteLock(); boolean ret = !getData().isAfk();
try getData().setAfk(ret);
{ queueSave();
boolean ret = !getData().isAfk(); return ret;
getData().setAfk(ret);
return ret;
}
finally
{
unlock();
}
} }
public void setGodModeEnabled(boolean set) public void setGodModeEnabled(boolean set)
{ {
acquireWriteLock(); getData().setGodmode(set);
try queueSave();
{
getData().setGodmode(set);
}
finally
{
unlock();
}
} }
public void setMuted(boolean mute) public void setMuted(boolean mute)
{ {
acquireWriteLock(); getData().setMuted(mute);
try queueSave();
{
getData().setMuted(mute);
}
finally
{
unlock();
}
} }
public boolean toggleSocialSpy() public boolean toggleSocialSpy()
{ {
acquireWriteLock(); boolean ret = !getData().isSocialspy();
try getData().setSocialspy(ret);
{ queueSave();
boolean ret = !getData().isSocialspy(); return ret;
getData().setSocialspy(ret);
return ret;
}
finally
{
unlock();
}
} }
public boolean toggleTeleportEnabled() public boolean toggleTeleportEnabled()
{ {
acquireWriteLock(); boolean ret = !getData().isTeleportEnabled();
try getData().setTeleportEnabled(ret);
{ queueSave();
boolean ret = !getData().isTeleportEnabled(); return ret;
getData().setTeleportEnabled(ret);
return ret;
}
finally
{
unlock();
}
} }
public boolean isIgnoringPlayer(final IUser user) public boolean isIgnoringPlayer(final IUser user)
{ {
acquireReadLock(); return getData().getIgnore() == null ? false : getData().getIgnore().contains(user.getName().toLowerCase(Locale.ENGLISH)) && Permissions.CHAT_IGNORE_EXEMPT.isAuthorized(user);
try
{
return getData().getIgnore() == null ? false : getData().getIgnore().contains(user.getName().toLowerCase(Locale.ENGLISH)) && Permissions.CHAT_IGNORE_EXEMPT.isAuthorized(user);
}
finally
{
unlock();
}
} }
public void setIgnoredPlayer(final IUser user, final boolean set) public void setIgnoredPlayer(final IUser user, final boolean set)
{ {
acquireWriteLock(); getData().setIgnore(user.getName().toLowerCase(Locale.ENGLISH), set);
try queueSave();
{
getData().setIgnore(user.getName().toLowerCase(Locale.ENGLISH), set);
}
finally
{
unlock();
}
} }
public void addMail(String string) public void addMail(String string)
{ {
acquireWriteLock(); getData().addMail(string);
try queueSave();
{
getData().addMail(string);
}
finally
{
unlock();
}
} }
public List<String> getMails() public List<String> getMails()
{ {
acquireReadLock();
try return getData().getMails();
{
return getData().getMails();
}
finally
{
unlock();
}
} }
public Location getHome(String name) throws Exception public Location getHome(String name) throws Exception
{ {
acquireReadLock(); if (getData().getHomes() == null)
{
return null;
}
try try
{ {
if (getData().getHomes() == null) return getData().getHomes().get(Util.sanitizeKey(name)).getStoredLocation();
{
return null;
}
try
{
return getData().getHomes().get(Util.sanitizeKey(name)).getStoredLocation();
}
catch (WorldNotLoadedException ex)
{
return null;
}
} }
finally catch (WorldNotLoadedException ex)
{ {
unlock(); return null;
} }
} }
public Location getHome(Location loc) public Location getHome(Location loc)
{ {
if (getData().getHomes() == null)
acquireReadLock();
try
{ {
if (getData().getHomes() == null) return null;
}
ArrayList<Location> worldHomes = new ArrayList<Location>();
for (net.ess3.storage.StoredLocation location : getData().getHomes().values())
{
if (location.getWorldName().equals(loc.getWorld().getName()))
{ {
return null; try
}
ArrayList<Location> worldHomes = new ArrayList<Location>();
for (net.ess3.storage.StoredLocation location : getData().getHomes().values())
{
if (location.getWorldName().equals(loc.getWorld().getName()))
{ {
try worldHomes.add(location.getStoredLocation());
{ }
worldHomes.add(location.getStoredLocation()); catch (WorldNotLoadedException ex)
} {
catch (WorldNotLoadedException ex) continue;
{
continue;
}
} }
} }
if (worldHomes.isEmpty())
{
return null;
}
if (worldHomes.size() == 1)
{
return worldHomes.get(0);
}
double distance = Double.MAX_VALUE;
Location target = null;
for (Location location : worldHomes)
{
final double d = loc.distanceSquared(location);
if (d < distance)
{
target = location;
distance = d;
}
}
return target;
} }
finally if (worldHomes.isEmpty())
{ {
unlock(); return null;
} }
if (worldHomes.size() == 1)
{
return worldHomes.get(0);
}
double distance = Double.MAX_VALUE;
Location target = null;
for (Location location : worldHomes)
{
final double d = loc.distanceSquared(location);
if (d < distance)
{
target = location;
distance = d;
}
}
return target;
} }
public Set<String> getHomes() public Set<String> getHomes()
{ {
acquireReadLock(); return getData().getHomes().keySet();
try
{
return getData().getHomes().keySet();
}
finally
{
unlock();
}
} }
} }

View File

@@ -51,7 +51,8 @@ public class UserMap extends StorageObjectMap<IUser> implements IUserMap
} }
} }
Player player = ess.getServer().getPlayerExact(name); Player player = ess.getServer().getPlayerExact(name);
if (player != null) { if (player != null)
{
return new User(ess.getServer().getOfflinePlayer(player.getName()), ess); return new User(ess.getServer().getOfflinePlayer(player.getName()), ess);
} }
final File userFile = getUserFile(name); final File userFile = getUserFile(name);
@@ -97,7 +98,7 @@ public class UserMap extends StorageObjectMap<IUser> implements IUserMap
} }
return user; return user;
} }
@Override @Override
public IUser matchUser(final String name, final boolean includeHidden, final boolean includeOffline) throws TooManyMatchesException, PlayerNotFoundException public IUser matchUser(final String name, final boolean includeHidden, final boolean includeOffline) throws TooManyMatchesException, PlayerNotFoundException
{ {
@@ -242,14 +243,6 @@ public class UserMap extends StorageObjectMap<IUser> implements IUserMap
private String getNickNamePrefix() private String getNickNamePrefix()
{ {
ess.getSettings().acquireReadLock(); return ess.getSettings().getData().getChat().getNicknamePrefix();
try
{
return ess.getSettings().getData().getChat().getNicknamePrefix();
}
finally
{
ess.getSettings().unlock();
}
} }
} }

View File

@@ -4,7 +4,6 @@ import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols; import java.text.DecimalFormatSymbols;
import java.util.Locale; import java.util.Locale;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
@@ -126,17 +125,13 @@ public class FormatUtil
public static String shortCurrency(final double value, final IEssentials ess) public static String shortCurrency(final double value, final IEssentials ess)
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
return settings.getData().getEconomy().getCurrencySymbol() + formatAsCurrency(value); return settings.getData().getEconomy().getCurrencySymbol() + formatAsCurrency(value);
} }
public static String displayCurrency(final double value, final IEssentials ess) public static String displayCurrency(final double value, final IEssentials ess)
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
return _("currency", settings.getData().getEconomy().getCurrencySymbol(), formatAsCurrency(value)); return _("currency", settings.getData().getEconomy().getCurrencySymbol(), formatAsCurrency(value));
} }

View File

@@ -4,7 +4,6 @@ import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import lombok.Cleanup;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
@@ -26,9 +25,7 @@ public class HelpInput implements IText
public HelpInput(final IUser user, final String match, final IEssentials ess) throws IOException public HelpInput(final IUser user, final String match, final IEssentials ess) throws IOException
{ {
@Cleanup
final ISettings settings = ess.getSettings(); final ISettings settings = ess.getSettings();
settings.acquireReadLock();
boolean reported = false; boolean reported = false;
final List<String> newLines = new ArrayList<String>(); final List<String> newLines = new ArrayList<String>();
String pluginName = ""; String pluginName = "";

View File

@@ -5,7 +5,6 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import lombok.Cleanup;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.utils.DescParseTickFormat; import net.ess3.utils.DescParseTickFormat;
@@ -37,9 +36,7 @@ public class KeywordReplacer implements IText
String userName, address, version; String userName, address, version;
if (sender instanceof Player) if (sender instanceof Player)
{ {
@Cleanup
final IUser user = ess.getUserMap().getUser((Player)sender); final IUser user = ess.getUserMap().getUser((Player)sender);
user.acquireReadLock();
user.setDisplayNick(); user.setDisplayNick();
displayName = user.getPlayer().getDisplayName(); displayName = user.getPlayer().getDisplayName();
userName = user.getPlayer().getName(); userName = user.getPlayer().getName();

View File

@@ -1,5 +1,8 @@
package net.ess3.chat; package net.ess3.chat;
import java.util.Locale;
import java.util.Map;
import java.util.logging.Logger;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
@@ -8,10 +11,6 @@ import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
import net.ess3.utils.Util;
import java.util.Locale;
import java.util.Map;
import java.util.logging.Logger;
import net.ess3.utils.FormatUtil; import net.ess3.utils.FormatUtil;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@@ -112,18 +111,8 @@ public abstract class EssentialsChatPlayer implements Listener
protected void handleLocalChat(final PlayerChatEvent event, final ChatStore chatStore) protected void handleLocalChat(final PlayerChatEvent event, final ChatStore chatStore)
{ {
long radius = 0;
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock(); long radius = settings.getData().getChat().getLocalRadius();
try
{
radius = settings.getData().getChat().getLocalRadius();
}
finally
{
settings.unlock();
}
if (radius < 1) if (radius < 1)
{ {

View File

@@ -50,64 +50,50 @@ public class EssentialsGeoIPPlayerListener implements Listener, IReload
{ {
return; return;
} }
config.acquireReadLock(); if (event.getPlayer().getAddress() == null || event.getPlayer().getAddress().getAddress() == null)
try
{ {
if (event.getPlayer().getAddress() == null || event.getPlayer().getAddress().getAddress() == null) { return;
}
final InetAddress address = event.getPlayer().getAddress().getAddress();
final StringBuilder builder = new StringBuilder();
if (config.getData().getDatabase().isShowCities())
{
final Location loc = ls.getLocation(address);
if (loc == null)
{
return; return;
} }
final InetAddress address = event.getPlayer().getAddress().getAddress(); if (loc.city != null)
final StringBuilder builder = new StringBuilder();
if (config.getData().getDatabase().isShowCities())
{ {
final Location loc = ls.getLocation(address); builder.append(loc.city).append(", ");
if (loc == null)
{
return;
}
if (loc.city != null)
{
builder.append(loc.city).append(", ");
}
final String region = regionName.regionNameByCode(loc.countryCode, loc.region);
if (region != null)
{
builder.append(region).append(", ");
}
builder.append(loc.countryName);
} }
else final String region = regionName.regionNameByCode(loc.countryCode, loc.region);
if (region != null)
{ {
builder.append(ls.getCountry(address).getName()); builder.append(region).append(", ");
}
if (config.getData().isShowOnWhois())
{
u.acquireWriteLock();
try
{
u.getData().setGeolocation(builder.toString());
}
finally
{
u.unlock();
}
}
if (config.getData().isShowOnLogin() && !u.isHidden())
{
for (Player player : event.getPlayer().getServer().getOnlinePlayers())
{
final IUser user = ess.getUserMap().getUser(player);
if (Permissions.GEOIP_SHOW.isAuthorized(user))
{
user.sendMessage(_("geoipJoinFormat", user.getPlayer().getDisplayName(), builder.toString()));
}
}
} }
builder.append(loc.countryName);
} }
finally else
{ {
config.unlock(); builder.append(ls.getCountry(address).getName());
}
if (config.getData().isShowOnWhois())
{
u.getData().setGeolocation(builder.toString());
u.queueSave();
}
if (config.getData().isShowOnLogin() && !u.isHidden())
{
for (Player player : event.getPlayer().getServer().getOnlinePlayers())
{
final IUser user = ess.getUserMap().getUser(player);
if (Permissions.GEOIP_SHOW.isAuthorized(user))
{
user.sendMessage(_("geoipJoinFormat", user.getPlayer().getDisplayName(), builder.toString()));
}
}
} }
} }
@@ -115,48 +101,40 @@ public class EssentialsGeoIPPlayerListener implements Listener, IReload
public final void onReload() public final void onReload()
{ {
config.onReload(); config.onReload();
config.acquireReadLock(); if (config.getData().getDatabase().isShowCities())
try
{ {
if (config.getData().getDatabase().isShowCities()) databaseFile = new File(geoip.getDataFolder(), "GeoIPCity.dat");
}
else
{
databaseFile = new File(geoip.getDataFolder(), "GeoIP.dat");
}
if (!databaseFile.exists())
{
if (config.getData().getDatabase().isDownloadIfMissing())
{ {
databaseFile = new File(geoip.getDataFolder(), "GeoIPCity.dat"); if (config.getData().getDatabase().isShowCities())
}
else
{
databaseFile = new File(geoip.getDataFolder(), "GeoIP.dat");
}
if (!databaseFile.exists())
{
if (config.getData().getDatabase().isDownloadIfMissing())
{ {
if (config.getData().getDatabase().isShowCities()) downloadDatabase(config.getData().getDatabase().getDownloadUrlCity());
{
downloadDatabase(config.getData().getDatabase().getDownloadUrlCity());
}
else
{
downloadDatabase(config.getData().getDatabase().getDownloadUrl());
}
} }
else else
{ {
LOGGER.log(Level.SEVERE, _("cantFindGeoIpDB")); downloadDatabase(config.getData().getDatabase().getDownloadUrl());
return;
} }
} }
try else
{ {
ls = new LookupService(databaseFile); LOGGER.log(Level.SEVERE, _("cantFindGeoIpDB"));
} return;
catch (IOException ex)
{
LOGGER.log(Level.SEVERE, _("cantReadGeoIpDB"), ex);
} }
} }
finally try
{ {
config.unlock(); ls = new LookupService(databaseFile);
}
catch (IOException ex)
{
LOGGER.log(Level.SEVERE, _("cantReadGeoIpDB"), ex);
} }
} }
@@ -167,7 +145,8 @@ public class EssentialsGeoIPPlayerListener implements Listener, IReload
LOGGER.log(Level.SEVERE, _("geoIpUrlEmpty")); LOGGER.log(Level.SEVERE, _("geoIpUrlEmpty"));
return; return;
} }
if (!databaseFile.getAbsoluteFile().getParentFile().exists()) { if (!databaseFile.getAbsoluteFile().getParentFile().exists())
{
databaseFile.getAbsoluteFile().getParentFile().mkdirs(); databaseFile.getAbsoluteFile().getParentFile().mkdirs();
} }
InputStream input = null; InputStream input = null;

View File

@@ -16,48 +16,40 @@ public class EssentialsProtectBlockListener implements Listener
public EssentialsProtectBlockListener(final IProtect parent) public EssentialsProtectBlockListener(final IProtect parent)
{ {
this.prot = parent; this.prot = parent;
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockIgnite(BlockIgniteEvent event) public void onBlockIgnite(BlockIgniteEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock(); final Block block = event.getBlock();
try if (event.getBlock().getType() == Material.OBSIDIAN
|| event.getBlock().getRelative(BlockFace.DOWN).getType() == Material.OBSIDIAN)
{ {
final Block block = event.getBlock(); event.setCancelled(settings.getData().getPrevent().isPortalCreation());
if (event.getBlock().getType() == Material.OBSIDIAN return;
|| event.getBlock().getRelative(BlockFace.DOWN).getType() == Material.OBSIDIAN)
{
event.setCancelled(settings.getData().getPrevent().isPortalCreation());
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.SPREAD))
{
event.setCancelled(settings.getData().getPrevent().isFirespread());
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL) && event.getPlayer() != null)
{
event.setCancelled(Permissions.USEFLINTSTEEL.isAuthorized(event.getPlayer()));
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.LAVA))
{
event.setCancelled(settings.getData().getPrevent().isLavaFirespread());
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.LIGHTNING))
{
event.setCancelled(settings.getData().getPrevent().isLightningFirespread());
}
} }
finally
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.SPREAD))
{ {
settings.unlock(); event.setCancelled(settings.getData().getPrevent().isFirespread());
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL) && event.getPlayer() != null)
{
event.setCancelled(Permissions.USEFLINTSTEEL.isAuthorized(event.getPlayer()));
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.LAVA))
{
event.setCancelled(settings.getData().getPrevent().isLavaFirespread());
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.LIGHTNING))
{
event.setCancelled(settings.getData().getPrevent().isLightningFirespread());
} }
} }
@@ -65,47 +57,32 @@ public class EssentialsProtectBlockListener implements Listener
public void onBlockFromTo(final BlockFromToEvent event) public void onBlockFromTo(final BlockFromToEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock(); final Block block = event.getBlock();
try if (block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER)
{ {
final Block block = event.getBlock(); event.setCancelled(settings.getData().getPrevent().isWaterFlow());
if (block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER) return;
{ }
event.setCancelled(settings.getData().getPrevent().isWaterFlow());
return;
}
if (block.getType() == Material.LAVA || block.getType() == Material.STATIONARY_LAVA) if (block.getType() == Material.LAVA || block.getType() == Material.STATIONARY_LAVA)
{
event.setCancelled(settings.getData().getPrevent().isLavaFlow());
}
// TODO: Test if this still works
/*
* if (block.getType() == Material.AIR) {
* event.setCancelled(prot.getSettingBool(ProtectConfig.prevent_water_bucket_flow)); return; }
*/
}
finally
{ {
settings.unlock(); event.setCancelled(settings.getData().getPrevent().isLavaFlow());
} }
// TODO: Test if this still works
/*
* if (block.getType() == Material.AIR) {
* event.setCancelled(prot.getSettingBool(ProtectConfig.prevent_water_bucket_flow)); return; }
*/
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockBurn(final BlockBurnEvent event) public void onBlockBurn(final BlockBurnEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try if (settings.getData().getPrevent().isFirespread())
{ {
if (settings.getData().getPrevent().isFirespread()) event.setCancelled(true);
{
event.setCancelled(true);
}
}
finally
{
settings.unlock();
} }
} }
} }

View File

@@ -23,140 +23,132 @@ public class EssentialsProtectEntityListener implements Listener
public void onEntityDamage(final EntityDamageEvent event) public void onEntityDamage(final EntityDamageEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock(); final Entity target = event.getEntity();
try
{
final Entity target = event.getEntity();
if (target instanceof Villager && settings.getData().getPrevent().isVillagerDeath()) if (target instanceof Villager && settings.getData().getPrevent().isVillagerDeath())
{
event.setCancelled(true);
return;
}
final Player user = target instanceof Player ? (Player)target : null;
if (target instanceof Player && event instanceof EntityDamageByBlockEvent)
{
final DamageCause cause = event.getCause();
if (cause == DamageCause.CONTACT
&& (Permissions.PREVENTDAMAGE_CONTACT.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.LAVA
&& (Permissions.PREVENTDAMAGE_LAVADAMAGE.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.BLOCK_EXPLOSION
&& (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
}
if (target instanceof Player && event instanceof EntityDamageByEntityEvent)
{
final EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent)event;
final Entity eAttack = edEvent.getDamager();
final Player attacker = eAttack instanceof Player ? (Player)eAttack : null;
// PVP Settings
if (target instanceof Player && eAttack instanceof Player
&& (!Permissions.PVP.isAuthorized(user) || !Permissions.PVP.isAuthorized(attacker)))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
final Player user = target instanceof Player ? (Player)target : null; //Creeper explode prevention
if (target instanceof Player && event instanceof EntityDamageByBlockEvent) if (eAttack instanceof Creeper && settings.getData().getPrevent().isCreeperExplosion()
|| (Permissions.PREVENTDAMAGE_CREEPER.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{ {
final DamageCause cause = event.getCause(); event.setCancelled(true);
return;
if (cause == DamageCause.CONTACT
&& (Permissions.PREVENTDAMAGE_CONTACT.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.LAVA
&& (Permissions.PREVENTDAMAGE_LAVADAMAGE.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.BLOCK_EXPLOSION
&& (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
} }
if (target instanceof Player && event instanceof EntityDamageByEntityEvent) if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
&& (Permissions.PREVENTDAMAGE_FIREBALL.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{ {
final EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent)event; event.setCancelled(true);
final Entity eAttack = edEvent.getDamager(); return;
final Player attacker = eAttack instanceof Player ? (Player)eAttack : null;
// PVP Settings
if (target instanceof Player && eAttack instanceof Player
&& (!Permissions.PVP.isAuthorized(user) || !Permissions.PVP.isAuthorized(attacker)))
{
event.setCancelled(true);
return;
}
//Creeper explode prevention
if (eAttack instanceof Creeper && settings.getData().getPrevent().isCreeperExplosion()
|| (Permissions.PREVENTDAMAGE_CREEPER.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
&& (Permissions.PREVENTDAMAGE_FIREBALL.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (eAttack instanceof TNTPrimed
&& (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (edEvent.getDamager() instanceof Projectile
&& ((Permissions.PREVENTDAMAGE_PROJECTILES.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user))
|| (((Projectile)edEvent.getDamager()).getShooter() instanceof Player
&& (!Permissions.PVP.isAuthorized(user)
|| !Permissions.PVP.isAuthorized((Player)((Projectile)edEvent.getDamager()).getShooter())))))
{
event.setCancelled(true);
return;
}
} }
final DamageCause cause = event.getCause(); if (eAttack instanceof TNTPrimed
if (target instanceof Player) && (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{ {
if (cause == DamageCause.FALL event.setCancelled(true);
&& (Permissions.PREVENTDAMAGE_FALL.isAuthorized(user) return;
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user))) }
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.SUFFOCATION if (edEvent.getDamager() instanceof Projectile
&& (Permissions.PREVENTDAMAGE_SUFFOCATION.isAuthorized(user) && ((Permissions.PREVENTDAMAGE_PROJECTILES.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user))) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user))
{ || (((Projectile)edEvent.getDamager()).getShooter() instanceof Player
event.setCancelled(true); && (!Permissions.PVP.isAuthorized(user)
return; || !Permissions.PVP.isAuthorized((Player)((Projectile)edEvent.getDamager()).getShooter())))))
} {
if ((cause == DamageCause.FIRE event.setCancelled(true);
|| cause == DamageCause.FIRE_TICK) return;
&& (Permissions.PREVENTDAMAGE_FIRE.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.DROWNING
&& (Permissions.PREVENTDAMAGE_DROWNING.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.LIGHTNING
&& (Permissions.PREVENTDAMAGE_LIGHTNING.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
}
} }
} }
finally
final DamageCause cause = event.getCause();
if (target instanceof Player)
{ {
settings.unlock(); if (cause == DamageCause.FALL
&& (Permissions.PREVENTDAMAGE_FALL.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.SUFFOCATION
&& (Permissions.PREVENTDAMAGE_SUFFOCATION.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if ((cause == DamageCause.FIRE
|| cause == DamageCause.FIRE_TICK)
&& (Permissions.PREVENTDAMAGE_FIRE.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.DROWNING
&& (Permissions.PREVENTDAMAGE_DROWNING.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.LIGHTNING
&& (Permissions.PREVENTDAMAGE_LIGHTNING.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
}
} }
} }
@@ -164,42 +156,34 @@ public class EssentialsProtectEntityListener implements Listener
public void onEntityExplode(final EntityExplodeEvent event) public void onEntityExplode(final EntityExplodeEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock(); final int maxHeight = settings.getData().getCreeperMaxHeight();
try
{
final int maxHeight = settings.getData().getCreeperMaxHeight();
if (event.getEntity() instanceof EnderDragon if (event.getEntity() instanceof EnderDragon
&& settings.getData().getPrevent().isEnderdragonBlockdamage()) && settings.getData().getPrevent().isEnderdragonBlockdamage())
{
event.setCancelled(true);
return;
}
else if (event.getEntity() instanceof Creeper
&& (settings.getData().getPrevent().isCreeperExplosion()
|| settings.getData().getPrevent().isCreeperBlockdamage()
|| (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight)))
{
event.setCancelled(true);
event.getLocation().getWorld().createExplosion(event.getLocation(), 0F);
return;
}
else if (event.getEntity() instanceof TNTPrimed
&& settings.getData().getPrevent().isTntExplosion())
{
event.setCancelled(true);
return;
}
else if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
&& settings.getData().getPrevent().isFireballExplosion())
{
event.setCancelled(true);
return;
}
}
finally
{ {
settings.unlock(); event.setCancelled(true);
return;
}
else if (event.getEntity() instanceof Creeper
&& (settings.getData().getPrevent().isCreeperExplosion()
|| settings.getData().getPrevent().isCreeperBlockdamage()
|| (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight)))
{
event.setCancelled(true);
event.getLocation().getWorld().createExplosion(event.getLocation(), 0F);
return;
}
else if (event.getEntity() instanceof TNTPrimed
&& settings.getData().getPrevent().isTntExplosion())
{
event.setCancelled(true);
return;
}
else if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
&& settings.getData().getPrevent().isFireballExplosion())
{
event.setCancelled(true);
return;
} }
} }
@@ -226,18 +210,10 @@ public class EssentialsProtectEntityListener implements Listener
public void onExplosionPrime(final ExplosionPrimeEvent event) public void onExplosionPrime(final ExplosionPrimeEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock(); if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
try && settings.getData().getPrevent().isFireballFire())
{ {
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball) event.setFire(false);
&& settings.getData().getPrevent().isFireballFire())
{
event.setFire(false);
}
}
finally
{
settings.unlock();
} }
} }
@@ -245,17 +221,9 @@ public class EssentialsProtectEntityListener implements Listener
public void onEntityChangeBlock(final EntityChangeBlockEvent event) public void onEntityChangeBlock(final EntityChangeBlockEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock(); if (event.getEntityType() == EntityType.ENDERMAN && settings.getData().getPrevent().isEndermanPickup())
try
{ {
if (event.getEntityType() == EntityType.ENDERMAN && settings.getData().getPrevent().isEndermanPickup()) event.setCancelled(true);
{
event.setCancelled(true);
}
}
finally
{
settings.unlock();
} }
} }
} }

View File

@@ -21,19 +21,12 @@ public class EssentialsProtectWeatherListener implements Listener
public void onWeatherChange(final WeatherChangeEvent event) public void onWeatherChange(final WeatherChangeEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try if (!event.isCancelled()
&& settings.getData().isDisableStorm()
&& event.toWeatherState())
{ {
if (!event.isCancelled() event.setCancelled(true);
&& settings.getData().isDisableStorm()
&& event.toWeatherState())
{
event.setCancelled(true);
}
}
finally
{
settings.unlock();
} }
} }
@@ -41,18 +34,11 @@ public class EssentialsProtectWeatherListener implements Listener
public void onLightningStrike(final LightningStrikeEvent event) public void onLightningStrike(final LightningStrikeEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try if (!event.isCancelled()
&& settings.getData().isDisableLighting())
{ {
if (!event.isCancelled() event.setCancelled(true);
&& settings.getData().isDisableLighting())
{
event.setCancelled(true);
}
}
finally
{
settings.unlock();
} }
} }
@@ -60,19 +46,12 @@ public class EssentialsProtectWeatherListener implements Listener
public void onThunderChange(final ThunderChangeEvent event) public void onThunderChange(final ThunderChangeEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try if (!event.isCancelled()
&& settings.getData().isDisableThunder()
&& event.toThunderState())
{ {
if (!event.isCancelled() event.setCancelled(true);
&& settings.getData().isDisableThunder()
&& event.toThunderState())
{
event.setCancelled(true);
}
}
finally
{
settings.unlock();
} }
} }
} }

View File

@@ -1,11 +1,10 @@
package net.ess3.signs; package net.ess3.signs;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.utils.Util;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
import net.ess3.utils.FormatUtil; import net.ess3.utils.FormatUtil;
import org.bukkit.Material; import org.bukkit.Material;
@@ -36,7 +35,6 @@ public class SignBlockListener implements Listener
public void onBlockBreak(final BlockBreakEvent event) public void onBlockBreak(final BlockBreakEvent event)
{ {
ISettings settings = ess.getSettings(); ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (plugin.getSettings().areSignsDisabled()) if (plugin.getSettings().areSignsDisabled())
{ {
return; return;

View File

@@ -16,16 +16,7 @@ public class SignMail extends EssentialsSign
@Override @Override
protected boolean onSignInteract(final ISign sign, final IUser player, final String username, final IEssentials ess) throws SignException protected boolean onSignInteract(final ISign sign, final IUser player, final String username, final IEssentials ess) throws SignException
{ {
final List<String> mail; final List<String> mail = player.getData().getMails();
player.acquireReadLock();
try
{
mail = player.getData().getMails();
}
finally
{
player.unlock();
}
if (mail == null || mail.isEmpty()) if (mail == null || mail.isEmpty())
{ {
player.sendMessage(_("noNewMail")); player.sendMessage(_("noNewMail"));

View File

@@ -1,19 +1,21 @@
package net.ess3.signs; package net.ess3.signs;
import net.ess3.storage.StorageObject; import java.util.Collections;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import net.ess3.storage.StorageObject;
public class SignsConfig implements StorageObject public class SignsConfig implements StorageObject
{ {
private Map<String, Boolean> signs = new HashMap<String, Boolean>(); private Map<String, Boolean> signs;
public Map<String, Boolean> getSigns() public Map<String, Boolean> getSigns()
{ {
return signs; return signs == null
? Collections.<String, Boolean>emptyMap()
: Collections.unmodifiableMap(signs);
} }
public void setSigns(final Map<String, Boolean> signs) public void setSigns(final Map<String, Boolean> signs)
{ {
this.signs = signs; this.signs = signs;

View File

@@ -19,43 +19,29 @@ public class SignsConfigHolder extends AsyncStorageObjectHolder<SignsConfig>
super(ess, SignsConfig.class); super(ess, SignsConfig.class);
this.plugin = plugin; this.plugin = plugin;
onReload(); onReload();
acquireReadLock(); final Map<String, Boolean> signs = getData().getSigns();
try for (Map.Entry<String, Boolean> entry : signs.entrySet())
{ {
final Map<String, Boolean> signs = getData().getSigns(); if (entry.getKey().trim().toUpperCase(Locale.ENGLISH).equals("COLOR") || entry.getKey().trim().toUpperCase(Locale.ENGLISH).equals("COLOUR"))
for (Map.Entry<String, Boolean> entry : signs.entrySet())
{ {
if (entry.getKey().trim().toUpperCase(Locale.ENGLISH).equals("COLOR") || entry.getKey().trim().toUpperCase(Locale.ENGLISH).equals("COLOUR")) signsEnabled = true;
{ continue;
signsEnabled = true; }
continue; final Signs sign = Signs.valueOf(entry.getKey().toUpperCase(Locale.ENGLISH));
} if (sign != null && entry.getValue())
final Signs sign = Signs.valueOf(entry.getKey().toUpperCase(Locale.ENGLISH)); {
if (sign != null && entry.getValue()) enabledSigns.add(sign.getSign());
{ signsEnabled = true;
enabledSigns.add(sign.getSign());
signsEnabled = true;
}
} }
} }
finally
final Map<String, Boolean> signs2 = new HashMap<String, Boolean>();
for (Signs sign : Signs.values())
{ {
unlock(); signs2.put(sign.toString(), enabledSigns.contains(sign.getSign()));
}
acquireWriteLock();
try
{
final Map<String, Boolean> signs = new HashMap<String, Boolean>();
for (Signs sign : Signs.values())
{
signs.put(sign.toString(), enabledSigns.contains(sign.getSign()));
}
getData().setSigns(signs);
}
finally
{
unlock();
} }
getData().setSigns(signs2);
queueSave();
} }
@Override @Override