package com.atsuishio.superbwarfare.block; import com.atsuishio.superbwarfare.block.entity.FuMO25BlockEntity; import com.atsuishio.superbwarfare.init.ModBlockEntities; import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.annotation.ParametersAreNonnullByDefault; public class FuMO25Block extends Block implements EntityBlock { public static final BooleanProperty POWERED = BooleanProperty.create("powered"); public FuMO25Block() { super(Properties.of().sound(SoundType.METAL).strength(3.0f).requiresCorrectToolForDrops()); this.registerDefaultState(this.stateDefinition.any().setValue(POWERED, false)); } @Override @ParametersAreNonnullByDefault protected @NotNull InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { if (level.isClientSide) { return InteractionResult.SUCCESS; } else { BlockEntity blockentity = level.getBlockEntity(pos); if (blockentity instanceof FuMO25BlockEntity blockEntity) { player.openMenu(blockEntity); } return InteractionResult.CONSUME; } } @Override @ParametersAreNonnullByDefault public @NotNull VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { return Shapes.or(box(1, 0, 1, 15, 6, 15), box(6, 6, 6, 10, 58, 10)); } @Override public @NotNull RenderShape getRenderShape(@NotNull BlockState pState) { return RenderShape.ENTITYBLOCK_ANIMATED; } @Nullable @Override @ParametersAreNonnullByDefault public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) { return new FuMO25BlockEntity(pPos, pState); } @Override public @Nullable BlockEntityTicker getTicker(Level pLevel, @NotNull BlockState pState, @NotNull BlockEntityType pBlockEntityType) { if (!pLevel.isClientSide && pBlockEntityType == ModBlockEntities.FUMO_25.get()) { return FuMO25BlockEntity::serverTick; } return null; } @Override @ParametersAreNonnullByDefault public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pMovedByPiston) { if (!pState.is(pNewState.getBlock())) { BlockEntity blockentity = pLevel.getBlockEntity(pPos); if (blockentity instanceof FuMO25BlockEntity) { pLevel.updateNeighbourForOutputSignal(pPos, this); } } super.onRemove(pState, pLevel, pPos, pNewState, pMovedByPiston); } @Override protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) { pBuilder.add(POWERED); } @Nullable @Override public BlockState getStateForPlacement(@NotNull BlockPlaceContext pContext) { return this.defaultBlockState().setValue(POWERED, false); } }