
I redone where the items/blocsks are stored and how the configs are handled to clean up it and give space. You can change the config line to AWWayofTime if you want to keep the compatibility with old configs. Now you reference the blocks from the ModBlocks and Items from the ModItems.
179 lines
5.5 KiB
Java
179 lines
5.5 KiB
Java
package WayofTime.alchemicalWizardry.common.block;
|
|
|
|
import WayofTime.alchemicalWizardry.common.AlchemicalWizardry;
|
|
import WayofTime.alchemicalWizardry.common.tileEntity.TEWritingTable;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.block.BlockContainer;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.client.renderer.texture.IconRegister;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.item.EntityItem;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.inventory.IInventory;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.util.AxisAlignedBB;
|
|
import net.minecraft.util.Icon;
|
|
import net.minecraft.world.World;
|
|
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
|
|
public class BlockWritingTable extends BlockContainer {
|
|
@SideOnly(Side.CLIENT)
|
|
private static Icon topIcon;
|
|
@SideOnly(Side.CLIENT)
|
|
private static Icon sideIcon1;
|
|
@SideOnly(Side.CLIENT)
|
|
private static Icon sideIcon2;
|
|
@SideOnly(Side.CLIENT)
|
|
private static Icon bottomIcon;
|
|
|
|
public BlockWritingTable(int id)
|
|
{
|
|
super(id, Material.wood);
|
|
setHardness(2.0F);
|
|
setResistance(5.0F);
|
|
setUnlocalizedName("blockWritingTable");
|
|
setCreativeTab(AlchemicalWizardry.tabBloodMagic);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerIcons(IconRegister iconRegister)
|
|
{
|
|
this.topIcon = iconRegister.registerIcon("AlchemicalWizardry:AlchemicChemistrySet");
|
|
this.sideIcon1 = iconRegister.registerIcon("AlchemicalWizardry:BloodAltar_SideType1");
|
|
this.sideIcon2 = iconRegister.registerIcon("AlchemicalWizardry:BloodAltar_SideType2");
|
|
this.bottomIcon = iconRegister.registerIcon("AlchemicalWizardry:BloodAltar_Bottom");
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public Icon getIcon(int side, int meta)
|
|
{
|
|
switch (side)
|
|
{
|
|
case 0:
|
|
return bottomIcon;
|
|
|
|
case 1:
|
|
return topIcon;
|
|
|
|
//case 2: return sideIcon1;
|
|
//case 3: return sideIcon1;
|
|
//case 4: return sideIcon2;
|
|
//case 5: return sideIcon2;
|
|
default:
|
|
return sideIcon2;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int metadata, float what, float these, float are)
|
|
{
|
|
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
|
|
|
|
if (tileEntity == null || player.isSneaking())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//code to open gui explained later
|
|
player.openGui(AlchemicalWizardry.instance, 0, world, x, y, z);
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void breakBlock(World world, int x, int y, int z, int par5, int par6)
|
|
{
|
|
dropItems(world, x, y, z);
|
|
super.breakBlock(world, x, y, z, par5, par6);
|
|
}
|
|
|
|
private void dropItems(World world, int x, int y, int z)
|
|
{
|
|
Random rand = new Random();
|
|
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
|
|
|
|
if (!(tileEntity instanceof IInventory))
|
|
{
|
|
return;
|
|
}
|
|
|
|
IInventory inventory = (IInventory) tileEntity;
|
|
|
|
for (int i = 0; i < inventory.getSizeInventory(); i++)
|
|
{
|
|
ItemStack item = inventory.getStackInSlot(i);
|
|
|
|
if (item != null && item.stackSize > 0)
|
|
{
|
|
float rx = rand.nextFloat() * 0.8F + 0.1F;
|
|
float ry = rand.nextFloat() * 0.8F + 0.1F;
|
|
float rz = rand.nextFloat() * 0.8F + 0.1F;
|
|
EntityItem entityItem = new EntityItem(world,
|
|
x + rx, y + ry, z + rz,
|
|
new ItemStack(item.itemID, item.stackSize, item.getItemDamage()));
|
|
|
|
if (item.hasTagCompound())
|
|
{
|
|
entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy());
|
|
}
|
|
|
|
float factor = 0.05F;
|
|
entityItem.motionX = rand.nextGaussian() * factor;
|
|
entityItem.motionY = rand.nextGaussian() * factor + 0.2F;
|
|
entityItem.motionZ = rand.nextGaussian() * factor;
|
|
world.spawnEntityInWorld(entityItem);
|
|
item.stackSize = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public TileEntity createNewTileEntity(World world)
|
|
{
|
|
return new TEWritingTable();
|
|
}
|
|
|
|
@Override
|
|
public boolean renderAsNormalBlock()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public int getRenderType()
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
@Override
|
|
public boolean isOpaqueCube()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean hasTileEntity()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void addCollisionBoxesToList(World par1World, int par2, int par3, int par4, AxisAlignedBB par5AxisAlignedBB, List par6List, Entity par7Entity)
|
|
{
|
|
this.setBlockBounds(0.4375F, 0.0F, 0.4375F, 0.5625F, 0.9375F, 0.5625F);
|
|
super.addCollisionBoxesToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity);
|
|
this.setBlockBoundsForItemRender();
|
|
super.addCollisionBoxesToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity);
|
|
}
|
|
|
|
public void setBlockBoundsForItemRender()
|
|
{
|
|
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F);
|
|
}
|
|
} |