From d3302dea00d9edb1fc0896382c2cd4a53e49f382 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 17:11:15 +0200 Subject: [PATCH 01/43] Protect detector/powered rails --- .../protect/EssentialsProtectEntityListener.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java index d96da20a7..8dd3335f5 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java @@ -263,7 +263,12 @@ public class EssentialsProtectEntityListener extends EntityListener for (Block block : event.blockList()) { - if ((block.getType() == Material.RAILS || block.getRelative(BlockFace.UP).getType() == Material.RAILS) + if ((block.getRelative(BlockFace.UP).getType() == Material.RAILS + || block.getType() == Material.RAILS + || block.getRelative(BlockFace.UP).getType() == Material.POWERED_RAIL + || block.getType() == Material.POWERED_RAIL + || block.getRelative(BlockFace.UP).getType() == Material.DETECTOR_RAIL + || block.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails)) { event.setCancelled(true); From 033babd586d0d2319ce0a4d0ed88dc740ea2a59a Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 17:50:44 +0200 Subject: [PATCH 02/43] Cleanup & output result of backup command --- .../src/com/earth2me/essentials/Backup.java | 146 ++++++++++++------ 1 file changed, 96 insertions(+), 50 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Backup.java b/Essentials/src/com/earth2me/essentials/Backup.java index 6b88eaef9..b7b441b1e 100644 --- a/Essentials/src/com/earth2me/essentials/Backup.java +++ b/Essentials/src/com/earth2me/essentials/Backup.java @@ -1,35 +1,45 @@ package com.earth2me.essentials; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStreamReader; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.command.CommandSender; import org.bukkit.craftbukkit.CraftServer; -public class Backup implements Runnable { - private static final Logger logger = Logger.getLogger("Minecraft"); - private final CraftServer server; - private final IEssentials ess; - private boolean running = false; - private int taskId = -1; - private boolean active = false; - public Backup(IEssentials ess) { +public class Backup implements Runnable +{ + private static final Logger LOGGER = Logger.getLogger("Minecraft"); + private transient final CraftServer server; + private transient final IEssentials ess; + private transient boolean running = false; + private transient int taskId = -1; + private transient boolean active = false; + + public Backup(final IEssentials ess) + { this.ess = ess; server = (CraftServer)ess.getServer(); - if (server.getOnlinePlayers().length > 0) { + if (server.getOnlinePlayers().length > 0) + { startTask(); } - } + } - void onPlayerJoin() { + void onPlayerJoin() + { startTask(); } - - private void startTask() { - if (!running) { - long interval = ess.getSettings().getBackupInterval()*1200; // minutes -> ticks - if (interval < 1200) { + + private void startTask() + { + if (!running) + { + final long interval = ess.getSettings().getBackupInterval() * 1200; // minutes -> ticks + if (interval < 1200) + { return; } taskId = ess.scheduleSyncRepeatingTask(this, interval, interval); @@ -37,48 +47,84 @@ public class Backup implements Runnable { } } - public void run() { - if (active) return; - active = true; - final String command = ess.getSettings().getBackupCommand(); - if (command == null || "".equals(command)) { + public void run() + { + if (active) + { return; } - logger.log(Level.INFO, Util.i18n("backupStarted")); + active = true; + final String command = ess.getSettings().getBackupCommand(); + if (command == null || "".equals(command)) + { + return; + } + LOGGER.log(Level.INFO, Util.i18n("backupStarted")); final CommandSender cs = server.getServer().console; server.dispatchCommand(cs, "save-all"); server.dispatchCommand(cs, "save-off"); - + ess.scheduleAsyncDelayedTask( - new Runnable() { - - public void run() { - try { - Process child = Runtime.getRuntime().exec(command); - child.waitFor(); - } catch (InterruptedException ex) { - logger.log(Level.SEVERE, null, ex); - } catch (IOException ex) { - logger.log(Level.SEVERE, null, ex); - } finally { - ess.scheduleSyncDelayedTask( - new Runnable() { - - public void run() { - server.dispatchCommand(cs, "save-on"); - if (server.getOnlinePlayers().length == 0) { - running = false; - if (taskId != -1) { - server.getScheduler().cancelTask(taskId); + new Runnable() + { + public void run() + { + try + { + final ProcessBuilder childBuilder = new ProcessBuilder(command); + childBuilder.redirectErrorStream(true); + childBuilder.directory(ess.getDataFolder().getParentFile().getParentFile()); + final Process child = childBuilder.start(); + final BufferedReader reader = new BufferedReader(new InputStreamReader(child.getInputStream())); + try + { + child.waitFor(); + String line; + do + { + line = reader.readLine(); + if (line != null) + { + LOGGER.log(Level.INFO, line); + } } + while (line != null); + } + finally + { + reader.close(); } - active = false; - logger.log(Level.INFO, Util.i18n("backupFinished")); } - }); - } - } - }); + catch (InterruptedException ex) + { + LOGGER.log(Level.SEVERE, null, ex); + } + catch (IOException ex) + { + LOGGER.log(Level.SEVERE, null, ex); + } + finally + { + ess.scheduleSyncDelayedTask( + new Runnable() + { + public void run() + { + server.dispatchCommand(cs, "save-on"); + if (server.getOnlinePlayers().length == 0) + { + running = false; + if (taskId != -1) + { + server.getScheduler().cancelTask(taskId); + } + } + active = false; + LOGGER.log(Level.INFO, Util.i18n("backupFinished")); + } + }); + } + } + }); } - } From 322ecdb9fccedc2d4d8f553ac55d4573848e51b3 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 20:39:54 +0200 Subject: [PATCH 03/43] Less use of Craftbukkit code, so less things will break on MC update. Added try/catch around the tnt and creeper protection code. The event will now always canceled, even if our fake explosion code fails. --- .../essentials/EssentialsEntityListener.java | 17 +--- .../essentials/InventoryWorkaround.java | 3 +- .../essentials/TNTExplodeListener.java | 6 ++ .../essentials/commands/Commandspawner.java | 5 +- .../essentials/commands/Commandspawnmob.java | 28 +++--- .../essentials/signs/EssentialsSign.java | 3 +- .../essentials/signs/SignBlockListener.java | 3 +- .../essentials/signs/SignPlayerListener.java | 3 +- .../essentials/signs/SignProtection.java | 5 +- .../EssentialsProtectEntityListener.java | 98 ++++++++++--------- 10 files changed, 82 insertions(+), 89 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java index 91c4bdce4..ce97726dc 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java @@ -1,13 +1,10 @@ package com.earth2me.essentials; import java.util.List; -import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityCombustEvent; -import org.bukkit.event.entity.EntityDamageByBlockEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageByProjectileEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityListener; @@ -52,16 +49,12 @@ public class EssentialsEntityListener extends EntityListener } } } - if (event instanceof EntityDamageEvent || event instanceof EntityDamageByBlockEvent || event instanceof EntityDamageByProjectileEvent) + if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled()) { - - if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled()) - { - CraftPlayer player = (CraftPlayer)event.getEntity(); - player.getHandle().fireTicks = 0; - player.setRemainingAir(player.getMaximumAir()); - event.setCancelled(true); - } + final Player player = (Player)event.getEntity(); + player.setFireTicks(0); + player.setRemainingAir(player.getMaximumAir()); + event.setCancelled(true); } } diff --git a/Essentials/src/com/earth2me/essentials/InventoryWorkaround.java b/Essentials/src/com/earth2me/essentials/InventoryWorkaround.java index 9aee4033c..3f0f89af2 100644 --- a/Essentials/src/com/earth2me/essentials/InventoryWorkaround.java +++ b/Essentials/src/com/earth2me/essentials/InventoryWorkaround.java @@ -3,7 +3,6 @@ package com.earth2me.essentials; import java.util.HashMap; import java.util.Map; import org.bukkit.Location; -import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.entity.Item; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -130,7 +129,7 @@ public final class InventoryWorkaround // More than a single stack! if (item.getAmount() > item.getType().getMaxStackSize()) { - cinventory.setItem(firstFree, new CraftItemStack(item.getTypeId(), item.getType().getMaxStackSize(), item.getDurability())); + cinventory.setItem(firstFree, new ItemStack(item.getTypeId(), item.getType().getMaxStackSize(), item.getDurability())); item.setAmount(item.getAmount() - item.getType().getMaxStackSize()); } else diff --git a/Essentials/src/com/earth2me/essentials/TNTExplodeListener.java b/Essentials/src/com/earth2me/essentials/TNTExplodeListener.java index bdd453266..90c66aa35 100644 --- a/Essentials/src/com/earth2me/essentials/TNTExplodeListener.java +++ b/Essentials/src/com/earth2me/essentials/TNTExplodeListener.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; import net.minecraft.server.ChunkPosition; import net.minecraft.server.Packet60Explosion; import org.bukkit.Location; @@ -52,6 +54,7 @@ public class TNTExplodeListener extends EntityListener implements Runnable { return; } + try { final Set set = new HashSet(event.blockList().size()); final Player[] players = ess.getServer().getOnlinePlayers(); final List blocksUnderPlayers = new ArrayList(players.length); @@ -72,6 +75,9 @@ public class TNTExplodeListener extends EntityListener implements Runnable } } ((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension, new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0F, set)); + } catch (Throwable ex) { + Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex); + } event.setCancelled(true); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java index 15f5910af..926c219c1 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java @@ -6,8 +6,7 @@ import com.earth2me.essentials.Util; import org.bukkit.Material; import org.bukkit.Server; import org.bukkit.block.Block; -import org.bukkit.craftbukkit.block.CraftCreatureSpawner; -import org.bukkit.entity.CreatureType; +import org.bukkit.block.CreatureSpawner; public class Commandspawner extends EssentialsCommand @@ -45,7 +44,7 @@ public class Commandspawner extends EssentialsCommand user.sendMessage(Util.i18n("invalidMob")); return; } - new CraftCreatureSpawner(target).setCreatureType(mob.getType()); + ((CreatureSpawner)target.getState()).setCreatureType(mob.getType()); user.sendMessage(Util.format("setSpawner", mob.name)); } catch (Throwable ex) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java index 17081e349..4cef00de6 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java @@ -8,16 +8,13 @@ import com.earth2me.essentials.Mob.MobException; import com.earth2me.essentials.TargetBlock; import com.earth2me.essentials.Util; import java.util.Random; -import net.minecraft.server.EntityWolf; -import net.minecraft.server.PathEntity; import org.bukkit.DyeColor; -import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.craftbukkit.entity.CraftCreeper; -import org.bukkit.craftbukkit.entity.CraftSheep; -import org.bukkit.craftbukkit.entity.CraftSlime; -import org.bukkit.craftbukkit.entity.CraftWolf; +import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Slime; +import org.bukkit.entity.Wolf; public class Commandspawnmob extends EssentialsCommand @@ -190,7 +187,7 @@ public class Commandspawnmob extends EssentialsCommand { try { - ((CraftSlime)spawned).setSize(Integer.parseInt(data)); + ((Slime)spawned).setSize(Integer.parseInt(data)); } catch (Exception e) { @@ -204,11 +201,11 @@ public class Commandspawnmob extends EssentialsCommand if (data.equalsIgnoreCase("random")) { Random rand = new Random(); - ((CraftSheep)spawned).setColor(DyeColor.values()[rand.nextInt(DyeColor.values().length)]); + ((Sheep)spawned).setColor(DyeColor.values()[rand.nextInt(DyeColor.values().length)]); } else { - ((CraftSheep)spawned).setColor(DyeColor.valueOf(data.toUpperCase())); + ((Sheep)spawned).setColor(DyeColor.valueOf(data.toUpperCase())); } } catch (Exception e) @@ -218,21 +215,18 @@ public class Commandspawnmob extends EssentialsCommand } if ("Wolf".equalsIgnoreCase(type) && data.equalsIgnoreCase("tamed")) { - EntityWolf wolf = ((CraftWolf)spawned).getHandle(); + Wolf wolf = ((Wolf)spawned); wolf.setTamed(true); - wolf.setPathEntity((PathEntity)null); + wolf.setOwner(user); wolf.setSitting(true); - wolf.health = 20; - wolf.setOwnerName(user.getName()); - wolf.world.a(wolf, (byte)7); } if ("Wolf".equalsIgnoreCase(type) && data.equalsIgnoreCase("angry")) { - ((CraftWolf)spawned).setAngry(true); + ((Wolf)spawned).setAngry(true); } if ("Creeper".equalsIgnoreCase(type) && data.equalsIgnoreCase("powered")) { - ((CraftCreeper)spawned).setPowered(true); + ((Creeper)spawned).setPowered(true); } } } diff --git a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java index 1bd1d6184..f4109b3bb 100644 --- a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java +++ b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java @@ -11,7 +11,6 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.Sign; -import org.bukkit.craftbukkit.block.CraftSign; import org.bukkit.entity.Player; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.inventory.ItemStack; @@ -456,7 +455,7 @@ public class EssentialsSign public BlockSign(final Block block) { this.block = block; - this.sign = new CraftSign(block); + this.sign = (Sign)block.getState(); } public final String getLine(final int index) diff --git a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java index eb6163d20..7320f27a4 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java @@ -7,7 +7,6 @@ import java.util.logging.Logger; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.Sign; -import org.bukkit.craftbukkit.block.CraftSign; import org.bukkit.entity.Player; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; @@ -48,7 +47,7 @@ public class SignBlockListener extends BlockListener final int mat = block.getTypeId(); if (mat == Material.SIGN_POST.getId() || mat == Material.WALL_SIGN.getId()) { - final Sign csign = new CraftSign(block); + final Sign csign = (Sign)block.getState(); for (Signs signs : Signs.values()) { final EssentialsSign sign = signs.getSign(); diff --git a/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java b/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java index a97c234fa..5d7900508 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java @@ -4,7 +4,6 @@ import com.earth2me.essentials.IEssentials; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.Sign; -import org.bukkit.craftbukkit.block.CraftSign; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerListener; @@ -39,7 +38,7 @@ public class SignPlayerListener extends PlayerListener { return; } - final Sign csign = new CraftSign(block); + final Sign csign = (Sign)block.getState(); for (Signs signs : Signs.values()) { final EssentialsSign sign = signs.getSign(); diff --git a/Essentials/src/com/earth2me/essentials/signs/SignProtection.java b/Essentials/src/com/earth2me/essentials/signs/SignProtection.java index f9957e646..8ecf34e01 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignProtection.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignProtection.java @@ -15,7 +15,6 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.Sign; -import org.bukkit.craftbukkit.block.CraftSign; import org.bukkit.inventory.ItemStack; @@ -204,7 +203,7 @@ public class SignProtection extends EssentialsSign { if (b.getType() == Material.SIGN_POST || b.getType() == Material.WALL_SIGN) { - final Sign sign = new CraftSign(b); + final Sign sign = (Sign)b.getState(); if (sign.getLine(0).equalsIgnoreCase("§1[Protection]")) { return true; @@ -218,7 +217,7 @@ public class SignProtection extends EssentialsSign { if (a.getType() == Material.SIGN_POST || a.getType() == Material.WALL_SIGN) { - final Sign sign = new CraftSign(a); + final Sign sign = (Sign)a.getState(); if (sign.getLine(0).equalsIgnoreCase("§1[Protection]")) { return true; diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java index 8dd3335f5..f28fd1185 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java @@ -4,6 +4,8 @@ import com.earth2me.essentials.IEssentials; import com.earth2me.essentials.User; import java.util.HashSet; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; import net.minecraft.server.ChunkPosition; import net.minecraft.server.Packet60Explosion; import org.bukkit.Location; @@ -12,9 +14,6 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftWorld; -import org.bukkit.craftbukkit.entity.CraftFireball; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.bukkit.craftbukkit.entity.CraftTNTPrimed; import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; import org.bukkit.entity.Fireball; @@ -38,13 +37,13 @@ public class EssentialsProtectEntityListener extends EntityListener { private final transient IProtect prot; private final transient IEssentials ess; - + public EssentialsProtectEntityListener(final IProtect prot) { this.prot = prot; this.ess = prot.getEssentials(); } - + @Override public void onEntityDamage(final EntityDamageEvent event) { @@ -57,7 +56,7 @@ public class EssentialsProtectEntityListener extends EntityListener if (event instanceof EntityDamageByBlockEvent) { final DamageCause cause = event.getCause(); - + if (prot.getSettingBool(ProtectConfig.disable_contactdmg) && cause == DamageCause.CONTACT && !(target instanceof Player @@ -86,7 +85,7 @@ public class EssentialsProtectEntityListener extends EntityListener return; } } - + if (event instanceof EntityDamageByEntityEvent) { final EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent)event; @@ -111,7 +110,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (eAttack instanceof Creeper && prot.getSettingBool(ProtectConfig.prevent_creeper_playerdmg) && !(target instanceof Player && user.isAuthorized("essentials.protect.damage.creeper") @@ -120,7 +119,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (eAttack instanceof Fireball && prot.getSettingBool(ProtectConfig.prevent_fireball_playerdmg) && !(target instanceof Player && user.isAuthorized("essentials.protect.damage.fireball") @@ -129,7 +128,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (eAttack instanceof TNTPrimed && prot.getSettingBool(ProtectConfig.prevent_tnt_playerdmg) && !(target instanceof Player && user.isAuthorized("essentials.protect.damage.tnt") @@ -138,7 +137,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (edEvent.getDamager() instanceof Projectile && target instanceof Player && ((prot.getSettingBool(ProtectConfig.disable_projectiles) @@ -153,7 +152,7 @@ public class EssentialsProtectEntityListener extends EntityListener return; } } - + final DamageCause cause = event.getCause(); if (target instanceof Player) { @@ -165,7 +164,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (cause == DamageCause.SUFFOCATION && prot.getSettingBool(ProtectConfig.disable_suffocate) && !(user.isAuthorized("essentials.protect.damage.suffocation") @@ -201,7 +200,7 @@ public class EssentialsProtectEntityListener extends EntityListener } } } - + @Override public void onEntityExplode(final EntityExplodeEvent event) { @@ -216,43 +215,50 @@ public class EssentialsProtectEntityListener extends EntityListener || prot.getSettingBool(ProtectConfig.prevent_creeper_blockdmg) || (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight))) { - final Set set = new HashSet(event.blockList().size()); - final Player[] players = ess.getServer().getOnlinePlayers(); - final Set blocksUnderPlayers = new HashSet(players.length); - final Location loc = event.getLocation(); - for (Player player : players) + try { - if (player.getWorld().equals(loc.getWorld())) + final Set set = new HashSet(event.blockList().size()); + final Player[] players = ess.getServer().getOnlinePlayers(); + final Set blocksUnderPlayers = new HashSet(players.length); + final Location loc = event.getLocation(); + for (Player player : players) { - blocksUnderPlayers.add( - new ChunkPosition( - player.getLocation().getBlockX(), - player.getLocation().getBlockY() - 1, - player.getLocation().getBlockZ())); + if (player.getWorld().equals(loc.getWorld())) + { + blocksUnderPlayers.add( + new ChunkPosition( + player.getLocation().getBlockX(), + player.getLocation().getBlockY() - 1, + player.getLocation().getBlockZ())); + } } + ChunkPosition cp; + for (Block block : event.blockList()) + { + cp = new ChunkPosition(block.getX(), block.getY(), block.getZ()); + if (!blocksUnderPlayers.contains(cp)) + { + set.add(cp); + } + } + + ((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0D, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension, + new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0f, set)); } - ChunkPosition cp; - for (Block block : event.blockList()) + catch (Throwable ex) { - cp = new ChunkPosition(block.getX(), block.getY(), block.getZ()); - if (!blocksUnderPlayers.contains(cp)) - { - set.add(cp); - } + Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex); } - - ((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0D, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension, - new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0f, set)); event.setCancelled(true); return; } - else if (event.getEntity() instanceof CraftTNTPrimed + else if (event.getEntity() instanceof TNTPrimed && prot.getSettingBool(ProtectConfig.prevent_tnt_explosion)) { event.setCancelled(true); return; } - else if (event.getEntity() instanceof CraftFireball + else if (event.getEntity() instanceof Fireball && prot.getSettingBool(ProtectConfig.prevent_fireball_explosion)) { event.setCancelled(true); @@ -264,10 +270,10 @@ public class EssentialsProtectEntityListener extends EntityListener for (Block block : event.blockList()) { if ((block.getRelative(BlockFace.UP).getType() == Material.RAILS - || block.getType() == Material.RAILS - || block.getRelative(BlockFace.UP).getType() == Material.POWERED_RAIL - || block.getType() == Material.POWERED_RAIL - || block.getRelative(BlockFace.UP).getType() == Material.DETECTOR_RAIL + || block.getType() == Material.RAILS + || block.getRelative(BlockFace.UP).getType() == Material.POWERED_RAIL + || block.getType() == Material.POWERED_RAIL + || block.getRelative(BlockFace.UP).getType() == Material.DETECTOR_RAIL || block.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails)) { @@ -288,11 +294,11 @@ public class EssentialsProtectEntityListener extends EntityListener } } } - + @Override public void onCreatureSpawn(final CreatureSpawnEvent event) { - if (event.getEntity() instanceof CraftPlayer) + if (event.getEntity() instanceof Player) { return; } @@ -310,7 +316,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); } } - + @Override public void onEntityTarget(final EntityTargetEvent event) { @@ -336,11 +342,11 @@ public class EssentialsProtectEntityListener extends EntityListener return; } } - + @Override public void onExplosionPrime(ExplosionPrimeEvent event) { - if (event.getEntity() instanceof CraftFireball + if (event.getEntity() instanceof Fireball && prot.getSettingBool(ProtectConfig.prevent_fireball_fire)) { event.setFire(false); From 347be03b25062a02c04ea120963b393c42e80f08 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 21:13:33 +0200 Subject: [PATCH 04/43] Display which permission system is used. --- .../com/earth2me/essentials/Essentials.java | 3 +- .../essentials/EssentialsPluginListener.java | 41 +++++++++++++++---- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index b74b2b5c4..5fdb23785 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -148,9 +148,10 @@ public class Essentials extends JavaPlugin implements IEssentials LOGGER.log(Level.INFO, Util.i18n("bukkitFormatChanged")); } - final ServerListener serverListener = new EssentialsPluginListener(this); + final EssentialsPluginListener serverListener = new EssentialsPluginListener(this); pm.registerEvent(Type.PLUGIN_ENABLE, serverListener, Priority.Low, this); pm.registerEvent(Type.PLUGIN_DISABLE, serverListener, Priority.Low, this); + confList.add(serverListener); final EssentialsPlayerListener playerListener = new EssentialsPlayerListener(this); pm.registerEvent(Type.PLAYER_JOIN, playerListener, Priority.Monitor, this); diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java index 34632dd40..99df25578 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java @@ -1,6 +1,5 @@ package com.earth2me.essentials; -import com.earth2me.essentials.register.payment.Methods; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.event.server.PluginDisableEvent; @@ -10,7 +9,7 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; -public class EssentialsPluginListener extends ServerListener +public class EssentialsPluginListener extends ServerListener implements IConf { private final transient IEssentials ess; private static final Logger LOGGER = Logger.getLogger("Minecraft"); @@ -41,7 +40,7 @@ public class EssentialsPluginListener extends ServerListener LOGGER.log(Level.INFO, "[Essentials] Payment method was disabled. No longer accepting payments."); } } - + private void checkPermissions() { final PluginManager pm = ess.getServer().getPluginManager(); @@ -54,28 +53,54 @@ public class EssentialsPluginListener extends ServerListener { if (ess.getSettings().useBukkitPermissions()) { - ess.setPermissionsHandler(new BukkitPermissionsHandler()); + if (!(ess.getPermissionsHandler() instanceof BukkitPermissionsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); + ess.setPermissionsHandler(new BukkitPermissionsHandler()); + } } else { - ess.setPermissionsHandler(new ConfigPermissionsHandler(ess)); + if (!(ess.getPermissionsHandler() instanceof ConfigPermissionsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using config based permissions. Enable superperms in config."); + ess.setPermissionsHandler(new ConfigPermissionsHandler(ess)); + } } } else { if (permissionsPlugin.getDescription().getVersion().charAt(0) == '3') { - ess.setPermissionsHandler(new Permissions3Handler(permissionsPlugin)); + if (!(ess.getPermissionsHandler() instanceof Permissions3Handler)) + { + LOGGER.log(Level.INFO, "Essentials: Using Permissions 3 based permissions."); + ess.setPermissionsHandler(new Permissions3Handler(permissionsPlugin)); + } } else { - ess.setPermissionsHandler(new Permissions2Handler(permissionsPlugin)); + if (!(ess.getPermissionsHandler() instanceof Permissions2Handler)) + { + LOGGER.log(Level.INFO, "Essentials: Using Permissions 2 based permissions."); + ess.setPermissionsHandler(new Permissions2Handler(permissionsPlugin)); + } } } } else { - ess.setPermissionsHandler(new PermissionsExHandler()); + if (!(ess.getPermissionsHandler() instanceof PermissionsExHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using PermissionsEx based permissions."); + ess.setPermissionsHandler(new PermissionsExHandler()); + } } } + + @Override + public void reloadConfig() + { + checkPermissions(); + } } From 610a7139971b28095b74065b48a55d73af6b9300 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 22:29:57 +0200 Subject: [PATCH 05/43] Fixes to auto afk --- Essentials/src/com/earth2me/essentials/User.java | 4 ++-- .../src/com/earth2me/essentials/commands/Commandafk.java | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index d160a6f07..918f0f128 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -17,8 +17,8 @@ public class User extends UserData implements Comparable, IReplyTo, IUser private transient User teleportRequester; private transient boolean teleportRequestHere; private transient final Teleport teleport; - private transient long lastOnlineActivity = System.currentTimeMillis();; - private transient long lastActivity; + private transient long lastOnlineActivity ; + private transient long lastActivity = System.currentTimeMillis(); private boolean hidden = false; private transient boolean godStateBeforeAfk; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java index 03950966c..64ae40c22 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java @@ -35,12 +35,13 @@ public class Commandafk extends EssentialsCommand { if (!user.toggleAfk()) { - user.sendMessage(Util.i18n("markedAsNotAway")); + //user.sendMessage(Util.i18n("markedAsNotAway")); ess.broadcastMessage(user.getName(), Util.format("userIsNotAway", user.getDisplayName())); + user.updateActivity(); } else { - user.sendMessage(Util.i18n("markedAsAway")); + //user.sendMessage(Util.i18n("markedAsAway")); ess.broadcastMessage(user.getName(), Util.format("userIsAway", user.getDisplayName())); } } From 6427a93d1496fa3208415e8cda06ff765eba6cfa Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 23:14:49 +0200 Subject: [PATCH 06/43] Correctly charge for the use of commands. We now first test, if the user could pay it, do the stuff and then charge him. If the command throws an exception, the user will not be charged. --- .../essentials/commands/Commandafk.java | 2 - .../essentials/commands/Commandantioch.java | 1 - .../essentials/commands/Commandbackup.java | 3 +- .../essentials/commands/Commandbalance.java | 1 - .../essentials/commands/Commandbigtree.java | 3 +- .../essentials/commands/Commandbroadcast.java | 1 - .../essentials/commands/Commandburn.java | 1 - .../commands/Commandclearinventory.java | 3 - .../commands/Commandessentials.java | 1 - .../essentials/commands/Commandext.java | 2 - .../essentials/commands/Commandfireball.java | 1 - .../essentials/commands/Commandgc.java | 1 - .../essentials/commands/Commandgetpos.java | 1 - .../essentials/commands/Commandgive.java | 7 +- .../essentials/commands/Commandgod.java | 1 - .../essentials/commands/Commandheal.java | 2 - .../essentials/commands/Commandhelpop.java | 1 - .../essentials/commands/Commandinfo.java | 6 +- .../essentials/commands/Commandinvsee.java | 4 +- .../essentials/commands/Commanditem.java | 7 +- .../essentials/commands/Commandkick.java | 4 +- .../essentials/commands/Commandkickall.java | 2 - .../essentials/commands/Commandkill.java | 1 - .../essentials/commands/Commandkit.java | 1 - .../essentials/commands/Commandlightning.java | 8 +- .../essentials/commands/Commandlist.java | 1 - .../essentials/commands/Commandmail.java | 16 +- .../essentials/commands/Commandme.java | 4 +- .../essentials/commands/Commandmotd.java | 1 - .../essentials/commands/Commandmsg.java | 10 +- .../essentials/commands/Commandmute.java | 4 +- .../essentials/commands/Commandnick.java | 13 +- .../essentials/commands/Commandplugin.java | 173 ------------------ .../essentials/commands/Commandpowertool.java | 12 +- .../essentials/commands/Commandr.java | 4 +- .../essentials/commands/Commandrealname.java | 1 - .../essentials/commands/Commandreloadall.java | 1 - .../essentials/commands/Commandrepair.java | 25 +-- .../essentials/commands/Commandrules.java | 1 - .../essentials/commands/Commandsell.java | 4 +- .../essentials/commands/Commandsethome.java | 1 - .../essentials/commands/Commandsetjail.java | 2 - .../essentials/commands/Commandsetwarp.java | 1 - .../essentials/commands/Commandsetworth.java | 1 - .../essentials/commands/Commandsocialspy.java | 3 - .../essentials/commands/Commandspawner.java | 1 - .../essentials/commands/Commandspawnmob.java | 7 +- .../essentials/commands/Commandsuicide.java | 1 - .../essentials/commands/Commandthunder.java | 2 - .../commands/Commandtogglejail.java | 1 - .../essentials/commands/Commandtop.java | 1 - .../essentials/commands/Commandtp.java | 1 - .../essentials/commands/Commandtpa.java | 1 - .../essentials/commands/Commandtpaall.java | 2 - .../essentials/commands/Commandtpahere.java | 1 - .../essentials/commands/Commandtpall.java | 2 - .../essentials/commands/Commandtpdeny.java | 1 - .../essentials/commands/Commandtpo.java | 1 - .../essentials/commands/Commandtpohere.java | 1 - .../essentials/commands/Commandtptoggle.java | 1 - .../essentials/commands/Commandtree.java | 1 - .../essentials/commands/Commandunlimited.java | 4 +- .../essentials/commands/Commandweather.java | 1 - .../essentials/commands/Commandwhois.java | 1 - .../essentials/commands/Commandworth.java | 1 - .../commands/EssentialsCommand.java | 12 +- 66 files changed, 40 insertions(+), 347 deletions(-) delete mode 100644 Essentials/src/com/earth2me/essentials/commands/Commandplugin.java diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java index 64ae40c22..9fe17d5a0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java @@ -15,8 +15,6 @@ public class Commandafk extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); - if (args.length > 0 && user.isAuthorized("essentials.afk.others")) { User afkUser = ess.getUser(ess.getServer().matchPlayer(args[0])); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java b/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java index 4dd3042d0..c30975b03 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java @@ -17,7 +17,6 @@ public class Commandantioch extends EssentialsCommand @Override public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - charge(user); ess.broadcastMessage(user.getName(), "...lobbest thou thy Holy Hand Grenade of Antioch towards thy foe,"); ess.broadcastMessage(user.getName(), "who being naughty in My sight, shall snuff it."); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbackup.java b/Essentials/src/com/earth2me/essentials/commands/Commandbackup.java index 8f6e8e8bf..6bbf8361c 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandbackup.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandbackup.java @@ -19,9 +19,8 @@ public class Commandbackup extends EssentialsCommand Backup backup = ess.getBackup(); if (backup == null) { - return; + throw new Exception(); } - charge(sender); backup.run(); sender.sendMessage(Util.i18n("backupStarted")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbalance.java b/Essentials/src/com/earth2me/essentials/commands/Commandbalance.java index 7dd1fb449..d26df68cb 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandbalance.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandbalance.java @@ -26,7 +26,6 @@ public class Commandbalance extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); double bal = (args.length < 1 || !(user.isAuthorized("essentials.balance.others") || user.isAuthorized("essentials.balance.other")) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java b/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java index 8370896b1..ded3ffdaf 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java @@ -41,12 +41,11 @@ public class Commandbigtree extends EssentialsCommand final boolean success = user.getWorld().generateTree(safeLocation, (TreeType)tree); if (success) { - charge(user); user.sendMessage(Util.i18n("bigTreeSuccess")); } else { - user.sendMessage(Util.i18n("bigTreeFailure")); + throw new Exception(Util.i18n("bigTreeFailure")); } } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbroadcast.java b/Essentials/src/com/earth2me/essentials/commands/Commandbroadcast.java index 3ca9d3fd0..684920114 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandbroadcast.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandbroadcast.java @@ -22,7 +22,6 @@ public class Commandbroadcast extends EssentialsCommand throw new NotEnoughArgumentsException(); } - charge(sender); ess.broadcastMessage(sender instanceof Player ? ((Player)sender).getName() : Console.NAME, Util.format("broadcast", getFinalArg(args, 0))); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandburn.java b/Essentials/src/com/earth2me/essentials/commands/Commandburn.java index e63331203..5df3cb5d8 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandburn.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandburn.java @@ -21,7 +21,6 @@ public class Commandburn extends EssentialsCommand throw new NotEnoughArgumentsException(); } - charge(sender); for (Player p : server.matchPlayer(args[0])) { p.setFireTicks(Integer.parseInt(args[1]) * 20); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java b/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java index 09496c7a2..447689691 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java @@ -27,7 +27,6 @@ public class Commandclearinventory extends EssentialsCommand if (!online.isEmpty()) { - charge(user); for (Player p : online) { p.getInventory().clear(); @@ -42,7 +41,6 @@ public class Commandclearinventory extends EssentialsCommand Player p = server.getPlayer(args[0]); if (p != null) { - charge(user); p.getInventory().clear(); user.sendMessage(Util.format("inventoryClearedOthers", p.getDisplayName())); } @@ -54,7 +52,6 @@ public class Commandclearinventory extends EssentialsCommand } else { - charge(user); user.getInventory().clear(); user.sendMessage(Util.i18n("inventoryCleared")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java index bf0226138..fda7061d5 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java @@ -102,7 +102,6 @@ public class Commandessentials extends EssentialsCommand return; } ess.reload(); - charge(sender); sender.sendMessage(Util.format("essentialsReload", ess.getDescription().getVersion())); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandext.java b/Essentials/src/com/earth2me/essentials/commands/Commandext.java index 339351ef1..afb9fa3a6 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandext.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandext.java @@ -30,7 +30,6 @@ public class Commandext extends EssentialsCommand { if (args.length < 1) { - charge(user); user.setFireTicks(0); user.sendMessage(Util.i18n("extinguish")); return; @@ -43,7 +42,6 @@ public class Commandext extends EssentialsCommand { for (Player p : server.matchPlayer(name)) { - charge(sender); p.setFireTicks(0); sender.sendMessage(Util.format("extinguishOthers", p.getDisplayName())); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandfireball.java b/Essentials/src/com/earth2me/essentials/commands/Commandfireball.java index 73c314935..19e7eddf1 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandfireball.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandfireball.java @@ -17,7 +17,6 @@ public class Commandfireball extends EssentialsCommand @Override protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - charge(user); final Vector direction = user.getEyeLocation().getDirection().multiply(2); user.getWorld().spawn(user.getEyeLocation().add(direction.getX(), direction.getY(), direction.getZ()), Fireball.class); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgc.java b/Essentials/src/com/earth2me/essentials/commands/Commandgc.java index dd3cf35f4..28164bd78 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgc.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgc.java @@ -16,7 +16,6 @@ public class Commandgc extends EssentialsCommand @Override protected void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception { - charge(sender); sender.sendMessage(Util.format("gcmax", (Runtime.getRuntime().maxMemory() / 1024 / 1024))); sender.sendMessage(Util.format("gcfree", (Runtime.getRuntime().freeMemory() / 1024 / 1024))); sender.sendMessage(Util.format("gctotal", (Runtime.getRuntime().totalMemory() / 1024 / 1024))); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java b/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java index 517ef0c9a..bf5cff75d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java @@ -15,7 +15,6 @@ public class Commandgetpos extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); Location coords = user.getLocation(); user.sendMessage("§7X: " + coords.getBlockX() + " (-North <-> +South)"); user.sendMessage("§7Y: " + coords.getBlockY() + " (+Up <-> -Down)"); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java index 68bfe8a30..065b76d03 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java @@ -36,8 +36,7 @@ public class Commandgive extends EssentialsCommand : (!ess.getUser(sender).isAuthorized("essentials.itemspawn.exempt") && !ess.getUser(sender).canSpawnItem(stack.getTypeId())))) { - sender.sendMessage(ChatColor.RED + "You are not allowed to spawn the item " + itemname); - return; + throw new Exception(ChatColor.RED + "You are not allowed to spawn the item " + itemname); } if (args.length > 2 && Integer.parseInt(args[2]) > 0) { @@ -46,13 +45,11 @@ public class Commandgive extends EssentialsCommand if (stack.getType() == Material.AIR) { - sender.sendMessage(ChatColor.RED + "You can't give air."); - return; + throw new Exception(ChatColor.RED + "You can't give air."); } User giveTo = getPlayer(server, args, 0); String itemName = stack.getType().toString().toLowerCase().replace('_', ' '); - charge(sender); sender.sendMessage(ChatColor.BLUE + "Giving " + stack.getAmount() + " of " + itemName + " to " + giveTo.getDisplayName() + "."); giveTo.getInventory().addItem(stack); giveTo.updateInventory(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgod.java b/Essentials/src/com/earth2me/essentials/commands/Commandgod.java index 6bb9f1390..d4c35e113 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgod.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgod.java @@ -28,7 +28,6 @@ public class Commandgod extends EssentialsCommand @Override protected void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); if (args.length > 0 && user.isAuthorized("essentials.god.others")) { godOtherPlayers(server, user, args[0]); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandheal.java b/Essentials/src/com/earth2me/essentials/commands/Commandheal.java index effe64604..d60fc09fe 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandheal.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandheal.java @@ -25,7 +25,6 @@ public class Commandheal extends EssentialsCommand { user.healCooldown(); } - charge(user); healOtherPlayers(server, user, args[0]); return; } @@ -34,7 +33,6 @@ public class Commandheal extends EssentialsCommand { user.healCooldown(); } - charge(user); user.setHealth(20); user.sendMessage(Util.i18n("heal")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java b/Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java index 261cad062..158b0d40b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java @@ -22,7 +22,6 @@ public class Commandhelpop extends EssentialsCommand throw new NotEnoughArgumentsException(); } - charge(user); final String message = Util.format("helpOp", user.getDisplayName(), getFinalArg(args, 0)); logger.log(Level.INFO, message); for (Player p : server.getOnlinePlayers()) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandinfo.java b/Essentials/src/com/earth2me/essentials/commands/Commandinfo.java index 4db469b58..97dd71d35 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandinfo.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandinfo.java @@ -68,9 +68,8 @@ public class Commandinfo extends EssentialsCommand } else { - sender.sendMessage(Util.i18n("infoFileDoesNotExist")); file.createNewFile(); - return; + throw new Exception(Util.i18n("infoFileDoesNotExist")); } if (bookmarks.isEmpty()) @@ -88,7 +87,6 @@ public class Commandinfo extends EssentialsCommand int start = (page - 1) * 9; int pages = lines.size() / 9 + (lines.size() % 9 > 0 ? 1 : 0); - charge(sender); sender.sendMessage(Util.format("infoPages", page, pages )); for (int i = start; i < lines.size() && i < start + 9; i++) { @@ -140,7 +138,6 @@ public class Commandinfo extends EssentialsCommand } int pages = end / 9 + (end % 9 > 0 ? 1 : 0); - charge(sender); sender.sendMessage(Util.format("infoPages", page, pages )); for (int i = start; i < end && i < start + 9; i++) { @@ -182,7 +179,6 @@ public class Commandinfo extends EssentialsCommand int page = chapterpage + 1; int pages = (chapterend - chapterstart) / 9 + ((chapterend - chapterstart) % 9 > 0 ? 1 : 0); - charge(sender); sender.sendMessage(Util.format("infoChapterPages", pageStr, page , pages)); for (int i = start; i < chapterend && i < start + 9; i++) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java b/Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java index e5877fe40..8b6dc8182 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java @@ -31,11 +31,9 @@ public class Commandinvsee extends EssentialsCommand { invUser.getInventory().setContents(user.getSavedInventory()); user.setSavedInventory(null); - user.sendMessage(Util.i18n("invRestored")); - return; + throw new Exception(Util.i18n("invRestored")); } - charge(user); if (user.getSavedInventory() == null) { user.setSavedInventory(user.getInventory().getContents()); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanditem.java b/Essentials/src/com/earth2me/essentials/commands/Commanditem.java index 79e8344f1..352ce18eb 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanditem.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanditem.java @@ -31,8 +31,7 @@ public class Commanditem extends EssentialsCommand : (!user.isAuthorized("essentials.itemspawn.exempt") && !user.canSpawnItem(stack.getTypeId()))) { - user.sendMessage(Util.format("cantSpawnItem", itemname)); - return; + throw new Exception(Util.format("cantSpawnItem", itemname)); } if (args.length > 1 && Integer.parseInt(args[1]) > 0) @@ -42,12 +41,10 @@ public class Commanditem extends EssentialsCommand if (stack.getType() == Material.AIR) { - user.sendMessage(Util.format("cantSpawnItem", "Air")); - return; + throw new Exception(Util.format("cantSpawnItem", "Air")); } String itemName = stack.getType().toString().toLowerCase().replace('_', ' '); - charge(user); user.sendMessage(Util.format("itemSpawn", stack.getAmount(), itemName)); user.getInventory().addItem(stack); user.updateInventory(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkick.java b/Essentials/src/com/earth2me/essentials/commands/Commandkick.java index e9b3720fe..fd0d4a8e0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkick.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkick.java @@ -26,10 +26,8 @@ public class Commandkick extends EssentialsCommand User player = getPlayer(server, args, 0); if (player.isAuthorized("essentials.kick.exempt")) { - sender.sendMessage(Util.i18n("kickExempt")); - return; + throw new Exception(Util.i18n("kickExempt")); } - charge(sender); final String kickReason = args.length > 1 ? getFinalArg(args, 1) : Util.i18n("kickDefault"); player.kickPlayer(kickReason); String senderName = sender instanceof Player ? ((Player)sender).getDisplayName() : Console.NAME; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkickall.java b/Essentials/src/com/earth2me/essentials/commands/Commandkickall.java index c52dc8d14..8d36f50d5 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkickall.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkickall.java @@ -16,8 +16,6 @@ public class Commandkickall extends EssentialsCommand @Override public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception { - charge(sender); - for (Player p : server.getOnlinePlayers()) { if (sender instanceof Player && p.getName().equalsIgnoreCase(((Player)sender).getName())) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkill.java b/Essentials/src/com/earth2me/essentials/commands/Commandkill.java index c849463b7..03afeadc4 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkill.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkill.java @@ -21,7 +21,6 @@ public class Commandkill extends EssentialsCommand throw new NotEnoughArgumentsException(); } - charge(sender); for (Player p : server.matchPlayer(args[0])) { p.setHealth(0); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java index 7f9a91590..75cc83887 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java @@ -141,7 +141,6 @@ public class Commandkit extends EssentialsCommand } try { - charge(user); charge.charge(user); } catch (Exception ex) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandlightning.java b/Essentials/src/com/earth2me/essentials/commands/Commandlightning.java index c9135d61e..dc4387833 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandlightning.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandlightning.java @@ -26,20 +26,14 @@ public class Commandlightning extends EssentialsCommand if (args.length < 1 & user != null) { user.getWorld().strikeLightning(user.getTargetBlock(null, 600).getLocation()); - charge(user); return; } if (server.matchPlayer(args[0]).isEmpty()) { - sender.sendMessage(Util.i18n("playerNotFound")); - return; + throw new Exception(Util.i18n("playerNotFound")); } - if (user != null) - { - charge(user); - } for (Player p : server.matchPlayer(args[0])) { sender.sendMessage(Util.format("lightningUse", p.getDisplayName())); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandlist.java b/Essentials/src/com/earth2me/essentials/commands/Commandlist.java index ef7d6e9f8..98066d7e7 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandlist.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandlist.java @@ -44,7 +44,6 @@ public class Commandlist extends EssentialsCommand playerHidden++; } } - charge(sender); //TODO: move these to messages file StringBuilder online = new StringBuilder(); online.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().length - playerHidden); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java index b54b88a12..a98fabbd2 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java @@ -23,22 +23,19 @@ public class Commandmail extends EssentialsCommand List mail = user.getMails(); if (mail.isEmpty()) { - user.sendMessage(Util.i18n("noMail")); - return; + throw new Exception(Util.i18n("noMail")); } for (String s : mail) { user.sendMessage(s); } - user.sendMessage(Util.i18n("mailClear")); - return; + throw new Exception(Util.i18n("mailClear")); } if (args.length >= 3 && "send".equalsIgnoreCase(args[0])) { if (!user.isAuthorized("essentials.mail.send")) { - user.sendMessage(Util.i18n("noMailSendPerm")); - return; + throw new Exception(Util.i18n("noMailSendPerm")); } Player player = server.getPlayer(args[1]); @@ -53,10 +50,8 @@ public class Commandmail extends EssentialsCommand } if (u == null) { - user.sendMessage(Util.format("playerNeverOnServer", args[1])); - return; + throw new Exception(Util.format("playerNeverOnServer", args[1])); } - charge(user); if (!u.isIgnoredPlayer(user.getName())) { u.addMail(ChatColor.stripColor(user.getDisplayName()) + ": " + getFinalArg(args, 2)); @@ -67,8 +62,7 @@ public class Commandmail extends EssentialsCommand if (args.length >= 1 && "clear".equalsIgnoreCase(args[0])) { user.setMails(null); - user.sendMessage(Util.i18n("mailCleared")); - return; + throw new Exception(Util.i18n("mailCleared")); } throw new NotEnoughArgumentsException(); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandme.java b/Essentials/src/com/earth2me/essentials/commands/Commandme.java index 098558f11..7441b723b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandme.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandme.java @@ -17,8 +17,7 @@ public class Commandme extends EssentialsCommand { if (user.isMuted()) { - user.sendMessage(Util.i18n("voiceSilenced")); - return; + throw new Exception(Util.i18n("voiceSilenced")); } if (args.length < 1) @@ -31,7 +30,6 @@ public class Commandme extends EssentialsCommand message.append(args[i]); message.append(' '); } - charge(user); ess.broadcastMessage(user.getName(), "* " + user.getDisplayName() + " " + message); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmotd.java b/Essentials/src/com/earth2me/essentials/commands/Commandmotd.java index 4712c331b..c695338f6 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmotd.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmotd.java @@ -15,7 +15,6 @@ public class Commandmotd extends EssentialsCommand @Override public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception { - charge(sender); for (String m : ess.getMotd(sender, Util.i18n("noMotd"))) { sender.sendMessage(m); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java b/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java index 42f17bed2..f14935648 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java @@ -30,8 +30,7 @@ public class Commandmsg extends EssentialsCommand User user = ess.getUser(sender); if (user.isMuted()) { - user.sendMessage(Util.i18n("voiceSilenced")); - return; + throw new Exception(Util.i18n("voiceSilenced")); } } @@ -55,8 +54,7 @@ public class Commandmsg extends EssentialsCommand if (matches.isEmpty()) { - sender.sendMessage(Util.i18n("playerNotFound")); - return; + throw new Exception(Util.i18n("playerNotFound")); } int i = 0; @@ -70,11 +68,9 @@ public class Commandmsg extends EssentialsCommand } if (i == matches.size()) { - sender.sendMessage(Util.i18n("playerNotFound")); - return; + throw new Exception(Util.i18n("playerNotFound")); } - charge(sender); for (Player p : matches) { sender.sendMessage(Util.format("msgFormat", translatedMe, p.getDisplayName(), message)); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmute.java b/Essentials/src/com/earth2me/essentials/commands/Commandmute.java index e56ddc42c..1777c5b48 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmute.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmute.java @@ -24,8 +24,7 @@ public class Commandmute extends EssentialsCommand User p = getPlayer(server, args, 0, true); if (!p.isMuted() && p.isAuthorized("essentials.mute.exempt")) { - sender.sendMessage(Util.i18n("muteExempt")); - return; + throw new Exception(Util.i18n("muteExempt")); } long muteTimestamp = 0; if (args.length > 1) @@ -34,7 +33,6 @@ public class Commandmute extends EssentialsCommand muteTimestamp = Util.parseDateDiff(time, true); } p.setMuteTimeout(muteTimestamp); - charge(sender); boolean muted = p.toggleMuted(); sender.sendMessage( muted diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandnick.java b/Essentials/src/com/earth2me/essentials/commands/Commandnick.java index 99c779ba4..253ec7646 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandnick.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandnick.java @@ -23,16 +23,14 @@ public class Commandnick extends EssentialsCommand } if (!ess.getSettings().changeDisplayName()) { - user.sendMessage(Util.i18n("nickDisplayName")); - return; + throw new Exception(Util.i18n("nickDisplayName")); } if (args.length > 1) { if (!user.isAuthorized("essentials.nick.others")) { - user.sendMessage(Util.i18n("nickOthersPermission")); - return; + throw new Exception(Util.i18n("nickOthersPermission")); } setOthersNickname(server, user, args); @@ -51,8 +49,7 @@ public class Commandnick extends EssentialsCommand if (nick.matches("[^a-zA-Z_0-9]")) { - user.sendMessage(Util.i18n("nickNamesAlpha")); - return; + throw new Exception(Util.i18n("nickNamesAlpha")); } for (Player p : server.getOnlinePlayers()) @@ -66,12 +63,10 @@ public class Commandnick extends EssentialsCommand String nk = nick.toLowerCase(); if (nk.equals(dn) || nk.equals(n)) { - user.sendMessage(Util.i18n("nickInUse")); - return; + throw new Exception(Util.i18n("nickInUse")); } } - charge(user); user.setDisplayName(ess.getSettings().getNicknamePrefix() + nick); user.setNickname(nick); user.sendMessage(Util.format("nickSet", user.getDisplayName() + "§7.")); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandplugin.java b/Essentials/src/com/earth2me/essentials/commands/Commandplugin.java deleted file mode 100644 index 9e7939d57..000000000 --- a/Essentials/src/com/earth2me/essentials/commands/Commandplugin.java +++ /dev/null @@ -1,173 +0,0 @@ -package com.earth2me.essentials.commands; - -import java.io.File; -import org.bukkit.Server; -import org.bukkit.command.CommandSender; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginManager; - - -public class Commandplugin extends EssentialsCommand -{ - private Server server; - - public Commandplugin() - { - super("plugin"); - } - - @Override - public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception - { - this.server = server; - - PluginCommands sub = null; - try - { - sub = PluginCommands.valueOf(args[0].toUpperCase()); - } - catch (Exception ex) - { - sender.sendMessage("§cUsage: /plugin [load|reload|enable|disable|list] [PluginName]"); - return; - } - - switch (sub) - { - case LOAD: // All disable functions are broken until - // http://leaky.bukkit.org/issues/641 is fixed. - sender.sendMessage("This function is broken. Performing /reload now."); - server.reload(); - /*if (args.length < 2) return; - User.charge(sender, this); - loadPlugin(args[1], sender);*/ - return; - - case RELOAD: - sender.sendMessage("This function is broken. Performing /reload now."); - server.reload(); - /*if (args.length < 2) return; - User.charge(sender, this); - reloadPlugin(args[1], sender);*/ - return; - - case ENABLE: - sender.sendMessage("This function is broken. Performing /reload now."); - server.reload(); - /*if (args.length < 2) return; - User.charge(sender, this); - enablePlugin(args[1], sender);*/ - return; - - case DISABLE: - sender.sendMessage("This function is broken."); - /*if (args.length < 2) return; - User.charge(sender, this); - disablePlugin(args[1], sender);*/ - return; - - case LIST: - charge(sender); - listPlugins(sender); - return; - } - } - - private void listPlugins(CommandSender player) - { - StringBuilder plugins = new StringBuilder(); - for (Plugin p : server.getPluginManager().getPlugins()) - { - plugins.append(p.isEnabled() ? " §a" : " §c"); - plugins.append(p.getDescription().getName()); - } - - plugins.insert(0, "§7Plugins:§f"); - player.sendMessage(plugins.toString()); - } - - private boolean reloadPlugin(String name, CommandSender player) - { - return disablePlugin(name, player) && enablePlugin(name, player); - } - - private boolean loadPlugin(String name, CommandSender sender) - { - try - { - PluginManager pm = server.getPluginManager(); - pm.loadPlugin(new File("plugins", name + ".jar")); - sender.sendMessage("§7Plugin loaded."); - return enablePlugin(name, sender); - } - catch (Throwable ex) - { - sender.sendMessage("§cCould not load plugin. Is the file named properly?"); - return false; - } - } - - private boolean enablePlugin(String name, CommandSender sender) - { - try - { - final PluginManager pm = server.getPluginManager(); - final Plugin plugin = pm.getPlugin(name); - if (!plugin.isEnabled()) - { - new Thread(new Runnable() - { - public void run() - { - synchronized (pm) - { - pm.enablePlugin(plugin); - } - } - }).start(); - } - sender.sendMessage("§7Plugin enabled."); - return true; - } - catch (Throwable ex) - { - listPlugins(sender); - return false; - } - } - - private boolean disablePlugin(String name, CommandSender sender) - { - try - { - final PluginManager pm = server.getPluginManager(); - final Plugin plugin = pm.getPlugin(name); - if (plugin.isEnabled()) - { - new Thread(new Runnable() - { - public void run() - { - synchronized (pm) - { - pm.disablePlugin(plugin); - } - } - }).start(); - } - sender.sendMessage("§7Plugin disabled."); - return true; - } - catch (Throwable ex) - { - listPlugins(sender); - return false; - } - } - - - private enum PluginCommands - { - LOAD, RELOAD, LIST, ENABLE, DISABLE - } -} diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java index 4c3d941ae..742535a77 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -23,8 +23,7 @@ public class Commandpowertool extends EssentialsCommand List powertools = user.getPowertool(is); if (is == null || is.getType() == Material.AIR) { - user.sendMessage(Util.i18n("powerToolAir")); - return; + throw new Exception(Util.i18n("powerToolAir")); } String itemName = is.getType().toString().toLowerCase().replaceAll("_", " "); @@ -35,7 +34,7 @@ public class Commandpowertool extends EssentialsCommand { if (powertools == null || powertools.isEmpty()) { - user.sendMessage(Util.format("powerToolListEmpty", itemName)); + throw new Exception(Util.format("powerToolListEmpty", itemName)); } else { @@ -50,8 +49,7 @@ public class Commandpowertool extends EssentialsCommand command = command.substring(2); if (!powertools.contains(command)) { - user.sendMessage(Util.format("powerToolNoSuchCommandAssigned", command, itemName)); - return; + throw new Exception(Util.format("powerToolNoSuchCommandAssigned", command, itemName)); } powertools.remove(command); @@ -70,8 +68,7 @@ public class Commandpowertool extends EssentialsCommand command = command.substring(2); if(powertools.contains(command)) { - user.sendMessage(Util.format("powerToolAlreadySet", command, itemName)); - return; + throw new Exception(Util.format("powerToolAlreadySet", command, itemName)); } } else if (powertools != null && !powertools.isEmpty()) @@ -94,7 +91,6 @@ public class Commandpowertool extends EssentialsCommand user.sendMessage(Util.format("powerToolRemoveAll", itemName)); } - charge(user); user.setPowertool(is, powertools); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandr.java b/Essentials/src/com/earth2me/essentials/commands/Commandr.java index d89947500..daf83034a 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandr.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandr.java @@ -32,11 +32,9 @@ public class Commandr extends EssentialsCommand if (target == null) { - sender.sendMessage(Util.i18n("foreverAlone")); - return; + throw new Exception(Util.i18n("foreverAlone")); } - charge(sender); sender.sendMessage(Util.format("msgFormat", Util.i18n("me"), targetName, message)); if (target instanceof Player) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java b/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java index e16d59198..5e12c535d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java @@ -22,7 +22,6 @@ public class Commandrealname extends EssentialsCommand throw new NotEnoughArgumentsException(); } final String whois = args[0].toLowerCase(); - charge(user); for (Player p : server.getOnlinePlayers()) { final User u = ess.getUser(p); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandreloadall.java b/Essentials/src/com/earth2me/essentials/commands/Commandreloadall.java index eeee08e11..bd4f59dcc 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandreloadall.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandreloadall.java @@ -15,7 +15,6 @@ public class Commandreloadall extends EssentialsCommand @Override public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception { - charge(sender); server.reload(); sender.sendMessage(Util.i18n("reloadAllPlugins")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java index d41f5580f..029901867 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java @@ -33,28 +33,12 @@ public class Commandrepair extends EssentialsCommand final String itemName = item.getType().toString().toLowerCase(); final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), ess); - try - { - charge.isAffordableFor(user); - } - catch (Exception ex) - { - user.sendMessage(ex.getMessage()); - return; - } + charge.isAffordableFor(user); + + repairItem(item); - try - { - repairItem(item); - } - catch (Exception e) - { - user.sendMessage(e.getMessage()); - return; - } charge.charge(user); - charge(user); user.sendMessage(Util.format("repair", itemName.replace('_', ' '))); } else if (args[0].equalsIgnoreCase("all")) @@ -66,11 +50,10 @@ public class Commandrepair extends EssentialsCommand if (repaired.isEmpty()) { - user.sendMessage(Util.format("repairNone")); + throw new Exception(Util.format("repairNone")); } else { - charge(user); user.sendMessage(Util.format("repair", Util.joinList(repaired))); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrules.java b/Essentials/src/com/earth2me/essentials/commands/Commandrules.java index 1b00bea47..39f7de68e 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrules.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrules.java @@ -15,7 +15,6 @@ public class Commandrules extends EssentialsCommand @Override public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception { - charge(sender); for (String m : ess.getLines(sender, "rules", Util.i18n("noRules"))) { sender.sendMessage(m); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsell.java b/Essentials/src/com/earth2me/essentials/commands/Commandsell.java index f471364d5..658782b9a 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsell.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsell.java @@ -145,11 +145,9 @@ public class Commandsell extends EssentialsCommand { user.sendMessage(Util.i18n("itemNotEnough1")); user.sendMessage(Util.i18n("itemNotEnough2")); - user.sendMessage(Util.i18n("itemNotEnough3")); - return; + throw new Exception(Util.i18n("itemNotEnough3")); } - charge(user); final ItemStack ris = new ItemStack(is.getType(), amount, is.getDurability()); InventoryWorkaround.removeItem(user.getInventory(), true, ris); user.updateInventory(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java index 7f496371f..d9bd32c30 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java @@ -66,7 +66,6 @@ public class Commandsethome extends EssentialsCommand { user.setHome(); } - charge(user); user.sendMessage(Util.i18n("homeSet")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsetjail.java b/Essentials/src/com/earth2me/essentials/commands/Commandsetjail.java index 76fe766c3..d9b0eac4d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsetjail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsetjail.java @@ -15,12 +15,10 @@ public class Commandsetjail extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - if (args.length < 1) { throw new NotEnoughArgumentsException(); } - charge(user); ess.getJail().setJail(user.getLocation(), args[0]); user.sendMessage(Util.format("jailSet",args[0])); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java b/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java index 4e799d6c0..ccdacab57 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java @@ -21,7 +21,6 @@ public class Commandsetwarp extends EssentialsCommand throw new NotEnoughArgumentsException(); } - charge(user); Location loc = user.getLocation(); ess.getWarps().setWarp(args[0], loc); user.sendMessage(Util.format("warpSet", args[0])); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java b/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java index e6b741c43..086b1549d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java @@ -22,7 +22,6 @@ public class Commandsetworth extends EssentialsCommand } ItemStack stack = ess.getItemDb().get(args[0]); - charge(user); ess.getWorth().setPrice(stack, Double.parseDouble(args[1])); user.sendMessage(Util.i18n("worthSet")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsocialspy.java b/Essentials/src/com/earth2me/essentials/commands/Commandsocialspy.java index 33efffeef..8e95e8237 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsocialspy.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsocialspy.java @@ -15,9 +15,6 @@ public class Commandsocialspy extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - - charge(user); user.sendMessage("§7SocialSpy " + (user.toggleSocialSpy() ? Util.i18n("enabled") : Util.i18n("disabled"))); - } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java index 926c219c1..d3b14970a 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java @@ -31,7 +31,6 @@ public class Commandspawner extends EssentialsCommand throw new Exception(Util.i18n("mobSpawnTarget")); } - charge(user); try { String name = args[0]; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java index 4cef00de6..87a22c59f 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java @@ -59,8 +59,7 @@ public class Commandspawnmob extends EssentialsCommand if (ess.getSettings().getProtectPreventSpawn(mobType.toLowerCase()) || (mountType != null && ess.getSettings().getProtectPreventSpawn(mountType.toLowerCase()))) { - user.sendMessage(Util.i18n("unableToSpawnMob")); - return; + throw new Exception(Util.i18n("unableToSpawnMob")); } Entity spawnedMob = null; @@ -71,10 +70,8 @@ public class Commandspawnmob extends EssentialsCommand mob = Mob.fromName(mobType); if (mob == null) { - user.sendMessage(Util.i18n("invalidMob")); - return; + throw new Exception(Util.i18n("invalidMob")); } - charge(user); int[] ignore = { 8, 9 diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java b/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java index 57e5e3fd5..90f40a4bf 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java @@ -15,7 +15,6 @@ public class Commandsuicide extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); user.setHealth(0); user.sendMessage(Util.i18n("suicideMessage")); ess.broadcastMessage(user.getName(), diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandthunder.java b/Essentials/src/com/earth2me/essentials/commands/Commandthunder.java index b1ffd3f7f..34f5c3fed 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandthunder.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandthunder.java @@ -16,13 +16,11 @@ public class Commandthunder extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - if (args.length < 1) { throw new NotEnoughArgumentsException(); } - charge(user); World world = user.getWorld(); boolean setThunder = args[0].equalsIgnoreCase("true"); if (args.length > 1) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java b/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java index 75abda4bb..6f60f7f43 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java @@ -45,7 +45,6 @@ public class Commandtogglejail extends EssentialsCommand return; } } - charge(sender); if (!(p.getBase() instanceof OfflinePlayer)) { ess.getJail().sendToJail(p, args[1]); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtop.java b/Essentials/src/com/earth2me/essentials/commands/Commandtop.java index 8c0c687d0..ee5bfbe45 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtop.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtop.java @@ -20,7 +20,6 @@ public class Commandtop extends EssentialsCommand int topX = user.getLocation().getBlockX(); int topZ = user.getLocation().getBlockZ(); int topY = user.getWorld().getHighestBlockYAt(topX, topZ); - charge(user); user.getTeleport().teleport(new Location(user.getWorld(), user.getLocation().getX(), topY + 1, user.getLocation().getZ()), new Trade(this.getName(), ess)); user.sendMessage(Util.i18n("teleportTop")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtp.java b/Essentials/src/com/earth2me/essentials/commands/Commandtp.java index c147c5d25..c3cc8f7e5 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtp.java @@ -41,7 +41,6 @@ public class Commandtp extends EssentialsCommand throw new Exception("You need access to /tpohere to teleport other players."); } user.sendMessage(Util.i18n("teleporting")); - charge(user); User target = getPlayer(server, args, 0); User toPlayer = getPlayer(server, args, 1); target.getTeleport().now(toPlayer, false); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java index f3b7ae505..32cbe3bd9 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java @@ -25,7 +25,6 @@ public class Commandtpa extends EssentialsCommand { throw new Exception(Util.format("teleportDisabled", p.getDisplayName())); } - charge(user); if (!p.isIgnoredPlayer(user.getName())) { p.requestTeleport(user, false); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java index 25c5d2892..97897852f 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java @@ -21,7 +21,6 @@ public class Commandtpaall extends EssentialsCommand { if (sender instanceof Player) { - charge(sender); teleportAAllPlayers(server, sender, ess.getUser(sender)); return; } @@ -29,7 +28,6 @@ public class Commandtpaall extends EssentialsCommand } User p = getPlayer(server, args, 0); - charge(sender); teleportAAllPlayers(server, sender, p); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java index 2003bbf73..935721345 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java @@ -25,7 +25,6 @@ public class Commandtpahere extends EssentialsCommand { throw new Exception(Util.format("teleportDisabled", p.getDisplayName())); } - charge(user); p.requestTeleport(user, true); p.sendMessage(Util.format("teleportHereRequest", user.getDisplayName())); p.sendMessage(Util.i18n("typeTpaccept")); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java index cc58944d7..1cb6321ea 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java @@ -21,7 +21,6 @@ public class Commandtpall extends EssentialsCommand { if (sender instanceof Player) { - charge(sender); teleportAllPlayers(server, sender, ess.getUser(sender)); return; } @@ -29,7 +28,6 @@ public class Commandtpall extends EssentialsCommand } User p = getPlayer(server, args, 0); - charge(sender); teleportAllPlayers(server, sender, p); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpdeny.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpdeny.java index e31d7ae3c..5d7764ae6 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpdeny.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpdeny.java @@ -21,7 +21,6 @@ public class Commandtpdeny extends EssentialsCommand throw new Exception(Util.i18n("noPendingRequest")); } - charge(user); user.sendMessage(Util.i18n("requestDenied")); p.sendMessage(Util.format("requestDeniedFrom", user.getDisplayName())); user.requestTeleport(null, false); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java index 18d818ea1..5a4e082e0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java @@ -32,7 +32,6 @@ public class Commandtpo extends EssentialsCommand // Verify permission if (!p.isHidden() || user.isAuthorized("essentials.teleport.hidden")) { - charge(user); user.getTeleport().now(p, false); user.sendMessage(Util.i18n("teleporting")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java index 186476a50..7af39854f 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java @@ -33,7 +33,6 @@ public class Commandtpohere extends EssentialsCommand // Verify permission if (!p.isHidden() || user.isAuthorized("essentials.teleport.hidden")) { - charge(user); p.getTeleport().now(user, false); user.sendMessage(Util.i18n("teleporting")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtptoggle.java b/Essentials/src/com/earth2me/essentials/commands/Commandtptoggle.java index 38236d475..f880c5d34 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtptoggle.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtptoggle.java @@ -15,7 +15,6 @@ public class Commandtptoggle extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); user.sendMessage(user.toggleTeleportEnabled() ? Util.i18n("teleportationEnabled") : Util.i18n("teleportationDisabled")); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtree.java b/Essentials/src/com/earth2me/essentials/commands/Commandtree.java index 81be2a329..8013453ab 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtree.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtree.java @@ -51,7 +51,6 @@ public class Commandtree extends EssentialsCommand final boolean success = user.getWorld().generateTree(safeLocation, (TreeType)tree); if (success) { - charge(user); user.sendMessage(Util.i18n("treeSpawned")); } else diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java b/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java index 122891e02..cebbcaf8c 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java @@ -93,8 +93,7 @@ public class Commandunlimited extends EssentialsCommand && !((stack.getType() == Material.WATER_BUCKET || stack.getType() == Material.LAVA_BUCKET) && user.isAuthorized("essentials.unlimited.item-bucket")))) { - user.sendMessage(Util.format("unlimitedItemPermission", itemname)); - return false; + throw new Exception(Util.format("unlimitedItemPermission", itemname)); } String message = "disableUnlimited"; @@ -103,7 +102,6 @@ public class Commandunlimited extends EssentialsCommand { message = "enableUnlimited"; enableUnlimited = true; - charge(user); if (!InventoryWorkaround.containsItem(target.getInventory(), true, stack)) { target.getInventory().addItem(stack); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandweather.java b/Essentials/src/com/earth2me/essentials/commands/Commandweather.java index eec1d9575..45c62d787 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandweather.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandweather.java @@ -23,7 +23,6 @@ public class Commandweather extends EssentialsCommand boolean isStorm = args[0].equalsIgnoreCase("storm"); World world = user.getWorld(); - charge(user); if (args.length > 1) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java index ef815dd87..1769202f5 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java @@ -35,7 +35,6 @@ public class Commandwhois extends EssentialsCommand showhidden = true; } String whois = args[0].toLowerCase(); - charge(sender); int prefixLength = ChatColor.stripColor(ess.getSettings().getNicknamePrefix()).length(); for (Player p : server.getOnlinePlayers()) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandworth.java b/Essentials/src/com/earth2me/essentials/commands/Commandworth.java index f2d6ed954..b59070320 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandworth.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandworth.java @@ -43,7 +43,6 @@ public class Commandworth extends EssentialsCommand throw new Exception(Util.i18n("itemCannotBeSold")); } - charge(user); user.sendMessage(is.getDurability() != 0 ? Util.format("worthMeta", is.getType().toString().toLowerCase().replace("_", ""), diff --git a/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java b/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java index c99cdfdc9..58da18c21 100644 --- a/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java +++ b/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java @@ -79,7 +79,10 @@ public abstract class EssentialsCommand implements IEssentialsCommand @Override public final void run(final Server server, final User user, final String commandLabel, final Command cmd, final String[] args) throws Exception { + final Trade charge = new Trade(this.getName(), ess); + charge.isAffordableFor(user); run(server, user, commandLabel, args); + charge.charge(user); } protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception @@ -111,13 +114,4 @@ public abstract class EssentialsCommand implements IEssentialsCommand } return bldr.toString(); } - - protected void charge(final CommandSender sender) throws ChargeException - { - if (sender instanceof Player) - { - final Trade charge = new Trade(this.getName(), ess); - charge.charge(ess.getUser((Player)sender)); - } - } } From 5a5dc933ad7276ff4ae883f929ebeb83592a3438 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 23:38:21 +0200 Subject: [PATCH 07/43] Forgot this one --- .../src/com/earth2me/essentials/spawn/Commandsetspawn.java | 1 - 1 file changed, 1 deletion(-) diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java index 6f538ac92..9ffc1c3f0 100644 --- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java +++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java @@ -16,7 +16,6 @@ public class Commandsetspawn extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); final String group = args.length > 0 ? getFinalArg(args, 0) : "default"; ess.getSpawn().setSpawn(user.getLocation(), group); user.sendMessage(Util.format("spawnSet", group)); From 3ec0dbd4049ad68a7d1c7de9b509e5e7138bcdfd Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 23:54:23 +0200 Subject: [PATCH 08/43] Oops, these too. --- .../src/com/earth2me/essentials/commands/Commandcompass.java | 1 - .../src/com/earth2me/essentials/commands/Commanddeljail.java | 1 - .../src/com/earth2me/essentials/commands/Commanddelwarp.java | 1 - .../src/com/earth2me/essentials/commands/Commanddepth.java | 1 - 4 files changed, 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandcompass.java b/Essentials/src/com/earth2me/essentials/commands/Commandcompass.java index 0386485f4..bd07c2b9b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandcompass.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandcompass.java @@ -15,7 +15,6 @@ public class Commandcompass extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); int r = (int)user.getCorrectedYaw(); String dir; if (r < 23) dir = "N"; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanddeljail.java b/Essentials/src/com/earth2me/essentials/commands/Commanddeljail.java index 7fb6f816c..23ec04c4e 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanddeljail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanddeljail.java @@ -16,7 +16,6 @@ public class Commanddeljail extends EssentialsCommand { { throw new NotEnoughArgumentsException(); } - charge(sender); ess.getJail().delJail(args[0]); sender.sendMessage(Util.format("deleteJail", args[0])); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanddelwarp.java b/Essentials/src/com/earth2me/essentials/commands/Commanddelwarp.java index 42a68dda8..7c2795dda 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanddelwarp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanddelwarp.java @@ -19,7 +19,6 @@ public class Commanddelwarp extends EssentialsCommand { throw new NotEnoughArgumentsException(); } - charge(sender); ess.getWarps().delWarp(args[0]); sender.sendMessage(Util.format("deleteWarp", args[0])); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanddepth.java b/Essentials/src/com/earth2me/essentials/commands/Commanddepth.java index 9a719335e..5ceb62591 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanddepth.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanddepth.java @@ -15,7 +15,6 @@ public class Commanddepth extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); int y = user.getLocation().getBlockY() - 63; if (y > 0) { From fba4dd2d9a9a347a83b557432fdc4da32ab3ccaa Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 05:12:13 +0200 Subject: [PATCH 09/43] Testing yaml annotations --- .gitignore | 5 +- Essentials/nbproject/build-impl.xml | 14 + Essentials/nbproject/genfiles.properties | 4 +- Essentials/nbproject/project.properties | 10 +- Essentials/nbproject/project.xml | 11 +- .../earth2me/essentials/yaml/BaseYaml.java | 31 + .../essentials/yaml/ConfigLoader.java | 12 + .../com/earth2me/essentials/yaml/General.java | 55 + .../earth2me/essentials/yaml/Settings.java | 16 + .../com/earth2me/essentials/YamlTest.java | 37 + YamlAnnotations/build.xml | 74 ++ YamlAnnotations/manifest.mf | 3 + YamlAnnotations/nbproject/build-impl.xml | 1067 +++++++++++++++++ YamlAnnotations/nbproject/genfiles.properties | 8 + YamlAnnotations/nbproject/project.properties | 71 ++ YamlAnnotations/nbproject/project.xml | 18 + .../src/me/snowleo/yaml/YamlClass.java | 11 + .../src/me/snowleo/yaml/YamlComment.java | 12 + .../snowleo/yaml/YamlPropertyProcessor.java | 238 ++++ 19 files changed, 1690 insertions(+), 7 deletions(-) create mode 100644 Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java create mode 100644 Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java create mode 100644 Essentials/src/com/earth2me/essentials/yaml/General.java create mode 100644 Essentials/src/com/earth2me/essentials/yaml/Settings.java create mode 100644 Essentials/test/com/earth2me/essentials/YamlTest.java create mode 100644 YamlAnnotations/build.xml create mode 100644 YamlAnnotations/manifest.mf create mode 100644 YamlAnnotations/nbproject/build-impl.xml create mode 100644 YamlAnnotations/nbproject/genfiles.properties create mode 100644 YamlAnnotations/nbproject/project.properties create mode 100644 YamlAnnotations/nbproject/project.xml create mode 100644 YamlAnnotations/src/me/snowleo/yaml/YamlClass.java create mode 100644 YamlAnnotations/src/me/snowleo/yaml/YamlComment.java create mode 100644 YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java diff --git a/.gitignore b/.gitignore index 7152ec996..1d8aeb1d1 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,7 @@ /EssentialsPermissionsCommands/dist/ /Essentials/nbproject/private/ /Essentials/dist/ -/Essentials/build/ \ No newline at end of file +/Essentials/build/ +/YamlAnnotations/nbproject/private/ +/YamlAnnotations/build/ +/YamlAnnotations/dist/ \ No newline at end of file diff --git a/Essentials/nbproject/build-impl.xml b/Essentials/nbproject/build-impl.xml index 21661c925..c01a2f393 100644 --- a/Essentials/nbproject/build-impl.xml +++ b/Essentials/nbproject/build-impl.xml @@ -601,6 +601,13 @@ is divided into following sections: + + + + + + + @@ -1038,6 +1045,13 @@ is divided into following sections: + + + + + + + diff --git a/Essentials/nbproject/genfiles.properties b/Essentials/nbproject/genfiles.properties index 9242cfd2b..62b47eb30 100644 --- a/Essentials/nbproject/genfiles.properties +++ b/Essentials/nbproject/genfiles.properties @@ -3,8 +3,8 @@ build.xml.script.CRC32=3233ee78 build.xml.stylesheet.CRC32=28e38971@1.38.2.45 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=4b596d89 -nbproject/build-impl.xml.script.CRC32=dbc81ee1 +nbproject/build-impl.xml.data.CRC32=1d87756b +nbproject/build-impl.xml.script.CRC32=c2ee0b8b nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45 nbproject/profiler-build-impl.xml.data.CRC32=ab78ce15 nbproject/profiler-build-impl.xml.script.CRC32=abda56ed diff --git a/Essentials/nbproject/project.properties b/Essentials/nbproject/project.properties index 8df8ef4d2..407a3dd9c 100644 --- a/Essentials/nbproject/project.properties +++ b/Essentials/nbproject/project.properties @@ -1,6 +1,7 @@ annotation.processing.enabled=true -annotation.processing.enabled.in.editor=false -annotation.processing.run.all.processors=true +annotation.processing.enabled.in.editor=true +annotation.processing.processors.list=me.snowleo.yaml.YamlPropertyProcessor +annotation.processing.run.all.processors=false annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output application.title=Essentials application.vendor= @@ -82,7 +83,8 @@ javac.classpath=\ ${file.reference.iCo6.jar}:\ ${file.reference.MultiCurrency.jar}:\ ${file.reference.BOSEconomy7.jar}:\ - ${file.reference.PermissionsEx.jar} + ${file.reference.PermissionsEx.jar}:\ + ${reference.YamlAnnotations.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false @@ -119,6 +121,8 @@ jnlp.signing.keystore= meta.inf.dir=${src.dir}/META-INF mkdist.disabled=true platform.active=default_platform +project.YamlAnnotations=../YamlAnnotations +reference.YamlAnnotations.jar=${project.YamlAnnotations}/dist/YamlAnnotations.jar run.classpath=\ ${javac.classpath}:\ ${build.classes.dir} diff --git a/Essentials/nbproject/project.xml b/Essentials/nbproject/project.xml index 354722f09..2efbc1ef0 100644 --- a/Essentials/nbproject/project.xml +++ b/Essentials/nbproject/project.xml @@ -14,6 +14,15 @@ ../lib/nblibraries.properties - + + + YamlAnnotations + jar + + jar + clean + jar + + diff --git a/Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java b/Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java new file mode 100644 index 000000000..ab689ca5d --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java @@ -0,0 +1,31 @@ +package com.earth2me.essentials.yaml; + +import java.util.logging.Level; +import java.util.logging.Logger; + + +public abstract class BaseYaml +{ + + protected BaseYaml() + { + } + + protected abstract Class getClazz(); + + public T load() { + try + { + return getClazz().newInstance(); + } + catch (InstantiationException ex) + { + Logger.getLogger(BaseYaml.class.getName()).log(Level.SEVERE, null, ex); + } + catch (IllegalAccessException ex) + { + Logger.getLogger(BaseYaml.class.getName()).log(Level.SEVERE, null, ex); + } + return null; + } +} diff --git a/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java b/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java new file mode 100644 index 000000000..a82546068 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java @@ -0,0 +1,12 @@ +package com.earth2me.essentials.yaml; + + +public class ConfigLoader +{ + + public ConfigLoader() + { + new Settings().getTest(); + } + +} diff --git a/Essentials/src/com/earth2me/essentials/yaml/General.java b/Essentials/src/com/earth2me/essentials/yaml/General.java new file mode 100644 index 000000000..1d376ada6 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/yaml/General.java @@ -0,0 +1,55 @@ +package com.earth2me.essentials.yaml; + +import java.io.Serializable; + + +public class General implements Serializable +{ + private boolean debug = false; + private boolean updateCheck = true; + private String location = "null"; + + public General() + { + } + + public boolean isDebug() + { + return debug; + } + + public void setDebug(final boolean debug) + { + this.debug = debug; + } + + public boolean isUpdateCheck() + { + return updateCheck; + } + + public void setUpdateCheck(final boolean updateCheck) + { + this.updateCheck = updateCheck; + } + + public boolean isStupid() + { + return true; + } + + public void setStupid(final boolean bla) + { + return; + } + + public String getLocation() + { + return location; + } + + public void setLocation(final String location) + { + this.location = location; + } +} diff --git a/Essentials/src/com/earth2me/essentials/yaml/Settings.java b/Essentials/src/com/earth2me/essentials/yaml/Settings.java new file mode 100644 index 000000000..3776f2b82 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/yaml/Settings.java @@ -0,0 +1,16 @@ +package com.earth2me.essentials.yaml; + +import me.snowleo.yaml.YamlClass; +import me.snowleo.yaml.YamlComment; + +@YamlClass +public class Settings extends SettingsYaml +{ + @YamlComment(comment = "Hello") + protected General test = new General(); + boolean test2 = true; + + public Settings() { + } + +} diff --git a/Essentials/test/com/earth2me/essentials/YamlTest.java b/Essentials/test/com/earth2me/essentials/YamlTest.java new file mode 100644 index 000000000..fd097842c --- /dev/null +++ b/Essentials/test/com/earth2me/essentials/YamlTest.java @@ -0,0 +1,37 @@ +package com.earth2me.essentials; + +import junit.framework.TestCase; +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.nodes.Tag; +import com.earth2me.essentials.yaml.Settings; +import org.bukkit.Location; +import org.bukkit.World.Environment; +import org.yaml.snakeyaml.constructor.Constructor; + + +public class YamlTest extends TestCase +{ + public YamlTest() + { + } + + public void testYaml() + { + final DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + options.setExplicitRoot(Tag.MAP); + final Yaml yaml = new Yaml(options); + //Settings settings = (Settings)yaml.load(""); + Settings set1 = new Settings(); + final String dump = yaml.dump(set1); + final Yaml yaml2 = new Yaml(new Constructor(Settings.class)); + final Settings set = (Settings)yaml2.load(dump); + if (set != null) + { + //assert set.getGeneral().getLocation() == null; + //assert set.equals(new Settings()); + System.out.println(dump); + } + } +} diff --git a/YamlAnnotations/build.xml b/YamlAnnotations/build.xml new file mode 100644 index 000000000..6c2177662 --- /dev/null +++ b/YamlAnnotations/build.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + Builds, tests, and runs the project YamlAnnotations. + + + diff --git a/YamlAnnotations/manifest.mf b/YamlAnnotations/manifest.mf new file mode 100644 index 000000000..328e8e5bc --- /dev/null +++ b/YamlAnnotations/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/YamlAnnotations/nbproject/build-impl.xml b/YamlAnnotations/nbproject/build-impl.xml new file mode 100644 index 000000000..de52ad5c0 --- /dev/null +++ b/YamlAnnotations/nbproject/build-impl.xml @@ -0,0 +1,1067 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + + + + + + java -cp "${run.classpath.with.dist.jar}" ${main.class} + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + Must select one file in the IDE or set profile.class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/YamlAnnotations/nbproject/genfiles.properties b/YamlAnnotations/nbproject/genfiles.properties new file mode 100644 index 000000000..55d30716f --- /dev/null +++ b/YamlAnnotations/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=6b9374e7 +build.xml.script.CRC32=b35f5bf5 +build.xml.stylesheet.CRC32=28e38971@1.44.1.45 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=6b9374e7 +nbproject/build-impl.xml.script.CRC32=822a2f91 +nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45 diff --git a/YamlAnnotations/nbproject/project.properties b/YamlAnnotations/nbproject/project.properties new file mode 100644 index 000000000..6f85622cc --- /dev/null +++ b/YamlAnnotations/nbproject/project.properties @@ -0,0 +1,71 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/YamlAnnotations.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.6 +javac.target=1.6 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class= +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/YamlAnnotations/nbproject/project.xml b/YamlAnnotations/nbproject/project.xml new file mode 100644 index 000000000..4ef3e3ff7 --- /dev/null +++ b/YamlAnnotations/nbproject/project.xml @@ -0,0 +1,18 @@ + + + org.netbeans.modules.java.j2seproject + + + YamlAnnotations + + + + + + + + + ../lib/nblibraries.properties + + + diff --git a/YamlAnnotations/src/me/snowleo/yaml/YamlClass.java b/YamlAnnotations/src/me/snowleo/yaml/YamlClass.java new file mode 100644 index 000000000..e98a0fc38 --- /dev/null +++ b/YamlAnnotations/src/me/snowleo/yaml/YamlClass.java @@ -0,0 +1,11 @@ +package me.snowleo.yaml; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + + +@Target(ElementType.TYPE) +public @interface YamlClass +{ +} + diff --git a/YamlAnnotations/src/me/snowleo/yaml/YamlComment.java b/YamlAnnotations/src/me/snowleo/yaml/YamlComment.java new file mode 100644 index 000000000..5e8ba04e4 --- /dev/null +++ b/YamlAnnotations/src/me/snowleo/yaml/YamlComment.java @@ -0,0 +1,12 @@ +package me.snowleo.yaml; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + + +@Target(ElementType.FIELD) +public @interface YamlComment +{ + String[] comment() default ""; +} + diff --git a/YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java b/YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java new file mode 100644 index 000000000..c56b51b61 --- /dev/null +++ b/YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java @@ -0,0 +1,238 @@ +package me.snowleo.yaml; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.Filer; +import javax.annotation.processing.Messager; +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.annotation.processing.SupportedSourceVersion; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.ElementFilter; +import javax.lang.model.util.Elements; +import javax.tools.Diagnostic; +import javax.tools.JavaFileObject; + + +@SupportedAnnotationTypes("me.snowleo.yaml.YamlClass") +@SupportedSourceVersion(SourceVersion.RELEASE_6) +public class YamlPropertyProcessor extends AbstractProcessor +{ + private transient Filer filer; + private transient Messager messager; + private Elements eltUtils; + + public YamlPropertyProcessor() + { + super(); + } + + @Override + public void init(final ProcessingEnvironment processingEnv) + { + super.init(processingEnv); + filer = processingEnv.getFiler(); + messager = processingEnv.getMessager(); + eltUtils = processingEnv.getElementUtils(); + } + + @Override + public boolean process(final Set set, final RoundEnvironment roundEnv) + { + for (Element elem : roundEnv.getElementsAnnotatedWith(YamlClass.class)) + { + if (elem.getKind() != ElementKind.CLASS) + { + messager.printMessage(Diagnostic.Kind.ERROR, "YamlClass has to be a class", elem); + continue; + } + final TypeElement clazz = (TypeElement)elem; + String superClassName = clazz.getSuperclass().toString(); + if (!superClassName.startsWith(clazz.getEnclosingElement().toString())) + { + superClassName = clazz.getEnclosingElement().toString() + "." + superClassName; + } + if (!superClassName.equalsIgnoreCase(clazz.getQualifiedName().toString() + "Yaml")) + { + messager.printMessage(Diagnostic.Kind.ERROR, "YamlClass must be extended by " + clazz.getQualifiedName().toString() + "Yaml", elem); + continue; + } + final List fields = new ArrayList(); + for (VariableElement field : ElementFilter.fieldsIn(clazz.getEnclosedElements())) + { + if (!(field.getModifiers().contains(Modifier.STATIC)) + && field.getModifiers().contains(Modifier.PROTECTED)) + { + fields.add(field); + } + else if (field.getAnnotation(YamlComment.class) != null) + { + messager.printMessage(Diagnostic.Kind.ERROR, "YamlComment fields have to be nonstatic and protected.", field); + continue; + } + } + if (fields.isEmpty()) + { + messager.printMessage(Diagnostic.Kind.ERROR, "YamlClass needs at least one protected field.", clazz); + continue; + } + createImplclass(clazz, fields); + createSuperclass(clazz, fields); + } + return true; + } + + private void createSuperclass(final TypeElement clazz, final List fields) + { + try + { + final JavaFileObject file = filer.createSourceFile(clazz.getQualifiedName() + "Yaml"); + messager.printMessage(Diagnostic.Kind.NOTE, "Creating " + file.toUri()); + + final Writer writer = file.openWriter(); + //Add the content to the newly generated file. + + final PrintWriter pwriter = new PrintWriter(writer); + try + { + pwriter.print("package "); + pwriter.print(clazz.getEnclosingElement()); + pwriter.println(';'); + pwriter.println(); + pwriter.print("public class "); + pwriter.print(clazz.getSimpleName()); + pwriter.print("Yaml extends BaseYaml<"); + pwriter.print(clazz.getSimpleName()); + pwriter.println("> {"); + + pwriter.println(" @Override"); + pwriter.print(" protected Class<"); + pwriter.print(clazz.getSimpleName()); + pwriter.print("YamlImpl> getClazz() { return "); + pwriter.print(clazz.getSimpleName()); + pwriter.println("YamlImpl.class; };"); + + for (VariableElement var : fields) + { + final TypeMirror type = var.asType(); + final String name = capitalize(var.getSimpleName().toString()); + pwriter.print(" public "); + pwriter.print(type.toString()); + if (type.toString().equalsIgnoreCase("boolean")) + { + pwriter.print(" is"); + } + else + { + pwriter.print(" get"); + } + pwriter.print(name); + pwriter.println("() { throw new AssertionError(\"Cannot be called.\"); }"); + pwriter.print(" public void set"); + pwriter.print(name); + pwriter.print("(final "); + pwriter.print(type.toString()); + pwriter.print(' '); + pwriter.print(name); + pwriter.println(") { throw new AssertionError(\"Cannot be called.\"); }"); + } + pwriter.println("}"); + pwriter.flush(); + } + finally + { + pwriter.close(); + } + } + catch (IOException ex) + { + messager.printMessage(Diagnostic.Kind.ERROR, ex.toString()); + } + } + + private void createImplclass(final TypeElement clazz, final List fields) + { + try + { + final JavaFileObject file = filer.createSourceFile(clazz.getQualifiedName() + "YamlImpl"); + messager.printMessage(Diagnostic.Kind.NOTE, "Creating " + file.toUri()); + + final Writer writer = file.openWriter(); + //Add the content to the newly generated file. + + final PrintWriter pwriter = new PrintWriter(writer); + try + { + pwriter.print("package "); + pwriter.print(clazz.getEnclosingElement()); + pwriter.println(';'); + pwriter.println(); + pwriter.print("public class "); + pwriter.print(clazz.getSimpleName()); + pwriter.print("YamlImpl extends "); + pwriter.print(clazz.getSimpleName()); + pwriter.println(" {"); + + for (VariableElement var : fields) + { + final TypeMirror type = var.asType(); + final String name = capitalize(var.getSimpleName().toString()); + pwriter.print(" public "); + pwriter.print(type.toString()); + if (type.toString().equalsIgnoreCase("boolean")) + { + pwriter.print(" is"); + } + else + { + pwriter.print(" get"); + } + pwriter.print(name); + pwriter.print("() { return this."); + pwriter.print(var.getSimpleName().toString()); + pwriter.println("; }"); + pwriter.print(" public void set"); + pwriter.print(name); + pwriter.print("(final "); + pwriter.print(type.toString()); + pwriter.print(' '); + pwriter.print(name); + pwriter.print(") { this."); + pwriter.print(var.getSimpleName().toString()); + pwriter.print(" = "); + pwriter.print(name); + pwriter.println("; }"); + } + pwriter.println("}"); + pwriter.flush(); + } + finally + { + pwriter.close(); + } + } + catch (IOException ex) + { + messager.printMessage(Diagnostic.Kind.ERROR, ex.toString()); + } + } + + private static String capitalize(String name) + { + char[] c = name.toCharArray(); + c[0] = Character.toUpperCase(c[0]); + return new String(c); + } +} From 1fb57cb6789071459891300a06af016bd7a9608a Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 05:21:12 +0200 Subject: [PATCH 10/43] Disabling broken test --- Essentials/test/com/earth2me/essentials/YamlTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Essentials/test/com/earth2me/essentials/YamlTest.java b/Essentials/test/com/earth2me/essentials/YamlTest.java index fd097842c..297ff894c 100644 --- a/Essentials/test/com/earth2me/essentials/YamlTest.java +++ b/Essentials/test/com/earth2me/essentials/YamlTest.java @@ -23,15 +23,15 @@ public class YamlTest extends TestCase options.setExplicitRoot(Tag.MAP); final Yaml yaml = new Yaml(options); //Settings settings = (Settings)yaml.load(""); - Settings set1 = new Settings(); - final String dump = yaml.dump(set1); - final Yaml yaml2 = new Yaml(new Constructor(Settings.class)); - final Settings set = (Settings)yaml2.load(dump); + /*Settings set1 = new Settings(); + //final String dump = yaml.dump(set1); + //final Yaml yaml2 = new Yaml(new Constructor(Settings.class)); + //final Settings set = (Settings)yaml2.load(dump); if (set != null) { //assert set.getGeneral().getLocation() == null; //assert set.equals(new Settings()); System.out.println(dump); - } + }*/ } } From 59e45592cffc4b25e18ddf38fa49e62e2321f419 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 06:16:01 +0200 Subject: [PATCH 11/43] Allow the build server to build again. --- Essentials/src/com/earth2me/essentials/yaml/Settings.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/yaml/Settings.java b/Essentials/src/com/earth2me/essentials/yaml/Settings.java index 3776f2b82..ad236b964 100644 --- a/Essentials/src/com/earth2me/essentials/yaml/Settings.java +++ b/Essentials/src/com/earth2me/essentials/yaml/Settings.java @@ -3,11 +3,12 @@ package com.earth2me.essentials.yaml; import me.snowleo.yaml.YamlClass; import me.snowleo.yaml.YamlComment; -@YamlClass -public class Settings extends SettingsYaml +//@YamlClass +public class Settings //extends SettingsYaml { - @YamlComment(comment = "Hello") + //@YamlComment(comment = "Hello") protected General test = new General(); + protected boolean test3; boolean test2 = true; public Settings() { From b559809bfa8311c90284e44bcaa49a398c60b258 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 06:17:43 +0200 Subject: [PATCH 12/43] Another build fix --- Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java b/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java index a82546068..7058a501f 100644 --- a/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java +++ b/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java @@ -6,7 +6,7 @@ public class ConfigLoader public ConfigLoader() { - new Settings().getTest(); + new Settings(); } } From 3dd3fa45190283fe5bed7fa383c6a8bdeef6a49c Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 06:24:34 +0200 Subject: [PATCH 13/43] Revert "Testing yaml annotations" This reverts commit fba4dd2d9a9a347a83b557432fdc4da32ab3ccaa. --- .gitignore | 5 +- Essentials/nbproject/build-impl.xml | 14 - Essentials/nbproject/genfiles.properties | 4 +- Essentials/nbproject/project.properties | 10 +- Essentials/nbproject/project.xml | 11 +- .../earth2me/essentials/yaml/BaseYaml.java | 31 - .../essentials/yaml/ConfigLoader.java | 12 - .../com/earth2me/essentials/yaml/General.java | 55 - .../earth2me/essentials/yaml/Settings.java | 17 - .../com/earth2me/essentials/YamlTest.java | 37 - YamlAnnotations/build.xml | 74 -- YamlAnnotations/manifest.mf | 3 - YamlAnnotations/nbproject/build-impl.xml | 1067 ----------------- YamlAnnotations/nbproject/genfiles.properties | 8 - YamlAnnotations/nbproject/project.properties | 71 -- YamlAnnotations/nbproject/project.xml | 18 - .../src/me/snowleo/yaml/YamlClass.java | 11 - .../src/me/snowleo/yaml/YamlComment.java | 12 - .../snowleo/yaml/YamlPropertyProcessor.java | 238 ---- 19 files changed, 7 insertions(+), 1691 deletions(-) delete mode 100644 Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java delete mode 100644 Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java delete mode 100644 Essentials/src/com/earth2me/essentials/yaml/General.java delete mode 100644 Essentials/src/com/earth2me/essentials/yaml/Settings.java delete mode 100644 Essentials/test/com/earth2me/essentials/YamlTest.java delete mode 100644 YamlAnnotations/build.xml delete mode 100644 YamlAnnotations/manifest.mf delete mode 100644 YamlAnnotations/nbproject/build-impl.xml delete mode 100644 YamlAnnotations/nbproject/genfiles.properties delete mode 100644 YamlAnnotations/nbproject/project.properties delete mode 100644 YamlAnnotations/nbproject/project.xml delete mode 100644 YamlAnnotations/src/me/snowleo/yaml/YamlClass.java delete mode 100644 YamlAnnotations/src/me/snowleo/yaml/YamlComment.java delete mode 100644 YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java diff --git a/.gitignore b/.gitignore index 1d8aeb1d1..7152ec996 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,4 @@ /EssentialsPermissionsCommands/dist/ /Essentials/nbproject/private/ /Essentials/dist/ -/Essentials/build/ -/YamlAnnotations/nbproject/private/ -/YamlAnnotations/build/ -/YamlAnnotations/dist/ \ No newline at end of file +/Essentials/build/ \ No newline at end of file diff --git a/Essentials/nbproject/build-impl.xml b/Essentials/nbproject/build-impl.xml index c01a2f393..21661c925 100644 --- a/Essentials/nbproject/build-impl.xml +++ b/Essentials/nbproject/build-impl.xml @@ -601,13 +601,6 @@ is divided into following sections: - - - - - - - @@ -1045,13 +1038,6 @@ is divided into following sections: - - - - - - - diff --git a/Essentials/nbproject/genfiles.properties b/Essentials/nbproject/genfiles.properties index 62b47eb30..9242cfd2b 100644 --- a/Essentials/nbproject/genfiles.properties +++ b/Essentials/nbproject/genfiles.properties @@ -3,8 +3,8 @@ build.xml.script.CRC32=3233ee78 build.xml.stylesheet.CRC32=28e38971@1.38.2.45 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=1d87756b -nbproject/build-impl.xml.script.CRC32=c2ee0b8b +nbproject/build-impl.xml.data.CRC32=4b596d89 +nbproject/build-impl.xml.script.CRC32=dbc81ee1 nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45 nbproject/profiler-build-impl.xml.data.CRC32=ab78ce15 nbproject/profiler-build-impl.xml.script.CRC32=abda56ed diff --git a/Essentials/nbproject/project.properties b/Essentials/nbproject/project.properties index 407a3dd9c..8df8ef4d2 100644 --- a/Essentials/nbproject/project.properties +++ b/Essentials/nbproject/project.properties @@ -1,7 +1,6 @@ annotation.processing.enabled=true -annotation.processing.enabled.in.editor=true -annotation.processing.processors.list=me.snowleo.yaml.YamlPropertyProcessor -annotation.processing.run.all.processors=false +annotation.processing.enabled.in.editor=false +annotation.processing.run.all.processors=true annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output application.title=Essentials application.vendor= @@ -83,8 +82,7 @@ javac.classpath=\ ${file.reference.iCo6.jar}:\ ${file.reference.MultiCurrency.jar}:\ ${file.reference.BOSEconomy7.jar}:\ - ${file.reference.PermissionsEx.jar}:\ - ${reference.YamlAnnotations.jar} + ${file.reference.PermissionsEx.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false @@ -121,8 +119,6 @@ jnlp.signing.keystore= meta.inf.dir=${src.dir}/META-INF mkdist.disabled=true platform.active=default_platform -project.YamlAnnotations=../YamlAnnotations -reference.YamlAnnotations.jar=${project.YamlAnnotations}/dist/YamlAnnotations.jar run.classpath=\ ${javac.classpath}:\ ${build.classes.dir} diff --git a/Essentials/nbproject/project.xml b/Essentials/nbproject/project.xml index 2efbc1ef0..354722f09 100644 --- a/Essentials/nbproject/project.xml +++ b/Essentials/nbproject/project.xml @@ -14,15 +14,6 @@ ../lib/nblibraries.properties - - - YamlAnnotations - jar - - jar - clean - jar - - + diff --git a/Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java b/Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java deleted file mode 100644 index ab689ca5d..000000000 --- a/Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.earth2me.essentials.yaml; - -import java.util.logging.Level; -import java.util.logging.Logger; - - -public abstract class BaseYaml -{ - - protected BaseYaml() - { - } - - protected abstract Class getClazz(); - - public T load() { - try - { - return getClazz().newInstance(); - } - catch (InstantiationException ex) - { - Logger.getLogger(BaseYaml.class.getName()).log(Level.SEVERE, null, ex); - } - catch (IllegalAccessException ex) - { - Logger.getLogger(BaseYaml.class.getName()).log(Level.SEVERE, null, ex); - } - return null; - } -} diff --git a/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java b/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java deleted file mode 100644 index 7058a501f..000000000 --- a/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.earth2me.essentials.yaml; - - -public class ConfigLoader -{ - - public ConfigLoader() - { - new Settings(); - } - -} diff --git a/Essentials/src/com/earth2me/essentials/yaml/General.java b/Essentials/src/com/earth2me/essentials/yaml/General.java deleted file mode 100644 index 1d376ada6..000000000 --- a/Essentials/src/com/earth2me/essentials/yaml/General.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.earth2me.essentials.yaml; - -import java.io.Serializable; - - -public class General implements Serializable -{ - private boolean debug = false; - private boolean updateCheck = true; - private String location = "null"; - - public General() - { - } - - public boolean isDebug() - { - return debug; - } - - public void setDebug(final boolean debug) - { - this.debug = debug; - } - - public boolean isUpdateCheck() - { - return updateCheck; - } - - public void setUpdateCheck(final boolean updateCheck) - { - this.updateCheck = updateCheck; - } - - public boolean isStupid() - { - return true; - } - - public void setStupid(final boolean bla) - { - return; - } - - public String getLocation() - { - return location; - } - - public void setLocation(final String location) - { - this.location = location; - } -} diff --git a/Essentials/src/com/earth2me/essentials/yaml/Settings.java b/Essentials/src/com/earth2me/essentials/yaml/Settings.java deleted file mode 100644 index ad236b964..000000000 --- a/Essentials/src/com/earth2me/essentials/yaml/Settings.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.earth2me.essentials.yaml; - -import me.snowleo.yaml.YamlClass; -import me.snowleo.yaml.YamlComment; - -//@YamlClass -public class Settings //extends SettingsYaml -{ - //@YamlComment(comment = "Hello") - protected General test = new General(); - protected boolean test3; - boolean test2 = true; - - public Settings() { - } - -} diff --git a/Essentials/test/com/earth2me/essentials/YamlTest.java b/Essentials/test/com/earth2me/essentials/YamlTest.java deleted file mode 100644 index 297ff894c..000000000 --- a/Essentials/test/com/earth2me/essentials/YamlTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.earth2me.essentials; - -import junit.framework.TestCase; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.nodes.Tag; -import com.earth2me.essentials.yaml.Settings; -import org.bukkit.Location; -import org.bukkit.World.Environment; -import org.yaml.snakeyaml.constructor.Constructor; - - -public class YamlTest extends TestCase -{ - public YamlTest() - { - } - - public void testYaml() - { - final DumperOptions options = new DumperOptions(); - options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - options.setExplicitRoot(Tag.MAP); - final Yaml yaml = new Yaml(options); - //Settings settings = (Settings)yaml.load(""); - /*Settings set1 = new Settings(); - //final String dump = yaml.dump(set1); - //final Yaml yaml2 = new Yaml(new Constructor(Settings.class)); - //final Settings set = (Settings)yaml2.load(dump); - if (set != null) - { - //assert set.getGeneral().getLocation() == null; - //assert set.equals(new Settings()); - System.out.println(dump); - }*/ - } -} diff --git a/YamlAnnotations/build.xml b/YamlAnnotations/build.xml deleted file mode 100644 index 6c2177662..000000000 --- a/YamlAnnotations/build.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - Builds, tests, and runs the project YamlAnnotations. - - - diff --git a/YamlAnnotations/manifest.mf b/YamlAnnotations/manifest.mf deleted file mode 100644 index 328e8e5bc..000000000 --- a/YamlAnnotations/manifest.mf +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -X-COMMENT: Main-Class will be added automatically by build - diff --git a/YamlAnnotations/nbproject/build-impl.xml b/YamlAnnotations/nbproject/build-impl.xml deleted file mode 100644 index de52ad5c0..000000000 --- a/YamlAnnotations/nbproject/build-impl.xml +++ /dev/null @@ -1,1067 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set src.dir - Must set test.src.dir - Must set build.dir - Must set dist.dir - Must set build.classes.dir - Must set dist.javadoc.dir - Must set build.test.classes.dir - Must set build.test.results.dir - Must set build.classes.excludes - Must set dist.jar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set javac.includes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set JVM to use for profiling in profiler.info.jvm - Must set profiler agent JVM arguments in profiler.info.jvmargs.agent - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select some files in the IDE or set javac.includes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - To run this application from the command line without Ant, try: - - - - - - - java -cp "${run.classpath.with.dist.jar}" ${main.class} - - - - - - - - - - - - - - - - - - - - - - - - - To run this application from the command line without Ant, try: - - java -jar "${dist.jar.resolved}" - - - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set run.class - - - - Must select one file in the IDE or set run.class - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set debug.class - - - - - Must select one file in the IDE or set debug.class - - - - - Must set fix.includes - - - - - - - - - - - - - - - - - Must select one file in the IDE or set profile.class - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select some files in the IDE or set javac.includes - - - - - - - - - - - - - - - - - - - - Some tests failed; see details above. - - - - - - - - - Must select some files in the IDE or set test.includes - - - - Some tests failed; see details above. - - - - - Must select one file in the IDE or set test.class - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/YamlAnnotations/nbproject/genfiles.properties b/YamlAnnotations/nbproject/genfiles.properties deleted file mode 100644 index 55d30716f..000000000 --- a/YamlAnnotations/nbproject/genfiles.properties +++ /dev/null @@ -1,8 +0,0 @@ -build.xml.data.CRC32=6b9374e7 -build.xml.script.CRC32=b35f5bf5 -build.xml.stylesheet.CRC32=28e38971@1.44.1.45 -# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. -# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=6b9374e7 -nbproject/build-impl.xml.script.CRC32=822a2f91 -nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45 diff --git a/YamlAnnotations/nbproject/project.properties b/YamlAnnotations/nbproject/project.properties deleted file mode 100644 index 6f85622cc..000000000 --- a/YamlAnnotations/nbproject/project.properties +++ /dev/null @@ -1,71 +0,0 @@ -annotation.processing.enabled=true -annotation.processing.enabled.in.editor=false -annotation.processing.processor.options= -annotation.processing.processors.list= -annotation.processing.run.all.processors=true -annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output -build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form -# This directory is removed when the project is cleaned: -build.dir=build -build.generated.dir=${build.dir}/generated -build.generated.sources.dir=${build.dir}/generated-sources -# Only compile against the classpath explicitly listed here: -build.sysclasspath=ignore -build.test.classes.dir=${build.dir}/test/classes -build.test.results.dir=${build.dir}/test/results -# Uncomment to specify the preferred debugger connection transport: -#debug.transport=dt_socket -debug.classpath=\ - ${run.classpath} -debug.test.classpath=\ - ${run.test.classpath} -# This directory is removed when the project is cleaned: -dist.dir=dist -dist.jar=${dist.dir}/YamlAnnotations.jar -dist.javadoc.dir=${dist.dir}/javadoc -excludes= -includes=** -jar.compress=false -javac.classpath= -# Space-separated list of extra javac options -javac.compilerargs= -javac.deprecation=false -javac.processorpath=\ - ${javac.classpath} -javac.source=1.6 -javac.target=1.6 -javac.test.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir} -javac.test.processorpath=\ - ${javac.test.classpath} -javadoc.additionalparam= -javadoc.author=false -javadoc.encoding=${source.encoding} -javadoc.noindex=false -javadoc.nonavbar=false -javadoc.notree=false -javadoc.private=false -javadoc.splitindex=true -javadoc.use=true -javadoc.version=false -javadoc.windowtitle= -main.class= -manifest.file=manifest.mf -meta.inf.dir=${src.dir}/META-INF -mkdist.disabled=false -platform.active=default_platform -run.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir} -# Space-separated list of JVM arguments used when running the project -# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value -# or test-sys-prop.name=value to set system properties for unit tests): -run.jvmargs= -run.test.classpath=\ - ${javac.test.classpath}:\ - ${build.test.classes.dir} -source.encoding=UTF-8 -src.dir=src -test.src.dir=test diff --git a/YamlAnnotations/nbproject/project.xml b/YamlAnnotations/nbproject/project.xml deleted file mode 100644 index 4ef3e3ff7..000000000 --- a/YamlAnnotations/nbproject/project.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - org.netbeans.modules.java.j2seproject - - - YamlAnnotations - - - - - - - - - ../lib/nblibraries.properties - - - diff --git a/YamlAnnotations/src/me/snowleo/yaml/YamlClass.java b/YamlAnnotations/src/me/snowleo/yaml/YamlClass.java deleted file mode 100644 index e98a0fc38..000000000 --- a/YamlAnnotations/src/me/snowleo/yaml/YamlClass.java +++ /dev/null @@ -1,11 +0,0 @@ -package me.snowleo.yaml; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Target; - - -@Target(ElementType.TYPE) -public @interface YamlClass -{ -} - diff --git a/YamlAnnotations/src/me/snowleo/yaml/YamlComment.java b/YamlAnnotations/src/me/snowleo/yaml/YamlComment.java deleted file mode 100644 index 5e8ba04e4..000000000 --- a/YamlAnnotations/src/me/snowleo/yaml/YamlComment.java +++ /dev/null @@ -1,12 +0,0 @@ -package me.snowleo.yaml; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Target; - - -@Target(ElementType.FIELD) -public @interface YamlComment -{ - String[] comment() default ""; -} - diff --git a/YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java b/YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java deleted file mode 100644 index c56b51b61..000000000 --- a/YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java +++ /dev/null @@ -1,238 +0,0 @@ -package me.snowleo.yaml; - -import java.io.IOException; -import java.io.PrintWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import javax.annotation.processing.AbstractProcessor; -import javax.annotation.processing.Filer; -import javax.annotation.processing.Messager; -import javax.annotation.processing.ProcessingEnvironment; -import javax.annotation.processing.RoundEnvironment; -import javax.annotation.processing.SupportedAnnotationTypes; -import javax.annotation.processing.SupportedSourceVersion; -import javax.lang.model.SourceVersion; -import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; -import javax.lang.model.element.Modifier; -import javax.lang.model.element.TypeElement; -import javax.lang.model.element.VariableElement; -import javax.lang.model.type.TypeMirror; -import javax.lang.model.util.ElementFilter; -import javax.lang.model.util.Elements; -import javax.tools.Diagnostic; -import javax.tools.JavaFileObject; - - -@SupportedAnnotationTypes("me.snowleo.yaml.YamlClass") -@SupportedSourceVersion(SourceVersion.RELEASE_6) -public class YamlPropertyProcessor extends AbstractProcessor -{ - private transient Filer filer; - private transient Messager messager; - private Elements eltUtils; - - public YamlPropertyProcessor() - { - super(); - } - - @Override - public void init(final ProcessingEnvironment processingEnv) - { - super.init(processingEnv); - filer = processingEnv.getFiler(); - messager = processingEnv.getMessager(); - eltUtils = processingEnv.getElementUtils(); - } - - @Override - public boolean process(final Set set, final RoundEnvironment roundEnv) - { - for (Element elem : roundEnv.getElementsAnnotatedWith(YamlClass.class)) - { - if (elem.getKind() != ElementKind.CLASS) - { - messager.printMessage(Diagnostic.Kind.ERROR, "YamlClass has to be a class", elem); - continue; - } - final TypeElement clazz = (TypeElement)elem; - String superClassName = clazz.getSuperclass().toString(); - if (!superClassName.startsWith(clazz.getEnclosingElement().toString())) - { - superClassName = clazz.getEnclosingElement().toString() + "." + superClassName; - } - if (!superClassName.equalsIgnoreCase(clazz.getQualifiedName().toString() + "Yaml")) - { - messager.printMessage(Diagnostic.Kind.ERROR, "YamlClass must be extended by " + clazz.getQualifiedName().toString() + "Yaml", elem); - continue; - } - final List fields = new ArrayList(); - for (VariableElement field : ElementFilter.fieldsIn(clazz.getEnclosedElements())) - { - if (!(field.getModifiers().contains(Modifier.STATIC)) - && field.getModifiers().contains(Modifier.PROTECTED)) - { - fields.add(field); - } - else if (field.getAnnotation(YamlComment.class) != null) - { - messager.printMessage(Diagnostic.Kind.ERROR, "YamlComment fields have to be nonstatic and protected.", field); - continue; - } - } - if (fields.isEmpty()) - { - messager.printMessage(Diagnostic.Kind.ERROR, "YamlClass needs at least one protected field.", clazz); - continue; - } - createImplclass(clazz, fields); - createSuperclass(clazz, fields); - } - return true; - } - - private void createSuperclass(final TypeElement clazz, final List fields) - { - try - { - final JavaFileObject file = filer.createSourceFile(clazz.getQualifiedName() + "Yaml"); - messager.printMessage(Diagnostic.Kind.NOTE, "Creating " + file.toUri()); - - final Writer writer = file.openWriter(); - //Add the content to the newly generated file. - - final PrintWriter pwriter = new PrintWriter(writer); - try - { - pwriter.print("package "); - pwriter.print(clazz.getEnclosingElement()); - pwriter.println(';'); - pwriter.println(); - pwriter.print("public class "); - pwriter.print(clazz.getSimpleName()); - pwriter.print("Yaml extends BaseYaml<"); - pwriter.print(clazz.getSimpleName()); - pwriter.println("> {"); - - pwriter.println(" @Override"); - pwriter.print(" protected Class<"); - pwriter.print(clazz.getSimpleName()); - pwriter.print("YamlImpl> getClazz() { return "); - pwriter.print(clazz.getSimpleName()); - pwriter.println("YamlImpl.class; };"); - - for (VariableElement var : fields) - { - final TypeMirror type = var.asType(); - final String name = capitalize(var.getSimpleName().toString()); - pwriter.print(" public "); - pwriter.print(type.toString()); - if (type.toString().equalsIgnoreCase("boolean")) - { - pwriter.print(" is"); - } - else - { - pwriter.print(" get"); - } - pwriter.print(name); - pwriter.println("() { throw new AssertionError(\"Cannot be called.\"); }"); - pwriter.print(" public void set"); - pwriter.print(name); - pwriter.print("(final "); - pwriter.print(type.toString()); - pwriter.print(' '); - pwriter.print(name); - pwriter.println(") { throw new AssertionError(\"Cannot be called.\"); }"); - } - pwriter.println("}"); - pwriter.flush(); - } - finally - { - pwriter.close(); - } - } - catch (IOException ex) - { - messager.printMessage(Diagnostic.Kind.ERROR, ex.toString()); - } - } - - private void createImplclass(final TypeElement clazz, final List fields) - { - try - { - final JavaFileObject file = filer.createSourceFile(clazz.getQualifiedName() + "YamlImpl"); - messager.printMessage(Diagnostic.Kind.NOTE, "Creating " + file.toUri()); - - final Writer writer = file.openWriter(); - //Add the content to the newly generated file. - - final PrintWriter pwriter = new PrintWriter(writer); - try - { - pwriter.print("package "); - pwriter.print(clazz.getEnclosingElement()); - pwriter.println(';'); - pwriter.println(); - pwriter.print("public class "); - pwriter.print(clazz.getSimpleName()); - pwriter.print("YamlImpl extends "); - pwriter.print(clazz.getSimpleName()); - pwriter.println(" {"); - - for (VariableElement var : fields) - { - final TypeMirror type = var.asType(); - final String name = capitalize(var.getSimpleName().toString()); - pwriter.print(" public "); - pwriter.print(type.toString()); - if (type.toString().equalsIgnoreCase("boolean")) - { - pwriter.print(" is"); - } - else - { - pwriter.print(" get"); - } - pwriter.print(name); - pwriter.print("() { return this."); - pwriter.print(var.getSimpleName().toString()); - pwriter.println("; }"); - pwriter.print(" public void set"); - pwriter.print(name); - pwriter.print("(final "); - pwriter.print(type.toString()); - pwriter.print(' '); - pwriter.print(name); - pwriter.print(") { this."); - pwriter.print(var.getSimpleName().toString()); - pwriter.print(" = "); - pwriter.print(name); - pwriter.println("; }"); - } - pwriter.println("}"); - pwriter.flush(); - } - finally - { - pwriter.close(); - } - } - catch (IOException ex) - { - messager.printMessage(Diagnostic.Kind.ERROR, ex.toString()); - } - } - - private static String capitalize(String name) - { - char[] c = name.toCharArray(); - c[0] = Character.toUpperCase(c[0]); - return new String(c); - } -} From 0c37e091c0dd069c049e4c91ddea2883d1d934c2 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 13:47:20 +0200 Subject: [PATCH 14/43] Adding support for two more permission systems. --- .gitignore | 3 +- Essentials/nbproject/project.properties | 6 +- .../com/earth2me/essentials/Essentials.java | 2 + .../essentials/EssentialsPluginListener.java | 5 + .../com/earth2me/essentials/IEssentials.java | 1 + .../essentials/perm/BPermissionsHandler.java | 88 ++++++++++++++++++ .../{ => perm}/ConfigPermissionsHandler.java | 3 +- .../{ => perm}/IPermissionsHandler.java | 2 +- .../{ => perm}/Permissions2Handler.java | 2 +- .../{ => perm}/Permissions3Handler.java | 2 +- .../perm/PermissionsBukkitHandler.java | 86 +++++++++++++++++ .../{ => perm}/PermissionsExHandler.java | 4 +- .../SuperpermsHandler.java} | 5 +- lib/PermissionsBukkit-1.2.jar | Bin 0 -> 23673 bytes lib/bPermissions.jar | Bin 0 -> 36236 bytes 15 files changed, 199 insertions(+), 10 deletions(-) create mode 100644 Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java rename Essentials/src/com/earth2me/essentials/{ => perm}/ConfigPermissionsHandler.java (91%) rename Essentials/src/com/earth2me/essentials/{ => perm}/IPermissionsHandler.java (89%) rename Essentials/src/com/earth2me/essentials/{ => perm}/Permissions2Handler.java (97%) rename Essentials/src/com/earth2me/essentials/{ => perm}/Permissions3Handler.java (97%) create mode 100644 Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java rename Essentials/src/com/earth2me/essentials/{ => perm}/PermissionsExHandler.java (93%) rename Essentials/src/com/earth2me/essentials/{BukkitPermissionsHandler.java => perm/SuperpermsHandler.java} (88%) create mode 100644 lib/PermissionsBukkit-1.2.jar create mode 100644 lib/bPermissions.jar diff --git a/.gitignore b/.gitignore index 7152ec996..dd7da3087 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,5 @@ /EssentialsPermissionsCommands/dist/ /Essentials/nbproject/private/ /Essentials/dist/ -/Essentials/build/ \ No newline at end of file +/Essentials/build/ +/YamlAnnotations/ \ No newline at end of file diff --git a/Essentials/nbproject/project.properties b/Essentials/nbproject/project.properties index 8df8ef4d2..db78855e6 100644 --- a/Essentials/nbproject/project.properties +++ b/Essentials/nbproject/project.properties @@ -62,6 +62,7 @@ dist.javadoc.dir=${dist.dir}/javadoc endorsed.classpath= excludes= file.reference.BOSEconomy7.jar=../lib/BOSEconomy7.jar +file.reference.bPermissions.jar=../lib/bPermissions.jar file.reference.craftbukkit-0.0.1-SNAPSHOT.jar=..\\lib\\craftbukkit-0.0.1-SNAPSHOT.jar file.reference.iCo4.jar=../lib/iCo4.jar file.reference.iCo5.jar=../lib/iCo5.jar @@ -69,6 +70,7 @@ file.reference.iCo6.jar=../lib/iCo6.jar file.reference.junit-4.5.jar=..\\lib\\junit_4\\junit-4.5.jar file.reference.MultiCurrency.jar=../lib/MultiCurrency.jar file.reference.Permissions3.jar=../lib/Permissions3.jar +file.reference.PermissionsBukkit-1.2.jar=../lib/PermissionsBukkit-1.2.jar file.reference.PermissionsEx.jar=../lib/PermissionsEx.jar includes=** jar.archive.disabled=${jnlp.enabled} @@ -82,7 +84,9 @@ javac.classpath=\ ${file.reference.iCo6.jar}:\ ${file.reference.MultiCurrency.jar}:\ ${file.reference.BOSEconomy7.jar}:\ - ${file.reference.PermissionsEx.jar} + ${file.reference.PermissionsEx.jar}:\ + ${file.reference.bPermissions.jar}:\ + ${file.reference.PermissionsBukkit-1.2.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 5fdb23785..cc465d7bf 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -17,6 +17,8 @@ */ package com.earth2me.essentials; +import com.earth2me.essentials.perm.IPermissionsHandler; +import com.earth2me.essentials.perm.ConfigPermissionsHandler; import com.earth2me.essentials.api.Economy; import com.earth2me.essentials.commands.EssentialsCommand; import java.io.*; diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java index 99df25578..2155ca622 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java @@ -1,5 +1,10 @@ package com.earth2me.essentials; +import com.earth2me.essentials.perm.ConfigPermissionsHandler; +import com.earth2me.essentials.perm.BukkitPermissionsHandler; +import com.earth2me.essentials.perm.Permissions3Handler; +import com.earth2me.essentials.perm.Permissions2Handler; +import com.earth2me.essentials.perm.PermissionsExHandler; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.event.server.PluginDisableEvent; diff --git a/Essentials/src/com/earth2me/essentials/IEssentials.java b/Essentials/src/com/earth2me/essentials/IEssentials.java index 9f427b220..0512b629e 100644 --- a/Essentials/src/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/com/earth2me/essentials/IEssentials.java @@ -1,5 +1,6 @@ package com.earth2me.essentials; +import com.earth2me.essentials.perm.IPermissionsHandler; import com.earth2me.essentials.register.payment.Methods; import org.bukkit.World; import org.bukkit.command.Command; diff --git a/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java new file mode 100644 index 000000000..bc9fc2113 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java @@ -0,0 +1,88 @@ +package com.earth2me.essentials.perm; + +import de.bananaco.permissions.Permissions; +import de.bananaco.permissions.interfaces.PermissionSet; +import de.bananaco.permissions.worlds.WorldPermissionsManager; +import java.util.List; +import org.bukkit.entity.Player; + + +public class BPermissionsHandler implements IPermissionsHandler +{ + private final transient WorldPermissionsManager wpm; + + public BPermissionsHandler() + { + wpm = Permissions.getWorldPermissionsManager(); + } + + @Override + public String getGroup(final Player base) + { + final PermissionSet pset = wpm.getPermissionSet(base.getWorld()); + if (pset == null) + { + return "default"; + } + final List groups = pset.getGroups(base); + if (groups == null || groups.isEmpty()) + { + return "default"; + } + return groups.get(0); + } + + @Override + public boolean canBuild(Player base, String group) + { + return true; + } + + @Override + public boolean inGroup(Player base, String group) + { + final PermissionSet pset = wpm.getPermissionSet(base.getWorld()); + if (pset == null) + { + return false; + } + final List groups = pset.getGroups(base); + if (groups == null || groups.isEmpty()) + { + return false; + } + return groups.contains(group); + } + + @Override + public boolean hasPermission(Player base, String node) + { + if (base.hasPermission("-" + node)) + { + return false; + } + final String[] parts = node.split("\\."); + final StringBuilder sb = new StringBuilder(); + for (String part : parts) + { + if (base.hasPermission(sb.toString() + "*")) + { + return true; + } + sb.append(part).append("."); + } + return base.hasPermission(node); + } + + @Override + public String getPrefix(Player base) + { + return ""; + } + + @Override + public String getSuffix(Player base) + { + return ""; + } +} diff --git a/Essentials/src/com/earth2me/essentials/ConfigPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java similarity index 91% rename from Essentials/src/com/earth2me/essentials/ConfigPermissionsHandler.java rename to Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java index 200aa34f8..1d5ac447d 100644 --- a/Essentials/src/com/earth2me/essentials/ConfigPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java @@ -1,5 +1,6 @@ -package com.earth2me.essentials; +package com.earth2me.essentials.perm; +import com.earth2me.essentials.IEssentials; import org.bukkit.entity.Player; diff --git a/Essentials/src/com/earth2me/essentials/IPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java similarity index 89% rename from Essentials/src/com/earth2me/essentials/IPermissionsHandler.java rename to Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java index a7bcc80b7..c7fddb6c8 100644 --- a/Essentials/src/com/earth2me/essentials/IPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java @@ -1,4 +1,4 @@ -package com.earth2me.essentials; +package com.earth2me.essentials.perm; import org.bukkit.entity.Player; diff --git a/Essentials/src/com/earth2me/essentials/Permissions2Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java similarity index 97% rename from Essentials/src/com/earth2me/essentials/Permissions2Handler.java rename to Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java index 71d7da58b..eca6feaf8 100644 --- a/Essentials/src/com/earth2me/essentials/Permissions2Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java @@ -1,4 +1,4 @@ -package com.earth2me.essentials; +package com.earth2me.essentials.perm; import com.nijiko.permissions.PermissionHandler; import com.nijikokun.bukkit.Permissions.Permissions; diff --git a/Essentials/src/com/earth2me/essentials/Permissions3Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java similarity index 97% rename from Essentials/src/com/earth2me/essentials/Permissions3Handler.java rename to Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java index 99c95da0a..905b5e0a9 100644 --- a/Essentials/src/com/earth2me/essentials/Permissions3Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java @@ -1,4 +1,4 @@ -package com.earth2me.essentials; +package com.earth2me.essentials.perm; import com.nijiko.permissions.PermissionHandler; import com.nijikokun.bukkit.Permissions.Permissions; diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java new file mode 100644 index 000000000..fdf998ced --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java @@ -0,0 +1,86 @@ +package com.earth2me.essentials.perm; + +import com.platymuus.bukkit.permissions.Group; +import com.platymuus.bukkit.permissions.PermissionInfo; +import com.platymuus.bukkit.permissions.PermissionsPlugin; +import java.util.List; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + + +public class PermissionsBukkitHandler implements IPermissionsHandler +{ + private final transient PermissionsPlugin plugin; + + public PermissionsBukkitHandler(Plugin plugin) + { + this.plugin = (PermissionsPlugin)plugin; + } + + + public String getGroup(Player base) + { + final PermissionInfo info = plugin.getPlayerInfo(base.getName()); + if (info == null) { + return "default"; + } + final List groups = info.getGroups(); + if (groups == null || groups.isEmpty()) { + return "default"; + } + return groups.get(0).getName(); + } + + public boolean canBuild(Player base, String group) + { + return true; + } + + public boolean inGroup(Player base, String group) + { + final PermissionInfo info = plugin.getPlayerInfo(base.getName()); + if (info == null) { + return false; + } + final List groups = info.getGroups(); + if (groups == null || groups.isEmpty()) { + return false; + } + for (Group group1 : groups) + { + if(group1.getName().equalsIgnoreCase(group)) { + return true; + } + } + return false; + } + + public boolean hasPermission(Player base, String node) + { + if (base.hasPermission("-" + node)) + { + return false; + } + final String[] parts = node.split("\\."); + final StringBuilder sb = new StringBuilder(); + for (String part : parts) + { + if (base.hasPermission(sb.toString() + "*")) + { + return true; + } + sb.append(part).append("."); + } + return base.hasPermission(node); + } + + public String getPrefix(Player base) + { + return ""; + } + + public String getSuffix(Player base) + { + return ""; + } +} diff --git a/Essentials/src/com/earth2me/essentials/PermissionsExHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java similarity index 93% rename from Essentials/src/com/earth2me/essentials/PermissionsExHandler.java rename to Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java index f9151c77e..ed3c2afe6 100644 --- a/Essentials/src/com/earth2me/essentials/PermissionsExHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java @@ -1,4 +1,4 @@ -package com.earth2me.essentials; +package com.earth2me.essentials.perm; import org.bukkit.entity.Player; import ru.tehkode.permissions.PermissionManager; @@ -6,7 +6,7 @@ import ru.tehkode.permissions.PermissionUser; import ru.tehkode.permissions.bukkit.PermissionsEx; -class PermissionsExHandler implements IPermissionsHandler +public class PermissionsExHandler implements IPermissionsHandler { private final transient PermissionManager manager; diff --git a/Essentials/src/com/earth2me/essentials/BukkitPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java similarity index 88% rename from Essentials/src/com/earth2me/essentials/BukkitPermissionsHandler.java rename to Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java index aee9ef0b4..e31776fe1 100644 --- a/Essentials/src/com/earth2me/essentials/BukkitPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java @@ -1,9 +1,9 @@ -package com.earth2me.essentials; +package com.earth2me.essentials.perm; import org.bukkit.entity.Player; -public class BukkitPermissionsHandler implements IPermissionsHandler +public class SuperpermsHandler implements IPermissionsHandler { public String getGroup(Player base) { @@ -49,3 +49,4 @@ public class BukkitPermissionsHandler implements IPermissionsHandler return ""; } } + diff --git a/lib/PermissionsBukkit-1.2.jar b/lib/PermissionsBukkit-1.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..3f5caf1b4e37fabca965f2672a2315eb8b0981ab GIT binary patch literal 23673 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 literal 0 HcmV?d00001 diff --git a/lib/bPermissions.jar b/lib/bPermissions.jar new file mode 100644 index 0000000000000000000000000000000000000000..b3b38e4255e26e4acac5baa6dbf297812b1d3714 GIT binary patch literal 36236 zcmb5VW0-8)k}h1UY}>Z&T4md|ZQHi(s#Vr1+qP}nzH6V;U-votySJb2oSA>}i5N3u z<`@xgyb&QM2?UG`0RHEiutehn_?H(l05E{Guo6FwxQqy$G{20vh_Ip(t+dG37y!V% z^u)N7Bn|B>j3f=^)Wmdy0{sHh&f(r6Ab^}C7A*n{ivGxH4!^VF#Xeh6MQk{_1t|u_s+3tT_Lay=&D+e19HD(tpV#-TF|d9 zAPN1z;9_D0{o$shJT2i-ZV*y&R0cgHsN=WI*rFArZ&wXm-Z9^zp zg?K9?dp~v*dUffoLgTEFNG$^rwvz@XSiFj`;1fImzpw?pC?Gs5X7mQgc|iI zrO%XE+YQ?$IU(LlS8Qz;K!t0Y-TQ5~xOG@PeVJx)tLAwQse^-r#p+cv*0QY6+Fv3j zZD^;M%!3>QZ`S3rKFNt~;p9uj4=2<|3#JdBN5097Wsz3bQROgs*n_g~^n~zRak~2* zv^%I(jCp*?BU!%3&F{>_(dAZxPy={%3WCR=6#9N055Ljl>qc~zMX(2tE5=9Jl!!%I zcG(*eeV~R*Qt5ajwaL7*`vcFlP#()Je*Ox{t}VrW-wE9zn-`f!%evi`_W8$#2%0Ct z-2Y>^?|(d+za9brKoruy?>OK;-x=Ck)BUw&{_he{{~=*xZeea|``-wn{kx!@v4gd_ zqocX4jpIL*{<-7-et+8kM(IBn5Yx9YvNCq~=U-T?ysm)64}a+&2jI}X4}*{d9IV{& zgFh+qCqAXJd}UuLL3)t?BrMBn@j-)E{TLWuPi*}~_9b-?uvjne#cJ0?`n)y|m+$xI z7Z3nbElMCL=xrsXMhtgc=olwr8@VJ&c~(Lbj*qP!nJE-bAb4Okkk157CKt&0{g(eo z8*~BGT>KSb;EITvq)OG_%U{2$hgJ-Da>H0xb z%X|HR9;0?m4zWUNP&?(_M#HA9#5xD)=j}szUsOf0qS)In4XZ)N)WZwLlM$+Hl+*cv zrHif++ysPM40K{kY8fi++NX|w!BdSKDr>5WtPW~5Dp2l8Z6#|Xp(b#%4Ea|`Q6JF# zCiLiGJMRNgeh>_GyOwivt$OFfgy2ZTC{uL`O*^tyv$XXw4TWlQ#OoiZDdQoCuQvxEG?~gc<}g-mz(Zl&?lBinB_0~D5x5e&Z^jMJ5gn&IEhUP zcu}cKwK*|9euGq9kXx=U5z_f)*&B6q*f*NG*G|@xeKK((SA%0A-7M!cSh||Gc;qJS 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 aM?!fiP=Est1VjP&F$eg(u Date: Sun, 28 Aug 2011 13:57:36 +0200 Subject: [PATCH 15/43] Updates to Plugin listener --- .../essentials/EssentialsPluginListener.java | 31 ++++++++++++++++--- .../essentials/perm/Permissions2Handler.java | 2 +- .../essentials/perm/Permissions3Handler.java | 2 +- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java index 2155ca622..6d895082f 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java @@ -1,10 +1,12 @@ package com.earth2me.essentials; +import com.earth2me.essentials.perm.BPermissionsHandler; import com.earth2me.essentials.perm.ConfigPermissionsHandler; -import com.earth2me.essentials.perm.BukkitPermissionsHandler; import com.earth2me.essentials.perm.Permissions3Handler; import com.earth2me.essentials.perm.Permissions2Handler; +import com.earth2me.essentials.perm.PermissionsBukkitHandler; import com.earth2me.essentials.perm.PermissionsExHandler; +import com.earth2me.essentials.perm.SuperpermsHandler; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.event.server.PluginDisableEvent; @@ -58,10 +60,31 @@ public class EssentialsPluginListener extends ServerListener implements IConf { if (ess.getSettings().useBukkitPermissions()) { - if (!(ess.getPermissionsHandler() instanceof BukkitPermissionsHandler)) + final Plugin permissionsBukkitPlugin = pm.getPlugin("PermissionsBukkit"); + final Plugin bPermissionsPlugin = pm.getPlugin("bPermissions"); + if (permissionsBukkitPlugin != null && permissionsBukkitPlugin.isEnabled()) { - LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); - ess.setPermissionsHandler(new BukkitPermissionsHandler()); + if (!(ess.getPermissionsHandler() instanceof PermissionsBukkitHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using PermissionsBukkit based permissions."); + ess.setPermissionsHandler(new PermissionsBukkitHandler(permissionsBukkitPlugin)); + } + } + else if (bPermissionsPlugin != null && bPermissionsPlugin.isEnabled()) + { + if (!(ess.getPermissionsHandler() instanceof BPermissionsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using bPermissions based permissions."); + ess.setPermissionsHandler(new BPermissionsHandler()); + } + } + else + { + if (!(ess.getPermissionsHandler() instanceof SuperpermsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); + ess.setPermissionsHandler(new SuperpermsHandler()); + } } } else diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java index eca6feaf8..d22eb1c3a 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java @@ -10,7 +10,7 @@ public class Permissions2Handler implements IPermissionsHandler { private final transient PermissionHandler permissionHandler; - Permissions2Handler(final Plugin permissionsPlugin) + public Permissions2Handler(final Plugin permissionsPlugin) { permissionHandler = ((Permissions)permissionsPlugin).getHandler(); } diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java index 905b5e0a9..84318689e 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java @@ -10,7 +10,7 @@ public class Permissions3Handler implements IPermissionsHandler { private final transient PermissionHandler permissionHandler; - Permissions3Handler(final Plugin permissionsPlugin) + public Permissions3Handler(final Plugin permissionsPlugin) { permissionHandler = ((Permissions)permissionsPlugin).getHandler(); } From 22c277f9ab38f599ea0bee7798be32b86510943f Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 14:12:27 +0200 Subject: [PATCH 16/43] If PermissionsBukkit or bPermissions is detected, we don't need the config switch. --- .../essentials/EssentialsPluginListener.java | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java index 6d895082f..cd969a10c 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java @@ -58,33 +58,30 @@ public class EssentialsPluginListener extends ServerListener implements IConf final Plugin permissionsPlugin = pm.getPlugin("Permissions"); if (permissionsPlugin == null || !permissionsPlugin.isEnabled()) { - if (ess.getSettings().useBukkitPermissions()) + final Plugin permissionsBukkitPlugin = pm.getPlugin("PermissionsBukkit"); + final Plugin bPermissionsPlugin = pm.getPlugin("bPermissions"); + if (permissionsBukkitPlugin != null && permissionsBukkitPlugin.isEnabled()) { - final Plugin permissionsBukkitPlugin = pm.getPlugin("PermissionsBukkit"); - final Plugin bPermissionsPlugin = pm.getPlugin("bPermissions"); - if (permissionsBukkitPlugin != null && permissionsBukkitPlugin.isEnabled()) + if (!(ess.getPermissionsHandler() instanceof PermissionsBukkitHandler)) { - if (!(ess.getPermissionsHandler() instanceof PermissionsBukkitHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using PermissionsBukkit based permissions."); - ess.setPermissionsHandler(new PermissionsBukkitHandler(permissionsBukkitPlugin)); - } + LOGGER.log(Level.INFO, "Essentials: Using PermissionsBukkit based permissions."); + ess.setPermissionsHandler(new PermissionsBukkitHandler(permissionsBukkitPlugin)); } - else if (bPermissionsPlugin != null && bPermissionsPlugin.isEnabled()) + } + else if (bPermissionsPlugin != null && bPermissionsPlugin.isEnabled()) + { + if (!(ess.getPermissionsHandler() instanceof BPermissionsHandler)) { - if (!(ess.getPermissionsHandler() instanceof BPermissionsHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using bPermissions based permissions."); - ess.setPermissionsHandler(new BPermissionsHandler()); - } + LOGGER.log(Level.INFO, "Essentials: Using bPermissions based permissions."); + ess.setPermissionsHandler(new BPermissionsHandler()); } - else + } + else if (ess.getSettings().useBukkitPermissions()) + { + if (!(ess.getPermissionsHandler() instanceof SuperpermsHandler)) { - if (!(ess.getPermissionsHandler() instanceof SuperpermsHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); - ess.setPermissionsHandler(new SuperpermsHandler()); - } + LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); + ess.setPermissionsHandler(new SuperpermsHandler()); } } else From a60f040f7e201921c9aaf98d1eb47761d5ac2a09 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 14:24:31 +0200 Subject: [PATCH 17/43] Cleanup --- .../essentials/perm/BPermissionsHandler.java | 42 +------------ .../perm/ConfigPermissionsHandler.java | 10 ++- .../essentials/perm/Permissions2Handler.java | 6 ++ .../essentials/perm/Permissions3Handler.java | 6 ++ .../perm/PermissionsBukkitHandler.java | 62 +++++-------------- .../essentials/perm/PermissionsExHandler.java | 18 ++++-- .../essentials/perm/SuperpermsHandler.java | 21 ++++--- 7 files changed, 64 insertions(+), 101 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java index bc9fc2113..82f793ee0 100644 --- a/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java @@ -7,7 +7,7 @@ import java.util.List; import org.bukkit.entity.Player; -public class BPermissionsHandler implements IPermissionsHandler +public class BPermissionsHandler extends SuperpermsHandler { private final transient WorldPermissionsManager wpm; @@ -33,13 +33,7 @@ public class BPermissionsHandler implements IPermissionsHandler } @Override - public boolean canBuild(Player base, String group) - { - return true; - } - - @Override - public boolean inGroup(Player base, String group) + public boolean inGroup(final Player base, final String group) { final PermissionSet pset = wpm.getPermissionSet(base.getWorld()); if (pset == null) @@ -53,36 +47,4 @@ public class BPermissionsHandler implements IPermissionsHandler } return groups.contains(group); } - - @Override - public boolean hasPermission(Player base, String node) - { - if (base.hasPermission("-" + node)) - { - return false; - } - final String[] parts = node.split("\\."); - final StringBuilder sb = new StringBuilder(); - for (String part : parts) - { - if (base.hasPermission(sb.toString() + "*")) - { - return true; - } - sb.append(part).append("."); - } - return base.hasPermission(node); - } - - @Override - public String getPrefix(Player base) - { - return ""; - } - - @Override - public String getSuffix(Player base) - { - return ""; - } } diff --git a/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java index 1d5ac447d..82d285b1f 100644 --- a/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java @@ -13,33 +13,39 @@ public class ConfigPermissionsHandler implements IPermissionsHandler this.ess = ess; } + @Override public String getGroup(final Player base) { return "default"; } + @Override public boolean canBuild(final Player base, final String group) { return true; } + @Override public boolean inGroup(final Player base, final String group) { return false; } + @Override public boolean hasPermission(final Player base, final String node) { final String[] cmds = node.split("\\.", 2); - return !ess.getSettings().isCommandRestricted(cmds[cmds.length - 1]) - && ess.getSettings().isPlayerCommand(cmds[cmds.length - 1]); + return !ess.getSettings().isCommandRestricted(cmds[cmds.length - 1]) + && ess.getSettings().isPlayerCommand(cmds[cmds.length - 1]); } + @Override public String getPrefix(final Player base) { return ""; } + @Override public String getSuffix(final Player base) { return ""; diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java index d22eb1c3a..0d7b45cb7 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java @@ -15,33 +15,39 @@ public class Permissions2Handler implements IPermissionsHandler permissionHandler = ((Permissions)permissionsPlugin).getHandler(); } + @Override public String getGroup(final Player base) { final String group = permissionHandler.getGroup(base.getWorld().getName(), base.getName()); return group == null ? "default" : group; } + @Override public boolean canBuild(final Player base, final String group) { return permissionHandler.canGroupBuild(base.getWorld().getName(), getGroup(base)); } + @Override public boolean inGroup(final Player base, final String group) { return permissionHandler.inGroup(base.getWorld().getName(), base.getName(), group); } + @Override public boolean hasPermission(final Player base, final String node) { return permissionHandler.permission(base, node); } + @Override public String getPrefix(final Player base) { final String prefix = permissionHandler.getGroupPrefix(base.getWorld().getName(), getGroup(base)); return prefix == null ? "" : prefix; } + @Override public String getSuffix(final Player base) { final String suffix = permissionHandler.getGroupSuffix(base.getWorld().getName(), getGroup(base)); diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java index 84318689e..c0ac249a8 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java @@ -15,31 +15,37 @@ public class Permissions3Handler implements IPermissionsHandler permissionHandler = ((Permissions)permissionsPlugin).getHandler(); } + @Override public String getGroup(final Player base) { return permissionHandler.getPrimaryGroup(base.getWorld().getName(), base.getName()); } + @Override public boolean canBuild(final Player base, final String group) { return permissionHandler.canUserBuild(base.getWorld().getName(), base.getName()); } + @Override public boolean inGroup(final Player base, final String group) { return permissionHandler.inGroup(base.getWorld().getName(), base.getName(), group); } + @Override public boolean hasPermission(final Player base, final String node) { return permissionHandler.has(base, node); } + @Override public String getPrefix(final Player base) { return permissionHandler.getUserPrefix(base.getWorld().getName(), base.getName()); } + @Override public String getSuffix(final Player base) { return permissionHandler.getUserSuffix(base.getWorld().getName(), base.getName()); diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java index fdf998ced..9fd87905e 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java @@ -8,79 +8,51 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -public class PermissionsBukkitHandler implements IPermissionsHandler +public class PermissionsBukkitHandler extends SuperpermsHandler { private final transient PermissionsPlugin plugin; - public PermissionsBukkitHandler(Plugin plugin) + public PermissionsBukkitHandler(final Plugin plugin) { this.plugin = (PermissionsPlugin)plugin; } - - - public String getGroup(Player base) + + @Override + public String getGroup(final Player base) { final PermissionInfo info = plugin.getPlayerInfo(base.getName()); - if (info == null) { + if (info == null) + { return "default"; } final List groups = info.getGroups(); - if (groups == null || groups.isEmpty()) { + if (groups == null || groups.isEmpty()) + { return "default"; } return groups.get(0).getName(); } - public boolean canBuild(Player base, String group) - { - return true; - } - - public boolean inGroup(Player base, String group) + @Override + public boolean inGroup(final Player base, final String group) { final PermissionInfo info = plugin.getPlayerInfo(base.getName()); - if (info == null) { + if (info == null) + { return false; } final List groups = info.getGroups(); - if (groups == null || groups.isEmpty()) { + if (groups == null || groups.isEmpty()) + { return false; } for (Group group1 : groups) { - if(group1.getName().equalsIgnoreCase(group)) { + if (group1.getName().equalsIgnoreCase(group)) + { return true; } } return false; } - - public boolean hasPermission(Player base, String node) - { - if (base.hasPermission("-" + node)) - { - return false; - } - final String[] parts = node.split("\\."); - final StringBuilder sb = new StringBuilder(); - for (String part : parts) - { - if (base.hasPermission(sb.toString() + "*")) - { - return true; - } - sb.append(part).append("."); - } - return base.hasPermission(node); - } - - public String getPrefix(Player base) - { - return ""; - } - - public String getSuffix(Player base) - { - return ""; - } } diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java index ed3c2afe6..28b056c0a 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java @@ -15,7 +15,8 @@ public class PermissionsExHandler implements IPermissionsHandler manager = PermissionsEx.getPermissionManager(); } - public String getGroup(Player base) + @Override + public String getGroup(final Player base) { final PermissionUser user = manager.getUser(base.getName()); if (user == null) @@ -25,7 +26,8 @@ public class PermissionsExHandler implements IPermissionsHandler return user.getGroupsNames()[0]; } - public boolean canBuild(Player base, String group) + @Override + public boolean canBuild(final Player base, final String group) { final PermissionUser user = manager.getUser(base.getName()); if (user == null) @@ -36,7 +38,8 @@ public class PermissionsExHandler implements IPermissionsHandler return user.getOptionBoolean("build", base.getWorld().getName(), true); } - public boolean inGroup(Player base, String group) + @Override + public boolean inGroup(final Player base, final String group) { final PermissionUser user = manager.getUser(base.getName()); if (user == null) @@ -47,12 +50,14 @@ public class PermissionsExHandler implements IPermissionsHandler return user.inGroup(group); } - public boolean hasPermission(Player base, String node) + @Override + public boolean hasPermission(final Player base, final String node) { return manager.has(base.getName(), node, base.getWorld().getName()); } - public String getPrefix(Player base) + @Override + public String getPrefix(final Player base) { final PermissionUser user = manager.getUser(base.getName()); if (user == null) @@ -62,7 +67,8 @@ public class PermissionsExHandler implements IPermissionsHandler return user.getPrefix(); } - public String getSuffix(Player base) + @Override + public String getSuffix(final Player base) { final PermissionUser user = manager.getUser(base.getName()); if (user == null) diff --git a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java index e31776fe1..60b1c5a3d 100644 --- a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java @@ -5,22 +5,26 @@ import org.bukkit.entity.Player; public class SuperpermsHandler implements IPermissionsHandler { - public String getGroup(Player base) + @Override + public String getGroup(final Player base) { return "default"; } - public boolean canBuild(Player base, String group) + @Override + public boolean canBuild(final Player base, final String group) { - return true; + return hasPermission(base, "essentials.build"); } - public boolean inGroup(Player base, String group) + @Override + public boolean inGroup(final Player base, final String group) { return false; } - public boolean hasPermission(Player base, String node) + @Override + public boolean hasPermission(final Player base, final String node) { if (base.hasPermission("-" + node)) { @@ -39,14 +43,15 @@ public class SuperpermsHandler implements IPermissionsHandler return base.hasPermission(node); } - public String getPrefix(Player base) + @Override + public String getPrefix(final Player base) { return ""; } - public String getSuffix(Player base) + @Override + public String getSuffix(final Player base) { return ""; } } - From 12e3eb1a234f991b6c7b136665de2ddd74fde1ab Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 23:51:10 +0200 Subject: [PATCH 18/43] Fix compatibility issues with Citizens --- Essentials/src/com/earth2me/essentials/Essentials.java | 2 +- Essentials/src/com/earth2me/essentials/EssentialsConf.java | 5 ----- .../com/earth2me/essentials/EssentialsPlayerListener.java | 4 ---- 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index cc465d7bf..43d397fda 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -564,7 +564,7 @@ public class Essentials extends JavaPlugin implements IEssentials } catch (NullPointerException ex) { - return null; + return new User(base, this); } } diff --git a/Essentials/src/com/earth2me/essentials/EssentialsConf.java b/Essentials/src/com/earth2me/essentials/EssentialsConf.java index 2e3920eba..c48f9f987 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsConf.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsConf.java @@ -47,11 +47,6 @@ public class EssentialsConf extends Configuration LOGGER.log(Level.SEVERE, Util.format("failedToCreateConfig", configFile.toString())); } } - if (configFile.exists() && configFile.length() == 0 && !configFile.delete()) - { - LOGGER.log(Level.SEVERE, "Could not delete file " + configFile.toString()); - } - // This will delete files where the first character is 0. In most cases they are broken. if (configFile.exists() && configFile.length() != 0) { diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index fbd6995c5..66de8ef29 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -315,10 +315,6 @@ public class EssentialsPlayerListener extends PlayerListener return; } User user = ess.getUser(event.getPlayer()); - if (user == null) - { - user = new User(event.getPlayer(), ess); - } user.setNPC(false); final long currentTime = System.currentTimeMillis(); From 17e11adf9a8e6696d4ca1d4b80826af04845bfed Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 30 Aug 2011 01:14:03 +0200 Subject: [PATCH 19/43] Catch NPE in /powertool, also cleanup --- .../essentials/commands/Commandpowertool.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java index 742535a77..b4977167f 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -17,17 +17,17 @@ public class Commandpowertool extends EssentialsCommand } @Override - protected void run(Server server, User user, String commandLabel, String[] args) throws Exception + protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - ItemStack is = user.getItemInHand(); - List powertools = user.getPowertool(is); - if (is == null || is.getType() == Material.AIR) + final ItemStack itemStack = user.getItemInHand(); + if (itemStack == null || itemStack.getType() == Material.AIR) { throw new Exception(Util.i18n("powerToolAir")); } - String itemName = is.getType().toString().toLowerCase().replaceAll("_", " "); + final String itemName = itemStack.getType().toString().toLowerCase().replaceAll("_", " "); String command = getFinalArg(args, 0); + List powertools = user.getPowertool(itemStack); if (command != null && !command.isEmpty()) { if (command.equalsIgnoreCase("l:")) @@ -66,7 +66,7 @@ public class Commandpowertool extends EssentialsCommand if (command.startsWith("a:")) { command = command.substring(2); - if(powertools.contains(command)) + if (powertools.contains(command)) { throw new Exception(Util.format("powerToolAlreadySet", command, itemName)); } @@ -87,10 +87,13 @@ public class Commandpowertool extends EssentialsCommand } else { - powertools.clear(); + if (powertools != null) + { + powertools.clear(); + } user.sendMessage(Util.format("powerToolRemoveAll", itemName)); } - user.setPowertool(is, powertools); + user.setPowertool(itemStack, powertools); } } From 5d4aa95fc3694867c5522c166079e7673e05a34c Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 30 Aug 2011 02:36:16 +0200 Subject: [PATCH 20/43] First update check is done 10 minutes after server start. --- Essentials/src/com/earth2me/essentials/Essentials.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 43d397fda..883389625 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -215,7 +215,7 @@ public class Essentials extends JavaPlugin implements IEssentials if (getSettings().isUpdateEnabled()) { updateTimer = new EssentialsUpdateTimer(this); - getScheduler().scheduleAsyncRepeatingTask(this, updateTimer, 20 * 60, 20 * 3600 * 6); + getScheduler().scheduleAsyncRepeatingTask(this, updateTimer, 20 * 60 * 10, 20 * 3600 * 6); } LOGGER.info(Util.format("loadinfo", this.getDescription().getName(), this.getDescription().getVersion(), Util.joinList(this.getDescription().getAuthors()))); } From 1cbdbc40a5c564df2378a72f0f3d7a08b5acb00e Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 30 Aug 2011 03:15:10 +0200 Subject: [PATCH 21/43] /help now supports multiple permissions for a command in plugin.yml Also minor cleanup --- .../essentials/commands/Commandhelp.java | 92 +++++++++++++------ 1 file changed, 63 insertions(+), 29 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhelp.java b/Essentials/src/com/earth2me/essentials/commands/Commandhelp.java index 53ed22a23..8e99dc1ed 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhelp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhelp.java @@ -20,6 +20,9 @@ import java.util.logging.Level; public class Commandhelp extends EssentialsCommand { + private static final String DESCRIPTION = "description"; + private static final String PERMISSION = "permission"; + private static final String PERMISSIONS = "permissions"; public final Yaml yaml = new Yaml(new SafeConstructor()); public Commandhelp() @@ -28,7 +31,7 @@ public class Commandhelp extends EssentialsCommand } @Override - protected void run(Server server, User user, String commandLabel, String[] args) throws Exception + protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { int page = 1; String match = ""; @@ -53,34 +56,32 @@ public class Commandhelp extends EssentialsCommand } } - List lines = getHelpLines(user, match); - if (lines.size() > 0) + final List lines = getHelpLines(user, match); + if (lines.isEmpty()) { - int start = (page - 1) * 9; - int pages = lines.size() / 9 + (lines.size() % 9 > 0 ? 1 : 0); - - user.sendMessage(Util.format("helpPages", page, pages)); - for (int i = start; i < lines.size() && i < start + 9; i++) - { - user.sendMessage(lines.get(i)); - } + throw new Exception(Util.i18n("noHelpFound")); } - else + + final int start = (page - 1) * 9; + final int pages = lines.size() / 9 + (lines.size() % 9 > 0 ? 1 : 0); + + user.sendMessage(Util.format("helpPages", page, pages)); + for (int i = start; i < lines.size() && i < start + 9; i++) { - user.sendMessage(Util.i18n("noHelpFound")); + user.sendMessage(lines.get(i)); } } @Override - protected void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception + protected void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception { sender.sendMessage(Util.i18n("helpConsole")); } @SuppressWarnings("CallToThreadDumpStack") - private List getHelpLines(User user, String match) throws Exception + private List getHelpLines(final User user, final String match) throws Exception { - List retval = new ArrayList(); + final List retval = new ArrayList(); File helpFile = new File(ess.getDataFolder(), "help_" + Util.sanitizeFileName(user.getName()) + ".txt"); if (!helpFile.exists()) { @@ -116,15 +117,16 @@ public class Commandhelp extends EssentialsCommand try { final PluginDescriptionFile desc = p.getDescription(); - final HashMap> cmds = (HashMap>)desc.getCommands(); + final HashMap> cmds = (HashMap>)desc.getCommands(); pluginName = p.getDescription().getName().toLowerCase(); - for (Entry> k : cmds.entrySet()) + for (Entry> k : cmds.entrySet()) { try { if ((!match.equalsIgnoreCase("")) && (!k.getKey().toLowerCase().contains(match)) - && (!k.getValue().get("description").toLowerCase().contains(match)) + && (!(k.getValue().get(DESCRIPTION) instanceof String + && ((String)k.getValue().get(DESCRIPTION)).toLowerCase().contains(match))) && (!pluginName.contains(match))) { continue; @@ -135,37 +137,69 @@ public class Commandhelp extends EssentialsCommand final String node = "essentials." + k.getKey(); if (!ess.getSettings().isCommandDisabled(k.getKey()) && user.isAuthorized(node)) { - retval.add("§c" + k.getKey() + "§7: " + k.getValue().get("description")); + retval.add("§c" + k.getKey() + "§7: " + k.getValue().get(DESCRIPTION)); } } else { if (ess.getSettings().showNonEssCommandsInHelp()) { - final HashMap value = k.getValue(); - if (value.containsKey("permission") && value.get("permission") != null && !(value.get("permission").equals(""))) + final HashMap value = k.getValue(); + if (value.containsKey(PERMISSION) && value.get(PERMISSION) instanceof String && !(value.get(PERMISSION).equals(""))) { - if (user.isAuthorized(value.get("permission"))) + if (user.isAuthorized((String)value.get(PERMISSION))) { - retval.add("§c" + k.getKey() + "§7: " + value.get("description")); + retval.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION)); } } - else if (value.containsKey("permissions") && value.get("permissions") != null && !(value.get("permissions").equals(""))) + else if (value.containsKey(PERMISSION) && value.get(PERMISSION) instanceof List && !((List)value.get(PERMISSION)).isEmpty()) { - if (user.isAuthorized(value.get("permissions"))) + boolean enabled = false; + for (Object o : (List)value.get(PERMISSION)) { - retval.add("§c" + k.getKey() + "§7: " + value.get("description")); + if (o instanceof String && user.isAuthorized((String)o)) + { + enabled = true; + break; + } + } + if (enabled) + { + retval.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION)); + } + } + else if (value.containsKey(PERMISSIONS) && value.get(PERMISSIONS) instanceof String && !(value.get(PERMISSIONS).equals(""))) + { + if (user.isAuthorized((String)value.get(PERMISSIONS))) + { + retval.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION)); + } + } + else if (value.containsKey(PERMISSIONS) && value.get(PERMISSIONS) instanceof List && !((List)value.get(PERMISSIONS)).isEmpty()) + { + boolean enabled = false; + for (Object o : (List)value.get(PERMISSIONS)) + { + if (o instanceof String && user.isAuthorized((String)o)) + { + enabled = true; + break; + } + } + if (enabled) + { + retval.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION)); } } else if (user.isAuthorized("essentials.help." + pluginName)) { - retval.add("§c" + k.getKey() + "§7: " + value.get("description")); + retval.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION)); } else { if (!ess.getSettings().hidePermissionlessHelp()) { - retval.add("§c" + k.getKey() + "§7: " + value.get("description")); + retval.add("§c" + k.getKey() + "§7: " + value.get(DESCRIPTION)); } } } From e9a14b204f1e7991d3b990c7f120ee2b02880fb1 Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 30 Aug 2011 03:15:50 +0200 Subject: [PATCH 22/43] NoChargeException for teleport commands --- Essentials/src/com/earth2me/essentials/Essentials.java | 5 +++++ .../essentials/commands/NoChargeException.java | 10 ++++++++++ 2 files changed, 15 insertions(+) create mode 100644 Essentials/src/com/earth2me/essentials/commands/NoChargeException.java diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 883389625..3ea10f64a 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -28,6 +28,7 @@ import org.bukkit.*; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.earth2me.essentials.commands.IEssentialsCommand; +import com.earth2me.essentials.commands.NoChargeException; import com.earth2me.essentials.commands.NotEnoughArgumentsException; import com.earth2me.essentials.register.payment.Methods; import com.earth2me.essentials.signs.SignBlockListener; @@ -451,6 +452,10 @@ public class Essentials extends JavaPlugin implements IEssentials } return true; } + catch (NoChargeException ex) + { + return true; + } catch (NotEnoughArgumentsException ex) { sender.sendMessage(command.getDescription()); diff --git a/Essentials/src/com/earth2me/essentials/commands/NoChargeException.java b/Essentials/src/com/earth2me/essentials/commands/NoChargeException.java new file mode 100644 index 000000000..bb0088792 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/commands/NoChargeException.java @@ -0,0 +1,10 @@ +package com.earth2me.essentials.commands; + + +public class NoChargeException extends Exception +{ + public NoChargeException() + { + super("Will charge later"); + } +} From afb951461c6458546f6398a0d993b6415d2ff149 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Tue, 30 Aug 2011 03:42:31 +0100 Subject: [PATCH 23/43] Adding throw to prevent double charge. --- .../earth2me/essentials/commands/Commandtp.java | 5 +++-- .../essentials/commands/Commandtphere.java | 1 + .../earth2me/essentials/commands/Commandtppos.java | 1 + .../earth2me/essentials/commands/Commandwarp.java | 14 ++++++-------- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtp.java b/Essentials/src/com/earth2me/essentials/commands/Commandtp.java index c3cc8f7e5..480fb6153 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtp.java @@ -33,7 +33,7 @@ public class Commandtp extends EssentialsCommand Trade charge = new Trade(this.getName(), ess); charge.isAffordableFor(user); user.getTeleport().teleport(p, charge); - break; + throw new NoChargeException(); case 2: if (!user.isAuthorized("essentials.tpohere")) @@ -46,7 +46,7 @@ public class Commandtp extends EssentialsCommand target.getTeleport().now(toPlayer, false); target.sendMessage(Util.format("teleportAtoB", user.getDisplayName(), toPlayer.getDisplayName())); break; - } + } } @Override @@ -62,5 +62,6 @@ public class Commandtp extends EssentialsCommand User toPlayer = getPlayer(server, args, 1); target.getTeleport().now(toPlayer, false); target.sendMessage(Util.format("teleportAtoB", Console.NAME, toPlayer.getDisplayName())); + return; } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java index 036c4be27..bba8d8743 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java @@ -24,5 +24,6 @@ public class Commandtphere extends EssentialsCommand p.getTeleport().teleport(user, new Trade(this.getName(), ess)); user.sendMessage(Util.i18n("teleporting")); p.sendMessage(Util.i18n("teleporting")); + throw new NoChargeException(); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtppos.java b/Essentials/src/com/earth2me/essentials/commands/Commandtppos.java index 805aefaca..0786f9cb9 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtppos.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtppos.java @@ -30,5 +30,6 @@ public class Commandtppos extends EssentialsCommand charge.isAffordableFor(user); user.sendMessage(Util.i18n("teleporting")); user.getTeleport().teleport(l, charge); + throw new NoChargeException(); } } \ No newline at end of file diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java b/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java index b93355f5a..36d1d0df0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java @@ -26,8 +26,7 @@ public class Commandwarp extends EssentialsCommand { if (!user.isAuthorized("essentials.warp.list")) { - user.sendMessage(Util.i18n("warpListPermission")); - return; + throw new Exception(Util.i18n("warpListPermission")); } Warps warps = ess.getWarps(); @@ -56,7 +55,7 @@ public class Commandwarp extends EssentialsCommand } final int warpPage = (page - 1) * WARPS_PER_PAGE; user.sendMessage(Util.joinList(warpNameList.subList(warpPage, warpPage+Math.min(warpNameList.size() - warpPage, WARPS_PER_PAGE)))); - return; + throw new NoChargeException(); } if (args.length > 0) { @@ -66,13 +65,13 @@ public class Commandwarp extends EssentialsCommand otherUser = ess.getUser(server.getPlayer(args[1])); if (otherUser == null) { - user.sendMessage(Util.i18n("playerNotFound")); - return; + throw new Exception(Util.i18n("playerNotFound")); } warpUser(otherUser, args[0]); - return; + throw new NoChargeException(); } warpUser(user, args[0]); + throw new NoChargeException(); } } @@ -87,8 +86,7 @@ public class Commandwarp extends EssentialsCommand user.getTeleport().warp(name, charge); return; } - user.sendMessage(Util.i18n("warpUsePermission")); - return; + throw new Exception(Util.i18n("warpUsePermission")); } user.getTeleport().warp(name, charge); } From ecc1a0acead17745811c3c212268d00c1c86ef78 Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 30 Aug 2011 09:46:31 +0200 Subject: [PATCH 24/43] Missing nochargeexception in /home and /world --- .../src/com/earth2me/essentials/commands/Commandhome.java | 1 + .../src/com/earth2me/essentials/commands/Commandworld.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java index f556ea360..fbcaa555d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java @@ -58,5 +58,6 @@ public class Commandhome extends EssentialsCommand user.sendMessage(Util.format("homes", Util.joinList(homes))); } } + throw new NoChargeException(); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandworld.java b/Essentials/src/com/earth2me/essentials/commands/Commandworld.java index 0a315b1d4..77db8e5e3 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandworld.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandworld.java @@ -47,7 +47,7 @@ public class Commandworld extends EssentialsCommand user.sendMessage(Util.i18n("invalidWorld")); user.sendMessage(Util.format("possibleWorlds", server.getWorlds().size() - 1)); user.sendMessage(Util.i18n("typeWorldName")); - return; + throw new NoChargeException(); } } @@ -71,5 +71,6 @@ public class Commandworld extends EssentialsCommand Trade charge = new Trade(this.getName(), ess); charge.isAffordableFor(user); user.getTeleport().teleport(loc, charge); + throw new NoChargeException(); } } From 057c9cb3f5e53535d8124326a4bb783dd24700a2 Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 30 Aug 2011 23:26:23 +0200 Subject: [PATCH 25/43] Minor rewrite of Permissions package, all the stuff is now in one place. --- .../com/earth2me/essentials/Essentials.java | 14 +- .../essentials/EssentialsPluginListener.java | 93 +-------- .../com/earth2me/essentials/IEssentials.java | 6 +- .../essentials/perm/BPermissionsHandler.java | 21 +- .../perm/ConfigPermissionsHandler.java | 18 +- .../essentials/perm/IPermissionsHandler.java | 5 +- .../perm/NullPermissionsHandler.java | 51 +++++ .../essentials/perm/Permissions2Handler.java | 17 +- .../essentials/perm/Permissions3Handler.java | 11 +- .../perm/PermissionsBukkitHandler.java | 39 +++- .../essentials/perm/PermissionsExHandler.java | 19 +- .../essentials/perm/PermissionsHandler.java | 179 ++++++++++++++++++ .../essentials/perm/SuperpermsHandler.java | 21 +- 13 files changed, 349 insertions(+), 145 deletions(-) create mode 100644 Essentials/src/com/earth2me/essentials/perm/NullPermissionsHandler.java create mode 100644 Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 3ea10f64a..d88edbdae 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -30,6 +30,7 @@ import org.bukkit.command.CommandSender; import com.earth2me.essentials.commands.IEssentialsCommand; import com.earth2me.essentials.commands.NoChargeException; import com.earth2me.essentials.commands.NotEnoughArgumentsException; +import com.earth2me.essentials.perm.PermissionsHandler; import com.earth2me.essentials.register.payment.Methods; import com.earth2me.essentials.signs.SignBlockListener; import com.earth2me.essentials.signs.SignEntityListener; @@ -65,7 +66,7 @@ public class Essentials extends JavaPlugin implements IEssentials private transient final Methods paymentMethod = new Methods(); private transient final static boolean enableErrorLogging = false; private transient final EssentialsErrorHandler errorHandler = new EssentialsErrorHandler(); - private transient IPermissionsHandler permissionsHandler; + private transient PermissionsHandler permissionsHandler; private transient UserMap userMap; @Override @@ -90,7 +91,7 @@ public class Essentials extends JavaPlugin implements IEssentials this.initialize(null, server, new PluginDescriptionFile(new FileReader(new File("src" + File.separator + "plugin.yml"))), dataFolder, null, null); settings = new Settings(this); userMap = new UserMap(this); - permissionsHandler = new ConfigPermissionsHandler(this); + permissionsHandler = new PermissionsHandler(this, false); Economy.setEss(this); } @@ -151,6 +152,7 @@ public class Essentials extends JavaPlugin implements IEssentials LOGGER.log(Level.INFO, Util.i18n("bukkitFormatChanged")); } + permissionsHandler = new PermissionsHandler(this, settings.useBukkitPermissions()); final EssentialsPluginListener serverListener = new EssentialsPluginListener(this); pm.registerEvent(Type.PLUGIN_ENABLE, serverListener, Priority.Low, this); pm.registerEvent(Type.PLUGIN_DISABLE, serverListener, Priority.Low, this); @@ -665,17 +667,11 @@ public class Essentials extends JavaPlugin implements IEssentials } @Override - public IPermissionsHandler getPermissionsHandler() + public PermissionsHandler getPermissionsHandler() { return permissionsHandler; } - @Override - public void setPermissionsHandler(final IPermissionsHandler handler) - { - this.permissionsHandler = handler; - } - @Override public BanWorkaround getBans() { diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java index cd969a10c..e64496171 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java @@ -1,19 +1,10 @@ package com.earth2me.essentials; -import com.earth2me.essentials.perm.BPermissionsHandler; -import com.earth2me.essentials.perm.ConfigPermissionsHandler; -import com.earth2me.essentials.perm.Permissions3Handler; -import com.earth2me.essentials.perm.Permissions2Handler; -import com.earth2me.essentials.perm.PermissionsBukkitHandler; -import com.earth2me.essentials.perm.PermissionsExHandler; -import com.earth2me.essentials.perm.SuperpermsHandler; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.event.server.ServerListener; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginManager; public class EssentialsPluginListener extends ServerListener implements IConf @@ -29,7 +20,7 @@ public class EssentialsPluginListener extends ServerListener implements IConf @Override public void onPluginEnable(final PluginEnableEvent event) { - checkPermissions(); + ess.getPermissionsHandler().checkPermissions(); if (!ess.getPaymentMethod().hasMethod() && ess.getPaymentMethod().setMethod(event.getPlugin())) { LOGGER.log(Level.INFO, "[Essentials] Payment method found (" + ess.getPaymentMethod().getMethod().getName() + " version: " + ess.getPaymentMethod().getMethod().getVersion() + ")"); @@ -38,9 +29,9 @@ public class EssentialsPluginListener extends ServerListener implements IConf } @Override - public void onPluginDisable(PluginDisableEvent event) + public void onPluginDisable(final PluginDisableEvent event) { - checkPermissions(); + ess.getPermissionsHandler().checkPermissions(); // Check to see if the plugin thats being disabled is the one we are using if (ess.getPaymentMethod() != null && ess.getPaymentMethod().hasMethod() && ess.getPaymentMethod().checkDisabled(event.getPlugin())) { @@ -48,84 +39,10 @@ public class EssentialsPluginListener extends ServerListener implements IConf } } - private void checkPermissions() - { - final PluginManager pm = ess.getServer().getPluginManager(); - final Plugin permissionsExPlugin = pm.getPlugin("PermissionsEx"); - - if (permissionsExPlugin == null || !permissionsExPlugin.isEnabled()) - { - final Plugin permissionsPlugin = pm.getPlugin("Permissions"); - if (permissionsPlugin == null || !permissionsPlugin.isEnabled()) - { - final Plugin permissionsBukkitPlugin = pm.getPlugin("PermissionsBukkit"); - final Plugin bPermissionsPlugin = pm.getPlugin("bPermissions"); - if (permissionsBukkitPlugin != null && permissionsBukkitPlugin.isEnabled()) - { - if (!(ess.getPermissionsHandler() instanceof PermissionsBukkitHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using PermissionsBukkit based permissions."); - ess.setPermissionsHandler(new PermissionsBukkitHandler(permissionsBukkitPlugin)); - } - } - else if (bPermissionsPlugin != null && bPermissionsPlugin.isEnabled()) - { - if (!(ess.getPermissionsHandler() instanceof BPermissionsHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using bPermissions based permissions."); - ess.setPermissionsHandler(new BPermissionsHandler()); - } - } - else if (ess.getSettings().useBukkitPermissions()) - { - if (!(ess.getPermissionsHandler() instanceof SuperpermsHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); - ess.setPermissionsHandler(new SuperpermsHandler()); - } - } - else - { - if (!(ess.getPermissionsHandler() instanceof ConfigPermissionsHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using config based permissions. Enable superperms in config."); - ess.setPermissionsHandler(new ConfigPermissionsHandler(ess)); - } - } - } - else - { - if (permissionsPlugin.getDescription().getVersion().charAt(0) == '3') - { - if (!(ess.getPermissionsHandler() instanceof Permissions3Handler)) - { - LOGGER.log(Level.INFO, "Essentials: Using Permissions 3 based permissions."); - ess.setPermissionsHandler(new Permissions3Handler(permissionsPlugin)); - } - } - else - { - if (!(ess.getPermissionsHandler() instanceof Permissions2Handler)) - { - LOGGER.log(Level.INFO, "Essentials: Using Permissions 2 based permissions."); - ess.setPermissionsHandler(new Permissions2Handler(permissionsPlugin)); - } - } - } - } - else - { - if (!(ess.getPermissionsHandler() instanceof PermissionsExHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using PermissionsEx based permissions."); - ess.setPermissionsHandler(new PermissionsExHandler()); - } - } - } - @Override public void reloadConfig() { - checkPermissions(); + ess.getPermissionsHandler().setUseSuperperms(ess.getSettings().useBukkitPermissions()); + ess.getPermissionsHandler().checkPermissions(); } } diff --git a/Essentials/src/com/earth2me/essentials/IEssentials.java b/Essentials/src/com/earth2me/essentials/IEssentials.java index 0512b629e..b47ebd5ab 100644 --- a/Essentials/src/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/com/earth2me/essentials/IEssentials.java @@ -1,6 +1,6 @@ package com.earth2me.essentials; -import com.earth2me.essentials.perm.IPermissionsHandler; +import com.earth2me.essentials.perm.PermissionsHandler; import com.earth2me.essentials.register.payment.Methods; import org.bukkit.World; import org.bukkit.command.Command; @@ -57,9 +57,7 @@ public interface IEssentials extends Plugin TNTExplodeListener getTNTListener(); - IPermissionsHandler getPermissionsHandler(); - - void setPermissionsHandler(IPermissionsHandler handler); + PermissionsHandler getPermissionsHandler(); void showError(final CommandSender sender, final Throwable exception, final String commandLabel); diff --git a/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java index 82f793ee0..90b905113 100644 --- a/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java @@ -19,28 +19,29 @@ public class BPermissionsHandler extends SuperpermsHandler @Override public String getGroup(final Player base) { - final PermissionSet pset = wpm.getPermissionSet(base.getWorld()); - if (pset == null) - { - return "default"; - } - final List groups = pset.getGroups(base); + final List groups = getGroups(base); if (groups == null || groups.isEmpty()) { - return "default"; + return null; } return groups.get(0); } @Override - public boolean inGroup(final Player base, final String group) + public List getGroups(final Player base) { final PermissionSet pset = wpm.getPermissionSet(base.getWorld()); if (pset == null) { - return false; + return null; } - final List groups = pset.getGroups(base); + return pset.getGroups(base); + } + + @Override + public boolean inGroup(final Player base, final String group) + { + final List groups = getGroups(base); if (groups == null || groups.isEmpty()) { return false; diff --git a/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java index 82d285b1f..fad479444 100644 --- a/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java @@ -1,22 +1,30 @@ package com.earth2me.essentials.perm; import com.earth2me.essentials.IEssentials; +import java.util.List; import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; public class ConfigPermissionsHandler implements IPermissionsHandler { private final transient IEssentials ess; - public ConfigPermissionsHandler(final IEssentials ess) + public ConfigPermissionsHandler(final Plugin ess) { - this.ess = ess; + this.ess = (IEssentials)ess; } @Override public String getGroup(final Player base) { - return "default"; + return null; + } + + @Override + public List getGroups(final Player base) + { + return null; } @Override @@ -42,12 +50,12 @@ public class ConfigPermissionsHandler implements IPermissionsHandler @Override public String getPrefix(final Player base) { - return ""; + return null; } @Override public String getSuffix(final Player base) { - return ""; + return null; } } diff --git a/Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java index c7fddb6c8..27af48e8c 100644 --- a/Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java @@ -1,13 +1,15 @@ package com.earth2me.essentials.perm; +import java.util.List; import org.bukkit.entity.Player; public interface IPermissionsHandler { - String getGroup(Player base); + List getGroups(Player base); + boolean canBuild(Player base, String group); boolean inGroup(Player base, String group); @@ -17,5 +19,4 @@ public interface IPermissionsHandler String getPrefix(Player base); String getSuffix(Player base); - } diff --git a/Essentials/src/com/earth2me/essentials/perm/NullPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/NullPermissionsHandler.java new file mode 100644 index 000000000..b51aeb055 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/perm/NullPermissionsHandler.java @@ -0,0 +1,51 @@ +package com.earth2me.essentials.perm; + +import java.util.Collections; +import java.util.List; +import org.bukkit.entity.Player; + + +public class NullPermissionsHandler implements IPermissionsHandler +{ + @Override + public String getGroup(final Player base) + { + return null; + } + + @Override + public List getGroups(final Player base) + { + return Collections.emptyList(); + } + + @Override + public boolean canBuild(final Player base, final String group) + { + return false; + } + + @Override + public boolean inGroup(final Player base, final String group) + { + return false; + } + + @Override + public boolean hasPermission(final Player base, final String node) + { + return false; + } + + @Override + public String getPrefix(final Player base) + { + return null; + } + + @Override + public String getSuffix(final Player base) + { + return null; + } +} diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java index 0d7b45cb7..6b5ff5b73 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java @@ -2,6 +2,8 @@ package com.earth2me.essentials.perm; import com.nijiko.permissions.PermissionHandler; import com.nijikokun.bukkit.Permissions.Permissions; +import java.util.Arrays; +import java.util.List; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -18,8 +20,13 @@ public class Permissions2Handler implements IPermissionsHandler @Override public String getGroup(final Player base) { - final String group = permissionHandler.getGroup(base.getWorld().getName(), base.getName()); - return group == null ? "default" : group; + return permissionHandler.getGroup(base.getWorld().getName(), base.getName()); + } + + @Override + public List getGroups(final Player base) + { + return Arrays.asList(permissionHandler.getGroups(base.getWorld().getName(), base.getName())); } @Override @@ -43,14 +50,12 @@ public class Permissions2Handler implements IPermissionsHandler @Override public String getPrefix(final Player base) { - final String prefix = permissionHandler.getGroupPrefix(base.getWorld().getName(), getGroup(base)); - return prefix == null ? "" : prefix; + return permissionHandler.getGroupPrefix(base.getWorld().getName(), getGroup(base)); } @Override public String getSuffix(final Player base) { - final String suffix = permissionHandler.getGroupSuffix(base.getWorld().getName(), getGroup(base)); - return suffix == null ? "" : suffix; + return permissionHandler.getGroupSuffix(base.getWorld().getName(), getGroup(base)); } } diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java index c0ac249a8..190d5b8c5 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java @@ -2,6 +2,8 @@ package com.earth2me.essentials.perm; import com.nijiko.permissions.PermissionHandler; import com.nijikokun.bukkit.Permissions.Permissions; +import java.util.Arrays; +import java.util.List; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -9,7 +11,7 @@ import org.bukkit.plugin.Plugin; public class Permissions3Handler implements IPermissionsHandler { private final transient PermissionHandler permissionHandler; - + public Permissions3Handler(final Plugin permissionsPlugin) { permissionHandler = ((Permissions)permissionsPlugin).getHandler(); @@ -21,6 +23,12 @@ public class Permissions3Handler implements IPermissionsHandler return permissionHandler.getPrimaryGroup(base.getWorld().getName(), base.getName()); } + @Override + public List getGroups(final Player base) + { + return Arrays.asList(permissionHandler.getGroups(base.getWorld().getName(), base.getName())); + } + @Override public boolean canBuild(final Player base, final String group) { @@ -50,5 +58,4 @@ public class Permissions3Handler implements IPermissionsHandler { return permissionHandler.getUserSuffix(base.getWorld().getName(), base.getName()); } - } diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java index 9fd87905e..d47c3c8a4 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java @@ -3,6 +3,8 @@ package com.earth2me.essentials.perm; import com.platymuus.bukkit.permissions.Group; import com.platymuus.bukkit.permissions.PermissionInfo; import com.platymuus.bukkit.permissions.PermissionsPlugin; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -20,32 +22,49 @@ public class PermissionsBukkitHandler extends SuperpermsHandler @Override public String getGroup(final Player base) { - final PermissionInfo info = plugin.getPlayerInfo(base.getName()); - if (info == null) - { - return "default"; - } - final List groups = info.getGroups(); + final List groups = getPBGroups(base); if (groups == null || groups.isEmpty()) { - return "default"; + return null; } return groups.get(0).getName(); } @Override - public boolean inGroup(final Player base, final String group) + public List getGroups(final Player base) + { + final List groups = getPBGroups(base); + if (groups.size() == 1) + { + return Collections.singletonList(groups.get(0).getName()); + } + final List groupNames = new ArrayList(groups.size()); + for (Group group : groups) + { + groupNames.add(group.getName()); + } + return groupNames; + } + + private List getPBGroups(final Player base) { final PermissionInfo info = plugin.getPlayerInfo(base.getName()); if (info == null) { - return false; + return Collections.emptyList(); } final List groups = info.getGroups(); if (groups == null || groups.isEmpty()) { - return false; + return Collections.emptyList(); } + return groups; + } + + @Override + public boolean inGroup(final Player base, final String group) + { + final List groups = getPBGroups(base); for (Group group1 : groups) { if (group1.getName().equalsIgnoreCase(group)) diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java index 28b056c0a..5b7bb7b81 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java @@ -1,5 +1,7 @@ package com.earth2me.essentials.perm; +import java.util.Arrays; +import java.util.List; import org.bukkit.entity.Player; import ru.tehkode.permissions.PermissionManager; import ru.tehkode.permissions.PermissionUser; @@ -21,11 +23,22 @@ public class PermissionsExHandler implements IPermissionsHandler final PermissionUser user = manager.getUser(base.getName()); if (user == null) { - return "default"; + return null; } return user.getGroupsNames()[0]; } + @Override + public List getGroups(final Player base) + { + final PermissionUser user = manager.getUser(base.getName()); + if (user == null) + { + return null; + } + return Arrays.asList(user.getGroupsNames()); + } + @Override public boolean canBuild(final Player base, final String group) { @@ -62,7 +75,7 @@ public class PermissionsExHandler implements IPermissionsHandler final PermissionUser user = manager.getUser(base.getName()); if (user == null) { - return ""; + return null; } return user.getPrefix(); } @@ -73,7 +86,7 @@ public class PermissionsExHandler implements IPermissionsHandler final PermissionUser user = manager.getUser(base.getName()); if (user == null) { - return ""; + return null; } return user.getSuffix(); } diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java new file mode 100644 index 000000000..2843b5d92 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java @@ -0,0 +1,179 @@ +package com.earth2me.essentials.perm; + +import java.util.Collections; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; + + +public class PermissionsHandler implements IPermissionsHandler +{ + private transient IPermissionsHandler handler = new NullPermissionsHandler(); + private transient String defaultGroup = "default"; + private final transient Plugin plugin; + private final static Logger LOGGER = Logger.getLogger("Minecraft"); + private transient boolean useSuperperms = false; + + public PermissionsHandler(final Plugin plugin) + { + this.plugin = plugin; + } + + public PermissionsHandler(final Plugin plugin, final boolean useSuperperms) + { + this.plugin = plugin; + this.useSuperperms = useSuperperms; + } + + public PermissionsHandler(final Plugin plugin, final String defaultGroup) + { + this.plugin = plugin; + this.defaultGroup = defaultGroup; + } + + @Override + public String getGroup(final Player base) + { + String group = handler.getGroup(base); + if (group == null) + { + group = defaultGroup; + } + return group; + } + + @Override + public List getGroups(final Player base) + { + List groups = handler.getGroups(base); + if (groups == null || groups.isEmpty()) + { + groups = Collections.singletonList(defaultGroup); + } + return Collections.unmodifiableList(groups); + } + + @Override + public boolean canBuild(final Player base, final String group) + { + return handler.canBuild(base, group); + } + + @Override + public boolean inGroup(final Player base, final String group) + { + return handler.inGroup(base, group); + } + + @Override + public boolean hasPermission(final Player base, final String node) + { + return handler.inGroup(base, node); + } + + @Override + public String getPrefix(final Player base) + { + String prefix = handler.getPrefix(base); + if (prefix == null) + { + prefix = ""; + } + return prefix; + } + + @Override + public String getSuffix(final Player base) + { + String suffix = handler.getSuffix(base); + if (suffix == null) + { + suffix = ""; + } + return suffix; + } + + public void checkPermissions() + { + final PluginManager pluginManager = plugin.getServer().getPluginManager(); + final Plugin permExPlugin = pluginManager.getPlugin("PermissionsEx"); + + if (permExPlugin == null || !permExPlugin.isEnabled()) + { + final Plugin permBukkitPlugin = pluginManager.getPlugin("PermissionsBukkit"); + final Plugin bPermPlugin = pluginManager.getPlugin("bPermissions"); + final Plugin permPlugin = pluginManager.getPlugin("Permissions"); + + if (permBukkitPlugin != null && permBukkitPlugin.isEnabled()) + { + if (!(handler instanceof PermissionsBukkitHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using PermissionsBukkit based permissions."); + handler = new PermissionsBukkitHandler(permBukkitPlugin); + } + } + else if (bPermPlugin != null && bPermPlugin.isEnabled()) + { + if (!(handler instanceof BPermissionsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using bPermissions based permissions."); + handler = new BPermissionsHandler(); + } + } + else if (permPlugin == null || !permPlugin.isEnabled()) + { + if (useSuperperms) + { + if (!(handler instanceof SuperpermsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); + handler = new SuperpermsHandler(); + } + } + else + { + if (!(handler instanceof ConfigPermissionsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using config based permissions. Enable superperms in config."); + handler = new ConfigPermissionsHandler(plugin); + } + } + } + else + { + if (permPlugin.getDescription().getVersion().charAt(0) == '3') + { + if (!(handler instanceof Permissions3Handler)) + { + LOGGER.log(Level.INFO, "Essentials: Using Permissions 3 based permissions."); + handler = new Permissions3Handler(permPlugin); + } + } + else + { + if (!(handler instanceof Permissions2Handler)) + { + LOGGER.log(Level.INFO, "Essentials: Using Permissions 2 based permissions."); + handler = new Permissions2Handler(permPlugin); + } + } + } + } + else + { + if (!(handler instanceof PermissionsExHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using PermissionsEx based permissions."); + handler = new PermissionsExHandler(); + } + } + } + + public void setUseSuperperms(final boolean useSuperperms) + { + this.useSuperperms = useSuperperms; + } +} diff --git a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java index 60b1c5a3d..70a118bcf 100644 --- a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.perm; +import java.util.List; import org.bukkit.entity.Player; @@ -8,7 +9,13 @@ public class SuperpermsHandler implements IPermissionsHandler @Override public String getGroup(final Player base) { - return "default"; + return null; + } + + @Override + public List getGroups(final Player base) + { + return null; } @Override @@ -31,14 +38,16 @@ public class SuperpermsHandler implements IPermissionsHandler return false; } final String[] parts = node.split("\\."); - final StringBuilder sb = new StringBuilder(); + final StringBuilder builder = new StringBuilder(node.length()); for (String part : parts) { - if (base.hasPermission(sb.toString() + "*")) + builder.append('*'); + if (base.hasPermission(builder.toString())) { return true; } - sb.append(part).append("."); + builder.deleteCharAt(builder.length() - 1); + builder.append(part).append('.'); } return base.hasPermission(node); } @@ -46,12 +55,12 @@ public class SuperpermsHandler implements IPermissionsHandler @Override public String getPrefix(final Player base) { - return ""; + return null; } @Override public String getSuffix(final Player base) { - return ""; + return null; } } From d3dd4980a40f3fb378dc4e5b7525cdb25b780b50 Mon Sep 17 00:00:00 2001 From: snowleo Date: Wed, 31 Aug 2011 12:51:59 +0200 Subject: [PATCH 26/43] Using base instead of our wrapped player for permission check. --- .../src/com/earth2me/essentials/User.java | 21 ++++++++++++------- .../essentials/perm/Permissions2Handler.java | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 918f0f128..fa5c7bd2d 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -17,7 +17,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser private transient User teleportRequester; private transient boolean teleportRequestHere; private transient final Teleport teleport; - private transient long lastOnlineActivity ; + private transient long lastOnlineActivity; private transient long lastActivity = System.currentTimeMillis(); private boolean hidden = false; private transient boolean godStateBeforeAfk; @@ -50,6 +50,11 @@ public class User extends UserData implements Comparable, IReplyTo, IUser @Override public boolean isAuthorized(final String node) { + if (base instanceof OfflinePlayer) + { + return false; + } + if (isOp()) { return true; @@ -60,7 +65,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser return false; } - return ess.getPermissionsHandler().hasPermission(this, node); + return ess.getPermissionsHandler().hasPermission(base, node); } public void healCooldown() throws Exception @@ -264,8 +269,8 @@ public class User extends UserData implements Comparable, IReplyTo, IUser if (ess.getSettings().addPrefixSuffix()) { - final String prefix = ess.getPermissionsHandler().getPrefix(this).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName()); - final String suffix = ess.getPermissionsHandler().getSuffix(this).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName()); + final String prefix = ess.getPermissionsHandler().getPrefix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName()); + final String suffix = ess.getPermissionsHandler().getSuffix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName()); nickname.insert(0, prefix); nickname.append(suffix); @@ -341,11 +346,13 @@ public class User extends UserData implements Comparable, IReplyTo, IUser public void setAfk(final boolean set) { this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : set); - if (set && !isAfk() && ess.getSettings().getFreezeAfkPlayers()) { + if (set && !isAfk() && ess.getSettings().getFreezeAfkPlayers()) + { godStateBeforeAfk = isGodModeEnabled(); setGodModeEnabled(true); } - if (!set && isAfk() && ess.getSettings().getFreezeAfkPlayers()) { + if (!set && isAfk() && ess.getSettings().getFreezeAfkPlayers()) + { setGodModeEnabled(godStateBeforeAfk); } super.setAfk(set); @@ -423,7 +430,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser if (autoafkkick > 0 && lastActivity + autoafkkick * 1000 < System.currentTimeMillis() && !isAuthorized("essentials.kick.exempt") && !isAuthorized("essentials.afk.kickexempt")) { - final String kickReason = Util.format("autoAfkKickReason", autoafkkick/60.0); + final String kickReason = Util.format("autoAfkKickReason", autoafkkick / 60.0); kickPlayer(kickReason); diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java index 6b5ff5b73..c501369d0 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java @@ -44,7 +44,7 @@ public class Permissions2Handler implements IPermissionsHandler @Override public boolean hasPermission(final Player base, final String node) { - return permissionHandler.permission(base, node); + return permissionHandler.permission(base.getWorld().getName(), base.getName(), node); } @Override From c8f6ea7f8e802ec063a9674d300fe520042696d0 Mon Sep 17 00:00:00 2001 From: snowleo Date: Wed, 31 Aug 2011 13:02:21 +0200 Subject: [PATCH 27/43] Cleaner checkPermissions() --- .../essentials/perm/PermissionsHandler.java | 125 +++++++++--------- 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java index 2843b5d92..9fbf83f94 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java @@ -101,74 +101,75 @@ public class PermissionsHandler implements IPermissionsHandler final PluginManager pluginManager = plugin.getServer().getPluginManager(); final Plugin permExPlugin = pluginManager.getPlugin("PermissionsEx"); - if (permExPlugin == null || !permExPlugin.isEnabled()) - { - final Plugin permBukkitPlugin = pluginManager.getPlugin("PermissionsBukkit"); - final Plugin bPermPlugin = pluginManager.getPlugin("bPermissions"); - final Plugin permPlugin = pluginManager.getPlugin("Permissions"); - - if (permBukkitPlugin != null && permBukkitPlugin.isEnabled()) - { - if (!(handler instanceof PermissionsBukkitHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using PermissionsBukkit based permissions."); - handler = new PermissionsBukkitHandler(permBukkitPlugin); - } - } - else if (bPermPlugin != null && bPermPlugin.isEnabled()) - { - if (!(handler instanceof BPermissionsHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using bPermissions based permissions."); - handler = new BPermissionsHandler(); - } - } - else if (permPlugin == null || !permPlugin.isEnabled()) - { - if (useSuperperms) - { - if (!(handler instanceof SuperpermsHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); - handler = new SuperpermsHandler(); - } - } - else - { - if (!(handler instanceof ConfigPermissionsHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using config based permissions. Enable superperms in config."); - handler = new ConfigPermissionsHandler(plugin); - } - } - } - else - { - if (permPlugin.getDescription().getVersion().charAt(0) == '3') - { - if (!(handler instanceof Permissions3Handler)) - { - LOGGER.log(Level.INFO, "Essentials: Using Permissions 3 based permissions."); - handler = new Permissions3Handler(permPlugin); - } - } - else - { - if (!(handler instanceof Permissions2Handler)) - { - LOGGER.log(Level.INFO, "Essentials: Using Permissions 2 based permissions."); - handler = new Permissions2Handler(permPlugin); - } - } - } - } - else + if (permExPlugin != null && permExPlugin.isEnabled()) { if (!(handler instanceof PermissionsExHandler)) { LOGGER.log(Level.INFO, "Essentials: Using PermissionsEx based permissions."); handler = new PermissionsExHandler(); } + return; + } + + final Plugin permBukkitPlugin = pluginManager.getPlugin("PermissionsBukkit"); + if (permBukkitPlugin != null && permBukkitPlugin.isEnabled()) + { + if (!(handler instanceof PermissionsBukkitHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using PermissionsBukkit based permissions."); + handler = new PermissionsBukkitHandler(permBukkitPlugin); + } + return; + } + + final Plugin bPermPlugin = pluginManager.getPlugin("bPermissions"); + if (bPermPlugin != null && bPermPlugin.isEnabled()) + { + if (!(handler instanceof BPermissionsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using bPermissions based permissions."); + handler = new BPermissionsHandler(); + } + return; + } + + final Plugin permPlugin = pluginManager.getPlugin("Permissions"); + if (permPlugin != null && permPlugin.isEnabled()) + { + if (permPlugin.getDescription().getVersion().charAt(0) == '3') + { + if (!(handler instanceof Permissions3Handler)) + { + LOGGER.log(Level.INFO, "Essentials: Using Permissions 3 based permissions."); + handler = new Permissions3Handler(permPlugin); + } + } + else + { + if (!(handler instanceof Permissions2Handler)) + { + LOGGER.log(Level.INFO, "Essentials: Using Permissions 2 based permissions."); + handler = new Permissions2Handler(permPlugin); + } + } + return; + } + + if (useSuperperms) + { + if (!(handler instanceof SuperpermsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); + handler = new SuperpermsHandler(); + } + } + else + { + if (!(handler instanceof ConfigPermissionsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using config based permissions. Enable superperms in config."); + handler = new ConfigPermissionsHandler(plugin); + } } } From d7af6792433f3db61c22d33d312609ae4b511b6b Mon Sep 17 00:00:00 2001 From: snowleo Date: Wed, 31 Aug 2011 13:03:01 +0200 Subject: [PATCH 28/43] Cleanup --- .../src/com/earth2me/essentials/perm/PermissionsHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java index 9fbf83f94..5c976103a 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java @@ -99,8 +99,8 @@ public class PermissionsHandler implements IPermissionsHandler public void checkPermissions() { final PluginManager pluginManager = plugin.getServer().getPluginManager(); + final Plugin permExPlugin = pluginManager.getPlugin("PermissionsEx"); - if (permExPlugin != null && permExPlugin.isEnabled()) { if (!(handler instanceof PermissionsExHandler)) From bb1cad1bc1b2ad742c1b8a9f6852fbb575646f99 Mon Sep 17 00:00:00 2001 From: snowleo Date: Thu, 1 Sep 2011 11:52:52 +0200 Subject: [PATCH 29/43] Copy&Paste Bugs are always stupid --- .../src/com/earth2me/essentials/perm/PermissionsHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java index 5c976103a..8adff346a 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java @@ -71,7 +71,7 @@ public class PermissionsHandler implements IPermissionsHandler @Override public boolean hasPermission(final Player base, final String node) { - return handler.inGroup(base, node); + return handler.hasPermission(base, node); } @Override From e0d913dbaf477ddfdd409ada66f9f0cd0c421226 Mon Sep 17 00:00:00 2001 From: snowleo Date: Thu, 1 Sep 2011 13:47:49 +0200 Subject: [PATCH 30/43] Sample permissions for PermissionsBukkit, PermissionsEx and bPermissions --- Essentials/src/examples/bpermissions.yml | 120 ++++++++++++++ Essentials/src/examples/permissionsbukkit.yml | 135 ++++++++++++++++ Essentials/src/examples/permissionsex.yml | 150 ++++++++++++++++++ 3 files changed, 405 insertions(+) create mode 100644 Essentials/src/examples/bpermissions.yml create mode 100644 Essentials/src/examples/permissionsbukkit.yml create mode 100644 Essentials/src/examples/permissionsex.yml diff --git a/Essentials/src/examples/bpermissions.yml b/Essentials/src/examples/bpermissions.yml new file mode 100644 index 000000000..9ba493fae --- /dev/null +++ b/Essentials/src/examples/bpermissions.yml @@ -0,0 +1,120 @@ +default: Default +groups: + Default: + - essentials.spawn + - essentials.rules + - essentials.motd + - essentials.list + - essentials.helpop + - essentials.help + Builder: + - essentials.build + - essentials.afk + - essentials.back + - essentials.back.ondeath + - essentials.balance + - essentials.balance.others + - essentials.balancetop + - essentials.chat.color + - essentials.chat.shout + - essentials.chat.question + - essentials.compass + - essentials.depth + - essentials.home + - essentials.ignore + - essentials.kit + - essentials.kit.tools + - essentials.mail + - essentials.mail.send + - essentials.me + - essentials.msg + - essentials.nick + - essentials.pay + - essentials.ping + - essentials.portal + - essentials.powertool + - essentials.protect + - essentials.sethome + - essentials.signs.use.* + - essentials.signs.create.disposal + - essentials.signs.create.mail + - essentials.signs.create.protection + - essentials.signs.create.trade + - essentials.signs.break.disposal + - essentials.signs.break.mail + - essentials.signs.break.protection + - essentials.signs.break.trade + - essentials.suicide + - essentials.time + - essentials.tpa + - essentials.tpaccept + - essentials.tpahere + - essentials.tpdeny + - essentials.warp + - essentials.warp.list + - essentials.worth + Moderator: + - essentials.build + - essentials.ban + - essentials.ban.notify + - essentials.banip + - essentials.broadcast + - essentials.clearinventory + - essentials.delwarp + - essentials.eco.loan + - essentials.ext + - essentials.getpos + - essentials.helpop.recieve + - essentials.home.others + - essentials.invsee + - essentials.jails + - essentials.jump + - essentials.kick + - essentials.kick.notify + - essentials.kill + - essentials.mute + - essentials.nick.others + - essentials.realname + - essentials.setwarp + - essentials.signs.create.* + - essentials.signs.break.* + - essentials.spawner + - essentials.thunder + - essentials.time + - essentials.time.set + - essentials.protect.alerts + - essentials.protect.admin + - essentials.protect.ownerinfo + - essentials.ptime + - essentials.ptime.others + - essentials.togglejail + - essentials.top + - essentials.tp + - essentials.tphere + - essentials.tppos + - essentials.tptoggle + - essentials.unban + - essentials.unbanip + - essentials.weather + - essentials.whois + - essentials.world + Admin: + # Since we use essentials.* permission here, we can still disable commands like this + # This is only available for essentials permissions + - -essentials.backup + - -essentials.essentials + - -essentials.setspawn + - -essentials.reloadall + - essentials.* + Owner: + - essentials.* +players: + notch: + - Default + snowleo: + - Admin + - Moderator + - Builder + - Default + KHobbits: + - Owner diff --git a/Essentials/src/examples/permissionsbukkit.yml b/Essentials/src/examples/permissionsbukkit.yml new file mode 100644 index 000000000..243752232 --- /dev/null +++ b/Essentials/src/examples/permissionsbukkit.yml @@ -0,0 +1,135 @@ +users: + snowleo: + groups: + - Admin +groups: + Default: + permissions: + permissions.build: true + essentials.build: false + essentials.spawn: true + essentials.rules: true + essentials.motd: true + essentials.list: true + essentials.helpop: true + essentials.help: true + Builder: + permissions: + permissions.build: true + essentials.build: true + essentials.afk: true + essentials.back: true + essentials.back.ondeath: true + essentials.balance: true + essentials.balance.others: true + essentials.balancetop: true + essentials.chat.color: true + essentials.chat.shout: true + essentials.chat.question: true + essentials.compass: true + essentials.depth: true + essentials.home: true + essentials.ignore: true + essentials.kit: true + essentials.kit.tools: true + essentials.mail: true + essentials.mail.send: true + essentials.me: true + essentials.msg: true + essentials.nick: true + essentials.pay: true + essentials.ping: true + essentials.portal: true + essentials.powertool: true + essentials.protect: true + essentials.sethome: true + essentials.signs.use.*: true + essentials.signs.create.disposal: true + essentials.signs.create.mail: true + essentials.signs.create.protection: true + essentials.signs.create.trade: true + essentials.signs.break.disposal: true + essentials.signs.break.mail: true + essentials.signs.break.protection: true + essentials.signs.break.trade: true + essentials.suicide: true + essentials.time: true + essentials.tpa: true + essentials.tpaccept: true + essentials.tpahere: true + essentials.tpdeny: true + essentials.warp: true + essentials.warp.list: true + essentials.worth: true + inheritance: + - Default + Moderator: + permissions: + essentials.ban: true + essentials.ban.notify: true + essentials.banip: true + essentials.broadcast: true + essentials.clearinventory: true + essentials.delwarp: true + essentials.eco.loan: true + essentials.ext: true + essentials.getpos: true + essentials.helpop.recieve: true + essentials.home.others: true + essentials.invsee: true + essentials.jails: true + essentials.jump: true + essentials.kick: true + essentials.kick.notify: true + essentials.kill: true + essentials.mute: true + essentials.nick.others: true + essentials.realname: true + essentials.setwarp: true + essentials.signs.create.*: true + essentials.signs.break.*: true + essentials.spawner: true + essentials.thunder: true + essentials.time: true + essentials.time.set: true + essentials.protect.alerts: true + essentials.protect.admin: true + essentials.protect.ownerinfo: true + essentials.ptime: true + essentials.ptime.others: true + essentials.togglejail: true + essentials.top: true + essentials.tp: true + essentials.tphere: true + essentials.tppos: true + essentials.tptoggle: true + essentials.unban: true + essentials.unbanip: true + essentials.weather: true + essentials.whois: true + essentials.world: true + inheritance: + - Builder + Admin: + permissions: + permissions.*: true + # Since we use essentials.* permission here, we can still disable commands like this + # This is only available for essentials permissions + -essentials.backup: true + -essentials.essentials: true + -essentials.setspawn: true + -essentials.reloadall: true + essentials.*: true + inheritance: + - Moderator + Owner: + permissions: + # Double negation + -essentials.backup: false + -essentials.essentials: false + -essentials.setspawn: false + -essentials.reloadall: false + inheritance: + - Admin +messages: + build: '&cYou do not have permission to build here.' diff --git a/Essentials/src/examples/permissionsex.yml b/Essentials/src/examples/permissionsex.yml new file mode 100644 index 000000000..47407cd62 --- /dev/null +++ b/Essentials/src/examples/permissionsex.yml @@ -0,0 +1,150 @@ +groups: + Default: + default: true + permissions: + - essentials.spawn + - essentials.rules + - essentials.motd + - essentials.list + - essentials.helpop + - essentials.help + - modifyworld.* + prefix: '&e' + options: + build: false + rank: '1000' + Builder: + permissions: + - essentials.afk + - essentials.back + - essentials.back.ondeath + - essentials.balance + - essentials.balance.others + - essentials.balancetop + - essentials.chat.color + - essentials.chat.shout + - essentials.chat.question + - essentials.compass + - essentials.depth + - essentials.home + - essentials.ignore + - essentials.kit + - essentials.kit.tools + - essentials.mail + - essentials.mail.send + - essentials.me + - essentials.msg + - essentials.nick + - essentials.pay + - essentials.ping + - essentials.portal + - essentials.powertool + - essentials.protect + - essentials.sethome + - essentials.signs.use.* + - essentials.signs.create.disposal + - essentials.signs.create.mail + - essentials.signs.create.protection + - essentials.signs.create.trade + - essentials.signs.break.disposal + - essentials.signs.break.mail + - essentials.signs.break.protection + - essentials.signs.break.trade + - essentials.suicide + - essentials.time + - essentials.tpa + - essentials.tpaccept + - essentials.tpahere + - essentials.tpdeny + - essentials.warp + - essentials.warp.list + - essentials.worth + inheritance: + - default + prefix: '&2' + options: + build: true + rank: '500' + Moderator: + permissions: + - essentials.ban + - essentials.ban.notify + - essentials.banip + - essentials.broadcast + - essentials.clearinventory + - essentials.delwarp + - essentials.eco.loan + - essentials.ext + - essentials.getpos + - essentials.helpop.recieve + - essentials.home.others + - essentials.invsee + - essentials.jails + - essentials.jump + - essentials.kick + - essentials.kick.notify + - essentials.kill + - essentials.mute + - essentials.nick.others + - essentials.realname + - essentials.setwarp + - essentials.signs.create.* + - essentials.signs.break.* + - essentials.spawner + - essentials.thunder + - essentials.time + - essentials.time.set + - essentials.protect.alerts + - essentials.protect.admin + - essentials.protect.ownerinfo + - essentials.ptime + - essentials.ptime.others + - essentials.togglejail + - essentials.top + - essentials.tp + - essentials.tphere + - essentials.tppos + - essentials.tptoggle + - essentials.unban + - essentials.unbanip + - essentials.weather + - essentials.whois + - essentials.world + - permissions.user.promote.default + - permissions.user.demote.default + - permissions.manage.membership + inheritance: + - builder + prefix: '&5' + options: + build: true + rank: '200' + Admin: + permissions: + - -essentials.backup + - -essentials.essentials + - -essentials.setspawn + - -essentials.reloadall + - essentials.* + - permissions.manage.users + - permissions.manage.users.permissions + - permissions.manage.users.permissions.timed + inheritance: + - moderator + prefix: '&c' + options: + build: true + rank: '100' + Owner: + permissions: + - '*' + inheritance: + - admin + prefix: '&4' + options: + build: true + rank: '0' +users: + snowleo: + group: + - Builder From 382bd2404610eac6342066d65a17792460ade78f Mon Sep 17 00:00:00 2001 From: snowleo Date: Thu, 1 Sep 2011 15:29:45 +0200 Subject: [PATCH 31/43] Prevent afk message after login, also don't show afk message on logout. --- Essentials/src/com/earth2me/essentials/Essentials.java | 5 +---- .../earth2me/essentials/EssentialsPlayerListener.java | 10 +++++----- Essentials/src/com/earth2me/essentials/User.java | 7 +++++-- .../com/earth2me/essentials/commands/Commandafk.java | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index d88edbdae..a9f77f401 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -17,8 +17,6 @@ */ package com.earth2me.essentials; -import com.earth2me.essentials.perm.IPermissionsHandler; -import com.earth2me.essentials.perm.ConfigPermissionsHandler; import com.earth2me.essentials.api.Economy; import com.earth2me.essentials.commands.EssentialsCommand; import java.io.*; @@ -42,7 +40,6 @@ import org.bukkit.command.PluginCommand; import org.bukkit.entity.Player; import org.bukkit.event.Event.Priority; import org.bukkit.event.Event.Type; -import org.bukkit.event.server.ServerListener; import org.bukkit.plugin.*; import org.bukkit.plugin.java.*; import org.bukkit.scheduler.BukkitScheduler; @@ -213,7 +210,7 @@ public class Essentials extends JavaPlugin implements IEssentials pm.registerEvent(Type.ENTITY_EXPLODE, tntListener, Priority.High, this); final EssentialsTimer timer = new EssentialsTimer(this); - getScheduler().scheduleSyncRepeatingTask(this, timer, 1, 50); + getScheduler().scheduleSyncRepeatingTask(this, timer, 1, 100); Economy.setEss(this); if (getSettings().isUpdateEnabled()) { diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 66de8ef29..c234f35a1 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -73,7 +73,7 @@ public class EssentialsPlayerListener extends PlayerListener it.remove(); } } - user.updateActivity(); + user.updateActivity(true); if (ess.getSettings().changeDisplayName()) { user.setDisplayName(user.getNick()); @@ -107,7 +107,7 @@ public class EssentialsPlayerListener extends PlayerListener return; } - user.updateActivity(); + user.updateActivity(true); if (!ess.getSettings().getNetherPortalsEnabled()) { @@ -226,7 +226,7 @@ public class EssentialsPlayerListener extends PlayerListener user.getInventory().setContents(user.getSavedInventory()); user.setSavedInventory(null); } - user.updateActivity(); + user.updateActivity(false); user.dispose(); if (!ess.getSettings().getReclaimSetting()) { @@ -275,7 +275,7 @@ public class EssentialsPlayerListener extends PlayerListener { user.setDisplayName(user.getNick()); } - user.setAfk(false); + user.updateActivity(false); if (user.isAuthorized("essentials.sleepingignored")) { user.setSleepingIgnored(true); @@ -489,7 +489,7 @@ public class EssentialsPlayerListener extends PlayerListener } if (!cmd.equalsIgnoreCase("afk")) { - user.updateActivity(); + user.updateActivity(true); } } } diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index fa5c7bd2d..9ba353cf9 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -413,12 +413,15 @@ public class User extends UserData implements Comparable, IReplyTo, IUser } } - public void updateActivity() + public void updateActivity(final boolean broadcast) { if (isAfk()) { setAfk(false); - ess.broadcastMessage(getName(), Util.format("userIsNotAway", getDisplayName())); + if (broadcast) + { + ess.broadcastMessage(getName(), Util.format("userIsNotAway", getDisplayName())); + } return; } lastActivity = System.currentTimeMillis(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java index 9fe17d5a0..bb749f66f 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java @@ -35,7 +35,7 @@ public class Commandafk extends EssentialsCommand { //user.sendMessage(Util.i18n("markedAsNotAway")); ess.broadcastMessage(user.getName(), Util.format("userIsNotAway", user.getDisplayName())); - user.updateActivity(); + user.updateActivity(false); } else { From f6b4daebb5fc715a4e986e64f388b20dbf6e9d9e Mon Sep 17 00:00:00 2001 From: snowleo Date: Thu, 1 Sep 2011 17:54:05 +0200 Subject: [PATCH 32/43] items.csv changes by andrewkm --- Essentials/src/items.csv | 58 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/Essentials/src/items.csv b/Essentials/src/items.csv index 579042e18..0e5db90d7 100644 --- a/Essentials/src/items.csv +++ b/Essentials/src/items.csv @@ -1,4 +1,4 @@ -#Last updated on 7/9/2011 21:37 (gmt +3) for minecraft version 1.7.3 +#Last updated on 30/8/2011 21:30 (gmt -5) for minecraft version 1.7.3 #item,id,metadata stone,1,0 sstone,1,0 @@ -401,6 +401,58 @@ ntreeleaf,18,0 nlogleaf,18,0 ntrunkleaf,18,0 nwoodleaf,18,0 +pineleaves,18,1 +pineleaf,18,1 +pinetreeleaves,18,1 +pinelogleaves,18,1 +pinetrunkleaves,18,1 +pinewoodleaves,18,1 +ptreeleaves,18,1 +plogleaves,18,1 +ptrunkleaves,18,1 +pwoodleaves,18,1 +pitreeleaves,18,1 +pilogleaves,18,1 +pitrunkleaves,18,1 +piwoodleaves,18,1 +pinetreeleaf,18,1 +pinelogleaf,18,1 +pinetrunkleaf,18,1 +pinewoodleaf,18,1 +ptreeleaf,18,1 +plogleaf,18,1 +ptrunkleaf,18,1 +pwoodleaf,18,1 +pitreeleaf,18,1 +pilogleaf,18,1 +pitrunkleaf,18,1 +piwoodleaf,18,1 +birchleaves,18,2 +birchleaf,18,2 +birchtreeleaves,18,2 +birchlogleaves,18,2 +birchtrunkleaves,18,2 +birchwoodleaves,18,2 +btreeleaves,18,2 +blogleaves,18,2 +btrunkleaves,18,2 +bwoodleaves,18,2 +bitreeleaves,18,2 +bilogleaves,18,2 +bitrunkleaves,18,2 +biwoodleaves,18,2 +birchtreeleaf,18,2 +birchlogleaf,18,2 +birchtrunkleaf,18,2 +birchwoodleaf,18,2 +btreeleaf,18,2 +blogleaf,18,2 +btrunkleaf,18,2 +bwoodleaf,18,2 +bitreeleaf,18,2 +bilogleaf,18,2 +bitrunkleaf,18,2 +biwoodleaf,18,2 sponge,19,0 glass,20,0 lapislazuliore,21,0 @@ -1745,6 +1797,7 @@ gfish,350,0 roastedfish,350,0 roastfish,350,0 rofish,350,0 +dye,351,0 inksack,351,0 inksac,351,0 isack,351,0 @@ -2014,6 +2067,9 @@ cookie,357,0 map,358,0 chart,358,0 shears,359,0 +shear,359,0 +sheers,359,0 +sheer,359,0 goldmusicrecord,2256,0 goldmusicdisk,2256,0 goldmusiccd,2256,0 From fc7a3e091d7091c23c7d2541f9e2229c90f58e7a Mon Sep 17 00:00:00 2001 From: snowleo Date: Thu, 1 Sep 2011 17:55:13 +0200 Subject: [PATCH 33/43] Restore tempban functionality --- .../src/com/earth2me/essentials/EssentialsPlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index c234f35a1..ebf9a97dc 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -310,7 +310,7 @@ public class EssentialsPlayerListener extends PlayerListener @Override public void onPlayerLogin(final PlayerLoginEvent event) { - if (event.getResult() != Result.ALLOWED && event.getResult() != Result.KICK_FULL) + if (event.getResult() != Result.ALLOWED && event.getResult() != Result.KICK_FULL && event.getResult() != Result.KICK_BANNED) { return; } From cccddc3311983eb5c0c436ff86bf1b4ac3cb4789 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Fri, 2 Sep 2011 09:35:26 +0200 Subject: [PATCH 34/43] Edited Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java via GitHub --- .../src/com/earth2me/essentials/perm/Permissions2Handler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java index c501369d0..0b8a327c4 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java @@ -44,7 +44,7 @@ public class Permissions2Handler implements IPermissionsHandler @Override public boolean hasPermission(final Player base, final String node) { - return permissionHandler.permission(base.getWorld().getName(), base.getName(), node); + return permissionHandler.permission(base.getName(), node); } @Override From 1b3698283e0608d7fc8173d2a366ead01e12afee Mon Sep 17 00:00:00 2001 From: KHobbits Date: Fri, 2 Sep 2011 09:40:14 +0200 Subject: [PATCH 35/43] fix failed edit on github --- .../src/com/earth2me/essentials/perm/Permissions2Handler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java index 0b8a327c4..6b5ff5b73 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java @@ -44,7 +44,7 @@ public class Permissions2Handler implements IPermissionsHandler @Override public boolean hasPermission(final Player base, final String node) { - return permissionHandler.permission(base.getName(), node); + return permissionHandler.permission(base, node); } @Override From fb211d722cb93d1234930015746d963a02818d5f Mon Sep 17 00:00:00 2001 From: snowleo Date: Fri, 2 Sep 2011 16:15:57 +0200 Subject: [PATCH 36/43] Prevent that hidden players broadcast afk messages Prevent that moving players triggers unafk too early, they can now move within a radius of 3 blocks from the position where they went afk. --- .../com/earth2me/essentials/Essentials.java | 10 ++++++++-- .../essentials/EssentialsPlayerListener.java | 4 +++- .../com/earth2me/essentials/IEssentials.java | 2 +- .../src/com/earth2me/essentials/IUser.java | 2 ++ .../src/com/earth2me/essentials/User.java | 20 +++++++++++++++---- .../essentials/commands/Commandafk.java | 10 ++++++++-- .../essentials/commands/Commandantioch.java | 4 ++-- .../essentials/commands/Commandbroadcast.java | 5 ++--- .../essentials/commands/Commandme.java | 7 +++++-- .../essentials/commands/Commandsuicide.java | 2 +- .../spawn/EssentialsSpawnPlayerListener.java | 2 +- .../essentials/xmpp/EssentialsXMPP.java | 10 ++++++---- .../essentials/xmpp/IEssentialsXMPP.java | 5 +++-- .../earth2me/essentials/xmpp/UserManager.java | 2 +- .../earth2me/essentials/xmpp/XMPPManager.java | 5 +++-- 15 files changed, 62 insertions(+), 28 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index a9f77f401..386e9cc5a 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -612,14 +612,20 @@ public class Essentials extends JavaPlugin implements IEssentials } @Override - public int broadcastMessage(final String name, final String message) + public int broadcastMessage(final IUser sender, final String message) { + if (sender == null) { + return getServer().broadcastMessage(message); + } + if (sender.isHidden()) { + return 0; + } final Player[] players = getServer().getOnlinePlayers(); for (Player player : players) { final User user = getUser(player); - if (!user.isIgnoredPlayer(name)) + if (!user.isIgnoredPlayer(sender.getName())) { player.sendMessage(message); } diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index ebf9a97dc..4828382d2 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -107,7 +107,9 @@ public class EssentialsPlayerListener extends PlayerListener return; } - user.updateActivity(true); + if (user.getAfkPosition().distanceSquared(user.getLocation()) > 9) { + user.updateActivity(true); + } if (!ess.getSettings().getNetherPortalsEnabled()) { diff --git a/Essentials/src/com/earth2me/essentials/IEssentials.java b/Essentials/src/com/earth2me/essentials/IEssentials.java index b47ebd5ab..0ac8c54d3 100644 --- a/Essentials/src/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/com/earth2me/essentials/IEssentials.java @@ -23,7 +23,7 @@ public interface IEssentials extends Plugin World getWorld(String name); - int broadcastMessage(String name, String message); + int broadcastMessage(IUser sender, String message); ISettings getSettings(); diff --git a/Essentials/src/com/earth2me/essentials/IUser.java b/Essentials/src/com/earth2me/essentials/IUser.java index 91a121e0a..27f95430c 100644 --- a/Essentials/src/com/earth2me/essentials/IUser.java +++ b/Essentials/src/com/earth2me/essentials/IUser.java @@ -54,4 +54,6 @@ public interface IUser InetSocketAddress getAddress(); String getDisplayName(); + + boolean isHidden(); } diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 9ba353cf9..ebc89570d 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -21,12 +21,14 @@ public class User extends UserData implements Comparable, IReplyTo, IUser private transient long lastActivity = System.currentTimeMillis(); private boolean hidden = false; private transient boolean godStateBeforeAfk; + private transient Location afkPosition; User(final Player base, final IEssentials ess) { super(base, ess); teleport = new Teleport(this, ess); godStateBeforeAfk = isGodModeEnabled(); + afkPosition = getLocation(); } User update(final Player base) @@ -355,6 +357,9 @@ public class User extends UserData implements Comparable, IReplyTo, IUser { setGodModeEnabled(godStateBeforeAfk); } + if (set && !isAfk()) { + afkPosition = getLocation(); + } super.setAfk(set); } @@ -418,9 +423,9 @@ public class User extends UserData implements Comparable, IReplyTo, IUser if (isAfk()) { setAfk(false); - if (broadcast) + if (broadcast && !isHidden()) { - ess.broadcastMessage(getName(), Util.format("userIsNotAway", getDisplayName())); + ess.broadcastMessage(this, Util.format("userIsNotAway", getDisplayName())); } return; } @@ -431,7 +436,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser { final long autoafkkick = ess.getSettings().getAutoAfkKick(); if (autoafkkick > 0 && lastActivity + autoafkkick * 1000 < System.currentTimeMillis() - && !isAuthorized("essentials.kick.exempt") && !isAuthorized("essentials.afk.kickexempt")) + && !isHidden() && !isAuthorized("essentials.kick.exempt") && !isAuthorized("essentials.afk.kickexempt")) { final String kickReason = Util.format("autoAfkKickReason", autoafkkick / 60.0); kickPlayer(kickReason); @@ -450,7 +455,14 @@ public class User extends UserData implements Comparable, IReplyTo, IUser if (!isAfk() && autoafk > 0 && lastActivity + autoafk * 1000 < System.currentTimeMillis()) { setAfk(true); - ess.broadcastMessage(getName(), Util.format("userIsAway", getDisplayName())); + if (!isHidden()) { + ess.broadcastMessage(this, Util.format("userIsAway", getDisplayName())); + } } } + + public Location getAfkPosition() + { + return afkPosition; + } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java index bb749f66f..8bf70873d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java @@ -34,13 +34,19 @@ public class Commandafk extends EssentialsCommand if (!user.toggleAfk()) { //user.sendMessage(Util.i18n("markedAsNotAway")); - ess.broadcastMessage(user.getName(), Util.format("userIsNotAway", user.getDisplayName())); + if (!user.isHidden()) + { + ess.broadcastMessage(user, Util.format("userIsNotAway", user.getDisplayName())); + } user.updateActivity(false); } else { //user.sendMessage(Util.i18n("markedAsAway")); - ess.broadcastMessage(user.getName(), Util.format("userIsAway", user.getDisplayName())); + if (!user.isHidden()) + { + ess.broadcastMessage(user, Util.format("userIsAway", user.getDisplayName())); + } } } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java b/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java index c30975b03..5bfdd3835 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java @@ -17,8 +17,8 @@ public class Commandantioch extends EssentialsCommand @Override public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - ess.broadcastMessage(user.getName(), "...lobbest thou thy Holy Hand Grenade of Antioch towards thy foe,"); - ess.broadcastMessage(user.getName(), "who being naughty in My sight, shall snuff it."); + ess.broadcastMessage(user, "...lobbest thou thy Holy Hand Grenade of Antioch towards thy foe,"); + ess.broadcastMessage(user, "who being naughty in My sight, shall snuff it."); final Location loc = new TargetBlock(user).getTargetBlock().getLocation(); loc.getWorld().spawn(loc, TNTPrimed.class); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbroadcast.java b/Essentials/src/com/earth2me/essentials/commands/Commandbroadcast.java index 684920114..9b92434a4 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandbroadcast.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandbroadcast.java @@ -1,6 +1,5 @@ package com.earth2me.essentials.commands; -import com.earth2me.essentials.Console; import com.earth2me.essentials.Util; import org.bukkit.Server; import org.bukkit.command.CommandSender; @@ -15,14 +14,14 @@ public class Commandbroadcast extends EssentialsCommand } @Override - public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception + public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception { if (args.length < 1) { throw new NotEnoughArgumentsException(); } - ess.broadcastMessage(sender instanceof Player ? ((Player)sender).getName() : Console.NAME, + ess.broadcastMessage(null, Util.format("broadcast", getFinalArg(args, 0))); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandme.java b/Essentials/src/com/earth2me/essentials/commands/Commandme.java index 7441b723b..02bcecdc2 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandme.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandme.java @@ -24,12 +24,15 @@ public class Commandme extends EssentialsCommand { throw new NotEnoughArgumentsException(); } - StringBuilder message = new StringBuilder(); + final StringBuilder message = new StringBuilder(); + message.append("* "); + message.append(user.getDisplayName()); + message.append(' '); for (int i = 0; i < args.length; i++) { message.append(args[i]); message.append(' '); } - ess.broadcastMessage(user.getName(), "* " + user.getDisplayName() + " " + message); + ess.broadcastMessage(user, message.toString()); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java b/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java index 90f40a4bf..ca9fee47b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java @@ -17,7 +17,7 @@ public class Commandsuicide extends EssentialsCommand { user.setHealth(0); user.sendMessage(Util.i18n("suicideMessage")); - ess.broadcastMessage(user.getName(), + ess.broadcastMessage(user, Util.format("suicideSuccess",user.getDisplayName())); } } diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java index 3c85c3661..459eee60a 100644 --- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java +++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java @@ -79,7 +79,7 @@ public class EssentialsSpawnPlayerListener extends PlayerListener if (ess.getSettings().getAnnounceNewPlayers()) { - ess.broadcastMessage(user.getName(), ess.getSettings().getAnnounceNewPlayerFormat(user)); + ess.broadcastMessage(user, ess.getSettings().getAnnounceNewPlayerFormat(user)); } } } diff --git a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java index 8ab62cd4d..34f862627 100644 --- a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java +++ b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java @@ -1,6 +1,7 @@ package com.earth2me.essentials.xmpp; import com.earth2me.essentials.IEssentials; +import com.earth2me.essentials.IUser; import com.earth2me.essentials.Util; import java.util.List; import java.util.logging.Level; @@ -83,9 +84,10 @@ public class EssentialsXMPP extends JavaPlugin implements IEssentialsXMPP } @Override - public String getUserByAddress(final String address) + public IUser getUserByAddress(final String address) { - return instance.users.getUserByAddress(address); + String username = instance.users.getUserByAddress(address); + return username == null ? null : ess.getUser(username); } @Override @@ -122,9 +124,9 @@ public class EssentialsXMPP extends JavaPlugin implements IEssentialsXMPP } @Override - public void broadcastMessage(final String name, final String message) + public void broadcastMessage(final IUser sender, final String message) { - ess.broadcastMessage(name, message); + ess.broadcastMessage(sender, message); try { for (String address : getSpyUsers()) diff --git a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/IEssentialsXMPP.java b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/IEssentialsXMPP.java index d90bff803..1ed9fa732 100644 --- a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/IEssentialsXMPP.java +++ b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/IEssentialsXMPP.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.xmpp; +import com.earth2me.essentials.IUser; import java.util.List; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -13,7 +14,7 @@ public interface IEssentialsXMPP extends Plugin List getSpyUsers(); - String getUserByAddress(final String address); + IUser getUserByAddress(final String address); boolean sendMessage(final Player user, final String message); @@ -23,5 +24,5 @@ public interface IEssentialsXMPP extends Plugin boolean toggleSpy(final Player user); - void broadcastMessage(final String name, final String message); + void broadcastMessage(final IUser sender, final String message); } diff --git a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/UserManager.java b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/UserManager.java index 6a2a6e80a..9734444ad 100644 --- a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/UserManager.java +++ b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/UserManager.java @@ -47,7 +47,7 @@ public class UserManager implements IConf return username; } } - return search; + return null; } public void setAddress(final String username, final String address) diff --git a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/XMPPManager.java b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/XMPPManager.java index e43844c5b..d7aedb9f4 100644 --- a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/XMPPManager.java +++ b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/XMPPManager.java @@ -3,6 +3,7 @@ package com.earth2me.essentials.xmpp; import com.earth2me.essentials.Console; import com.earth2me.essentials.EssentialsConf; import com.earth2me.essentials.IConf; +import com.earth2me.essentials.IUser; import java.io.File; import java.util.ArrayList; import java.util.Collections; @@ -101,8 +102,8 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager sendCommand(chat, message); break; default: - final String name = parent.getUserByAddress(StringUtils.parseBareAddress(chat.getParticipant())); - parent.broadcastMessage(name, "="+name+": "+ message); + final IUser sender = parent.getUserByAddress(StringUtils.parseBareAddress(chat.getParticipant())); + parent.broadcastMessage(sender, "="+sender.getDisplayName()+": "+ message); } } } From 248e4e2ae2cf9096749143a7ca9239a35fbe098f Mon Sep 17 00:00:00 2001 From: snowleo Date: Fri, 2 Sep 2011 16:28:34 +0200 Subject: [PATCH 37/43] Disabling update check for now, we have to find a better solution. --- Essentials/src/com/earth2me/essentials/Settings.java | 2 +- Essentials/src/config.yml | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 2b7eea8f6..665da17a6 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -483,7 +483,7 @@ public class Settings implements ISettings @Override public boolean isUpdateEnabled() { - return config.getBoolean("update-check", true); + return config.getBoolean("update-check", false); } @Override diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 6884960c1..d2c12be0e 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -230,12 +230,6 @@ remove-god-on-disconnect: false # This only works if no other permission plugins are installed use-bukkit-permissions: false -# Check for updates -# We do not recommend to disable this unless you are using CraftbukkitUpToDate or Bukget. -# If you don't like the notices in game, remove the permission -# essentials.admin.notices.update from your user. -update-check: true - # Auto-AFK # After this timeout in seconds, the user will be set as afk. # Set to -1 for no timeout. From 4abbbcb82bc7fd90c48f48a16d384c926db5b525 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Fri, 2 Sep 2011 15:58:25 +0100 Subject: [PATCH 38/43] Throwing an error on /sethome if you cant set multiple homes. --- .../src/com/earth2me/essentials/commands/Commandsethome.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java index d9bd32c30..82d66a71c 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java @@ -39,6 +39,9 @@ public class Commandsethome extends EssentialsCommand } } + else { + throw new Exception(Util.format("maxHomes", 1)); + } } else { From 7d8b0c102cfa10c5a58bbcaab35d88dd234ad612 Mon Sep 17 00:00:00 2001 From: snowleo Date: Fri, 2 Sep 2011 17:16:32 +0200 Subject: [PATCH 39/43] Cross world move check --- .../src/com/earth2me/essentials/EssentialsPlayerListener.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 4828382d2..881d5a636 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -107,7 +107,8 @@ public class EssentialsPlayerListener extends PlayerListener return; } - if (user.getAfkPosition().distanceSquared(user.getLocation()) > 9) { + Location afk = user.getAfkPosition(); + if (afk == null || !event.getTo().getWorld().equals(afk.getWorld()) || afk.distanceSquared(event.getTo()) > 9) { user.updateActivity(true); } From fd6f768cca72850a8307e5472c2c7b61eca088bd Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 4 Sep 2011 20:45:59 +0200 Subject: [PATCH 40/43] Ignore more local branches --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index dd7da3087..4d5963e6b 100644 --- a/.gitignore +++ b/.gitignore @@ -29,4 +29,7 @@ /Essentials/nbproject/private/ /Essentials/dist/ /Essentials/build/ -/YamlAnnotations/ \ No newline at end of file +/YamlAnnotations/ +/EssentialsUpdate/nbproject/private/ +/EssentialsRelease/ +/EssentialsUpdate/ \ No newline at end of file From 998d097d7d3ee1cd03d4a3c040d4cf1384e115d9 Mon Sep 17 00:00:00 2001 From: snowleo Date: Mon, 5 Sep 2011 04:14:02 +0200 Subject: [PATCH 41/43] Fix afk not disabled after command use --- Essentials/src/com/earth2me/essentials/User.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index ebc89570d..4a93fa264 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -427,7 +427,6 @@ public class User extends UserData implements Comparable, IReplyTo, IUser { ess.broadcastMessage(this, Util.format("userIsNotAway", getDisplayName())); } - return; } lastActivity = System.currentTimeMillis(); } From e8fbdef38b7ed8819146f7db33bafd1e4af34960 Mon Sep 17 00:00:00 2001 From: snowleo Date: Mon, 5 Sep 2011 22:59:37 +0200 Subject: [PATCH 42/43] Using the correct player object for dispatching the command on powertool use. --- .../src/com/earth2me/essentials/EssentialsPlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 881d5a636..c70afa20d 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -465,7 +465,7 @@ public class EssentialsPlayerListener extends PlayerListener } else { - user.getServer().dispatchCommand(user, command); + user.getServer().dispatchCommand(event.getPlayer(), command); } } } From 0b057d8e29a7f91e1ab27d99d9c9d4aaa53bdebf Mon Sep 17 00:00:00 2001 From: KHobbits Date: Fri, 9 Sep 2011 14:23:42 +0100 Subject: [PATCH 43/43] Move 'spawnifnospawn' check to home decision tree. --- Essentials/src/com/earth2me/essentials/Teleport.java | 9 +-------- .../com/earth2me/essentials/commands/Commandhome.java | 4 ++++ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Teleport.java b/Essentials/src/com/earth2me/essentials/Teleport.java index 14574b83c..608663561 100644 --- a/Essentials/src/com/earth2me/essentials/Teleport.java +++ b/Essentials/src/com/earth2me/essentials/Teleport.java @@ -264,14 +264,7 @@ public class Teleport implements Runnable final Location loc = user.getHome(home); if (loc == null) { - if (ess.getSettings().spawnIfNoHome()) - { - respawn(ess.getSpawn(), chargeFor); - } - else - { - throw new NotEnoughArgumentsException(); - } + throw new NotEnoughArgumentsException(); } teleport(new Target(loc), chargeFor); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java index fbcaa555d..2ee2661e6 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java @@ -53,6 +53,10 @@ public class Commandhome extends EssentialsCommand { user.getTeleport().home(u, homes.get(0), charge); } + else if (ess.getSettings().spawnIfNoHome()) + { + user.getTeleport().respawn(ess.getSpawn(), charge); + } else { user.sendMessage(Util.format("homes", Util.joinList(homes)));