Отследить столкновение жидкостей

Версия Minecraft
1.12.2
1
0
Здравствуйте. У меня есть класс жидкости. Мне нужно как то отследить момент, когда она будет сталкиваться с другой жидкостью. Пример: лава с водой. Возможно есть какой то метод? Если да, то подскажите.
 
7,099
324
1,510
Лучше посмотреть в AstralSorcery: там соприкосновение лавы и жидкого света производит песок
 
917
22
332
Не знаю как там в ваниле и в других местах, но есть два чудесных метода - neighborChanged и onBlockAdded:
Первый срабатывает, когда сосед изменился (когда рядом появился другой блок или когда к твоей жидкости "подплыла" другая жидкость)
Второй срабатывает, когда сам блок твоей жидкости появился в мире (тут нужно проверять, есть ли вокруг другая жидкость)
Пример:
@Override
public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos) {
    if (world.getBlockState(fromPos).getBlock() == жидкостьКотораяПриплыла) {
  
    }
}

@Override
public void onBlockAdded(World world, BlockPos pos, IBlockState state) {
    targetBlocks.add(world.getBlockState(pos.offset(EnumFacing.UP)).getBlock());
    targetBlocks.add(world.getBlockState(pos.offset(EnumFacing.DOWN)).getBlock());
    targetBlocks.add(world.getBlockState(pos.offset(EnumFacing.EAST)).getBlock());
    targetBlocks.add(world.getBlockState(pos.offset(EnumFacing.WEST)).getBlock());
    targetBlocks.add(world.getBlockState(pos.offset(EnumFacing.SOUTH)).getBlock());
    targetBlocks.add(world.getBlockState(pos.offset(EnumFacing.NORTH)).getBlock());

    if (targetBlocks.constains(другая_жидкость)) {
  
    }

//    *Или короче
//    Arrays.stream(EnumFacing.values()).map(pos::offset)
//        .filter(targetPos -> world.getBlockState(targetPos) == другая_жидкость).findAny()
//        .ifPresent(findedPos -> {
//     
//        });
}

UPD:
Нашёл таинственный net.minecraftforge.fluids.FluidEvent и в нём FluidMotionEvent... Понятия не имею что это такое, но вдруг...
 
Последнее редактирование:
Сверху