- 84
- 5
- 6
HI
решил сделать бамбукъ обтекаемым
и вроде как все работает, он теперь действительно обтекаемый
НО
когда он начинает расти происходит это
бамбукъ заполняется водой
делал с помощью миксинов(в них не очень силён)
код этого самого миксина
Кто знает помогите
решил сделать бамбукъ обтекаемым
и вроде как все работает, он теперь действительно обтекаемый
НО
когда он начинает расти происходит это
бамбукъ заполняется водой
делал с помощью миксинов(в них не очень силён)
код этого самого миксина
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;
}
Кто знает помогите
Последнее редактирование: