From b2b0ca1cd10f9986bdfcef18f071f7e9190ac6ad Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 30 Jun 2019 13:14:47 +0200 Subject: [PATCH] Fix recording of certain mobs on Hypixel For some reason hypixel is sending duplicate entity meta data entries in their spawn packets. We'll now be ignoring all but the last one for each id (should match how vanilla handles these). --- .../recording/packet/PacketListener.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/replaymod/recording/packet/PacketListener.java b/src/main/java/com/replaymod/recording/packet/PacketListener.java index 11457ecd..7a9a5a9c 100755 --- a/src/main/java/com/replaymod/recording/packet/PacketListener.java +++ b/src/main/java/com/replaymod/recording/packet/PacketListener.java @@ -1,5 +1,6 @@ package com.replaymod.recording.packet; +import com.google.common.collect.Lists; import com.google.gson.Gson; import com.replaymod.core.ReplayMod; import com.replaymod.core.utils.Restrictions; @@ -317,12 +318,15 @@ public class PacketListener extends ChannelInboundHandlerAdapter { if (pa.getDataManager() == null) { pa.setDataManager(new DataTracker(null)); if (p.getTrackedValues() != null) { + Set seen = new HashSet<>(); //#if MC>=10904 - for (DataTracker.Entry entry : p.getTrackedValues()) { + for (DataTracker.Entry entry : Lists.reverse(p.getTrackedValues())) { + if (!seen.add(entry.getData().getId())) continue; DataManager_set(pa.getDataManager(), entry); } //#else - //$$ for(DataWatcher.WatchableObject wo : (List) p.func_149027_c()) { + //$$ for(DataWatcher.WatchableObject wo : Lists.reverse((List) p.func_149027_c())) { + //$$ if (!seen.add(wo.getDataValueId())) continue; //$$ pa.getDataManager().addObject(wo.getDataValueId(), wo.getObject()); //$$ } //#endif @@ -336,12 +340,15 @@ public class PacketListener extends ChannelInboundHandlerAdapter { if (pa.getDataManager() == null) { pa.setDataManager(new DataTracker(null)); if (p.getTrackedValues() != null) { + Set seen = new HashSet<>(); //#if MC>=10904 - for (DataTracker.Entry entry : p.getTrackedValues()) { + for (DataTracker.Entry entry : Lists.reverse(p.getTrackedValues())) { + if (!seen.add(entry.getData().getId())) continue; DataManager_set(pa.getDataManager(), entry); } //#else - //$$ for(DataWatcher.WatchableObject wo : (List) p.func_148944_c()) { + //$$ for(DataWatcher.WatchableObject wo : Lists.reverse((List) p.func_148944_c())) { + //$$ if (!seen.add(wo.getDataValueId())) continue; //$$ pa.getDataManager().addObject(wo.getDataValueId(), wo.getObject()); //$$ } //#endif