Fix ignore-if-block-in-hand issue with empty hand counting as a air block

Replace Timers with Bukkit schedulers
Some refactoring optimizations
This commit is contained in:
cnaude 2013-04-04 21:31:22 -07:00
parent e135df1c62
commit 8954be85a1
2 changed files with 32 additions and 26 deletions

View File

@ -208,19 +208,39 @@ public class Chairs extends JavaPlugin {
pm.addPermission(new Permission("chairs.self","Allow player to self disable or enable sitting.",pd)); pm.addPermission(new Permission("chairs.self","Allow player to self disable or enable sitting.",pd));
} }
// Send sit packet to all online players private PacketContainer getSitPacket(Player p) {
public void sendSit(Player p) {
PacketContainer fakeSit = protocolManager.createPacket(40); PacketContainer fakeSit = protocolManager.createPacket(40);
fakeSit.getSpecificModifier(int.class).write(0, p.getEntityId()); fakeSit.getSpecificModifier(int.class).write(0, p.getEntityId());
WrappedDataWatcher watcher = new WrappedDataWatcher(); WrappedDataWatcher watcher = new WrappedDataWatcher();
watcher.setObject(0, (byte)4); watcher.setObject(0, (byte)4);
fakeSit.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); 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()) { for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
try { if (onlinePlayer.canSee(p)) {
protocolManager.sendServerPacket(onlinePlayer, fakeSit); if (onlinePlayer.getWorld().equals(p.getWorld())) {
} catch (Exception ex) { try {
// Nothing here protocolManager.sendServerPacket(onlinePlayer, pc);
} catch (Exception ex) {
// Nothing here
}
}
} }
} }
} }
@ -241,22 +261,8 @@ public class Chairs extends JavaPlugin {
p.sendMessage(msgStanding); p.sendMessage(msgStanding);
} }
sit.remove(p.getName()); sit.remove(p.getName());
} }
sendPacketToPlayers(getStandPacket(p),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());
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
try {
protocolManager.sendServerPacket(onlinePlayer, fakeSit);
} catch (Exception ex) {
// Nothing here
}
}
} }
public void logInfo(String _message) { public void logInfo(String _message) {

View File

@ -61,7 +61,7 @@ public class EventListener implements Listener {
private void delayedSitTask() { private void delayedSitTask() {
plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() {
@Override @Override
public void run() { public void run() {
plugin.sendSit(); plugin.sendSit();
} }
}, 20 ); }, 20 );
@ -282,7 +282,7 @@ public class EventListener implements Listener {
} }
plugin.sit.put(player.getName(), block.getLocation()); plugin.sit.put(player.getName(), block.getLocation());
event.setUseInteractedBlock(Result.DENY); event.setUseInteractedBlock(Result.DENY);
delayedSitTask(); delayedSitTask();
} }
} }