Войти или зарегистрироваться

Помогите Мои вопросы по разработке плугинов

  • Автор темы Автор темы Bars
  • Дата начала Дата начала

Bars

Старожил
Девелопер
Пользователь
Баллы
173
1. Дайте пожалуйста пример, а то после перезагрузки сервера будет твориться хаос.
Пока у меня только кнопки, то сделал хешмапой. Будет несколько блоков - сделаю на двумерных массивах, чтобы вместить больше инфы.

2. Как покрасить броню? Вот, что у меня (только не работает):
Java:
for (ItemStack a : p.getEquipment().getArmorContents()) {
    if (a != null && a.getTypeId() != 0) {
        ((LeatherArmorMeta) a.getItemMeta()).setColor(Color.fromRGB(0, 0, 0));
    }
}

3. Как определить, кикнут был игрок, либо он сам вышел с сервера?
Ведь при событии Player
KickEvent всё равно выполняется PlayerQuitEvent.
Мне нужно, чтобы игрок, который вышел сам, был убит при следующем входе.

Тут как-нибудь сам разберусь, пока до этого дела ещё недошёл.
 
Последнее редактирование:
Например, если игрок поставил кнопку, то через минуту она не исчезнет, если сервер будет выключен раньше. И этих кнопок мб сколь угодно много. И тогда другие смогут пробираться в данжи не имея своих кнопок, т.к. после включения сервера задачи по удалению этой кпопки не будет. То же и с NPC игроков, которые должны исчезать через 15 секунд после выхода игрока, в противном же случае он сможет убить своего NPC и получить все свои вещи, которые были у него в инвентаре перед выходом.
 
Игрок поставил кнопку - выполняем runTaskLater, который через минуту её уберёт.
Игрок вышел с сервера - спавним его NPC - выполняем runTaskLater, который через 15 секунд его уберёт (задеспавнит).

Но при выключении сервера все эти runTaskLater принудительно останавливаются и отложенные задачи не выполняются. А после включения не возобновляются.

Так вот, как эти отложенные задачи принудительно выполнить?

Например, поставил игрок кнопку, а через 20 секунд сервер выключился. Всё - после включения сервера задачи на удаление кнопки как не бывало - и она останется на своём месте навсегда (покуда не убрать вручную). А так бы она исчезла принудительно.
 
Тогда попробуй сделать через HashMap.
 
Какой ключ с каким значением записывать? И хешмапы ведь тоже хранятся до выключения сервера.
 
Какой ключ с каким значением записывать? И хешмапы ведь тоже хранятся до выключения сервера.
Храни все кнопки в переменной типа HashMap, а при onDisable в цикле их уничтожай.
Аналогично с NPC игроками.
 
Глупая наверное идея, но попробуй хранить в конфиге.
tasks:
button: false
npc: true

и если в onEnable он найдет true, то запустит runTaskLater.
 
В шедулере есть метод getPendingTasks(), перебирай и запускай через него все задания
 
Я его видел, но не знаю, как использовать и выполнять только runTaskLater'ы.
Ну а что там еще может быть кроме отложенных заданий?
Перебираешь циклом все задания и запускаешь
 
Там есть и простые задания (таймер, увеличивающий жажду, автосейв хешмапок в БД и т.д.).
 
Ну значит делай как предложили - записывай в хешмап нужные БуккитТаски и при выключении перебирай и выполняй их
 
Ещё два вопроса (в первом посте).
 
Последнее редактирование:
А ты ItemMeta к броне назначил?

Нашел на bukkit.org

Код:
  ItemStack stack = new ItemStack(Material.LEATHER_CHESTPLATE, 1);
                        ItemMeta meta = stack.getItemMeta();
                        ArrayList<String> lore = new ArrayList<String>();
                        meta.setDisplayName("God Chestplate");
                        lore.add(ChatColor.YELLOW+"Lore1");
                        lore.add(ChatColor.YELLOW+"Lore2");
                        lore.add(ChatColor.RED+"Lore3");
                        meta.setLore(lore);
                        LeatherArmorMeta lam = (LeatherArmorMeta)stack.getItemMeta();//Dye Code
                        lam.setColor(Color.fromRGB(56, 13, 7));//Dye code
                        stack.setItemMeta(meta);
                        stack.setItemMeta(lam);//Dye Code
                        event.getPlayer().getInventory().addItem(new ItemStack(stack));
 
  • Нравится
Реакции: Bars
А ты ItemMeta к броне назначил?

Нашел на bukkit.org

Код:
  ItemStack stack = new ItemStack(Material.LEATHER_CHESTPLATE, 1);
                        ItemMeta meta = stack.getItemMeta();
                        ArrayList<String> lore = new ArrayList<String>();
                        meta.setDisplayName("God Chestplate");
                        lore.add(ChatColor.YELLOW+"Lore1");
                        lore.add(ChatColor.YELLOW+"Lore2");
                        lore.add(ChatColor.RED+"Lore3");
                        meta.setLore(lore);
                        LeatherArmorMeta lam = (LeatherArmorMeta)stack.getItemMeta();//Dye Code
                        lam.setColor(Color.fromRGB(56, 13, 7));//Dye code
                        stack.setItemMeta(meta);
                        stack.setItemMeta(lam);//Dye Code
                        event.getPlayer().getInventory().addItem(new ItemStack(stack));
Помоему проще было бы использовать один LeatherArmorMeta
 
Назад
Верх