mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-19 15:09:15 +00:00
实现禁用聊天举报
This commit is contained in:
@@ -230,13 +230,13 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
|
|||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Config.allowEmojiChat()) {
|
// if (Config.allowEmojiChat()) {
|
||||||
EmojiTextProcessResult result = replaceJsonEmoji(rawJsonMessage, BukkitAdaptors.adapt(player));
|
// EmojiTextProcessResult result = replaceJsonEmoji(rawJsonMessage, BukkitAdaptors.adapt(player));
|
||||||
if (result.replaced()) {
|
// if (result.replaced()) {
|
||||||
rawJsonMessage = result.text();
|
// rawJsonMessage = result.text();
|
||||||
changed = true;
|
// changed = true;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (changed) {
|
if (changed) {
|
||||||
PaperReflections.method$AsyncChatDecorateEvent$result.invoke(event, ComponentUtils.jsonToPaperAdventure(rawJsonMessage));
|
PaperReflections.method$AsyncChatDecorateEvent$result.invoke(event, ComponentUtils.jsonToPaperAdventure(rawJsonMessage));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,12 +16,14 @@ import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
|||||||
import net.momirealms.craftengine.bukkit.item.behavior.BukkitItemBehaviors;
|
import net.momirealms.craftengine.bukkit.item.behavior.BukkitItemBehaviors;
|
||||||
import net.momirealms.craftengine.bukkit.item.recipe.BukkitRecipeManager;
|
import net.momirealms.craftengine.bukkit.item.recipe.BukkitRecipeManager;
|
||||||
import net.momirealms.craftengine.bukkit.loot.BukkitVanillaLootManager;
|
import net.momirealms.craftengine.bukkit.loot.BukkitVanillaLootManager;
|
||||||
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
import net.momirealms.craftengine.bukkit.pack.BukkitPackManager;
|
import net.momirealms.craftengine.bukkit.pack.BukkitPackManager;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandManager;
|
import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandManager;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.command.BukkitSenderFactory;
|
import net.momirealms.craftengine.bukkit.plugin.command.BukkitSenderFactory;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.gui.BukkitGuiManager;
|
import net.momirealms.craftengine.bukkit.plugin.gui.BukkitGuiManager;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.injector.*;
|
import net.momirealms.craftengine.bukkit.plugin.injector.*;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.network.BukkitNetworkManager;
|
import net.momirealms.craftengine.bukkit.plugin.network.BukkitNetworkManager;
|
||||||
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.scheduler.BukkitSchedulerAdapter;
|
import net.momirealms.craftengine.bukkit.plugin.scheduler.BukkitSchedulerAdapter;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
||||||
import net.momirealms.craftengine.bukkit.sound.BukkitSoundManager;
|
import net.momirealms.craftengine.bukkit.sound.BukkitSoundManager;
|
||||||
@@ -158,6 +160,14 @@ public class BukkitCraftEngine extends CraftEngine {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new InjectionException("Error initializing ProtectedFieldVisitor", e);
|
throw new InjectionException("Error initializing ProtectedFieldVisitor", e);
|
||||||
}
|
}
|
||||||
|
// 关闭聊天验证
|
||||||
|
try {
|
||||||
|
Object settings = CoreReflections.field$DedicatedServer$settings.get(FastNMS.INSTANCE.method$MinecraftServer$getServer());
|
||||||
|
Object properties = CoreReflections.field$DedicatedServerSettings$properties.get(settings);
|
||||||
|
CoreReflections.methodHandle$DedicatedServerProperties$enforceSecureProfileSetter.invoke(properties, false);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
throw new InjectionException("Error injecting secure profile", e);
|
||||||
|
}
|
||||||
// 初始化一些注册表
|
// 初始化一些注册表
|
||||||
super.onPluginLoad();
|
super.onPluginLoad();
|
||||||
BukkitBlockBehaviors.init();
|
BukkitBlockBehaviors.init();
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package net.momirealms.craftengine.bukkit.plugin.network;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
import com.mojang.datafixers.util.Either;
|
import com.mojang.datafixers.util.Either;
|
||||||
@@ -34,6 +36,7 @@ import net.momirealms.craftengine.bukkit.entity.data.BaseEntityData;
|
|||||||
import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurniture;
|
import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurniture;
|
||||||
import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager;
|
import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager;
|
||||||
import net.momirealms.craftengine.bukkit.entity.projectile.BukkitProjectileManager;
|
import net.momirealms.craftengine.bukkit.entity.projectile.BukkitProjectileManager;
|
||||||
|
import net.momirealms.craftengine.bukkit.font.BukkitFontManager;
|
||||||
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
||||||
import net.momirealms.craftengine.bukkit.item.behavior.FurnitureItemBehavior;
|
import net.momirealms.craftengine.bukkit.item.behavior.FurnitureItemBehavior;
|
||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
@@ -64,6 +67,7 @@ import net.momirealms.craftengine.core.entity.furniture.hitbox.FurnitureHitBox;
|
|||||||
import net.momirealms.craftengine.core.entity.furniture.hitbox.FurnitureHitboxPart;
|
import net.momirealms.craftengine.core.entity.furniture.hitbox.FurnitureHitboxPart;
|
||||||
import net.momirealms.craftengine.core.entity.player.InteractionHand;
|
import net.momirealms.craftengine.core.entity.player.InteractionHand;
|
||||||
import net.momirealms.craftengine.core.entity.seat.Seat;
|
import net.momirealms.craftengine.core.entity.seat.Seat;
|
||||||
|
import net.momirealms.craftengine.core.font.EmojiTextProcessResult;
|
||||||
import net.momirealms.craftengine.core.font.FontManager;
|
import net.momirealms.craftengine.core.font.FontManager;
|
||||||
import net.momirealms.craftengine.core.font.IllegalCharacterProcessResult;
|
import net.momirealms.craftengine.core.font.IllegalCharacterProcessResult;
|
||||||
import net.momirealms.craftengine.core.item.CustomItem;
|
import net.momirealms.craftengine.core.item.CustomItem;
|
||||||
@@ -382,9 +386,9 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
registerNMSPacketConsumer(new UpdateTagsListener(), NetworkReflections.clazz$ClientboundUpdateTagsPacket);
|
registerNMSPacketConsumer(new UpdateTagsListener(), NetworkReflections.clazz$ClientboundUpdateTagsPacket);
|
||||||
registerNMSPacketConsumer(new ClientInformationListener(), VersionHelper.isOrAbove1_20_2() ? NetworkReflections.clazz$ServerboundClientInformationPacket1 : NetworkReflections.clazz$ServerboundClientInformationPacket0);
|
registerNMSPacketConsumer(new ClientInformationListener(), VersionHelper.isOrAbove1_20_2() ? NetworkReflections.clazz$ServerboundClientInformationPacket1 : NetworkReflections.clazz$ServerboundClientInformationPacket0);
|
||||||
registerNMSPacketConsumer(new ContainerClickListener1_21_5(), VersionHelper.isOrAbove1_21_5() ? NetworkReflections.clazz$ServerboundContainerClickPacket : null);
|
registerNMSPacketConsumer(new ContainerClickListener1_21_5(), VersionHelper.isOrAbove1_21_5() ? NetworkReflections.clazz$ServerboundContainerClickPacket : null);
|
||||||
registerNMSPacketConsumer(new StatusResponseListener(), NetworkReflections.clazz$ClientboundStatusResponsePacket);
|
|
||||||
registerNMSPacketConsumer(new ServerDataListener(), NetworkReflections.clazz$ClientboundServerDataPacket);
|
registerNMSPacketConsumer(new ServerDataListener(), NetworkReflections.clazz$ClientboundServerDataPacket);
|
||||||
registerNMSPacketConsumer(new ChatSessionUpdateListener(), NetworkReflections.clazz$ServerboundChatSessionUpdatePacket);
|
registerNMSPacketConsumer(new ChatSessionUpdateListener(), NetworkReflections.clazz$ServerboundChatSessionUpdatePacket);
|
||||||
|
registerNMSPacketConsumer(new PlayerChatListener(), NetworkReflections.clazz$ClientboundPlayerChatPacket);
|
||||||
registerNMSPacketConsumer(new LoginAcknowledgedListener(), NetworkReflections.clazz$ServerboundLoginAcknowledgedPacket);
|
registerNMSPacketConsumer(new LoginAcknowledgedListener(), NetworkReflections.clazz$ServerboundLoginAcknowledgedPacket);
|
||||||
registerNMSPacketConsumer(new ConfigurationAcknowledgedListener(), NetworkReflections.clazz$ServerboundConfigurationAcknowledgedPacket);
|
registerNMSPacketConsumer(new ConfigurationAcknowledgedListener(), NetworkReflections.clazz$ServerboundConfigurationAcknowledgedPacket);
|
||||||
registerNMSPacketConsumer(new C2SFinishConfigurationListener(), NetworkReflections.clazz$ServerboundFinishConfigurationPacket);
|
registerNMSPacketConsumer(new C2SFinishConfigurationListener(), NetworkReflections.clazz$ServerboundFinishConfigurationPacket);
|
||||||
@@ -392,6 +396,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
registerNMSPacketConsumer(new LoginFinishedListener(), NetworkReflections.clazz$ClientboundLoginFinishedPacket);
|
registerNMSPacketConsumer(new LoginFinishedListener(), NetworkReflections.clazz$ClientboundLoginFinishedPacket);
|
||||||
registerNMSPacketConsumer(new StartConfigurationListener(), NetworkReflections.clazz$ClientboundStartConfigurationPacket);
|
registerNMSPacketConsumer(new StartConfigurationListener(), NetworkReflections.clazz$ClientboundStartConfigurationPacket);
|
||||||
registerByteBufferPacketListener(new IntentionListener(), this.packetIds.clientIntentionPacket(), "ClientIntentionPacket", ConnectionState.HANDSHAKING, PacketFlow.SERVERBOUND);
|
registerByteBufferPacketListener(new IntentionListener(), this.packetIds.clientIntentionPacket(), "ClientIntentionPacket", ConnectionState.HANDSHAKING, PacketFlow.SERVERBOUND);
|
||||||
|
registerByteBufferPacketListener(new StatusResponseListener(), this.packetIds.clientboundStatusResponsePacket(), "ClientboundStatusResponsePacket", ConnectionState.STATUS, PacketFlow.CLIENTBOUND);
|
||||||
registerByteBufferPacketListener(new ForgetLevelChunkListener(), this.packetIds.clientboundForgetLevelChunkPacket(), "ClientboundForgetLevelChunkPacket", ConnectionState.PLAY, PacketFlow.CLIENTBOUND);
|
registerByteBufferPacketListener(new ForgetLevelChunkListener(), this.packetIds.clientboundForgetLevelChunkPacket(), "ClientboundForgetLevelChunkPacket", ConnectionState.PLAY, PacketFlow.CLIENTBOUND);
|
||||||
registerByteBufferPacketListener(new SetScoreListener1_20_3(), VersionHelper.isOrAbove1_20_3() ? this.packetIds.clientboundSetScorePacket() : -1, "ClientboundSetScorePacket", ConnectionState.PLAY, PacketFlow.CLIENTBOUND);
|
registerByteBufferPacketListener(new SetScoreListener1_20_3(), VersionHelper.isOrAbove1_20_3() ? this.packetIds.clientboundSetScorePacket() : -1, "ClientboundSetScorePacket", ConnectionState.PLAY, PacketFlow.CLIENTBOUND);
|
||||||
registerByteBufferPacketListener(new AddRecipeBookListener(), this.packetIds.clientboundRecipeBookAddPacket(), "ClientboundRecipeBookAddPacket", ConnectionState.PLAY, PacketFlow.CLIENTBOUND);
|
registerByteBufferPacketListener(new AddRecipeBookListener(), this.packetIds.clientboundRecipeBookAddPacket(), "ClientboundRecipeBookAddPacket", ConnectionState.PLAY, PacketFlow.CLIENTBOUND);
|
||||||
@@ -476,13 +481,6 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
this.packetIds.clientboundSetObjectivePacket(), "ClientboundSetObjectivePacket",
|
this.packetIds.clientboundSetObjectivePacket(), "ClientboundSetObjectivePacket",
|
||||||
ConnectionState.PLAY, PacketFlow.CLIENTBOUND
|
ConnectionState.PLAY, PacketFlow.CLIENTBOUND
|
||||||
);
|
);
|
||||||
registerByteBufferPacketListener(
|
|
||||||
VersionHelper.isOrAbove1_20_3() ?
|
|
||||||
new PlayerChatListener_1_20_3() :
|
|
||||||
new PlayerChatListener_1_20(),
|
|
||||||
this.packetIds.clientboundPlayerChatPacket(), "ClientboundPlayerChatPacket",
|
|
||||||
ConnectionState.PLAY, PacketFlow.CLIENTBOUND
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
@@ -1508,13 +1506,6 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class StatusResponseListener implements NMSPacketListener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPacketSend(NetWorkUser user, NMSPacketEvent event, Object packet) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ServerDataListener implements NMSPacketListener {
|
public static class ServerDataListener implements NMSPacketListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1538,6 +1529,33 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class PlayerChatListener implements NMSPacketListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPacketSend(NetWorkUser user, NMSPacketEvent event, Object packet) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
Object content = FastNMS.INSTANCE.field$ClientboundPlayerChatPacket$unsignedContent(packet);
|
||||||
|
if (content == null) {
|
||||||
|
content = FastNMS.INSTANCE.method$Component$literal(
|
||||||
|
FastNMS.INSTANCE.field$SignedMessageBody$Packed$content(
|
||||||
|
FastNMS.INSTANCE.field$ClientboundPlayerChatPacket$body(packet)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Object chatType = FastNMS.INSTANCE.field$ClientboundPlayerChatPacket$chatType(packet);
|
||||||
|
Object decorate = FastNMS.INSTANCE.method$ChatType$Bound$decorate(chatType, content);
|
||||||
|
if (Config.allowEmojiChat()) {
|
||||||
|
String rawJsonMessage = ComponentUtils.minecraftToJson(decorate);
|
||||||
|
EmojiTextProcessResult result = BukkitFontManager.instance().replaceJsonEmoji(rawJsonMessage, (BukkitServerPlayer) user);
|
||||||
|
if (result.replaced()) {
|
||||||
|
decorate = ComponentUtils.jsonToMinecraft(result.text());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Object systemChatPacket = FastNMS.INSTANCE.constructor$ClientboundSystemChatPacket(decorate, false);
|
||||||
|
user.sendPacket(systemChatPacket, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class RespawnListener implements NMSPacketListener {
|
public static class RespawnListener implements NMSPacketListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -4479,192 +4497,17 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class PlayerChatListener_1_20 implements ByteBufferPacketListener {
|
public static class StatusResponseListener implements ByteBufferPacketListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
public void onPacketSend(NetWorkUser user, ByteBufPacketEvent event) {
|
public void onPacketSend(NetWorkUser user, ByteBufPacketEvent event) {
|
||||||
if (!Config.interceptPlayerChat()) return;
|
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
boolean changed = false;
|
JsonObject jsonObject = JsonParser.parseString(buf.readUtf()).getAsJsonObject();
|
||||||
UUID sender = buf.readUUID();
|
jsonObject.addProperty("preventsChatReports", true);
|
||||||
int index = buf.readVarInt();
|
event.setChanged(true);
|
||||||
byte @Nullable [] messageSignature = buf.readNullable(b -> {
|
buf.clear();
|
||||||
byte[] bs = new byte[256];
|
buf.writeVarInt(event.packetID());
|
||||||
buf.readBytes(bs);
|
buf.writeUtf(jsonObject.toString());
|
||||||
return bs;
|
|
||||||
});
|
|
||||||
// SignedMessageBody.Packed start
|
|
||||||
String content = buf.readUtf(256);
|
|
||||||
Instant timeStamp = buf.readInstant();
|
|
||||||
long salt = buf.readLong();
|
|
||||||
// LastSeenMessages.Packed start
|
|
||||||
ArrayList<Pair<Integer, byte[]>> lastSeen = buf.readCollection(FriendlyByteBuf.limitValue(ArrayList::new, 20), b -> {
|
|
||||||
int i = b.readVarInt() - 1;
|
|
||||||
if (i == -1) {
|
|
||||||
byte[] bs = new byte[256];
|
|
||||||
buf.readBytes(bs);
|
|
||||||
return Pair.of(-1, bs);
|
|
||||||
} else {
|
|
||||||
return Pair.of(i, null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// LastSeenMessages.Packed end
|
|
||||||
// SignedMessageBody.Packed end
|
|
||||||
@Nullable String unsignedContent = buf.readNullable(FriendlyByteBuf::readUtf);
|
|
||||||
if (unsignedContent != null) {
|
|
||||||
Map<String, ComponentProvider> unsignedContentTokens = CraftEngine.instance().fontManager().matchTags(unsignedContent);
|
|
||||||
if (!unsignedContentTokens.isEmpty()) {
|
|
||||||
Tag tag = MRegistryOps.JSON.convertTo(MRegistryOps.SPARROW_NBT, GsonHelper.get().fromJson(unsignedContent, JsonElement.class));
|
|
||||||
Component component = AdventureHelper.nbtToComponent(tag);
|
|
||||||
component = AdventureHelper.replaceText(component, unsignedContentTokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user));
|
|
||||||
unsignedContent = MRegistryOps.SPARROW_NBT.convertTo(MRegistryOps.JSON, AdventureHelper.componentToNbt(component)).toString();
|
|
||||||
changed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// FilterMask start
|
|
||||||
int type = buf.readVarInt();
|
|
||||||
BitSet mask = type == 2 /* PARTIALLY_FILTERED */ ? buf.readBitSet() : null;
|
|
||||||
// FilterMask end
|
|
||||||
// ChatType.BoundNetwork start
|
|
||||||
int chatType = buf.readVarInt();
|
|
||||||
String name = buf.readUtf();
|
|
||||||
Map<String, ComponentProvider> nameTokens = CraftEngine.instance().fontManager().matchTags(name);
|
|
||||||
if (!nameTokens.isEmpty()) {
|
|
||||||
Tag tag = MRegistryOps.JSON.convertTo(MRegistryOps.SPARROW_NBT, GsonHelper.get().fromJson(name, JsonElement.class));
|
|
||||||
Component component = AdventureHelper.nbtToComponent(tag);
|
|
||||||
component = AdventureHelper.replaceText(component, nameTokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user));
|
|
||||||
name = MRegistryOps.SPARROW_NBT.convertTo(MRegistryOps.JSON, AdventureHelper.componentToNbt(component)).toString();
|
|
||||||
changed = true;
|
|
||||||
}
|
|
||||||
@Nullable String targetName = buf.readNullable(FriendlyByteBuf::readUtf);
|
|
||||||
if (targetName != null) {
|
|
||||||
Map<String, ComponentProvider> targetNameTokens = CraftEngine.instance().fontManager().matchTags(targetName);
|
|
||||||
if (!targetNameTokens.isEmpty()) {
|
|
||||||
Tag tag = MRegistryOps.JSON.convertTo(MRegistryOps.SPARROW_NBT, GsonHelper.get().fromJson(targetName, JsonElement.class));
|
|
||||||
Component component = AdventureHelper.nbtToComponent(tag);
|
|
||||||
component = AdventureHelper.replaceText(component, targetNameTokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user));
|
|
||||||
targetName = MRegistryOps.SPARROW_NBT.convertTo(MRegistryOps.JSON, AdventureHelper.componentToNbt(component)).toString();
|
|
||||||
changed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// ChatType.BoundNetwork end
|
|
||||||
if (changed) {
|
|
||||||
event.setChanged(true);
|
|
||||||
buf.clear();
|
|
||||||
buf.writeVarInt(event.packetID());
|
|
||||||
buf.writeUUID(sender);
|
|
||||||
buf.writeVarInt(index);
|
|
||||||
buf.writeNullable(messageSignature, (b, bs) -> buf.writeBytes(bs));
|
|
||||||
buf.writeUtf(content);
|
|
||||||
buf.writeInstant(timeStamp);
|
|
||||||
buf.writeLong(salt);
|
|
||||||
buf.writeCollection(lastSeen, (b, pair) -> {
|
|
||||||
b.writeVarInt(pair.left() + 1);
|
|
||||||
if (pair.right() != null) {
|
|
||||||
b.writeBytes(pair.right());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
buf.writeNullable(unsignedContent, FriendlyByteBuf::writeUtf);
|
|
||||||
buf.writeVarInt(type);
|
|
||||||
if (type == 2) buf.writeBitSet(mask);
|
|
||||||
buf.writeVarInt(chatType);
|
|
||||||
buf.writeUtf(name);
|
|
||||||
buf.writeNullable(targetName, FriendlyByteBuf::writeUtf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class PlayerChatListener_1_20_3 implements ByteBufferPacketListener {
|
|
||||||
|
|
||||||
public void onPacketSend(NetWorkUser user, ByteBufPacketEvent event) {
|
|
||||||
if (!Config.interceptPlayerChat()) return;
|
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
|
||||||
boolean changed = false;
|
|
||||||
int globalIndex = VersionHelper.isOrAbove1_21_5() ? buf.readVarInt() : -1;
|
|
||||||
UUID sender = buf.readUUID();
|
|
||||||
int index = buf.readVarInt();
|
|
||||||
byte @Nullable [] messageSignature = buf.readNullable(b -> {
|
|
||||||
byte[] bs = new byte[256];
|
|
||||||
buf.readBytes(bs);
|
|
||||||
return bs;
|
|
||||||
});
|
|
||||||
// SignedMessageBody.Packed start
|
|
||||||
String content = buf.readUtf(256);
|
|
||||||
Instant timeStamp = buf.readInstant();
|
|
||||||
long salt = buf.readLong();
|
|
||||||
// LastSeenMessages.Packed start
|
|
||||||
ArrayList<Pair<Integer, byte[]>> lastSeen = buf.readCollection(FriendlyByteBuf.limitValue(ArrayList::new, 20), b -> {
|
|
||||||
int i = b.readVarInt() - 1;
|
|
||||||
if (i == -1) {
|
|
||||||
byte[] bs = new byte[256];
|
|
||||||
buf.readBytes(bs);
|
|
||||||
return Pair.of(-1, bs);
|
|
||||||
} else {
|
|
||||||
return Pair.of(i, null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// LastSeenMessages.Packed end
|
|
||||||
// SignedMessageBody.Packed end
|
|
||||||
@Nullable Tag unsignedContent = buf.readNullable(b -> b.readNbt(false));
|
|
||||||
if (unsignedContent != null) {
|
|
||||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(unsignedContent);
|
|
||||||
if (!tokens.isEmpty()) {
|
|
||||||
Component component = AdventureHelper.tagToComponent(unsignedContent);
|
|
||||||
component = AdventureHelper.replaceText(component, tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user));
|
|
||||||
unsignedContent = AdventureHelper.componentToTag(component);
|
|
||||||
changed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// FilterMask start
|
|
||||||
int type = buf.readVarInt();
|
|
||||||
BitSet mask = type == 2 /* PARTIALLY_FILTERED */ ? buf.readBitSet() : null;
|
|
||||||
// FilterMask end
|
|
||||||
// ChatType.Bound start
|
|
||||||
int chatType = buf.readVarInt();
|
|
||||||
Tag name = buf.readNbt(false);
|
|
||||||
if (name != null) {
|
|
||||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(name);
|
|
||||||
if (!tokens.isEmpty()) {
|
|
||||||
Component component = AdventureHelper.tagToComponent(name);
|
|
||||||
component = AdventureHelper.replaceText(component, tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user));
|
|
||||||
name = AdventureHelper.componentToTag(component);
|
|
||||||
changed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@Nullable Tag targetName = buf.readNullable(b -> b.readNbt(false));
|
|
||||||
if (targetName != null) {
|
|
||||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(targetName);
|
|
||||||
if (!tokens.isEmpty()) {
|
|
||||||
Component component = AdventureHelper.tagToComponent(targetName);
|
|
||||||
component = AdventureHelper.replaceText(component, tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user));
|
|
||||||
targetName = AdventureHelper.componentToTag(component);
|
|
||||||
changed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// ChatType.Bound end
|
|
||||||
if (changed) {
|
|
||||||
event.setChanged(true);
|
|
||||||
buf.clear();
|
|
||||||
buf.writeVarInt(event.packetID());
|
|
||||||
if (VersionHelper.isOrAbove1_21_5()) buf.writeVarInt(globalIndex);
|
|
||||||
buf.writeUUID(sender);
|
|
||||||
buf.writeVarInt(index);
|
|
||||||
buf.writeNullable(messageSignature, (b, bs) -> buf.writeBytes(bs));
|
|
||||||
buf.writeUtf(content);
|
|
||||||
buf.writeInstant(timeStamp);
|
|
||||||
buf.writeLong(salt);
|
|
||||||
buf.writeCollection(lastSeen, (b, pair) -> {
|
|
||||||
b.writeVarInt(pair.left() + 1);
|
|
||||||
if (pair.right() != null) {
|
|
||||||
b.writeBytes(pair.right());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
buf.writeNullable(unsignedContent, (b, tag) -> b.writeNbt(tag, false));
|
|
||||||
buf.writeVarInt(type);
|
|
||||||
if (type == 2) buf.writeBitSet(mask);
|
|
||||||
buf.writeVarInt(chatType);
|
|
||||||
buf.writeNbt(name, false);
|
|
||||||
buf.writeNullable(targetName, (b, tag) -> b.writeNbt(tag, false));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ public interface PacketIds {
|
|||||||
|
|
||||||
int serverboundCustomPayloadPacket();
|
int serverboundCustomPayloadPacket();
|
||||||
|
|
||||||
int clientboundPlayerChatPacket();
|
|
||||||
|
|
||||||
int clientIntentionPacket();
|
int clientIntentionPacket();
|
||||||
|
|
||||||
|
int clientboundStatusResponsePacket();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -192,13 +192,13 @@ public class PacketIds1_20 implements PacketIds {
|
|||||||
return PacketIdHelper.byClazz(NetworkReflections.clazz$ServerboundCustomPayloadPacket, PacketFlow.SERVERBOUND, ConnectionState.PLAY);
|
return PacketIdHelper.byClazz(NetworkReflections.clazz$ServerboundCustomPayloadPacket, PacketFlow.SERVERBOUND, ConnectionState.PLAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int clientboundPlayerChatPacket() {
|
|
||||||
return PacketIdHelper.byClazz(NetworkReflections.clazz$ClientboundPlayerChatPacket, PacketFlow.CLIENTBOUND, ConnectionState.PLAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int clientIntentionPacket() {
|
public int clientIntentionPacket() {
|
||||||
return PacketIdHelper.byClazz(NetworkReflections.clazz$ClientIntentionPacket, PacketFlow.SERVERBOUND, ConnectionState.HANDSHAKING);
|
return PacketIdHelper.byClazz(NetworkReflections.clazz$ClientIntentionPacket, PacketFlow.SERVERBOUND, ConnectionState.HANDSHAKING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int clientboundStatusResponsePacket() {
|
||||||
|
return PacketIdHelper.byClazz(NetworkReflections.clazz$ClientboundStatusResponsePacket, PacketFlow.CLIENTBOUND, ConnectionState.STATUS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,13 +191,13 @@ public class PacketIds1_20_5 implements PacketIds {
|
|||||||
return PacketIdHelper.byName("minecraft:custom_payload", PacketFlow.SERVERBOUND, ConnectionState.PLAY);
|
return PacketIdHelper.byName("minecraft:custom_payload", PacketFlow.SERVERBOUND, ConnectionState.PLAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int clientboundPlayerChatPacket() {
|
|
||||||
return PacketIdHelper.byName("minecraft:player_chat", PacketFlow.CLIENTBOUND, ConnectionState.PLAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int clientIntentionPacket() {
|
public int clientIntentionPacket() {
|
||||||
return PacketIdHelper.byName("minecraft:intention", PacketFlow.SERVERBOUND, ConnectionState.HANDSHAKING);
|
return PacketIdHelper.byName("minecraft:intention", PacketFlow.SERVERBOUND, ConnectionState.HANDSHAKING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int clientboundStatusResponsePacket() {
|
||||||
|
return PacketIdHelper.byName("minecraft:status_response", PacketFlow.CLIENTBOUND, ConnectionState.STATUS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4675,4 +4675,25 @@ public final class CoreReflections {
|
|||||||
throw new ReflectionInitException("Failed to init ArmorStand", e);
|
throw new ReflectionInitException("Failed to init ArmorStand", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final Field field$DedicatedServerProperties$enforceSecureProfile = requireNonNull(
|
||||||
|
ReflectionUtils.getDeclaredField(
|
||||||
|
clazz$DedicatedServerProperties,
|
||||||
|
VersionHelper.isOrAbove1_21_11()
|
||||||
|
? new String[]{"enforceSecureProfile", "ag"}
|
||||||
|
: VersionHelper.isOrAbove1_21_9()
|
||||||
|
? new String[]{"enforceSecureProfile", "af"}
|
||||||
|
: VersionHelper.isOrAbove1_21_2()
|
||||||
|
? new String[]{"enforceSecureProfile", "X"}
|
||||||
|
: VersionHelper.isOrAbove1_21()
|
||||||
|
? new String[]{"enforceSecureProfile", "Y"}
|
||||||
|
: VersionHelper.isOrAbove1_20_5()
|
||||||
|
? new String[]{"enforceSecureProfile", "X"}
|
||||||
|
: new String[]{"enforceSecureProfile", "W"}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
public static final MethodHandle methodHandle$DedicatedServerProperties$enforceSecureProfileSetter = requireNonNull(
|
||||||
|
ReflectionUtils.unreflectSetter(field$DedicatedServerProperties$enforceSecureProfile)
|
||||||
|
).asType(MethodType.methodType(void.class, Object.class, boolean.class));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public final class ProtocolVersion {
|
public final class ProtocolVersion {
|
||||||
|
private static final Map<Integer, ProtocolVersion> BY_ID = new Int2ObjectOpenHashMap<>();
|
||||||
|
private static final Map<String, ProtocolVersion> BY_NAME = new Object2ObjectOpenHashMap<>();
|
||||||
|
|
||||||
public static final ProtocolVersion UNKNOWN = new ProtocolVersion(-1, "Unknown");
|
public static final ProtocolVersion UNKNOWN = new ProtocolVersion(-1, "Unknown");
|
||||||
public static final ProtocolVersion V1_20 = new ProtocolVersion(763, "1.20");
|
public static final ProtocolVersion V1_20 = new ProtocolVersion(763, "1.20");
|
||||||
public static final ProtocolVersion V1_20_1 = new ProtocolVersion(763, "1.20.1");
|
public static final ProtocolVersion V1_20_1 = new ProtocolVersion(763, "1.20.1");
|
||||||
@@ -26,8 +29,6 @@ public final class ProtocolVersion {
|
|||||||
public static final ProtocolVersion V1_21_9 = new ProtocolVersion(773, "1.21.9");
|
public static final ProtocolVersion V1_21_9 = new ProtocolVersion(773, "1.21.9");
|
||||||
public static final ProtocolVersion V1_21_10 = new ProtocolVersion(773, "1.21.10");
|
public static final ProtocolVersion V1_21_10 = new ProtocolVersion(773, "1.21.10");
|
||||||
public static final ProtocolVersion V1_21_11 = new ProtocolVersion(774, "1.21.11");
|
public static final ProtocolVersion V1_21_11 = new ProtocolVersion(774, "1.21.11");
|
||||||
private static final Map<Integer, ProtocolVersion> BY_ID = new Int2ObjectOpenHashMap<>();
|
|
||||||
private static final Map<String, ProtocolVersion> BY_NAME = new Object2ObjectOpenHashMap<>();
|
|
||||||
|
|
||||||
private final int id;
|
private final int id;
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ byte_buddy_version=1.18.1
|
|||||||
ahocorasick_version=0.6.3
|
ahocorasick_version=0.6.3
|
||||||
snake_yaml_version=2.5
|
snake_yaml_version=2.5
|
||||||
anti_grief_version=1.0.5
|
anti_grief_version=1.0.5
|
||||||
nms_helper_version=1.0.149
|
nms_helper_version=1.0.150
|
||||||
evalex_version=3.5.0
|
evalex_version=3.5.0
|
||||||
reactive_streams_version=1.0.4
|
reactive_streams_version=1.0.4
|
||||||
amazon_awssdk_version=2.38.7
|
amazon_awssdk_version=2.38.7
|
||||||
|
|||||||
Reference in New Issue
Block a user