Advertisement
Guest User

something

a guest
Feb 18th, 2020
372
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.56 KB | None | 0 0
  1. package sdt.undergroundadditions.block;
  2.  
  3. import net.minecraft.block.*;
  4. import net.minecraft.entity.LivingEntity;
  5. import net.minecraft.entity.player.PlayerEntity;
  6. import net.minecraft.inventory.IInventory;
  7. import net.minecraft.inventory.InventoryHelper;
  8. import net.minecraft.inventory.container.INamedContainerProvider;
  9. import net.minecraft.item.BlockItem;
  10. import net.minecraft.item.BlockItemUseContext;
  11. import net.minecraft.item.ItemGroup;
  12. import net.minecraft.item.ItemStack;
  13. import net.minecraft.state.DirectionProperty;
  14. import net.minecraft.state.StateContainer;
  15. import net.minecraft.tileentity.LockableTileEntity;
  16. import net.minecraft.tileentity.TileEntity;
  17. import net.minecraft.util.*;
  18. import net.minecraft.util.math.BlockPos;
  19. import net.minecraft.util.math.BlockRayTraceResult;
  20. import net.minecraft.world.Explosion;
  21. import net.minecraft.world.IBlockReader;
  22. import net.minecraft.world.IWorld;
  23. import net.minecraft.world.World;
  24. import sdt.undergroundadditions.Main;
  25. import sdt.undergroundadditions.init.BlockInit;
  26. import sdt.undergroundadditions.init.ItemInit;
  27. import sdt.undergroundadditions.item.ItemBaseProps;
  28.  
  29. import javax.annotation.Nullable;
  30. import java.util.function.Supplier;
  31.  
  32. public class BlockBaseTileEntity extends ContainerBlock {
  33.     private final Supplier<? extends TileEntity> supplier;
  34.     private boolean horizontalBlock = false;
  35.     public static DirectionProperty FACING = null;
  36.     private BlockBaseProps props;
  37.  
  38.     public BlockBaseTileEntity(String registryName, BlockBaseProps props, @Nullable ItemGroup group, Supplier<? extends TileEntity> supplier) {
  39.         super(props.getProps());
  40.         setRegistryName(new ResourceLocation(Main.modid, registryName));
  41.         BlockInit.BLOCKS.add(this);
  42.         if(group != null)
  43.             ItemInit.ITEMS.add(new BlockItem(this, new ItemBaseProps().tab(group).getProps()).setRegistryName(getRegistryName()));
  44.         this.supplier = supplier;
  45.         this.props = props;
  46.         if(props.isHorizontal()) {
  47.             FACING = HorizontalBlock.HORIZONTAL_FACING;
  48.             setDefaultState(getStateContainer().getBaseState().with(FACING, Direction.NORTH));
  49.         } else {
  50.             setDefaultState(getStateContainer().getBaseState());
  51.         }
  52.     }
  53.  
  54.     @Override
  55.     public ActionResultType func_225533_a_(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult result) {
  56.         if(!world.isRemote) {
  57.             TileEntity te = world.getTileEntity(pos);
  58.             player.openContainer((INamedContainerProvider)te);
  59.         }
  60.        
  61.         return ActionResultType.SUCCESS;
  62.     }
  63.  
  64.     @Override
  65.     public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, @Nullable LivingEntity living, ItemStack stack) {
  66.         if(stack.hasDisplayName()) {
  67.             TileEntity te = world.getTileEntity(pos);
  68.             if(te instanceof LockableTileEntity) {
  69.                 ((LockableTileEntity)te).setCustomName(stack.getDisplayName());
  70.             }
  71.         }
  72.     }
  73.  
  74.     @Override
  75.     public void onBlockHarvested(World world, BlockPos pos, BlockState state, PlayerEntity player) {
  76.         TileEntity te = world.getTileEntity(pos);
  77.         if(te instanceof IInventory) {
  78.             InventoryHelper.dropInventoryItems(world, pos, (IInventory)te);
  79.             world.updateComparatorOutputLevel(pos, this);
  80.         }
  81.     }
  82.  
  83.     @Override
  84.     public void onBlockExploded(BlockState state, World world, BlockPos pos, Explosion explosion) {
  85.         this.onBlockHarvested(world, pos, state, world.getClosestPlayer(explosion.getPosition().x, explosion.getPosition().y, explosion.getPosition().z));
  86.     }
  87.  
  88.     @Override
  89.     public BlockRenderType getRenderType(BlockState state) {
  90.         return props.getRenderType();
  91.     }
  92.  
  93.     @Nullable
  94.     @Override
  95.     public BlockState getStateForPlacement(BlockItemUseContext context) {
  96.         return props.isHorizontal() ? this.getDefaultState() : this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite());
  97.     }
  98.  
  99.     @Nullable
  100.     @Override
  101.     public TileEntity createNewTileEntity(IBlockReader worldIn) {
  102.         return supplier.get();
  103.     }
  104.  
  105.     @Override
  106.     protected void fillStateContainer(StateContainer.Builder<Block, BlockState> p_206840_1_) {
  107.         if(props.isHorizontal())
  108.             p_206840_1_.add(FACING);
  109.     }
  110.  
  111.     @Override
  112.     public BlockState rotate(BlockState state, IWorld world, BlockPos pos, Rotation direction) {
  113.         return props.isHorizontal() ? state.with(FACING, direction.rotate(state.get(FACING))) : state;
  114.     }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement