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:
parent
e135df1c62
commit
8954be85a1
@ -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) {
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user