Read desc
Fixed disguises facing direction not updating automatically to the correct direction. Its not 100% perfect, but the alternative is to delay the packet another tick which is not realistic as people could change disguises in that time.
This commit is contained in:
parent
2f85d35df1
commit
94a7237803
@ -80,18 +80,22 @@ public class PacketsManager {
|
|||||||
else {
|
else {
|
||||||
event.setPacket(packets[0]);
|
event.setPacket(packets[0]);
|
||||||
final PacketContainer[] delayedPackets = new PacketContainer[packets.length - 1];
|
final PacketContainer[] delayedPackets = new PacketContainer[packets.length - 1];
|
||||||
for (int i = 1; i < packets.length; i++)
|
for (int i = 1; i < packets.length; i++) {
|
||||||
delayedPackets[i - 1] = packets[i];
|
delayedPackets[i - 1] = packets[i];
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
}
|
||||||
public void run() {
|
if (delayedPackets.length > 0) {
|
||||||
try {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
||||||
for (PacketContainer packet : delayedPackets)
|
public void run() {
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet);
|
try {
|
||||||
} catch (InvocationTargetException e) {
|
for (PacketContainer packet : delayedPackets) {
|
||||||
e.printStackTrace();
|
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
||||||
|
}
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -290,7 +294,7 @@ public class PacketsManager {
|
|||||||
spawnPackets[1] = new PacketContainer(Packets.Server.ENTITY_HEAD_ROTATION);
|
spawnPackets[1] = new PacketContainer(Packets.Server.ENTITY_HEAD_ROTATION);
|
||||||
StructureModifier<Object> mods = spawnPackets[1].getModifier();
|
StructureModifier<Object> mods = spawnPackets[1].getModifier();
|
||||||
mods.write(0, disguisedEntity.getEntityId());
|
mods.write(0, disguisedEntity.getEntityId());
|
||||||
mods.write(1, (byte) (int) Math.floor(loc.getYaw() * 256.0F / 360.0F));
|
mods.write(1, yaw);
|
||||||
}
|
}
|
||||||
return spawnPackets;
|
return spawnPackets;
|
||||||
}
|
}
|
||||||
@ -624,15 +628,35 @@ public class PacketsManager {
|
|||||||
if (fakeId > 0) {
|
if (fakeId > 0) {
|
||||||
// Here I grab the packets to convert them to, So I can display them as if the disguise sent them.
|
// Here I grab the packets to convert them to, So I can display them as if the disguise sent them.
|
||||||
PacketContainer[] packets = transformPacket(event.getPacket(), event.getPlayer());
|
PacketContainer[] packets = transformPacket(event.getPacket(), event.getPlayer());
|
||||||
try {
|
final PacketContainer[] delayedPackets = new PacketContainer[packets.length - 1];
|
||||||
for (PacketContainer packet : packets) {
|
final Player observer = event.getPlayer();
|
||||||
if (packet.equals(event.getPacket()))
|
for (int i = 0; i < packets.length; i++) {
|
||||||
packet = packet.deepClone();
|
PacketContainer packet = packets[i];
|
||||||
packet.getModifier().write(0, fakeId);
|
if (packet.equals(event.getPacket()))
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false);
|
packet = packet.deepClone();
|
||||||
|
packet.getModifier().write(0, fakeId);
|
||||||
|
if (i == 0) {
|
||||||
|
try {
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
delayedPackets[i - 1] = packets[i];
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
}
|
||||||
ex.printStackTrace();
|
if (delayedPackets.length > 0) {
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
for (PacketContainer packet : delayedPackets) {
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
||||||
|
}
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getPacketID() == Packets.Server.ENTITY_METADATA) {
|
if (event.getPacketID() == Packets.Server.ENTITY_METADATA) {
|
||||||
@ -652,6 +676,22 @@ public class PacketsManager {
|
|||||||
} else {
|
} else {
|
||||||
switch (event.getPacketID()) {
|
switch (event.getPacketID()) {
|
||||||
case Packets.Server.NAMED_ENTITY_SPAWN:
|
case Packets.Server.NAMED_ENTITY_SPAWN:
|
||||||
|
PacketContainer packet = new PacketContainer(Packets.Server.ENTITY_METADATA);
|
||||||
|
StructureModifier<Object> mods = packet.getModifier();
|
||||||
|
mods.write(0, entity.getEntityId());
|
||||||
|
List<WrappedWatchableObject> watchableList = new ArrayList<WrappedWatchableObject>();
|
||||||
|
byte b = (byte) (0 | 1 << 5);
|
||||||
|
if (event.getPlayer().isSprinting())
|
||||||
|
b = (byte) (b | 1 << 3);
|
||||||
|
watchableList.add(new WrappedWatchableObject(0, b));
|
||||||
|
packet.getWatchableCollectionModifier().write(0, watchableList);
|
||||||
|
try {
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
event.setCancelled(true);
|
||||||
|
break;
|
||||||
case Packets.Server.ATTACH_ENTITY:
|
case Packets.Server.ATTACH_ENTITY:
|
||||||
case Packets.Server.REL_ENTITY_MOVE:
|
case Packets.Server.REL_ENTITY_MOVE:
|
||||||
case Packets.Server.REL_ENTITY_MOVE_LOOK:
|
case Packets.Server.REL_ENTITY_MOVE_LOOK:
|
||||||
@ -660,22 +700,6 @@ public class PacketsManager {
|
|||||||
case Packets.Server.ENTITY_HEAD_ROTATION:
|
case Packets.Server.ENTITY_HEAD_ROTATION:
|
||||||
case Packets.Server.MOB_EFFECT:
|
case Packets.Server.MOB_EFFECT:
|
||||||
case Packets.Server.ENTITY_EQUIPMENT:
|
case Packets.Server.ENTITY_EQUIPMENT:
|
||||||
if (event.getPacketID() == Packets.Server.NAMED_ENTITY_SPAWN) {
|
|
||||||
PacketContainer packet = new PacketContainer(Packets.Server.ENTITY_METADATA);
|
|
||||||
StructureModifier<Object> mods = packet.getModifier();
|
|
||||||
mods.write(0, entity.getEntityId());
|
|
||||||
List<WrappedWatchableObject> watchableList = new ArrayList<WrappedWatchableObject>();
|
|
||||||
byte b = (byte) (0 | 1 << 5);
|
|
||||||
if (event.getPlayer().isSprinting())
|
|
||||||
b = (byte) (b | 1 << 3);
|
|
||||||
watchableList.add(new WrappedWatchableObject(0, b));
|
|
||||||
packet.getWatchableCollectionModifier().write(0, watchableList);
|
|
||||||
try {
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user