Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Как проверить изучил ли игрок скилл.

yann1n

Активный участник
Пользователь
Баллы
66
Я создаю плагин и для того, чтобы выводить в зависимости от того, изучил игрок способность или нет предмет с определённым лором. Как можно воссоздать такую проверку? Я думал с помощью list'а сделать, но не додумался как)
 
Можно добавлять на изученный стак NBT-метку о том, что он изучен. Делается это при помощи PersistentDataContainer: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/persistence/PersistentDataContainer.html
Получить контейнер: itemMeta.getPersistentDataContainer()
Смотри, получается Я создаю 2 стака с разными материалами, к примеру красная стеклянная панель - не изучено, зеленая изучено. Когда игрок будет нажимать на красную, он изучит скилл и мне нужно как-то записать этому игроку, что он изучил этот скилл и он будет отображаться зелёной панелью и не кликабельным.
Таких данных о методах нужно будет хранить много для каждого. Как это можно сделать?

И я не до конца понял, как работает Persistent Data Container.
 
Смотри, получается Я создаю 2 стака с разными материалами, к примеру красная стеклянная панель - не изучено, зеленая изучено. Когда игрок будет нажимать на красную, он изучит скилл и мне нужно как-то записать этому игроку, что он изучил этот скилл и он будет отображаться зелёной панелью и не кликабельным.
Таких данных о методах нужно будет хранить много для каждого. Как это можно сделать?

И я не до конца понял, как работает Persistent Data Container.
Изучение привязано к игрокам или конкретным предметам? Ты уж определись )
В любом случае, и у стаков, и у сущностей есть дата контейнер.

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

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

Там можно хранить данные примитивных типов или свои собственные, которые сериализуются в примитивные.
Наложил пометку - считай, что способность изучена.
В интернете есть туторы по дата контейнеру, думаю разберёшься
Получается я могу добавить информацию об игроке, что он изучил скилл, к примеру за то, что он изучил его добавлять название скила и проверять присутствует оно или нет?
 
Получается я могу добавить информацию об игроке, что он изучил скилл, к примеру за то, что он изучил его добавлять название скила и проверять присутствует оно или нет?
Ну в таком случае да. Надо информацию привязывать к игроку. Можно в базе хранить инфу, можно в Persistent Data Container'е - как удобно
 
Ну в таком случае да. Надо информацию привязывать к игроку. Можно в базе хранить инфу, можно в Persistent Data Container'е - как удобно
Получается, я создаю PersistentDataContainer и NamespacedKey с Ником игрока.
Но как положить туда какой либо String, допустим с названием скилла и затем проверить есть ли он там?
Можно ли положить их туда несколько?
 
Получается, я создаю PersistentDataContainer и NamespacedKey с Ником игрока.
Но как положить туда какой либо String, допустим с названием скилла и затем проверить есть ли он там?
Можно ли положить их туда несколько?
Документацию открывал? )
upload_2023-3-19_10-3-24.png

Если совсем сложно, то читай гайд:
https://www.spigotmc.org/threads/a-guide-to-1-14-persistentdataholder-api.371200/

Там же есть пример создания собственного типа данных. Как раз пригодится для создания массива строк. Несколько значений по одному ключу хранить нельзя, но можно хранить в качестве значения массив/лист строк
 
Документацию открывал? )
Посмотреть вложение 64633

Если совсем сложно, то читай гайд:
https://www.spigotmc.org/threads/a-guide-to-1-14-persistentdataholder-api.371200/

Там же есть пример создания собственного типа данных. Как раз пригодится для создания массива строк. Несколько значений по одному ключу хранить нельзя, но можно хранить в качестве значения массив/лист строк
Значит для каждого скилла я должен сделать key? И проверять каждый из скиллов в каждом из ключей??
 
Значит для каждого скилла я должен сделать key? И проверять каждый из скиллов в каждом из ключей??
Можно так, да. Но если неудобно, то можно и сериализовать все в массив байт или строчку - например json.

Я бы, может, вообще все хранил в оперативке в своем плагине. А сохранял в контейнер данные из оперативке при выходе игрока и раз в 5 минут шедулером, и загружал бы при входе
 
Можно так, да. Но если неудобно, то можно и сериализовать все в массив байт или строчку - например json.

Я бы, может, вообще все хранил в оперативке в своем плагине. А сохранял в контейнер данные из оперативке при выходе игрока и раз в 5 минут шедулером, и загружал бы при входе
А нужно ли вручную сохранять данные об игроке или нет? Если да то каким образом?
 
А нужно ли вручную сохранять данные об игроке или нет? Если да то каким образом?
Что значит вручную? Можно программно раз в 5 минут или при выходе с сервера в базу или файл
 
А в какой файл их можно сохранять и как потом выгружать данные?
В любой файл в папке плагина. Вопрос про выгрузку не понял. Посмотри видео, как работать с файлами в java.
Хотя, возможно, с такими знаниями костылить что-то своё - не лучшая идея
 

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

Назад
Верх