Помогите Проблема с кастом BlockState к TileState 1.16.5

  • Автор темы Автор темы ZDCoder
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

ZDCoder

Активный участник
Пользователь
Баллы
76
Пишу на Paper 1.16.5. Пробую значит я взять блок, и закастить его BlockState к TileState чтобы в дальнейшем устанавливать/получать нбт теги. И тут баккит решает послать меня и говорит что так делать нельзя, но прикол в том, что я до этого уже устанавливал блоку нбт тег (В событии BlockPlaceEvent) и всё работает шикарно. А вот при ломании блока выскакивает исключение: upload_2022-5-30_14-1-30.png

PHP:
    public boolean hasNbtTileEntity(Block block, String key) {
        TileState tileState = (TileState) block.getState(); //86 строка.
        PersistentDataContainer persistentDataContainer = tileState.getPersistentDataContainer();
        NamespacedKey namespacedKey = new NamespacedKey(ProtectionStones.getInstance(), key);
        return persistentDataContainer.has(namespacedKey, PersistentDataType.STRING);
    }

55 строка: upload_2022-5-30_14-41-50.png

Может я просто что то не так делаю. Умные люди, помогите. xd.
 
Ещё забыл сказать что делаю это всё с блоком материала DIAMOND_BLOCK.
 
Ещё забыл сказать что делаю это всё с блоком материала DIAMOND_BLOCK.
Потому что его стейт и не наследует TileState. Тут либо хранить отдельно(БД, или непосредственно PDC чанка), либо менять тип - сундуки, бочки, печи, стол чар и т.п., что поддерживает хранение NBT.
 
Что такое PDC чанка ?
PersistentDataContainer - тоже самое, что у блоков/сущностей/предметов, только привязано к чанку; в старых версиях для чанков доступно только на Paper. Но там тебе по сути уже собственный тип данных придется делать - можно воспользоваться готовым CustomBlockData, но оно пока не учитывает разрушения блока.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх