9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2026-01-06 15:52:03 +00:00

添加了boss event包拦截

This commit is contained in:
XiaoMoMi
2025-04-08 01:41:17 +08:00
parent 52498e18df
commit 168838da91
8 changed files with 124 additions and 2 deletions

View File

@@ -159,6 +159,7 @@ 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.clientboundSetTitleTextPacket());
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.BOSS_EVENT_1_20_3 : PacketConsumers.BOSS_EVENT_1_20, this.packetIds.clientboundBossEventPacket());
// registerByteBufPacketConsumer(PacketConsumers.REMOVE_ENTITY, this.packetIds.clientboundRemoveEntitiesPacket());
registerByteBufPacketConsumer(PacketConsumers.ADD_ENTITY_BYTEBUFFER, this.packetIds.clientboundAddEntityPacket());
// registerByteBufPacketConsumer(PacketConsumers.SOUND, this.packetIds.clientboundSoundPacket());

View File

@@ -243,6 +243,102 @@ public class PacketConsumers {
}
};
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> BOSS_EVENT_1_20 = (user, event) -> {
try {
FriendlyByteBuf buf = event.getBuffer();
UUID uuid = buf.readUUID();
int actionType = buf.readVarInt();
if (actionType == 0) {
String json = buf.readUtf();
Map<String, String> tokens = CraftEngine.instance().imageManager().matchTags(json);
if (tokens.isEmpty()) return;
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())));
}
float health = buf.readFloat();
int color = buf.readVarInt();
int division = buf.readVarInt();
byte flag = buf.readByte();
event.setChanged(true);
buf.clear();
buf.writeVarInt(event.packetID());
buf.writeUUID(uuid);
buf.writeVarInt(actionType);
buf.writeUtf(AdventureHelper.componentToJson(component));
buf.writeFloat(health);
buf.writeVarInt(color);
buf.writeVarInt(division);
buf.writeByte(flag);
} else if (actionType == 3) {
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.writeUUID(uuid);
buf.writeVarInt(actionType);
buf.writeUtf(AdventureHelper.componentToJson(component));
}
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to handle ClientboundBossEventPacket", e);
}
};
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> BOSS_EVENT_1_20_3 = (user, event) -> {
try {
FriendlyByteBuf buf = event.getBuffer();
UUID uuid = buf.readUUID();
int actionType = buf.readVarInt();
if (actionType == 0) {
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())));
}
float health = buf.readFloat();
int color = buf.readVarInt();
int division = buf.readVarInt();
byte flag = buf.readByte();
event.setChanged(true);
buf.clear();
buf.writeVarInt(event.packetID());
buf.writeUUID(uuid);
buf.writeVarInt(actionType);
buf.writeNbt(NBTComponentSerializer.nbt().serialize(component), false);
buf.writeFloat(health);
buf.writeVarInt(color);
buf.writeVarInt(division);
buf.writeByte(flag);
} else if (actionType == 3) {
Tag nbt = buf.readNbt(false);
if (nbt == null) return;
Map<String, String> tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString());
if (tokens.isEmpty()) return;
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.writeUUID(uuid);
buf.writeVarInt(actionType);
buf.writeNbt(NBTComponentSerializer.nbt().serialize(component), false);
}
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to handle ClientboundBossEventPacket", e);
}
};
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SET_TEXT_1_20 = (user, event) -> {
try {
FriendlyByteBuf buf = event.getBuffer();
@@ -267,11 +363,9 @@ public class PacketConsumers {
FriendlyByteBuf buf = event.getBuffer();
Tag nbt = buf.readNbt(false);
if (nbt == null) return;
System.out.println(nbt.getAsString());
Map<String, String> tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString());
if (tokens.isEmpty()) return;
Component component = NBTComponentSerializer.nbt().deserialize(nbt);
System.out.println(GsonComponentSerializer.gson().serialize(component));
for (Map.Entry<String, String> token : tokens.entrySet()) {
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(AdventureHelper.miniMessage().deserialize(token.getValue())));
}

View File

@@ -25,4 +25,6 @@ public interface PacketIds {
int clientboundSetSubtitleTextPacket();
int clientboundSetActionBarTextPacket();
int clientboundBossEventPacket();
}

View File

@@ -63,4 +63,9 @@ public class PacketIds1_20 implements PacketIds {
public int clientboundSetActionBarTextPacket() {
return 70;
}
@Override
public int clientboundBossEventPacket() {
return 11;
}
}

View File

@@ -63,4 +63,9 @@ public class PacketIds1_20_2 implements PacketIds {
public int clientboundSetActionBarTextPacket() {
return 72;
}
@Override
public int clientboundBossEventPacket() {
return 10;
}
}

View File

@@ -63,4 +63,9 @@ public class PacketIds1_20_3 implements PacketIds {
public int clientboundSetActionBarTextPacket() {
return 74;
}
@Override
public int clientboundBossEventPacket() {
return 10;
}
}

View File

@@ -63,4 +63,9 @@ public class PacketIds1_20_5 implements PacketIds {
public int clientboundSetActionBarTextPacket() {
return 76;
}
@Override
public int clientboundBossEventPacket() {
return 10;
}
}

View File

@@ -63,4 +63,9 @@ public class PacketIds1_21 implements PacketIds {
public int clientboundSetActionBarTextPacket() {
return PacketIdFinder.clientboundByName("minecraft:set_action_bar_text");
}
@Override
public int clientboundBossEventPacket() {
return PacketIdFinder.clientboundByName("minecraft:boss_event");
}
}