Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

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

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

    MaрШутЧик Новичок Пользователь

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

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

    Баллы:
    46
    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.Тут_Предмет);
                }
            }
    
     
  4. Novichock

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

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

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

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

    Баллы:
    46
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Мне так удобнее[DOUBLEPOST=1469426120,1469426054][/DOUBLEPOST]
    Я этим буду пользоваться, когда нужно будет выдать определенное кол-во предметов
     
  6. Автор темы
    MaрШутЧик

    MaрШутЧик Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    serega100
    А чему равен player?[DOUBLEPOST=1469506710,1469505105][/DOUBLEPOST]У меня ничего не работает
    Код:
    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.bukkit.inventory.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");
            }
        }
    }
     
  7. _MediaNik_

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

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

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

    Баллы:
    76
    Skype:
    pavel.batalov1
    У тебя класс не зарегистрирован как слушатель + нету @EventHandler[DOUBLEPOST=1469514756][/DOUBLEPOST]И ещё вроде-как на рубаките есть туториал про ивенты и на часто используемые классы как Player.
     
  9. _MediaNik_

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

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

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

    Баллы:
    76
    Skype:
    theefwioc
    Имя в Minecraft:
    TheEfwio
    Ты серьёзно? Этим методом ты выдашь игроку эндер сундук.
     
  11. _MediaNik_

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

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

    MaрШутЧик Новичок Пользователь

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

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

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

    MaрШутЧик Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    serega100
    А что за е???
    Мне надо, чтобы переменная работала во всём классе, а не только в одном void'е[DOUBLEPOST=1469527526,1469527380][/DOUBLEPOST]Или вы хотите сказать, что так нельзя?
     
  15. Novichock

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

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

    MaрШутЧик Новичок Пользователь

    Баллы:
    21
    Имя в 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 будет работать во всём классе?[DOUBLEPOST=1469528124,1469528012][/DOUBLEPOST]
     
  17. Novichock

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

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

    MaрШутЧик Новичок Пользователь

    Баллы:
    21
    Имя в 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.bukkit.inventory.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");
            }
        }
    }
    [DOUBLEPOST=1469533496,1469533127][/DOUBLEPOST]
    Что значит "Не зарегистрирован????". OnEnable и OnDisable работают .
     
  19. Novichock

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

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

    MaрШутЧик Новичок Пользователь

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

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

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

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