From 6c1178edb6851bff7a37aee14a19b51ff55b06e4 Mon Sep 17 00:00:00 2001 From: TheCricket Date: Wed, 26 Nov 2014 20:03:54 -0500 Subject: [PATCH] Chest commit 1 --- .../minecraft/chisel/block/BlockPresent.java | 444 ++++++++++++++++++ .../tileentity/TileEntityAutoChisel.java | 245 +++++----- .../block/tileentity/TileEntityPresent.java | 220 +++++++++ .../render/item/ItemPresentRenderer.java | 62 +++ .../client/render/tile/RenderPresent.java | 126 +++++ .../jbcs/minecraft/chisel/init/ModBlocks.java | 18 +- .../chisel/inventory/ContainerAutoChisel.java | 52 +- .../chisel/inventory/ContainerPresent.java | 38 ++ .../inventory/InventoryLargePresent.java | 102 ++++ .../minecraft/chisel/item/ItemChisel.java | 21 +- .../minecraft/chisel/proxy/ClientProxy.java | 7 +- .../minecraft/chisel/proxy/CommonProxy.java | 12 +- 12 files changed, 1161 insertions(+), 186 deletions(-) create mode 100644 src/main/java/info/jbcs/minecraft/chisel/block/BlockPresent.java create mode 100644 src/main/java/info/jbcs/minecraft/chisel/block/tileentity/TileEntityPresent.java create mode 100644 src/main/java/info/jbcs/minecraft/chisel/client/render/item/ItemPresentRenderer.java create mode 100644 src/main/java/info/jbcs/minecraft/chisel/client/render/tile/RenderPresent.java create mode 100644 src/main/java/info/jbcs/minecraft/chisel/inventory/ContainerPresent.java create mode 100644 src/main/java/info/jbcs/minecraft/chisel/inventory/InventoryLargePresent.java diff --git a/src/main/java/info/jbcs/minecraft/chisel/block/BlockPresent.java b/src/main/java/info/jbcs/minecraft/chisel/block/BlockPresent.java new file mode 100644 index 00000000..08523298 --- /dev/null +++ b/src/main/java/info/jbcs/minecraft/chisel/block/BlockPresent.java @@ -0,0 +1,444 @@ +package info.jbcs.minecraft.chisel.block; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import info.jbcs.minecraft.chisel.Chisel; +import info.jbcs.minecraft.chisel.api.ICarvable; +import info.jbcs.minecraft.chisel.block.tileentity.TileEntityPresent; +import info.jbcs.minecraft.chisel.carving.CarvableHelper; +import info.jbcs.minecraft.chisel.carving.CarvableVariation; +import info.jbcs.minecraft.chisel.init.ModTabs; +import info.jbcs.minecraft.chisel.inventory.InventoryLargePresent; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +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.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.Calendar; +import java.util.Iterator; +import java.util.Random; + +public class BlockPresent extends BlockContainer implements ICarvable { + private final Random random = new Random(); + public CarvableHelper carverHelper; + private boolean isChristmas = true; + + public BlockPresent() { + super(Material.wood); + carverHelper = new CarvableHelper(); + setCreativeTab(ModTabs.tabChiselBlocks); + setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0875F, 0.9365F); + + Calendar calendar = Calendar.getInstance(); + + if (calendar.get(2) + 1 == 12 && calendar.get(5) >= 25 && calendar.get(5) <= 26) { + isChristmas = true;//<--- this would have been false before and it lasts for two days :) + } + } + + private static boolean isCatSittingOnMe(World world, int x, int y, int z) { + Iterator iterator = world.getEntitiesWithinAABB(EntityOcelot.class, AxisAlignedBB.getBoundingBox(x, y + 1, z, x + 1, y + 2, z + 1)).iterator(); + EntityOcelot ocelot; + + do { + if (!iterator.hasNext()) { + return false; + } + + Entity entity = (Entity) iterator.next(); + ocelot = (EntityOcelot) entity; + } while (!ocelot.isSitting()); + + return true; + } + + public ResourceLocation getResourceSingle(int metadata) { + if (isChristmas) { + switch (metadata) { + case 1: + return new ResourceLocation(Chisel.MOD_ID, "textures/blocks/present/red.png"); + default: + return null; + } + } else { + switch (metadata) { + case 1: + return new ResourceLocation(Chisel.MOD_ID, "textures/blocks/present/crate.png"); + default: + return null; + } + } + } + + public ResourceLocation getResourceDouble(int metadata) { + if (isChristmas) { + switch (metadata) { + case 1: + return new ResourceLocation(Chisel.MOD_ID, "textures/blocks/presentDouble/red.png"); + default: + return null; + } + } else { + switch (metadata) { + case 1: + return new ResourceLocation(Chisel.MOD_ID, "textures/blocks/presentDouble/crate.png"); + default: + return null; + } + } + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public int getRenderType() { + return -1; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityLivingBase, ItemStack itemStack) { + Block front = world.getBlock(x, y, z - 1); + Block back = world.getBlock(x, y, z + 1); + Block left = world.getBlock(x - 1, y, z); + Block right = world.getBlock(x + 1, y, z); + byte metadata = 0; + int rot = MathHelper.floor_double((entityLivingBase.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + + if (rot == 0) { + metadata = 2; + } + + if (rot == 1) { + metadata = 5; + } + + if (rot == 2) { + metadata = 3; + } + + if (rot == 3) { + metadata = 4; + } + + if (front != this && back != this && left != this && right != this) { + world.setBlockMetadataWithNotify(x, y, z, metadata, 3); + } else { + if ((front == this || back == this) && (metadata == 4 || metadata == 5)) { + if (front == this) { + world.setBlockMetadataWithNotify(x, y, z - 1, metadata, 3); + } else { + world.setBlockMetadataWithNotify(x, y, z + 1, metadata, 3); + } + + world.setBlockMetadataWithNotify(x, y, z, metadata, 3); + } + + if ((left == this || right == this) && (metadata == 4 || metadata == 5)) { + if (left == this) { + world.setBlockMetadataWithNotify(x - 1, y, z, metadata, 3); + } else { + world.setBlockMetadataWithNotify(x + 1, y, z, metadata, 3); + } + + world.setBlockMetadataWithNotify(x, y, z, metadata, 3); + } + } + } + + @Override + public boolean canPlaceBlockAt(World world, int x, int y, int z) { + int l = 0; + + if (world.getBlock(x - 1, y, z) == this) { + ++l; + } + + if (world.getBlock(x + 1, y, z) == this) { + ++l; + } + + if (world.getBlock(x, y, z - 1) == this) { + ++l; + } + + if (world.getBlock(x, y, z + 1) == this) { + ++l; + } + + return l > 1 ? false : (areSurroundingBlocksMe(world, x, y - 1, z) ? false : (areSurroundingBlocksMe(world, x, y + 1, z) ? false : (areSurroundingBlocksMe(world, x, y, z - 1) ? false : !areSurroundingBlocksMe(world, x, y, z + 1)))); + } + + private boolean areSurroundingBlocksMe(World world, int x, int y, int z) { + return world.getBlock(x, y, z) != this ? false : (world.getBlock(x - 1, y, z) == this ? true : (world.getBlock(x + 1, y, z) == this ? true : (world.getBlock(x, y, z - 1) == this ? true : world.getBlock(x, y, z + 1) == this))); + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block neighbor) { + super.onNeighborBlockChange(world, x, y, z, neighbor); + TileEntityPresent tileEntityPresent = (TileEntityPresent) world.getTileEntity(x, y, z); + + if (tileEntityPresent != null) { + tileEntityPresent.updateContainingBlockInfo(); + } + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block present, int meta) { + TileEntityPresent tileEntityPresent = (TileEntityPresent) world.getTileEntity(x, y, z); + + if (tileEntityPresent != null) { + for (int c = 0; c < tileEntityPresent.getSizeInventory(); c++) { + ItemStack itemStack = tileEntityPresent.getStackInSlot(c); + + if (itemStack != null) { + float f = random.nextFloat() * 0.8F + 0.1F; + float f1 = random.nextFloat() * 0.8F + 0.1F; + EntityItem entityItem; + + for (float f2 = random.nextFloat() * 0.8F + 0.1F; itemStack.stackSize > 0; world.spawnEntityInWorld(entityItem)) { + int stack = random.nextInt(21) + 10; + + if (stack > itemStack.stackSize) { + stack = itemStack.stackSize; + } + + itemStack.stackSize -= stack; + entityItem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemStack.getItem(), stack, itemStack.getItemDamage())); + float motion = 0.05F; + entityItem.motionX = random.nextGaussian() * motion; + entityItem.motionY = random.nextGaussian() * motion + 0.2F; + entityItem.motionZ = random.nextGaussian() * motion; + + if (itemStack.hasTagCompound()) { + entityItem.getEntityItem().setTagCompound((NBTTagCompound) itemStack.getTagCompound().copy()); + } + } + } + } + + world.func_147453_f(x, y, z, present); + } + + super.breakBlock(world, x, y, z, present, meta); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int meta, float x1, float y1, float z1) { + if (world.isRemote) { + return true; + } else { + IInventory inventory = getInventory(world, x, y, z); + + if (inventory != null) { + player.openGui(Chisel.instance, 2, world, x, y, z); + } + + return true; + } + } + + @Override + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + if (world.getBlock(x, y, z - 1) == this) { + this.setBlockBounds(0.0625F, 0.0F, 0.0F, 0.9375F, 0.875F, 0.9375F); + } else if (world.getBlock(x, y, z + 1) == this) { + this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); + } else if (world.getBlock(x - 1, y, z) == this) { + this.setBlockBounds(0.0F, 0.0F, 0.0625F, 0.9375F, 0.875F, 1.0F); + } else if (world.getBlock(x + 1, y, z) == this) { + this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 1.0F, 0.875F, 0.9375F); + } else { + this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); + } + } + + @Override + public void onBlockAdded(World world, int x, int y, int z) { + super.onBlockAdded(world, x, y, z); + this.changeMetadataBasedOffSpecs(world, x, y, z); + Block back = world.getBlock(x, y, z - 1); + Block front = world.getBlock(x, y, z + 1); + Block left = world.getBlock(x - 1, y, z); + Block right = world.getBlock(x + 1, y, z); + + if (back == this) { + this.changeMetadataBasedOffSpecs(world, x, y, z - 1); + } + + if (front == this) { + this.changeMetadataBasedOffSpecs(world, x, y, z + 1); + } + + if (left == this) { + this.changeMetadataBasedOffSpecs(world, x - 1, y, z); + } + + if (right == this) { + this.changeMetadataBasedOffSpecs(world, x + 1, y, z); + } + } + + public void changeMetadataBasedOffSpecs(World world, int x, int y, int z) { + if (!world.isRemote) { + Block back = world.getBlock(x, y, z - 1); + Block front = world.getBlock(x, y, z + 1); + Block left = world.getBlock(x - 1, y, z); + Block right = world.getBlock(x + 1, y, z); + boolean flag = true, flag1; + byte metadata; + int x1, blockMeta, z1; + Block backLeft, frontRight; + + if (front != this && back != this) { + if (left != this && right != this) { + metadata = 3; + + if (front.func_149730_j() && !back.func_149730_j()) { + metadata = 3; + } + + if (back.func_149730_j() && !front.func_149730_j()) { + metadata = 2; + } + + if (left.func_149730_j() && !right.func_149730_j()) { + metadata = 5; + } + + if (right.func_149730_j() && !left.func_149730_j()) { + metadata = 4; + } + } else { + x1 = back == this ? x - 1 : x + 1; + backLeft = world.getBlock(x1, y, z - 1); + z1 = back == this ? z - 1 : z + 1; + frontRight = world.getBlock(x + 1, y, z1); + metadata = 5; + flag1 = true; + + if (back == this) { + blockMeta = world.getBlockMetadata(x, y, z - 1); + } else { + blockMeta = world.getBlockMetadata(x, y, z + 1); + } + + if (blockMeta == 4) { + metadata = 4; + } + + if ((left.func_149730_j() || backLeft.func_149730_j()) && !right.func_149730_j() && !frontRight.func_149730_j()) { + metadata = 5; + } + + if ((right.func_149730_j() || frontRight.func_149730_j()) && !left.func_149730_j() && !backLeft.func_149730_j()) { + metadata = 4; + } + } + + world.setBlockMetadataWithNotify(x, y, z, metadata, 3); + } + } + } + + @Override + public TileEntity createNewTileEntity(World world, int par2) { + return new TileEntityPresent(); + } + + @Override + public int isProvidingWeakPower(IBlockAccess world, int x, int y, int z, int strength) { + if (!canProvidePower()) { + return 0; + } else { + int players = ((TileEntityPresent) world.getTileEntity(x, y, z)).numPlayersUsing; + return MathHelper.clamp_int(players, 0, 15); + } + } + + @Override + public int isProvidingStrongPower(IBlockAccess world, int x, int y, int z, int strength) { + return strength == 1 ? isProvidingWeakPower(world, x, y, z, strength) : 0; + } + + @Override + public boolean hasComparatorInputOverride() { + return true; + } + + @Override + public int getComparatorInputOverride(World world, int x, int y, int z, int strength) { + return Container.calcRedstoneFromInventory(getInventory(world, x, y, z)); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister register) { + this.blockIcon = register.registerIcon("planks_oak"); + } + + public IInventory getInventory(World world, int x, int y, int z) { + Object object = (TileEntityPresent) world.getTileEntity(x, y, z); + + if (object == null) { + return null; + } else if (world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN)) { + return null; + } else if (isCatSittingOnMe(world, x, y, z)) { + return null; + } else if (world.getBlock(x - 1, y, z) == this && (world.isSideSolid(x - 1, y + 1, z, ForgeDirection.DOWN) || isCatSittingOnMe(world, x, y - 1, z))) { + return null; + } else if (world.getBlock(x + 1, y, z) == this && (world.isSideSolid(x + 1, y + 1, z, ForgeDirection.DOWN) || isCatSittingOnMe(world, x, y + 1, z))) { + return null; + } else if (world.getBlock(x, y, z - 1) == this && (world.isSideSolid(x, y + 1, z - 1, ForgeDirection.DOWN) || isCatSittingOnMe(world, x, y, z - 1))) { + return null; + } else if (world.getBlock(x, y, z + 1) == this && (world.isSideSolid(x, y + 1, z + 1, ForgeDirection.DOWN) || isCatSittingOnMe(world, x, y, z + 1))) { + return null; + } else { + if (world.getBlock(x - 1, y, z) == this) { + object = new InventoryLargePresent("container.chestDouble", (TileEntityPresent) world.getTileEntity(x - 1, y, z), (IInventory) object); + } + + if (world.getBlock(x + 1, y, z) == this) { + object = new InventoryLargePresent("container.chestDouble", (TileEntityPresent) world.getTileEntity(x + 1, y, z), (IInventory) object); + } + + if (world.getBlock(x, y, z - 1) == this) { + object = new InventoryLargePresent("container.chestDouble", (TileEntityPresent) world.getTileEntity(x, y, z - 1), (IInventory) object); + } + + if (world.getBlock(x, y, z + 1) == this) { + object = new InventoryLargePresent("container.chestDouble", (TileEntityPresent) world.getTileEntity(x, y, z + 1), (IInventory) object); + } + + return (IInventory) object; + } + } + + @Override + public CarvableVariation getVariation(int metadata) { + return carverHelper.getVariation(metadata); + } +} \ No newline at end of file diff --git a/src/main/java/info/jbcs/minecraft/chisel/block/tileentity/TileEntityAutoChisel.java b/src/main/java/info/jbcs/minecraft/chisel/block/tileentity/TileEntityAutoChisel.java index 1b81d49c..cc9b4644 100644 --- a/src/main/java/info/jbcs/minecraft/chisel/block/tileentity/TileEntityAutoChisel.java +++ b/src/main/java/info/jbcs/minecraft/chisel/block/tileentity/TileEntityAutoChisel.java @@ -2,11 +2,6 @@ package info.jbcs.minecraft.chisel.block.tileentity; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import info.jbcs.minecraft.chisel.carving.CarvableHelper; -import info.jbcs.minecraft.chisel.carving.CarvableVariation; -import info.jbcs.minecraft.chisel.carving.Carving; -import info.jbcs.minecraft.chisel.carving.CarvingVariation; -import net.minecraft.block.Block; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; @@ -19,70 +14,84 @@ import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; -public class TileEntityAutoChisel extends TileEntity implements ISidedInventory{ +public class TileEntityAutoChisel extends TileEntity implements ISidedInventory { - private ItemStack[] inventory = new ItemStack[3]; - private String name = "autoChisel"; private static EntityItem ghostItem; boolean equal = false; + private ItemStack[] inventory = new ItemStack[3]; + private String name = "autoChisel"; @Override - public boolean canUpdate(){ + public boolean canUpdate() { return true; } - @Override - public ItemStack decrStackSize(int slot, int size) { - if (inventory[slot] != null) { - ItemStack is; - if (inventory[slot].stackSize <= size) { - is = inventory[slot]; - inventory[slot] = null; - return is; - } else { - is = inventory[slot].splitStack(size); - if (inventory[slot].stackSize == 0) - inventory[slot] = null; - return is; - } - } else - return null; - } + @Override + public ItemStack decrStackSize(int slot, int size) { + if (inventory[slot] != null) { + ItemStack is; + if (inventory[slot].stackSize <= size) { + is = inventory[slot]; + inventory[slot] = null; + return is; + } else { + is = inventory[slot].splitStack(size); + if (inventory[slot].stackSize == 0) + inventory[slot] = null; + return is; + } + } else + return null; + } - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); - NBTTagList tags = nbt.getTagList("Items", 10); - inventory = new ItemStack[getSizeInventory()]; + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + NBTTagList tags = nbt.getTagList("Items", 10); + inventory = new ItemStack[getSizeInventory()]; - for (int i = 0; i < tags.tagCount(); i++) { - NBTTagCompound data = tags.getCompoundTagAt(i); - int j = data.getByte("Slot") & 255; + for (int i = 0; i < tags.tagCount(); i++) { + NBTTagCompound data = tags.getCompoundTagAt(i); + int j = data.getByte("Slot") & 255; - if (j >= 0 && j < inventory.length) { - inventory[j] = ItemStack.loadItemStackFromNBT(data); - } - } + if (j >= 0 && j < inventory.length) { + inventory[j] = ItemStack.loadItemStackFromNBT(data); + } + } - if (nbt.hasKey("CustomName", 8)) - { + if (nbt.hasKey("CustomName", 8)) { this.name = nbt.getString("CustomName"); } } @Override - public void updateEntity(){ - if(!worldObj.isRemote && worldObj.getWorldTime() % 20 == 0) { + public void updateEntity() { + if (!worldObj.isRemote && worldObj.getWorldTime() % 20 == 0) { if (inventory[0] != null && inventory[1] != null) { - if(inventory[0].getItem() instanceof ItemBlock && inventory[1].getItem() instanceof ItemBlock){ - if(Carving.chisel.getOre(Block.getBlockFromItem(inventory[0].getItem()), inventory[0].getItemDamage()) == Carving.chisel.getOre(Block.getBlockFromItem(inventory[1].getItem()), inventory[1].getItemDamage())) + if (inventory[0].getItem() instanceof ItemBlock && inventory[1].getItem() instanceof ItemBlock) { + if (inventory[0].getItem() == inventory[1].getItem()) { equal = true; + } else { + equal = false; + } if (equal) { + if (inventory[0].stackSize < 0) { + inventory[0] = null; + } + + if (inventory[1].stackSize < 0) { + inventory[1] = null; + } + + if (inventory[1].stackSize < 0) { + inventory[1] = null; + } + if (inventory[2] == null) { setInventorySlotContents(2, new ItemStack(inventory[1].getItem(), 1, inventory[1].getItemDamage())); decrStackSize(0, 1); } else { - if (inventory[0].stackSize != 0 && inventory[2].stackSize < getInventoryStackLimit()) { + if (inventory[0].stackSize != 0 && inventory[2].stackSize <= getInventoryStackLimit()) { decrStackSize(0, 1); inventory[2].stackSize++; } else { @@ -97,161 +106,131 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory{ markDirty(); } - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - NBTTagList tags = new NBTTagList(); + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + NBTTagList tags = new NBTTagList(); - for (int i = 0; i < inventory.length; i++) { - if (inventory[i] != null) { - NBTTagCompound data = new NBTTagCompound(); - data.setByte("Slot", (byte) i); - inventory[i].writeToNBT(data); - tags.appendTag(data); - } - } - - nbt.setTag("Items", tags); + for (int i = 0; i < inventory.length; i++) { + if (inventory[i] != null) { + NBTTagCompound data = new NBTTagCompound(); + data.setByte("Slot", (byte) i); + inventory[i].writeToNBT(data); + tags.appendTag(data); + } + } - if (this.hasCustomInventoryName()) - { + nbt.setTag("Items", tags); + + if (this.hasCustomInventoryName()) { nbt.setString("CustomName", this.name); } } @Override - public int getSizeInventory(){ + public int getSizeInventory() { return inventory.length; } @Override - public ItemStack getStackInSlot(int slot){ + public ItemStack getStackInSlot(int slot) { return inventory[slot]; } - @Override - public ItemStack getStackInSlotOnClosing(int slot) { - if (inventory[slot] != null) { - ItemStack is = inventory[slot]; - inventory[slot] = null; - return is; - } else - return null; - } + @Override + public ItemStack getStackInSlotOnClosing(int slot) { + if (inventory[slot] != null) { + ItemStack is = inventory[slot]; + inventory[slot] = null; + return is; + } else + return null; + } @Override - public void setInventorySlotContents(int slot, ItemStack stack){ + public void setInventorySlotContents(int slot, ItemStack stack) { inventory[slot] = stack; - if(stack != null && stack.stackSize > getInventoryStackLimit()){ + if (stack != null && stack.stackSize > getInventoryStackLimit()) { stack.stackSize = getInventoryStackLimit(); } markDirty(); } @Override - public String getInventoryName(){ + public String getInventoryName() { return name; } @Override - public final boolean isUseableByPlayer(EntityPlayer player){ + public final boolean isUseableByPlayer(EntityPlayer player) { return true; } @Override - public int getInventoryStackLimit(){ + public int getInventoryStackLimit() { return 64; } @Override - public boolean hasCustomInventoryName(){ + public boolean hasCustomInventoryName() { return false; } @Override - public int[] getAccessibleSlotsFromSide(int side){ - int[] slots = new int[getSizeInventory()]; - - for(int c = 0; c < slots.length; c++){ - slots[c] = c; - } - - if(side != 0){ - return slots; - } else if(side == 0){ - return new int[] {2}; - } else { - return null; - } + public int[] getAccessibleSlotsFromSide(int side) { + return new int[3]; } @Override - public boolean isItemValidForSlot(int slot, ItemStack itemStack){ - return slot != 1; + public boolean isItemValidForSlot(int slot, ItemStack itemStack) { + return true; } @Override - public boolean canInsertItem(int slot, ItemStack itemStack, int side){ - if(side != 0){ - if(slot == 0){ - return true; - } else { - return false; - } - } else if(side == 0){ - if(slot == 1){ - return true; - } else { - return false; - } - } else { - return false; - } + public boolean canInsertItem(int slot, ItemStack itemStack, int side) { + return false; } @Override - public boolean canExtractItem(int slot, ItemStack itemStack, int side){ - if(slot == 2){ - return true; - } else { - return false; - } + public boolean canExtractItem(int slot, ItemStack itemStack, int side) { + return true; } @Override - public void openInventory(){} + public void openInventory() { + } @Override - public void closeInventory(){ + public void closeInventory() { NBTTagList tags = new NBTTagList(); System.out.print(tags); } @SideOnly(Side.CLIENT) - public EntityItem getItemForRendering(int slot){ - if(ghostItem == null){ + public EntityItem getItemForRendering(int slot) { + if (ghostItem == null) { ghostItem = new EntityItem(worldObj); ghostItem.hoverStart = 0.0F; } - if(inventory[slot] == null){ + if (inventory[slot] == null) { return null; } else { ghostItem.setEntityItemStack(new ItemStack(inventory[slot].getItem(), 1, inventory[slot].getItemDamage())); return ghostItem; } } - - @Override - public Packet getDescriptionPacket() { - NBTTagCompound tag = new NBTTagCompound(); - writeToNBT(tag); - return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, tag); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) { - readFromNBT(packet.func_148857_g()); - } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound tag = new NBTTagCompound(); + writeToNBT(tag); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, tag); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) { + readFromNBT(packet.func_148857_g()); + } } diff --git a/src/main/java/info/jbcs/minecraft/chisel/block/tileentity/TileEntityPresent.java b/src/main/java/info/jbcs/minecraft/chisel/block/tileentity/TileEntityPresent.java new file mode 100644 index 00000000..16c2b9e3 --- /dev/null +++ b/src/main/java/info/jbcs/minecraft/chisel/block/tileentity/TileEntityPresent.java @@ -0,0 +1,220 @@ +package info.jbcs.minecraft.chisel.block.tileentity; + +import info.jbcs.minecraft.chisel.block.BlockPresent; +import info.jbcs.minecraft.chisel.inventory.ContainerPresent; +import info.jbcs.minecraft.chisel.inventory.InventoryLargePresent; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.AxisAlignedBB; + +import java.util.Iterator; +import java.util.List; + +public class TileEntityPresent extends TileEntityChest { + + public TileEntityPresent() { + + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + return this.worldObj.getTileEntity(xCoord, yCoord, zCoord) != this ? false : player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 64.0D; + } + + public void checkIfAdjacentBlocksAreMe(TileEntityPresent tile, int meta) { + if (tile.isInvalid()) { + this.adjacentChestChecked = false; + } else if (this.adjacentChestChecked) { + switch (meta) { + case 0: + if (this.adjacentChestZPos != tile) { + this.adjacentChestChecked = false; + } + + break; + case 1: + if (this.adjacentChestXNeg != tile) { + this.adjacentChestChecked = false; + } + + break; + case 2: + if (this.adjacentChestZNeg != tile) { + this.adjacentChestChecked = false; + } + + break; + case 3: + if (this.adjacentChestXPos != tile) { + this.adjacentChestChecked = false; + } + } + } + } + + public void checkForAdjacentPresents() { + if (!this.adjacentChestChecked) { + TileEntityPresent zNeg = (TileEntityPresent) this.adjacentChestZNeg; + TileEntityPresent xPos = (TileEntityPresent) this.adjacentChestXPos; + TileEntityPresent xNeg = (TileEntityPresent) this.adjacentChestXNeg; + TileEntityPresent zPos = (TileEntityPresent) this.adjacentChestZPos; + this.adjacentChestChecked = true; + + if (this.isBlockPresent(xCoord - 1, yCoord, zCoord)) { + xNeg = (TileEntityPresent) this.worldObj.getTileEntity(xCoord - 1, yCoord, zCoord); + } + + if (this.isBlockPresent(xCoord + 1, yCoord, zCoord)) { + xPos = (TileEntityPresent) this.worldObj.getTileEntity(xCoord + 1, yCoord, zCoord); + } + + if (this.isBlockPresent(xCoord, yCoord, zCoord - 1)) { + zNeg = (TileEntityPresent) this.worldObj.getTileEntity(xCoord, yCoord, zCoord - 1); + } + + if (this.isBlockPresent(xCoord, yCoord, zCoord + 1)) { + zPos = (TileEntityPresent) this.worldObj.getTileEntity(xCoord, yCoord, zCoord + 1); + } + + if (this.adjacentChestZNeg != null) { + zNeg.checkIfAdjacentBlocksAreMe(this, 0); + } + + if (this.adjacentChestZPos != null) { + zPos.checkIfAdjacentBlocksAreMe(this, 2); + } + + if (this.adjacentChestXPos != null) { + xPos.checkIfAdjacentBlocksAreMe(this, 1); + } + + if (this.adjacentChestXNeg != null) { + xNeg.checkIfAdjacentBlocksAreMe(this, 3); + } + + this.adjacentChestXNeg = xNeg; + this.adjacentChestXPos = xPos; + this.adjacentChestZPos = zPos; + this.adjacentChestZNeg = zNeg; + } + } + + private boolean isBlockPresent(int x, int y, int z) { + if (this.worldObj == null) { + return false; + } else { + Block block = this.worldObj.getBlock(x, y, z); + return block instanceof BlockPresent; + } + } + + @Override + public void updateEntity() { + super.updateEntity(); + checkForAdjacentPresents(); + float f; + + if (!worldObj.isRemote && numPlayersUsing != 0 && (+xCoord + yCoord + zCoord) % 200 == 0) { + numPlayersUsing = 0; + f = 5.0F; + List list = worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(xCoord - f, yCoord - f, zCoord - f, (xCoord + 1) + f, (yCoord + 1) + f, (zCoord + 1) + f)); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + EntityPlayer player = (EntityPlayer) iterator.next(); + + if (player.openContainer instanceof ContainerPresent) { + IInventory inventory = ((ContainerPresent) player.openContainer).getLowerPresentInventory(); + + if (inventory == this || inventory instanceof InventoryLargePresent && ((InventoryLargePresent) inventory).isPartOfLargePresent(this)) { + ++numPlayersUsing; + } + } + } + } + + prevLidAngle = lidAngle; + f = 0.1F; + double d2; + + if (numPlayersUsing > 0 && lidAngle == 0.0F && adjacentChestZNeg == null && adjacentChestXNeg == null) { + double d1 = xCoord + 0.5D; + d2 = xCoord + 0.5D; + if (adjacentChestZPos != null) { + d2 += 0.5D; + } + + if (adjacentChestXPos != null) { + d1 += 0.5D; + } + + worldObj.playSoundEffect(d1, yCoord + 0.5D, d2, "random.chestopen", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + + if (numPlayersUsing == 0 && lidAngle > 0.0F || numPlayersUsing > 0 && lidAngle < 1.0F) { + float f1 = lidAngle; + + if (numPlayersUsing > 0) { + lidAngle += f; + } else { + lidAngle -= f; + } + + if (lidAngle > 1.0F) { + lidAngle = 1.0F; + } + + float f2 = 0.5F; + + if (lidAngle < f2 && f1 >= f2 && adjacentChestZNeg == null && adjacentChestXNeg == null) { + d2 = xCoord + 0.5D; + double d0 = zCoord + 0.5D; + + if (adjacentChestZPos != null) { + d0 += 0.5D; + } + + if (adjacentChestXPos != null) { + d2 += 0.5D; + } + + worldObj.playSoundEffect(d2, yCoord + 0.5D, d0, "random.chestclosed", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + + if (lidAngle < 0.0F) { + lidAngle = 0.0F; + } + } + } + + @Override + public void openInventory() { + if (numPlayersUsing < 0) { + numPlayersUsing = 0; + } + + ++numPlayersUsing; + worldObj.addBlockEvent(xCoord, yCoord, zCoord, getBlockType(), 1, numPlayersUsing); + worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, getBlockType()); + worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord - 1, zCoord, getBlockType()); + } + + @Override + public void closeInventory() { + if (getBlockType() instanceof BlockPresent) { + --numPlayersUsing; + worldObj.addBlockEvent(xCoord, yCoord, zCoord, getBlockType(), 1, numPlayersUsing); + worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, getBlockType()); + worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord - 1, zCoord, getBlockType()); + } + } + + @Override + public void invalidate() { + super.invalidate(); + updateContainingBlockInfo(); + checkForAdjacentPresents(); + } +} diff --git a/src/main/java/info/jbcs/minecraft/chisel/client/render/item/ItemPresentRenderer.java b/src/main/java/info/jbcs/minecraft/chisel/client/render/item/ItemPresentRenderer.java new file mode 100644 index 00000000..6e42fec1 --- /dev/null +++ b/src/main/java/info/jbcs/minecraft/chisel/client/render/item/ItemPresentRenderer.java @@ -0,0 +1,62 @@ +package info.jbcs.minecraft.chisel.client.render.item; + +import cpw.mods.fml.client.FMLClientHandler; +import info.jbcs.minecraft.chisel.Chisel; +import net.minecraft.client.model.ModelChest; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import org.lwjgl.opengl.GL11; + +public class ItemPresentRenderer implements IItemRenderer { + private final ModelChest model = new ModelChest(); + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return type != ItemRenderType.FIRST_PERSON_MAP; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return true; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + FMLClientHandler.instance().getClient().renderEngine.bindTexture(new ResourceLocation(Chisel.MOD_ID, "textures/blocks/present/1.png")); + switch (type) { + case ENTITY: + renderBlock(0.0F, 1.0F, 0.0F); + break; + case EQUIPPED: + renderBlock(0.5F, 1.5F, 0.5F); + break; + case EQUIPPED_FIRST_PERSON: + renderBlock(0.5F, 1.0F, 0.5F); + break; + case INVENTORY: + renderInventory(0.0F, 0.625F, 0.0F); + break; + default: + break; + } + } + + private void renderBlock(float x, float y, float z) { + GL11.glPushMatrix(); + GL11.glTranslatef(x, y, z); + GL11.glScaled(-1, -1, 1); + model.renderAll(); + GL11.glPopMatrix(); + } + + private void renderInventory(float x, float y, float z) { + GL11.glPushMatrix(); + GL11.glTranslatef(x, y, z); + GL11.glRotatef(180F, 1F, 0, 0); + GL11.glRotatef(-90F, 0, 1F, 0); + GL11.glScalef(0.8F, 0.8F, 0.8F); + model.renderAll(); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/info/jbcs/minecraft/chisel/client/render/tile/RenderPresent.java b/src/main/java/info/jbcs/minecraft/chisel/client/render/tile/RenderPresent.java new file mode 100644 index 00000000..c8923ee0 --- /dev/null +++ b/src/main/java/info/jbcs/minecraft/chisel/client/render/tile/RenderPresent.java @@ -0,0 +1,126 @@ +package info.jbcs.minecraft.chisel.client.render.tile; + +import cpw.mods.fml.common.FMLLog; +import info.jbcs.minecraft.chisel.block.BlockPresent; +import info.jbcs.minecraft.chisel.block.tileentity.TileEntityPresent; +import net.minecraft.block.Block; +import net.minecraft.block.BlockChest; +import net.minecraft.client.model.ModelChest; +import net.minecraft.client.model.ModelLargeChest; +import net.minecraft.client.renderer.tileentity.TileEntityChestRenderer; +import net.minecraft.tileentity.TileEntity; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderPresent extends TileEntityChestRenderer { + private ModelChest chest = new ModelChest(); + private ModelChest doubleChest = new ModelLargeChest(); + + //TODO: this will be changed so it actually chescks after I have crate textures :) + private boolean isChristmas = true; + + public RenderPresent() { + + } + + public void renderTileEntityAt(TileEntityPresent present, double x, double y, double z, float partialTicks) { + int i; + + if (!present.hasWorldObj()) { + i = 0; + } else { + Block block = present.getBlockType(); + i = present.getBlockMetadata(); + + if (block instanceof BlockChest && i == 0) { + try { + ((BlockChest) block).func_149954_e(present.getWorldObj(), present.xCoord, present.yCoord, present.zCoord); + } catch (ClassCastException e) { + FMLLog.severe("[Chisel 2] Attempted to render a present at %d, %d, %d that was not a present", present.xCoord, present.yCoord, present.zCoord); + } + i = present.getBlockMetadata(); + } + + present.checkForAdjacentPresents(); + } + + if (present.adjacentChestZNeg == null && present.adjacentChestXNeg == null) { + BlockPresent blockPresent = (BlockPresent) present.getWorldObj().getBlock(present.xCoord, present.yCoord, present.zCoord); + ModelChest modelchest; + + if (present.adjacentChestXPos == null && present.adjacentChestZPos == null) { + modelchest = this.chest; + this.bindTexture(blockPresent.getResourceSingle(1)); + } else { + modelchest = this.doubleChest; + this.bindTexture(blockPresent.getResourceDouble(1)); + } + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + short short1 = 0; + + if (i == 2) { + short1 = 180; + } + + if (i == 3) { + short1 = 0; + } + + if (i == 4) { + short1 = 90; + } + + if (i == 5) { + short1 = -90; + } + + if (i == 2 && present.adjacentChestXPos != null) { + GL11.glTranslatef(1.0F, 0.0F, 0.0F); + } + + if (i == 5 && present.adjacentChestZPos != null) { + GL11.glTranslatef(0.0F, 0.0F, -1.0F); + } + + GL11.glRotatef((float) short1, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + float f1 = present.prevLidAngle + (present.lidAngle - present.prevLidAngle) * partialTicks; + float f2; + + if (present.adjacentChestZNeg != null) { + f2 = present.adjacentChestZNeg.prevLidAngle + (present.adjacentChestZNeg.lidAngle - present.adjacentChestZNeg.prevLidAngle) * partialTicks; + + if (f2 > f1) { + f1 = f2; + } + } + + if (present.adjacentChestXNeg != null) { + f2 = present.adjacentChestXNeg.prevLidAngle + (present.adjacentChestXNeg.lidAngle - present.adjacentChestXNeg.prevLidAngle) * partialTicks; + + if (f2 > f1) { + f1 = f2; + } + } + + f1 = 1.0F - f1; + f1 = 1.0F - f1 * f1 * f1; + modelchest.chestLid.rotateAngleX = -(f1 * (float) Math.PI / 2.0F); + modelchest.renderAll(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTicks) { + this.renderTileEntityAt((TileEntityPresent) tileEntity, x, y, z, partialTicks); + } +} diff --git a/src/main/java/info/jbcs/minecraft/chisel/init/ModBlocks.java b/src/main/java/info/jbcs/minecraft/chisel/init/ModBlocks.java index f9c0cfdc..97494dca 100644 --- a/src/main/java/info/jbcs/minecraft/chisel/init/ModBlocks.java +++ b/src/main/java/info/jbcs/minecraft/chisel/init/ModBlocks.java @@ -1,12 +1,9 @@ package info.jbcs.minecraft.chisel.init; import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import info.jbcs.minecraft.chisel.Chisel; import info.jbcs.minecraft.chisel.Configurations; import info.jbcs.minecraft.chisel.block.*; -import info.jbcs.minecraft.chisel.block.BlockVoidstone; import info.jbcs.minecraft.chisel.carving.CarvableHelper; import info.jbcs.minecraft.chisel.carving.CarvableVariation; import info.jbcs.minecraft.chisel.carving.Carving; @@ -14,14 +11,11 @@ import info.jbcs.minecraft.chisel.item.ItemCarvable; import info.jbcs.minecraft.chisel.item.ItemMarbleSlab; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; import net.minecraftforge.oredict.OreDictionary; -import java.util.concurrent.Callable; - public class ModBlocks { public static BlockCarvable marble; public static BlockCarvable marblePillar; @@ -77,6 +71,7 @@ public class ModBlocks { public static BlockCarvable voidstone; public static BlockVoidstone voidstonePillar = new BlockVoidstone(); public static Block autoChisel; + public static BlockPresent present; public static BlockSnakestone snakestone; public static BlockSnakestone sandSnakestone; public static BlockSnakestoneObsidian obsidianSnakestone; @@ -812,9 +807,8 @@ public class ModBlocks { } planks[i].carverHelper.register(planks[i], orename); Carving.chisel.addVariation(orename, Blocks.planks, i, 0); - Blocks.planks.setHarvestLevel("chisel", 0, i); planks[i].setHarvestLevel("axe", 0); - + Carving.chisel.registerOre("wood", "wood"); Carving.chisel.setVariationSound(orename, Chisel.MOD_ID+":chisel.wood"); } } @@ -1314,6 +1308,14 @@ public class ModBlocks { Carving.chisel.registerOre("leaves", "leaves"); } + if (Configurations.featureEnabled("chest")) { + present = (BlockPresent) new BlockPresent().setHardness(2.5F).setStepSound(Block.soundTypeWood); + Carving.chisel.addVariation("chest", Blocks.chest, 0, 0); + present.carverHelper.addVariation(StatCollector.translateToLocal("tile.presetnt.1.desc"), 1, present, 1); + present.carverHelper.register(present, "present"); + Carving.chisel.registerOre("chest", "chest"); + } + if(Configurations.featureEnabled("voidstone")){ voidstone = (BlockCarvable) new BlockCarvable().setHardness(2.0F).setResistance(5F).setStepSound(Block.soundTypeStone); voidstone.carverHelper.addVariation(StatCollector.translateToLocal("tile.voidstone.0.desc"), 0, "voidstone/metalborder"); diff --git a/src/main/java/info/jbcs/minecraft/chisel/inventory/ContainerAutoChisel.java b/src/main/java/info/jbcs/minecraft/chisel/inventory/ContainerAutoChisel.java index 1797c53d..2ea78121 100644 --- a/src/main/java/info/jbcs/minecraft/chisel/inventory/ContainerAutoChisel.java +++ b/src/main/java/info/jbcs/minecraft/chisel/inventory/ContainerAutoChisel.java @@ -12,7 +12,7 @@ public class ContainerAutoChisel extends Container { public static TileEntityAutoChisel autoChisel; public static EntityPlayer player; - public ContainerAutoChisel(InventoryPlayer player, TileEntityAutoChisel tileEntityAutoChisel){ + public ContainerAutoChisel(InventoryPlayer player, TileEntityAutoChisel tileEntityAutoChisel) { this.player = player.player; autoChisel = tileEntityAutoChisel; @@ -24,14 +24,14 @@ public class ContainerAutoChisel extends Container { bindPlayerInventory(player); } - protected void bindPlayerInventory(InventoryPlayer invPlayer){ - for(int row = 0; row < 3; row++){ - for(int column = 0; column < 9; column++){ + protected void bindPlayerInventory(InventoryPlayer invPlayer) { + for (int row = 0; row < 3; row++) { + for (int column = 0; column < 9; column++) { addSlotToContainer(new Slot(invPlayer, column + row * 9 + 9, 8 + column * 18, 84 + row * 18)); } } - for(int slotNumber = 0; slotNumber < 9; slotNumber++){ + for (int slotNumber = 0; slotNumber < 9; slotNumber++) { addSlotToContainer(new Slot(invPlayer, slotNumber, 8 + slotNumber * 18, 142)); } } @@ -42,41 +42,47 @@ public class ContainerAutoChisel extends Container { } @Override - public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - ItemStack stack = null; - Slot slotObject = (Slot) inventorySlots.get(slot); + public ItemStack transferStackInSlot(EntityPlayer player, int slotNumber) { + ItemStack itemStack = null; + Slot slot = (Slot) this.inventorySlots.get(slotNumber); - if(slotObject != null && slotObject.getHasStack()){ - ItemStack stackInSlot = slotObject.getStack(); - stack = stackInSlot.copy(); + if (slot != null && slot.getHasStack()) { + ItemStack itemStack1 = slot.getStack(); + itemStack = itemStack1.copy(); - if(slot == 1){ - if(!this.mergeItemStack(stackInSlot, 3, 39, true)){ + if (slotNumber == 2) { + if (!this.mergeItemStack(itemStack1, 3, 39, true)) { return null; } - } - if(slot < autoChisel.getSizeInventory()){ - if(!this.mergeItemStack(stackInSlot, 0, 35, true)){ + slot.onSlotChange(itemStack1, itemStack); + } else if (slotNumber != 1 && slotNumber != 0) { + if (!this.mergeItemStack(itemStack1, 0, 1, true)) { + return null; + } else if (slotNumber >= 3 && slotNumber < 30) { + if (this.mergeItemStack(itemStack1, 30, 39, false)) { + return null; + } + } else if (slotNumber >= 30 && slotNumber < 39 && !this.mergeItemStack(itemStack1, 3, 30, false)) { return null; } - } else if(!this.mergeItemStack(stackInSlot, 0, 3, false)){ + } else if (this.mergeItemStack(itemStack1, 3, 39, false)) { return null; } - if(stackInSlot.stackSize == 0){ - slotObject.putStack(null); + if (itemStack1.stackSize == 0) { + slot.putStack(null); } else { - slotObject.onSlotChanged(); + slot.onSlotChanged(); } - if(stackInSlot.stackSize == stack.stackSize){ + if (itemStack1.stackSize == itemStack.stackSize) { return null; } - slotObject.onPickupFromSlot(player, stackInSlot); + slot.onPickupFromSlot(player, itemStack1); } - return stack; + return itemStack; } } \ No newline at end of file diff --git a/src/main/java/info/jbcs/minecraft/chisel/inventory/ContainerPresent.java b/src/main/java/info/jbcs/minecraft/chisel/inventory/ContainerPresent.java new file mode 100644 index 00000000..cf39a481 --- /dev/null +++ b/src/main/java/info/jbcs/minecraft/chisel/inventory/ContainerPresent.java @@ -0,0 +1,38 @@ +package info.jbcs.minecraft.chisel.inventory; + +import net.minecraft.inventory.ContainerChest; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; + +public class ContainerPresent extends ContainerChest { + private IInventory lower; + private int rows; + + public ContainerPresent(IInventory player, IInventory chest) { + super(player, chest); + lower = chest; + rows = chest.getSizeInventory() / 9; + chest.openInventory(); + int a = (rows - 4) * 18, b, c; + + for (int d = 0; d < rows; d++) { + for (int e = 0; e < 9; e++) { + addSlotToContainer(new Slot(chest, e + d * 9, 8 + e * 18, 18 + d * 18)); + } + } + + for (int d = 0; d < 3; d++) { + for (int e = 0; e < 9; e++) { + addSlotToContainer(new Slot(player, e + d * 9 + 9, 8 + e * 18, 103 + d * 18 + a)); + } + } + + for (int d = 0; d < 9; d++) { + addSlotToContainer(new Slot(player, d, 8 + d * 18, 161 + a)); + } + } + + public IInventory getLowerPresentInventory() { + return lower; + } +} diff --git a/src/main/java/info/jbcs/minecraft/chisel/inventory/InventoryLargePresent.java b/src/main/java/info/jbcs/minecraft/chisel/inventory/InventoryLargePresent.java new file mode 100644 index 00000000..3cac0ee4 --- /dev/null +++ b/src/main/java/info/jbcs/minecraft/chisel/inventory/InventoryLargePresent.java @@ -0,0 +1,102 @@ +package info.jbcs.minecraft.chisel.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +public class InventoryLargePresent implements IInventory { + private String name; + private IInventory upper, lower; + + public InventoryLargePresent(String name, IInventory upper, IInventory lower) { + this.name = name; + + if (upper == null) { + upper = lower; + } + + if (lower == null) { + lower = upper; + } + + this.upper = upper; + this.lower = lower; + } + + @Override + public int getSizeInventory() { + return upper.getSizeInventory() + lower.getSizeInventory(); + } + + public boolean isPartOfLargePresent(IInventory inventory) { + return upper == inventory || lower == inventory; + } + + @Override + public ItemStack getStackInSlot(int slot) { + return slot >= upper.getSizeInventory() ? lower.getStackInSlot(slot - upper.getSizeInventory()) : upper.getStackInSlot(slot); + } + + @Override + public ItemStack decrStackSize(int slot, int size) { + return slot >= upper.getSizeInventory() ? lower.getStackInSlot(slot - upper.getSizeInventory()) : upper.getStackInSlot(slot); + } + + @Override + public ItemStack getStackInSlotOnClosing(int slot) { + return slot >= upper.getSizeInventory() ? lower.getStackInSlotOnClosing(slot - upper.getSizeInventory()) : upper.getStackInSlotOnClosing(slot); + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) { + if (slot >= upper.getSizeInventory()) { + lower.setInventorySlotContents(slot - upper.getSizeInventory(), stack); + } else { + upper.setInventorySlotContents(slot, stack); + } + } + + @Override + public String getInventoryName() { + return upper.hasCustomInventoryName() ? upper.getInventoryName() : (lower.hasCustomInventoryName() ? lower.getInventoryName() : name); + } + + @Override + public boolean hasCustomInventoryName() { + return upper.hasCustomInventoryName() || lower.hasCustomInventoryName(); + } + + @Override + public int getInventoryStackLimit() { + return upper.getInventoryStackLimit(); + } + + @Override + public void markDirty() { + upper.markDirty(); + lower.markDirty(); + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + return upper.isUseableByPlayer(player) && lower.isUseableByPlayer(player); + } + + @Override + public void openInventory() { + upper.openInventory(); + lower.openInventory(); + } + + @Override + public void closeInventory() { + upper.closeInventory(); + ; + lower.closeInventory(); + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + return true; + } +} diff --git a/src/main/java/info/jbcs/minecraft/chisel/item/ItemChisel.java b/src/main/java/info/jbcs/minecraft/chisel/item/ItemChisel.java index d289e15d..3a4f8428 100644 --- a/src/main/java/info/jbcs/minecraft/chisel/item/ItemChisel.java +++ b/src/main/java/info/jbcs/minecraft/chisel/item/ItemChisel.java @@ -13,13 +13,11 @@ import net.minecraft.world.World; import java.util.HashSet; import java.util.Set; -public class ItemChisel extends ItemTool implements IChiselMode -{ - public static Carving carving = Carving.chisel; +public class ItemChisel extends ItemTool implements IChiselMode { private static final HashSet toolSet = new HashSet(); + public static Carving carving = Carving.chisel; - public ItemChisel() - { + public ItemChisel() { super(1, ToolMaterial.IRON, CarvableHelper.getChiselBlockSet()); setMaxStackSize(1); @@ -31,29 +29,24 @@ public class ItemChisel extends ItemTool implements IChiselMode } @Override - public Set getToolClasses(ItemStack stack) - { + public Set getToolClasses(ItemStack stack) { return toolSet; } @Override - public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) - { + public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { entityplayer.openGui(Chisel.instance, 0, world, 0, 0, 0); return itemstack; } @Override - public boolean onBlockStartBreak(ItemStack itemstack, int X, int Y, int Z, EntityPlayer player) - { + public boolean onBlockStartBreak(ItemStack itemstack, int X, int Y, int Z, EntityPlayer player) { return true; } @Override - public ChiselMode getChiselMode(ItemStack itemStack) - { - //TODO + public ChiselMode getChiselMode(ItemStack itemStack) { return ChiselMode.SINGLE; } } diff --git a/src/main/java/info/jbcs/minecraft/chisel/proxy/ClientProxy.java b/src/main/java/info/jbcs/minecraft/chisel/proxy/ClientProxy.java index c91f0ee8..d0c41216 100644 --- a/src/main/java/info/jbcs/minecraft/chisel/proxy/ClientProxy.java +++ b/src/main/java/info/jbcs/minecraft/chisel/proxy/ClientProxy.java @@ -1,11 +1,15 @@ package info.jbcs.minecraft.chisel.proxy; import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.client.registry.RenderingRegistry; import info.jbcs.minecraft.chisel.block.tileentity.TileEntityAutoChisel; +import info.jbcs.minecraft.chisel.block.tileentity.TileEntityPresent; import info.jbcs.minecraft.chisel.client.render.*; import info.jbcs.minecraft.chisel.client.render.item.ItemAutoChiselRenderer; import info.jbcs.minecraft.chisel.client.render.item.ItemChiselRenderer; +import info.jbcs.minecraft.chisel.client.render.item.ItemPresentRenderer; import info.jbcs.minecraft.chisel.client.render.tile.RenderAutoChisel; +import info.jbcs.minecraft.chisel.client.render.tile.RenderPresent; import info.jbcs.minecraft.chisel.entity.EntityBallOMoss; import info.jbcs.minecraft.chisel.entity.EntityCloudInABottle; import info.jbcs.minecraft.chisel.init.ModBlocks; @@ -13,7 +17,6 @@ import info.jbcs.minecraft.chisel.init.ModItems; import net.minecraft.client.renderer.entity.RenderSnowball; import net.minecraft.item.Item; import net.minecraftforge.client.MinecraftForgeClient; -import cpw.mods.fml.client.registry.RenderingRegistry; public class ClientProxy extends CommonProxy { @@ -41,8 +44,10 @@ public class ClientProxy extends CommonProxy RenderingRegistry.registerBlockHandler(new BlockTexturedOreRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAutoChisel.class, new RenderAutoChisel()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPresent.class, new RenderPresent()); MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.autoChisel), new ItemAutoChiselRenderer()); + MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.present), new ItemPresentRenderer()); RenderingRegistry.registerEntityRenderingHandler(EntityCloudInABottle.class, new RenderSnowball(ModItems.itemCloudInABottle)); RenderingRegistry.registerEntityRenderingHandler(EntityBallOMoss.class, new RenderSnowball(ModItems.itemBallOMoss)); diff --git a/src/main/java/info/jbcs/minecraft/chisel/proxy/CommonProxy.java b/src/main/java/info/jbcs/minecraft/chisel/proxy/CommonProxy.java index 2d793146..3310e9eb 100644 --- a/src/main/java/info/jbcs/minecraft/chisel/proxy/CommonProxy.java +++ b/src/main/java/info/jbcs/minecraft/chisel/proxy/CommonProxy.java @@ -1,18 +1,16 @@ package info.jbcs.minecraft.chisel.proxy; -import info.jbcs.minecraft.chisel.block.tileentity.TileEntityAutoChisel; -import net.minecraft.tileentity.TileEntity; import cpw.mods.fml.common.registry.GameRegistry; +import info.jbcs.minecraft.chisel.block.tileentity.TileEntityAutoChisel; +import info.jbcs.minecraft.chisel.block.tileentity.TileEntityPresent; public class CommonProxy { public void registerTileEntities() { - registerTileEntity(TileEntityAutoChisel.class, "autoChisel"); - } + GameRegistry.registerTileEntity(TileEntityAutoChisel.class, "autoChisel"); + GameRegistry.registerTileEntity(TileEntityPresent.class, "tile.present.present"); + } - private void registerTileEntity(Class cls, String baseName) { - GameRegistry.registerTileEntity(cls, "tile.autoChisel." + baseName); - } public void preInit() { }