summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsnowleo <schneeleo@gmail.com>2012-10-06 15:31:59 +0200
committersnowleo <schneeleo@gmail.com>2012-10-06 15:31:59 +0200
commit463c4ff62db553fc980545665a332ef7bbecdcc6 (patch)
tree2722e6cccc40023dfbd647ce0375fd6d604ae468
parentf2e31e56c560a94c87b75bf4f0a9c895ce83fe16 (diff)
downloadEssentials-463c4ff62db553fc980545665a332ef7bbecdcc6.tar
Essentials-463c4ff62db553fc980545665a332ef7bbecdcc6.tar.gz
Essentials-463c4ff62db553fc980545665a332ef7bbecdcc6.tar.lz
Essentials-463c4ff62db553fc980545665a332ef7bbecdcc6.tar.xz
Essentials-463c4ff62db553fc980545665a332ef7bbecdcc6.zip
Getting rid of locks, part one
-rw-r--r--Essentials/src/net/ess3/Jails.java6
-rw-r--r--Essentials/src/net/ess3/api/IUser.java3
-rw-r--r--Essentials/src/net/ess3/commands/Commandhome.java5
-rw-r--r--Essentials/src/net/ess3/commands/Commandmail.java2
-rw-r--r--Essentials/src/net/ess3/commands/Commandnick.java2
-rw-r--r--Essentials/src/net/ess3/commands/Commandsethome.java18
-rw-r--r--Essentials/src/net/ess3/economy/Worth.java45
-rw-r--r--Essentials/src/net/ess3/economy/WorthHolder.java5
-rw-r--r--Essentials/src/net/ess3/permissions/Permissions.java2
-rw-r--r--Essentials/src/net/ess3/settings/Commands.java12
-rw-r--r--Essentials/src/net/ess3/settings/Economy.java8
-rw-r--r--Essentials/src/net/ess3/settings/Jails.java22
-rw-r--r--Essentials/src/net/ess3/settings/Kit.java19
-rw-r--r--Essentials/src/net/ess3/settings/Kits.java24
-rw-r--r--Essentials/src/net/ess3/settings/Settings.java9
-rw-r--r--Essentials/src/net/ess3/settings/Spawns.java26
-rw-r--r--Essentials/src/net/ess3/settings/SpawnsHolder.java6
-rw-r--r--Essentials/src/net/ess3/settings/WorldOptions.java5
-rw-r--r--Essentials/src/net/ess3/settings/antibuild/Alert.java18
-rw-r--r--Essentials/src/net/ess3/settings/antibuild/AntiBuild.java18
-rw-r--r--Essentials/src/net/ess3/settings/antibuild/BlackList.java51
-rw-r--r--Essentials/src/net/ess3/settings/geoip/Database.java8
-rw-r--r--Essentials/src/net/ess3/settings/geoip/GeoIP.java2
-rw-r--r--Essentials/src/net/ess3/storage/YamlStorageReader.java2
-rw-r--r--Essentials/src/net/ess3/user/UserBase.java59
-rw-r--r--Essentials/src/net/ess3/user/UserData.java146
-rw-r--r--Essentials/src/net/ess3/utils/FormatUtil.java19
-rw-r--r--Essentials/test/net/ess3/StorageTest.java48
-rw-r--r--EssentialsGeoIP/src/net/ess3/geoip/ConfigHolder.java2
-rw-r--r--EssentialsSigns/src/net/ess3/signs/EssentialsSign.java6
-rw-r--r--EssentialsSigns/src/net/ess3/signs/SignBlockListener.java3
-rw-r--r--EssentialsSigns/src/net/ess3/signs/SignsPermissions.java40
32 files changed, 432 insertions, 209 deletions
diff --git a/Essentials/src/net/ess3/Jails.java b/Essentials/src/net/ess3/Jails.java
index 7dc513a67..f2de376ca 100644
--- a/Essentials/src/net/ess3/Jails.java
+++ b/Essentials/src/net/ess3/Jails.java
@@ -145,11 +145,7 @@ public class Jails extends AsyncStorageObjectHolder<net.ess3.settings.Jails> imp
acquireWriteLock();
try
{
- if (getData().getJails() == null)
- {
- getData().setJails(new HashMap<String, net.ess3.storage.StoredLocation>());
- }
- getData().getJails().put(jailName.toLowerCase(Locale.ENGLISH), new net.ess3.storage.StoredLocation(loc));
+ getData().addJail(jailName.toLowerCase(Locale.ENGLISH), loc);
}
finally
{
diff --git a/Essentials/src/net/ess3/api/IUser.java b/Essentials/src/net/ess3/api/IUser.java
index 800c8aa64..1f93aaaa3 100644
--- a/Essentials/src/net/ess3/api/IUser.java
+++ b/Essentials/src/net/ess3/api/IUser.java
@@ -1,6 +1,7 @@
package net.ess3.api;
import java.util.List;
+import java.util.Set;
import net.ess3.storage.IStorageObjectHolder;
import net.ess3.user.CooldownException;
import net.ess3.user.UserData;
@@ -77,7 +78,7 @@ public interface IUser extends OfflinePlayer, CommandSender, IStorageObjectHolde
void updateCompass();
- List<String> getHomes();
+ Set<String> getHomes();
void addMail(String string);
diff --git a/Essentials/src/net/ess3/commands/Commandhome.java b/Essentials/src/net/ess3/commands/Commandhome.java
index 73f2b1c82..730ef1a19 100644
--- a/Essentials/src/net/ess3/commands/Commandhome.java
+++ b/Essentials/src/net/ess3/commands/Commandhome.java
@@ -2,6 +2,7 @@ package net.ess3.commands;
import java.util.List;
import java.util.Locale;
+import java.util.Set;
import static net.ess3.I18n._;
import net.ess3.api.IUser;
import net.ess3.economy.Trade;
@@ -58,7 +59,7 @@ public class Commandhome extends EssentialsCommand
{
bed = null;
}
- final List<String> homes = player.getHomes();
+ final Set<String> homes = player.getHomes();
if (homes.isEmpty() && player.equals(user))
{
if (bed != null)
@@ -75,7 +76,7 @@ public class Commandhome extends EssentialsCommand
}
else if (homes.size() == 1 && player.equals(user))
{
- goHome(user, player, homes.get(0), charge);
+ goHome(user, player, homes.iterator().next(), charge);
}
else
{
diff --git a/Essentials/src/net/ess3/commands/Commandmail.java b/Essentials/src/net/ess3/commands/Commandmail.java
index 935a31803..d9d341e09 100644
--- a/Essentials/src/net/ess3/commands/Commandmail.java
+++ b/Essentials/src/net/ess3/commands/Commandmail.java
@@ -63,7 +63,7 @@ public class Commandmail extends EssentialsCommand
if (args.length >= 1 && "clear".equalsIgnoreCase(args[0]))
{
user.acquireWriteLock();
- user.getData().setMails(null);
+ user.getData().clearMails();
user.sendMessage(_("mailCleared"));
return;
}
diff --git a/Essentials/src/net/ess3/commands/Commandnick.java b/Essentials/src/net/ess3/commands/Commandnick.java
index 0be72fd81..8dda9fa99 100644
--- a/Essentials/src/net/ess3/commands/Commandnick.java
+++ b/Essentials/src/net/ess3/commands/Commandnick.java
@@ -75,7 +75,7 @@ public class Commandnick extends EssentialsCommand
}
else
{
- return FormatUtil.formatString(user, "essentials.nick", nick);
+ return FormatUtil.formatString(user, Permissions.NICK, nick);
}
}
diff --git a/Essentials/src/net/ess3/commands/Commandsethome.java b/Essentials/src/net/ess3/commands/Commandsethome.java
index 4f74e55dc..e9dba7e57 100644
--- a/Essentials/src/net/ess3/commands/Commandsethome.java
+++ b/Essentials/src/net/ess3/commands/Commandsethome.java
@@ -34,11 +34,7 @@ public class Commandsethome extends EssentialsCommand
|| (user.getHomes().contains(args[0].toLowerCase(Locale.ENGLISH))))
{
user.acquireWriteLock();
- if (user.getData().getHomes() == null)
- {
- user.getData().setHomes(new HashMap<String, net.ess3.storage.StoredLocation>());
- }
- user.getData().getHomes().put(args[0].toLowerCase(Locale.ENGLISH), new net.ess3.storage.StoredLocation(user.getPlayer().getLocation()));
+ user.getData().addHome(args[0].toLowerCase(Locale.ENGLISH), user.getPlayer().getLocation());
}
else
{
@@ -72,22 +68,14 @@ public class Commandsethome extends EssentialsCommand
}
usersHome.acquireWriteLock();
- if (usersHome.getData().getHomes() == null)
- {
- usersHome.getData().setHomes(new HashMap<String, net.ess3.storage.StoredLocation>());
- }
- usersHome.getData().getHomes().put(name, new net.ess3.storage.StoredLocation(user.getPlayer().getLocation()));
+ usersHome.getData().addHome(name, user.getPlayer().getLocation());
}
}
}
else
{
user.acquireWriteLock();
- if (user.getData().getHomes() == null)
- {
- user.getData().setHomes(new HashMap<String, net.ess3.storage.StoredLocation>());
- }
- user.getData().getHomes().put("home", new net.ess3.storage.StoredLocation(user.getPlayer().getLocation()));
+ user.getData().addHome("home", user.getPlayer().getLocation());
}
user.sendMessage(_("homeSet", user.getPlayer().getLocation().getWorld().getName(), user.getPlayer().getLocation().getBlockX(), user.getPlayer().getLocation().getBlockY(), user.getPlayer().getLocation().getBlockZ()));
diff --git a/Essentials/src/net/ess3/economy/Worth.java b/Essentials/src/net/ess3/economy/Worth.java
index c14873b22..546a35168 100644
--- a/Essentials/src/net/ess3/economy/Worth.java
+++ b/Essentials/src/net/ess3/economy/Worth.java
@@ -1,9 +1,13 @@
package net.ess3.economy;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import net.ess3.storage.EnchantmentLevel;
import net.ess3.storage.MapKeyType;
import net.ess3.storage.MapValueType;
@@ -18,16 +22,51 @@ public class Worth implements StorageObject
{
@MapKeyType(MaterialData.class)
@MapValueType(Double.class)
- private Map<MaterialData, Double> sell = new HashMap<MaterialData, Double>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Map<MaterialData, Double> sell;
+
+ public Map<MaterialData, Double> getSell()
+ {
+ return sell == null
+ ? Collections.<MaterialData, Double>emptyMap()
+ : Collections.unmodifiableMap(sell);
+ }
@MapKeyType(MaterialData.class)
@MapValueType(Double.class)
- private Map<MaterialData, Double> buy = new HashMap<MaterialData, Double>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Map<MaterialData, Double> buy;
+
+ public Map<MaterialData, Double> getBuy()
+ {
+ return buy == null
+ ? Collections.<MaterialData, Double>emptyMap()
+ : Collections.unmodifiableMap(buy);
+ }
@MapKeyType(EnchantmentLevel.class)
@MapValueType(Double.class)
- private Map<EnchantmentLevel, Double> enchantmentMultiplier = new HashMap<EnchantmentLevel, Double>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Map<EnchantmentLevel, Double> enchantmentMultiplier;
+
+ public Map<EnchantmentLevel, Double> getEnchantmentMultiplier()
+ {
+ return enchantmentMultiplier == null
+ ? Collections.<EnchantmentLevel, Double>emptyMap()
+ : Collections.unmodifiableMap(enchantmentMultiplier);
+ }
public Worth()
{
+ sell = new HashMap<MaterialData, Double>();
sell.put(new MaterialData(Material.APPLE, (byte)0), 1.0);
}
+
+ void setSellPrice(MaterialData data, double price)
+ {
+ Map<MaterialData, Double> sellMap = new HashMap<MaterialData, Double>(sell);
+ sellMap.put(data, price);
+ sell = sellMap;
+ }
}
diff --git a/Essentials/src/net/ess3/economy/WorthHolder.java b/Essentials/src/net/ess3/economy/WorthHolder.java
index 5b1f94736..736629f98 100644
--- a/Essentials/src/net/ess3/economy/WorthHolder.java
+++ b/Essentials/src/net/ess3/economy/WorthHolder.java
@@ -83,10 +83,7 @@ public class WorthHolder extends AsyncStorageObjectHolder<net.ess3.economy.Worth
{
acquireWriteLock();
try {
- if (getData().getSell() == null) {
- getData().setSell(new HashMap<MaterialData, Double>());
- }
- getData().getSell().put(itemStack.getData(), price);
+ getData().setSellPrice(itemStack.getData(), price);
} finally {
unlock();
}
diff --git a/Essentials/src/net/ess3/permissions/Permissions.java b/Essentials/src/net/ess3/permissions/Permissions.java
index cbbc22253..15017d4e3 100644
--- a/Essentials/src/net/ess3/permissions/Permissions.java
+++ b/Essentials/src/net/ess3/permissions/Permissions.java
@@ -152,4 +152,6 @@ public enum Permissions implements IPermission
public static DotStarPermission WARPS = new DotStarPermission("essentials.warps", PermissionDefault.TRUE);
public static DotStarPermission WARP_OVERWRITE = new DotStarPermission("essentials.warp.overwrite");
public static DotStarPermission WORLD = new DotStarPermission("essentials.world");
+ public static DotStarPermission NICK = new DotStarPermission("essentials.nick");
+ public static DotStarPermission SIGNS = new DotStarPermission("essentials.signs");
}
diff --git a/Essentials/src/net/ess3/settings/Commands.java b/Essentials/src/net/ess3/settings/Commands.java
index 5aeca1590..03629c3ca 100644
--- a/Essentials/src/net/ess3/settings/Commands.java
+++ b/Essentials/src/net/ess3/settings/Commands.java
@@ -1,9 +1,11 @@
package net.ess3.settings;
-import java.util.ArrayList;
import java.util.List;
+import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import net.ess3.settings.commands.*;
import net.ess3.storage.Comment;
import net.ess3.storage.ListType;
@@ -36,10 +38,14 @@ public class Commands implements StorageObject
"We should try to take priority over /god. If this doesn't work, use /essentials:god or /egod.",
"If god is set using WorldGuard, use /ungod to remove then use whichever you see fit."
})
- private List<String> overridden = new ArrayList<String>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private List<String> overridden = null;
@ListType
@Comment("Disabled commands will be completelly unavailable on the server.")
- private List<String> disabled = new ArrayList<String>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private List<String> disabled = null;
public boolean isDisabled(final String commandName)
{
diff --git a/Essentials/src/net/ess3/settings/Economy.java b/Essentials/src/net/ess3/settings/Economy.java
index ffbd57045..54315bca8 100644
--- a/Essentials/src/net/ess3/settings/Economy.java
+++ b/Essentials/src/net/ess3/settings/Economy.java
@@ -1,9 +1,11 @@
package net.ess3.settings;
-import java.util.HashMap;
import java.util.Map;
+import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import net.ess3.economy.Worth;
import net.ess3.storage.Comment;
import net.ess3.storage.MapValueType;
@@ -18,7 +20,9 @@ public class Economy implements StorageObject
private double startingBalance = 0.0;
@MapValueType(Double.class)
@Comment("Defines the cost to use the given commands PER USE")
- private Map<String, Double> commandCosts = new HashMap<String, Double>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Map<String, Double> commandCosts = null;
@Comment("Set this to a currency symbol you want to use.")
private String currencySymbol = "$";
diff --git a/Essentials/src/net/ess3/settings/Jails.java b/Essentials/src/net/ess3/settings/Jails.java
index 412e04f78..db8f5f9bc 100644
--- a/Essentials/src/net/ess3/settings/Jails.java
+++ b/Essentials/src/net/ess3/settings/Jails.java
@@ -1,12 +1,17 @@
package net.ess3.settings;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import net.ess3.storage.MapValueType;
import net.ess3.storage.StorageObject;
import net.ess3.storage.StoredLocation;
+import org.bukkit.Location;
@Data
@@ -14,5 +19,20 @@ import net.ess3.storage.StoredLocation;
public class Jails implements StorageObject
{
@MapValueType(StoredLocation.class)
- private Map<String, StoredLocation> jails = new HashMap<String, StoredLocation>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Map<String, StoredLocation> jails;
+
+ public Map<String, StoredLocation> getJails()
+ {
+ return jails == null
+ ? Collections.<String, StoredLocation>emptyMap()
+ : Collections.unmodifiableMap(jails);
+ }
+
+ public void addJail(String name, Location loc) {
+ Map<String, StoredLocation> jailMap = new HashMap<String, StoredLocation>(getJails());
+ jailMap.put(name, new StoredLocation(loc));
+ jails = jailMap;
+ }
}
diff --git a/Essentials/src/net/ess3/settings/Kit.java b/Essentials/src/net/ess3/settings/Kit.java
index 822209eda..4b671f25c 100644
--- a/Essentials/src/net/ess3/settings/Kit.java
+++ b/Essentials/src/net/ess3/settings/Kit.java
@@ -1,9 +1,14 @@
package net.ess3.settings;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
import java.util.List;
+import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import net.ess3.storage.ListType;
import net.ess3.storage.StorageObject;
import org.bukkit.inventory.ItemStack;
@@ -14,7 +19,19 @@ import org.bukkit.inventory.ItemStack;
public class Kit implements StorageObject
{
@ListType(ItemStack.class)
- private List<ItemStack> items = new ArrayList<ItemStack>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private List<ItemStack> items;
private Double delay;
+
+ public List<ItemStack> getItems()
+ {
+ return items == null
+ ? Collections.<ItemStack>emptyList()
+ : Collections.unmodifiableList(items);
+ }
+ public void setItems(Collection<ItemStack> items) {
+ this.items = new ArrayList<ItemStack>(items);
+ }
}
diff --git a/Essentials/src/net/ess3/settings/Kits.java b/Essentials/src/net/ess3/settings/Kits.java
index 79abaea59..1264c8e55 100644
--- a/Essentials/src/net/ess3/settings/Kits.java
+++ b/Essentials/src/net/ess3/settings/Kits.java
@@ -1,9 +1,14 @@
package net.ess3.settings;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import net.ess3.storage.MapValueType;
import net.ess3.storage.StorageObject;
import org.bukkit.Material;
@@ -18,11 +23,22 @@ public class Kits implements StorageObject
{
final Kit kit = new Kit();
kit.setDelay(10.0);
- kit.getItems().add(new ItemStack(Material.DIAMOND_SPADE, 1));
- kit.getItems().add(new ItemStack(Material.DIAMOND_PICKAXE, 1));
- kit.getItems().add(new ItemStack(Material.DIAMOND_AXE, 1));
+ kit.setItems(Arrays.<ItemStack>asList(
+ new ItemStack(Material.DIAMOND_SPADE, 1),
+ new ItemStack(Material.DIAMOND_PICKAXE, 1),
+ new ItemStack(Material.DIAMOND_AXE, 1)));
+ kits = new HashMap<String, Kit>();
kits.put("tools", kit);
}
@MapValueType(Kit.class)
- private Map<String, Kit> kits = new HashMap<String, Kit>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Map<String, Kit> kits;
+
+ public Map<String, Kit> getKits()
+ {
+ return kits == null
+ ? Collections.<String, Kit>emptyMap()
+ : Collections.unmodifiableMap(kits);
+ }
}
diff --git a/Essentials/src/net/ess3/settings/Settings.java b/Essentials/src/net/ess3/settings/Settings.java
index f5d87ba20..967d4bc18 100644
--- a/Essentials/src/net/ess3/settings/Settings.java
+++ b/Essentials/src/net/ess3/settings/Settings.java
@@ -2,8 +2,11 @@ package net.ess3.settings;
import java.util.HashMap;
import java.util.Map;
+import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import net.ess3.storage.Comment;
import net.ess3.storage.MapValueType;
import net.ess3.storage.StorageObject;
@@ -58,13 +61,15 @@ public class Settings implements StorageObject
"##########################################################"
})
@MapValueType(WorldOptions.class)
- private Map<String, WorldOptions> worlds = new HashMap<String, WorldOptions>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Map<String, WorldOptions> worlds;
public WorldOptions getWorldOptions(final String name)
{
if (worlds == null)
{
- worlds = new HashMap<String, WorldOptions>();
+ return new WorldOptions();
}
final WorldOptions options = worlds.get(name);
return (options == null) ? new WorldOptions() : options;
diff --git a/Essentials/src/net/ess3/settings/Spawns.java b/Essentials/src/net/ess3/settings/Spawns.java
index c01f366e2..2ebd5b283 100644
--- a/Essentials/src/net/ess3/settings/Spawns.java
+++ b/Essentials/src/net/ess3/settings/Spawns.java
@@ -1,13 +1,18 @@
package net.ess3.settings;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import net.ess3.storage.Comment;
import net.ess3.storage.MapValueType;
import net.ess3.storage.StorageObject;
import net.ess3.storage.StoredLocation;
+import org.bukkit.Location;
@Data
@@ -29,12 +34,29 @@ public class Spawns implements StorageObject
"Set this to highest, if you want to force EssentialsSpawn to handle the respawning"
})
private String respawnPriority = "normal";
- @Comment({
+ @Comment(
+ {
"When we spawn for the first time, which spawnpoint do we use?",
"Set to none if you want to use the spawn point of the world."
})
private String newbieSpawn = "none";
@Comment("List of all spawnpoints")
@MapValueType(StoredLocation.class)
- private Map<String, StoredLocation> spawns = new HashMap<String, StoredLocation>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Map<String, StoredLocation> spawns;
+
+ public Map<String, StoredLocation> getSpawns()
+ {
+ return spawns == null
+ ? Collections.<String, StoredLocation>emptyMap()
+ : Collections.unmodifiableMap(spawns);
+ }
+
+ public void addSpawn(String name, Location location)
+ {
+ Map<String, StoredLocation> newspawns = new HashMap<String, StoredLocation>(getSpawns());
+ newspawns.put(name, new StoredLocation(location));
+ spawns = newspawns;
+ }
}
diff --git a/Essentials/src/net/ess3/settings/SpawnsHolder.java b/Essentials/src/net/ess3/settings/SpawnsHolder.java
index c07191752..0adc733c6 100644
--- a/Essentials/src/net/ess3/settings/SpawnsHolder.java
+++ b/Essentials/src/net/ess3/settings/SpawnsHolder.java
@@ -60,11 +60,7 @@ public class SpawnsHolder extends AsyncStorageObjectHolder<Spawns> implements IE
acquireWriteLock();
try
{
- if (getData().getSpawns() == null)
- {
- getData().setSpawns(new HashMap<String, net.ess3.storage.StoredLocation>());
- }
- getData().getSpawns().put(group.toLowerCase(Locale.ENGLISH), new net.ess3.storage.StoredLocation(loc));
+ getData().addSpawn(group, loc);
}
finally
{
diff --git a/Essentials/src/net/ess3/settings/WorldOptions.java b/Essentials/src/net/ess3/settings/WorldOptions.java
index e6620e614..fb0da4e07 100644
--- a/Essentials/src/net/ess3/settings/WorldOptions.java
+++ b/Essentials/src/net/ess3/settings/WorldOptions.java
@@ -2,8 +2,11 @@ package net.ess3.settings;
import java.util.HashMap;
import java.util.Map;
+import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import net.ess3.storage.Comment;
import net.ess3.storage.StorageObject;
import org.bukkit.entity.EntityType;
@@ -29,6 +32,8 @@ public class WorldOptions implements StorageObject
private boolean godmode = true;
@Comment("Prevent creatures spawning")
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
private Map<EntityType, Boolean> creatureSpawn = new HashMap<EntityType, Boolean>();
public boolean getPreventSpawn(String creatureName)
diff --git a/Essentials/src/net/ess3/settings/antibuild/Alert.java b/Essentials/src/net/ess3/settings/antibuild/Alert.java
index 65a222575..80294d294 100644
--- a/Essentials/src/net/ess3/settings/antibuild/Alert.java
+++ b/Essentials/src/net/ess3/settings/antibuild/Alert.java
@@ -2,8 +2,11 @@ package net.ess3.settings.antibuild;
import java.util.HashSet;
import java.util.Set;
+import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import net.ess3.storage.Comment;
import net.ess3.storage.ListType;
import net.ess3.storage.StorageObject;
@@ -16,17 +19,26 @@ public class Alert implements StorageObject
{
@Comment("For which block types would you like to be alerted?")
@ListType(Material.class)
- private Set<Material> alertOnPlacement = new HashSet<Material>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Set<Material> alertOnPlacement;
@ListType(Material.class)
- private Set<Material> alertOnUse = new HashSet<Material>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Set<Material> alertOnUse;
@ListType(Material.class)
- private Set<Material> alertOnBreak = new HashSet<Material>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Set<Material> alertOnBreak;
public Alert()
{
//todo full default list
+ alertOnPlacement = new HashSet<Material>();
alertOnPlacement.add(Material.GLASS);
+ alertOnUse = new HashSet<Material>();
alertOnUse.add(Material.LAVA);
+ alertOnBreak = new HashSet<Material>();
alertOnBreak.add(Material.OBSIDIAN);
}
} \ No newline at end of file
diff --git a/Essentials/src/net/ess3/settings/antibuild/AntiBuild.java b/Essentials/src/net/ess3/settings/antibuild/AntiBuild.java
index b0eb48636..59f90466c 100644
--- a/Essentials/src/net/ess3/settings/antibuild/AntiBuild.java
+++ b/Essentials/src/net/ess3/settings/antibuild/AntiBuild.java
@@ -1,11 +1,8 @@
package net.ess3.settings.antibuild;
-import java.util.HashSet;
-import java.util.Set;
import lombok.Data;
import lombok.EqualsAndHashCode;
import net.ess3.storage.*;
-import org.bukkit.Material;
@Data
@@ -26,14 +23,11 @@ public class AntiBuild implements StorageObject
"Setting to false means EssentialsAntiBuild will never prevent you from using"
})
private boolean use = true;
-
- @Comment({"Should we tell people they are not allowed to build"})
- private boolean warnOnBuildDisallow = true;
-
-
- Alert alert = new Alert();
-
+ @Comment(
+ {
+ "Should we tell people they are not allowed to build"
+ })
+ private boolean warnOnBuildDisallow = true;
+ Alert alert = new Alert();
BlackList blacklist = new BlackList();
-
-
}
diff --git a/Essentials/src/net/ess3/settings/antibuild/BlackList.java b/Essentials/src/net/ess3/settings/antibuild/BlackList.java
index c14d39664..8c9b82f0b 100644
--- a/Essentials/src/net/ess3/settings/antibuild/BlackList.java
+++ b/Essentials/src/net/ess3/settings/antibuild/BlackList.java
@@ -2,8 +2,11 @@ package net.ess3.settings.antibuild;
import java.util.HashSet;
import java.util.Set;
+import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import net.ess3.storage.Comment;
import net.ess3.storage.ListType;
import net.ess3.storage.StorageObject;
@@ -14,23 +17,39 @@ import org.bukkit.Material;
@EqualsAndHashCode(callSuper = false)
public class BlackList implements StorageObject
{
- @Comment({"Which blocks should people be prevented from placing"})
- @ListType(Material.class)
- private Set<Material> placement = new HashSet<Material>();
-
- @Comment({"Which items should people be prevented from using"})
- @ListType(Material.class)
- private Set<Material> usage = new HashSet<Material>();
-
- @Comment({"Which blocks should people be prevented from breaking"})
- @ListType(Material.class)
- private Set<Material> breaking = new HashSet<Material>();
-
- @Comment({"Which blocks should not be pushed by pistons"})
- @ListType(Material.class)
- private Set<Material> piston = new HashSet<Material>();
+ @Comment(
+ {
+ "Which blocks should people be prevented from placing"
+ })
+ @ListType(Material.class)
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Set<Material> placement;
+ @Comment(
+ {
+ "Which items should people be prevented from using"
+ })
+ @ListType(Material.class)
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Set<Material> usage;
+ @Comment(
+ {
+ "Which blocks should people be prevented from breaking"
+ })
+ @ListType(Material.class)
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Set<Material> breaking;
+ @Comment(
+ {
+ "Which blocks should not be pushed by pistons"
+ })
+ @ListType(Material.class)
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Set<Material> piston;
-
public BlackList()
{
//todo defaults
diff --git a/Essentials/src/net/ess3/settings/geoip/Database.java b/Essentials/src/net/ess3/settings/geoip/Database.java
index 5791853a3..06c3821f8 100644
--- a/Essentials/src/net/ess3/settings/geoip/Database.java
+++ b/Essentials/src/net/ess3/settings/geoip/Database.java
@@ -9,8 +9,8 @@ import net.ess3.storage.StorageObject;
@EqualsAndHashCode(callSuper = false)
public class Database implements StorageObject
{
- boolean showCities = false;
- boolean downloadIfMissing = true;
- String downloadUrlCity = "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz";
- String downloadUrl = "http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz";
+ private boolean showCities = false;
+ private boolean downloadIfMissing = true;
+ private String downloadUrlCity = "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz";
+ private String downloadUrl = "http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz";
}
diff --git a/Essentials/src/net/ess3/settings/geoip/GeoIP.java b/Essentials/src/net/ess3/settings/geoip/GeoIP.java
index 04f6f5a77..e265b3319 100644
--- a/Essentials/src/net/ess3/settings/geoip/GeoIP.java
+++ b/Essentials/src/net/ess3/settings/geoip/GeoIP.java
@@ -10,6 +10,6 @@ import net.ess3.storage.StorageObject;
public class GeoIP implements StorageObject
{
private Database database = new Database();
- private boolean showOnWhois = true;
private boolean showOnLogin = true;
+ private boolean showOnWhois = true;
}
diff --git a/Essentials/src/net/ess3/storage/YamlStorageReader.java b/Essentials/src/net/ess3/storage/YamlStorageReader.java
index 03e40fe1e..8359ccd4b 100644
--- a/Essentials/src/net/ess3/storage/YamlStorageReader.java
+++ b/Essentials/src/net/ess3/storage/YamlStorageReader.java
@@ -8,6 +8,7 @@ import net.ess3.api.IPlugin;
import org.yaml.snakeyaml.TypeDescription;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
+import org.yaml.snakeyaml.introspector.BeanAccess;
public class YamlStorageReader implements IStorageReader
@@ -30,6 +31,7 @@ public class YamlStorageReader implements IStorageReader
if (yaml == null)
{
yaml = new Yaml(prepareConstructor(clazz));
+ yaml.setBeanAccess(BeanAccess.FIELD);
PREPARED_YAMLS.put(clazz, yaml);
}
ReentrantLock lock;
diff --git a/Essentials/src/net/ess3/user/UserBase.java b/Essentials/src/net/ess3/user/UserBase.java
index 2b0b7ae21..fb84119d2 100644
--- a/Essentials/src/net/ess3/user/UserBase.java
+++ b/Essentials/src/net/ess3/user/UserBase.java
@@ -165,12 +165,7 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
acquireReadLock();
try
{
- if (getData().getTimestamps() == null)
- {
- return 0;
- }
- Long ts = getData().getTimestamps().get(name);
- return ts == null ? 0 : ts;
+ return getData().getTimestamp(name);
}
finally
{
@@ -183,11 +178,7 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
acquireWriteLock();
try
{
- if (getData().getTimestamps() == null)
- {
- getData().setTimestamps(new HashMap<UserData.TimestampType, Long>());
- }
- getData().getTimestamps().put(name, value);
+ getData().setTimestamp(name, value);
}
finally
{
@@ -248,13 +239,7 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
acquireWriteLock();
try
{
- Map<String, net.ess3.storage.StoredLocation> homes = getData().getHomes();
- if (homes == null)
- {
- homes = new HashMap<String, net.ess3.storage.StoredLocation>();
- getData().setHomes(homes);
- }
- homes.put(Util.sanitizeKey(name), new net.ess3.storage.StoredLocation(loc));
+ getData().addHome(Util.sanitizeKey(name), loc);
}
finally
{
@@ -351,18 +336,7 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
acquireWriteLock();
try
{
- if (getData().getIgnore() == null)
- {
- getData().setIgnore(new HashSet<String>());
- }
- if (set)
- {
- getData().getIgnore().add(user.getName().toLowerCase(Locale.ENGLISH));
- }
- else
- {
- getData().getIgnore().remove(user.getName().toLowerCase(Locale.ENGLISH));
- }
+ getData().setIgnore(user.getName().toLowerCase(Locale.ENGLISH), set);
}
finally
{
@@ -375,11 +349,7 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
acquireWriteLock();
try
{
- if (getData().getMails() == null)
- {
- getData().setMails(new ArrayList<String>());
- }
- getData().getMails().add(string);
+ getData().addMail(string);
}
finally
{
@@ -392,14 +362,7 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
acquireReadLock();
try
{
- if (getData().getMails() == null)
- {
- return Collections.emptyList();
- }
- else
- {
- return new ArrayList<String>(getData().getMails());
- }
+ return getData().getMails();
}
finally
{
@@ -483,16 +446,12 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem
}
}
- public List<String> getHomes()
+ public Set<String> getHomes()
{
acquireReadLock();
try
- {
- if (getData().getHomes() == null)
- {
- return null;
- }
- return new ArrayList<String>(getData().getHomes().keySet());
+ {
+ return getData().getHomes().keySet();
}
finally
{
diff --git a/Essentials/src/net/ess3/user/UserData.java b/Essentials/src/net/ess3/user/UserData.java
index e5e71099c..b0ed2c03b 100644
--- a/Essentials/src/net/ess3/user/UserData.java
+++ b/Essentials/src/net/ess3/user/UserData.java
@@ -1,13 +1,16 @@
package net.ess3.user;
import java.util.*;
+import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import net.ess3.storage.*;
+import org.bukkit.Location;
import org.bukkit.Material;
-
@Data
@EqualsAndHashCode(callSuper = false)
public class UserData implements StorageObject
@@ -19,23 +22,77 @@ public class UserData implements StorageObject
private String nickname;
private Double money;
@MapValueType(StoredLocation.class)
- private Map<String, StoredLocation> homes = new HashMap<String, StoredLocation>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Map<String, StoredLocation> homes;
+
+ public Map<String, StoredLocation> getHomes()
+ {
+ return homes == null
+ ? Collections.<String, StoredLocation>emptyMap()
+ : Collections.unmodifiableMap(homes);
+ }
@ListType(Material.class)
- private Set<Material> unlimited = new HashSet<Material>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Set<Material> unlimited;
+
+ public Set<Material> getUnlimited()
+ {
+ return unlimited == null
+ ? Collections.<Material>emptySet()
+ : Collections.unmodifiableSet(unlimited);
+ }
@MapValueType(List.class)
@MapKeyType(Material.class)
- private Map<Material, List<String>> powerTools = new HashMap<Material, List<String>>();
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Map<Material, List<String>> powerTools;
+
+ public Map<Material, List<String>> getPowerTools()
+ {
+ return powerTools == null
+ ? Collections.<Material, List<String>>emptyMap()
+ : Collections.unmodifiableMap(powerTools);
+ }
private StoredLocation lastLocation;
@MapKeyType(TimestampType.class)
@MapValueType(Long.class)
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
private Map<TimestampType, Long> timestamps = new HashMap<TimestampType, Long>();
+
+ public Map<TimestampType, Long> getTimestamps()
+ {
+ return timestamps == null
+ ? Collections.<TimestampType, Long>emptyMap()
+ : Collections.unmodifiableMap(timestamps);
+ }
private String jail;
@ListType
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
private List<String> mails;
+
+ public List<String> getMails()
+ {
+ return mails == null
+ ? Collections.<String>emptyList()
+ : Collections.unmodifiableList(mails);
+ }
private Inventory inventory;
private boolean teleportEnabled;
@ListType
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
private Set<String> ignore;
+
+ public Set<String> getIgnore()
+ {
+ return ignore == null
+ ? Collections.<String>emptySet()
+ : Collections.unmodifiableSet(ignore);
+ }
private boolean godmode;
private boolean muted;
private boolean jailed;
@@ -53,29 +110,45 @@ public class UserData implements StorageObject
timestamps.put(TimestampType.JAIL, Long.MIN_VALUE);
}
+ public long getTimestamp(TimestampType type)
+ {
+ Long val = getTimestamps().get(type);
+ return val == null ? 0 : val;
+ }
+
+ public void setTimestamp(TimestampType type, Long value)
+ {
+ Map<TimestampType, Long> ts = new HashMap<TimestampType, Long>(getTimestamps());
+ ts.put(type, value);
+ timestamps = ts;
+ }
+
public boolean hasUnlimited(Material mat)
{
return unlimited != null && unlimited.contains(mat);
}
-
+
public void setUnlimited(Material mat, boolean state)
{
- if (unlimited.contains(mat))
+ if (!state && unlimited.contains(mat))
{
- unlimited.remove(mat);
+ Set<Material> unlimitedSet = new HashSet<Material>(getUnlimited());
+ unlimitedSet.remove(mat);
+ unlimited = unlimitedSet;
}
- if (state)
+ if (state && !unlimited.contains(mat))
{
- unlimited.add(mat);
+ Set<Material> unlimitedSet = new HashSet<Material>(getUnlimited());
+ unlimitedSet.add(mat);
+ unlimited = unlimitedSet;
}
}
public List<String> getPowertool(Material mat)
{
- return powerTools == null ? Collections.<String>emptyList() : powerTools.get(mat);
+ return powerTools == null ? Collections.<String>emptyList() : Collections.unmodifiableList(powerTools.get(mat));
}
-
-
+
public boolean hasPowerTools()
{
return powerTools != null && !powerTools.isEmpty();
@@ -83,11 +156,9 @@ public class UserData implements StorageObject
public void setPowertool(Material mat, List<String> commands)
{
- if (powerTools == null)
- {
- powerTools = new HashMap<Material, List<String>>();
- }
- powerTools.put(mat, commands);
+ Map<Material, List<String>> powerToolMap = new HashMap<Material, List<String>>(getPowerTools());
+ powerToolMap.put(mat, commands);
+ powerTools = powerToolMap;
}
public void clearAllPowertools()
@@ -95,12 +166,49 @@ public class UserData implements StorageObject
powerTools = null;
}
+ public void addHome(String name, Location location)
+ {
+ Map<String, StoredLocation> homeMap = new HashMap<String, StoredLocation>(getHomes());
+ homeMap.put(name, new StoredLocation(location));
+ homes = homeMap;
+ }
+
public void removeHome(String home)
{
- if (homes == null)
+ if (homes == null || !homes.containsKey(home))
{
return;
}
- homes.remove(home);
+ Map<String, StoredLocation> homeMap = new HashMap<String, StoredLocation>(getHomes());
+ homeMap.remove(home);
+ homes = homeMap;
+ }
+
+ public void addMail(String mail)
+ {
+ List<String> mailList = new ArrayList<String>(getMails());
+ mailList.add(mail);
+ mails = mailList;
+ }
+
+ public void clearMails()
+ {
+ mails = null;
+ }
+
+ public void setIgnore(String name, boolean state)
+ {
+ if (state && !ignore.contains(name))
+ {
+ Set<String> ignoreSet = new HashSet<String>(getIgnore());
+ ignoreSet.add(name);
+ ignore = ignoreSet;
+ }
+ if (!state && ignore.contains(name))
+ {
+ Set<String> ignoreSet = new HashSet<String>(getIgnore());
+ ignoreSet.remove(name);
+ ignore = ignoreSet;
+ }
}
}
diff --git a/Essentials/src/net/ess3/utils/FormatUtil.java b/Essentials/src/net/ess3/utils/FormatUtil.java
index f84368901..a00e43a47 100644
--- a/Essentials/src/net/ess3/utils/FormatUtil.java
+++ b/Essentials/src/net/ess3/utils/FormatUtil.java
@@ -1,6 +1,5 @@
package net.ess3.utils;
-import de.bananaco.bpermissions.imp.Permissions;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
@@ -10,8 +9,11 @@ import static net.ess3.I18n._;
import net.ess3.api.IEssentials;
import net.ess3.api.ISettings;
import net.ess3.api.IUser;
+import net.ess3.permissions.DotStarPermission;
-public class FormatUtil {
+
+public class FormatUtil
+{
static final transient Pattern REPLACE_COLOR_PATTERN = Pattern.compile("&([0-9a-f])");
static final transient Pattern REPLACE_MAGIC_PATTERN = Pattern.compile("&(k)");
static final transient Pattern REPLACE_PATTERN = Pattern.compile("&([0-9a-fk-or])");
@@ -74,14 +76,14 @@ public class FormatUtil {
return REPLACE_PATTERN.matcher(input).replaceAll("\u00a7$1");
}
- public static String formatString(final IUser user, final String permBase, final String input)
+ public static String formatString(final IUser user, final DotStarPermission permBase, final String input)
{
if (input == null)
{
return null;
}
String message;
- if (Permissions.hasPermission(user.getPlayer(), permBase + ".color"))
+ if (permBase.isAuthorized(user.getPlayer(), "color"))
{
message = replaceColor(input, REPLACE_COLOR_PATTERN);
}
@@ -89,7 +91,7 @@ public class FormatUtil {
{
message = stripColor(input, VANILLA_COLOR_PATTERN);
}
- if (Permissions.hasPermission(user.getPlayer(), permBase + ".magic"))
+ if (permBase.isAuthorized(user.getPlayer(), "magic"))
{
message = replaceColor(message, REPLACE_MAGIC_PATTERN);
}
@@ -97,7 +99,7 @@ public class FormatUtil {
{
message = stripColor(message, VANILLA_MAGIC_PATTERN);
}
- if (Permissions.hasPermission(user.getPlayer(), permBase + ".format"))
+ if (permBase.isAuthorized(user.getPlayer(), "format"))
{
message = replaceColor(message, REPLACE_FORMAT_PATTERN);
}
@@ -108,14 +110,14 @@ public class FormatUtil {
return message;
}
- public static String formatMessage(final IUser user, final String permBase, final String input)
+ public static String formatMessage(final IUser user, final DotStarPermission permBase, final String input)
{
if (input == null)
{
return null;
}
String message = formatString(user, permBase, input);
- if (!Permissions.hasPermission(user.getPlayer(), permBase + ".url"))
+ if (!permBase.isAuthorized(user.getPlayer(), "url"))
{
message = blockURL(message);
}
@@ -147,5 +149,4 @@ public class FormatUtil {
}
return str;
}
-
}
diff --git a/Essentials/test/net/ess3/StorageTest.java b/Essentials/test/net/ess3/StorageTest.java
index 8274f0e91..723b76487 100644
--- a/Essentials/test/net/ess3/StorageTest.java
+++ b/Essentials/test/net/ess3/StorageTest.java
@@ -2,6 +2,7 @@ package net.ess3;
import java.io.*;
import net.ess3.settings.Settings;
+import net.ess3.settings.geoip.GeoIP;
import net.ess3.storage.ObjectLoadException;
import net.ess3.storage.StorageObject;
import net.ess3.storage.YamlStorageReader;
@@ -48,7 +49,7 @@ public class StorageTest extends EssentialsTest
System.out.println(settings2.toString());
ext.mark("reload settings");
System.out.println(ext.end());
- //assertEquals("Default and rewritten config should be equal", settings, settings2);
+ assertEquals("Default and rewritten config should be equal", settings, settings2);
//that assertion fails, because empty list and maps return as null
}
catch (ObjectLoadException ex)
@@ -75,7 +76,7 @@ public class StorageTest extends EssentialsTest
for (int j = 0; j < 10000; j++)
{
- userdata.getHomes().put("home", new net.ess3.storage.StoredLocation(new Location(world, j, j, j)));
+ userdata.addHome("home", new Location(world, j, j, j));
}
ext.mark("change home 10000 times");
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -109,6 +110,49 @@ public class StorageTest extends EssentialsTest
}
}
+
+ @Test
+ public void testGeoIp()
+ {
+ try
+ {
+ assertTrue(StorageObject.class.isAssignableFrom(Settings.class));
+ ExecuteTimer ext = new ExecuteTimer();
+ ext.start();
+ final ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]);
+ final Reader reader = new InputStreamReader(bais);
+ GeoIP geoip = new YamlStorageReader(reader, null).load(GeoIP.class);
+ ext.mark("load empty geoip");
+ final ByteArrayInputStream bais3 = new ByteArrayInputStream(new byte[0]);
+ final Reader reader3 = new InputStreamReader(bais3);
+ final GeoIP geoip3 = new YamlStorageReader(reader3, null).load(GeoIP.class);
+ ext.mark("load empty geoip (class cached)");
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ final PrintWriter writer = new PrintWriter(baos);
+ //geoip = geoip.withDatabase(geoip.getDatabase().withDownloadIfMissing(false));
+ new YamlStorageWriter(writer).save(geoip);
+ writer.close();
+ ext.mark("write geoip");
+ byte[] written = baos.toByteArray();
+ String writtenStr = new String(written);
+ System.out.println(writtenStr);
+ //writtenStr = writtenStr.replace("downloadIfMissing: true", "downloadIfMissing: false");
+ System.out.println(writtenStr);
+ final ByteArrayInputStream bais2 = new ByteArrayInputStream(writtenStr.getBytes());
+ final Reader reader2 = new InputStreamReader(bais2);
+ final GeoIP geoip2 = new YamlStorageReader(reader2, null).load(GeoIP.class);
+ System.out.println(geoip.toString());
+ System.out.println(geoip2.toString());
+ ext.mark("reload geoip");
+ System.out.println(ext.end());
+ assertEquals("Default and rewritten config should be equal", geoip, geoip2);
+ //that assertion fails, because empty list and maps return as null
+ }
+ catch (ObjectLoadException ex)
+ {
+ fail(ex.getMessage());
+ }
+ }
/*@Test
public void testOldUserdata()
diff --git a/EssentialsGeoIP/src/net/ess3/geoip/ConfigHolder.java b/EssentialsGeoIP/src/net/ess3/geoip/ConfigHolder.java
index 068a1ba45..64c4c3206 100644
--- a/EssentialsGeoIP/src/net/ess3/geoip/ConfigHolder.java
+++ b/EssentialsGeoIP/src/net/ess3/geoip/ConfigHolder.java
@@ -16,7 +16,7 @@ public class ConfigHolder extends AsyncStorageObjectHolder<GeoIP>
{
super(ess, GeoIP.class);
this.geoip = geoip;
- onReload();
+ onReload(true);
}
@Override
diff --git a/EssentialsSigns/src/net/ess3/signs/EssentialsSign.java b/EssentialsSigns/src/net/ess3/signs/EssentialsSign.java
index ad48074fb..1a229a8c8 100644
--- a/EssentialsSigns/src/net/ess3/signs/EssentialsSign.java
+++ b/EssentialsSigns/src/net/ess3/signs/EssentialsSign.java
@@ -34,7 +34,7 @@ public class EssentialsSign
{
final ISign sign = new EventSign(event);
final IUser user = ess.getUserMap().getUser(event.getPlayer());
- if (!SignsPermissions.getCreatePermission(signName).isAuthorized(user))
+ if (!SignsPermissions.CREATE.isAuthorized(user, signName))
{
// Return true, so other plugins can use the same sign title, just hope
// they won't change it to ยง1[Signname]
@@ -83,7 +83,7 @@ public class EssentialsSign
final IUser user = ess.getUserMap().getUser(player);
try
{
- return SignsPermissions.getUsePermission(signName).isAuthorized(user)
+ return SignsPermissions.USE.isAuthorized(user, signName)
&& onSignInteract(sign, user, getUsername(user), ess);
}
catch (ChargeException ex)
@@ -104,7 +104,7 @@ public class EssentialsSign
final IUser user = ess.getUserMap().getUser(player);
try
{
- return SignsPermissions.getBreakPermission(signName).isAuthorized(user)
+ return SignsPermissions.BREAK.isAuthorized(user, signName)
&& onSignBreak(sign, user, getUsername(user), ess);
}
catch (SignException ex)
diff --git a/EssentialsSigns/src/net/ess3/signs/SignBlockListener.java b/EssentialsSigns/src/net/ess3/signs/SignBlockListener.java
index ac44e0a61..ba528006f 100644
--- a/EssentialsSigns/src/net/ess3/signs/SignBlockListener.java
+++ b/EssentialsSigns/src/net/ess3/signs/SignBlockListener.java
@@ -6,6 +6,7 @@ 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.utils.FormatUtil;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -92,7 +93,7 @@ public class SignBlockListener implements Listener
for (int i = 0; i < 4; i++)
{
- event.setLine(i, FormatUtil.formatString(user, "essentials.signs", event.getLine(i)));
+ event.setLine(i, FormatUtil.formatString(user, Permissions.SIGNS, event.getLine(i)));
}
for (Signs signs : Signs.values())
diff --git a/EssentialsSigns/src/net/ess3/signs/SignsPermissions.java b/EssentialsSigns/src/net/ess3/signs/SignsPermissions.java
index 21c736b7d..2f45de72d 100644
--- a/EssentialsSigns/src/net/ess3/signs/SignsPermissions.java
+++ b/EssentialsSigns/src/net/ess3/signs/SignsPermissions.java
@@ -5,6 +5,7 @@ import net.ess3.permissions.BasePermission;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
+import net.ess3.permissions.DotStarPermission;
public class SignsPermissions
@@ -12,40 +13,7 @@ public class SignsPermissions
public static final IPermission COLOR = new BasePermission("essentials.signs.", "color");
public static final IPermission PROTECTION_OVERRIDE = new BasePermission("essentials.signs.protection.", "override");
public static final IPermission TRADE_OVERRIDE = new BasePermission("essentials.signs.trade.", "override");
- private static Map<String, IPermission> createpermissions = new HashMap<String, IPermission>();
-
- public static IPermission getCreatePermission(final String signName)
- {
- IPermission perm = createpermissions.get(signName);
- if (perm == null)
- {
- perm = new BasePermission("essentials.signs.create.", signName.toLowerCase(Locale.ENGLISH));
- createpermissions.put(signName, perm);
- }
- return perm;
- }
- private static Map<String, IPermission> usepermissions = new HashMap<String, IPermission>();
-
- public static IPermission getUsePermission(final String signName)
- {
- IPermission perm = usepermissions.get(signName);
- if (perm == null)
- {
- perm = new BasePermission("essentials.signs.use.", signName.toLowerCase(Locale.ENGLISH));
- usepermissions.put(signName, perm);
- }
- return perm;
- }
- private static Map<String, IPermission> breakpermissions = new HashMap<String, IPermission>();
-
- public static IPermission getBreakPermission(final String signName)
- {
- IPermission perm = breakpermissions.get(signName);
- if (perm == null)
- {
- perm = new BasePermission("essentials.signs.break.", signName.toLowerCase(Locale.ENGLISH));
- breakpermissions.put(signName, perm);
- }
- return perm;
- }
+ public static final DotStarPermission CREATE = new DotStarPermission("essentials.signs.create");
+ public static final DotStarPermission USE = new DotStarPermission("essentials.signs.use");
+ public static final DotStarPermission BREAK = new DotStarPermission("essentials.signs.break");
}