aboutsummaryrefslogtreecommitdiff
path: root/src/Java/binnie/core/block
diff options
context:
space:
mode:
authorDraknyte1 <Draknyte1@hotmail.com>2016-01-20 14:24:34 +1000
committerDraknyte1 <Draknyte1@hotmail.com>2016-01-20 14:24:34 +1000
commit869c206c4fcc8001bd2e1d66f704290331813835 (patch)
tree96735ce8fe4665e2759c3374221d6f06f4527df2 /src/Java/binnie/core/block
parentec2c72827f01dd4bb2174137f1ab162f9ddaab62 (diff)
downloadGT5-Unofficial-869c206c4fcc8001bd2e1d66f704290331813835.tar.gz
GT5-Unofficial-869c206c4fcc8001bd2e1d66f704290331813835.tar.bz2
GT5-Unofficial-869c206c4fcc8001bd2e1d66f704290331813835.zip
Initial Commit
Diffstat (limited to 'src/Java/binnie/core/block')
-rw-r--r--src/Java/binnie/core/block/BlockMetadata.java138
-rw-r--r--src/Java/binnie/core/block/IBlockMetadata.java21
-rw-r--r--src/Java/binnie/core/block/IMultipassBlock.java8
-rw-r--r--src/Java/binnie/core/block/ItemMetadata.java67
-rw-r--r--src/Java/binnie/core/block/ItemMetadataRenderer.java64
-rw-r--r--src/Java/binnie/core/block/MultipassBlockRenderer.java106
-rw-r--r--src/Java/binnie/core/block/MultipassItemRenderer.java78
-rw-r--r--src/Java/binnie/core/block/TileEntityMetadata.java116
8 files changed, 598 insertions, 0 deletions
diff --git a/src/Java/binnie/core/block/BlockMetadata.java b/src/Java/binnie/core/block/BlockMetadata.java
new file mode 100644
index 0000000000..39b461d01d
--- /dev/null
+++ b/src/Java/binnie/core/block/BlockMetadata.java
@@ -0,0 +1,138 @@
+package binnie.core.block;
+
+import binnie.core.BinnieCore;
+import binnie.core.proxy.BinnieProxy;
+import java.util.ArrayList;
+import java.util.List;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockContainer;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.PlayerCapabilities;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.MovingObjectPosition;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class BlockMetadata
+ extends BlockContainer
+ implements IBlockMetadata
+{
+ public BlockMetadata(Material material)
+ {
+ super(material);
+ }
+
+ public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int blockMeta, int fortune)
+ {
+ return getBlockDropped(this, world, x, y, z, blockMeta);
+ }
+
+ public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z)
+ {
+ return breakBlock(this, player, world, x, y, z);
+ }
+
+ public TileEntity createNewTileEntity(World var1, int i)
+ {
+ return new TileEntityMetadata();
+ }
+
+ public boolean hasTileEntity(int meta)
+ {
+ return true;
+ }
+
+ public boolean onBlockEventReceived(World par1World, int par2, int par3, int par4, int par5, int par6)
+ {
+ super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6);
+ TileEntity tileentity = par1World.getTileEntity(par2, par3, par4);
+ return tileentity != null ? tileentity.receiveClientEvent(par5, par6) : false;
+ }
+
+ public IIcon getIcon(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)
+ {
+ int metadata = TileEntityMetadata.getTileMetadata(par1IBlockAccess, par2, par3, par4);
+ return getIcon(par5, metadata);
+ }
+
+ public String getBlockName(ItemStack par1ItemStack)
+ {
+ return getLocalizedName();
+ }
+
+ public void getBlockTooltip(ItemStack par1ItemStack, List par3List) {}
+
+ public int getPlacedMeta(ItemStack item, World world, int x, int y, int z, ForgeDirection clickedBlock)
+ {
+ int damage = TileEntityMetadata.getItemDamage(item);
+ return damage;
+ }
+
+ public int getDroppedMeta(int tileMeta, int blockMeta)
+ {
+ return tileMeta;
+ }
+
+ public static ArrayList<ItemStack> getBlockDropped(IBlockMetadata block, World world, int x, int y, int z, int blockMeta)
+ {
+ ArrayList<ItemStack> array = new ArrayList();
+ TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z);
+ if ((tile != null) && (!tile.hasDroppedBlock()))
+ {
+ int meta = block.getDroppedMeta(world.getBlockMetadata(x, y, z), tile.getTileMetadata());
+ array.add(TileEntityMetadata.getItemStack((Block)block, meta));
+ }
+ return array;
+ }
+
+ static int temporyMeta = -1;
+
+ public static boolean breakBlock(IBlockMetadata block, EntityPlayer player, World world, int i, int j, int k)
+ {
+ List<ItemStack> drops = new ArrayList();
+
+ Block block2 = (Block)block;
+
+ TileEntityMetadata tile = TileEntityMetadata.getTile(world, i, j, k);
+ if ((tile != null) && (!tile.hasDroppedBlock()))
+ {
+ int tileMeta = TileEntityMetadata.getTileMetadata(world, i, j, k);
+ drops = block2.getDrops(world, i, j, k, world.getBlockMetadata(i, j, k), 0);
+ }
+ boolean hasBeenBroken = world.setBlockToAir(i, j, k);
+ if ((hasBeenBroken) && (BinnieCore.proxy.isSimulating(world)) && (drops.size() > 0) && ((player == null) || (!player.capabilities.isCreativeMode)))
+ {
+ for (ItemStack drop : drops) {
+ block.dropAsStack(world, i, j, k, drop);
+ }
+ tile.dropBlock();
+ }
+ return hasBeenBroken;
+ }
+
+ public void dropAsStack(World world, int x, int y, int z, ItemStack drop)
+ {
+ dropBlockAsItem(world, x, y, z, drop);
+ }
+
+ public void breakBlock(World par1World, int par2, int par3, int par4, Block par5, int par6)
+ {
+ super.breakBlock(par1World, par2, par3, par4, par5, par6);
+ par1World.removeTileEntity(par2, par3, par4);
+ }
+
+ public static ItemStack getPickBlock(World world, int x, int y, int z)
+ {
+ List<ItemStack> list = getBlockDropped((IBlockMetadata)world.getBlock(x, y, z), world, x, y, z, world.getBlockMetadata(x, y, z));
+ return list.isEmpty() ? null : (ItemStack)list.get(0);
+ }
+
+ public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z)
+ {
+ return getPickBlock(world, x, y, z);
+ }
+}
diff --git a/src/Java/binnie/core/block/IBlockMetadata.java b/src/Java/binnie/core/block/IBlockMetadata.java
new file mode 100644
index 0000000000..b182139de7
--- /dev/null
+++ b/src/Java/binnie/core/block/IBlockMetadata.java
@@ -0,0 +1,21 @@
+package binnie.core.block;
+
+import java.util.List;
+import net.minecraft.block.ITileEntityProvider;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public abstract interface IBlockMetadata
+ extends ITileEntityProvider
+{
+ public abstract int getPlacedMeta(ItemStack paramItemStack, World paramWorld, int paramInt1, int paramInt2, int paramInt3, ForgeDirection paramForgeDirection);
+
+ public abstract int getDroppedMeta(int paramInt1, int paramInt2);
+
+ public abstract String getBlockName(ItemStack paramItemStack);
+
+ public abstract void getBlockTooltip(ItemStack paramItemStack, List paramList);
+
+ public abstract void dropAsStack(World paramWorld, int paramInt1, int paramInt2, int paramInt3, ItemStack paramItemStack);
+}
diff --git a/src/Java/binnie/core/block/IMultipassBlock.java b/src/Java/binnie/core/block/IMultipassBlock.java
new file mode 100644
index 0000000000..fd578c0ee5
--- /dev/null
+++ b/src/Java/binnie/core/block/IMultipassBlock.java
@@ -0,0 +1,8 @@
+package binnie.core.block;
+
+public abstract interface IMultipassBlock
+{
+ public abstract int getNumberOfPasses();
+
+ public abstract int colorMultiplier(int paramInt);
+}
diff --git a/src/Java/binnie/core/block/ItemMetadata.java b/src/Java/binnie/core/block/ItemMetadata.java
new file mode 100644
index 0000000000..a3cd5173a9
--- /dev/null
+++ b/src/Java/binnie/core/block/ItemMetadata.java
@@ -0,0 +1,67 @@
+package binnie.core.block;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import java.util.List;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
+
+public class ItemMetadata
+ extends ItemBlock
+{
+ public ItemMetadata(Block block)
+ {
+ super(block);
+ }
+
+ public int getMetadata(int par1)
+ {
+ return 0;
+ }
+
+ public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata)
+ {
+ Block block = this.field_150939_a;
+ if (!(block instanceof IBlockMetadata)) {
+ return false;
+ }
+ int placedMeta = ((IBlockMetadata)block).getPlacedMeta(stack, world, x, y, z, net.minecraftforge.common.util.ForgeDirection.values()[side]);
+ if (placedMeta < 0) {
+ return false;
+ }
+ if (!world.setBlock(x, y, z, block, metadata, 3)) {
+ return false;
+ }
+ if (world.getBlock(x, y, z) == block)
+ {
+ TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z);
+ if (tile != null) {
+ tile.setTileMetadata(placedMeta, false);
+ }
+ block.onBlockPlacedBy(world, x, y, z, player, stack);
+ block.onPostBlockPlaced(world, x, y, z, metadata);
+ }
+ return true;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public String getItemStackDisplayName(ItemStack par1ItemStack)
+ {
+ return ((IBlockMetadata)this.field_150939_a).getBlockName(par1ItemStack);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
+ {
+ ((IBlockMetadata)this.field_150939_a).getBlockTooltip(par1ItemStack, par3List);
+ }
+
+ public IIcon getIconFromDamage(int par1)
+ {
+ return this.field_150939_a.getIcon(1, par1);
+ }
+}
diff --git a/src/Java/binnie/core/block/ItemMetadataRenderer.java b/src/Java/binnie/core/block/ItemMetadataRenderer.java
new file mode 100644
index 0000000000..e96dd068c1
--- /dev/null
+++ b/src/Java/binnie/core/block/ItemMetadataRenderer.java
@@ -0,0 +1,64 @@
+package binnie.core.block;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.client.IItemRenderer;
+import net.minecraftforge.client.IItemRenderer.ItemRenderType;
+import net.minecraftforge.client.IItemRenderer.ItemRendererHelper;
+import org.lwjgl.opengl.GL11;
+
+public class ItemMetadataRenderer
+ implements IItemRenderer
+{
+ public boolean handleRenderType(ItemStack item, IItemRenderer.ItemRenderType type)
+ {
+ return (type == IItemRenderer.ItemRenderType.INVENTORY) || (type == IItemRenderer.ItemRenderType.ENTITY) || (type == IItemRenderer.ItemRenderType.EQUIPPED) || (type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON);
+ }
+
+ public boolean shouldUseRenderHelper(IItemRenderer.ItemRenderType type, ItemStack item, IItemRenderer.ItemRendererHelper helper)
+ {
+ if (type == IItemRenderer.ItemRenderType.INVENTORY) {
+ return helper == IItemRenderer.ItemRendererHelper.INVENTORY_BLOCK;
+ }
+ if (type == IItemRenderer.ItemRenderType.ENTITY) {
+ return (helper == IItemRenderer.ItemRendererHelper.ENTITY_BOBBING) || (helper == IItemRenderer.ItemRendererHelper.ENTITY_ROTATION);
+ }
+ if ((type == IItemRenderer.ItemRenderType.EQUIPPED) || (type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON)) {
+ return helper == IItemRenderer.ItemRendererHelper.EQUIPPED_BLOCK;
+ }
+ return false;
+ }
+
+ public void renderItem(IItemRenderer.ItemRenderType type, ItemStack item, Object... data)
+ {
+ GL11.glPushMatrix();
+
+
+
+
+
+
+
+
+
+
+ Block block = Block.getBlockFromItem(item.getItem());
+ if (type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) {
+ GL11.glTranslated(0.5D, 0.5D, 0.5D);
+ }
+ if ((type == IItemRenderer.ItemRenderType.INVENTORY) &&
+ (block.getRenderBlockPass() != 0))
+ {
+ GL11.glAlphaFunc(516, 0.1F);
+ GL11.glEnable(3042);
+ OpenGlHelper.glBlendFunc(770, 771, 1, 0);
+ }
+ GL11.glPushMatrix();
+ ((RenderBlocks)data[0]).renderBlockAsItem(block, TileEntityMetadata.getItemDamage(item), 1.0F);
+
+ GL11.glPopMatrix();
+ GL11.glPopMatrix();
+ }
+}
diff --git a/src/Java/binnie/core/block/MultipassBlockRenderer.java b/src/Java/binnie/core/block/MultipassBlockRenderer.java
new file mode 100644
index 0000000000..cc809fb8e5
--- /dev/null
+++ b/src/Java/binnie/core/block/MultipassBlockRenderer.java
@@ -0,0 +1,106 @@
+package binnie.core.block;
+
+import binnie.core.BinnieCore;
+import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.world.IBlockAccess;
+import org.lwjgl.opengl.GL11;
+
+public class MultipassBlockRenderer
+ implements ISimpleBlockRenderingHandler
+{
+ public static MultipassBlockRenderer instance;
+
+ public MultipassBlockRenderer()
+ {
+ instance = this;
+ }
+
+ private void setColour(Tessellator tess, int colour)
+ {
+ float var6 = (colour >> 16 & 0xFF) / 255.0F;
+ float var7 = (colour >> 8 & 0xFF) / 255.0F;
+ float var8 = (colour & 0xFF) / 255.0F;
+ GL11.glColor3f(var6, var7, var8);
+ }
+
+ private static int layer = 0;
+
+ public static int getLayer()
+ {
+ return layer;
+ }
+
+ public void renderInventoryBlock(Block block, int meta, int modelID, RenderBlocks renderer)
+ {
+ block.setBlockBoundsForItemRender();
+ renderer.setRenderBoundsFromBlock(block);
+ GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
+ for (layer = 0; layer < ((IMultipassBlock)block).getNumberOfPasses(); layer += 1) {
+ renderItem(block, renderer, meta);
+ }
+ layer = 0;
+ }
+
+ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
+ {
+ boolean r = true;
+ for (layer = 0; layer < ((IMultipassBlock)block).getNumberOfPasses(); layer += 1) {
+ r = renderer.renderStandardBlock(block, x, y, z);
+ }
+ layer = 0;
+ return r;
+ }
+
+ public boolean shouldRender3DInInventory(int i)
+ {
+ return true;
+ }
+
+ public int getRenderId()
+ {
+ return BinnieCore.multipassRenderID;
+ }
+
+ public void renderItem(Block block, RenderBlocks renderer, int meta)
+ {
+ setColor(((IMultipassBlock)block).colorMultiplier(meta));
+
+ Tessellator tessellator = Tessellator.instance;
+
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(0.0F, -1.0F, 0.0F);
+ renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 0, meta));
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(0.0F, 1.0F, 0.0F);
+ renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 1, meta));
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(0.0F, 0.0F, -1.0F);
+ renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 2, meta));
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(0.0F, 0.0F, 1.0F);
+ renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 3, meta));
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(-1.0F, 0.0F, 0.0F);
+ renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 4, meta));
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(1.0F, 0.0F, 0.0F);
+ renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 5, meta));
+ tessellator.draw();
+ }
+
+ public void setColor(int l)
+ {
+ float f = (l >> 16 & 0xFF) / 255.0F;
+ float f1 = (l >> 8 & 0xFF) / 255.0F;
+ float f2 = (l & 0xFF) / 255.0F;
+ GL11.glColor3f(f, f1, f2);
+ }
+}
diff --git a/src/Java/binnie/core/block/MultipassItemRenderer.java b/src/Java/binnie/core/block/MultipassItemRenderer.java
new file mode 100644
index 0000000000..6e53642b2f
--- /dev/null
+++ b/src/Java/binnie/core/block/MultipassItemRenderer.java
@@ -0,0 +1,78 @@
+package binnie.core.block;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.client.IItemRenderer;
+import net.minecraftforge.client.IItemRenderer.ItemRenderType;
+import net.minecraftforge.client.IItemRenderer.ItemRendererHelper;
+import org.lwjgl.opengl.GL11;
+
+public class MultipassItemRenderer
+ implements IItemRenderer
+{
+ private void render(RenderBlocks renderer, ItemStack item, float f, float g, float h)
+ {
+ GL11.glTranslatef(f, g, h);
+
+ Block block = ((ItemBlock)item.getItem()).field_150939_a;
+
+ GL11.glEnable(3008);
+ if (block.getRenderBlockPass() != 0)
+ {
+ GL11.glAlphaFunc(516, 0.1F);
+ GL11.glEnable(3042);
+ OpenGlHelper.glBlendFunc(770, 771, 1, 0);
+ }
+ else
+ {
+ GL11.glAlphaFunc(516, 0.5F);
+ GL11.glDisable(3042);
+ }
+ MultipassBlockRenderer.instance.renderInventoryBlock(block, TileEntityMetadata.getItemDamage(item), 0, renderer);
+ if (block.getRenderBlockPass() == 0) {
+ GL11.glAlphaFunc(516, 0.1F);
+ }
+ GL11.glTranslatef(-f, -g, -h);
+ }
+
+ public boolean handleRenderType(ItemStack item, IItemRenderer.ItemRenderType type)
+ {
+ switch (1.$SwitchMap$net$minecraftforge$client$IItemRenderer$ItemRenderType[type.ordinal()])
+ {
+ case 1:
+ return true;
+ case 2:
+ return true;
+ case 3:
+ return true;
+ case 4:
+ return true;
+ }
+ return false;
+ }
+
+ public boolean shouldUseRenderHelper(IItemRenderer.ItemRenderType type, ItemStack item, IItemRenderer.ItemRendererHelper helper)
+ {
+ return true;
+ }
+
+ public void renderItem(IItemRenderer.ItemRenderType type, ItemStack item, Object... data)
+ {
+ switch (1.$SwitchMap$net$minecraftforge$client$IItemRenderer$ItemRenderType[type.ordinal()])
+ {
+ case 1:
+ render((RenderBlocks)data[0], item, 0.0F, 0.0F, 0.0F);
+ break;
+ case 2:
+ case 4:
+ render((RenderBlocks)data[0], item, 0.5F, 0.5F, 0.5F);
+ break;
+ case 3:
+ render((RenderBlocks)data[0], item, 0.0F, 0.0F, 0.0F);
+ break;
+ }
+ }
+}
diff --git a/src/Java/binnie/core/block/TileEntityMetadata.java b/src/Java/binnie/core/block/TileEntityMetadata.java
new file mode 100644
index 0000000000..28563e66e7
--- /dev/null
+++ b/src/Java/binnie/core/block/TileEntityMetadata.java
@@ -0,0 +1,116 @@
+package binnie.core.block;
+
+import binnie.core.BinnieCore;
+import binnie.core.network.packet.MessageMetadata;
+import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.Packet;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+public class TileEntityMetadata
+ extends TileEntity
+{
+ private int meta;
+
+ public boolean receiveClientEvent(int par1, int par2)
+ {
+ if (par1 == 42)
+ {
+ this.meta = par2;
+ this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
+ }
+ return true;
+ }
+
+ public void readFromNBT(NBTTagCompound nbt)
+ {
+ super.readFromNBT(nbt);
+ this.meta = nbt.getInteger("meta");
+ }
+
+ public void writeToNBT(NBTTagCompound nbt)
+ {
+ super.writeToNBT(nbt);
+ nbt.setInteger("meta", this.meta);
+ }
+
+ public boolean canUpdate()
+ {
+ return false;
+ }
+
+ public int getTileMetadata()
+ {
+ return this.meta;
+ }
+
+ public void setTileMetadata(int meta, boolean notify)
+ {
+ if (this.meta != meta)
+ {
+ this.meta = meta;
+ if (notify) {
+ this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
+ }
+ }
+ }
+
+ public Packet getDescriptionPacket()
+ {
+ return BinnieCore.instance.getNetworkWrapper().getPacketFrom(new MessageMetadata(this.xCoord, this.yCoord, this.zCoord, this.meta).GetMessage());
+ }
+
+ public static TileEntityMetadata getTile(IBlockAccess world, int x, int y, int z)
+ {
+ TileEntity tile = world.getTileEntity(x, y, z);
+ if (!(tile instanceof TileEntityMetadata)) {
+ return null;
+ }
+ return (TileEntityMetadata)tile;
+ }
+
+ public static ItemStack getItemStack(Block block, int damage)
+ {
+ ItemStack item = new ItemStack(block, 1, 0);
+ setItemDamage(item, damage);
+ return item;
+ }
+
+ public static void setItemDamage(ItemStack item, int i)
+ {
+ item.setItemDamage(i < 16387 ? i : 16387);
+ NBTTagCompound tag = new NBTTagCompound();
+ tag.setInteger("meta", i);
+ item.setTagCompound(tag);
+ }
+
+ public static int getItemDamage(ItemStack item)
+ {
+ if ((item.hasTagCompound()) && (item.getTagCompound().hasKey("meta"))) {
+ return item.getTagCompound().getInteger("meta");
+ }
+ return item.getItemDamage();
+ }
+
+ public static int getTileMetadata(IBlockAccess world, int x, int y, int z)
+ {
+ TileEntityMetadata tile = getTile(world, x, y, z);
+ return tile == null ? 0 : tile.getTileMetadata();
+ }
+
+ private boolean droppedBlock = false;
+
+ public boolean hasDroppedBlock()
+ {
+ return this.droppedBlock;
+ }
+
+ public void dropBlock()
+ {
+ this.droppedBlock = true;
+ }
+}