Fix some packet entity data crap, fixes #61

This commit is contained in:
Badbird5907
2023-06-20 18:49:29 -04:00
parent 22503871e2
commit e0744cb736
2 changed files with 44 additions and 2 deletions

View File

@@ -26,7 +26,6 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.nuggetmc.tplus.TerminatorPlus; import net.nuggetmc.tplus.TerminatorPlus;
import net.nuggetmc.tplus.api.Terminator; import net.nuggetmc.tplus.api.Terminator;
import net.nuggetmc.tplus.api.TerminatorPlusAPI;
import net.nuggetmc.tplus.api.agent.Agent; import net.nuggetmc.tplus.api.agent.Agent;
import net.nuggetmc.tplus.api.agent.legacyagent.LegacyMats; import net.nuggetmc.tplus.api.agent.legacyagent.LegacyMats;
import net.nuggetmc.tplus.api.agent.legacyagent.ai.NeuralNetwork; import net.nuggetmc.tplus.api.agent.legacyagent.ai.NeuralNetwork;
@@ -34,6 +33,7 @@ import net.nuggetmc.tplus.api.event.BotDamageByPlayerEvent;
import net.nuggetmc.tplus.api.event.BotFallDamageEvent; import net.nuggetmc.tplus.api.event.BotFallDamageEvent;
import net.nuggetmc.tplus.api.event.BotKilledByPlayerEvent; import net.nuggetmc.tplus.api.event.BotKilledByPlayerEvent;
import net.nuggetmc.tplus.api.utils.*; import net.nuggetmc.tplus.api.utils.*;
import net.nuggetmc.tplus.utils.NMSUtils;
import org.bukkit.*; import org.bukkit.*;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
@@ -208,7 +208,7 @@ public class Bot extends ServerPlayer implements Terminator {
new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, this), new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, this),
new ClientboundAddPlayerPacket(this), new ClientboundAddPlayerPacket(this),
//new ClientboundSetEntityDataPacket(this.getId(), this.entityData, true), //new ClientboundSetEntityDataPacket(this.getId(), this.entityData, true),
new ClientboundSetEntityDataPacket(this.getId(), this.entityData.packDirty()), new ClientboundSetEntityDataPacket(this.getId(), NMSUtils.getEntityData(this.entityData)),
new ClientboundRotateHeadPacket(this, (byte) ((this.yHeadRot * 256f) / 360f)) new ClientboundRotateHeadPacket(this, (byte) ((this.yHeadRot * 256f) / 360f))
}; };
} }

View File

@@ -0,0 +1,42 @@
package net.nuggetmc.tplus.utils;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.network.syncher.SynchedEntityData;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
public class NMSUtils {
private static String itemsByIdFieldName;
static {
// find a private final field in SynchedEntityData that is an Int2ObjectMap<SynchedEntityData.DataItem>
Class<SynchedEntityData> clazz = SynchedEntityData.class;
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.getType().equals(Int2ObjectMap.class) && Modifier.isPrivate(field.getModifiers()) && Modifier.isFinal(field.getModifiers())) {
itemsByIdFieldName = field.getName();
break;
}
}
if (itemsByIdFieldName == null) {
throw new RuntimeException("Could not find itemsById field in SynchedEntityData");
}
}
public static List<SynchedEntityData.DataValue<?>> getEntityData(SynchedEntityData synchedEntityData) {
Int2ObjectMap<SynchedEntityData.DataItem> map = null;
try {
Field field = synchedEntityData.getClass().getDeclaredField(itemsByIdFieldName);
field.setAccessible(true);
map = (Int2ObjectMap<SynchedEntityData.DataItem>) field.get(synchedEntityData);
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}
List<SynchedEntityData.DataValue<?>> entityData = new ArrayList<>();
for (SynchedEntityData.DataItem<?> dataItem : map.values()) {
entityData.add(dataItem .value());
}
return entityData;
}
}