superb-warfare/src/main/java/com/atsuishio/superbwarfare/block/FuMO25Block.java
2025-03-26 00:36:37 +08:00

102 lines
4 KiB
Java

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 <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level pLevel, @NotNull BlockState pState, @NotNull BlockEntityType<T> 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<Block, BlockState> pBuilder) {
pBuilder.add(POWERED);
}
@Nullable
@Override
public BlockState getStateForPlacement(@NotNull BlockPlaceContext pContext) {
return this.defaultBlockState().setValue(POWERED, false);
}
}