1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Пару вопросов по созданию плагина.

Тема в разделе "Разработка плагинов для новичков", создана пользователем MaрШутЧик, 25 июл 2016.

  1. Автор темы
    MaрШутЧик

    MaрШутЧик Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    serega100
    1. Как выдать игроку предметы?
    2. Как вывести надпись в чат при поломке блока(например - эндер сундука)?
    3. Как положить предмет игроку в эндер сундук?
     
  2. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    1)Если только в один слот:
    Код:
    for(int i=0;i<36;i++){
                if(player.getInventory().getItem(i).getType()==Material.AIR){
                    player.getInventory().setItem(i, Material.Бла_Бла_Бла);
                    return;
                }
            }
    
    Если во все:
    Код:
    for(int i=0;i<36;i++){
                if(player.getInventory().getItem(i).getType()==Material.AIR){
                    player.getInventory().setItem(i, Material.Бла_Бла_Бла);
                }
            }
    
    2)
    Код:
    public void onBreakBlock(BlockBreakEvent e){
            if(e.getBlock().getType()==Material.ENDER_CHEST){
                e.getPlayer().sendMessage("Тут message");
            }
        }
    
    3)
    Код:
            for(int i=0;i<27;i++){
                if(player.getEnderChest().getItem(i).getType()==Material.AIR){
                    player.getEnderChest().setItem(i, Material.Тут_Предмет);
                }
            }
    
     
  3. Novichock

    Novichock Активный участник Пользователь

    Баллы:
    76
    Ты в 1 и 3 создаёшь бесполезные циклы.Можно выдавать предметы ,не проверяя слоты:

    player.getInventory().addItem(new ItemStack(Material.ENDER_CHEST,1));
     
  4. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Мне так удобнее
    Я этим буду пользоваться, когда нужно будет выдать определенное кол-во предметов
     
  5. Автор темы
    MaрШутЧик

    MaрШутЧик Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    serega100
    А чему равен player?
    У меня ничего не работает
    Код:
    package serega100.GriefIslands;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Material;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.*********ventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class mainClass extends JavaPlugin{
        Logger log = getLogger();
        public void onEnable(){
            log.info("GriferIslands for gameserver was enabled!");
        }
        public void onDisable(){
            log.info("GriferIslands for gameserver was disabled!");
        }
        public void onJoin(PlayerJoinEvent p){
            p.getPlayer().getInventory().addItem(new ItemStack(Material.ENDER_CHEST,1));
            p.getPlayer().getEnderChest().addItem(new ItemStack(Material.DIAMOND_SWORD,1));
            
        }
        public void onBreakBlock(BlockBreakEvent e){
            if(e.getBlock().getType()==Material.ENDER_CHEST){
                e.getPlayer().sendMessage("Тут message");
            }
        }
    }
     
  6. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    player - это сам игрок, его я не стал показывать, как доставать.
     
  7. Novichock

    Novichock Активный участник Пользователь

    Баллы:
    76
    У тебя класс не зарегистрирован как слушатель + нету @EventHandler
    И ещё вроде-как на рубаките есть туториал про ивенты и на часто используемые классы как Player.
     
  8. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    А еще есть вот эта тема, которую, как видимо я писал для слабаков...
     
  9. TheEfwio

    TheEfwio Активный участник Пользователь

    Баллы:
    76
    Ты серьёзно? Этим методом ты выдашь игроку эндер сундук.
     
  10. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Это пример
     
  11. Автор темы
    MaрШутЧик

    MaрШутЧик Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    serega100
    Может кто скажет, чему равен player, а то я в яве особо не секу.
     
  12. Novichock

    Novichock Активный участник Пользователь

    Баллы:
    76
    Это Bukkit API, player - это экземпляр класса Player,полученный из ивента.
    Player p = e.getPlayer();//написал без среды,может не работать
     
  13. Автор темы
    MaрШутЧик

    MaрШутЧик Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    serega100
    А что за е???
    Мне надо, чтобы переменная работала во всём классе, а не только в одном void'е
    Или вы хотите сказать, что так нельзя?
     
  14. Novichock

    Novichock Активный участник Пользователь

    Баллы:
    76
    e - это экземпляр ивента,переменные можно хоть где сохранять,главное знать как.
     
  15. Автор темы
    MaрШутЧик

    MaрШутЧик Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    serega100
    Код:
        public void onJoin(PlayerJoinEvent p){
            p.getPlayer().getInventory().addItem(new ItemStack(Material.ENDER_CHEST,1));
            p.getPlayer().getEnderChest().addItem(new ItemStack(Material.DIAMOND_SWORD,1));
    Player player = p.getPlayer();
          
        }
    И p.getplayer будет работать во всём классе?
     
  16. Novichock

    Novichock Активный участник Пользователь

    Баллы:
    76
    Нет,тебе в главном классе надо создать переменную player и в методе использовать this.player = e.getPlayer();
     
  17. Автор темы
    MaрШутЧик

    MaрШутЧик Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    serega100
    @EventHandler не помог
    Код:
    package serega100.GriefIslands;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Material;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.*********ventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class mainClass extends JavaPlugin implements Listener{
        Logger log = getLogger();
        public void onEnable(){
            log.info("GriferIslands 2 for gameserver was enabled!");
        }
        public void onDisable(){
            log.info("GriferIslands 2 for gameserver was disabled!");
        }
        @EventHandler
        public void onJoin(PlayerJoinEvent p){
            p.getPlayer().getInventory().addItem(new ItemStack(Material.ENDER_CHEST,1));
            p.getPlayer().getEnderChest().addItem(new ItemStack(Material.DIAMOND_SWORD,1));
            log.info(p.getPlayer().getName() + "Зашёл на сервер");
        }
        public void onBreakBlock(BlockBreakEvent e){
            if(e.getBlock().getType()==Material.ENDER_CHEST){
                log.info(e.getPlayer().getName() + "сломал эндерсундук");
                e.getPlayer().sendMessage("Тут message");
            }
        }
    }

    Что значит "Не зарегистрирован????". OnEnable и OnDisable работают .
     
  18. Novichock

    Novichock Активный участник Пользователь

    Баллы:
    76
    Не вырывай без контекста,я написал,что он не зарегистророван как слушатель тебе надо реализовать интерфейс Listener ( implement Listener) - это позволит в классе отлавливать ивенты через @EventHandler
     
  19. Автор темы
    MaрШутЧик

    MaрШутЧик Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    serega100
    "public class mainClass extends JavaPlugin implements Listener"
    Вас читать учили?
     
  20. Novichock

    Novichock Активный участник Пользователь

    Баллы:
    76
    Прошу прощения за не прочтение нового кода,но @EventHandler надо ставить перед каждым методом в котором ловится ивент.
     

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