проблемы с Бамбукъ

Версия Minecraft
1.16.5
API
Forge
84
5
6
HI

решил сделать бамбукъ обтекаемым
и вроде как все работает, он теперь действительно обтекаемый

НО

когда он начинает расти происходит это
2022-10-07_21.46.29.png
бамбукъ заполняется водой

делал с помощью миксинов(в них не очень силён)
код этого самого миксина
BambooBlockMixin:
@MethodsReturnNonnullByDefault
@SuppressWarnings("deprecation")
@ParametersAreNonnullByDefault
@Mixin(BambooBlock.class)
public abstract class BambooBlockMixin extends Block implements IGrowable, IBucketPickupHandler, ILiquidContainer {



    public BambooBlockMixin(Properties properties) {
        super(properties);

    }


    @Nullable
    @Overwrite()
    public BlockState getStateForPlacement(BlockItemUseContext context) {
            BlockState state = context.getLevel().getBlockState(context.getClickedPos());
            return defaultBlockState().setValue(WATERLOGGED, state.getBlock() != this && state.getFluidState().getType() == Fluids.WATER);
    }

    @Inject(method = "createBlockStateDefinition", at = @At("HEAD"))
    protected void createBlockStateDefinition(StateContainer.Builder<Block, BlockState> builder, CallbackInfo ci) {
        builder.add(WATERLOGGED);
    }

 

    @Overwrite()
    public BlockState updateShape(BlockState state, Direction direction, BlockState state2, IWorld world, BlockPos pos, BlockPos pos2) {
        if (state.getValue(WATERLOGGED)) {
            world.getLiquidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world));
        }

        if (!state.canSurvive(world, pos)) {
            world.getBlockTicks().scheduleTick(pos, this, 1);
        }

        if (direction == Direction.UP && state2.is(Blocks.BAMBOO) && state2.getValue(AGE) > state.getValue(AGE)) {
            world.setBlock(pos, state.cycle(AGE), 2);
        }

        return super.updateShape(state, direction, state2, world, pos, pos2);
    }

    @Override
    public Fluid takeLiquid(IWorld world, BlockPos pos, BlockState state) {
        if (state.getValue(WATERLOGGED)) {
            world.setBlock(pos, state.setValue(WATERLOGGED, false), 3);
            return Fluids.WATER;
        }
        return Fluids.EMPTY;
    }

    @Override
    public FluidState getFluidState(BlockState state) {
        return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : Fluids.EMPTY.defaultFluidState();
    }

    @Override
    public boolean canPlaceLiquid(IBlockReader world, BlockPos pos, BlockState state, Fluid fluid) {
        return !state.getValue(WATERLOGGED) && fluid == Fluids.WATER;
    }

    @Override
    public boolean placeLiquid(IWorld world, BlockPos pos, BlockState state, FluidState fluidState) {
        if (!state.getValue(WATERLOGGED) && fluidState.getType() == Fluids.WATER) {
            if (!world.isClientSide()) {
                world.setBlock(pos, state.setValue(WATERLOGGED, true), 3);
                world.getLiquidTicks().scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(world));
            }
            return true;
        }
        return false;
    }
    @Override
    public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
        List<ItemStack> drops = super.getDrops(state, builder);
        drops.add(new ItemStack(this));
        return drops;
    }

Кто знает помогите
 
Последнее редактирование:
1,383
115
244
Поскольку бамбук растёт (наследует интерфейс IGrowable), то у него должен быть соответсвующий метод, отвечающий за рост. Несложно догадаться, что в этом методе и ставиться бамбук вверх. Но, скорее всего, там используется стандартный(изначальный) блокстейт, т.е. WaterLogged.
Тебе просто нужно скопировать метод, отвечающий за рост, а дальше ввести проверку на водичку, откуда сделать возможность установки не только WaterLogged стейта, но и обычного.
 
Сверху