76 lines
2.6 KiB
Java
76 lines
2.6 KiB
Java
package ru.betterend.blocks.basis;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockState;
|
|
import net.minecraft.block.Blocks;
|
|
import net.minecraft.item.ItemPlacementContext;
|
|
import net.minecraft.state.StateManager;
|
|
import net.minecraft.state.property.DirectionProperty;
|
|
import net.minecraft.state.property.Properties;
|
|
import net.minecraft.tag.BlockTags;
|
|
import net.minecraft.util.BlockMirror;
|
|
import net.minecraft.util.BlockRotation;
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraft.util.math.Direction;
|
|
import net.minecraft.world.WorldAccess;
|
|
import net.minecraft.world.WorldView;
|
|
import ru.betterend.util.BlocksHelper;
|
|
|
|
public abstract class AttachedBlock extends BlockBaseNotFull {
|
|
public static final DirectionProperty FACING = Properties.FACING;
|
|
|
|
public AttachedBlock(Settings settings) {
|
|
super(settings);
|
|
this.setDefaultState(this.getDefaultState().with(FACING, Direction.UP));
|
|
}
|
|
|
|
@Override
|
|
protected void appendProperties(StateManager.Builder<Block, BlockState> stateManager) {
|
|
stateManager.add(FACING);
|
|
}
|
|
|
|
@Override
|
|
public BlockState getPlacementState(ItemPlacementContext ctx) {
|
|
BlockState blockState = this.getDefaultState();
|
|
WorldView worldView = ctx.getWorld();
|
|
BlockPos blockPos = ctx.getBlockPos();
|
|
Direction[] directions = ctx.getPlacementDirections();
|
|
for (int i = 0; i < directions.length; ++i) {
|
|
Direction direction = directions[i];
|
|
Direction direction2 = direction.getOpposite();
|
|
blockState = (BlockState) blockState.with(FACING, direction2);
|
|
if (blockState.canPlaceAt(worldView, blockPos)) {
|
|
return blockState;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) {
|
|
Direction direction = (Direction) state.get(FACING);
|
|
BlockPos blockPos = pos.offset(direction.getOpposite());
|
|
return sideCoversSmallSquare(world, blockPos, direction) || world.getBlockState(blockPos).isIn(BlockTags.LEAVES);
|
|
}
|
|
|
|
@Override
|
|
public BlockState getStateForNeighborUpdate(BlockState state, Direction facing, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
|
|
if (!canPlaceAt(state, world, pos)) {
|
|
return Blocks.AIR.getDefaultState();
|
|
}
|
|
else {
|
|
return state;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public BlockState rotate(BlockState state, BlockRotation rotation) {
|
|
return BlocksHelper.rotateHorizontal(state, rotation, FACING);
|
|
}
|
|
|
|
@Override
|
|
public BlockState mirror(BlockState state, BlockMirror mirror) {
|
|
return BlocksHelper.mirrorHorizontal(state, mirror, FACING);
|
|
}
|
|
}
|