Skip to content

Commit

Permalink
packet handler improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Jan 5, 2021
1 parent fe7beeb commit 8b090bf
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 17 deletions.
Expand Up @@ -65,7 +65,7 @@ public static boolean handleAlteredProfiles(PacketPlayOutPlayerInfo packet, Deni
return true;
}
PacketPlayOutPlayerInfo.EnumPlayerInfoAction action = ReflectionHelper.getFieldValue(PacketPlayOutPlayerInfo.class, "a", packet);
if (action != PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER) {
if (action != PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER && action != PacketPlayOutPlayerInfo.EnumPlayerInfoAction.UPDATE_DISPLAY_NAME) {
return true;
}
List dataList = ReflectionHelper.getFieldValue(PacketPlayOutPlayerInfo.class, "b", packet);
Expand All @@ -87,14 +87,14 @@ public static boolean handleAlteredProfiles(PacketPlayOutPlayerInfo packet, Deni
for (Object data : dataList) {
GameProfile gameProfile = (GameProfile) playerInfoData_gameProfile.get(data);
if (!ProfileEditor.mirrorUUIDs.contains(gameProfile.getId()) && !RenameCommand.customNames.containsKey(gameProfile.getId())) {
PacketPlayOutPlayerInfo newPacket = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER);
PacketPlayOutPlayerInfo newPacket = new PacketPlayOutPlayerInfo(action);
List newPacketDataList = ReflectionHelper.getFieldValue(PacketPlayOutPlayerInfo.class, "b", newPacket);
newPacketDataList.add(data);
manager.oldManager.sendPacket(newPacket);
}
else {
String rename = RenameCommand.getCustomNameFor(gameProfile.getId(), manager.player.getBukkitEntity(), false);
PacketPlayOutPlayerInfo newPacket = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER);
PacketPlayOutPlayerInfo newPacket = new PacketPlayOutPlayerInfo(action);
List newPacketDataList = ReflectionHelper.getFieldValue(PacketPlayOutPlayerInfo.class, "b", newPacket);
GameProfile patchedProfile = new GameProfile(gameProfile.getId(), rename != null ? (rename.length() > 16 ? rename.substring(0, 16) : rename) : gameProfile.getName());
if (ProfileEditor.mirrorUUIDs.contains(gameProfile.getId())) {
Expand Down
Expand Up @@ -177,11 +177,11 @@ public void sendPacket(Packet<?> packet, GenericFutureListener<? extends Future<
|| processPacketHandlerForPacket(packet)
|| processMirrorForPacket(packet)
|| processDisguiseForPacket(packet, genericfuturelistener)
|| processCustomNameForPacket(packet, genericfuturelistener)
|| processShowFakeForPacket(packet, genericfuturelistener)) {
return;
}
processBlockLightForPacket(packet);
processCustomNameForPacket(packet);
oldManager.sendPacket(packet, genericfuturelistener);
}

Expand Down Expand Up @@ -227,7 +227,8 @@ public boolean processDisguiseForPacket(Packet<?> packet, GenericFutureListener<
byte flags = (byte) item.b();
flags |= 0x20; // Invisible flag
data.add(new DataWatcher.Item(watcherObject, flags));
oldManager.sendPacket(altPacket, genericfuturelistener);
PacketPlayOutEntityMetadata updatedPacket = getModifiedMetadataFor(altPacket);
oldManager.sendPacket(updatedPacket == null ? altPacket : updatedPacket, genericfuturelistener);
return true;
}
}
Expand Down Expand Up @@ -278,39 +279,69 @@ else if (packet instanceof PacketPlayOutSpawnEntityLiving) {
return false;
}

public void processCustomNameForPacket(Packet<?> packet) {
if (!(packet instanceof PacketPlayOutEntityMetadata)) {
return;
}
public PacketPlayOutEntityMetadata getModifiedMetadataFor(PacketPlayOutEntityMetadata metadataPacket) {
if (!RenameCommand.hasAnyDynamicRenames()) {
return;
return null;
}
PacketPlayOutEntityMetadata metadataPacket = (PacketPlayOutEntityMetadata) packet;
try {
int eid = ENTITY_METADATA_EID.getInt(metadataPacket);
Entity ent = player.world.getEntity(eid);
if (ent == null) {
return; // If it doesn't exist on-server, it's definitely not relevant, so move on
return null; // If it doesn't exist on-server, it's definitely not relevant, so move on
}
String nameToApply = RenameCommand.getCustomNameFor(ent.getUniqueID(), player.getBukkitEntity(), false);
if (nameToApply == null) {
return;
return null;
}
List<DataWatcher.Item<?>> data = (List<DataWatcher.Item<?>>) ENTITY_METADATA_LIST.get(metadataPacket);
for (DataWatcher.Item item : data) {
List<DataWatcher.Item<?>> data = new ArrayList<>((List<DataWatcher.Item<?>>) ENTITY_METADATA_LIST.get(metadataPacket));
boolean any = false;
for (int i = 0; i < data.size(); i++) {
DataWatcher.Item<?> item = data.get(i);
DataWatcherObject<?> watcherObject = item.a();
int watcherId = watcherObject.a();
if (watcherId == 2) { // 2: Custom name metadata
Optional<IChatBaseComponent> name = Optional.of(Handler.componentToNMS(FormattedTextHelper.parse(nameToApply, ChatColor.WHITE)));
item.a(name);
data.set(i, new DataWatcher.Item(item.a(), name));
any = true;
}
else if (watcherId == 3) { // 3: custom name visible metadata
item.a(true);
data.set(i, new DataWatcher.Item(item.a(), true));
any = true;
}
}
if (!any) {
return null;
}
PacketPlayOutEntityMetadata altPacket = new PacketPlayOutEntityMetadata();
copyPacket(metadataPacket, altPacket);
ENTITY_METADATA_LIST.set(altPacket, data);
return altPacket;
}
catch (Throwable ex) {
Debug.echoError(ex);
return null;
}
}

public boolean processCustomNameForPacket(Packet<?> packet, GenericFutureListener<? extends Future<? super Void>> genericfuturelistener) {
if (!(packet instanceof PacketPlayOutEntityMetadata)) {
return false;
}
if (!RenameCommand.hasAnyDynamicRenames()) {
return false;
}
PacketPlayOutEntityMetadata metadataPacket = (PacketPlayOutEntityMetadata) packet;
try {
PacketPlayOutEntityMetadata altPacket = getModifiedMetadataFor(metadataPacket);
if (altPacket == null) {
return false;
}
oldManager.sendPacket(altPacket, genericfuturelistener);
return true;
}
catch (Throwable ex) {
Debug.echoError(ex);
return false;
}
}

Expand Down

0 comments on commit 8b090bf

Please sign in to comment.