TheTorchMod/com/bernard/torch/blocks/TorchRechargerBlock.java

147 lines
5.6 KiB
Java

package com.bernard.torch.blocks;
import com.bernard.torch.TorchMod;
import com.bernard.torch.blocks.tileentities.TorchRechargerTileEntity;
import java.util.List;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public class TorchRechargerBlock
extends Block
{
private IIcon iconTop;
private IIcon iconBottom;
private IIcon iconFaces;
public static String[] names = { "torch_recharger", "coal_torch_recharger", "iron_torch_recharger", "quartz_torch_recharger", "gold_torch_recharger", "redstone_torch_recharger", "lapis_torch_recharger", "diamond_torch_recharger", "emerald_torch_recharger" };
public IIcon[][] textures = new IIcon[names.length][3];
public TorchRechargerBlock() {
super(Material.iron);
setHarvestLevel("pickaxe", 2);
setHardness(10.0F);
setCreativeTab(CreativeTabs.tabDecorations);
setLightLevel(10.0F);
setResistance(1000.0F);
}
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
{
if (!world.isRemote) {
TorchRechargerTileEntity te = (TorchRechargerTileEntity)world.getTileEntity(x, y, z);
player.openGui(TorchMod.MOD_INSTANCE, 0, world, x, y, z);
}
return true;
}
public void breakBlock(World world, int x, int y, int z, Block block, int meta)
{
TileEntity te = world.getTileEntity(x, y, z);
if ((te instanceof TorchRechargerTileEntity)) {
TorchRechargerTileEntity torchRecharger = (TorchRechargerTileEntity)te;
int torches = Math.floorDiv(torchRecharger.getTorchValue(), 4);
int sticks = Math.floorDiv(torchRecharger.getStickValue(), 4);
int coals = Math.floorDiv(torchRecharger.getCoalValue(), 4);
double dropX = x + world.rand.nextFloat() * 0.8F + 0.1F;double dropY = y + world.rand.nextFloat() * 0.8F + 0.1F;
double dropZ = z + world.rand.nextFloat() * 0.8F + 0.1F;
while ((torches > 0) || (sticks > 0) || (coals > 0)) {
if (torches > 0)
{
EntityItem item = new EntityItem(world, dropX, dropY, dropZ, new ItemStack(Blocks.torch, Math.min(torches, 64), 0));
item.motionX = ((float)world.rand.nextGaussian() * 0.05F);
item.motionY = ((float)world.rand.nextGaussian() * 0.05F + 0.2F);
item.motionZ = ((float)world.rand.nextGaussian() * 0.05F);
torches -= Math.min(torches, 64);
world.spawnEntityInWorld(item);
}
if (sticks > 0)
{
EntityItem item = new EntityItem(world, dropX, dropY, dropZ, new ItemStack(Items.stick, Math.min(sticks, 64), 0));
item.motionX = ((float)world.rand.nextGaussian() * 0.05F);
item.motionY = ((float)world.rand.nextGaussian() * 0.05F + 0.2F);
item.motionZ = ((float)world.rand.nextGaussian() * 0.05F);
sticks -= Math.min(sticks, 64);
world.spawnEntityInWorld(item);
}
if (coals > 0)
{
EntityItem item = new EntityItem(world, dropX, dropY, dropZ, new ItemStack(Items.coal, Math.min(coals, 64), 0));
item.motionX = ((float)world.rand.nextGaussian() * 0.05F);
item.motionY = ((float)world.rand.nextGaussian() * 0.05F + 0.2F);
item.motionZ = ((float)world.rand.nextGaussian() * 0.05F);
coals -= Math.min(coals, 64);
world.spawnEntityInWorld(item);
}
}
world.updateNeighborsAboutBlockChange(x, y, z, block);
world.removeTileEntity(x, y, z);
}
super.breakBlock(world, x, y, z, block, meta);
}
public boolean hasTileEntity(int metadata)
{
return true;
}
public TileEntity createTileEntity(World world, int metadata)
{
return new TorchRechargerTileEntity();
}
public void getSubBlocks(Item item, CreativeTabs tab, List l)
{
for (int i = 0; i < names.length; i++) {
l.add(new ItemStack(item, 1, i));
}
}
public void registerIcons(IIconRegister r)
{
for (int i = 0; i < this.textures.length; i++) {
this.textures[i][0] = r.registerIcon("torch_mod:" + names[i] + "_bottom");
this.textures[i][1] = r.registerIcon("torch_mod:" + names[i] + "_top");
this.textures[i][2] = r.registerIcon("torch_mod:" + names[i] + "_side");
}
}
public int damageDropped(int meta)
{
return meta;
}
public IIcon getIcon(int side, int meta)
{
if ((meta >= this.textures.length) || (meta < 0))
return this.textures[0][0];
switch (side) {
case 0:
return this.textures[meta][0];
case 1:
return this.textures[meta][1];
}
return this.textures[meta][2];
}
}