Новичок, вопрос наверняка тупой. Обычно докапывааю ChatGPT, но тут и он выбросил белый флаг.
Дисклеймер: учусь на чужом опыте, пытаюсь дублировать механику зараженной листвы мода Ex Nihilo на 1.7.10, но мод делаю на 1.19.4, API Fabric.
Итак, я создаю блок зараженной листвы, который наследует ванильный блок листвы. В момент появления в мире он должен запустить таймер заражения, по мере которого листва должна постепенно обесцвечиваться до белого. Для этого пытаюсь переопределить метод onBlockAdded:
Однако, я сталкиваюсь с нетривиальной проблемой. Дело в том, что метод onBlockAdded берется из класса AbstactBlock, прадеда для моего LeavesInfestedBlock, и там есть два одноименных метода:
По идее среда разработки (IDEA) должна по передаваемым параметрам понять, какой из них я хочу переопределить. Однако этого не происходит... В выделенной строке:
перечеркивание указывает на использование устаревшего метода, который с аннотацией @Deprecated, при наведении в выпадающей подсказке это подтверждается. Соответственно передаваемые параметры этим методом уже не принимаются.
Что, блин, происходит, и как это исправить?
Дисклеймер: учусь на чужом опыте, пытаюсь дублировать механику зараженной листвы мода Ex Nihilo на 1.7.10, но мод делаю на 1.19.4, API Fabric.
Итак, я создаю блок зараженной листвы, который наследует ванильный блок листвы. В момент появления в мире он должен запустить таймер заражения, по мере которого листва должна постепенно обесцвечиваться до белого. Для этого пытаюсь переопределить метод onBlockAdded:
LeavesInfestedBlock:
public class LeavesInfestedBlock extends LeavesBlock {
public LeavesInfestedBlock(){
super(FabricBlockSettings.of(Material.LEAVES).sounds(BlockSoundGroup.GRASS));
}
@Override
public void onBlockAdded(World world, BlockPos pos, BlockState state, boolean notify){
super.[S]onBlockAdded[/S](world, pos, state, notify);
startDecay(world, pos);
}
private void startDecay(World world, BlockPos pos){
//запуск таймера
}
Однако, я сталкиваюсь с нетривиальной проблемой. Дело в том, что метод onBlockAdded берется из класса AbstactBlock, прадеда для моего LeavesInfestedBlock, и там есть два одноименных метода:
AbstractBlock:
public abstract class AbstractBlock implements ToggleableFeature {
@Deprecated
public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean notify) {
}
public void onBlockAdded(World world, BlockPos pos, BlockState state, boolean notify) {
this.getBlock().onBlockAdded(this.asBlockState(), world, pos, state, notify);
}
По идее среда разработки (IDEA) должна по передаваемым параметрам понять, какой из них я хочу переопределить. Однако этого не происходит... В выделенной строке:
super.[S]onBlockAdded[/S](world, pos, state, notify);
перечеркивание указывает на использование устаревшего метода, который с аннотацией @Deprecated, при наведении в выпадающей подсказке это подтверждается. Соответственно передаваемые параметры этим методом уже не принимаются.
Что, блин, происходит, и как это исправить?
Последнее редактирование: