mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-25 01:49:30 +00:00
@@ -128,6 +128,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
registerNMSPacketConsumer(PacketConsumers.SIGN_UPDATE, Reflections.clazz$ServerboundSignUpdatePacket);
|
||||
registerNMSPacketConsumer(PacketConsumers.EDIT_BOOK, Reflections.clazz$ServerboundEditBookPacket);
|
||||
registerNMSPacketConsumer(PacketConsumers.CUSTOM_PAYLOAD, Reflections.clazz$ServerboundCustomPayloadPacket);
|
||||
registerNMSPacketConsumer(PacketConsumers.SET_ENTITY_DATA, Reflections.clazz$ClientboundSetEntityDataPacket);
|
||||
registerByteBufPacketConsumer(PacketConsumers.SECTION_BLOCK_UPDATE, this.packetIds.clientboundSectionBlocksUpdatePacket());
|
||||
registerByteBufPacketConsumer(PacketConsumers.BLOCK_UPDATE, this.packetIds.clientboundBlockUpdatePacket());
|
||||
registerByteBufPacketConsumer(PacketConsumers.LEVEL_PARTICLE, this.packetIds.clientboundLevelParticlesPacket());
|
||||
|
||||
@@ -961,4 +961,41 @@ public class PacketConsumers {
|
||||
CraftEngine.instance().logger().warn("Failed to handle ServerboundCustomPayloadPacket", e);
|
||||
}
|
||||
};
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static final TriConsumer<NetWorkUser, NMSPacketEvent, Object> SET_ENTITY_DATA = (user, event, packet) -> {
|
||||
try {
|
||||
int id = (int) Reflections.field$ClientboundSetEntityDataPacket$id.get(packet);
|
||||
Object player = user.serverPlayer();
|
||||
Object level = Reflections.method$Entity$level.invoke(player);
|
||||
Object entityLookup = Reflections.method$Level$moonrise$getEntityLookup.invoke(level);
|
||||
Object entity = Reflections.method$EntityLookup$get.invoke(entityLookup, id);
|
||||
if (entity == null) return;
|
||||
Object entityType = Reflections.method$Entity$getType.invoke(entity);
|
||||
if (entityType != Reflections.instance$EntityType$BLOCK_DISPLAY) return;
|
||||
List<Object> packedItems = (List<Object>) Reflections.field$ClientboundSetEntityDataPacket$packedItems.get(packet);
|
||||
for (int i = 0; i < packedItems.size(); i++) {
|
||||
Object packedItem = packedItems.get(i);
|
||||
int entityDataId = (int) Reflections.field$SynchedEntityData$DataValue$id.get(packedItem);
|
||||
if ((VersionHelper.isVersionNewerThan1_20_2() && entityDataId != 23)
|
||||
|| (!VersionHelper.isVersionNewerThan1_20_2() && entityDataId != 22)) {
|
||||
continue;
|
||||
}
|
||||
Object blockState = Reflections.field$SynchedEntityData$DataValue$value.get(packedItem);
|
||||
Object serializer = Reflections.field$SynchedEntityData$DataValue$serializer.get(packedItem);
|
||||
int stateId = BlockStateUtils.blockStateToId(blockState);
|
||||
int newStateId;
|
||||
if (!user.clientModEnabled()) {
|
||||
newStateId = remap(stateId);
|
||||
} else {
|
||||
newStateId = remapMOD(stateId);
|
||||
}
|
||||
packedItems.set(i, Reflections.constructor$SynchedEntityData$DataValue.newInstance(
|
||||
entityDataId, serializer, BlockStateUtils.idToBlockState(newStateId)
|
||||
));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetEntityDataPacket", e);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -809,6 +809,12 @@ public class Reflections {
|
||||
)
|
||||
);
|
||||
|
||||
public static final Field field$SynchedEntityData$DataValue$serializer = requireNonNull(
|
||||
ReflectionUtils.getDeclaredField(
|
||||
clazz$SynchedEntityData$DataValue, 1
|
||||
)
|
||||
);
|
||||
|
||||
public static final Field field$SynchedEntityData$DataValue$value = requireNonNull(
|
||||
ReflectionUtils.getDeclaredField(
|
||||
clazz$SynchedEntityData$DataValue, 2
|
||||
@@ -3666,6 +3672,7 @@ public class Reflections {
|
||||
|
||||
public static final Object instance$EntityType$TEXT_DISPLAY;
|
||||
public static final Object instance$EntityType$ITEM_DISPLAY;
|
||||
public static final Object instance$EntityType$BLOCK_DISPLAY;
|
||||
public static final Object instance$EntityType$FALLING_BLOCK;
|
||||
public static final Object instance$EntityType$INTERACTION;
|
||||
public static final Object instance$EntityType$SHULKER;
|
||||
@@ -3676,6 +3683,8 @@ public class Reflections {
|
||||
instance$EntityType$TEXT_DISPLAY = Reflections.method$Registry$get.invoke(Reflections.instance$BuiltInRegistries$ENTITY_TYPE, textDisplay);
|
||||
Object itemDisplay = method$ResourceLocation$fromNamespaceAndPath.invoke(null, "minecraft", "item_display");
|
||||
instance$EntityType$ITEM_DISPLAY = Reflections.method$Registry$get.invoke(Reflections.instance$BuiltInRegistries$ENTITY_TYPE, itemDisplay);
|
||||
Object blockDisplay = method$ResourceLocation$fromNamespaceAndPath.invoke(null, "minecraft", "block_display");
|
||||
instance$EntityType$BLOCK_DISPLAY = Reflections.method$Registry$get.invoke(Reflections.instance$BuiltInRegistries$ENTITY_TYPE, blockDisplay);
|
||||
Object fallingBlock = method$ResourceLocation$fromNamespaceAndPath.invoke(null, "minecraft", "falling_block");
|
||||
instance$EntityType$FALLING_BLOCK = Reflections.method$Registry$get.invoke(Reflections.instance$BuiltInRegistries$ENTITY_TYPE, fallingBlock);
|
||||
Object interaction = method$ResourceLocation$fromNamespaceAndPath.invoke(null, "minecraft", "interaction");
|
||||
@@ -6056,4 +6065,36 @@ public class Reflections {
|
||||
clazz$ClientboundMoveEntityPacket$Pos, int.class, short.class, short.class, short.class, boolean.class
|
||||
)
|
||||
);
|
||||
|
||||
public static final Method method$Entity$getType = requireNonNull(
|
||||
ReflectionUtils.getMethod(
|
||||
clazz$Entity, clazz$EntityType
|
||||
)
|
||||
);
|
||||
|
||||
public static final Constructor<?> constructor$SynchedEntityData$DataValue = requireNonNull(
|
||||
ReflectionUtils.getConstructor(
|
||||
clazz$SynchedEntityData$DataValue, int.class, clazz$EntityDataSerializer, Object.class
|
||||
)
|
||||
);
|
||||
|
||||
public static final Class<?> clazz$EntityLookup = requireNonNull(
|
||||
ReflectionUtils.getClazz(
|
||||
"ca.spottedleaf.moonrise.patches.chunk_system.level.entity.EntityLookup",
|
||||
"io.papermc.paper.chunk.system.entity.EntityLookup"
|
||||
)
|
||||
);
|
||||
|
||||
public static final Method method$Level$moonrise$getEntityLookup = requireNonNull(
|
||||
ReflectionUtils.getMethod(
|
||||
VersionHelper.isVersionNewerThan1_21() ? clazz$Level : clazz$ServerLevel,
|
||||
clazz$EntityLookup
|
||||
)
|
||||
);
|
||||
|
||||
public static final Method method$EntityLookup$get = requireNonNull(
|
||||
ReflectionUtils.getMethod(
|
||||
clazz$EntityLookup, clazz$Entity, int.class
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user