diff options
author | Draknyte1 <Draknyte1@hotmail.com> | 2016-01-20 14:24:34 +1000 |
---|---|---|
committer | Draknyte1 <Draknyte1@hotmail.com> | 2016-01-20 14:24:34 +1000 |
commit | 869c206c4fcc8001bd2e1d66f704290331813835 (patch) | |
tree | 96735ce8fe4665e2759c3374221d6f06f4527df2 /src/Java/binnie/core/block | |
parent | ec2c72827f01dd4bb2174137f1ab162f9ddaab62 (diff) | |
download | GT5-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.java | 138 | ||||
-rw-r--r-- | src/Java/binnie/core/block/IBlockMetadata.java | 21 | ||||
-rw-r--r-- | src/Java/binnie/core/block/IMultipassBlock.java | 8 | ||||
-rw-r--r-- | src/Java/binnie/core/block/ItemMetadata.java | 67 | ||||
-rw-r--r-- | src/Java/binnie/core/block/ItemMetadataRenderer.java | 64 | ||||
-rw-r--r-- | src/Java/binnie/core/block/MultipassBlockRenderer.java | 106 | ||||
-rw-r--r-- | src/Java/binnie/core/block/MultipassItemRenderer.java | 78 | ||||
-rw-r--r-- | src/Java/binnie/core/block/TileEntityMetadata.java | 116 |
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; + } +} |