Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Команда от игрока с правами оператора.

General

Старожил
Пользователь
Баллы
123
Ниже мы видим довольно простой код:
Код:
import java.lang.reflect.Method;
import java.util.Map;
 
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
 
import net.morematerials.MoreMaterials;
import net.morematerials.handlers.GenericHandler;
 
 
public class CommandHandler extends GenericHandler {
 
    @Override
    public void init(MoreMaterials instance) {
    }
 
    @Override
    public void shutdown() {
    }
 
    @Override
    public void onActivation(Event event, Map<String, Object> config) {
        // Get the player for this event.
        Player player;
        try {
            Method method = event.getClass().getMethod("getPlayer");
            player = (Player) method.invoke(event);
        } catch (Exception exception) {
            return;
        }
       
        // Call the chat command :D
        if (config.containsKey("Command")) {
            player.chat((String) config.get("Command"));
        }
    }
 
}
Команды здесь выполняют от игрока, но какой смысл выполнения команд от игрока, если им всё равно нужно выдавать на них пермишены?
То есть: Игрок юзает предмет на котором висит команда, но эта команда выполняется от игрока, мне нужно, чтоб эта команда выполнялась от игрока, но при этом с правами оператора.
Что дало бы игроку абсолютную власть, если бы он смог изменить команду у предмета.

Надеюсь на помощь девелоперов.
 
Плагины обычно проверяют пермишены в onCommand() , влезть нереально.
Но можно творить непотребство
Код:
// Call the chat command :D
if (config.containsKey("Command")) {
player.setOP(true);
getCommand(Имя нужной команды).execute(player, чёто-тут нужно бы документацию прочитать, аргументы команды);
player.setOP(false);
}
Так как я предполагаю что в коде "Command" - это полный набор с аргументами, то придётся побить на массив и 0й элемент отправить как имя команды, а остальное - в аргументы.
По идее произойдёт это всё последовательно, так что игрок не успеет заюзать опку.

проверяй
 
Плагины обычно проверяют пермишены в onCommand() , влезть нереально.
Но можно творить непотребство
Код:
getCommand(Имя нужной команды).execute(player, чёто-тут нужно бы документацию прочитать, аргументы


проверяй
То, что в скобках нужно заменить или убрать? Если заменить, то тогда плагин не будет работать нормально.
 
Хотя некоторые плагины опку не уважают и потому придётся с помощью ваулта допихивать игрока в группу со всем правами а потом запихивать обратно.
То, что в скобках нужно заменить или убрать? Если заменить, то тогда плагин не будет работать нормально.
Что-то не пойму про что ты конекретно.
 
(Имя нужной команды) про это и чёто-тут нужно бы документацию прочитать, аргументы
 
(Имя нужной команды) про это и чёто-тут нужно бы документацию прочитать, аргументы
Да, заменить на необходимые вещи которые можно выдрать из плагина
Имя команды - это
(String config.get("Command"))).split(" ")[0] , аргументы - остальная часть массива
player - это (CommandSender)player
А вот место где нужно прочитать документацию - туда просто запихни тоже имя команды, я думаю хватит. Этим полем ни один нормальный плагин не пользуется.
 
Не работает, выдаёт ошибку
Код:
plugins/MoreMaterials/handlers/src/CommandHandler.java:33: error: cannot find symbol
player.setOP(true);
 
^
 
symbol:  method setOP(boolean)
 
location: variable player of type Player
 
plugins/MoreMaterials/handlers/src/CommandHandler.java:35: error: cannot find symbol
 
getCommand.execute(player);
^
 
symbol:  variable getCommand
 
location: class CommandHandler
 
plugins/MoreMaterials/handlers/src/CommandHandler.java:36: error: cannot find symbol
 
player.setOP(false);
      ^
symbol:  method setOP(boolean)
location: variable player of type Player
 
3 errors
Пофиксил всё равно так же ошибка

Код:
player.setOP(true);
getCommand.execute(player);
player.setOP(false);
 
Не работает, выдаёт ошибку
Код:
plugins/MoreMaterials/handlers/src/CommandHandler.java:33: error: cannot find symbol
player.setOP(true);
 
^
 
symbol:  method setOP(boolean)
 
location: variable player of type Player
 
plugins/MoreMaterials/handlers/src/CommandHandler.java:35: error: cannot find symbol
 
getCommand.execute(player);
^
 
symbol:  variable getCommand
 
location: class CommandHandler
 
plugins/MoreMaterials/handlers/src/CommandHandler.java:36: error: cannot find symbol
 
player.setOP(false);
      ^
symbol:  method setOP(boolean)
location: variable player of type Player
 
3 errors

Код:
player.setOP(true);
getCommand.execute(player);
player.setOP(false);

Да я ж неточные названия методов привёл, проверять надо же, у меня сейчас под рукой нет IDE.
setOP() - настоящее название setOp()
Bukkit.getCommand("autosaveworld").execute(player, "autosaveworld", String[]{"help"}); - вот пример вызовет команду /autosaveworld help
как то так, позже прду - скажу как надо.
 
Да я ж неточные названия методов привёл, проверять надо же, у меня сейчас под рукой нет IDE.
setOP() - настоящее название setOp()
Bukkit.getCommand("autosaveworld").execute(player, "autosaveworld", String[]{"help"}); - вот пример вызовет команду /autosaveworld help
как то так, позже прду - скажу как надо.
Что-то мне кажется она будет не от игрока
Сорри не увидел. Но он всё равно мне ошибки выдаёт пойду править(с нубо знаниями джавы)
Нифига строка с getCommand не работает или пишет, что-то про string или ещё что-то.
Да я ж неточные названия методов привёл, проверять надо же, у меня сейчас под рукой нет IDE.
setOP() - настоящее название setOp()
Bukkit.getCommand("autosaveworld").execute(player, "autosaveworld", String[]{"help"}); - вот пример вызовет команду /autosaveworld help
как то так, позже прду - скажу как надо.
Уже вечер вторника, где ты?
 
Что-то мне кажется она будет не от игрока
Сорри не увидел. Но он всё равно мне ошибки выдаёт пойду править(с нубо знаниями джавы)
Нифига строка с getCommand не работает или пишет, что-то про string или ещё что-то.

Уже вечер вторника, где ты?
Код:
getCommand("autosaveworld").execute((CommandSender)Bukkit.getPlayerExact("Shevchik"), "autosaveworld", new String[]{"help"}); - от имени игрока Shevchik вызовет команду /autosaveworld help
Учти что getCommand() можно вызвать только из главного класса плагина, так что нужно будет хранить где-то ссылку на главный класс плагина.
 

Поделиться этой страницей

Назад
Верх