From a73d79893d45dfb61406c3e7da04300356aaca67 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 9 Oct 2011 20:10:21 +0200 Subject: [PATCH 01/11] Prevent players with essentials.sleepingignored permission from going to bed. Prevents a bug in bukkit. --- .../src/com/earth2me/essentials/Essentials.java | 1 + .../essentials/EssentialsPlayerListener.java | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index fe0c3560c..0da255685 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -164,6 +164,7 @@ public class Essentials extends JavaPlugin implements IEssentials pm.registerEvent(Type.PLAYER_EGG_THROW, playerListener, Priority.High, this); pm.registerEvent(Type.PLAYER_BUCKET_EMPTY, playerListener, Priority.High, this); pm.registerEvent(Type.PLAYER_ANIMATION, playerListener, Priority.High, this); + pm.registerEvent(Type.PLAYER_BED_ENTER, playerListener, Priority.High, this); final EssentialsBlockListener blockListener = new EssentialsBlockListener(this); pm.registerEvent(Type.BLOCK_PLACE, blockListener, Priority.Lowest, this); diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 026e4632b..5d121b82e 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -14,6 +14,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerAnimationEvent; import org.bukkit.event.player.PlayerAnimationType; +import org.bukkit.event.player.PlayerBedEnterEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerChatEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; @@ -380,4 +381,16 @@ public class EssentialsPlayerListener extends PlayerListener user.updateActivity(true); } } + + @Override + public void onPlayerBedEnter(PlayerBedEnterEvent event) + { + if (event.isCancelled()) { + return; + } + if (event.getPlayer().isSleepingIgnored()) { + event.setCancelled(true); + event.getPlayer().sendMessage("You can't go to bed, your sleep is ignored."); + } + } } From f4802894d3626c95a449c29d4cbadcb7c44a690f Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 9 Oct 2011 20:14:41 +0200 Subject: [PATCH 02/11] Cancel early, not late --- 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 0da255685..6f9b9a944 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -164,7 +164,7 @@ public class Essentials extends JavaPlugin implements IEssentials pm.registerEvent(Type.PLAYER_EGG_THROW, playerListener, Priority.High, this); pm.registerEvent(Type.PLAYER_BUCKET_EMPTY, playerListener, Priority.High, this); pm.registerEvent(Type.PLAYER_ANIMATION, playerListener, Priority.High, this); - pm.registerEvent(Type.PLAYER_BED_ENTER, playerListener, Priority.High, this); + pm.registerEvent(Type.PLAYER_BED_ENTER, playerListener, Priority.Lowest, this); final EssentialsBlockListener blockListener = new EssentialsBlockListener(this); pm.registerEvent(Type.BLOCK_PLACE, blockListener, Priority.Lowest, this); From fb52bf99825fb001b9903889c0bbdf8780930e98 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 9 Oct 2011 20:57:34 +0200 Subject: [PATCH 03/11] Corrected datavalues for pistons --- Essentials/src/items.csv | 58 ++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/Essentials/src/items.csv b/Essentials/src/items.csv index 53fe31d6c..985333a80 100644 --- a/Essentials/src/items.csv +++ b/Essentials/src/items.csv @@ -501,20 +501,20 @@ detecttrack,28,0 detectrail,28,0 dtrack,28,0 drail,28,0 -stickypistonbase,29,0 -stickypiston,29,0 -stickpistonbase,29,0 -stickpiston,29,0 -stickyp,29,0 -spistonbase,29,0 -spiston,29,0 -pistonstickybase,29,0 -pistonsticky,29,0 -pistonstickbase,29,0 -pistonstick,29,0 -pistonsbase,29,0 -pistons,29,0 -psticky,29,0 +stickypistonbase,29,7 +stickypiston,29,7 +stickpistonbase,29,7 +stickpiston,29,7 +stickyp,29,7 +spistonbase,29,7 +spiston,29,7 +pistonstickybase,29,7 +pistonsticky,29,7 +pistonstickbase,29,7 +pistonstick,29,7 +pistonsbase,29,7 +pistons,29,7 +psticky,29,7 spiderweb,30,0 sweb,30,0 web,30,0 @@ -534,21 +534,21 @@ deadshrub,32,0 shrubdead,32,0 dshrub,32,0 shrubd,32,0 -normalpistonbase,33,0 -normalpiston,33,0 -normpistonbase,33,0 -normpiston,33,0 -npistonbase,33,0 -npiston,33,0 -pistonnormalbase,33,0 -pistonnormal,33,0 -pistonnormbase,33,0 -pistonnorm,33,0 -pistonnbase,33,0 -pistonn,33,0 -pistonbase,33,0 -piston,33,0 -pistonblock,33,0 +normalpistonbase,33,7 +normalpiston,33,7 +normpistonbase,33,7 +normpiston,33,7 +npistonbase,33,7 +npiston,33,7 +pistonnormalbase,33,7 +pistonnormal,33,7 +pistonnormbase,33,7 +pistonnorm,33,7 +pistonnbase,33,7 +pistonn,33,7 +pistonbase,33,7 +piston,33,7 +pistonblock,33,7 pistonextensionnormal,34,0 pistonextensionnorm,34,0 pistonextensionn,34,0 From d4171f7de1c79d2d5385073dcf665de39100cc88 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 9 Oct 2011 20:59:06 +0200 Subject: [PATCH 04/11] Allow to disable the death messages of minecraft --- .../essentials/EssentialsEntityListener.java | 16 +++++++++++----- .../src/com/earth2me/essentials/ISettings.java | 2 ++ .../src/com/earth2me/essentials/Settings.java | 6 ++++++ Essentials/src/config.yml | 3 +++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java index f5d6cec48..083fa1687 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java @@ -9,6 +9,7 @@ import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityListener; import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.inventory.ItemStack; @@ -69,24 +70,29 @@ public class EssentialsEntityListener extends EntityListener } @Override - public void onEntityDeath(EntityDeathEvent event) + public void onEntityDeath(final EntityDeathEvent event) { - if (event.getEntity() instanceof Player) + if (event instanceof PlayerDeathEvent) { - User user = ess.getUser(event.getEntity()); + final PlayerDeathEvent pdevent = (PlayerDeathEvent)event; + final User user = ess.getUser(pdevent.getEntity()); if (user.isAuthorized("essentials.back.ondeath") && !ess.getSettings().isCommandDisabled("back")) { user.setLastLocation(); user.sendMessage(Util.i18n("backAfterDeath")); } + if (!ess.getSettings().areDeathMessagesEnabled()) + { + pdevent.setDeathMessage(""); + } } } @Override public void onFoodLevelChange(FoodLevelChangeEvent event) - { + { if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled()) - { + { //TODO: Remove the following line, when we're happy to remove backwards compatability with 1185. event.setFoodLevel(20); event.setCancelled(true); diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 54d1b1495..d058d892a 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -132,4 +132,6 @@ public interface ISettings extends IConf long getAutoAfkKick(); boolean getFreezeAfkPlayers(); + + boolean areDeathMessagesEnabled(); } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index d6a649786..9d11d675b 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -523,4 +523,10 @@ public class Settings implements ISettings { return config.getBoolean("freeze-afk-players", false); } + + @Override + public boolean areDeathMessagesEnabled() + { + return config.getBoolean("death-messages", true); + } } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 61cb7aefa..b5ad0d95a 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -238,6 +238,9 @@ auto-afk-kick: -1 # The player has to use the command /afk to leave the afk mode. freeze-afk-players: false +# You can disable the death messages of minecraft here +death-messages: true + ############################################################ # +------------------------------------------------------+ # # | EssentialsHome | # From f233e8410d36019945a15ed58b6572788b5b45d4 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Sun, 9 Oct 2011 22:10:40 +0200 Subject: [PATCH 05/11] Edited Essentials/src/items.csv via GitHub --- Essentials/src/items.csv | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Essentials/src/items.csv b/Essentials/src/items.csv index 985333a80..9dfe37218 100644 --- a/Essentials/src/items.csv +++ b/Essentials/src/items.csv @@ -1259,10 +1259,12 @@ sfstone,97,0 stonesilverfish,97,0 fishstone,97,0 trapstone,97,0 +silverfish,97,0 stonebrick,98,0 stonebricks,98,0 stonebrickblock,98,0 stonebb,98,0 +sbrick,98,0 mossystonebrick,98,1 mossystonebricks,98,1 mossystonebrickblock,98,1 From 593d5def7886818a74451322e0cfbb51c17996f3 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 9 Oct 2011 22:25:15 +0200 Subject: [PATCH 06/11] Don't spill out items, if inventory is full on buy signs. --- .../earth2me/essentials/FakeInventory.java | 186 ++++++++++++++++++ .../essentials/InventoryWorkaround.java | 16 +- .../src/com/earth2me/essentials/Trade.java | 49 +++-- .../earth2me/essentials/signs/SignBuy.java | 4 +- 4 files changed, 236 insertions(+), 19 deletions(-) create mode 100644 Essentials/src/com/earth2me/essentials/FakeInventory.java diff --git a/Essentials/src/com/earth2me/essentials/FakeInventory.java b/Essentials/src/com/earth2me/essentials/FakeInventory.java new file mode 100644 index 000000000..e1c3321d2 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/FakeInventory.java @@ -0,0 +1,186 @@ +package com.earth2me.essentials; + +import java.util.HashMap; +import org.bukkit.Material; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + + +public class FakeInventory implements Inventory +{ + ItemStack[] items; + + public FakeInventory(ItemStack[] items) + { + this.items = new ItemStack[items.length]; + for (int i = 0; i < items.length; i++) + { + this.items[i] = new ItemStack(items[i].getTypeId(), items[i].getAmount(), items[i].getDurability()); + } + } + + @Override + public int getSize() + { + return items.length; + } + + @Override + public String getName() + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ItemStack getItem(int i) + { + return items[i]; + } + + @Override + public void setItem(int i, ItemStack is) + { + items[i] = is; + } + + @Override + public HashMap addItem(ItemStack... iss) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public HashMap removeItem(ItemStack... iss) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ItemStack[] getContents() + { + return items; + } + + @Override + public void setContents(ItemStack[] iss) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public boolean contains(int i) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public boolean contains(Material mtrl) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public boolean contains(ItemStack is) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public boolean contains(int i, int i1) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public boolean contains(Material mtrl, int i) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public boolean contains(ItemStack is, int i) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public HashMap all(int i) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public HashMap all(Material mtrl) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public HashMap all(ItemStack is) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public int first(int i) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public int first(Material mtrl) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public int first(ItemStack is) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public int firstEmpty() + { + for (int i = 0; i < items.length; i++) + { + if (items[i] == null || items[i].getTypeId() == 0) { + return i; + } + } + return -1; + } + + @Override + public void remove(int i) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public void remove(Material mtrl) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public void remove(ItemStack is) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public void clear(int i) + { + items[i] = null; + } + + @Override + public void clear() + { + for (int i = 0; i < items.length; i++) + { + items[i] = null; + } + } +} diff --git a/Essentials/src/com/earth2me/essentials/InventoryWorkaround.java b/Essentials/src/com/earth2me/essentials/InventoryWorkaround.java index 3f0f89af2..0470488b8 100644 --- a/Essentials/src/com/earth2me/essentials/InventoryWorkaround.java +++ b/Essentials/src/com/earth2me/essentials/InventoryWorkaround.java @@ -64,6 +64,20 @@ public final class InventoryWorkaround return -1; } + public static boolean addAllItems(final Inventory cinventory, final boolean forceDurability, final ItemStack... items) + { + final Inventory fake = new FakeInventory(cinventory.getContents()); + if (addItem(fake, forceDurability, items).isEmpty()) + { + addItem(cinventory, forceDurability, items); + return true; + } + else + { + return false; + } + } + public static Map addItem(final Inventory cinventory, final boolean forceDurability, final ItemStack... items) { final Map leftover = new HashMap(); @@ -106,7 +120,7 @@ public final class InventoryWorkaround { continue; } - + while (true) { // Do we already have a stack of it? diff --git a/Essentials/src/com/earth2me/essentials/Trade.java b/Essentials/src/com/earth2me/essentials/Trade.java index 45c3d49a3..8c082be3e 100644 --- a/Essentials/src/com/earth2me/essentials/Trade.java +++ b/Essentials/src/com/earth2me/essentials/Trade.java @@ -18,22 +18,22 @@ public class Trade private final transient Double money; private final transient ItemStack itemStack; private final transient IEssentials ess; - + public Trade(final String command, final IEssentials ess) { this(command, null, null, ess); } - + public Trade(final double money, final IEssentials ess) { this(null, money, null, ess); } - + public Trade(final ItemStack items, final IEssentials ess) { this(null, null, items, ess); } - + private Trade(final String command, final Double money, final ItemStack item, final IEssentials ess) { this.command = command; @@ -41,7 +41,7 @@ public class Trade this.itemStack = item; this.ess = ess; } - + public void isAffordableFor(final IUser user) throws ChargeException { final double mon = user.getMoney(); @@ -52,13 +52,13 @@ public class Trade { throw new ChargeException(Util.i18n("notEnoughMoney")); } - + if (getItemStack() != null && !InventoryWorkaround.containsItem(user.getInventory(), true, itemStack)) { throw new ChargeException(Util.format("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase().replace("_", " "))); } - + if (command != null && !command.isEmpty() && !user.isAuthorized("essentials.nocommandcost.all") && !user.isAuthorized("essentials.nocommandcost." + command) @@ -69,24 +69,38 @@ public class Trade throw new ChargeException(Util.i18n("notEnoughMoney")); } } - + public void pay(final IUser user) { + pay(user, true); + } + + public boolean pay(final IUser user, final boolean dropItems) + { + boolean success = true; if (getMoney() != null && getMoney() > 0) { user.giveMoney(getMoney()); } if (getItemStack() != null) { - final Map leftOver = InventoryWorkaround.addItem(user.getInventory(), true, getItemStack()); - for (ItemStack itemStack : leftOver.values()) + if (dropItems) { - InventoryWorkaround.dropItem(user.getLocation(), itemStack); + final Map leftOver = InventoryWorkaround.addItem(user.getInventory(), true, getItemStack()); + for (ItemStack itemStack : leftOver.values()) + { + InventoryWorkaround.dropItem(user.getLocation(), itemStack); + } + } + else + { + success = InventoryWorkaround.addAllItems(user.getInventory(), true, getItemStack()); } user.updateInventory(); } + return success; } - + public void charge(final IUser user) throws ChargeException { if (getMoney() != null) @@ -120,18 +134,18 @@ public class Trade user.takeMoney(cost); } } - + public Double getMoney() { return money; } - + public ItemStack getItemStack() { return itemStack; } private static FileWriter fw = null; - + public static void log(String type, String subtype, String event, String sender, Trade charge, String receiver, Trade pay, Location loc, IEssentials ess) { if (!ess.getSettings().isEcoLogEnabled()) @@ -225,10 +239,11 @@ public class Trade Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex); } } - + public static void closeLog() { - if (fw != null) { + if (fw != null) + { try { fw.close(); diff --git a/Essentials/src/com/earth2me/essentials/signs/SignBuy.java b/Essentials/src/com/earth2me/essentials/signs/SignBuy.java index 6ee602ff5..39704ff0d 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignBuy.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignBuy.java @@ -27,7 +27,9 @@ public class SignBuy extends EssentialsSign final Trade items = getTrade(sign, 1, 2, player, ess); final Trade charge = getTrade(sign, 3, ess); charge.isAffordableFor(player); - items.pay(player); + if (!items.pay(player, false)) { + throw new ChargeException("Inventory full"); + } charge.charge(player); Trade.log("Sign", "Buy", "Interact", username, charge, username, items, sign.getBlock().getLocation(), ess); return true; From 2859e367d49d8ff2be7e731803f72b42ca187c45 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 9 Oct 2011 22:52:11 +0200 Subject: [PATCH 07/11] Allow players to recharge trade signs without breaking them. Also don't give out items, if their inventory is full. --- .../earth2me/essentials/signs/SignTrade.java | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java index c19d19178..6e5c7b4b1 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java @@ -38,7 +38,8 @@ public class SignTrade extends EssentialsSign final Trade stored = getTrade(sign, 1, true, true, ess); substractAmount(sign, 1, stored, ess); stored.pay(player); - Trade.log("Sign", "Trade", "OwnerInteract", username, null, username, stored, sign.getBlock().getLocation(), ess); + final Trade store = rechargeSign(sign, ess, player); + Trade.log("Sign", "Trade", "OwnerInteract", username, store, username, stored, sign.getBlock().getLocation(), ess); } catch (SignException e) { @@ -50,8 +51,11 @@ public class SignTrade extends EssentialsSign final Trade charge = getTrade(sign, 1, false, false, ess); final Trade trade = getTrade(sign, 2, false, true, ess); charge.isAffordableFor(player); + if (!trade.pay(player, false)) + { + throw new ChargeException("Full inventory"); + } substractAmount(sign, 2, trade, ess); - trade.pay(player); addAmount(sign, 1, charge, ess); charge.charge(player); Trade.log("Sign", "Trade", "Interact", sign.getLine(3), charge, username, trade, sign.getBlock().getLocation(), ess); @@ -60,6 +64,25 @@ public class SignTrade extends EssentialsSign return true; } + private Trade rechargeSign(final ISign sign, final IEssentials ess, final User player) throws SignException, ChargeException + { + final Trade trade = getTrade(sign, 2, false, false, ess); + if (trade.getItemStack() != null && player.getItemInHand() != null && + trade.getItemStack().getTypeId() == player.getItemInHand().getTypeId() && + trade.getItemStack().getDurability() == player.getItemInHand().getDurability()) + { + int amount = player.getItemInHand().getAmount(); + amount -= amount % trade.getItemStack().getAmount(); + if (amount > 0) { + final Trade store = new Trade(new ItemStack(player.getItemInHand().getTypeId(), amount, player.getItemInHand().getDurability()), ess); + addAmount(sign, 2, store, ess); + store.charge(player); + return store; + } + } + return null; + } + @Override protected boolean onSignBreak(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException { From 56adecb506d22195026f27829473bf3968cd8b50 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 9 Oct 2011 23:00:58 +0200 Subject: [PATCH 08/11] Prevent that long lines are stored on the sign --- .../earth2me/essentials/signs/SignTrade.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java index 6e5c7b4b1..9ed5bb058 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java @@ -35,15 +35,15 @@ public class SignTrade extends EssentialsSign { try { + final Trade store = rechargeSign(sign, ess, player); final Trade stored = getTrade(sign, 1, true, true, ess); substractAmount(sign, 1, stored, ess); stored.pay(player); - final Trade store = rechargeSign(sign, ess, player); Trade.log("Sign", "Trade", "OwnerInteract", username, store, username, stored, sign.getBlock().getLocation(), ess); } catch (SignException e) { - throw new SignException(Util.i18n("tradeSignEmptyOwner")); + throw new SignException(Util.i18n("tradeSignEmptyOwner"), e); } } else @@ -67,13 +67,14 @@ public class SignTrade extends EssentialsSign private Trade rechargeSign(final ISign sign, final IEssentials ess, final User player) throws SignException, ChargeException { final Trade trade = getTrade(sign, 2, false, false, ess); - if (trade.getItemStack() != null && player.getItemInHand() != null && - trade.getItemStack().getTypeId() == player.getItemInHand().getTypeId() && - trade.getItemStack().getDurability() == player.getItemInHand().getDurability()) + if (trade.getItemStack() != null && player.getItemInHand() != null + && trade.getItemStack().getTypeId() == player.getItemInHand().getTypeId() + && trade.getItemStack().getDurability() == player.getItemInHand().getDurability()) { int amount = player.getItemInHand().getAmount(); amount -= amount % trade.getItemStack().getAmount(); - if (amount > 0) { + if (amount > 0) + { final Trade store = new Trade(new ItemStack(player.getItemInHand().getTypeId(), amount, player.getItemInHand().getDurability()), ess); addAmount(sign, 2, store, ess); store.charge(player); @@ -270,7 +271,12 @@ public class SignTrade extends EssentialsSign final Double amount = getDouble(split[1]); if (money != null && amount != null) { - sign.setLine(index, Util.formatCurrency(money, ess) + ":" + Util.formatCurrency(amount + value, ess).substring(1)); + final String newline = Util.formatCurrency(money, ess) + ":" + Util.formatCurrency(amount + value, ess).substring(1); + if (newline.length() > 16) + { + throw new SignException("Line too long!"); + } + sign.setLine(index, newline); return; } } @@ -280,7 +286,12 @@ public class SignTrade extends EssentialsSign final int stackamount = getIntegerPositive(split[0]); final ItemStack item = getItemStack(split[1], stackamount, ess); final int amount = getInteger(split[2]); - sign.setLine(index, stackamount + " " + split[1] + ":" + (amount + Math.round(value))); + final String newline = stackamount + " " + split[1] + ":" + (amount + Math.round(value)); + if (newline.length() > 16) + { + throw new SignException("Line too long!"); + } + sign.setLine(index, newline); return; } throw new SignException(Util.format("invalidSignLine", index + 1)); From 6b63b52f7a2d906a92e66a0d9bba6e17a0784976 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 9 Oct 2011 23:23:00 +0200 Subject: [PATCH 09/11] Notch decided that the sun rises north and sets south. "Corrected" values for /getpos and /compass --- .../src/com/earth2me/essentials/PlayerExtension.java | 9 --------- .../com/earth2me/essentials/commands/Commandcompass.java | 2 +- .../com/earth2me/essentials/commands/Commandgetpos.java | 2 +- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/PlayerExtension.java b/Essentials/src/com/earth2me/essentials/PlayerExtension.java index ef63dacc3..9555bb1a7 100644 --- a/Essentials/src/com/earth2me/essentials/PlayerExtension.java +++ b/Essentials/src/com/earth2me/essentials/PlayerExtension.java @@ -16,15 +16,6 @@ public class PlayerExtension extends PlayerWrapper super(base); this.ess = ess; } - - public float getCorrectedYaw() - { - float angle = (getLocation().getYaw() - 90.0f) % 360.0f; - if (angle < 0) { - angle += 360.0f; - } - return angle; - } public void showInventory(IInventory inventory) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandcompass.java b/Essentials/src/com/earth2me/essentials/commands/Commandcompass.java index bd07c2b9b..8d582a296 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandcompass.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandcompass.java @@ -15,7 +15,7 @@ public class Commandcompass extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - int r = (int)user.getCorrectedYaw(); + int r = (int)user.getLocation().getYaw(); String dir; if (r < 23) dir = "N"; else if (r < 68) dir = "NE"; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java b/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java index bf5cff75d..12eeb5182 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java @@ -19,7 +19,7 @@ public class Commandgetpos extends EssentialsCommand user.sendMessage("§7X: " + coords.getBlockX() + " (-North <-> +South)"); user.sendMessage("§7Y: " + coords.getBlockY() + " (+Up <-> -Down)"); user.sendMessage("§7Z: " + coords.getBlockZ() + " (+East <-> -West)"); - user.sendMessage("§7Yaw: " + user.getCorrectedYaw() + " (Rotation)"); + user.sendMessage("§7Yaw: " + coords.getYaw() + " (Rotation)"); user.sendMessage("§7Pitch: " + coords.getPitch() + " (Head angle)"); } } From 31da2dfc933ed10ab486db2c075046fcadabb8e7 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 9 Oct 2011 23:31:13 +0200 Subject: [PATCH 10/11] Cleanup --- .../earth2me/essentials/commands/Commandessentials.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java index fda7061d5..328a4a8b5 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java @@ -56,7 +56,6 @@ public class Commandessentials extends EssentialsCommand } final String tuneStr = "1D#,1E,2F#,,2A#,1E,1D#,1E,2F#,2B,2D#,2E,2D#,2A#,2B,,2F#,,1D#,1E,2F#,2B,2C#,2A#,2B,2C#,2E,2D#,2E,2C#,,2F#,,2G#,,1D,1D#,,1C#,1D,1C#,1B,,1B,,1C#,,1D,,1D,1C#,1B,1C#,1D#,2F#,2G#,1D#,2F#,1C#,1D#,1B,1C#,1B,1D#,,2F#,,2G#,1D#,2F#,1C#,1D#,1B,1D,1D#,1D,1C#,1B,1C#,1D,,1B,1C#,1D#,2F#,1C#,1D,1C#,1B,1C#,,1B,,1C#,,2F#,,2G#,,1D,1D#,,1C#,1D,1C#,1B,,1B,,1C#,,1D,,1D,1C#,1B,1C#,1D#,2F#,2G#,1D#,2F#,1C#,1D#,1B,1C#,1B,1D#,,2F#,,2G#,1D#,2F#,1C#,1D#,1B,1D,1D#,1D,1C#,1B,1C#,1D,,1B,1C#,1D#,2F#,1C#,1D,1C#,1B,1C#,,1B,,1B,,1B,,1F#,1G#,1B,,1F#,1G#,1B,1C#,1D#,1B,1E,1D#,1E,2F#,1B,,1B,,1F#,1G#,1B,1E,1D#,1C#,1B,,,,1F#,1B,,1F#,1G#,1B,,1F#,1G#,1B,1B,1C#,1D#,1B,1F#,1G#,1F#,1B,,1B,1A#,1B,1F#,1G#,1B,1E,1D#,1E,2F#,1B,,1A#,,1B,,1F#,1G#,1B,,1F#,1G#,1B,1C#,1D#,1B,1E,1D#,1E,2F#,1B,,1B,,1F#,1G#,1B,1F#,1E,1D#,1C#,1B,,,,1F#,1B,,1F#,1G#,1B,,1F#,1G#,1B,1B,1C#,1D#,1B,1F#,1G#,1F#,1B,,1B,1A#,1B,1F#,1G#,1B,1E,1D#,1E,2F#,1B,,1A#,,1B,,1F#,1G#,1B,,1F#,1G#,1B,1C#,1D#,1B,1E,1D#,1E,2F#,1B,,1B,,1F#,1G#,1B,1F#,1E,1D#,1C#,1B,,,,1F#,1B,,1F#,1G#,1B,,1F#,1G#,1B,1B,1C#,1D#,1B,1F#,1G#,1F#,1B,,1B,1A#,1B,1F#,1G#,1B,1E,1D#,1E,2F#,1B,,1A#,,1B,,1F#,1G#,1B,,1F#,1G#,1B,1C#,1D#,1B,1E,1D#,1E,2F#,1B,,1B,,1F#,1G#,1B,1F#,1E,1D#,1C#,1B,,,,1F#,1B,,1F#,1G#,1B,,1F#,1G#,1B,1B,1C#,1D#,1B,1F#,1G#,1F#,1B,,1B,1A#,1B,1F#,1G#,1B,1E,1D#,1E,2F#,1B,,1A#,,1B,,1F#,1G#,1B,,1F#,1G#,1B,1C#,1D#,1B,1E,1D#,1E,2F#,1B,,1B,,1F#,1G#,1B,1F#,1E,1D#,1C#,1B,,,,1F#,1B,,1F#,1G#,1B,,1F#,1G#,1B,1B,1C#,1D#,1B,1F#,1G#,1F#,1B,,1B,1A#,1B,1F#,1G#,1B,1E,1D#,1E,2F#,1B,,1B,,"; final String[] tune = tuneStr.split(","); - for (Player player : server.getOnlinePlayers()) { final Location loc = player.getLocation(); @@ -91,7 +90,7 @@ public class Commandessentials extends EssentialsCommand for (Player player : server.getOnlinePlayers()) { Block block = noteBlocks.get(player); - if (block == null) + if (block == null || block.getType() != Material.NOTE_BLOCK) { continue; } @@ -110,7 +109,10 @@ public class Commandessentials extends EssentialsCommand ess.getScheduler().cancelTask(taskid); for (Block block : noteBlocks.values()) { - block.setType(Material.AIR); + if (block.getType() == Material.NOTE_BLOCK) + { + block.setType(Material.AIR); + } } noteBlocks.clear(); } From f1d505cdeb7c21e5c4477cc58dca55e232c02379 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 9 Oct 2011 23:45:46 +0200 Subject: [PATCH 11/11] Reverting ementalos change on freeze-afk, hopefully fixing the flickering. --- .../earth2me/essentials/EssentialsPlayerListener.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 5d121b82e..3d5851d93 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -95,9 +95,16 @@ public class EssentialsPlayerListener extends PlayerListener final Location from = event.getFrom(); final Location to = event.getTo().clone(); to.setX(from.getX()); - to.setY(from.getBlock().getTypeId() == 0 ? from.getY() - 1 : from.getY()); + to.setY(from.getY()); to.setZ(from.getZ()); - event.setTo(to); + try + { + event.setTo(Util.getSafeDestination(to)); + } + catch (Exception ex) + { + event.setTo(to); + } return; }