From 0ef6a00aa79f022e5bd56b3f77e6861bbecf6d94 Mon Sep 17 00:00:00 2001 From: OnyxDarkKnight Date: Thu, 13 Aug 2015 21:12:11 +0100 Subject: Added a new structure, a new curse, achievements, challenges, curses entry in the guide; reworked liquids to be tile entities, cleaned the structures code, potion code and... you know what? I improved and changed so much stuff that I literally forgot what I did... --- .../tileentity/TileEntityJewelrsCraftingTable.java | 378 ++++++++++++--------- 1 file changed, 224 insertions(+), 154 deletions(-) (limited to 'src/main/java/darkknight/jewelrycraft/tileentity/TileEntityJewelrsCraftingTable.java') diff --git a/src/main/java/darkknight/jewelrycraft/tileentity/TileEntityJewelrsCraftingTable.java b/src/main/java/darkknight/jewelrycraft/tileentity/TileEntityJewelrsCraftingTable.java index cb216a0..4ecaf7d 100644 --- a/src/main/java/darkknight/jewelrycraft/tileentity/TileEntityJewelrsCraftingTable.java +++ b/src/main/java/darkknight/jewelrycraft/tileentity/TileEntityJewelrsCraftingTable.java @@ -1,154 +1,224 @@ -package darkknight.jewelrycraft.tileentity; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; -import net.minecraft.tileentity.TileEntity; -import darkknight.jewelrycraft.config.ConfigHandler; -import darkknight.jewelrycraft.util.JewelryNBT; -import darkknight.jewelrycraft.util.JewelrycraftUtil; - -public class TileEntityJewelrsCraftingTable extends TileEntity -{ - public boolean hasJewelry, hasEndItem, isDirty, hasGem, crafting; - public ItemStack jewelry, endItem, gem; - public int carving, effect; - public float angle; - - /** - * - */ - public TileEntityJewelrsCraftingTable() - { - jewelry = new ItemStack(Item.getItemById(0), 0, 0); - endItem = new ItemStack(Item.getItemById(0), 0, 0); - gem = new ItemStack(Item.getItemById(0), 0, 0); - hasJewelry = false; - hasEndItem = false; - hasGem = false; - crafting = false; - carving = 0; - effect = 0; - angle = 0; - isDirty = false; - } - - /** - * @param nbt - */ - @Override - public void writeToNBT(NBTTagCompound nbt) - { - super.writeToNBT(nbt); - nbt.setBoolean("hasJewelry", hasJewelry); - nbt.setBoolean("hasEndItem", hasEndItem); - nbt.setBoolean("hasJewel", hasGem); - nbt.setBoolean("crafting", crafting); - nbt.setInteger("timer", carving); - nbt.setInteger("effect", effect); - nbt.setFloat("angle", angle); - NBTTagCompound tag1 = new NBTTagCompound(); - NBTTagCompound tag2 = new NBTTagCompound(); - NBTTagCompound tag3 = new NBTTagCompound(); - jewelry.writeToNBT(tag1); - nbt.setTag("jewelry", tag1); - endItem.writeToNBT(tag2); - nbt.setTag("endItem", tag2); - gem.writeToNBT(tag3); - nbt.setTag("jewel", tag3); - } - - /** - * @param nbt - */ - @Override - public void readFromNBT(NBTTagCompound nbt) - { - super.readFromNBT(nbt); - hasJewelry = nbt.getBoolean("hasJewelry"); - hasEndItem = nbt.getBoolean("hasEndItem"); - hasGem = nbt.getBoolean("hasJewel"); - crafting = nbt.getBoolean("crafting"); - carving = nbt.getInteger("timer"); - effect = nbt.getInteger("effect"); - angle = nbt.getFloat("angle"); - jewelry = new ItemStack(Item.getItemById(0), 0, 0); - jewelry.readFromNBT(nbt.getCompoundTag("jewelry")); - endItem = new ItemStack(Item.getItemById(0), 0, 0); - endItem.readFromNBT(nbt.getCompoundTag("endItem")); - gem = new ItemStack(Item.getItemById(0), 0, 0); - gem.readFromNBT(nbt.getCompoundTag("jewel")); - } - - /** - * - */ - @Override - public void updateEntity() - { - super.updateEntity(); - if (isDirty){ - worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - isDirty = false; - } - if (angle < 360F) angle += 3F; - else angle = 0F; - if (hasJewelry && hasGem && !hasEndItem && crafting){ - if (carving > 0) carving--; - if (crafting) for(int l = 0; l < ConfigHandler.GEM_PLACEMENT_TIME / (carving + 2); ++l){ - if (worldObj.rand.nextInt(10) == 0) worldObj.playSoundEffect(xCoord, yCoord + 0.5F, zCoord, "random.orb", 0.05F, 1F); - if (getBlockMetadata() == 0) worldObj.spawnParticle("instantSpell", xCoord + 0.5F, (double)yCoord + 0.8F, zCoord + 0.2F, 0.0D, 0.0D, 0.0D); - if (getBlockMetadata() == 1) worldObj.spawnParticle("instantSpell", xCoord + 0.8F, (double)yCoord + 0.8F, zCoord + 0.5F, 0.0D, 0.0D, 0.0D); - if (getBlockMetadata() == 2) worldObj.spawnParticle("instantSpell", xCoord + 0.5F, (double)yCoord + 0.8F, zCoord + 0.8F, 0.0D, 0.0D, 0.0D); - if (getBlockMetadata() == 3) worldObj.spawnParticle("instantSpell", xCoord + 0.2F, (double)yCoord + 0.8F, zCoord + 0.5F, 0.0D, 0.0D, 0.0D); - } - if (carving == 0){ - hasEndItem = true; - endItem = jewelry.copy(); - if (hasGem && gem != new ItemStack(Item.getItemById(0), 0, 0)) if (!JewelryNBT.hasTag(jewelry, "gem")){ - JewelryNBT.addGem(endItem, gem); - hasGem = false; - gem = new ItemStack(Item.getItemById(0), 0, 0); - }else{ - ItemStack aux = JewelryNBT.gem(jewelry); - JewelryNBT.addGem(endItem, gem); - if (JewelrycraftUtil.rand.nextBoolean()) gem = aux.copy(); - else{ - hasGem = false; - gem = new ItemStack(Item.getItemById(0), 0, 0); - } - } - hasJewelry = false; - jewelry = new ItemStack(Item.getItemById(0), 0, 0); - carving = -1; - crafting = false; - isDirty = true; - } - } - } - - /** - * @return - */ - @Override - public Packet getDescriptionPacket() - { - NBTTagCompound nbttagcompound = new NBTTagCompound(); - writeToNBT(nbttagcompound); - return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound); - } - - /** - * @param net - * @param packet - */ - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) - { - readFromNBT(packet.func_148857_g()); - worldObj.func_147479_m(xCoord, yCoord, zCoord); - } -} +package darkknight.jewelrycraft.tileentity; + +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import darkknight.jewelrycraft.config.ConfigHandler; +import darkknight.jewelrycraft.util.JewelryNBT; +import darkknight.jewelrycraft.util.JewelrycraftUtil; + +public class TileEntityJewelrsCraftingTable extends TileEntity +{ + public boolean hasJewelry, hasEndItem, isDirty, hasGem, crafting; + public ItemStack jewelry, endItem, gem; + public int carving, effect; + public float angle; + + /** + * + */ + public TileEntityJewelrsCraftingTable() + { + jewelry = new ItemStack(Item.getItemById(0), 0, 0); + endItem = new ItemStack(Item.getItemById(0), 0, 0); + gem = new ItemStack(Item.getItemById(0), 0, 0); + hasJewelry = false; + hasEndItem = false; + hasGem = false; + crafting = false; + carving = 0; + effect = 0; + angle = 0; + isDirty = false; + } + + /** + * @param nbt + */ + @Override + public void writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("hasJewelry", hasJewelry); + nbt.setBoolean("hasEndItem", hasEndItem); + nbt.setBoolean("hasJewel", hasGem); + nbt.setBoolean("crafting", crafting); + nbt.setInteger("timer", carving); + nbt.setInteger("effect", effect); + nbt.setFloat("angle", angle); + NBTTagCompound tag1 = new NBTTagCompound(); + NBTTagCompound tag2 = new NBTTagCompound(); + NBTTagCompound tag3 = new NBTTagCompound(); + jewelry.writeToNBT(tag1); + nbt.setTag("jewelry", tag1); + endItem.writeToNBT(tag2); + nbt.setTag("endItem", tag2); + gem.writeToNBT(tag3); + nbt.setTag("jewel", tag3); + } + + /** + * @param nbt + */ + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + hasJewelry = nbt.getBoolean("hasJewelry"); + hasEndItem = nbt.getBoolean("hasEndItem"); + hasGem = nbt.getBoolean("hasJewel"); + crafting = nbt.getBoolean("crafting"); + carving = nbt.getInteger("timer"); + effect = nbt.getInteger("effect"); + angle = nbt.getFloat("angle"); + jewelry = new ItemStack(Item.getItemById(0), 0, 0); + jewelry.readFromNBT(nbt.getCompoundTag("jewelry")); + endItem = new ItemStack(Item.getItemById(0), 0, 0); + endItem.readFromNBT(nbt.getCompoundTag("endItem")); + gem = new ItemStack(Item.getItemById(0), 0, 0); + gem.readFromNBT(nbt.getCompoundTag("jewel")); + } + + /** + * + */ + @Override + public void updateEntity() + { + super.updateEntity(); + if (isDirty){ + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + isDirty = false; + } + if (angle < 360F) angle += 3F; + else angle = 0F; + if (hasJewelry && hasGem && !hasEndItem && crafting){ + if (carving > 0) carving--; + if (crafting) for(int l = 0; l < ConfigHandler.GEM_PLACEMENT_TIME / (carving + 2); ++l){ + if (worldObj.rand.nextInt(10) == 0) worldObj.playSoundEffect(xCoord, yCoord + 0.5F, zCoord, "random.orb", 0.05F, 1F); + if (getBlockMetadata() == 0) worldObj.spawnParticle("instantSpell", xCoord + 0.5F, (double)yCoord + 0.8F, zCoord + 0.2F, 0.0D, 0.0D, 0.0D); + if (getBlockMetadata() == 1) worldObj.spawnParticle("instantSpell", xCoord + 0.8F, (double)yCoord + 0.8F, zCoord + 0.5F, 0.0D, 0.0D, 0.0D); + if (getBlockMetadata() == 2) worldObj.spawnParticle("instantSpell", xCoord + 0.5F, (double)yCoord + 0.8F, zCoord + 0.8F, 0.0D, 0.0D, 0.0D); + if (getBlockMetadata() == 3) worldObj.spawnParticle("instantSpell", xCoord + 0.2F, (double)yCoord + 0.8F, zCoord + 0.5F, 0.0D, 0.0D, 0.0D); + } + if (carving == 0){ + hasEndItem = true; + endItem = jewelry.copy(); + if (hasGem && gem != new ItemStack(Item.getItemById(0), 0, 0)) if (!JewelryNBT.hasTag(jewelry, "gem")){ + JewelryNBT.addGem(endItem, gem); + hasGem = false; + gem = new ItemStack(Item.getItemById(0), 0, 0); + }else{ + ItemStack aux = JewelryNBT.gem(jewelry); + JewelryNBT.addGem(endItem, gem); + if (JewelrycraftUtil.rand.nextBoolean()) gem = aux.copy(); + else{ + hasGem = false; + gem = new ItemStack(Item.getItemById(0), 0, 0); + } + } + hasJewelry = false; + jewelry = new ItemStack(Item.getItemById(0), 0, 0); + carving = -1; + crafting = false; + isDirty = true; + } + } + } + + public void setGemItemStack(ItemStack itemStack) + { + if (itemStack != null && itemStack.getItem() != null) { + this.gem = itemStack.copy(); + this.gem.stackSize = 1; + this.hasGem = true; + this.isDirty = true; + } + } + + public void setJewelryItemStack(ItemStack itemStack) + { + if (itemStack != null && itemStack.getItem() != null) { + this.jewelry = itemStack.copy(); + this.jewelry.stackSize = 1; + this.hasJewelry = true; + this.isDirty = true; + } + } + + public void setCrafting() + { + carving = ConfigHandler.GEM_PLACEMENT_TIME; + angle = 0; + crafting = true; + isDirty = true; + } + + public void removeGem() + { + dropItem(worldObj, xCoord, yCoord, zCoord, gem.copy()); + gem = new ItemStack(Item.getItemById(0), 0, 0); + hasGem = false; + carving = -1; + crafting = false; + angle = 0F; + isDirty = true; + } + + public void removeJewelry() + { + dropItem(worldObj, xCoord, yCoord, zCoord, jewelry.copy()); + jewelry = new ItemStack(Item.getItemById(0), 0, 0); + hasJewelry = false; + carving = -1; + crafting = false; + angle = 0F; + isDirty = true; + } + + public void removeResult() + { + dropItem(worldObj, xCoord, yCoord, zCoord, endItem.copy()); + endItem = new ItemStack(Item.getItemById(0), 0, 0); + hasEndItem = false; + isDirty = true; + } + + public void dropItem(World world, double x, double y, double z, ItemStack stack) + { + EntityItem entityitem = new EntityItem(world, x + 0.5D, y + 1D, z + 0.5D, stack); + entityitem.motionX = 0; + entityitem.motionZ = 0; + entityitem.motionY = 0.21000000298023224D; + world.spawnEntityInWorld(entityitem); + } + + /** + * @return + */ + @Override + public Packet getDescriptionPacket() + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + writeToNBT(nbttagcompound); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound); + } + + /** + * @param net + * @param packet + */ + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) + { + readFromNBT(packet.func_148857_g()); + worldObj.func_147479_m(xCoord, yCoord, zCoord); + } +} -- cgit v1.2.3