Мелкие и не очень вопросы

Discussion in 'Разработка плагинов' started by fromgate, 16/12/15.

  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
Dismiss Notice
We welcome you on our site. This site is devoted to the Nukkit project and all that is connected with him. Here you can communicate, download plugins, also many other things get acquainted! Register the account right now :3
  1. fromgate

    fromgate Administrator

    Messages:
    665
    Likes Received:
    186
    Если у Вас есть вопрос о том как и что сделать на Java, спрашивайте в этой теме.
    Если Вы хотите как перевести какой-то участок кода с php на Java - приводите код, будем думать как это сделать.
     
  2. fromgate

    fromgate Administrator

    Messages:
    665
    Likes Received:
    186
    Первый вопрос (копирую из ВК):
    За случайные числа отвечает класс Random. Что интересно, помимо "родного для Java" Random, одноименный есть и в самом nukkit'е

    Пользоваться им надо так:
    Code:
            Random random = new Random(); // Объект можно объявить один раз на весь плагин
    random.nextBoolean(); // случайное true / false
    random.nextBoundedInt(int x); // числот от 0 до x
    random.nextRange(); // случайное целое выше 0
    random.nextInt();   // случайное целое (в т.ч. и ниже нуля)
    
    Это не все возможное варианты, но думаю вопросов не будет.
     
  3. Doomhawk

    Doomhawk Developer

    Messages:
    114
    Likes Received:
    26
    Здравствуйте. Каким образом можно сделать задержку, ибо плагин отказывается запускаться, если в нем есть Thread.sleep?
     
  4. fromgate

    fromgate Administrator

    Messages:
    665
    Likes Received:
    186
    Thread sleep - это слишком категоричный метод. Если его выполнить в основном потоке сервера, то уснёт всё, а не только нужный метод.

    Поэтому варианта два (в зависимости от того, что нужно):

    1. Если нужно организовать что-то вроде cooldown'а: cохраняем время (допустим текущее + xxxx) и потом проверяем наступило это время или нет. Если не наступило - то отказывать игроку в каких-то действиях. Это типичное решение для плагинов, к примеру, ставят вводят ограничение по времени на использование команды.
    2. Еслин нужно выполнить код через какое-то время. В этом случае используем шедуллер. Вот пример выполнения через 10 секунд:
      Code:
            getServer().getScheduler().scheduleDelayedTask(new Runnable() {
      public void run() {
      ///
      }
      },20*10);
     
    Doomhawk likes this.
  5. Doomhawk

    Doomhawk Developer

    Messages:
    114
    Likes Received:
    26
    Не понимаю, в чем проблема:
    Code:
    @EventHandler
    public void onPlayerChatEvent(PlayerChatEvent event) {
    this.getLogger().info("test");
    }
    По идее, когда игрок пишет в чат любой текст, в консоли должна отобразится надпись "test". Но почему-то этого не происходит. Событие вообще не обрабатывается. В чем может быть проблема?
    Заранее спасибо.
     
  6. Doomhawk

    Doomhawk Developer

    Messages:
    114
    Likes Received:
    26
    Заметил, что вообще никакие события (event) не обрабатываются.
    implements Listener есть, компилируется без ошибок. В чем еще может быть проблема? Вот plugin.yml:
    Code:
    #name, main, version and api are required
    name: Test
    main: Test.MainClass
    
    [size=7]remember version and api is string, don't write it like this: 1.0.0, or there will be an exception[/size]
    version: "1.0"
    api: ["1.0.0"]
    author: "Doomhawk"
    load: POSTWORLD
     
  7. fromgate

    fromgate Administrator

    Messages:
    665
    Likes Received:
    186
    Doomhawk likes this.
  8. Doomhawk

    Doomhawk Developer

    Messages:
    114
    Likes Received:
    26
    Интересно, что у BlockBreakEvent нет функции, возвращающей Vector3. Как тогда узнавать координаты сломаного блока?
     
  9. fromgate

    fromgate Administrator

    Messages:
    665
    Likes Received:
    186
    Doomhawk likes this.
  10. RayDJGo

    RayDJGo Pioneer

    Messages:
    2
    Likes Received:
    0
    Minecraft:
    RayDJGo
    А как переделывать плагины с bukkit на nukkit?
     
  11. fromgate

    fromgate Administrator

    Messages:
    665
    Likes Received:
    186
    @RayDJGo

    Ну тут один вариант. Открываешь исходники. Убираюшь из библиотек BukkitAPI и подключаешь Nukkit. В отдельных случаях могут потребоваться дополинтельные библиотеки. К примеру, если плагин работает с базами данных - надо будет подключать DbLib.
    И получаешь исходники с кучей ошибок, которые надо исправлять.
    Когда исправишь все ошибке - есть шанс получить работающий плагин для Nukkit.
     
  12. Varfalomey

    Varfalomey Developer (Level 3)

    Messages:
    32
    Likes Received:
    12
    Minecraft:
    Varfalomey
    Code:
      public void onDeath(PlayerDeathEvent event){
    Player p = event.getEntity();
    int cause = p.getLastDamageCause().getCause();
    if(cause instanceof EntityDamageByEntityEvent){
    
    [pre][code]    }
    }
    [/code][/pre]
    выдаёт ошибку, как тогда получить убийцу?
     
  13. JustMaks19

    JustMaks19 Developer (Level 2)

    Messages:
    18
    Likes Received:
    2
    Minecraft:
    JustMaks19
    learn java please
    Code:
    @EventHandler
    public void onDeath(PlayerDeathEvent event){
    Entity entity = event.getEntity();
    EntityDamageEvent cause = entity.getLastDamageCause();
    if(cause instanceof EntityDamageByEntityEvent) {
    Entity damager = ((EntityDamageByEntityEvent) cause).getDamager();
    if(damager instanceof Player) {
    Player killer = (Player) damager;
    
    [pre][code]        }
        }
    }
    [/pre]
    [/code]
     
  14. fromgate

    fromgate Administrator

    Messages:
    665
    Likes Received:
    186
    int - это число.
    Смотри, что возвращает getCause() и создавай объект этого типа.
     
  15. Varfalomey

    Varfalomey Developer (Level 3)

    Messages:
    32
    Likes Received:
    12
    Minecraft:
    Varfalomey
    Так его IJ поставил. Он выдавал ошибку, и предложил подставить.
     
  16. fromgate

    fromgate Administrator

    Messages:
    665
    Likes Received:
    186
    Ну он тоже может ошибаться. Когда он подставлял - может у тебя код не был до конца набран или что-то ещё.
     
  17. Doomhawk

    Doomhawk Developer

    Messages:
    114
    Likes Received:
    26
    Возможно ли осуществить регистрацию эвентов для нескольких классов?


    Code:
    this.getServer().getPluginManager().registerEvents(new Auth(), this);
    this.getServer().getPluginManager().registerEvents(new Chat(), this);
    Класс Auth обрабатывает эвенты, а Chat - нет.
    Не исключено, что проблема в самом классе Chat, но глазами пробежался - ошибок не нашел.
     
  18. fromgate

    fromgate Administrator

    Messages:
    665
    Likes Received:
    186
    Можно. Можно сколько угодно классов регистрировать и даже более того, можно внутри одного класса писать несколько методов-обработчиков на одно и тоже событие.
     

Share This Page