package joshie.harvest.gathering.block; import com.google.common.collect.Lists; import joshie.harvest.api.core.ITiered.ToolTier; import joshie.harvest.core.HFTab; import joshie.harvest.core.base.block.BlockHFSmashable; import joshie.harvest.core.base.item.ItemToolSmashing; import joshie.harvest.core.lib.CreativeSort; import joshie.harvest.core.util.interfaces.ISellable; import joshie.harvest.gathering.block.BlockRock.Rock; import joshie.harvest.tools.HFTools; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.IStringSerializable; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; import java.util.Locale; import static joshie.harvest.api.gathering.ISmashable.ToolType.HAMMER; public class BlockRock extends BlockHFSmashable<BlockRock, Rock> { private static final AxisAlignedBB STONE_SMALL_AABB = new AxisAlignedBB(0.15D, 0.0D, 0.15D, 0.85D, 0.15D, 0.85D); private static final AxisAlignedBB STONE_MEDIUM_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.2D, 1.0D); private static final AxisAlignedBB STONE_LARGE_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.3D, 1.0D); private static final AxisAlignedBB BOULDER_SMALL_AABB = new AxisAlignedBB(0.225D, 0.0D, 0.225D, 0.775D, 0.25D, 0.775D); private static final AxisAlignedBB BOULDER_MEDIUM_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.35D, 1.0D); private static final AxisAlignedBB BOULDER_LARGE_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.6D, 1.0D); public enum Rock implements IStringSerializable, ISellable { STONE_SMALL(1L), STONE_MEDIUM(2L), STONE_LARGE(4L), BOULDER_SMALL(3L), BOULDER_MEDIUM(5L), BOULDER_LARGE(10L); private final long sell; Rock(long sell) { this.sell = sell; } @Override public long getSellValue() { return sell; } @Override public String getName() { return toString().toLowerCase(Locale.ENGLISH); } } public BlockRock() { super(Material.ROCK, Rock.class, HFTab.GATHERING); setHardness(1.5F); setSoundType(SoundType.STONE); } @SuppressWarnings("deprecation") @Override @Nonnull public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { switch (getEnumFromState(state)) { case STONE_SMALL: return STONE_SMALL_AABB; case STONE_MEDIUM: return STONE_MEDIUM_AABB; case STONE_LARGE: return STONE_LARGE_AABB; case BOULDER_SMALL: return BOULDER_SMALL_AABB; case BOULDER_MEDIUM: return BOULDER_MEDIUM_AABB; case BOULDER_LARGE: return BOULDER_LARGE_AABB; default: return BOULDER_LARGE_AABB; } } @Override public ToolType getToolType() { return HAMMER; } @Override public ItemToolSmashing getTool() { return HFTools.HAMMER; } @Override public List<ItemStack> getDrops(EntityPlayer player, World world, BlockPos pos, IBlockState state, float luck) { switch (getEnumFromState(state)) { case STONE_SMALL: return Lists.newArrayList(new ItemStack(Blocks.STONE, 1)); case STONE_MEDIUM: return Lists.newArrayList(new ItemStack(Blocks.STONE, 2)); case STONE_LARGE: return Lists.newArrayList(new ItemStack(Blocks.STONE, 4)); case BOULDER_SMALL: return Lists.newArrayList(new ItemStack(Blocks.STONE, 3)); case BOULDER_MEDIUM: return Lists.newArrayList(new ItemStack(Blocks.STONE, 6)); case BOULDER_LARGE: return Lists.newArrayList(new ItemStack(Blocks.STONE, 12)); default: return new ArrayList<>(); } } @Override public ToolTier getRequiredTier(IBlockState state) { return ToolTier.BASIC; } @SuppressWarnings("deprecation") @Deprecated public float getBlockHardness(IBlockState state, World world, BlockPos pos) { return getToolLevel(getEnumFromState(state)) * 2; } @Override public int getSortValue(ItemStack stack) { return CreativeSort.TOOLS - 30 + stack.getItemDamage(); } }