This repository has been archived on 2024-10-31. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
LibZontreck/src/main/java/dev/zontreck/libzontreck/blocks/BlockImitation.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);
}
}