Помогите Как хранить и юзать кастомные блоки

Energy warrior

Активный участник
Пользователь
Баллы
76
У меня есть класс с кастомным блоком и когда я на него нажимаю что-то должно происходить. Так как я не знаю толком баккита то мне пришлось отличать его от обычного с помощью проверок. Я захотел дабы не создавать ненужные файлы, хранить данные о блоке в самом блоке. То есть у меня есть предмет с НБТ и я проверяю есть ли он там. Если есть то на поставленный блок добавляю метадату и по не проверяю, но чёт плохо робит да и выглядит не очень. Я бы всё таки хотел просто имплементировать интерфейс и просто инстансофить его. Можно ли такое сделать? Если да то как? Если нет то что мне делать?
 
Баккит при любом удобном случае чистит кастомные нбт-теги.
Возможно уже появилось нормальное апи (как с предметами в 1.13), но лично я не интересовался.
В целом было бы реально неплохо хранить информацию в самих блоках, но, чувствую, задолбаешься с реализацией. С твоими наследованиями и имплементациями такая же ситуация.
Лично я бы не парился и хранил бы все в хешмапе - не совсем удобно, но зато не тратишь свое время, да и работает быстро...
 
Через ведроапи никак. Иди сурсы ковыряй и вешай на блок тайлентити.
Спс. На тайлэнтити разве можно кастомные нбт вешать? Хотя есть метадата.
Баккит при любом удобном случае чистит кастомные нбт-теги.
Возможно уже появилось нормальное апи (как с предметами в 1.13), но лично я не интересовался.
В целом было бы реально неплохо хранить информацию в самих блоках, но, чувствую, задолбаешься с реализацией. С твоими наследованиями и имплементациями такая же ситуация.
Лично я бы не парился и хранил бы все в хешмапе - не совсем удобно, но зато не тратишь свое время, да и работает быстро...
Так мне надо чтобы после выключения подгужались данные.
 
Спс. На тайлэнтити разве можно кастомные нбт вешать? Хотя есть метадата.

Так мне надо чтобы после выключения подгужались данные.
Спигот режет кастом нбт с тайлентити, метадата не сохранится после перезагрузки, храни координаты блока и, если нужно, мир, самый адекватный способ идентифицировать блок.
Если же у тебя там контейнеры, то можно проверять по налицию предмета со специальным нбт, с предметов кастом нбт не режется.
 
Спигот режет кастом нбт с тайлентити, метадата не сохранится после перезагрузки, храни координаты блока и, если нужно, мир, самый адекватный способ идентифицировать блок.
Если же у тебя там контейнеры, то можно проверять по налицию предмета со специальным нбт, с предметов кастом нбт не режется.
У меня есть GUI. Ток он немного не так реализован. Я создаю объект если метадата совпадает(но это тупая идея ибо после перезагрузки не сохраняется) И уже из него достаю то что нужно открыть.
В коде выглядит как-то так.
Код:
if(block.hasMetadata("data"){
    CustomBlock cblock = new CustomBlock();
    cblock.action(event);
}
Код:
public class CustomBlock{
    Consumer<PlayerInteractEvent> action;
    public CustomBlock(){
        action = event ->{
            player.openInventory(gui);
        }
    }
}
p.s Я прекрасно понимаю что это говнокод. Помогите мне его исправить плиз.
 
У меня есть GUI. Ток он немного не так реализован. Я создаю объект если метадата совпадает(но это тупая идея ибо после перезагрузки не сохраняется) И уже из него достаю то что нужно открыть.
В коде выглядит как-то так.
Код:
if(block.hasMetadata("data"){
    CustomBlock cblock = new CustomBlock();
    cblock.action(event);
}
Код:
public class CustomBlock{
    Consumer<PlayerInteractEvent> action;
    public CustomBlock(){
        action = event ->{
            player.openInventory(gui);
        }
    }
}
p.s Я прекрасно понимаю что это говнокод. Помогите мне его исправить плиз.
Скажи нормально, чего в итоге ты хочешь добиться. У каждого блока кастомного свое гуи или че?
 
Скажи нормально, чего в итоге ты хочешь добиться. У каждого блока кастомного свое гуи или че?
Чтобы в файлах не надо было блоки хранить. А потом уже сравнивать что есть и где?

Я хочу чтобы когда нажимал на блок то вызывалось действие из класса блока. Как я понял в игре данные о блоках хранить не получится придётся файлами.
 
Чтобы в файлах не надо было блоки хранить. А потом уже сравнивать что есть и где?

Я хочу чтобы когда нажимал на блок то вызывалось действие из класса блока. Как я понял в игре данные о блоках хранить не получится придётся файлами.
Ну и бред ты же написал, все сводится к тому, что нужно идентифицировать определенные блоки, тебе уже сказали, храни координаты. Если этих блоков немного, то делай, как предложил Dymeth, а если много, то лучше напрямую с бд работать, а не кешировать в памяти. Надеюсь ты не собрался хранить все в yml файлике.
 
Если этих блоков немного, то делай, как предложил Dymeth, а если много, то лучше напрямую с бд работать, а не кешировать в памяти.
Планируется что много блоков. Я бы лучше хранил в dat файле и весит мало и контент хранить можно. Ибо БД для моего плагина делать, я считаю не удобным.
 
Планируется что много блоков. Я бы лучше хранил в dat файле и весит мало и контент хранить можно. Ибо БД для моего плагина делать, я считаю не удобным.
Если у тебя много блоков, то нарпямую с бд лучше работать, + ты можешь запросы в асинке кидать.
 
Я на такое дело писал чанковую бд на jnbj либе. Удобно и упаковывается нормально.
 
Назад
Верх