9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-25 01:49:30 +00:00

添加标题图片拦截

This commit is contained in:
XiaoMoMi
2025-04-08 00:12:02 +08:00
parent 49960e1b6a
commit 9f4d0314fa
8 changed files with 94 additions and 1 deletions

View File

@@ -151,12 +151,13 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
registerNMSPacketConsumer(PacketConsumers.EDIT_BOOK, Reflections.clazz$ServerboundEditBookPacket);
registerNMSPacketConsumer(PacketConsumers.CUSTOM_PAYLOAD, Reflections.clazz$ServerboundCustomPayloadPacket);
// registerNMSPacketConsumer(PacketConsumers.SET_ENTITY_DATA, Reflections.clazz$ClientboundSetEntityDataPacket);
// registerNMSPacketConsumer(PacketConsumers.OPEN_SCREEN, Reflections.clazz$ClientboundOpenScreenPacket);
registerByteBufPacketConsumer(PacketConsumers.SECTION_BLOCK_UPDATE, this.packetIds.clientboundSectionBlocksUpdatePacket());
registerByteBufPacketConsumer(PacketConsumers.BLOCK_UPDATE, this.packetIds.clientboundBlockUpdatePacket());
registerByteBufPacketConsumer(PacketConsumers.LEVEL_PARTICLE, this.packetIds.clientboundLevelParticlesPacket());
registerByteBufPacketConsumer(PacketConsumers.LEVEL_EVENT, this.packetIds.clientboundLevelEventPacket());
registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.OPEN_SCREEN_1_20_3 : PacketConsumers.OPEN_SCREEN_1_20, this.packetIds.clientboundOpenScreenPacket());
registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.SET_TITLE_TEXT_1_20_3 : PacketConsumers.SET_TITLE_TEXT_1_20, this.packetIds.clientboundSetTitleTextPacket());
registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.SET_TITLE_TEXT_1_20_3 : PacketConsumers.SET_TITLE_TEXT_1_20, this.packetIds.clientboundSetSubtitleTextPacket());
// registerByteBufPacketConsumer(PacketConsumers.REMOVE_ENTITY, this.packetIds.clientboundRemoveEntitiesPacket());
registerByteBufPacketConsumer(PacketConsumers.ADD_ENTITY_BYTEBUFFER, this.packetIds.clientboundAddEntityPacket());
// registerByteBufPacketConsumer(PacketConsumers.SOUND, this.packetIds.clientboundSoundPacket());

View File

@@ -242,6 +242,44 @@ public class PacketConsumers {
}
};
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SET_TITLE_TEXT_1_20 = (user, event) -> {
try {
FriendlyByteBuf buf = event.getBuffer();
String json = buf.readUtf();
Map<String, String> tokens = CraftEngine.instance().imageManager().matchTags(json);
if (tokens.isEmpty()) return;
event.setChanged(true);
Component component = AdventureHelper.jsonToComponent(json);
for (Map.Entry<String, String> token : tokens.entrySet()) {
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(AdventureHelper.miniMessage().deserialize(token.getValue())));
}
buf.clear();
buf.writeVarInt(event.packetID());
buf.writeUtf(AdventureHelper.componentToJson(component));
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to handle ClientboundSet(Sub)TitleTextPacket", e);
}
};
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SET_TITLE_TEXT_1_20_3 = (user, event) -> {
try {
FriendlyByteBuf buf = event.getBuffer();
Tag nbt = buf.readNbt(false);
if (nbt == null) return;
Map<String, String> tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString());
if (tokens.isEmpty()) return;
Component component = NBTComponentSerializer.nbt().deserialize(nbt);
for (Map.Entry<String, String> token : tokens.entrySet()) {
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(AdventureHelper.miniMessage().deserialize(token.getValue())));
}
buf.clear();
buf.writeVarInt(event.packetID());
buf.writeNbt(NBTComponentSerializer.nbt().serialize(component), false);
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to handle ClientboundSet(Sub)TitleTextPacket", e);
}
};
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> OPEN_SCREEN_1_20 = (user, event) -> {
try {
FriendlyByteBuf buf = event.getBuffer();

View File

@@ -19,4 +19,8 @@ public interface PacketIds {
int clientboundRemoveEntitiesPacket();
int clientboundSetEntityDataPacket();
int clientboundSetTitleTextPacket();
int clientboundSetSubtitleTextPacket();
}

View File

@@ -48,4 +48,14 @@ public class PacketIds1_20 implements PacketIds {
public int clientboundSetEntityDataPacket() {
return 82;
}
@Override
public int clientboundSetTitleTextPacket() {
return 95;
}
@Override
public int clientboundSetSubtitleTextPacket() {
return 93;
}
}

View File

@@ -48,4 +48,14 @@ public class PacketIds1_20_2 implements PacketIds {
public int clientboundSetEntityDataPacket() {
return 84;
}
@Override
public int clientboundSetTitleTextPacket() {
return 97;
}
@Override
public int clientboundSetSubtitleTextPacket() {
return 95;
}
}

View File

@@ -48,4 +48,14 @@ public class PacketIds1_20_3 implements PacketIds {
public int clientboundSetEntityDataPacket() {
return 86;
}
@Override
public int clientboundSetTitleTextPacket() {
return 99;
}
@Override
public int clientboundSetSubtitleTextPacket() {
return 97;
}
}

View File

@@ -48,4 +48,14 @@ public class PacketIds1_20_5 implements PacketIds {
public int clientboundSetEntityDataPacket() {
return 88;
}
@Override
public int clientboundSetTitleTextPacket() {
return 101;
}
@Override
public int clientboundSetSubtitleTextPacket() {
return 99;
}
}

View File

@@ -48,4 +48,14 @@ public class PacketIds1_21 implements PacketIds {
public int clientboundSetEntityDataPacket() {
return PacketIdFinder.clientboundByName("minecraft:set_entity_data");
}
@Override
public int clientboundSetTitleTextPacket() {
return PacketIdFinder.clientboundByName("minecraft:set_title_text");
}
@Override
public int clientboundSetSubtitleTextPacket() {
return PacketIdFinder.clientboundByName("minecraft:set_subtitle_text");
}
}