Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package sdt.undergroundadditions.block;
- import net.minecraft.block.*;
- import net.minecraft.entity.LivingEntity;
- import net.minecraft.entity.player.PlayerEntity;
- import net.minecraft.inventory.IInventory;
- import net.minecraft.inventory.InventoryHelper;
- import net.minecraft.inventory.container.INamedContainerProvider;
- import net.minecraft.item.BlockItem;
- import net.minecraft.item.BlockItemUseContext;
- import net.minecraft.item.ItemGroup;
- import net.minecraft.item.ItemStack;
- import net.minecraft.state.DirectionProperty;
- import net.minecraft.state.StateContainer;
- import net.minecraft.tileentity.LockableTileEntity;
- import net.minecraft.tileentity.TileEntity;
- import net.minecraft.util.*;
- import net.minecraft.util.math.BlockPos;
- import net.minecraft.util.math.BlockRayTraceResult;
- import net.minecraft.world.Explosion;
- import net.minecraft.world.IBlockReader;
- import net.minecraft.world.IWorld;
- import net.minecraft.world.World;
- import sdt.undergroundadditions.Main;
- import sdt.undergroundadditions.init.BlockInit;
- import sdt.undergroundadditions.init.ItemInit;
- import sdt.undergroundadditions.item.ItemBaseProps;
- import javax.annotation.Nullable;
- import java.util.function.Supplier;
- public class BlockBaseTileEntity extends ContainerBlock {
- private final Supplier<? extends TileEntity> supplier;
- private boolean horizontalBlock = false;
- public static DirectionProperty FACING = null;
- private BlockBaseProps props;
- public BlockBaseTileEntity(String registryName, BlockBaseProps props, @Nullable ItemGroup group, Supplier<? extends TileEntity> supplier) {
- super(props.getProps());
- setRegistryName(new ResourceLocation(Main.modid, registryName));
- BlockInit.BLOCKS.add(this);
- if(group != null)
- ItemInit.ITEMS.add(new BlockItem(this, new ItemBaseProps().tab(group).getProps()).setRegistryName(getRegistryName()));
- this.supplier = supplier;
- this.props = props;
- if(props.isHorizontal()) {
- FACING = HorizontalBlock.HORIZONTAL_FACING;
- setDefaultState(getStateContainer().getBaseState().with(FACING, Direction.NORTH));
- } else {
- setDefaultState(getStateContainer().getBaseState());
- }
- }
- @Override
- public ActionResultType func_225533_a_(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult result) {
- if(!world.isRemote) {
- TileEntity te = world.getTileEntity(pos);
- player.openContainer((INamedContainerProvider)te);
- }
- return ActionResultType.SUCCESS;
- }
- @Override
- public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, @Nullable LivingEntity living, ItemStack stack) {
- if(stack.hasDisplayName()) {
- TileEntity te = world.getTileEntity(pos);
- if(te instanceof LockableTileEntity) {
- ((LockableTileEntity)te).setCustomName(stack.getDisplayName());
- }
- }
- }
- @Override
- public void onBlockHarvested(World world, BlockPos pos, BlockState state, PlayerEntity player) {
- TileEntity te = world.getTileEntity(pos);
- if(te instanceof IInventory) {
- InventoryHelper.dropInventoryItems(world, pos, (IInventory)te);
- world.updateComparatorOutputLevel(pos, this);
- }
- }
- @Override
- public void onBlockExploded(BlockState state, World world, BlockPos pos, Explosion explosion) {
- this.onBlockHarvested(world, pos, state, world.getClosestPlayer(explosion.getPosition().x, explosion.getPosition().y, explosion.getPosition().z));
- }
- @Override
- public BlockRenderType getRenderType(BlockState state) {
- return props.getRenderType();
- }
- @Nullable
- @Override
- public BlockState getStateForPlacement(BlockItemUseContext context) {
- return props.isHorizontal() ? this.getDefaultState() : this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite());
- }
- @Nullable
- @Override
- public TileEntity createNewTileEntity(IBlockReader worldIn) {
- return supplier.get();
- }
- @Override
- protected void fillStateContainer(StateContainer.Builder<Block, BlockState> p_206840_1_) {
- if(props.isHorizontal())
- p_206840_1_.add(FACING);
- }
- @Override
- public BlockState rotate(BlockState state, IWorld world, BlockPos pos, Rotation direction) {
- return props.isHorizontal() ? state.with(FACING, direction.rotate(state.get(FACING))) : state;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement