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

Помогите Несколько вопросов...

Тема в разделе "Разработка плагинов для новичков", создана пользователем enselerizer, 16 авг 2013.

Статус темы:
Закрыта.
  1. Автор темы
    enselerizer

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

    Баллы:
    123
    Имя в Minecraft:
    enselerizer
    Понимаю, что уже задолбал всех своими вопросами, но всё же они, к сожалению появляются.

    1 вопрос:
    Мне нужно выдать игроку определённый предмет, при этом, если в инвентаре есть свободный слот\незаконченный стак этого предмета, то он ему выдастся, если же нет - просто выбросится из его головы, как это происходит при нажатии на кнопку Q.
    Есть ли для этого простой способ, или это надо делать вручную длинной цепочкой IF'ов?

    2 вопрос:
    Есть ли простой способ заставить плагин чекать пермы, причём как пермы баккита, так и пермы плагинов, таких как PermissionsX?

    3 вопрос:
    Как мне выделять сообщения, отправляемые игроку\в чат цветом?

    Надеюсь на вашу помощь, заранее спасибо ;)
     
  2. Хостинг MineCraft
    <
  3. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Что за детские вопросы? Неужели так сложно посмотреть JavaDocs?

    Код:
    ну бредятина
    hasPermission() не в моде?
    ChatColor.ЦВЕТ + "Строка"
     
  4. Автор темы
    enselerizer

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

    Баллы:
    123
    Имя в Minecraft:
    enselerizer
    Я бы с радостью, еслиб знал английский - а так...[DOUBLEPOST=1376668357,1376667820][/DOUBLEPOST]И объясните мне пожалуйста - я уже давно не могу понять - что такое и как работает ItemStack?
     
  5. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Удаляй эклипс и забудь о разработке. А что тогда, каждый метод спрашивать теперь?
    http://jd.bukkit.org/beta/apidocs/
    Вот тут всё есть, даже гугель транслетом можно перевести и понять
     
  6. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    После этого у нас появятся стаки из 17-ти вёдер, 25 жемчужин края, 7 лопат и прочее.
    p.getInventory().getItem(i) == is это никогда не сработает т.к. адреса памяти этих двух объектов не совпадают.
    Удаляй эклипс и забудь о разработке.
    Код:
    ItemStack myIs = new ItemStack(10);
    HashMap<Integer, ItemStack> hm = (HashMap<Integer, ItemStack>) p.getInventory().all(myIs.getType());
    if(!hm.isEmpty())
    {
        for(ItemStack is: hm.values())
        {
            if(is.getAmount()<is.getMaxStackSize()&&
               is.isSimilar(myIs))
            {
                p.getInventory().addItem(myIs);
                hm.clear();
                break;
            }
        }
        if(hm.isEmpty())
            p.getWorld().dropItem(p.getEyeLocation(), myIs);
    }
    else
        p.getWorld().dropItem(p.getEyeLocation(), myIs);
    myIs -- ItemStack, который мы ищем или добавляем.
    p -- игрок.

    Проверить разрешение можно использовав hasPermission("разрешение"); от игрока(p.hasPermission("myPermission");) возвращет true, если разрешение есть.
    Это стандартная функция баккита, но такие плагины, как PEX её переопределяют под себя.

    ItemStack -- класс, при помощи которого хранится вся информация о предметах и блоках в различных инвентарях. Вот описание API данного класса.
     
    enselerizer нравится это.
  7. Автор темы
    enselerizer

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

    Баллы:
    123
    Имя в Minecraft:
    enselerizer
    Спасибо огромное!
    И отдельное спасибо за ссылочку на адекватное описание API.
    По javadocs смотреть было нереально.
     
  8. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Буээ, ну я же схематично, я не говорю, что так как я сказал, это единственный верный вариант. Этого хватит, чтобы разобраться самому.
    Ага, был бы он ещё у меня. Второй месяц только с телефона сюда захожу, наугад всё пишу
     
    The Midnight Wizard нравится это.
  9. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    Это не схематично, а заведомо не правильно. А потом появляются люди, которые сравнивают строки не через equals, а через ==...
     
  10. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Я предполагал, что нельзя таким образом сравнить итемстак, но решил проверить. На рассвете моего изучения джавы я именно так и сравнивал строки:)
     
  11. Автор темы
    enselerizer

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

    Баллы:
    123
    Имя в Minecraft:
    enselerizer
    Блин, я не понимаю.
    Я уже часа 2 потратил, ставил ItemStak по-разному, не выходит.
    Как мне задать в ItemStack тупо id предмета?
     
    I-Am-Black-Overlord нравится это.
  12. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    ItemStack is = new ItemStack(id);
     
    Attelis и enselerizer нравится это.
  13. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Лишняя проверка if (result.size()>0). Ибо если мапа пустая, по ней итерация и так не пойдет.

    Спасибо за код :)
    Прикручу его к vs команде TAKE

    UPD: как-то так
    Код:
    public void giveItemOrDrop (Player p, ItemStack item){
        for(ItemStack i: p.getInventory().addItem(item).values()) {
            p.getWorld().dropItem(p.getLocation(),i);
        }
    }
     
    fromgate нравится это.
  14. Автор темы
    enselerizer

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

    Баллы:
    123
    Имя в Minecraft:
    enselerizer
    Спасибо всем а ответы, только вот прежде, чем закрывать тему, хотел еще поинтересоваться:
    Вот например у меня стоит p.hasPermission("perm"). В таком случае, как этот перм будет выглядеть в самом файле пермов? Названиепроекта.perm? Я пробовал несколько вариантов, плагин перм не видит.
     
  15. Автор темы
    enselerizer

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

    Баллы:
    123
    Имя в Minecraft:
    enselerizer

    Fromgate, спасибо огромное!
    Приеду домой, попробую, напишу сюда.
    единственное подробное описание на весь топик =_=
     
  16. Автор темы
    enselerizer

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

    Баллы:
    123
    Имя в Minecraft:
    enselerizer
    Не работает :(

    Файл пермов (юзаю стандартные пермы баккита):
    Код:
    users:
      enselerizer:
          permissions:
          - myperm
    Плагин:
    Код:
    if(e.getPlayer().hasPermission("myperm") == true)
            {
                ...
            }
     
  17. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    В вики буккита сказано
    Так что используй какой-нибудь плагин для прав
     
    fromgate нравится это.
  18. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Никогда не замечал этот плагин. По описанию получше pex'a. Раньше бы нашёл, тоже бы везде использовал:) Но я не люблю перемены, даже если они к лучшему:rolleyes:
     
  19. Автор темы
    enselerizer

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

    Баллы:
    123
    Имя в Minecraft:
    enselerizer
    В общем всем огромное спасибо за ответы, теперь всё работает, скоро выйдет мой первый плугин.
    Тема зарыта [​IMG].
     
Статус темы:
Закрыта.

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