147 lines
5.6 KiB
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];
|
|
}
|
|
}
|
|
|
|
|