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

Туториал Пишем простой плагин для bukkit (v1.2.5+)

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем DmitriyMX, 13 июн 2012.

?

Продолжать выкладывать туториалы по написанию плагинов?

  1. Да

    157 голосов
    95,7%
  2. Нет

    7 голосов
    4,3%
  1. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    Как кикнуть определённого игрока?
     
  2. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Player.kickPlayer("Причина");
     
    kaban1997 нравится это.
  3. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    Спасибо
     
  4. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    Не, не робит, тем более надо указать ник игрока. Я на версии 1.2.5
     
    ВремяПриключений нравится это.
  5. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Код:
    Player[] p = plugin.getServer().getOnlinePlayers();
            if(p.length!=0)
                for(int i=0; i<p.length; i++)
                    if(p.getName().equals("Нужный ник"))
                        p.kickPlayer("Причина");
     
    Mik1313 и kaban1997 нравится это.
  6. akke

    akke Старожил Пользователь

    Баллы:
    103
    Код:
    for (Player p : plugin.getServer().getOnlinePlayers()) {
      if (p.getName().equalsIgnoreCase("nick"))
        p.kickPlayer("reason");
    }
    так наверно короче будет
     
  7. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    2012-09-28 13:57:24 [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'pid' in plugin pidPl v1.0
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:42)
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:166)
    at forge.bukkit.ForgeCommandMap.dispatch(ForgeCommandMap.java:55)
    at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:664)
    at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:862)
    at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:818)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:800)
    at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:34)
    at net.minecraft.server.NetworkManager.b(NetworkManager.java:262)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:119)
    at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:97)
    at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:651)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:525)
    at net.minecraft.server.ThreadServerApplication.run(SourceFile:492)
    Caused by: java.lang.NullPointerException
    at evilsworld.psih.PidPl.onCommand(PidPl.java:48)
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
    ... 13 more
    Выдаёт. В обоих случаях
     
    I-Am-Black-Overlord нравится это.
  8. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Но так пояснения будут требовать пояснений, скорее всего. Мой пример более базовый.
    У тебя ошибка в файлах PidPl.java, 48 строка и PluginCommand.java, 40 строка.
     
    GJEvolution нравится это.
  9. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    plugin Это что? Ошибка на этой же строке.
    у меня это в начале кода public Plugin plugin;

    И я написал [0] после p , а то ошибку Eclipse выдаёт.
    Player[] p = plugin.getServer().getOnlinePlayers();

    if(p.length!=0)

    for(int i=0; i<p.length; i++)

    if(p[0].getName().equals(args[0]))

    p[0].kickPlayer("Причина");

    Нашёл код добавляющий рецепт крафта. Как в рецепт добавить вещи из модов?
    Вот код:
    ShapedRecipe recipe1 = new ShapedRecipe(new ItemStack(Material.MONSTER_EGGS, 1));
    recipe1.shape(new String[] { "CAC", "ARA", "CAC" });
    recipe1.setIngredient('A', Material.);
    Вот непойму как заместо Material вписать id или предмет из мода
     
    ПриветОтМиднайта нравится это.
  10. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Вот самый базовый ;)
    Bukkit.getPlayerExact("vasja").kickPlayer("Мне щас так нельзя!");
     
    kaban1997 и Mik1313 нравится это.
  11. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Подле этого примера нужно проставить try и catch, иначе в случае несуществующего игрока пойдёт материться консоль.
     
    kaban1997 и Mik1313 нравится это.
  12. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    Спасибо вам

    +1

    Разобрался, надо в этой строке:
    ShapedRecipe recipe1 = new ShapedRecipe(new ItemStack(mat , 1));
    Сделать так:
    ShapedRecipe recipe1 = new ShapedRecipe(new ItemStack(mat , 1,(byte) 1));
    где "(byte) 1" доп.индекс
     
    Mik1313 нравится это.
  13. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    Да, я понял
     
    Оригинало_о нравится это.
  14. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    Как генерировать определённую руду, на определённой высоте?
     
  15. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    Не то. Ладно это возьмёт на себя мод.
    Другой вопрос: как заставить дропаться определённый предмет, из определённого блока?
     
  16. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Mik1313, мне кажется придётся ещё и событие отменить - иначе будет дропаться и старый блок тоже. Т.е. в приведенном примере помимо льда будет дропаться ещё и камень.

    Вообще, я давно писал предложение буккитовцам добавить методы event.setDrop() и event.getDrop(). Их даже добавили, но перед каким RB откатили обратно и с тех пор (несмотря на то, что где-то проскакивали обещание их реализовать) их больше движений в этом направлении не было. Вот повторная просьба: https://bukkit.atlassian.net/browse/BUKKIT-1905
     
  17. mayor123

    mayor123 Старожил Девелопер Пользователь

    Баллы:
    173
    При отмене события, блок не сломается..
     
  18. mayor123

    mayor123 Старожил Девелопер Пользователь

    Баллы:
    173
    И да, у меня был ещё один вариант, но я глубоко не уверен, что он заработает, так как наверное, предметы дропаются после вызова всех слушателей.
    Код:
    @EventHandler
    public void onBreak(BlockBreakEvent event) {
        Block b = event.getBlock();
        Location bLoc = b.getLocation();
        List<ItemStack> drops = b.getDrops();
        for(ItemStack i : drops) {
            for(Item ei : b.getWorld().getEntitiesByClass<Item>()) {
                Location l = ei.getLocation();
                if(ei.getItemStack().equals(i) && l.getBlockX().equals(bLoc.getBlockX()) && l.getBlockY().equals(bLoc.getBlockY()) && l.getBlockZ().equals(bLoc.getBlockZ())) {
                    ei.remove();
                }
            }
        }
    }
     
  19. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Тут пара ошибок(я так думаю).
    Код:
    @EventHandler(priority = EventPriority.MONITOR)
    ignoreCancelled = true - значит, что даже если событие было отменёно, камень все равно сломается и выпадет лёд.
    EventPriority.LOWEST - значит, что событие обрабатываться будет в первую очередь, возможно даже до обработки плагинами защиты.
    EventPriority.MONITOR - значит, что событие обрабатываться будет в последнюю очередь.
     
    Mik1313 нравится это.
  20. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    event.getBlock().setType(Material.AIR);
    Вот тут ошибка, как я понял, выпадает Material.AIR а это невозможно, поэтому тебя кидает из игры
     
    Сникерсни нравится это.

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