Проблемы при регистрации типа BlockEntity

Версия Minecraft
1.18.2
API
Forge
21
1
0
Регистрирую тип BlockEntity по руководству Forge, выдаёт ошибку причины которой я не понимаю
 

Вложения

  • 1.png
    1.png
    54.9 KB · Просмотры: 14
Решение
До:
Java:
public CastingTableBlockEntity(BlockEntityType<?> pType, BlockPos pPos, BlockState pBlockState) { //Это аргументы твоего конструктора
        super(ModBlockEntities.CASTING_TABLE_ENTITY.get(), pPos, pBlockState); //Это вызов конструктора супер-класса (наследуемого класса)
}

После:

Java:
public CastingTableBlockEntity(BlockPos pPos, BlockState pBlockState) { //Это аргументы твоего конструктора
        super(ModBlockEntities.CASTING_TABLE_ENTITY.get(), pPos, pBlockState); //Это вызов конструктора супер-класса (наследуемого класса)
}
21
1
0
Так BlockEntityType принимает в качестве аргумента конструктор класса BlockEntity от которого мой класс является дочерним, каким образом я могу написать super() без этого аргумента, или я чего-то не понимаю?
 
1,381
113
243
CastingTableBlockEntity:
public CastingTableBlockEntity(BlockEntityType<?> pType, BlockPos pPos, BlockState pBlockState) {
        super(ModBlockEntities.CASTING_TABLE_ENTITY.get(), pPos, pBlockState);
}
Зачем тебе в аргументах конструктора BlockEntityType? Ты его не используешь (1), Builder принимает конструктор только с BlockPos и BlockState (2).
BlockEntityType:
   @Nullable
   public T create(BlockPos p_155265_, BlockState p_155266_) {
      return this.factory.create(p_155265_, p_155266_);
   }
 
Последнее редактирование:
1,381
113
243
В java это именуется методом. Привыкай.
а не BlockEntity, который я расширяю
Ты действительно наследуешься от BlockEntity. Но Builder берёт свой BlockEntitySupplier, данные от которого представлены выше. И когда в Builder ты прописываешь .build(null), он вызывает метод create, который я представил выше. Он берёт данные от BlockEntitySupplier.

Так что просто сделай конструктор своего класса как я сказал, и всё должно заработать.
 
21
1
0
Мне кажется, что сейчас я очень сильно туплю, я не понимаю как можно убрать аргумент из конструктора, я же расширяю класс, а не сужаю его, как количество аргументов конструктора при расширении класса может стать меньше?
 
1,381
113
243
До:
Java:
public CastingTableBlockEntity(BlockEntityType<?> pType, BlockPos pPos, BlockState pBlockState) { //Это аргументы твоего конструктора
        super(ModBlockEntities.CASTING_TABLE_ENTITY.get(), pPos, pBlockState); //Это вызов конструктора супер-класса (наследуемого класса)
}

После:

Java:
public CastingTableBlockEntity(BlockPos pPos, BlockState pBlockState) { //Это аргументы твоего конструктора
        super(ModBlockEntities.CASTING_TABLE_ENTITY.get(), pPos, pBlockState); //Это вызов конструктора супер-класса (наследуемого класса)
}
 
Сверху