CraftBukkit 1.8.8 — Возможно ли разрешить клиенту отправлять сообщения самостоятельно?

#minecraft #bukkit

#Minecraft #bukkit

Вопрос:

Я хочу создать плагин для защиты от взлома, который должен позволять клиенту писать «.msg Test». Таким образом, он напечатал бы «Test» и без hackclient «.msg Test» (ikr, не со всеми hackclients, но со многими).

Для этого клиент должен написать сообщение самостоятельно. Это можно сделать, отправив игроку сообщение и разрешив клиенту отправлять это сообщение «.msg» при нажатии на текст.

Но есть ли способ сделать это без участия игрока?

Комментарии:

1. То, что вы пытаетесь сделать, к сожалению, невозможно. Однако вы можете разрешить игрокам отправлять сообщения чата через сервер, используя player.chat(String str); метод.

Ответ №1:

Это возможно, мой друг 😃

Люди, как правило, упускают полезность метода

 myPlayer.chat();
  

Метод заставляет игрока добавлять что-либо в чат, а поскольку и чат, и команды проходят через один и тот же поток, вы можете просто изменить сообщение чата на команду, добавив префикс ‘/’

 myPlayer.chat("/msg test");
  

Заставит игрока выполнить команду ‘msg’ с аргументами ‘test’.

Ответ №2:

К сожалению, это невозможно через bukkit-api. Самое близкое к этому, что вы можете сделать, это использовать Server#dispatchCommand, но команда будет выполнена только в том случае, если она зарегистрирована на стороне сервера. https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Server.html#dispatchCommand(org.bukkit.command.CommandSender, java.lang.Строка)

Однако, если вы готовы использовать код NMS (net.minecraft.server), то

 CommandBlockListenerAbstract.executeCommand(ICommandListener sender, org.bukkit.command.CommandSender bSender, String command)
  

должно сработать, поскольку это то, что я видел, реализация была для командных знаков на сервере spigot 1.8.8 (TileEntitySign.java строка:181).

Комментарии:

1. Это действительно возможно, как указано в другом ответе.

2. @Kerooker немного новичок в StackOverflow. Должен ли я тогда просто удалить свой ответ или отредактировать то, что я сказал?

3. я не уверен. вы должны спросить об этом в meta, но я думаю, что все в порядке