Update to 22w17a

This commit is contained in:
shedaniel
2022-04-28 14:01:55 +08:00
parent d6a12573ab
commit e901cc953f
7 changed files with 40 additions and 30 deletions

View File

@@ -24,6 +24,7 @@ import dev.architectury.event.Event;
import dev.architectury.event.EventFactory;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.network.chat.ChatSender;
import net.minecraft.network.chat.ChatType;
import net.minecraft.network.chat.Component;
import org.jetbrains.annotations.Nullable;
@@ -63,10 +64,10 @@ public interface ClientChatEvent {
*
* @param type Where was the message emitted from.
* @param message The chat message.
* @param sender The packet sender. Can be {@code null}, but probably is the sending player UUID or {@link net.minecraft.Util#NIL_UUID}
* @param sender The packet sender. Can be {@code null}, but probably is the sending player UUID or null for system messages.
* @return A {@link CompoundEventResult} determining the outcome of the event,
* if an outcome is set, the received message is overridden.
*/
CompoundEventResult<Component> process(ChatType type, Component message, @Nullable UUID sender);
CompoundEventResult<Component> process(ChatType type, Component message, @Nullable ChatSender sender);
}
}

View File

@@ -23,6 +23,7 @@ import dev.architectury.event.events.common.ChatEvent;
import dev.architectury.impl.fabric.ChatComponentImpl;
import net.minecraft.network.chat.ChatType;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ServerboundChatPacket;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
@@ -52,20 +53,20 @@ public abstract class MixinServerGamePacketListenerImpl {
@Shadow
public abstract void disconnect(Component component);
@Inject(method = "handleChat(Lnet/minecraft/server/network/TextFilter$FilteredText;)V",
@Inject(method = "handleChat(Lnet/minecraft/network/protocol/game/ServerboundChatPacket;Lnet/minecraft/server/network/TextFilter$FilteredText;)V",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/server/players/PlayerList;broadcastMessage(Lnet/minecraft/network/chat/Component;Ljava/util/function/Function;Lnet/minecraft/network/chat/ChatType;Ljava/util/UUID;)V"),
target = "Lnet/minecraft/server/players/PlayerList;broadcastPlayerMessage(Lnet/minecraft/network/chat/Component;Ljava/util/function/Function;Lnet/minecraft/network/chat/ChatType;Lnet/minecraft/network/chat/ChatSender;Ljava/time/Instant;Lnet/minecraft/util/Crypt$SaltSignaturePair;)V"),
cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
private void handleChat(TextFilter.FilteredText message, CallbackInfo ci, String string, String string2, Component component, Component component2) {
var chatComponent = new ChatComponentImpl(component2, component);
private void handleChat(ServerboundChatPacket packet, TextFilter.FilteredText message, CallbackInfo ci, String normalizedMessage, String filteredMessage, Component filtered, Component raw) {
var chatComponent = new ChatComponentImpl(raw, filtered);
var process = ChatEvent.SERVER.invoker().process(this.player, message, chatComponent);
if (process.isEmpty()) return;
if (process.isFalse()) {
ci.cancel();
} else if (!Objects.equals(chatComponent.getRaw(), component2) || !Objects.equals(chatComponent.getFiltered(), component)) {
this.server.getPlayerList().broadcastMessage(chatComponent.getRaw(), (serverPlayer) -> {
} else if (!Objects.equals(chatComponent.getRaw(), raw) || !Objects.equals(chatComponent.getFiltered(), filtered)) {
this.server.getPlayerList().broadcastPlayerMessage(chatComponent.getRaw(), (serverPlayer) -> {
return this.player.shouldFilterMessageTo(serverPlayer) ? chatComponent.getFiltered() : chatComponent.getRaw();
}, ChatType.CHAT, this.player.getUUID());
}, ChatType.CHAT, this.player.asChatSender(), packet.getTimeStamp(), packet.getSaltSignature());
this.chatSpamTickCount += 20;
if (this.chatSpamTickCount > 200 && !this.server.getPlayerList().isOp(this.player.getGameProfile())) {

View File

@@ -25,10 +25,7 @@ import dev.architectury.event.events.client.ClientRecipeUpdateEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.network.protocol.game.ClientboundChatPacket;
import net.minecraft.network.protocol.game.ClientboundLoginPacket;
import net.minecraft.network.protocol.game.ClientboundRespawnPacket;
import net.minecraft.network.protocol.game.ClientboundUpdateRecipesPacket;
import net.minecraft.network.protocol.game.*;
import net.minecraft.world.item.crafting.RecipeManager;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
@@ -66,16 +63,30 @@ public class MixinClientPacketListener {
this.tmpPlayer = null;
}
@Inject(method = "handleChat", at = @At(value = "INVOKE",
target = "Lnet/minecraft/client/gui/Gui;handleChat(Lnet/minecraft/network/chat/ChatType;Lnet/minecraft/network/chat/Component;Ljava/util/UUID;)V"),
@Inject(method = "handleSystemChat", at = @At(value = "INVOKE",
target = "Lnet/minecraft/client/gui/Gui;handleSystemChat(Lnet/minecraft/network/chat/ChatType;Lnet/minecraft/network/chat/Component;)V"),
cancellable = true)
private void handleChat(ClientboundChatPacket packet, CallbackInfo ci) {
var process = ClientChatEvent.RECEIVED.invoker().process(packet.getType(), packet.getMessage(), packet.getSender());
private void handleChat(ClientboundSystemChatPacket packet, CallbackInfo ci) {
var process = ClientChatEvent.RECEIVED.invoker().process(packet.type(), packet.content(), null);
if (process.isEmpty()) return;
if (process.isFalse()) {
ci.cancel();
} else if (process.object() != null && !process.object().equals(packet.getMessage())) {
this.minecraft.gui.handleChat(packet.getType(), packet.getMessage(), packet.getSender());
} else if (process.object() != null && !process.object().equals(packet.content())) {
this.minecraft.gui.handleSystemChat(packet.type(), packet.content());
ci.cancel();
}
}
@Inject(method = "handlePlayerChat", at = @At(value = "INVOKE",
target = "Lnet/minecraft/client/gui/Gui;handlePlayerChat(Lnet/minecraft/network/chat/ChatType;Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/ChatSender;)V"),
cancellable = true)
private void handleChat(ClientboundPlayerChatPacket packet, CallbackInfo ci) {
var process = ClientChatEvent.RECEIVED.invoker().process(packet.type(), packet.content(), packet.sender());
if (process.isEmpty()) return;
if (process.isFalse()) {
ci.cancel();
} else if (process.object() != null && !process.object().equals(packet.content())) {
this.minecraft.gui.handlePlayerChat(packet.type(), packet.content(), packet.sender());
ci.cancel();
}
}

View File

@@ -3,8 +3,8 @@ org.gradle.daemon=false
forgeEnabled=false
minecraft_version=22w16b
supported_version=22w16b
minecraft_version=22w17a
supported_version=22w17a
cf_type=beta
@@ -13,8 +13,8 @@ archives_base_name_snapshot=architectury-snapshot
base_version=5.2
maven_group=dev.architectury
fabric_loader_version=0.14.0
fabric_api_version=0.51.2+1.19
fabric_loader_version=0.14.3
fabric_api_version=0.51.3+1.19
mod_menu_version=3.1.0
forge_version=40.0.1

View File

@@ -22,7 +22,6 @@ package dev.architectury.test.item;
import dev.architectury.hooks.item.tool.AxeItemHooks;
import dev.architectury.hooks.item.tool.HoeItemHooks;
import dev.architectury.hooks.item.tool.ShovelItemHooks;
import net.minecraft.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Player;
@@ -40,7 +39,7 @@ public final class TestBlockInteractions {
if (!ctx.getLevel().isClientSide) {
Player player = ctx.getPlayer();
if (player != null)
player.sendMessage(Component.literal("These dark arts can only be done at night!"), Util.NIL_UUID);
player.sendSystemMessage(Component.literal("These dark arts can only be done at night!"));
}
return false;
}
@@ -51,7 +50,7 @@ public final class TestBlockInteractions {
if (!ctx.getLevel().isClientSide) {
Player player = ctx.getPlayer();
if (player != null)
player.sendMessage(Component.literal("Thou has successfully committed the dark arts of alchemy!!"), Util.NIL_UUID);
player.sendSystemMessage(Component.literal("Thou has successfully committed the dark arts of alchemy!!"));
}
});
}

View File

@@ -22,7 +22,6 @@ package dev.architectury.test.networking;
import dev.architectury.networking.NetworkManager;
import dev.architectury.networking.simple.BaseC2SMessage;
import dev.architectury.networking.simple.MessageType;
import net.minecraft.Util;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.Component;
@@ -52,6 +51,6 @@ public class ButtonClickedMessage extends BaseC2SMessage {
@Override
public void handle(NetworkManager.PacketContext context) {
context.getPlayer().sendMessage(Component.literal("You clicked button #" + buttonId), Util.NIL_UUID);
context.getPlayer().sendSystemMessage(Component.literal("You clicked button #" + buttonId));
}
}

View File

@@ -22,7 +22,6 @@ package dev.architectury.test.networking;
import dev.architectury.networking.NetworkManager;
import dev.architectury.networking.simple.BaseS2CMessage;
import dev.architectury.networking.simple.MessageType;
import net.minecraft.Util;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.Component;
@@ -55,6 +54,6 @@ public class SyncDataMessage extends BaseS2CMessage {
@Override
public void handle(NetworkManager.PacketContext context) {
context.getPlayer().sendMessage(Component.literal("Received data from server: " + serverData), Util.NIL_UUID);
context.getPlayer().sendSystemMessage(Component.literal("Received data from server: " + serverData));
}
}