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

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

Discussion in 'Разработка плагинов для новичков' started by MaрШутЧик, Jul 25, 2016.

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

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

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

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

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

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

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

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

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

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

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

    Trophy Points:
    21
    Имя в Minecraft:
    serega100
    А чему равен player?[DOUBLEPOST=1469506710,1469505105][/DOUBLEPOST]У меня ничего не работает
    Code:
    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_ Активный участник Пользователь

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Trophy Points:
    21
    Имя в Minecraft:
    serega100
    Code:
        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 Активный участник Пользователь

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

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

    Trophy Points:
    21
    Имя в Minecraft:
    serega100
    @EventHandler не помог
    Code:
    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 Активный участник Пользователь

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

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

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

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

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

Share This Page