100 lines
3.8 KiB
Java
100 lines
3.8 KiB
Java
package dev.zontreck.otemod.blocks;
|
|
|
|
import dev.zontreck.otemod.blocks.entity.CompressionChamberBlockEntity;
|
|
import dev.zontreck.otemod.blocks.entity.ModEntities;
|
|
import dev.zontreck.otemod.networking.ModMessages;
|
|
import dev.zontreck.otemod.networking.packets.EnergySyncS2CPacket;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.server.level.ServerPlayer;
|
|
import net.minecraft.world.InteractionHand;
|
|
import net.minecraft.world.InteractionResult;
|
|
import net.minecraft.world.entity.player.Player;
|
|
import net.minecraft.world.item.context.BlockPlaceContext;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.level.block.*;
|
|
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.phys.BlockHitResult;
|
|
import net.minecraftforge.network.NetworkHooks;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
public class CompressionChamberBlock extends HorizontalDirectionalBlock implements EntityBlock
|
|
{
|
|
|
|
public CompressionChamberBlock(Properties pProperties) {
|
|
super(pProperties);
|
|
}
|
|
|
|
@Override
|
|
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> pBuilder) {
|
|
super.createBlockStateDefinition(pBuilder);
|
|
pBuilder.add(FACING);
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) {
|
|
return new CompressionChamberBlockEntity(blockPos, blockState);
|
|
}
|
|
|
|
@Override
|
|
public RenderShape getRenderShape(BlockState pState) {
|
|
return RenderShape.MODEL;
|
|
}
|
|
|
|
@Override
|
|
public InteractionResult use(BlockState state, Level lvl, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit)
|
|
{
|
|
if(!lvl.isClientSide())
|
|
{
|
|
BlockEntity be = lvl.getBlockEntity(pos);
|
|
if(be instanceof CompressionChamberBlockEntity)
|
|
{
|
|
CompressionChamberBlockEntity entity = (CompressionChamberBlockEntity) be;
|
|
NetworkHooks.openScreen(((ServerPlayer)player), entity, pos);
|
|
|
|
ModMessages.sendToPlayer(new EnergySyncS2CPacket(entity.getEnergyStorage().getEnergyStored(), entity.getBlockPos()), (ServerPlayer)player);
|
|
|
|
}else{
|
|
throw new IllegalStateException("Our container is missing!");
|
|
}
|
|
}
|
|
|
|
return InteractionResult.sidedSuccess(lvl.isClientSide);
|
|
}
|
|
|
|
@Override
|
|
public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pMovedByPiston) {
|
|
if(pState.getBlock() != pNewState.getBlock())
|
|
{
|
|
BlockEntity be = pLevel.getBlockEntity(pPos);
|
|
if(be instanceof CompressionChamberBlockEntity)
|
|
{
|
|
((CompressionChamberBlockEntity)be).doDrop();
|
|
}
|
|
}
|
|
|
|
super.onRemove(pState, pLevel, pPos, pNewState, pMovedByPiston);
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level pLevel, BlockState pState, BlockEntityType<T> pBlockEntityType) {
|
|
|
|
return createTickerHelper(pBlockEntityType, ModEntities.COMPRESSION_CHAMBER.get(), CompressionChamberBlockEntity::tick);
|
|
}
|
|
|
|
|
|
protected static <E extends BlockEntity, A extends BlockEntity> BlockEntityTicker<A> createTickerHelper(BlockEntityType<A> pServerType, BlockEntityType<E> pClientType, BlockEntityTicker<? super E> pTicker) {
|
|
return pClientType == pServerType ? (BlockEntityTicker<A>) pTicker : null;
|
|
}
|
|
|
|
|
|
@Override
|
|
public BlockState getStateForPlacement(BlockPlaceContext pContext) {
|
|
return defaultBlockState().setValue(FACING, pContext.getHorizontalDirection());
|
|
}
|
|
}
|