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

Разбираемся в API WorldEdit'а

VaNnOrus

Старожил
Пользователь
Баллы
123
Здравствуйте.
Столкнулся с такой проблемой - нужно запустить, например, команду //chunk из WE при вводе команды плагина.
И сделать это нужно с правами "op".

Вот я обрабатываю ввод своей команды, а что дальше делать понять не могу...
Java:
public class название_класса implements CommandExecutor {
  @Override
  public boolean onCommand(CommandSender sender, Command command, String label, String[] args){
      if(command.getName().equalsIgnoreCase("название_команды")){
 
          return true;
      }
  return false;
  }
}
 
Хотели сказать WorldEdit API?
Читал, но что делать не понимаю.
Есть
Java:
public boolean execute(org.bukkit.command.CommandSender sender,
              String label,
              String[] args)
На сколько я понимаю - запуск команды label от имени sender с аргументами, но если у сендера нет прав, то вернется фальш. Мне нужно запустить команду из под опа от любого игрока.
 
Конечная задача какая? Чанк выделять через API не надо будет, он сам по себе чанк. Что с чанком дальше планируете делать?
 
Конечная задача какая? Чанк выделять через API не надо будет, он сам по себе чанк. Что с чанком дальше планируете делать?
Мне просто нужно выделение чанка или нескольких чанков вокруг игрока с помощью WE и их последующий приват через WG.
Раньше с эту задачу я выполнял с помощью commandhelpera, но на 1.4.7 он блюет ошибками в консоль, хоть вроде и работает.
Ну и вообще интересно понять как плагины писать :)
 
Здравствуйте.
Столкнулся с такой проблемой - нужно запустить, например, команду //chunk из WE при вводе команды плагина.
И сделать это нужно с правами "op".

Вот я обрабатываю ввод своей команды, а что дальше делать понять не могу...
Java:
public class название_класса implements CommandExecutor {
  @Override
  public boolean onCommand(CommandSender sender, Command command, String label, String[] args){
      if(command.getName().equalsIgnoreCase("название_команды")){
 
          return true;
      }
  return false;
  }
}
Я предпологаю что это невозможно. В данном случае. Если у игрока нет прав на эту команду WE, то выполненная эта же команда от имени OP выделит чанк для OP, а не нужного игрока. В данном случае нужно копаться в API WG/WE и никак иначе. Если я ошибаюсь - поправьте меня.
 
Я предпологаю что это невозможно. В данном случае. Если у игрока нет прав на эту команду WE, то выполненная эта же команда от имени OP выделит чанк для OP, а не нужного игрока. В данном случае нужно копаться в API WG/WE и никак иначе. Если я ошибаюсь - поправьте меня.
Ну у ВЕ ведь на гитхабе исходники лежат, я вот думаю какова вероятность, что у меня заработает скопированная оттуда команда, с убранным пермишеном и аналагичным импортом?
Вот команда:
Java:
    @Command(
        aliases = { "/chunk" },
        usage = "",
        flags = "s",
        desc = "Set the selection to your current chunk.",
        help =
            "Set the selection to the chunk you are currently in.\n" +
            "With the -s flag, your current selection is expanded\n" +
            "to encompass all chunks that are part of it.",
        min = 0,
        max = 0
    )
    @Logging(POSITION)
    @CommandPermissions("worldedit.selection.chunk")
    public void chunk(CommandContext args, LocalSession session, LocalPlayer player,
            EditSession editSession) throws WorldEditException {
 
        final Vector min;
        final Vector max;
        final LocalWorld world = player.getWorld();
        if (args.hasFlag('s')) {
            Region region = session.getSelection(world);
 
            final Vector2D min2D = ChunkStore.toChunk(region.getMinimumPoint());
            final Vector2D max2D = ChunkStore.toChunk(region.getMaximumPoint());
 
            min = new Vector(min2D.getBlockX() * 16, 0, min2D.getBlockZ() * 16);
            max = new Vector(max2D.getBlockX() * 16 + 15, world.getMaxY(), max2D.getBlockZ() * 16 + 15);
 
            player.print("Chunks selected: ("
                    + min2D.getBlockX() + ", " + min2D.getBlockZ() + ") - ("
                    + max2D.getBlockX() + ", " + max2D.getBlockZ() + ")");
        } else {
            final Vector2D min2D = ChunkStore.toChunk(player.getBlockIn());
 
            min = new Vector(min2D.getBlockX() * 16, 0, min2D.getBlockZ() * 16);
            max = min.add(15, world.getMaxY(), 15);
 
            player.print("Chunk selected: "
                    + min2D.getBlockX() + ", " + min2D.getBlockZ());
        }
 
        final CuboidRegionSelector selector;
        if (session.getRegionSelector(world) instanceof ExtendingCuboidRegionSelector)
            selector = new ExtendingCuboidRegionSelector(world);
        else
            selector = new CuboidRegionSelector(world);
        selector.selectPrimary(min);
        selector.selectSecondary(max);
        session.setRegionSelector(world, selector);
 
        session.dispatchCUISelection(player);
 
    }
 
Ну у ВЕ ведь на гитхабе исходники лежат, я вот думаю какова вероятность, что у меня заработает скопированная оттуда команда, с убранным пермишеном и аналагичным импортом?
Вот команда:
для этой команды тебе придётся половину ворлдэдита подтащить в зависимости.
Да и неправлиьно ты делаешь,тебе нужно выбрать регион и заприватить его.
Для этого тебе надо найти 6 координат, x1,y1,z1,x2,y2,z2 и воспользоваться API ворлдгарда для привата. Думай
 
для этой команды тебе придётся половину ворлдэдита подтащить в зависимости.
Да и неправлиьно ты делаешь,тебе нужно выбрать регион и заприватить его.
Для этого тебе надо найти 6 координат, x1,y1,z1,x2,y2,z2 и воспользоваться API ворлдгарда для привата. Думай
Проблема в том, что я не понимаю что мне нужно импортировать для работы кода -_-
Уже подумываю о том, чтоб эклипс установить, он вроде сам импорты предлагает. К нетбинсу привык уже...
Чтоб получить координаты я хотел использовать getchunk из ведра, какой(ие) класс(ы) импортировать чтоб getchunk работал?
 
@VaNnOrus, серьезно не копируйте команды. Лучше разберитесь как она и что делает и через API обращайтесь к тем же функциям.
 
@VaNnOrus, серьезно не копируйте команды. Лучше разберитесь как она и что делает и через API обращайтесь к тем же функциям.
Я в апи ведра ничего не понимаю, не могу понять что нужно импортировать, поэтому решил ВЕшкой работать.
Все говорят про знания java, а по сути, надо просто разбираться в апи. Читал учебники по java и пока что знания о том как выводить на экран что-либо и прочие азы особо не пригодились...
 
Я в апи ведра ничего не понимаю, не могу понять что нужно импортировать, поэтому решил ВЕшкой работать.
Все говорят про знания java, а по сути, надо просто разбираться в апи. Читал учебники по java и пока что знания о том как выводить на экран что-либо и прочие азы особо не пригодились...
Учебники вообще не помощь для познания языков программирования,разве что сразу на практику,сидеть и сразу практиковать,сейчас учатся так,надо что либо,узнал что за параметр,выучил,а в книгах лабудни много.
 
@VaNnOrus, я и имел в виду API WorldEdit'а.

Вот смотрите, к примеру, Вы хотите выбрать командой //chunk определенный чанк. Но смысл Вам разбираться с этой командой. Вам нужно решить, что Вы с выделенным чанком будете делать дальше, определить какая функция в WorldEdit'е это делает и уже потом вызывать непосредственно её, передавая ей в качестве параметра нужный Вам чанк.
 
Учебники вообще не помощь для познания языков программирования,разве что сразу на практику,сидеть и сразу практиковать,сейчас учатся так,надо что либо,узнал что за параметр,выучил,а в книгах лабудни много.
Ну обычно так и происходит - посмотрел описание чего-либо - испытал.
php и mysql я вообще, можно сказать, методом тыка познал познаю.
@VaNnOrus, я и имел в виду API WorldEdit'а.

Вот смотрите, к примеру, Вы хотите выбрать командой //chunk определенный чанк. Но смысл Вам разбираться с этой командой. Вам нужно решить, что Вы с выделенным чанком будете делать дальше, определить какая функция в WorldEdit'е это делает и уже потом вызывать непосредственно её, передавая ей в качестве параметра нужный Вам чанк.
Да вся проблема в том, что я даже этот чанк получить не могу, потому что не знаю какой класс из ведра нужно импортировать, чтоб получить гетчанк"ом чанк в котором стоит игрок...

Исходя из логики предположил что гетчанк заработает если импортировать org.bukkit.location. Импортировал, ничего не заработало...
 
@VaNnOrus, ну... я обычно о том, что нужно импортировать даже не задумываюсь.

Делаю так. Допустим, у вас объект есть объект player класса Player. Тогда чанк в котором он находится можно получить так:
Chunk ch = player.getLocation().getChunk();

При этом, когда я набираю в Eclipse
Chunk ch
то чтобы импортировался класс достаточно навести на название класса курсор мыши и в выпадающем хинте выбираю что нужно импортировать.
 
@VaNnOrus, ну... я обычно о том, что нужно импортировать даже не задумываюсь.

Делаю так. Допустим, у вас объект есть объект player класса Player. Тогда чанк в котором он находится можно получить так:
Chunk ch = player.getLocation().getChunk();

При этом, когда я набираю в Eclipse
Chunk ch
то чтобы импортировался класс достаточно навести на название класса курсор мыши и в выпадающем хинте выбираю что нужно импортировать.
Вот в чем вся проблема, я в нетбинсе работаю :D
Ладно, завтра поставлю эклипс, попробую что-нибудь состряпать.
Chunk ch = player.getLocation().getChunk();
Мм..."Chunk" тут это тип переменной, а ch ее название?

Вот у меня в первом посте была заготовка, я же должен использовать "sender" в качестве этого самого объекта "player" так ведь? А потом из "ch" могу получить координаты крайних блоков
Java:
 public boolean onCommand(CommandSender sender, Command command, String label, String[] args){
if(command.getName().equalsIgnoreCase("название_команды")){
Chunk ch = sender.getLocation().getChunk();
return true;
}
return false;
}
 
Вот в чем вся проблема, я в нетбинсе работаю :D
Ладно, завтра поставлю эклипс, попробую что-нибудь состряпать.

Мм..."Chunk" тут это тип переменной, а ch ее название?

Вот у меня в первом посте была заготовка, я же должен использовать "sender" в качестве этого самого объекта "player" так ведь? А потом из "ch" могу получить координаты крайних блоков
Java:
 public boolean onCommand(CommandSender sender, Command command, String label, String[] args){
if(command.getName().equalsIgnoreCase("название_команды")){
Chunk ch = sender.getLocation().getChunk();
return true;
}
return false;
}
надо:
Java:
public boolean onCommand(CommandSender sender, Command command, String label, String[] args){
if(command.getName().equalsIgnoreCase("название_команды")){
if (sender instaceof Player) {
Player player = (Player) sender;
Chunk ch = player.getLocation().getChunk();
return true;
}
return false;
}
}
Всегда проверяй кто послал команду а то нечаянно из консоли заюзаешь команду и приплыли
 
надо:
Java:
public boolean onCommand(CommandSender sender, Command command, String label, String[] args){
if(command.getName().equalsIgnoreCase("название_команды")){
if (sender instaceof Player) {
Player player = (Player) sender;
Chunk ch = player.getLocation().getChunk();
return true;
}
return false;
}
}
Всегда проверяй кто послал команду а то нечаянно из консоли заюзаешь команду и приплыли
Да, про это знал :) Ну от команды зависит еще, некоторые и из консоли можно/нужно посылать)
Скобку не закрыл в if (sender instaceof Player) { :)
 
Вот в чем вся проблема, я в нетбинсе работаю :D
Ладно, завтра поставлю эклипс, попробую что-нибудь состряпать.

Мм..."Chunk" тут это тип переменной, а ch ее название?

Вот у меня в первом посте была заготовка, я же должен использовать "sender" в качестве этого самого объекта "player" так ведь? А потом из "ch" могу получить координаты крайних блоков
Java:
 public boolean onCommand(CommandSender sender, Command command, String label, String[] args){
if(command.getName().equalsIgnoreCase("название_команды")){
Chunk ch = sender.getLocation().getChunk();
return true;
}
return false;
}
В NetBeans для этого служит комбинация Alt+Enter(по умолчанию) с текстовым курсором на проблемном месте.
 

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

Назад
Верх