package net.gamelog.suntrot.block.custom; import net.gamelog.suntrot.screen.SewingScreenHandler; import net.minecraft.block.*; import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemPlacementContext; import net.minecraft.screen.NamedScreenHandlerFactory; import net.minecraft.screen.ScreenHandlerContext; import net.minecraft.screen.SimpleNamedScreenHandlerFactory; import net.minecraft.state.StateManager; import net.minecraft.state.property.DirectionProperty; import net.minecraft.text.Text; import net.minecraft.util.*; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; public class SewingStationBlock extends Block { private static final Text TITLE = Text.translatable("container.suntrot.sewing"); public static final DirectionProperty FACING = HorizontalFacingBlock.FACING; protected static final VoxelShape SHAPE = Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 9.0, 16.0); public SewingStationBlock(AbstractBlock.Settings settings) { super(settings); this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH)); } @Override public BlockState getPlacementState(ItemPlacementContext ctx) { return this.getDefaultState().with(FACING, ctx.getHorizontalPlayerFacing().getOpposite()); } @Override public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { if (world.isClient) { return ActionResult.SUCCESS; } else { player.openHandledScreen(state.createScreenHandlerFactory(world, pos)); return ActionResult.CONSUME; } } @Nullable @Override public NamedScreenHandlerFactory createScreenHandlerFactory(BlockState state, World world, BlockPos pos) { return new SimpleNamedScreenHandlerFactory( (syncId, playerInventory, player) -> new SewingScreenHandler(syncId, playerInventory, ScreenHandlerContext.create(world, pos)), TITLE ); } @Override public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { return SHAPE; } @Override public boolean hasSidedTransparency(BlockState state) { return true; } @Override public BlockRenderType getRenderType(BlockState state) { return BlockRenderType.MODEL; } @Override public BlockState rotate(BlockState state, BlockRotation rotation) { return state.with(FACING, rotation.rotate(state.get(FACING))); } @Override public BlockState mirror(BlockState state, BlockMirror mirror) { return state.rotate(mirror.getRotation(state.get(FACING))); } @Override protected void appendProperties(StateManager.Builder builder) { builder.add(FACING); } @Override public boolean canPathfindThrough(BlockState state, BlockView world, BlockPos pos, NavigationType type) { return false; } }