This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
Gestus/src/main/java/com/thebrokenrail/gestus/command/EmoteCommand.java

56 lines
2.8 KiB
Java

package com.thebrokenrail.gestus.command;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
import com.mojang.brigadier.suggestion.Suggestions;
import com.thebrokenrail.gestus.Gestus;
import com.thebrokenrail.gestus.emote.EmoteRegistry;
import net.minecraft.command.argument.EntityArgumentType;
import net.minecraft.command.argument.IdentifierArgumentType;
import net.minecraft.server.command.CommandManager;
import net.minecraft.server.command.CommandSource;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.LiteralText;
import net.minecraft.text.TranslatableText;
import net.minecraft.util.Identifier;
import java.util.Collection;
import java.util.Collections;
public class EmoteCommand {
private static final DynamicCommandExceptionType NOT_FOUND_EXCEPTION = new DynamicCommandExceptionType(object -> new LiteralText(new TranslatableText("command." + Gestus.NAMESPACE + ".emote.unknown_emote", object).getString()));
public static void register(CommandDispatcher<ServerCommandSource> dispatcher) {
dispatcher.register(CommandManager.literal("emote")
.then(CommandManager.argument("emote", IdentifierArgumentType.identifier())
.suggests((ctx, builder) -> ctx.getSource() != null ? CommandSource.suggestIdentifiers(EmoteRegistry.getAll(), builder) : Suggestions.empty())
.executes(ctx -> run(ctx, Collections.singletonList(ctx.getSource().getPlayer())))
.then(CommandManager.argument("player", EntityArgumentType.players())
.requires(source -> source.hasPermissionLevel(2))
.executes(ctx -> run(ctx, EntityArgumentType.getPlayers(ctx, "player")))
)
)
);
}
private static int run(CommandContext<ServerCommandSource> ctx, Collection<ServerPlayerEntity> players) throws CommandSyntaxException {
Identifier emote = IdentifierArgumentType.getIdentifier(ctx, "emote");
if (EmoteRegistry.get(emote) != null) {
int i = 0;
for (ServerPlayerEntity player : players) {
if (player != null) {
Gestus.playCustomEmote(player, emote);
i++;
}
}
ctx.getSource().sendFeedback(new LiteralText(new TranslatableText("command." + Gestus.NAMESPACE + ".emote.playing_emote").getString()), false);
return i;
} else {
throw NOT_FOUND_EXCEPTION.create(emote);
}
}
}