package me.km.blocks; import java.util.Random; import me.km.KajetansMod; import me.km.items.ModItems; import net.minecraft.block.BlockCauldron; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockModCauldron extends BlockCauldron implements IBlockBase, ITileEntityProvider { protected String name; public BlockModCauldron(String name, String local) { this.name = name; this.setRegistryName(name); super.setUnlocalizedName(local); super.setHardness(2.0F); super.setCreativeTab(CreativeTabs.BREWING); } @Override public void registerItemModel(Item itemBlock) { KajetansMod.proxy.registerItemRenderer(itemBlock, 0, name); } @Override public BlockModCauldron setSoundType(SoundType sound) { super.setSoundType(sound); return this; } @Override public TileEntity createNewTileEntity(World worldIn, int meta) { return new TileEntityCauldron(); } @Override public void breakBlock(World w, BlockPos pos, IBlockState state) { w.removeTileEntity(pos); } @Override public Item getItemDropped(IBlockState state, Random rand, int fortune) { return Item.getItemFromBlock(this); } @Override public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) { return new ItemStack(Item.getItemFromBlock(this), 1, this.damageDropped(state)); } @Override public boolean onBlockActivated(World w, BlockPos pos, IBlockState state, EntityPlayer p, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { if(w.isRemote) { return true; } else { TileEntity te = w.getTileEntity(pos); if(te instanceof TileEntityCauldron) { TileEntityCauldron cauldron = (TileEntityCauldron) te; boolean b = false; if(cauldron.hasDefaultColor()) { b = super.onBlockActivated(w, pos, state, p, hand, facing, hitX, hitY, hitZ); } ItemStack stack = p.getHeldItem(hand); if(stack.isEmpty() || b) { return true; } else if(stack.getItem() == Items.BOWL) { int waterLevel = state.getValue(LEVEL); if(waterLevel > 0) { ItemStack stew = new ItemStack(ModItems.coloredSoup); ModItems.coloredSoup.addIngredient(stew, cauldron.getIngredients()); ModItems.coloredSoup.setColor(stew, cauldron.getColor().getRGB()); ModItems.coloredSoup.setFoodStats(stew, cauldron.getIngredients()); stack.shrink(1); if(stack.isEmpty()) { p.setHeldItem(hand, stew); } else if(!p.inventory.addItemStackToInventory(stew)) { p.dropItem(stew, false); } else if(p instanceof EntityPlayerMP) { ((EntityPlayerMP) p).sendContainerToPlayer(p.inventoryContainer); } this.setWaterLevel(w, pos, state, waterLevel - 1); } return true; } if(cauldron.getNumberOfIngredients() < 3 && cauldron.addItemStack(stack)) { if(!p.capabilities.isCreativeMode) { stack.shrink(1); } } return true; } return true; } } @Override public void setWaterLevel(World w, BlockPos pos, IBlockState state, int level) { if(level <= 0 && !w.isRemote) { TileEntity te = w.getTileEntity(pos); if(te instanceof TileEntityCauldron) { ((TileEntityCauldron) te).reset(); } } super.setWaterLevel(w, pos, state, level); } }