9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-23 08:59:27 +00:00

添加Tab footer header,消息拦截

This commit is contained in:
XiaoMoMi
2025-04-08 02:14:19 +08:00
parent 168838da91
commit bfc02b6baf
8 changed files with 170 additions and 1 deletions

View File

@@ -160,6 +160,8 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.SET_TEXT_1_20_3 : PacketConsumers.SET_TEXT_1_20, this.packetIds.clientboundSetSubtitleTextPacket()); registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.SET_TEXT_1_20_3 : PacketConsumers.SET_TEXT_1_20, this.packetIds.clientboundSetSubtitleTextPacket());
registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.SET_TEXT_1_20_3 : PacketConsumers.SET_TEXT_1_20, this.packetIds.clientboundSetActionBarTextPacket()); registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.SET_TEXT_1_20_3 : PacketConsumers.SET_TEXT_1_20, this.packetIds.clientboundSetActionBarTextPacket());
registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.BOSS_EVENT_1_20_3 : PacketConsumers.BOSS_EVENT_1_20, this.packetIds.clientboundBossEventPacket()); registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.BOSS_EVENT_1_20_3 : PacketConsumers.BOSS_EVENT_1_20, this.packetIds.clientboundBossEventPacket());
registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.SYSTEM_CHAT_1_20_3 : PacketConsumers.SYSTEM_CHAT_1_20, this.packetIds.clientboundSystemChatPacket());
registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.TAB_LIST_1_20_3 : PacketConsumers.TAB_LIST_1_20, this.packetIds.clientboundTabListPacket());
// registerByteBufPacketConsumer(PacketConsumers.REMOVE_ENTITY, this.packetIds.clientboundRemoveEntitiesPacket()); // registerByteBufPacketConsumer(PacketConsumers.REMOVE_ENTITY, this.packetIds.clientboundRemoveEntitiesPacket());
registerByteBufPacketConsumer(PacketConsumers.ADD_ENTITY_BYTEBUFFER, this.packetIds.clientboundAddEntityPacket()); registerByteBufPacketConsumer(PacketConsumers.ADD_ENTITY_BYTEBUFFER, this.packetIds.clientboundAddEntityPacket());
// registerByteBufPacketConsumer(PacketConsumers.SOUND, this.packetIds.clientboundSoundPacket()); // registerByteBufPacketConsumer(PacketConsumers.SOUND, this.packetIds.clientboundSoundPacket());

View File

@@ -5,7 +5,6 @@ import io.netty.buffer.Unpooled;
import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.ints.IntList;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TranslationArgument; import net.kyori.adventure.text.TranslationArgument;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.momirealms.craftengine.bukkit.api.CraftEngineFurniture; import net.momirealms.craftengine.bukkit.api.CraftEngineFurniture;
import net.momirealms.craftengine.bukkit.api.event.FurnitureBreakEvent; import net.momirealms.craftengine.bukkit.api.event.FurnitureBreakEvent;
import net.momirealms.craftengine.bukkit.api.event.FurnitureInteractEvent; import net.momirealms.craftengine.bukkit.api.event.FurnitureInteractEvent;
@@ -339,6 +338,49 @@ public class PacketConsumers {
} }
}; };
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SYSTEM_CHAT_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;
boolean overlay = buf.readBoolean();
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));
buf.writeBoolean(overlay);
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to handle ClientboundSystemChatPacket", e);
}
};
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SYSTEM_CHAT_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;
boolean overlay = buf.readBoolean();
event.setChanged(true);
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);
buf.writeBoolean(overlay);
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to handle ClientboundSystemChatPacket", e);
}
};
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SET_TEXT_1_20 = (user, event) -> { public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SET_TEXT_1_20 = (user, event) -> {
try { try {
FriendlyByteBuf buf = event.getBuffer(); FriendlyByteBuf buf = event.getBuffer();
@@ -365,6 +407,7 @@ public class PacketConsumers {
if (nbt == null) return; if (nbt == null) return;
Map<String, String> tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString()); Map<String, String> tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString());
if (tokens.isEmpty()) return; if (tokens.isEmpty()) return;
event.setChanged(true);
Component component = NBTComponentSerializer.nbt().deserialize(nbt); Component component = NBTComponentSerializer.nbt().deserialize(nbt);
for (Map.Entry<String, String> token : tokens.entrySet()) { for (Map.Entry<String, String> token : tokens.entrySet()) {
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(AdventureHelper.miniMessage().deserialize(token.getValue()))); component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(AdventureHelper.miniMessage().deserialize(token.getValue())));
@@ -377,6 +420,76 @@ public class PacketConsumers {
} }
}; };
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> TAB_LIST_1_20 = (user, event) -> {
try {
FriendlyByteBuf buf = event.getBuffer();
String json1 = buf.readUtf();
String json2 = buf.readUtf();
Map<String, String> tokens1 = CraftEngine.instance().imageManager().matchTags(json1);
Map<String, String> tokens2 = CraftEngine.instance().imageManager().matchTags(json2);
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
event.setChanged(true);
buf.clear();
buf.writeVarInt(event.packetID());
if (!tokens1.isEmpty()) {
Component component = AdventureHelper.jsonToComponent(json1);
for (Map.Entry<String, String> token : tokens1.entrySet()) {
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(AdventureHelper.miniMessage().deserialize(token.getValue())));
}
buf.writeUtf(AdventureHelper.componentToJson(component));
} else {
buf.writeUtf(json1);
}
if (!tokens2.isEmpty()) {
Component component = AdventureHelper.jsonToComponent(json2);
for (Map.Entry<String, String> token : tokens2.entrySet()) {
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(AdventureHelper.miniMessage().deserialize(token.getValue())));
}
buf.writeUtf(AdventureHelper.componentToJson(component));
} else {
buf.writeUtf(json2);
}
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to handle ClientboundSet[(Sub)Title/ActionBar]TextPacket", e);
}
};
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> TAB_LIST_1_20_3 = (user, event) -> {
try {
FriendlyByteBuf buf = event.getBuffer();
Tag nbt1 = buf.readNbt(false);
if (nbt1 == null) return;
Tag nbt2 = buf.readNbt(false);
if (nbt2 == null) return;
Map<String, String> tokens1 = CraftEngine.instance().imageManager().matchTags(nbt1.getAsString());
Map<String, String> tokens2 = CraftEngine.instance().imageManager().matchTags(nbt2.getAsString());
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
event.setChanged(true);
buf.clear();
buf.writeVarInt(event.packetID());
if (!tokens1.isEmpty()) {
Component component = NBTComponentSerializer.nbt().deserialize(nbt1);
for (Map.Entry<String, String> token : tokens1.entrySet()) {
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(AdventureHelper.miniMessage().deserialize(token.getValue())));
}
buf.writeNbt(NBTComponentSerializer.nbt().serialize(component), false);
} else {
buf.writeNbt(nbt1, false);
}
if (!tokens2.isEmpty()) {
Component component = NBTComponentSerializer.nbt().deserialize(nbt2);
for (Map.Entry<String, String> token : tokens2.entrySet()) {
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(AdventureHelper.miniMessage().deserialize(token.getValue())));
}
buf.writeNbt(NBTComponentSerializer.nbt().serialize(component), false);
} else {
buf.writeNbt(nbt2, false);
}
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to handle ClientboundSet[(Sub)Title/ActionBar]TextPacket", e);
}
};
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> OPEN_SCREEN_1_20 = (user, event) -> { public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> OPEN_SCREEN_1_20 = (user, event) -> {
try { try {
FriendlyByteBuf buf = event.getBuffer(); FriendlyByteBuf buf = event.getBuffer();

View File

@@ -27,4 +27,8 @@ public interface PacketIds {
int clientboundSetActionBarTextPacket(); int clientboundSetActionBarTextPacket();
int clientboundBossEventPacket(); int clientboundBossEventPacket();
int clientboundSystemChatPacket();
int clientboundTabListPacket();
} }

View File

@@ -68,4 +68,14 @@ public class PacketIds1_20 implements PacketIds {
public int clientboundBossEventPacket() { public int clientboundBossEventPacket() {
return 11; return 11;
} }
@Override
public int clientboundSystemChatPacket() {
return 100;
}
@Override
public int clientboundTabListPacket() {
return 101;
}
} }

View File

@@ -68,4 +68,14 @@ public class PacketIds1_20_2 implements PacketIds {
public int clientboundBossEventPacket() { public int clientboundBossEventPacket() {
return 10; return 10;
} }
@Override
public int clientboundSystemChatPacket() {
return 103;
}
@Override
public int clientboundTabListPacket() {
return 104;
}
} }

View File

@@ -68,4 +68,14 @@ public class PacketIds1_20_3 implements PacketIds {
public int clientboundBossEventPacket() { public int clientboundBossEventPacket() {
return 10; return 10;
} }
@Override
public int clientboundSystemChatPacket() {
return 105;
}
@Override
public int clientboundTabListPacket() {
return 106;
}
} }

View File

@@ -68,4 +68,14 @@ public class PacketIds1_20_5 implements PacketIds {
public int clientboundBossEventPacket() { public int clientboundBossEventPacket() {
return 10; return 10;
} }
@Override
public int clientboundSystemChatPacket() {
return 108;
}
@Override
public int clientboundTabListPacket() {
return 109;
}
} }

View File

@@ -68,4 +68,14 @@ public class PacketIds1_21 implements PacketIds {
public int clientboundBossEventPacket() { public int clientboundBossEventPacket() {
return PacketIdFinder.clientboundByName("minecraft:boss_event"); return PacketIdFinder.clientboundByName("minecraft:boss_event");
} }
@Override
public int clientboundSystemChatPacket() {
return PacketIdFinder.clientboundByName("minecraft:system_chat");
}
@Override
public int clientboundTabListPacket() {
return PacketIdFinder.clientboundByName("minecraft:tab_list");
}
} }