Cleanup, fix a bug
This commit is contained in:
parent
986dfe6246
commit
eff6dc3025
@ -446,51 +446,48 @@ public class DisguiseUtilities
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
try
|
|
||||||
{
|
|
||||||
int chunkX = (int) Math.floor(loc.getX() / 16D) - 17, chunkZ = (int) Math.floor(loc.getZ() / 16D) - 17;
|
|
||||||
|
|
||||||
chunkX -= chunkX % 8;
|
int chunkX = (int) Math.floor(loc.getX() / 16D) - 17, chunkZ = (int) Math.floor(loc.getZ() / 16D) - 17;
|
||||||
chunkZ -= chunkZ % 8;
|
|
||||||
|
|
||||||
xChunk.set(bedChunk, chunkX);
|
chunkX -= chunkX % 8;
|
||||||
zChunk.set(bedChunk, chunkZ);
|
chunkZ -= chunkZ % 8;
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
ex.printStackTrace(System.out);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make unload packets
|
// Make unload packets
|
||||||
try
|
|
||||||
{
|
packets[i] = ProtocolLibrary.getProtocolManager().createPacketConstructor(Server.UNLOAD_CHUNK, chunkX, chunkZ)
|
||||||
packets[i] = ProtocolLibrary.getProtocolManager().createPacketConstructor(Server.MAP_CHUNK, bedChunk, 0)
|
.createPacket(bedChunk, 0);
|
||||||
.createPacket(bedChunk, 0);
|
|
||||||
}
|
|
||||||
catch (IllegalArgumentException ex)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
packets[i] = ProtocolLibrary.getProtocolManager()
|
|
||||||
.createPacketConstructor(Server.MAP_CHUNK, bedChunk, true, 0, 40).createPacket(bedChunk, true, 0, 48);
|
|
||||||
}
|
|
||||||
catch (IllegalArgumentException ex1)
|
|
||||||
{
|
|
||||||
packets[i] = ProtocolLibrary.getProtocolManager().createPacketConstructor(Server.MAP_CHUNK, bedChunk, true, 0)
|
|
||||||
.createPacket(bedChunk, true, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
// Make load packets
|
// Make load packets
|
||||||
if (oldLoc == null || i > 1)
|
if (oldLoc == null || i > 1)
|
||||||
{
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
xChunk.set(bedChunk, chunkX);
|
||||||
|
zChunk.set(bedChunk, chunkZ);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
ex.printStackTrace(System.out);
|
||||||
|
}
|
||||||
|
|
||||||
// MAP_CHUNK_BULK was replaced in 1.9 with several seperated chunk packets
|
// MAP_CHUNK_BULK was replaced in 1.9 with several seperated chunk packets
|
||||||
// packets[i] = ProtocolLibrary.getProtocolManager()
|
// packets[i] = ProtocolLibrary.getProtocolManager()
|
||||||
// .createPacketConstructor(Server.MAP_CHUNK_BULK, Arrays.asList(bedChunk))
|
// .createPacketConstructor(Server.MAP_CHUNK_BULK, Arrays.asList(bedChunk))
|
||||||
// .createPacket(Arrays.asList(bedChunk));
|
// .createPacket(Arrays.asList(bedChunk));
|
||||||
packets[i] = ProtocolLibrary.getProtocolManager().createPacketConstructor(Server.MAP_CHUNK, bedChunk, true, 0)
|
// Make unload packets
|
||||||
.createPacket(bedChunk, true, 0);
|
try
|
||||||
|
{
|
||||||
|
packets[i] = ProtocolLibrary.getProtocolManager().createPacketConstructor(Server.MAP_CHUNK, bedChunk, 0)
|
||||||
|
.createPacket(bedChunk, 0);
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ex)
|
||||||
|
{
|
||||||
|
packets[i] = ProtocolLibrary.getProtocolManager().createPacketConstructor(Server.MAP_CHUNK, bedChunk, true, 0)
|
||||||
|
.createPacket(bedChunk, true, 0);
|
||||||
|
}
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,28 +53,32 @@ public class PacketListenerClientInteract extends PacketAdapter
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemStack item = observer.getItemInHand();
|
for (ItemStack item : new ItemStack[]
|
||||||
|
{
|
||||||
if (item != null && item.getType() == Material.INK_SACK)
|
observer.getInventory().getItemInMainHand(), observer.getInventory().getItemInOffHand()
|
||||||
|
})
|
||||||
{
|
{
|
||||||
|
if (item == null || item.getType() != Material.INK_SACK)
|
||||||
|
continue;
|
||||||
|
|
||||||
Disguise disguise = DisguiseAPI.getDisguise(observer, entity);
|
Disguise disguise = DisguiseAPI.getDisguise(observer, entity);
|
||||||
|
|
||||||
if (disguise != null && (disguise.getType() == DisguiseType.SHEEP || disguise.getType() == DisguiseType.WOLF))
|
if (disguise == null || (disguise.getType() != DisguiseType.SHEEP && disguise.getType() != DisguiseType.WOLF))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
AnimalColor color = AnimalColor.getColor(item.getDurability());
|
||||||
|
|
||||||
|
if (disguise.getType() == DisguiseType.SHEEP)
|
||||||
{
|
{
|
||||||
AnimalColor color = AnimalColor.getColor(item.getDurability());
|
SheepWatcher watcher = (SheepWatcher) disguise.getWatcher();
|
||||||
|
|
||||||
if (disguise.getType() == DisguiseType.SHEEP)
|
watcher.setColor(DisguiseConfig.isSheepDyeable() ? color : watcher.getColor());
|
||||||
{
|
}
|
||||||
SheepWatcher watcher = (SheepWatcher) disguise.getWatcher();
|
else
|
||||||
|
{
|
||||||
|
WolfWatcher watcher = (WolfWatcher) disguise.getWatcher();
|
||||||
|
|
||||||
watcher.setColor(DisguiseConfig.isSheepDyeable() ? color : watcher.getColor());
|
watcher.setCollarColor(DisguiseConfig.isWolfDyeable() ? color : watcher.getCollarColor());
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WolfWatcher watcher = (WolfWatcher) disguise.getWatcher();
|
|
||||||
|
|
||||||
watcher.setCollarColor(DisguiseConfig.isWolfDyeable() ? color : watcher.getCollarColor());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,123 +41,38 @@ public class PacketListenerInventory extends PacketAdapter
|
|||||||
if (event.getPlayer().getName().contains("UNKNOWN[")) // If the player is temporary
|
if (event.getPlayer().getName().contains("UNKNOWN[")) // If the player is temporary
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!(event.getPlayer() instanceof com.comphenix.net.sf.cglib.proxy.Factory) && event.getPlayer().getVehicle() == null)
|
if (event.getPlayer() instanceof com.comphenix.net.sf.cglib.proxy.Factory || event.getPlayer().getVehicle() != null)
|
||||||
{
|
{
|
||||||
Disguise disguise = DisguiseAPI.getDisguise(event.getPlayer(), event.getPlayer());
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// If player is disguised, views self disguises and has a inventory modifier
|
Disguise disguise = DisguiseAPI.getDisguise(event.getPlayer(), event.getPlayer());
|
||||||
if (disguise != null && disguise.isSelfDisguiseVisible()
|
|
||||||
&& (disguise.isHidingArmorFromSelf() || disguise.isHidingHeldItemFromSelf()))
|
// If player is disguised, views self disguises and has a inventory modifier
|
||||||
|
if (disguise != null && disguise.isSelfDisguiseVisible()
|
||||||
|
&& (disguise.isHidingArmorFromSelf() || disguise.isHidingHeldItemFromSelf()))
|
||||||
|
{
|
||||||
|
// If they are in creative and clicked on a slot
|
||||||
|
if (event.getPacketType() == PacketType.Play.Client.SET_CREATIVE_SLOT)
|
||||||
{
|
{
|
||||||
// If they are in creative and clicked on a slot
|
int slot = event.getPacket().getIntegers().read(0);
|
||||||
if (event.getPacketType() == PacketType.Play.Client.SET_CREATIVE_SLOT)
|
|
||||||
|
if (slot >= 5 && slot <= 8)
|
||||||
{
|
{
|
||||||
int slot = event.getPacket().getIntegers().read(0);
|
if (disguise.isHidingArmorFromSelf())
|
||||||
|
|
||||||
if (slot >= 5 && slot <= 8)
|
|
||||||
{
|
{
|
||||||
if (disguise.isHidingArmorFromSelf())
|
int armorSlot = Math.abs((slot - 5) - 3);
|
||||||
{
|
|
||||||
int armorSlot = Math.abs((slot - 5) - 3);
|
|
||||||
|
|
||||||
org.bukkit.inventory.ItemStack item = event.getPlayer().getInventory().getArmorContents()[armorSlot];
|
org.bukkit.inventory.ItemStack item = event.getPlayer().getInventory().getArmorContents()[armorSlot];
|
||||||
|
|
||||||
if (item != null && item.getType() != Material.AIR)
|
if (item != null && item.getType() != Material.AIR)
|
||||||
{
|
|
||||||
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
|
||||||
|
|
||||||
StructureModifier<Object> mods = packet.getModifier();
|
|
||||||
|
|
||||||
mods.write(0, 0);
|
|
||||||
mods.write(1, slot);
|
|
||||||
mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false);
|
|
||||||
}
|
|
||||||
catch (InvocationTargetException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (slot >= 36 && slot <= 44)
|
|
||||||
{
|
|
||||||
if (disguise.isHidingHeldItemFromSelf())
|
|
||||||
{
|
|
||||||
int currentSlot = event.getPlayer().getInventory().getHeldItemSlot();
|
|
||||||
|
|
||||||
if (slot + 36 == currentSlot)
|
|
||||||
{
|
|
||||||
org.bukkit.inventory.ItemStack item = event.getPlayer().getItemInHand();
|
|
||||||
|
|
||||||
if (item != null && item.getType() != Material.AIR)
|
|
||||||
{
|
|
||||||
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
|
||||||
|
|
||||||
StructureModifier<Object> mods = packet.getModifier();
|
|
||||||
mods.write(0, 0);
|
|
||||||
mods.write(1, slot);
|
|
||||||
mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false);
|
|
||||||
}
|
|
||||||
catch (InvocationTargetException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// If the player switched item, aka he moved from slot 1 to slot 2
|
|
||||||
else if (event.getPacketType() == PacketType.Play.Client.HELD_ITEM_SLOT)
|
|
||||||
{
|
|
||||||
if (disguise.isHidingHeldItemFromSelf())
|
|
||||||
{
|
|
||||||
// From logging, it seems that both bukkit and nms uses the same thing for the slot switching.
|
|
||||||
// 0 1 2 3 - 8
|
|
||||||
// If the packet is coming, then I need to replace the item they are switching to
|
|
||||||
// As for the old item, I need to restore it.
|
|
||||||
org.bukkit.inventory.ItemStack currentlyHeld = event.getPlayer().getItemInHand();
|
|
||||||
// If his old weapon isn't air
|
|
||||||
if (currentlyHeld != null && currentlyHeld.getType() != Material.AIR)
|
|
||||||
{
|
{
|
||||||
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
||||||
|
|
||||||
StructureModifier<Object> mods = packet.getModifier();
|
StructureModifier<Object> mods = packet.getModifier();
|
||||||
|
|
||||||
mods.write(0, 0);
|
mods.write(0, 0);
|
||||||
mods.write(1, event.getPlayer().getInventory().getHeldItemSlot() + 36);
|
mods.write(1, slot);
|
||||||
mods.write(2, ReflectionManager.getNmsItem(currentlyHeld));
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false);
|
|
||||||
}
|
|
||||||
catch (InvocationTargetException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
org.bukkit.inventory.ItemStack newHeld = event.getPlayer().getInventory()
|
|
||||||
.getItem(event.getPacket().getIntegers().read(0));
|
|
||||||
|
|
||||||
// If his new weapon isn't air either!
|
|
||||||
if (newHeld != null && newHeld.getType() != Material.AIR)
|
|
||||||
{
|
|
||||||
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
|
||||||
|
|
||||||
StructureModifier<Object> mods = packet.getModifier();
|
|
||||||
|
|
||||||
mods.write(0, 0);
|
|
||||||
mods.write(1, event.getPacket().getIntegers().read(0) + 36);
|
|
||||||
mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -171,55 +86,21 @@ public class PacketListenerInventory extends PacketAdapter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event.getPacketType() == PacketType.Play.Client.WINDOW_CLICK)
|
else if (slot >= 36 && slot <= 44)
|
||||||
{
|
{
|
||||||
int slot = event.getPacket().getIntegers().read(1);
|
if (disguise.isHidingHeldItemFromSelf())
|
||||||
|
|
||||||
org.bukkit.inventory.ItemStack clickedItem;
|
|
||||||
|
|
||||||
if (event.getPacket().getShorts().read(0) == 1)
|
|
||||||
{
|
{
|
||||||
// Its a shift click
|
int currentSlot = event.getPlayer().getInventory().getHeldItemSlot();
|
||||||
clickedItem = event.getPacket().getItemModifier().read(0);
|
|
||||||
|
|
||||||
if (clickedItem != null && clickedItem.getType() != Material.AIR)
|
if (slot + 36 == currentSlot)
|
||||||
{
|
{
|
||||||
// Rather than predict the clients actions
|
org.bukkit.inventory.ItemStack item = event.getPlayer().getItemInHand();
|
||||||
// Lets just update the entire inventory..
|
|
||||||
Bukkit.getScheduler().runTask(libsDisguises, new Runnable()
|
|
||||||
{
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
event.getPlayer().updateInventory();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
if (item != null && item.getType() != Material.AIR)
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// If its not a player inventory click
|
|
||||||
// Shift clicking is exempted for the item in hand..
|
|
||||||
if (event.getPacket().getIntegers().read(0) != 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
clickedItem = event.getPlayer().getItemOnCursor();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (clickedItem != null && clickedItem.getType() != Material.AIR)
|
|
||||||
{
|
|
||||||
// If the slot is a armor slot
|
|
||||||
if (slot >= 5 && slot <= 8)
|
|
||||||
{
|
|
||||||
if (disguise.isHidingArmorFromSelf())
|
|
||||||
{
|
{
|
||||||
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
||||||
|
|
||||||
StructureModifier<Object> mods = packet.getModifier();
|
StructureModifier<Object> mods = packet.getModifier();
|
||||||
|
|
||||||
mods.write(0, 0);
|
mods.write(0, 0);
|
||||||
mods.write(1, slot);
|
mods.write(1, slot);
|
||||||
mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
||||||
@ -233,83 +114,126 @@ public class PacketListenerInventory extends PacketAdapter
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Else if its a hotbar slot
|
|
||||||
}
|
|
||||||
else if (slot >= 36 && slot <= 44)
|
|
||||||
{
|
|
||||||
if (disguise.isHidingHeldItemFromSelf())
|
|
||||||
{
|
|
||||||
int currentSlot = event.getPlayer().getInventory().getHeldItemSlot();
|
|
||||||
|
|
||||||
// Check if the player is on the same slot as the slot that its setting
|
|
||||||
if (slot == currentSlot + 36)
|
|
||||||
{
|
|
||||||
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
|
||||||
|
|
||||||
StructureModifier<Object> mods = packet.getModifier();
|
|
||||||
mods.write(0, 0);
|
|
||||||
mods.write(1, slot);
|
|
||||||
mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false);
|
|
||||||
}
|
|
||||||
catch (InvocationTargetException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
// If the player switched item, aka he moved from slot 1 to slot 2
|
||||||
}
|
else if (event.getPacketType() == PacketType.Play.Client.HELD_ITEM_SLOT)
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPacketSending(PacketEvent event)
|
|
||||||
{
|
|
||||||
// If the inventory is the players inventory
|
|
||||||
if (!(event.getPlayer() instanceof com.comphenix.net.sf.cglib.proxy.Factory) && event.getPlayer().getVehicle() == null
|
|
||||||
&& event.getPacket().getIntegers().read(0) == 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
Disguise disguise = DisguiseAPI.getDisguise(event.getPlayer(), event.getPlayer());
|
|
||||||
|
|
||||||
// If the player is disguised, views self disguises and is hiding a item.
|
|
||||||
if (disguise != null && disguise.isSelfDisguiseVisible()
|
|
||||||
&& (disguise.isHidingArmorFromSelf() || disguise.isHidingHeldItemFromSelf()))
|
|
||||||
{
|
{
|
||||||
// If the server is setting the slot
|
if (disguise.isHidingHeldItemFromSelf())
|
||||||
// Need to set it to air if its in a place it shouldn't be.
|
|
||||||
// Things such as picking up a item, spawned in item. Plugin sets the item. etc. Will fire this
|
|
||||||
/**
|
|
||||||
* Done
|
|
||||||
*/
|
|
||||||
if (event.getPacketType() == Server.SET_SLOT)
|
|
||||||
{
|
{
|
||||||
// The raw slot
|
// From logging, it seems that both bukkit and nms uses the same thing for the slot switching.
|
||||||
// nms code has the start of the hotbar being 36.
|
// 0 1 2 3 - 8
|
||||||
int slot = event.getPacket().getIntegers().read(1);
|
// If the packet is coming, then I need to replace the item they are switching to
|
||||||
|
// As for the old item, I need to restore it.
|
||||||
|
org.bukkit.inventory.ItemStack currentlyHeld = event.getPlayer().getItemInHand();
|
||||||
|
// If his old weapon isn't air
|
||||||
|
if (currentlyHeld != null && currentlyHeld.getType() != Material.AIR)
|
||||||
|
{
|
||||||
|
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
||||||
|
|
||||||
|
StructureModifier<Object> mods = packet.getModifier();
|
||||||
|
|
||||||
|
mods.write(0, 0);
|
||||||
|
mods.write(1, event.getPlayer().getInventory().getHeldItemSlot() + 36);
|
||||||
|
mods.write(2, ReflectionManager.getNmsItem(currentlyHeld));
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false);
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.inventory.ItemStack newHeld = event.getPlayer().getInventory()
|
||||||
|
.getItem(event.getPacket().getIntegers().read(0));
|
||||||
|
|
||||||
|
// If his new weapon isn't air either!
|
||||||
|
if (newHeld != null && newHeld.getType() != Material.AIR)
|
||||||
|
{
|
||||||
|
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
||||||
|
|
||||||
|
StructureModifier<Object> mods = packet.getModifier();
|
||||||
|
|
||||||
|
mods.write(0, 0);
|
||||||
|
mods.write(1, event.getPacket().getIntegers().read(0) + 36);
|
||||||
|
mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false);
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.getPacketType() == PacketType.Play.Client.WINDOW_CLICK)
|
||||||
|
{
|
||||||
|
int slot = event.getPacket().getIntegers().read(1);
|
||||||
|
|
||||||
|
org.bukkit.inventory.ItemStack clickedItem;
|
||||||
|
|
||||||
|
if (event.getPacket().getShorts().read(0) == 1)
|
||||||
|
{
|
||||||
|
// Its a shift click
|
||||||
|
clickedItem = event.getPacket().getItemModifier().read(0);
|
||||||
|
|
||||||
|
if (clickedItem != null && clickedItem.getType() != Material.AIR)
|
||||||
|
{
|
||||||
|
// Rather than predict the clients actions
|
||||||
|
// Lets just update the entire inventory..
|
||||||
|
Bukkit.getScheduler().runTask(libsDisguises, new Runnable()
|
||||||
|
{
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
event.getPlayer().updateInventory();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If its not a player inventory click
|
||||||
|
// Shift clicking is exempted for the item in hand..
|
||||||
|
if (event.getPacket().getIntegers().read(0) != 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
clickedItem = event.getPlayer().getItemOnCursor();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clickedItem != null && clickedItem.getType() != Material.AIR)
|
||||||
|
{
|
||||||
// If the slot is a armor slot
|
// If the slot is a armor slot
|
||||||
if (slot >= 5 && slot <= 8)
|
if (slot >= 5 && slot <= 8)
|
||||||
{
|
{
|
||||||
if (disguise.isHidingArmorFromSelf())
|
if (disguise.isHidingArmorFromSelf())
|
||||||
{
|
{
|
||||||
// Get the bukkit armor slot!
|
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
||||||
int armorSlot = Math.abs((slot - 5) - 3);
|
|
||||||
|
|
||||||
org.bukkit.inventory.ItemStack item = event.getPlayer().getInventory().getArmorContents()[armorSlot];
|
StructureModifier<Object> mods = packet.getModifier();
|
||||||
|
|
||||||
if (item != null && item.getType() != Material.AIR)
|
mods.write(0, 0);
|
||||||
|
mods.write(1, slot);
|
||||||
|
mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
event.setPacket(event.getPacket().shallowClone());
|
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false);
|
||||||
|
}
|
||||||
event.getPacket().getModifier().write(2,
|
catch (InvocationTargetException e)
|
||||||
ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
{
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Else if its a hotbar slot
|
// Else if its a hotbar slot
|
||||||
@ -323,68 +247,150 @@ public class PacketListenerInventory extends PacketAdapter
|
|||||||
// Check if the player is on the same slot as the slot that its setting
|
// Check if the player is on the same slot as the slot that its setting
|
||||||
if (slot == currentSlot + 36)
|
if (slot == currentSlot + 36)
|
||||||
{
|
{
|
||||||
org.bukkit.inventory.ItemStack item = event.getPlayer().getItemInHand();
|
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
||||||
|
|
||||||
if (item != null && item.getType() != Material.AIR)
|
StructureModifier<Object> mods = packet.getModifier();
|
||||||
|
mods.write(0, 0);
|
||||||
|
mods.write(1, slot);
|
||||||
|
mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
event.setPacket(event.getPacket().shallowClone());
|
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false);
|
||||||
event.getPacket().getModifier().write(2,
|
}
|
||||||
ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
catch (InvocationTargetException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event.getPacketType() == Server.WINDOW_ITEMS)
|
|
||||||
{
|
|
||||||
event.setPacket(event.getPacket().deepClone());
|
|
||||||
|
|
||||||
StructureModifier<ItemStack[]> mods = event.getPacket().getItemArrayModifier();
|
|
||||||
ItemStack[] items = mods.read(0);
|
|
||||||
|
|
||||||
for (int slot = 0; slot < items.length; slot++)
|
|
||||||
{
|
|
||||||
if (slot >= 5 && slot <= 8)
|
|
||||||
{
|
|
||||||
if (disguise.isHidingArmorFromSelf())
|
|
||||||
{
|
|
||||||
// Get the bukkit armor slot!
|
|
||||||
int armorSlot = Math.abs((slot - 5) - 3);
|
|
||||||
|
|
||||||
org.bukkit.inventory.ItemStack item = event.getPlayer().getInventory()
|
|
||||||
.getArmorContents()[armorSlot];
|
|
||||||
|
|
||||||
if (item != null && item.getType() != Material.AIR)
|
|
||||||
{
|
|
||||||
items[slot] = new org.bukkit.inventory.ItemStack(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Else if its a hotbar slot
|
|
||||||
}
|
|
||||||
else if (slot >= 36 && slot <= 44)
|
|
||||||
{
|
|
||||||
if (disguise.isHidingHeldItemFromSelf())
|
|
||||||
{
|
|
||||||
int currentSlot = event.getPlayer().getInventory().getHeldItemSlot();
|
|
||||||
|
|
||||||
// Check if the player is on the same slot as the slot that its setting
|
|
||||||
if (slot == currentSlot + 36)
|
|
||||||
{
|
|
||||||
org.bukkit.inventory.ItemStack item = event.getPlayer().getItemInHand();
|
|
||||||
|
|
||||||
if (item != null && item.getType() != Material.AIR)
|
|
||||||
{
|
|
||||||
items[slot] = new org.bukkit.inventory.ItemStack(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mods.write(0, items);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPacketSending(PacketEvent event)
|
||||||
|
{
|
||||||
|
// If the inventory is the players inventory
|
||||||
|
if (event.getPlayer() instanceof com.comphenix.net.sf.cglib.proxy.Factory || event.getPlayer().getVehicle() != null
|
||||||
|
|| event.getPacket().getIntegers().read(0) != 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Disguise disguise = DisguiseAPI.getDisguise(event.getPlayer(), event.getPlayer());
|
||||||
|
|
||||||
|
if (disguise == null || !disguise.isSelfDisguiseVisible()
|
||||||
|
|| (!disguise.isHidingArmorFromSelf() && !disguise.isHidingHeldItemFromSelf()))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the player is disguised, views self disguises and is hiding a item.
|
||||||
|
|
||||||
|
// If the server is setting the slot
|
||||||
|
// Need to set it to air if its in a place it shouldn't be.
|
||||||
|
// Things such as picking up a item, spawned in item. Plugin sets the item. etc. Will fire this
|
||||||
|
/**
|
||||||
|
* Done
|
||||||
|
*/
|
||||||
|
if (event.getPacketType() == Server.SET_SLOT)
|
||||||
|
{
|
||||||
|
// The raw slot
|
||||||
|
// nms code has the start of the hotbar being 36.
|
||||||
|
int slot = event.getPacket().getIntegers().read(1);
|
||||||
|
|
||||||
|
// If the slot is a armor slot
|
||||||
|
if (slot >= 5 && slot <= 8)
|
||||||
|
{
|
||||||
|
if (disguise.isHidingArmorFromSelf())
|
||||||
|
{
|
||||||
|
// Get the bukkit armor slot!
|
||||||
|
int armorSlot = Math.abs((slot - 5) - 3);
|
||||||
|
|
||||||
|
org.bukkit.inventory.ItemStack item = event.getPlayer().getInventory().getArmorContents()[armorSlot];
|
||||||
|
|
||||||
|
if (item != null && item.getType() != Material.AIR)
|
||||||
|
{
|
||||||
|
event.setPacket(event.getPacket().shallowClone());
|
||||||
|
|
||||||
|
event.getPacket().getModifier().write(2,
|
||||||
|
ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Else if its a hotbar slot
|
||||||
|
}
|
||||||
|
else if (slot >= 36 && slot <= 44)
|
||||||
|
{
|
||||||
|
if (disguise.isHidingHeldItemFromSelf())
|
||||||
|
{
|
||||||
|
int currentSlot = event.getPlayer().getInventory().getHeldItemSlot();
|
||||||
|
|
||||||
|
// Check if the player is on the same slot as the slot that its setting
|
||||||
|
if (slot == currentSlot + 36)
|
||||||
|
{
|
||||||
|
org.bukkit.inventory.ItemStack item = event.getPlayer().getItemInHand();
|
||||||
|
|
||||||
|
if (item != null && item.getType() != Material.AIR)
|
||||||
|
{
|
||||||
|
event.setPacket(event.getPacket().shallowClone());
|
||||||
|
event.getPacket().getModifier().write(2,
|
||||||
|
ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.getPacketType() == Server.WINDOW_ITEMS)
|
||||||
|
{
|
||||||
|
event.setPacket(event.getPacket().deepClone());
|
||||||
|
|
||||||
|
StructureModifier<ItemStack[]> mods = event.getPacket().getItemArrayModifier();
|
||||||
|
ItemStack[] items = mods.read(0);
|
||||||
|
|
||||||
|
for (int slot = 0; slot < items.length; slot++)
|
||||||
|
{
|
||||||
|
if (slot >= 5 && slot <= 8)
|
||||||
|
{
|
||||||
|
if (disguise.isHidingArmorFromSelf())
|
||||||
|
{
|
||||||
|
// Get the bukkit armor slot!
|
||||||
|
int armorSlot = Math.abs((slot - 5) - 3);
|
||||||
|
|
||||||
|
org.bukkit.inventory.ItemStack item = event.getPlayer().getInventory().getArmorContents()[armorSlot];
|
||||||
|
|
||||||
|
if (item != null && item.getType() != Material.AIR)
|
||||||
|
{
|
||||||
|
items[slot] = new org.bukkit.inventory.ItemStack(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Else if its a hotbar slot
|
||||||
|
}
|
||||||
|
else if (slot >= 36 && slot <= 44)
|
||||||
|
{
|
||||||
|
if (disguise.isHidingHeldItemFromSelf())
|
||||||
|
{
|
||||||
|
int currentSlot = event.getPlayer().getInventory().getHeldItemSlot();
|
||||||
|
|
||||||
|
// Check if the player is on the same slot as the slot that its setting
|
||||||
|
if (slot == currentSlot + 36)
|
||||||
|
{
|
||||||
|
org.bukkit.inventory.ItemStack item = event.getPlayer().getItemInHand();
|
||||||
|
|
||||||
|
if (item != null && item.getType() != Material.AIR)
|
||||||
|
{
|
||||||
|
items[slot] = new org.bukkit.inventory.ItemStack(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mods.write(0, items);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -53,45 +53,50 @@ public class PacketListenerMain extends PacketAdapter
|
|||||||
|
|
||||||
PacketContainer[][] packets = PacketsManager.transformPacket(event.getPacket(), event.getPlayer(), entity);
|
PacketContainer[][] packets = PacketsManager.transformPacket(event.getPacket(), event.getPlayer(), entity);
|
||||||
|
|
||||||
if (packets != null)
|
if (packets == null)
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
return;
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
for (PacketContainer packet : packets[0])
|
|
||||||
{
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
final PacketContainer[] delayed = packets[1];
|
|
||||||
|
|
||||||
if (delayed.length > 0)
|
|
||||||
{
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable()
|
|
||||||
{
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
for (PacketContainer packet : delayed)
|
|
||||||
{
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (InvocationTargetException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (InvocationTargetException ex)
|
|
||||||
{
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (PacketContainer packet : packets[0])
|
||||||
|
{
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
final PacketContainer[] delayed = packets[1];
|
||||||
|
|
||||||
|
if (delayed.length == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable()
|
||||||
|
{
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (PacketContainer packet : delayed)
|
||||||
|
{
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 2);
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException ex)
|
||||||
|
{
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -286,116 +286,118 @@ public class PacketListenerSounds extends PacketAdapter
|
|||||||
}
|
}
|
||||||
else if (event.getPacketType() == Server.ENTITY_STATUS)
|
else if (event.getPacketType() == Server.ENTITY_STATUS)
|
||||||
{
|
{
|
||||||
if ((byte) mods.read(1) == 2)
|
if ((byte) mods.read(1) != 2)
|
||||||
{
|
{
|
||||||
// It made a damage animation
|
return;
|
||||||
Entity entity = event.getPacket().getEntityModifier(observer.getWorld()).read(0);
|
}
|
||||||
|
|
||||||
Disguise disguise = DisguiseAPI.getDisguise(observer, entity);
|
// It made a damage animation
|
||||||
|
Entity entity = event.getPacket().getEntityModifier(observer.getWorld()).read(0);
|
||||||
|
|
||||||
if (disguise != null && !disguise.getType().isPlayer()
|
Disguise disguise = DisguiseAPI.getDisguise(observer, entity);
|
||||||
&& (disguise.isSelfDisguiseSoundsReplaced() || entity != event.getPlayer()))
|
|
||||||
|
if (disguise != null && !disguise.getType().isPlayer()
|
||||||
|
&& (disguise.isSelfDisguiseSoundsReplaced() || entity != event.getPlayer()))
|
||||||
|
{
|
||||||
|
DisguiseSound disSound = DisguiseSound.getType(entity.getType().name());
|
||||||
|
|
||||||
|
if (disSound == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
SoundType soundType = null;
|
||||||
|
Object obj = null;
|
||||||
|
|
||||||
|
if (entity instanceof LivingEntity)
|
||||||
{
|
{
|
||||||
DisguiseSound disSound = DisguiseSound.getType(entity.getType().name());
|
try
|
||||||
|
|
||||||
if (disSound == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
SoundType soundType = null;
|
|
||||||
Object obj = null;
|
|
||||||
|
|
||||||
if (entity instanceof LivingEntity)
|
|
||||||
{
|
{
|
||||||
try
|
obj = LivingEntity.class.getMethod("getHealth").invoke(entity);
|
||||||
{
|
|
||||||
obj = LivingEntity.class.getMethod("getHealth").invoke(entity);
|
|
||||||
|
|
||||||
if (obj instanceof Double ? (Double) obj == 0 : (Integer) obj == 0)
|
if (obj instanceof Double ? (Double) obj == 0 : (Integer) obj == 0)
|
||||||
|
{
|
||||||
|
soundType = SoundType.DEATH;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
obj = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj == null)
|
||||||
|
{
|
||||||
|
soundType = SoundType.HURT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (disSound.getSound(soundType) == null
|
||||||
|
|| (disguise.isSelfDisguiseSoundsReplaced() && entity == event.getPlayer()))
|
||||||
|
{
|
||||||
|
if (disguise.isSelfDisguiseSoundsReplaced() && entity == event.getPlayer())
|
||||||
|
{
|
||||||
|
cancelSound = !cancelSound;
|
||||||
|
|
||||||
|
if (cancelSound)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
disSound = DisguiseSound.getType(disguise.getType().name());
|
||||||
|
|
||||||
|
if (disSound != null)
|
||||||
|
{
|
||||||
|
String sound = disSound.getSound(soundType);
|
||||||
|
|
||||||
|
if (sound != null)
|
||||||
|
{
|
||||||
|
Location loc = entity.getLocation();
|
||||||
|
|
||||||
|
PacketContainer packet = new PacketContainer(Server.NAMED_SOUND_EFFECT);
|
||||||
|
|
||||||
|
mods = packet.getModifier();
|
||||||
|
|
||||||
|
Object craftSoundEffect = ReflectionManager.getCraftSoundEffect(sound);
|
||||||
|
|
||||||
|
mods.write(0, craftSoundEffect);
|
||||||
|
mods.write(1, ReflectionManager.getSoundCategory(disguise.getType())); // Meh
|
||||||
|
mods.write(2, (int) (loc.getX() * 8D));
|
||||||
|
mods.write(3, (int) (loc.getY() * 8D));
|
||||||
|
mods.write(4, (int) (loc.getZ() * 8D));
|
||||||
|
mods.write(5, disSound.getDamageAndIdleSoundVolume());
|
||||||
|
|
||||||
|
float pitch;
|
||||||
|
|
||||||
|
if (disguise instanceof MobDisguise && !((MobDisguise) disguise).isAdult())
|
||||||
{
|
{
|
||||||
soundType = SoundType.DEATH;
|
pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F
|
||||||
|
+ 1.5F;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F
|
||||||
|
+ 1.0F;
|
||||||
|
|
||||||
|
if (disguise.getType() == DisguiseType.BAT)
|
||||||
|
pitch *= 95F;
|
||||||
|
|
||||||
|
pitch *= 63;
|
||||||
|
|
||||||
|
if (pitch < 0)
|
||||||
|
pitch = 0;
|
||||||
|
|
||||||
|
if (pitch > 255)
|
||||||
|
pitch = 255;
|
||||||
|
|
||||||
|
mods.write(6, (int) pitch);
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
obj = null;
|
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
||||||
}
|
}
|
||||||
}
|
catch (InvocationTargetException e)
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (obj == null)
|
|
||||||
{
|
|
||||||
soundType = SoundType.HURT;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (disSound.getSound(soundType) == null
|
|
||||||
|| (disguise.isSelfDisguiseSoundsReplaced() && entity == event.getPlayer()))
|
|
||||||
{
|
|
||||||
if (disguise.isSelfDisguiseSoundsReplaced() && entity == event.getPlayer())
|
|
||||||
{
|
|
||||||
cancelSound = !cancelSound;
|
|
||||||
|
|
||||||
if (cancelSound)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
disSound = DisguiseSound.getType(disguise.getType().name());
|
|
||||||
|
|
||||||
if (disSound != null)
|
|
||||||
{
|
|
||||||
String sound = disSound.getSound(soundType);
|
|
||||||
|
|
||||||
if (sound != null)
|
|
||||||
{
|
{
|
||||||
Location loc = entity.getLocation();
|
e.printStackTrace();
|
||||||
|
|
||||||
PacketContainer packet = new PacketContainer(Server.NAMED_SOUND_EFFECT);
|
|
||||||
|
|
||||||
mods = packet.getModifier();
|
|
||||||
|
|
||||||
Object craftSoundEffect = ReflectionManager.getCraftSoundEffect(sound);
|
|
||||||
|
|
||||||
mods.write(0, craftSoundEffect);
|
|
||||||
mods.write(1, ReflectionManager.getSoundCategory(disguise.getType())); // Meh
|
|
||||||
mods.write(2, (int) (loc.getX() * 8D));
|
|
||||||
mods.write(3, (int) (loc.getY() * 8D));
|
|
||||||
mods.write(4, (int) (loc.getZ() * 8D));
|
|
||||||
mods.write(5, disSound.getDamageAndIdleSoundVolume());
|
|
||||||
|
|
||||||
float pitch;
|
|
||||||
|
|
||||||
if (disguise instanceof MobDisguise && !((MobDisguise) disguise).isAdult())
|
|
||||||
{
|
|
||||||
pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F
|
|
||||||
+ 1.5F;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F
|
|
||||||
+ 1.0F;
|
|
||||||
|
|
||||||
if (disguise.getType() == DisguiseType.BAT)
|
|
||||||
pitch *= 95F;
|
|
||||||
|
|
||||||
pitch *= 63;
|
|
||||||
|
|
||||||
if (pitch < 0)
|
|
||||||
pitch = 0;
|
|
||||||
|
|
||||||
if (pitch > 255)
|
|
||||||
pitch = 255;
|
|
||||||
|
|
||||||
mods.write(6, (int) pitch);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
|
||||||
}
|
|
||||||
catch (InvocationTargetException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,141 +47,145 @@ public class PacketListenerViewDisguises extends PacketAdapter
|
|||||||
if (observer.getName().contains("UNKNOWN[")) // If the player is temporary
|
if (observer.getName().contains("UNKNOWN[")) // If the player is temporary
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (event.getPacket().getIntegers().read(0) == observer.getEntityId())
|
if (event.getPacket().getIntegers().read(0) != observer.getEntityId())
|
||||||
{
|
{
|
||||||
if (DisguiseAPI.isSelfDisguised(observer))
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!DisguiseAPI.isSelfDisguised(observer))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Here I grab the packets to convert them to, So I can display them as if the disguise sent them.
|
||||||
|
PacketContainer[][] transformed = PacketsManager.transformPacket(event.getPacket(), observer, observer);
|
||||||
|
|
||||||
|
PacketContainer[] packets = transformed == null ? null : transformed[0];
|
||||||
|
|
||||||
|
final PacketContainer[] delayedPackets = transformed == null ? null : transformed[1];
|
||||||
|
|
||||||
|
if (packets == null)
|
||||||
|
{
|
||||||
|
packets = new PacketContainer[]
|
||||||
|
{
|
||||||
|
event.getPacket()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
for (PacketContainer packet : packets)
|
||||||
|
{
|
||||||
|
if (packet.getType() != Server.PLAYER_INFO)
|
||||||
{
|
{
|
||||||
// Here I grab the packets to convert them to, So I can display them as if the disguise sent them.
|
if (packet.equals(event.getPacket()))
|
||||||
PacketContainer[][] transformed = PacketsManager.transformPacket(event.getPacket(), observer, observer);
|
|
||||||
|
|
||||||
PacketContainer[] packets = transformed == null ? null : transformed[0];
|
|
||||||
|
|
||||||
final PacketContainer[] delayedPackets = transformed == null ? null : transformed[1];
|
|
||||||
|
|
||||||
if (packets == null)
|
|
||||||
{
|
{
|
||||||
packets = new PacketContainer[]
|
packet = packet.shallowClone();
|
||||||
{
|
|
||||||
event.getPacket()
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (PacketContainer packet : packets)
|
packet.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delayedPackets != null && delayedPackets.length > 0)
|
||||||
|
{
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable()
|
||||||
|
{
|
||||||
|
public void run()
|
||||||
{
|
{
|
||||||
if (packet.getType() != Server.PLAYER_INFO)
|
|
||||||
{
|
|
||||||
if (packet.equals(event.getPacket()))
|
|
||||||
{
|
|
||||||
packet = packet.shallowClone();
|
|
||||||
}
|
|
||||||
|
|
||||||
packet.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
for (PacketContainer packet : delayedPackets)
|
||||||
|
{
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (InvocationTargetException e)
|
catch (InvocationTargetException e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}, 2);
|
||||||
|
}
|
||||||
|
|
||||||
if (delayedPackets != null && delayedPackets.length > 0)
|
if (event.getPacketType() == Server.ENTITY_METADATA)
|
||||||
|
{
|
||||||
|
event.setPacket(event.getPacket().deepClone());
|
||||||
|
|
||||||
|
for (WrappedWatchableObject watch : event.getPacket().getWatchableCollectionModifier().read(0))
|
||||||
|
{
|
||||||
|
if (watch.getIndex() == 0)
|
||||||
{
|
{
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable()
|
byte b = (byte) watch.getValue();
|
||||||
{
|
|
||||||
public void run()
|
byte a = (byte) (b | 1 << 5);
|
||||||
{
|
|
||||||
try
|
if ((b & 1 << 3) != 0)
|
||||||
{
|
a = (byte) (a | 1 << 3);
|
||||||
for (PacketContainer packet : delayedPackets)
|
|
||||||
{
|
watch.setValue(a);
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (InvocationTargetException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 2);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.getPacketType() == Server.NAMED_ENTITY_SPAWN)
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
if (event.getPacketType() == Server.ENTITY_METADATA)
|
PacketContainer packet = new PacketContainer(Server.ENTITY_METADATA);
|
||||||
{
|
|
||||||
event.setPacket(event.getPacket().deepClone());
|
|
||||||
|
|
||||||
for (WrappedWatchableObject watch : event.getPacket().getWatchableCollectionModifier().read(0))
|
StructureModifier<Object> mods = packet.getModifier();
|
||||||
{
|
|
||||||
if (watch.getIndex() == 0)
|
|
||||||
{
|
|
||||||
byte b = (byte) watch.getValue();
|
|
||||||
|
|
||||||
byte a = (byte) (b | 1 << 5);
|
mods.write(0, observer.getEntityId());
|
||||||
|
|
||||||
if ((b & 1 << 3) != 0)
|
List<WrappedWatchableObject> watchableList = new ArrayList<>();
|
||||||
a = (byte) (a | 1 << 3);
|
Byte b = 1 << 5;
|
||||||
|
|
||||||
watch.setValue(a);
|
if (observer.isSprinting())
|
||||||
}
|
b = (byte) (b | 1 << 3);
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (event.getPacketType() == Server.NAMED_ENTITY_SPAWN)
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
|
|
||||||
PacketContainer packet = new PacketContainer(Server.ENTITY_METADATA);
|
WrappedWatchableObject watch = new WrappedWatchableObject(ReflectionManager.createDataWatcherItem(0, b));
|
||||||
|
|
||||||
StructureModifier<Object> mods = packet.getModifier();
|
watchableList.add(watch);
|
||||||
|
packet.getWatchableCollectionModifier().write(0, watchableList);
|
||||||
|
|
||||||
mods.write(0, observer.getEntityId());
|
try
|
||||||
|
{
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet);
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.getPacketType() == Server.ANIMATION)
|
||||||
|
{
|
||||||
|
if (event.getPacket().getIntegers().read(1) != 2)
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.getPacketType() == Server.ATTACH_ENTITY || event.getPacketType() == Server.REL_ENTITY_MOVE
|
||||||
|
|| event.getPacketType() == Server.REL_ENTITY_MOVE_LOOK || event.getPacketType() == Server.ENTITY_LOOK
|
||||||
|
|| event.getPacketType() == Server.ENTITY_TELEPORT || event.getPacketType() == Server.ENTITY_HEAD_ROTATION
|
||||||
|
|| event.getPacketType() == Server.ENTITY_EFFECT || event.getPacketType() == Server.ENTITY_EQUIPMENT)
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
else if (event.getPacketType() == Server.ENTITY_STATUS)
|
||||||
|
{
|
||||||
|
Disguise disguise = DisguiseAPI.getDisguise(event.getPlayer(), event.getPlayer());
|
||||||
|
|
||||||
List<WrappedWatchableObject> watchableList = new ArrayList<>();
|
if (disguise.isSelfDisguiseSoundsReplaced() && !disguise.getType().isPlayer()
|
||||||
Byte b = 1 << 5;
|
&& event.getPacket().getBytes().read(0) == 2)
|
||||||
|
{
|
||||||
if (observer.isSprinting())
|
event.setCancelled(true);
|
||||||
b = (byte) (b | 1 << 3);
|
|
||||||
|
|
||||||
WrappedWatchableObject watch = new WrappedWatchableObject(ReflectionManager.createDataWatcherItem(0, b));
|
|
||||||
|
|
||||||
watchableList.add(watch);
|
|
||||||
packet.getWatchableCollectionModifier().write(0, watchableList);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet);
|
|
||||||
}
|
|
||||||
catch (InvocationTargetException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (event.getPacketType() == Server.ANIMATION)
|
|
||||||
{
|
|
||||||
if (event.getPacket().getIntegers().read(1) != 2)
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (event.getPacketType() == Server.ATTACH_ENTITY || event.getPacketType() == Server.REL_ENTITY_MOVE
|
|
||||||
|| event.getPacketType() == Server.REL_ENTITY_MOVE_LOOK || event.getPacketType() == Server.ENTITY_LOOK
|
|
||||||
|| event.getPacketType() == Server.ENTITY_TELEPORT || event.getPacketType() == Server.ENTITY_HEAD_ROTATION
|
|
||||||
|| event.getPacketType() == Server.ENTITY_EFFECT || event.getPacketType() == Server.ENTITY_EQUIPMENT)
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
else if (event.getPacketType() == Server.ENTITY_STATUS)
|
|
||||||
{
|
|
||||||
Disguise disguise = DisguiseAPI.getDisguise(event.getPlayer(), event.getPlayer());
|
|
||||||
|
|
||||||
if (disguise.isSelfDisguiseSoundsReplaced() && !disguise.getType().isPlayer()
|
|
||||||
&& event.getPacket().getBytes().read(0) == 2)
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user