mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-26 02:19:23 +00:00
perf(network): 优化实体数据处理性能
This commit is contained in:
@@ -149,7 +149,6 @@ 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());
|
||||
@@ -164,7 +163,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
registerByteBufPacketConsumer(PacketConsumers.REMOVE_ENTITY, this.packetIds.clientboundRemoveEntitiesPacket());
|
||||
registerByteBufPacketConsumer(PacketConsumers.ADD_ENTITY_BYTEBUFFER, this.packetIds.clientboundAddEntityPacket());
|
||||
// registerByteBufPacketConsumer(PacketConsumers.SOUND, this.packetIds.clientboundSoundPacket());
|
||||
// registerByteBufPacketConsumer(PacketConsumers.SET_ENTITY_DATA, this.packetIds.clientboundSetEntityDataPacket());
|
||||
registerByteBufPacketConsumer(PacketConsumers.SET_ENTITY_DATA, this.packetIds.clientboundSetEntityDataPacket());
|
||||
}
|
||||
|
||||
public static BukkitNetworkManager instance() {
|
||||
|
||||
@@ -1398,89 +1398,45 @@ public class PacketConsumers {
|
||||
};
|
||||
|
||||
|
||||
// TODO 需要修复
|
||||
// @SuppressWarnings("unchecked")
|
||||
// public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SET_ENTITY_DATA = (user, event) -> {
|
||||
// try {
|
||||
// FriendlyByteBuf buf = event.getBuffer();
|
||||
// int id = buf.readVarInt();
|
||||
// Object entityType = user.entityView().get(id);
|
||||
// if (entityType == Reflections.instance$EntityType$BLOCK_DISPLAY) {
|
||||
// Object registryFriendlyByteBuf = FastNMS.INSTANCE.constructor$RegistryFriendlyByteBuf(buf, Reflections.instance$registryAccess);
|
||||
// boolean isChanged = false;
|
||||
// List<Object> packedItems = (List<Object>) Reflections.method$ClientboundSetEntityDataPacket$unpack.invoke(null, registryFriendlyByteBuf);
|
||||
// for (int i = 0; i < packedItems.size(); i++) {
|
||||
// Object packedItem = packedItems.get(i);
|
||||
// int entityDataId = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$id(packedItem);
|
||||
// if (entityDataId != EntityDataUtils.BLOCK_STATE_DATA_ID) {
|
||||
// continue;
|
||||
// }
|
||||
// Object blockState = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$value(packedItem);
|
||||
// int stateId = BlockStateUtils.blockStateToId(blockState);
|
||||
// int newStateId;
|
||||
// if (!user.clientModEnabled()) {
|
||||
// newStateId = remap(stateId);
|
||||
// } else {
|
||||
// newStateId = remapMOD(stateId);
|
||||
// }
|
||||
// Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
||||
// packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(
|
||||
// entityDataId, serializer, BlockStateUtils.idToBlockState(newStateId)
|
||||
// ));
|
||||
// isChanged = true;
|
||||
// break;
|
||||
// }
|
||||
// if (isChanged) {
|
||||
// System.out.println("Changed");
|
||||
// event.setChanged(true);
|
||||
// buf.clear();
|
||||
// buf.writeVarInt(event.packetID());
|
||||
// Reflections.method$ClientboundSetEntityDataPacket$pack.invoke(null, packedItems, registryFriendlyByteBuf);
|
||||
// }
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// CraftEngine.instance().logger().warn("Failed to handle ClientboundSetEntityDataPacket", e);
|
||||
// }
|
||||
// };
|
||||
|
||||
// 之前的旧东西经供参考需要改成使用bytebuffer的
|
||||
// public static final TriConsumer<NetWorkUser, NMSPacketEvent, Object> SET_ENTITY_DATA = (user, event, packet) -> {
|
||||
// try {
|
||||
// int id = FastNMS.INSTANCE.field$ClientboundSetEntityDataPacket$id(packet);
|
||||
// Object entityType = user.entityView().get(id);
|
||||
// if (entityType == Reflections.instance$EntityType$BLOCK_DISPLAY) {
|
||||
// List<Object> packedItems = FastNMS.INSTANCE.field$ClientboundSetEntityDataPacket$packedItems(packet);
|
||||
// for (int i = 0; i < packedItems.size(); i++) {
|
||||
// Object packedItem = packedItems.get(i);
|
||||
// int entityDataId = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$id(packedItem);
|
||||
// if (entityDataId != EntityDataUtils.BLOCK_STATE_DATA_ID) {
|
||||
// continue;
|
||||
// }
|
||||
// Object blockState = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$value(packedItem);
|
||||
// int stateId = BlockStateUtils.blockStateToId(blockState);
|
||||
// int newStateId;
|
||||
// if (!user.clientModEnabled()) {
|
||||
// newStateId = remap(stateId);
|
||||
// } else {
|
||||
// newStateId = remapMOD(stateId);
|
||||
// }
|
||||
// Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
||||
// packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(
|
||||
// entityDataId, serializer, BlockStateUtils.idToBlockState(newStateId)
|
||||
// ));
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// CraftEngine.instance().logger().warn("Failed to handle ClientboundSetEntityDataPacket", e);
|
||||
// }
|
||||
// };
|
||||
|
||||
// public static final TriConsumer<NetWorkUser, NMSPacketEvent, Object> OPEN_SCREEN = (user, event, packet) -> {
|
||||
// try {
|
||||
//
|
||||
// } catch (Exception e) {
|
||||
// CraftEngine.instance().logger().warn("Failed to handle ClientboundOpenScreenPacket", e);
|
||||
// }
|
||||
// };
|
||||
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SET_ENTITY_DATA = (user, event) -> {
|
||||
try {
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
int id = buf.readVarInt();
|
||||
Object entityType = user.entityView().get(id);
|
||||
if (entityType == Reflections.instance$EntityType$BLOCK_DISPLAY) {
|
||||
boolean isChanged = false;
|
||||
List<Object> packedItems = FastNMS.INSTANCE.method$ClientboundSetEntityDataPacket$unpack(buf);
|
||||
for (int i = 0; i < packedItems.size(); i++) {
|
||||
Object packedItem = packedItems.get(i);
|
||||
int entityDataId = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$id(packedItem);
|
||||
if (entityDataId != EntityDataUtils.BLOCK_STATE_DATA_ID) {
|
||||
continue;
|
||||
}
|
||||
Object blockState = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$value(packedItem);
|
||||
int stateId = BlockStateUtils.blockStateToId(blockState);
|
||||
int newStateId;
|
||||
if (!user.clientModEnabled()) {
|
||||
newStateId = remap(stateId);
|
||||
} else {
|
||||
newStateId = remapMOD(stateId);
|
||||
}
|
||||
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
||||
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(
|
||||
entityDataId, serializer, BlockStateUtils.idToBlockState(newStateId)
|
||||
));
|
||||
isChanged = true;
|
||||
break;
|
||||
}
|
||||
if (isChanged) {
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
buf.writeVarInt(event.packetID());
|
||||
buf.writeVarInt(id);
|
||||
FastNMS.INSTANCE.method$ClientboundSetEntityDataPacket$pack(packedItems, buf);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetEntityDataPacket", e);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2824,7 +2824,7 @@ public class Reflections {
|
||||
|
||||
static {
|
||||
try {
|
||||
if (VersionHelper.isVersionNewerThan1_20_5()) {
|
||||
if (VersionHelper.isVersionNewerThan1_20_5() && method$Registry$getHolder0 != null) {
|
||||
Object block_break_speed = method$ResourceLocation$fromNamespaceAndPath.invoke(null, "minecraft", VersionHelper.isVersionNewerThan1_21_2() ? "block_break_speed" : "player.block_break_speed");
|
||||
@SuppressWarnings("unchecked")
|
||||
Optional<Object> breakSpeedHolder = (Optional<Object>) method$Registry$getHolder0.invoke(instance$BuiltInRegistries$ATTRIBUTE, block_break_speed);
|
||||
@@ -3335,8 +3335,8 @@ public class Reflections {
|
||||
instance$ItemStack$EMPTY = requireNonNull(
|
||||
ReflectionUtils.getDeclaredField(
|
||||
clazz$ItemStack, clazz$ItemStack, 0
|
||||
).get(null)
|
||||
);
|
||||
)
|
||||
).get(null);
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
@@ -6245,7 +6245,7 @@ public class Reflections {
|
||||
// 1.21.2+
|
||||
static {
|
||||
try {
|
||||
if (VersionHelper.isVersionNewerThan1_21_2()) {
|
||||
if (VersionHelper.isVersionNewerThan1_21_2() && method$ParticleStatus$values != null) {
|
||||
Object[] values = (Object[]) method$ParticleStatus$values.invoke(null);
|
||||
instance$ParticleStatus$ALL = values[0];
|
||||
instance$ParticleStatus$DECREASED = values[1];
|
||||
@@ -6280,17 +6280,4 @@ public class Reflections {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
// 先注释后面再说
|
||||
// public static final Method method$ClientboundSetEntityDataPacket$pack = requireNonNull(
|
||||
// ReflectionUtils.getDeclaredMethod(
|
||||
// clazz$ClientboundSetEntityDataPacket, void.class, List.class, clazz$RegistryFriendlyByteBuf
|
||||
// )
|
||||
// );
|
||||
//
|
||||
// public static final Method method$ClientboundSetEntityDataPacket$unpack = requireNonNull(
|
||||
// ReflectionUtils.getDeclaredMethod(
|
||||
// clazz$ClientboundSetEntityDataPacket, List.class, clazz$RegistryFriendlyByteBuf
|
||||
// )
|
||||
// );
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ byte_buddy_version=1.17.5
|
||||
ahocorasick_version=0.6.3
|
||||
snake_yaml_version=2.4
|
||||
anti_grief_version=0.13
|
||||
nms_helper_version=0.45
|
||||
nms_helper_version=0.46
|
||||
# Ignite Dependencies
|
||||
mixinextras_version=0.4.1
|
||||
mixin_version=0.15.2+mixin.0.8.7
|
||||
|
||||
Reference in New Issue
Block a user