======= Примеры команд ======= Эти примеры доступны по лицензии "CC Attribution-Noncommercial-Share Alike 4.0 International", которая является текущей лицензией других статей вики. ===== Объявление ===== public final class BroadCastCommand { public static void register(CommandDispatcher dispatcher){ dispatcher.register(literal("broadcast") .requires(source -> source.hasPermissionLevel(2)) // Команда не будет отображаться в подсказках и не будет работать, если вы не оператор или оператор с уровнем разрешения 1. .then(argument("color", ColorArgumentType.color()) .then(argument("message", greedyString()) .executes(ctx -> broadcast(ctx.getSource(), getColor(ctx, "color"), getString(ctx, "message")))))); // Вы можете обработать аргументы здесь и передать их в команду. } public static int broadcast(ServerCommandSource source, Formatting formatting, String message) { final Text text = Text.literal(message).formatted(formatting); source.getMinecraftServer().getPlayerManager().broadcastChatMessage(text, MessageType.CHAT, source.getPlayer().getUuid()); return Command.SINGLE_SUCCESS; // Успех } } В вашем инициализаторе: public class ExampleMod implements ModInitializer{ @Override public void onInitialize() { ... CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> register(dispatcher)); } } В приведенных ниже примерах регистрации в обратных вызовах опущены. ===== /giveMeDiamond (Выдача алмаза) ===== Сначала основной код, где мы регистрируем "giveMeDiamond" как литерал, а затем блок ''executes'', чтобы сообщить диспетчеру, какой метод следует запустить. public static LiteralCommandNode register(CommandDispatcher dispatcher) { // Вы также можете вернуть LiteralCommandNode для использования с возможными перенаправлениями return dispatcher.register(literal("giveMeDiamond") .executes(ctx -> giveDiamond(ctx))); } Затем, поскольку мы хотим отдавать команды только игрокам, мы проверяем, является ли ''CommandSource'' игроком. Но мы можем использовать ''getPlayer'' и сделать оба действия одновременно, и выдать ошибку, если источник не является игроком. public static int giveDiamond(CommandContext ctx) throws CommandSyntaxException { final ServerCommandSource source = ctx.getSource(); final PlayerEntity self = source.getPlayer(); // Если игрок не является игроком, то команда завершается Затем мы добавляем в инвентарь игрока алмаз, проверяя, заполнен ли инвентарь: if(!player.inventory.insertStack(new ItemStack(Items.DIAMOND))){ throw new SimpleCommandExceptionType(Text.translatable("inventory.isfull")).create(); } return 1; } ===== Antioch (Взрыв) ===== ...lobbest thou thy Holy Hand Grenade of Antioch towards thy foe. who being naughty in My sight, shall snuff it. (англ. шутка) Кроме шуток, эта команда вызывает заряженную тротиловую шашку в указанное место или в местоположение курсора отправителя. Сначала создайте запись в ''CommandDispatcher'', которая принимает литерал ''antioch'' с необязательным аргументом местоположения для вызова сущности. public static void register(CommandDispatcher dispatcher) { dispatcher.register(literal("antioch") .then(required("location", BlockPosArgumentType.blockPos() .executes(ctx -> antioch(ctx.getSource(), BlockPosArgument.getBlockPos(ctx, "location"))))) .executes(ctx -> antioch(ctx.getSource(), null))); } Затем создание и показ сообщения c шуткой. public static int antioch(ServerCommandSource source, BlockPos blockPos) throws CommandSyntaxException { if(blockPos == null) { // В случае отсутствия введенного аргумента мы вычисляем позицию курсора игрока или выдаем ошибку, если ближайшая позиция слишком далека или находится за пределами мира. // Этот класс используется в качестве примера и на самом деле пока не существует. blockPos = LocationUtil.calculateCursorOrThrow(source, source.getRotation()); } final TntEntity tnt = new TntEntity(source.getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ(), null); tnt.setFuse(3); source.getServer().getPlayerManager().broadcastChatMessage(Text.literal("...lobbest thou thy Holy Hand Grenade of Antioch towards thy foe", MessageType.CHAT, UUID.randomUUID()).formatted(Formatting.RED), false); source.getServer().getPlayerManager().broadcastChatMessage(Text.literal("who being naughty in My sight, shall snuff it.", MessageType.CHAT, UUID.randomUUID()).formatted(Formatting.RED), false); source.getWorld().spawnEntity(tnt); return 1; }