From 8954be85a11c0b7784206bf79d968eac86a304c1 Mon Sep 17 00:00:00 2001 From: cnaude Date: Thu, 4 Apr 2013 21:31:22 -0700 Subject: [PATCH] Fix ignore-if-block-in-hand issue with empty hand counting as a air block Replace Timers with Bukkit schedulers Some refactoring optimizations --- src/net/spoothie/chairs/Chairs.java | 54 ++++++++++++---------- src/net/spoothie/chairs/EventListener.java | 4 +- 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/net/spoothie/chairs/Chairs.java b/src/net/spoothie/chairs/Chairs.java index a6c25e8..c1f92fe 100644 --- a/src/net/spoothie/chairs/Chairs.java +++ b/src/net/spoothie/chairs/Chairs.java @@ -208,19 +208,39 @@ public class Chairs extends JavaPlugin { pm.addPermission(new Permission("chairs.self","Allow player to self disable or enable sitting.",pd)); } - // Send sit packet to all online players - public void sendSit(Player p) { + private PacketContainer getSitPacket(Player p) { PacketContainer fakeSit = protocolManager.createPacket(40); fakeSit.getSpecificModifier(int.class).write(0, p.getEntityId()); WrappedDataWatcher watcher = new WrappedDataWatcher(); - watcher.setObject(0, (byte)4); + watcher.setObject(0, (byte)4); fakeSit.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); - + return fakeSit; + } + + private PacketContainer getStandPacket(Player p) { + PacketContainer fakeSit = protocolManager.createPacket(40); + fakeSit.getSpecificModifier(int.class).write(0, p.getEntityId()); + WrappedDataWatcher watcher = new WrappedDataWatcher(); + watcher.setObject(0, (byte)0); + fakeSit.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); + return fakeSit; + } + + // Send sit packet to all online players that are on same world and can see player + public void sendSit(Player p) { + sendPacketToPlayers(getSitPacket(p),p); + } + + private void sendPacketToPlayers(PacketContainer pc, Player p) { for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { - try { - protocolManager.sendServerPacket(onlinePlayer, fakeSit); - } catch (Exception ex) { - // Nothing here + if (onlinePlayer.canSee(p)) { + if (onlinePlayer.getWorld().equals(p.getWorld())) { + try { + protocolManager.sendServerPacket(onlinePlayer, pc); + } catch (Exception ex) { + // Nothing here + } + } } } } @@ -241,22 +261,8 @@ public class Chairs extends JavaPlugin { p.sendMessage(msgStanding); } sit.remove(p.getName()); - } - - PacketContainer fakeSit = protocolManager.createPacket(40); - fakeSit.getSpecificModifier(int.class).write(0, p.getEntityId()); - WrappedDataWatcher watcher = new WrappedDataWatcher(); - watcher.setObject(0, (byte)0); - fakeSit.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); - - - for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { - try { - protocolManager.sendServerPacket(onlinePlayer, fakeSit); - } catch (Exception ex) { - // Nothing here - } - } + } + sendPacketToPlayers(getStandPacket(p),p); } public void logInfo(String _message) { diff --git a/src/net/spoothie/chairs/EventListener.java b/src/net/spoothie/chairs/EventListener.java index 39c6873..374efba 100644 --- a/src/net/spoothie/chairs/EventListener.java +++ b/src/net/spoothie/chairs/EventListener.java @@ -61,7 +61,7 @@ public class EventListener implements Listener { private void delayedSitTask() { plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { @Override - public void run() { + public void run() { plugin.sendSit(); } }, 20 ); @@ -282,7 +282,7 @@ public class EventListener implements Listener { } plugin.sit.put(player.getName(), block.getLocation()); event.setUseInteractedBlock(Result.DENY); - + delayedSitTask(); } }