Атрибуты, идея на их создание

xXCopafumeXx

Пользователь
Предложите идею как можно добавить свои атрибуты, желательно без NBT(но если прям топ, то давайте так) и чтобы в данных идеях получать игрока и игроков которых бьет человек с атрибутивным предметом.
 

q20w26a

Разработчик
Пользователь
Чем тебе NBT не угодил?) До 1.13 можно использовать разные библиотеки, а уже в самой 1.13 в Bukkit появился класс, позволяющий работать со своими NBT-тегами.
Ты можешь добавить право на использование предмета, уровень, может быть, необходимое количество сытости, потом проверяешь, имеет ли твой предмет теги, если имеет - проверяешь нужное тебе значение и далее уже что-то делаешь.
В твоем случае ловишь EntityDamageByEntityEvent, тебе нужны методы getDamager() и getEntity(). Первый вернет сущность, которая нанесла урон, второй вернет сущность получившую урон. Далее уже сравниваешь если сущности - игроки, получаешь предмет в руке, делаешь проверки которые я описал выше. Можешь использовать сразу PlayerDamageEvent, там суть работы та же.
 
Последнее редактирование:

xXCopafumeXx

Пользователь
q20w26a, мне на Spigot 1.12.2. Библиотеки лень учить, я пробывал через лор делать проверку, правда не очень получилось на и аргумерты атрибута хз как, если у форе то зачем мне допустим выполнять это 100 раз.
 

q20w26a

Разработчик
Пользователь
если у форе то зачем мне допустим выполнять это 100 раз
Не очень понял, прости.
Библиотеки лень учить
Программирование представляет из себя не только написание кода, но и постоянное изучение чего то нового. Это не значит что нужно каждый день зубрить новые фреймворки, но иногда нужно хотя бы немного уделять этому время, и быть готовым к тому, что те методы, которые ты использовал в своем приложении, рано или поздно перестанут работать. Но это небольшое отступление.
Сравнивать Lore можно, но это больше похоже на костыли.

Java:
//У нас есть такой Lore: "Право на использование: coolitem.use"
List<String> lore = itemMeta.getLore();
String permission = lore.get(1).split(":")[1].replaceAll(" ", "");
if (!player.hasPermission(permission)) {
    player.sendMessage("Вам нельзя использовать этот предмет!");
    event.setCancelled(true);
}
Слишком много действий. Но это работает.
 

xXCopafumeXx

Пользователь
Не очень понял, прости.
У дискорд как нибудь напишу, если не задолбусь.
//У нас есть такой Lore: "Право на использование: coolitem.use" List<String> lore = itemMeta.getLore(); String permission = lore.get(1).split(":")[1].replaceAll(" ", ""); if (!player.hasPermission(permission)) { player.sendMessage("Вам нельзя использовать этот предмет!"); event.setCancelled(true); }
А что за ивент ?
 

q20w26a

Разработчик
Пользователь
Любой ивент. Допустим, у тебя супер-кирка разрушающая 3х3, но ты хочешь сделать чтобы игрокам нужно было право на ее использование. Ловишь BlockBreakEvent и достаешь getPlayer(), там уже делаешь все проверки на айтемметы, Lore и прочее. Или тот же EntityDamageEvent, все зависит от твоих целей.
 

BlackBarcode13

Разработчик
Пользователь
q20w26a, да тупо можно сравнить айтемстеки и не мучаться со строками, ибо операции на строки очень медленные на жабе.
 

xXCopafumeXx

Пользователь
mc923, по сути если я зделаю public ItemStack i() { } м в нем пропишу имя, лор, то смогу его сравнить с предметом у ивенте ? И он будет проходить проверку по имени и лору?
 

BlackBarcode13

Разработчик
Пользователь
xXCopafumeXx, да, оно будет проверять строки в том числе, но не нужно будет ничего обрезать/вырезать как предложили выше.
 

q20w26a

Разработчик
Пользователь
да тупо можно сравнить айтемстеки и не мучаться со строками, ибо операции на строки очень медленные на жабе.
Я раньше так и делал, но мне кажется что это не очень правильно. Что если параметры предмета могут изменяться? Заменять ItemStack целиком? Создавать кучи ItemStack'ов которые отличаются по одному-двум параметрам?
И еще, если я не ошибаюсь, тут идет создание еще одного ItemStack и сравнение с существующим. Не лучше уж будет создать его один раз и потом сравнивать по необходимости?
 

xXCopafumeXx

Пользователь
q20w26a, я тоже подумал, но вообще если мало предметов то пусть, а так нашел плагин и не парюсь, если что и плагин под себя перепишу.
 

BlackBarcode13

Разработчик
Пользователь
q20w26a, создал 1 раз нужный айтемстак при включении и его сравниваешь. Если в конфиге что-то изменили, просто заново его создаешь и опять оставляешь в кэше.
 

Комнаты в чате

Верх Низ