95 lines
3.8 KiB
Java
95 lines
3.8 KiB
Java
package dev.zontreck.libzontreck.blocks;
|
|
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.core.Direction;
|
|
import net.minecraft.server.level.ServerLevel;
|
|
import net.minecraft.util.RandomSource;
|
|
import net.minecraft.world.entity.Entity;
|
|
import net.minecraft.world.item.ItemStack;
|
|
import net.minecraft.world.level.BlockGetter;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.level.biome.Biome;
|
|
import net.minecraft.world.level.block.Block;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
|
|
/**
|
|
* Code partially taken from HT's TreeChop
|
|
* <p>
|
|
* <a href="https://github.com/hammertater/treechop/blob/main/shared/src/main/java/ht/treechop/common/block/BlockImitator.java">Source Material</a>
|
|
*/
|
|
public abstract class BlockImitation extends Block
|
|
{
|
|
public BlockImitation(Properties pProperties) {
|
|
super(pProperties);
|
|
}
|
|
|
|
|
|
public abstract BlockState getImitatedBlockState(BlockGetter level, BlockPos pos);
|
|
|
|
public abstract void updateImitation(BlockState newState, BlockGetter level, BlockPos pos);
|
|
|
|
@Override
|
|
public void animateTick(BlockState blockState, Level level, BlockPos pos, RandomSource random) {
|
|
BlockState imitatedBlockState = getImitatedBlockState(level, pos);
|
|
imitatedBlockState.getBlock().animateTick(imitatedBlockState, level, pos, random);
|
|
}
|
|
|
|
@Override
|
|
public void stepOn(Level level, BlockPos pos, BlockState blockState, Entity entity) {
|
|
BlockState imitatedBlockState = getImitatedBlockState(level, pos);
|
|
imitatedBlockState.getBlock().stepOn(level, pos, imitatedBlockState, entity);
|
|
}
|
|
|
|
@Override
|
|
public void fallOn(Level level, BlockState blockState, BlockPos pos, Entity entity, float speed) {
|
|
BlockState imitatedBlockState = getImitatedBlockState(level, pos);
|
|
imitatedBlockState.getBlock().fallOn(level, imitatedBlockState, pos, entity, speed);
|
|
}
|
|
|
|
@Override
|
|
public ItemStack getCloneItemStack(BlockGetter level, BlockPos pos, BlockState blockState) {
|
|
BlockState imitatedBlockState = getImitatedBlockState(level, pos);
|
|
return imitatedBlockState.getBlock().getCloneItemStack(level, pos, imitatedBlockState);
|
|
}
|
|
|
|
@Override
|
|
public void handlePrecipitation(BlockState blockState, Level level, BlockPos pos, Biome.Precipitation precipitation) {
|
|
BlockState imitatedBlockState = getImitatedBlockState(level, pos);
|
|
imitatedBlockState.getBlock().handlePrecipitation(imitatedBlockState, level, pos, precipitation);
|
|
}
|
|
|
|
@Override
|
|
public int getLightBlock(BlockState blockState, BlockGetter level, BlockPos pos) {
|
|
return super.getLightBlock(blockState, level, pos);
|
|
}
|
|
|
|
@Override
|
|
public float getShadeBrightness(BlockState blockState, BlockGetter level, BlockPos pos) {
|
|
return super.getShadeBrightness(blockState, level, pos);
|
|
}
|
|
|
|
@Override
|
|
public int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos pos) {
|
|
return getImitatedBlockState(level, pos).getAnalogOutputSignal(level, pos);
|
|
}
|
|
|
|
@Override
|
|
public void randomTick(BlockState blockState, ServerLevel level, BlockPos pos, RandomSource random) {
|
|
getImitatedBlockState(level, pos).randomTick(level, pos, random);
|
|
}
|
|
|
|
@Override
|
|
public void tick(BlockState blockState, ServerLevel level, BlockPos pos, RandomSource random) {
|
|
getImitatedBlockState(level, pos).tick(level, pos, random);
|
|
}
|
|
|
|
@Override
|
|
public int getSignal(BlockState blockState, BlockGetter level, BlockPos pos, Direction direction) {
|
|
return getImitatedBlockState(level, pos).getSignal(level, pos, direction);
|
|
}
|
|
|
|
@Override
|
|
public int getDirectSignal(BlockState blockState, BlockGetter level, BlockPos pos, Direction direction) {
|
|
return getImitatedBlockState(level, pos).getDirectSignal(level, pos, direction);
|
|
}
|
|
}
|