Advertisement
TheOnlyTails

RubyBarrelBlock

Oct 1st, 2020
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.71 KB | None | 0 0
  1. package com.theonlytails.ruby.blocks;
  2.  
  3. import com.theonlytails.ruby.init.TileEntityTypesRegistry;
  4. import com.theonlytails.ruby.tileentity.TileRubyBarrel;
  5. import net.minecraft.block.Block;
  6. import net.minecraft.block.BlockState;
  7. import net.minecraft.block.SoundType;
  8. import net.minecraft.block.material.Material;
  9. import net.minecraft.block.material.MaterialColor;
  10. import net.minecraft.entity.player.PlayerEntity;
  11. import net.minecraft.entity.player.ServerPlayerEntity;
  12. import net.minecraft.inventory.InventoryHelper;
  13. import net.minecraft.inventory.container.INamedContainerProvider;
  14. import net.minecraft.state.BooleanProperty;
  15. import net.minecraft.state.StateContainer;
  16. import net.minecraft.state.properties.BlockStateProperties;
  17. import net.minecraft.stats.Stats;
  18. import net.minecraft.tileentity.TileEntity;
  19. import net.minecraft.util.ActionResultType;
  20. import net.minecraft.util.Hand;
  21. import net.minecraft.util.SoundEvents;
  22. import net.minecraft.util.math.BlockPos;
  23. import net.minecraft.util.math.BlockRayTraceResult;
  24. import net.minecraft.world.IBlockReader;
  25. import net.minecraft.world.World;
  26. import net.minecraftforge.common.ToolType;
  27. import net.minecraftforge.fml.network.NetworkHooks;
  28. import net.minecraftforge.items.ItemHandlerHelper;
  29. import org.jetbrains.annotations.Nullable;
  30.  
  31. import java.util.stream.IntStream;
  32.  
  33. @SuppressWarnings("deprecation")
  34. public class RubyBarrelBlock extends Block {
  35.     public static final BooleanProperty PROPERTY_OPEN = BlockStateProperties.OPEN;
  36.  
  37.     public RubyBarrelBlock() {
  38.         super(Properties.create(
  39.                 Material.IRON, MaterialColor.RED)
  40.                 .hardnessAndResistance(3.5f)
  41.                 .sound(SoundType.METAL)
  42.                 .harvestTool(ToolType.PICKAXE)
  43.                 .harvestLevel(2)
  44.                 .setRequiresTool());
  45.  
  46.         this.setDefaultState(this.getStateContainer().getBaseState().with(PROPERTY_OPEN, false));
  47.     }
  48.  
  49.     @Override
  50.     public ActionResultType onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
  51.         if (!worldIn.isRemote()) {
  52.             INamedContainerProvider tileEntity = (INamedContainerProvider) worldIn.getTileEntity(pos);
  53.  
  54.             if (tileEntity != null) {
  55.                 TileRubyBarrel rubyBarrelTile = (TileRubyBarrel) tileEntity;
  56.  
  57.                 if (rubyBarrelTile.players == 0) {
  58.                     rubyBarrelTile.playSound(SoundEvents.BLOCK_BARREL_OPEN);
  59.                     rubyBarrelTile.changeState(state, true);
  60.                 }
  61.  
  62.                 rubyBarrelTile.players++;
  63.                 NetworkHooks.openGui((ServerPlayerEntity) player, tileEntity, pos);
  64.                 player.addStat(Stats.OPEN_BARREL);
  65.             }
  66.         }
  67.  
  68.         return ActionResultType.SUCCESS;
  69.     }
  70.  
  71.     @Override
  72.     public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
  73.         if (state.getBlock() != newState.getBlock()) {
  74.             TileEntity tileEntity = worldIn.getTileEntity(pos);
  75.  
  76.             if (tileEntity instanceof TileRubyBarrel) {
  77.                 TileRubyBarrel rubyBarrelTile = (TileRubyBarrel) tileEntity;
  78.  
  79.                 dropItems(rubyBarrelTile, worldIn, pos);
  80.                 worldIn.updateComparatorOutputLevel(pos, this);
  81.             }
  82.         }
  83.  
  84.         super.onReplaced(state, worldIn, pos, newState, isMoving);
  85.     }
  86.  
  87.     @Nullable
  88.     @Override
  89.     public TileEntity createTileEntity(BlockState state, IBlockReader world) {
  90.         return TileEntityTypesRegistry.RUBY_BARREL.get().create();
  91.     }
  92.  
  93.     @Override
  94.     public boolean hasTileEntity(BlockState state) {
  95.         return true;
  96.     }
  97.  
  98.     @Override
  99.     public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
  100.         TileEntity rubyBarrel = worldIn.getTileEntity(pos);
  101.         return rubyBarrel instanceof TileRubyBarrel ?
  102.                 ItemHandlerHelper.calcRedstoneFromInventory(((TileRubyBarrel) rubyBarrel).itemHandler) : 0;
  103.     }
  104.  
  105.     @Override
  106.     public boolean hasComparatorInputOverride(BlockState state) {
  107.         return true;
  108.     }
  109.  
  110.     private static void dropItems(TileRubyBarrel rubyBarrel, World world, BlockPos pos) {
  111.         IntStream.range(0, rubyBarrel.itemHandler.getSlots())
  112.                 .mapToObj(rubyBarrel.itemHandler::getStackInSlot)
  113.                 .filter(stack -> !stack.isEmpty())
  114.                 .forEach(stack ->
  115.                         InventoryHelper.spawnItemStack(
  116.                                 world, pos.getX(), pos.getY(), pos.getZ(), stack));
  117.     }
  118.  
  119.     @Override
  120.     protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
  121.         builder.add(PROPERTY_OPEN);
  122.     }
  123. }
  124.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement