tutorial:fluids
This is an old revision of the document!
Table of Contents
Creating a fluid
Overview
Here we'll cover creation of a custom fluid. If you plan to create several fluids, it is recommended to make an abstract basic fluid class where you'll set necessary defaults that will be shared in its subclasses. We'll also make it generate in the world like lakes.
Making an abstract fluid
Vanilla fluids extend net.minecraft.fluid.BaseFluid class, and so will our abstract fluid. It can be like this:
public abstract class BasicFluid extends BaseFluid { /** * @return does it produce infinite fluid (like water)? */ @Override protected boolean isInfinite() { return false; } // make it transparent @Override protected BlockRenderLayer getRenderLayer() { return BlockRenderLayer.TRANSLUCENT; } /** * * @return an associated item that "holds" this fluid */ @Override public abstract Item getBucketItem(); /** * * @return a blockstate of the associated {@linkplain net.minecraft.block.FluidBlock} with {@linkplain net.minecraft.block.FluidBlock#LEVEL} */ @Override protected abstract BlockState toBlockState(FluidState var1); /** * * @return flowing static instance of this fluid */ @Override public abstract Fluid getFlowing(); /** * * @return still static instance of this fluid */ @Override public abstract Fluid getStill(); // how much does the height of the fluid block decreases @Override protected int getLevelDecreasePerBlock(ViewableWorld var1) { return 1; } /** * * @return update rate */ @Override public int getTickRate(ViewableWorld var1) { return 5; } @Override protected float getBlastResistance() { return 100; } // this seems to determine fluid's spread speed (higher value means faster) @Override protected int method_15733(ViewableWorld var1) { return 4; } // I don't know what this does, but it's present in the water fluid @Override protected void beforeBreakingBlock(IWorld iWorld_1, BlockPos blockPos_1, BlockState blockState_1) { BlockEntity blockEntity_1 = blockState_1.getBlock().hasBlockEntity() ? iWorld_1.getBlockEntity(blockPos_1) : null; Block.dropStacks(blockState_1, iWorld_1.getWorld(), blockPos_1, blockEntity_1); } // also don't know what it does public boolean method_15777(FluidState fluidState_1, BlockView blockView_1, BlockPos blockPos_1, Fluid fluid_1, Direction direction_1) { return direction_1 == Direction.DOWN; } /** * * @return is given fluid instance of this fluid? */ @Override public abstract boolean matchesType(Fluid fluid_1); /** * Required for entities to behave in this fluid like in water */ @Override public boolean matches(Tag<Fluid> tag_1) { return tag_1 == FluidTags.WATER; } }
tutorial/fluids.1569317937.txt.gz · Last modified: 2019/09/24 09:38 by alexiy