soiz1's picture
Upload folder using huggingface_hub
d46f4a3 verified
package net.minecraft.commands.arguments;
import com.google.common.collect.Lists;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.Dynamic2CommandExceptionType;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
import javax.annotation.Nullable;
import net.minecraft.commands.CommandSigningContext;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.arguments.selector.EntitySelector;
import net.minecraft.commands.arguments.selector.EntitySelectorParser;
import net.minecraft.network.chat.ChatDecorator;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.chat.PlayerChatMessage;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.FilteredText;
public class MessageArgument implements SignedArgument<MessageArgument.Message> {
private static final Collection<String> EXAMPLES = Arrays.asList("Hello world!", "foo", "@e", "Hello @p :)");
static final Dynamic2CommandExceptionType TOO_LONG = new Dynamic2CommandExceptionType(
(p_325588_, p_325589_) -> Component.translatableEscape("argument.message.too_long", p_325588_, p_325589_)
);
public static MessageArgument message() {
return new MessageArgument();
}
public static Component getMessage(CommandContext<CommandSourceStack> p_96836_, String p_96837_) throws CommandSyntaxException {
MessageArgument.Message messageargument$message = p_96836_.getArgument(p_96837_, MessageArgument.Message.class);
return messageargument$message.resolveComponent(p_96836_.getSource());
}
public static void resolveChatMessage(CommandContext<CommandSourceStack> p_249433_, String p_248718_, Consumer<PlayerChatMessage> p_249460_) throws CommandSyntaxException {
MessageArgument.Message messageargument$message = p_249433_.getArgument(p_248718_, MessageArgument.Message.class);
CommandSourceStack commandsourcestack = p_249433_.getSource();
Component component = messageargument$message.resolveComponent(commandsourcestack);
CommandSigningContext commandsigningcontext = commandsourcestack.getSigningContext();
PlayerChatMessage playerchatmessage = commandsigningcontext.getArgument(p_248718_);
if (playerchatmessage != null) {
resolveSignedMessage(p_249460_, commandsourcestack, playerchatmessage.withUnsignedContent(component));
} else {
resolveDisguisedMessage(p_249460_, commandsourcestack, PlayerChatMessage.system(messageargument$message.text).withUnsignedContent(component));
}
}
private static void resolveSignedMessage(Consumer<PlayerChatMessage> p_250000_, CommandSourceStack p_252335_, PlayerChatMessage p_249420_) {
MinecraftServer minecraftserver = p_252335_.getServer();
CompletableFuture<FilteredText> completablefuture = filterPlainText(p_252335_, p_249420_);
Component component = minecraftserver.getChatDecorator().decorate(p_252335_.getPlayer(), p_249420_.decoratedContent());
p_252335_.getChatMessageChainer().append(completablefuture, p_296325_ -> {
PlayerChatMessage playerchatmessage = p_249420_.withUnsignedContent(component).filter(p_296325_.mask());
p_250000_.accept(playerchatmessage);
});
}
private static void resolveDisguisedMessage(Consumer<PlayerChatMessage> p_249162_, CommandSourceStack p_248759_, PlayerChatMessage p_252332_) {
ChatDecorator chatdecorator = p_248759_.getServer().getChatDecorator();
Component component = chatdecorator.decorate(p_248759_.getPlayer(), p_252332_.decoratedContent());
p_249162_.accept(p_252332_.withUnsignedContent(component));
}
private static CompletableFuture<FilteredText> filterPlainText(CommandSourceStack p_252063_, PlayerChatMessage p_251184_) {
ServerPlayer serverplayer = p_252063_.getPlayer();
return serverplayer != null && p_251184_.hasSignatureFrom(serverplayer.getUUID())
? serverplayer.getTextFilter().processStreamMessage(p_251184_.signedContent())
: CompletableFuture.completedFuture(FilteredText.passThrough(p_251184_.signedContent()));
}
public MessageArgument.Message parse(StringReader p_96834_) throws CommandSyntaxException {
return MessageArgument.Message.parseText(p_96834_, true);
}
public <S> MessageArgument.Message parse(StringReader p_345550_, @Nullable S p_345556_) throws CommandSyntaxException {
return MessageArgument.Message.parseText(p_345550_, EntitySelectorParser.allowSelectors(p_345556_));
}
@Override
public Collection<String> getExamples() {
return EXAMPLES;
}
public static record Message(String text, MessageArgument.Part[] parts) {
Component resolveComponent(CommandSourceStack p_232197_) throws CommandSyntaxException {
return this.toComponent(p_232197_, EntitySelectorParser.allowSelectors(p_232197_));
}
public Component toComponent(CommandSourceStack p_96850_, boolean p_96851_) throws CommandSyntaxException {
if (this.parts.length != 0 && p_96851_) {
MutableComponent mutablecomponent = Component.literal(this.text.substring(0, this.parts[0].start()));
int i = this.parts[0].start();
for (MessageArgument.Part messageargument$part : this.parts) {
Component component = messageargument$part.toComponent(p_96850_);
if (i < messageargument$part.start()) {
mutablecomponent.append(this.text.substring(i, messageargument$part.start()));
}
mutablecomponent.append(component);
i = messageargument$part.end();
}
if (i < this.text.length()) {
mutablecomponent.append(this.text.substring(i));
}
return mutablecomponent;
} else {
return Component.literal(this.text);
}
}
public static MessageArgument.Message parseText(StringReader p_96847_, boolean p_96848_) throws CommandSyntaxException {
if (p_96847_.getRemainingLength() > 256) {
throw MessageArgument.TOO_LONG.create(p_96847_.getRemainingLength(), 256);
} else {
String s = p_96847_.getRemaining();
if (!p_96848_) {
p_96847_.setCursor(p_96847_.getTotalLength());
return new MessageArgument.Message(s, new MessageArgument.Part[0]);
} else {
List<MessageArgument.Part> list = Lists.newArrayList();
int i = p_96847_.getCursor();
while (true) {
int j;
EntitySelector entityselector;
while (true) {
if (!p_96847_.canRead()) {
return new MessageArgument.Message(s, list.toArray(new MessageArgument.Part[0]));
}
if (p_96847_.peek() == '@') {
j = p_96847_.getCursor();
try {
EntitySelectorParser entityselectorparser = new EntitySelectorParser(p_96847_, true);
entityselector = entityselectorparser.parse();
break;
} catch (CommandSyntaxException commandsyntaxexception) {
if (commandsyntaxexception.getType() != EntitySelectorParser.ERROR_MISSING_SELECTOR_TYPE
&& commandsyntaxexception.getType() != EntitySelectorParser.ERROR_UNKNOWN_SELECTOR_TYPE) {
throw commandsyntaxexception;
}
p_96847_.setCursor(j + 1);
}
} else {
p_96847_.skip();
}
}
list.add(new MessageArgument.Part(j - i, p_96847_.getCursor() - i, entityselector));
}
}
}
}
}
public static record Part(int start, int end, EntitySelector selector) {
public Component toComponent(CommandSourceStack p_96861_) throws CommandSyntaxException {
return EntitySelector.joinNames(this.selector.findEntities(p_96861_));
}
}
}