ExtraHoppers-forge/src/main/java/net/shadowfacts/funnels/BlockFunnel.java

122 lines
4.2 KiB
Java
Raw Normal View History

2016-06-14 23:19:20 +00:00
package net.shadowfacts.funnels;
2016-10-25 00:52:23 +00:00
import net.minecraft.block.SoundType;
2016-06-14 23:19:20 +00:00
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyDirection;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
2016-11-20 14:36:16 +00:00
import net.minecraftforge.fluids.FluidActionResult;
import net.minecraftforge.fluids.FluidUtil;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
2016-06-14 23:19:20 +00:00
import net.shadowfacts.shadowmc.block.BlockTE;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
/**
* @author shadowfacts
*/
public class BlockFunnel extends BlockTE<TileEntityFunnel> {
public static final PropertyDirection FACING = PropertyDirection.create("facing", side -> side != EnumFacing.UP);
protected static final AxisAlignedBB BASE_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.625D, 1.0D);
protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.125D);
protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.875D, 1.0D, 1.0D, 1.0D);
protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.875D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.125D, 1.0D, 1.0D);
public BlockFunnel() {
2016-10-25 00:52:23 +00:00
super(Material.IRON, "funnel");
2016-06-14 23:19:20 +00:00
setCreativeTab(CreativeTabs.MISC);
2016-10-25 00:52:23 +00:00
setHardness(3.5f);
setResistance(8);
setSoundType(SoundType.METAL);
2016-06-14 23:19:20 +00:00
setDefaultState(getDefaultState()
.withProperty(FACING, EnumFacing.DOWN));
}
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
return FULL_BLOCK_AABB;
}
@Override
public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entityIn) {
addCollisionBoxToList(pos, entityBox, collidingBoxes, BASE_AABB);
addCollisionBoxToList(pos, entityBox, collidingBoxes, EAST_AABB);
addCollisionBoxToList(pos, entityBox, collidingBoxes, WEST_AABB);
addCollisionBoxToList(pos, entityBox, collidingBoxes, SOUTH_AABB);
addCollisionBoxToList(pos, entityBox, collidingBoxes, NORTH_AABB);
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, FACING);
}
@Override
public int getMetaFromState(IBlockState state) {
return state.getValue(FACING).getIndex();
}
@Override
public IBlockState getStateFromMeta(int meta) {
return getDefaultState().withProperty(FACING, EnumFacing.getFront(meta));
}
@Override
2016-11-20 14:36:16 +00:00
public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) {
2016-06-14 23:19:20 +00:00
EnumFacing side = facing.getOpposite();
if (side == EnumFacing.UP) side = EnumFacing.DOWN;
return getDefaultState().withProperty(FACING, side);
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
2016-06-14 23:19:20 +00:00
if (!player.isSneaking()) {
TileEntityFunnel te = getTileEntity(world, pos);
2016-11-20 14:36:16 +00:00
ItemStack stack = player.getHeldItem(hand);
FluidActionResult result = FluidUtil.interactWithFluidHandler(stack, te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, EnumFacing.NORTH), player);
if (result.isSuccess()) {
player.setHeldItem(hand, result.getResult());
2016-06-17 16:30:20 +00:00
te.save();
2016-06-14 23:19:20 +00:00
return true;
}
}
return false;
}
@Override
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@Override
public Class<TileEntityFunnel> getTileEntityClass() {
return TileEntityFunnel.class;
}
@Nonnull
@Override
public TileEntityFunnel createTileEntity(World world, IBlockState state) {
return new TileEntityFunnel();
}
}