summaryrefslogtreecommitdiff
path: root/java/darkknight/jewelrycraft/tileentity
diff options
context:
space:
mode:
authorOnyxDarkKnight <sor1n.iliutza16@gmail.com>2014-09-17 19:10:05 +0300
committerOnyxDarkKnight <sor1n.iliutza16@gmail.com>2014-09-17 19:10:05 +0300
commit06f62473f0622efe6decc32b70516a7c5d3d3572 (patch)
treeebf54c96117f9917cd93740a89763c26abde06af /java/darkknight/jewelrycraft/tileentity
parent852cfd0e13631320624d528213ec8c80cffe8743 (diff)
1.7.10
Diffstat (limited to 'java/darkknight/jewelrycraft/tileentity')
-rw-r--r--java/darkknight/jewelrycraft/tileentity/TileEntityAltar.java169
-rw-r--r--java/darkknight/jewelrycraft/tileentity/TileEntityBlockShadow.java74
-rw-r--r--java/darkknight/jewelrycraft/tileentity/TileEntityDisplayer.java108
-rw-r--r--java/darkknight/jewelrycraft/tileentity/TileEntityJewelrsCraftingTable.java142
-rw-r--r--java/darkknight/jewelrycraft/tileentity/TileEntityMolder.java126
-rw-r--r--java/darkknight/jewelrycraft/tileentity/TileEntitySmelter.java185
6 files changed, 804 insertions, 0 deletions
diff --git a/java/darkknight/jewelrycraft/tileentity/TileEntityAltar.java b/java/darkknight/jewelrycraft/tileentity/TileEntityAltar.java
new file mode 100644
index 0000000..4226471
--- /dev/null
+++ b/java/darkknight/jewelrycraft/tileentity/TileEntityAltar.java
@@ -0,0 +1,169 @@
+package darkknight.jewelrycraft.tileentity;
+
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+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 net.minecraft.util.AxisAlignedBB;
+import darkknight.jewelrycraft.util.JewelryNBT;
+
+public class TileEntityAltar extends TileEntity
+{
+ public ItemStack object;
+ public boolean isDirty, hasObject;
+ public String playerName;
+
+ public TileEntityAltar()
+ {
+ this.hasObject = false;
+ this.object = new ItemStack(Item.getItemById(0), 0, 0);
+ this.isDirty = false;
+ this.playerName = "";
+ }
+
+ @Override
+ public void writeToNBT(NBTTagCompound nbt)
+ {
+ super.writeToNBT(nbt);
+ NBTTagCompound tag = new NBTTagCompound();
+ this.object.writeToNBT(tag);
+ nbt.setTag("object", tag);
+ nbt.setBoolean("hasObject", hasObject);
+ nbt.setString("playerName", playerName);
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound nbt)
+ {
+ super.readFromNBT(nbt);
+ this.object = new ItemStack(Item.getItemById(0), 0, 0);
+ this.object.readFromNBT(nbt.getCompoundTag("object"));
+ this.hasObject = nbt.getBoolean("hasObject");
+ this.playerName = nbt.getString("playerName");
+ }
+
+ @SuppressWarnings("rawtypes")
+ @Override
+ public void updateEntity()
+ {
+ super.updateEntity();
+
+ if (isDirty)
+ {
+ worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
+ isDirty = false;
+ }
+ if (hasObject && playerName != "")
+ {
+ // int playerPosX = (int)player.posX, playerPosY = (int)player.posY,
+ // playerPosZ = (int)player.posZ;
+ List entitiesR = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(xCoord, yCoord + 1D, zCoord, xCoord + 0.5D, yCoord + 2D, zCoord + 0.5D));
+ List entitiesN = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(xCoord - 0.5D, yCoord + 1D, zCoord - 0.5D, xCoord + 1.5D, yCoord + 2D, zCoord + 1.5D));
+ if (object.getUnlocalizedName().contains("ring"))
+ {
+ if (JewelryNBT.isJewelX(object, new ItemStack(Items.ender_pearl)) && JewelryNBT.dimension(object) != -2 && JewelryNBT.playerPosX(object) != -1 && JewelryNBT.playerPosY(object) != -1 && JewelryNBT.playerPosZ(object) != -1)
+ {
+ double posX = JewelryNBT.playerPosX(object), posY = JewelryNBT.playerPosY(object), posZ = JewelryNBT.playerPosZ(object);
+ int dimension = JewelryNBT.dimension(object);
+ for (int i = 0; i < entitiesR.size(); i++)
+ {
+ EntityLivingBase entity = (EntityLivingBase) entitiesR.get(i);
+ if (!JewelryNBT.isDimensionX(object, entity.dimension) && JewelryNBT.isModifierX(object, new ItemStack(Items.bed)))
+ {
+ entity.travelToDimension(dimension);
+ entity.setPositionAndUpdate(posX, posY, posZ);
+ }
+ else if (JewelryNBT.isDimensionX(object, entity.dimension)) entity.setPositionAndUpdate(posX, posY, posZ);
+ }
+ }
+ if (JewelryNBT.isModifierX(object, new ItemStack(Items.dye, 1, 15)))
+ {
+ for (int i = -1; i <= 1; i++)
+ for (int j = -1; j <= 1; j++)
+ for (int k = -1; k <= 1; k++)
+ {
+ // if(worldObj.getBlockId(xCoord + i, yCoord +
+ // j, zCoord + k) == Block.dirt.blockID &&
+ // (worldObj.getBlockId(xCoord + i, yCoord + j +
+ // 1, zCoord + k) == 0 ||
+ // worldObj.getBlockId(xCoord + i, yCoord + j +
+ // 1, zCoord + k) == Block.crops.blockID) ||
+ // worldObj.getBlockId(xCoord + i, yCoord + j +
+ // 1, zCoord + k) == Block.potato.blockID)
+ // worldObj.setBlock(xCoord + i, yCoord + j,
+ // zCoord + k, Block.tilledField.blockID);
+ if (worldObj.getBlock(xCoord + i, yCoord + j, zCoord + k) == Blocks.farmland) worldObj.setBlockMetadataWithNotify(xCoord + i, yCoord + j, zCoord + k, 1, 7);
+ if (worldObj.getBlock(xCoord + i, yCoord + j, zCoord + k) != Blocks.farmland) worldObj.scheduleBlockUpdate(xCoord + i, yCoord + j, zCoord + k, worldObj.getBlock(xCoord + i, yCoord + j, zCoord + k), 5);
+ // JewelrycraftUtil.applyBonemeal(object,
+ // worldObj, xCoord + i, yCoord + j, zCoord + k,
+ // player);
+ }
+ }
+ }
+ else if (object.getUnlocalizedName().contains("necklace"))
+ {
+ if (JewelryNBT.isJewelX(object, new ItemStack(Items.ender_pearl)) && JewelryNBT.dimension(object) != -2 && JewelryNBT.playerPosX(object) != -1 && JewelryNBT.playerPosY(object) != -1 && JewelryNBT.playerPosZ(object) != -1)
+ {
+ double posX = JewelryNBT.playerPosX(object), posY = JewelryNBT.playerPosY(object), posZ = JewelryNBT.playerPosZ(object);
+ int dimension = JewelryNBT.dimension(object);
+ for (int i = 0; i < entitiesN.size(); i++)
+ {
+ EntityLivingBase entity = (EntityLivingBase) entitiesN.get(i);
+ if (!JewelryNBT.isDimensionX(object, entity.dimension) && JewelryNBT.isModifierX(object, new ItemStack(Items.bed)))
+ {
+ entity.travelToDimension(dimension);
+ entity.setPositionAndUpdate(posX, posY, posZ);
+ }
+ else if (JewelryNBT.isDimensionX(object, entity.dimension)) entity.setPositionAndUpdate(posX, posY, posZ);
+ }
+ }
+ if (JewelryNBT.isModifierX(object, new ItemStack(Items.dye, 1, 15)))
+ {
+ for (int i = -3; i <= 3; i++)
+ for (int j = -1; j <= 1; j++)
+ for (int k = -3; k <= 3; k++)
+ {
+ // if(worldObj.getBlockId(xCoord + i, yCoord +
+ // j, zCoord + k) == Block.dirt.blockID &&
+ // (worldObj.getBlockId(xCoord + i, yCoord + j +
+ // 1, zCoord + k) == 0 ||
+ // worldObj.getBlockId(xCoord + i, yCoord + j +
+ // 1, zCoord + k) == Block.crops.blockID) ||
+ // worldObj.getBlockId(xCoord + i, yCoord + j +
+ // 1, zCoord + k) == Block.potato.blockID)
+ // worldObj.setBlock(xCoord + i, yCoord + j,
+ // zCoord + k, Block.tilledField.blockID);
+ if (worldObj.getBlock(xCoord + i, yCoord + j, zCoord + k) == Blocks.farmland) worldObj.setBlockMetadataWithNotify(xCoord + i, yCoord + j, zCoord + k, 1, 7);
+ if (worldObj.getBlock(xCoord + i, yCoord + j, zCoord + k) != Blocks.farmland) worldObj.scheduleBlockUpdate(xCoord + i, yCoord + j, zCoord + k, worldObj.getBlock(xCoord + i, yCoord + j, zCoord + k), 5);
+ // JewelrycraftUtil.applyBonemeal(object,
+ // worldObj, xCoord + i, yCoord + j, zCoord + k,
+ // player);
+ }
+ }
+ }
+ }
+ }
+
+ public Packet getDescriptionPacket()
+ {
+ NBTTagCompound nbttagcompound = new NBTTagCompound();
+ this.writeToNBT(nbttagcompound);
+ return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbttagcompound);
+ }
+
+ @Override
+ public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet)
+ {
+ readFromNBT(packet.func_148857_g());
+ worldObj.func_147479_m(xCoord, yCoord, zCoord);
+ }
+}
diff --git a/java/darkknight/jewelrycraft/tileentity/TileEntityBlockShadow.java b/java/darkknight/jewelrycraft/tileentity/TileEntityBlockShadow.java
new file mode 100644
index 0000000..88ae7e3
--- /dev/null
+++ b/java/darkknight/jewelrycraft/tileentity/TileEntityBlockShadow.java
@@ -0,0 +1,74 @@
+package darkknight.jewelrycraft.tileentity;
+
+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.util.MathHelper;
+import net.minecraft.world.EnumSkyBlock;
+
+public class TileEntityBlockShadow extends TileEntity
+{
+ public int metadata;
+
+ public TileEntityBlockShadow()
+ {
+ this.metadata = -1;
+ }
+
+ @Override
+ public void writeToNBT(NBTTagCompound nbt)
+ {
+ super.writeToNBT(nbt);
+ nbt.setInteger("metadata", metadata);
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound nbt)
+ {
+ super.readFromNBT(nbt);
+ this.metadata = nbt.getInteger("metadata");
+ }
+
+ @Override
+ public void updateEntity()
+ {
+ super.updateEntity();
+ int blockLight, realLight;
+ int lightValue = worldObj.getSavedLightValue(EnumSkyBlock.Sky, xCoord, yCoord, zCoord) - worldObj.skylightSubtracted;
+ float sunPosAngle = worldObj.getCelestialAngleRadians(1.0F);
+
+ if (sunPosAngle < (float) Math.PI) sunPosAngle += (0.0F - sunPosAngle) * 0.2F;
+ else sunPosAngle += (((float) Math.PI * 2F) - sunPosAngle) * 0.2F;
+
+ lightValue = Math.round((float) lightValue * MathHelper.cos(sunPosAngle));
+
+ if (lightValue < 0) lightValue = 0;
+ if (lightValue > 15) lightValue = 15;
+
+ blockLight = worldObj.getChunkFromBlockCoords(xCoord, zCoord).getSavedLightValue(EnumSkyBlock.Block, xCoord & 15, yCoord, zCoord & 15);
+ realLight = worldObj.getChunkFromBlockCoords(xCoord, zCoord).getBlockLightValue(xCoord & 15, yCoord, zCoord & 15, 0);
+
+ if ((blockLight == 0 && worldObj.canBlockSeeTheSky(xCoord, yCoord, zCoord)) || (lightValue >= blockLight)) metadata = 15 - lightValue;
+ else if (!worldObj.canBlockSeeTheSky(xCoord, yCoord, zCoord)) metadata = 15 - realLight;
+ else if (lightValue < blockLight) metadata = 15 - blockLight;
+
+ worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, metadata, 2);
+ worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, worldObj.getBlock(xCoord, yCoord, zCoord));
+ }
+
+ public Packet getDescriptionPacket()
+ {
+ NBTTagCompound nbttagcompound = new NBTTagCompound();
+ this.writeToNBT(nbttagcompound);
+ return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbttagcompound);
+ }
+
+ @Override
+ public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet)
+ {
+ readFromNBT(packet.func_148857_g());
+ worldObj.func_147479_m(xCoord, yCoord, zCoord);
+ }
+}
diff --git a/java/darkknight/jewelrycraft/tileentity/TileEntityDisplayer.java b/java/darkknight/jewelrycraft/tileentity/TileEntityDisplayer.java
new file mode 100644
index 0000000..d027e6a
--- /dev/null
+++ b/java/darkknight/jewelrycraft/tileentity/TileEntityDisplayer.java
@@ -0,0 +1,108 @@
+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;
+
+public class TileEntityDisplayer extends TileEntity
+{
+ public float ringTranslation1, ringTranslation2, ringTranslation3, rotAngle;
+ public boolean isDescending1, isDescending2, isDescending3, isDirty, hasObject;
+ public ItemStack object;
+ public int quantity;
+
+ public TileEntityDisplayer()
+ {
+ this.ringTranslation1 = 0;
+ this.ringTranslation2 = 0;
+ this.ringTranslation3 = 0;
+ this.rotAngle = 0;
+ this.quantity = 0;
+ this.isDescending1 = false;
+ this.isDescending2 = false;
+ this.isDescending3 = false;
+ this.isDirty = false;
+ this.hasObject = false;
+ this.object = new ItemStack(Item.getItemById(0), 0, 0);
+ }
+
+ @Override
+ public void writeToNBT(NBTTagCompound nbt)
+ {
+ super.writeToNBT(nbt);
+ nbt.setFloat("translation1", ringTranslation1);
+ nbt.setFloat("translation2", ringTranslation2);
+ nbt.setFloat("translation3", ringTranslation3);
+ nbt.setFloat("angle", rotAngle);
+ nbt.setInteger("quantity", quantity);
+ nbt.setBoolean("descending1", isDescending1);
+ nbt.setBoolean("descending2", isDescending2);
+ nbt.setBoolean("descending3", isDescending3);
+ nbt.setBoolean("hasObject", hasObject);
+ NBTTagCompound tag = new NBTTagCompound();
+ this.object.writeToNBT(tag);
+ nbt.setTag("object", tag);
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound nbt)
+ {
+ super.readFromNBT(nbt);
+ this.ringTranslation1 = nbt.getFloat("translation1");
+ this.ringTranslation2 = nbt.getFloat("translation2");
+ this.ringTranslation3 = nbt.getFloat("translation3");
+ this.rotAngle = nbt.getFloat("angle");
+ this.quantity = nbt.getInteger("quantity");
+ this.isDescending1 = nbt.getBoolean("descending1");
+ this.isDescending2 = nbt.getBoolean("descending2");
+ this.isDescending3 = nbt.getBoolean("descending3");
+ this.hasObject = nbt.getBoolean("hasObject");
+ this.object = new ItemStack(Item.getItemById(0), 0, 0);
+ this.object.readFromNBT(nbt.getCompoundTag("object"));
+ }
+
+ @Override
+ public void updateEntity()
+ {
+ super.updateEntity();
+ if (isDirty)
+ {
+ worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
+ isDirty = false;
+ }
+ if (ringTranslation1 >= 0.6) isDescending1 = true;
+ if (ringTranslation1 <= 0) isDescending1 = false;
+ if (!isDescending1) ringTranslation1 += 0.05;
+ if (isDescending1) ringTranslation1 -= 0.05;
+
+ if (ringTranslation2 >= 0.6) isDescending2 = true;
+ if (ringTranslation2 <= 0) isDescending2 = false;
+ if (!isDescending2) ringTranslation2 += 0.04;
+ if (isDescending2) ringTranslation2 -= 0.04;
+
+ if (ringTranslation3 >= 0.6) isDescending3 = true;
+ if (ringTranslation3 <= 0) isDescending3 = false;
+ if (!isDescending3) ringTranslation3 += 0.03;
+ if (isDescending3) ringTranslation3 -= 0.03;
+ if (rotAngle < 360F) rotAngle += 6F;
+ if (rotAngle >= 360F) rotAngle = 0F;
+ }
+
+ public Packet getDescriptionPacket()
+ {
+ NBTTagCompound nbttagcompound = new NBTTagCompound();
+ this.writeToNBT(nbttagcompound);
+ return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbttagcompound);
+ }
+
+ @Override
+ public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet)
+ {
+ readFromNBT(packet.func_148857_g());
+ worldObj.func_147479_m(xCoord, yCoord, zCoord);
+ }
+}
diff --git a/java/darkknight/jewelrycraft/tileentity/TileEntityJewelrsCraftingTable.java b/java/darkknight/jewelrycraft/tileentity/TileEntityJewelrsCraftingTable.java
new file mode 100644
index 0000000..fd2290a
--- /dev/null
+++ b/java/darkknight/jewelrycraft/tileentity/TileEntityJewelrsCraftingTable.java
@@ -0,0 +1,142 @@
+package darkknight.jewelrycraft.tileentity;
+
+import net.minecraft.init.Items;
+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;
+
+public class TileEntityJewelrsCraftingTable extends TileEntity
+{
+ public boolean hasJewelry, hasModifier, hasEndItem, isDirty, hasJewel;
+ public ItemStack jewelry, modifier, endItem, jewel;
+ public int timer, effect;
+ public float angle;
+
+ public TileEntityJewelrsCraftingTable()
+ {
+ this.jewelry = new ItemStack(Item.getItemById(0), 0, 0);
+ this.modifier = new ItemStack(Item.getItemById(0), 0, 0);
+ this.endItem = new ItemStack(Item.getItemById(0), 0, 0);
+ this.jewel = new ItemStack(Item.getItemById(0), 0, 0);
+ this.hasJewelry = false;
+ this.hasModifier = false;
+ this.hasEndItem = false;
+ this.hasJewel = false;
+ this.timer = 0;
+ this.effect = 0;
+ this.angle = 0;
+ this.isDirty = false;
+ }
+
+ @Override
+ public void writeToNBT(NBTTagCompound nbt)
+ {
+ super.writeToNBT(nbt);
+ nbt.setBoolean("hasJewelry", hasJewelry);
+ nbt.setBoolean("hasModifier", hasModifier);
+ nbt.setBoolean("hasEndItem", hasEndItem);
+ nbt.setBoolean("hasJewel", hasJewel);
+ nbt.setInteger("timer", timer);
+ nbt.setInteger("effect", effect);
+ nbt.setFloat("angle", angle);
+
+ NBTTagCompound tag = new NBTTagCompound();
+ NBTTagCompound tag1 = new NBTTagCompound();
+ NBTTagCompound tag2 = new NBTTagCompound();
+ NBTTagCompound tag3 = new NBTTagCompound();
+
+ this.jewelry.writeToNBT(tag);
+ nbt.setTag("jewelry", tag);
+ this.modifier.writeToNBT(tag1);
+ nbt.setTag("modifier", tag1);
+ this.endItem.writeToNBT(tag2);
+ nbt.setTag("endItem", tag2);
+ this.jewel.writeToNBT(tag3);
+ nbt.setTag("jewel", tag3);
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound nbt)
+ {
+ super.readFromNBT(nbt);
+ this.hasJewelry = nbt.getBoolean("hasJewelry");
+ this.hasModifier = nbt.getBoolean("hasModifier");
+ this.hasEndItem = nbt.getBoolean("hasEndItem");
+ this.hasJewel = nbt.getBoolean("hasJewel");
+
+ this.timer = nbt.getInteger("timer");
+ this.effect = nbt.getInteger("effect");
+ this.angle = nbt.getFloat("angle");
+ this.jewelry = new ItemStack(Item.getItemById(0), 0, 0);
+ this.jewelry.readFromNBT(nbt.getCompoundTag("jewelry"));
+ this.modifier = new ItemStack(Item.getItemById(0), 0, 0);
+ this.modifier.readFromNBT(nbt.getCompoundTag("modifier"));
+ this.endItem = new ItemStack(Item.getItemById(0), 0, 0);
+ this.endItem.readFromNBT(nbt.getCompoundTag("endItem"));
+ this.jewel = new ItemStack(Item.getItemById(0), 0, 0);
+ this.jewel.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 (this.hasJewelry && (this.hasModifier || this.hasJewel) && !this.hasEndItem)
+ {
+ if (timer > 0)
+ {
+ timer--;
+ for (int l = 0; l < ConfigHandler.jewelryCraftingTime / (timer + 2); ++l)
+ {
+ if (this.getBlockMetadata() == 0) this.worldObj.spawnParticle("witchMagic", xCoord + 0.5F, (double) yCoord + 0.8F, zCoord + 0.2F, 0.0D, 0.0D, 0.0D);
+ if (this.getBlockMetadata() == 1) this.worldObj.spawnParticle("witchMagic", xCoord + 0.8F, (double) yCoord + 0.8F, zCoord + 0.5F, 0.0D, 0.0D, 0.0D);
+ if (this.getBlockMetadata() == 2) this.worldObj.spawnParticle("witchMagic", xCoord + 0.5F, (double) yCoord + 0.8F, zCoord + 0.8F, 0.0D, 0.0D, 0.0D);
+ if (this.getBlockMetadata() == 3) this.worldObj.spawnParticle("witchMagic", xCoord + 0.2F, (double) yCoord + 0.8F, zCoord + 0.5F, 0.0D, 0.0D, 0.0D);
+ }
+ }
+ if (timer == 0)
+ {
+ this.hasEndItem = true;
+ this.endItem = jewelry.copy();
+ if (hasModifier && modifier != new ItemStack(Item.getItemById(0), 0, 0)) JewelryNBT.addModifier(endItem, modifier);
+ if (hasJewel && jewel != new ItemStack(Item.getItemById(0), 0, 0)) JewelryNBT.addJewel(endItem, jewel);
+ if (hasJewel && hasModifier && JewelryNBT.isJewelX(endItem, new ItemStack(Items.nether_star)) && JewelryNBT.isModifierX(endItem, new ItemStack(Items.book))) JewelryNBT.addMode(endItem, "Disenchant");
+ if (hasModifier && JewelryNBT.isModifierEffectType(endItem)) JewelryNBT.addMode(endItem, "Activated");
+ this.hasJewelry = false;
+ this.jewelry = new ItemStack(Item.getItemById(0), 0, 0);
+ this.hasModifier = false;
+ this.modifier = new ItemStack(Item.getItemById(0), 0, 0);
+ this.hasJewel = false;
+ this.jewel = new ItemStack(Item.getItemById(0), 0, 0);
+ timer = -1;
+ }
+ }
+ }
+
+ public Packet getDescriptionPacket()
+ {
+ NBTTagCompound nbttagcompound = new NBTTagCompound();
+ this.writeToNBT(nbttagcompound);
+ return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbttagcompound);
+ }
+
+ @Override
+ public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet)
+ {
+ readFromNBT(packet.func_148857_g());
+ worldObj.func_147479_m(xCoord, yCoord, zCoord);
+ }
+}
diff --git a/java/darkknight/jewelrycraft/tileentity/TileEntityMolder.java b/java/darkknight/jewelrycraft/tileentity/TileEntityMolder.java
new file mode 100644
index 0000000..6006dea
--- /dev/null
+++ b/java/darkknight/jewelrycraft/tileentity/TileEntityMolder.java
@@ -0,0 +1,126 @@
+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.item.ItemList;
+import darkknight.jewelrycraft.util.JewelryNBT;
+
+public class TileEntityMolder extends TileEntity
+{
+ public int cooling;
+ public boolean hasMoltenMetal, hasJewelBase, hasMold, isDirty;
+ public ItemStack mold, jewelBase, moltenMetal, ringMetal;
+ public float quantity;
+
+ public TileEntityMolder()
+ {
+ this.moltenMetal = new ItemStack(Item.getItemById(0), 0, 0);
+ this.jewelBase = new ItemStack(Item.getItemById(0), 0, 0);
+ this.mold = new ItemStack(Item.getItemById(0), 0, 0);
+ this.ringMetal = new ItemStack(Item.getItemById(0), 0, 0);
+ this.cooling = -1;
+ this.quantity = 0f;
+ this.hasJewelBase = false;
+ this.hasMoltenMetal = false;
+ this.hasMold = false;
+ this.isDirty = false;
+ }
+
+ @Override
+ public void writeToNBT(NBTTagCompound nbt)
+ {
+ super.writeToNBT(nbt);
+ nbt.setInteger("cooling", cooling);
+ nbt.setFloat("quantity", quantity);
+ nbt.setBoolean("hasJewelBase", hasJewelBase);
+ nbt.setBoolean("hasMoltenMetal", hasMoltenMetal);
+ nbt.setBoolean("hasMold", hasMold);
+ NBTTagCompound tag = new NBTTagCompound();
+ NBTTagCompound tag1 = new NBTTagCompound();
+ NBTTagCompound tag2 = new NBTTagCompound();
+ NBTTagCompound tag3 = new NBTTagCompound();
+ this.mold.writeToNBT(tag);
+ nbt.setTag("mold", tag);
+ this.jewelBase.writeToNBT(tag1);
+ nbt.setTag("jewelBase", tag1);
+ this.moltenMetal.writeToNBT(tag2);
+ nbt.setTag("moltenMetal", tag2);
+ this.ringMetal.writeToNBT(tag3);
+ nbt.setTag("ringMetal", tag3);
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound nbt)
+ {
+ super.readFromNBT(nbt);
+ this.cooling = nbt.getInteger("cooling");
+ this.quantity = nbt.getFloat("quantity");
+ this.hasJewelBase = nbt.getBoolean("hasJewelBase");
+ this.hasMoltenMetal = nbt.getBoolean("hasMoltenMetal");
+ this.hasMold = nbt.getBoolean("hasMold");
+ this.mold = new ItemStack(Item.getItemById(0), 0, 0);
+ this.mold.readFromNBT(nbt.getCompoundTag("mold"));
+ this.jewelBase = new ItemStack(Item.getItemById(0), 0, 0);
+ this.jewelBase.readFromNBT(nbt.getCompoundTag("jewelBase"));
+ this.moltenMetal = new ItemStack(Item.getItemById(0), 0, 0);
+ this.moltenMetal.readFromNBT(nbt.getCompoundTag("moltenMetal"));
+ this.ringMetal = new ItemStack(Item.getItemById(0), 0, 0);
+ this.ringMetal.readFromNBT(nbt.getCompoundTag("ringMetal"));
+ }
+
+ @Override
+ public void updateEntity()
+ {
+ super.updateEntity();
+ if (isDirty)
+ {
+ worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
+ isDirty = false;
+ }
+ if (this.hasMoltenMetal && moltenMetal.getItem() != Item.getItemById(0) && quantity > 0f)
+ {
+ if (worldObj.rand.nextInt(20) == 0) this.worldObj.playSoundEffect(xCoord, yCoord + 0.5F, zCoord, "random.fizz", 0.5F, 1F);
+ for (int l = 0; l < 2; ++l)
+ this.worldObj.spawnParticle("reddust", xCoord + Math.random(), (double) yCoord + 0.2F, zCoord + Math.random(), 0.0D, 1.0D, 1.0D);
+ }
+ if (this.hasMoltenMetal && !this.hasJewelBase && quantity >= 0.1f)
+ {
+ ringMetal = moltenMetal;
+ if (cooling > 0) this.cooling--;
+ if (cooling <= 0f)
+ {
+ if (mold.getItemDamage() == 0) this.jewelBase = moltenMetal;
+ else if (mold.getItemDamage() == 1) this.jewelBase = new ItemStack(ItemList.ring);
+ else this.jewelBase = new ItemStack(ItemList.necklace);
+ ringMetal.stackSize = 1;
+ jewelBase.stackSize = 1;
+ if (mold.getItemDamage() != 0 && jewelBase != new ItemStack(Item.getItemById(0), 0, 0)) JewelryNBT.addMetal(jewelBase, ringMetal);
+ this.hasMoltenMetal = false;
+ this.moltenMetal = new ItemStack(Item.getItemById(0), 0, 0);
+ this.hasJewelBase = true;
+ cooling = -1;
+ quantity = 0f;
+ isDirty = true;
+ }
+ }
+ }
+
+ public Packet getDescriptionPacket()
+ {
+ NBTTagCompound nbttagcompound = new NBTTagCompound();
+ this.writeToNBT(nbttagcompound);
+ return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbttagcompound);
+ }
+
+ @Override
+ public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet)
+ {
+ readFromNBT(packet.func_148857_g());
+ worldObj.func_147479_m(xCoord, yCoord, zCoord);
+ }
+}
diff --git a/java/darkknight/jewelrycraft/tileentity/TileEntitySmelter.java b/java/darkknight/jewelrycraft/tileentity/TileEntitySmelter.java
new file mode 100644
index 0000000..3330bd2
--- /dev/null
+++ b/java/darkknight/jewelrycraft/tileentity/TileEntitySmelter.java
@@ -0,0 +1,185 @@
+package darkknight.jewelrycraft.tileentity;
+
+import java.util.Random;
+
+import darkknight.jewelrycraft.config.ConfigHandler;
+import darkknight.jewelrycraft.util.JewelrycraftUtil;
+
+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;
+
+public class TileEntitySmelter extends TileEntity
+{
+ public int melting, flow, n = 0, p = 0;
+ public boolean hasMetal, hasMoltenMetal, isDirty, pouring;
+ public ItemStack metal, moltenMetal;
+ public float quantity, pouredQuantity = 0.1f;
+
+ public TileEntitySmelter()
+ {
+ this.melting = 0;
+ this.pouring = false;
+ this.flow = 0;
+ this.quantity = 0f;
+ this.hasMetal = false;
+ this.hasMoltenMetal = false;
+ this.metal = new ItemStack(Item.getItemById(0), 0, 0);
+ this.moltenMetal = new ItemStack(Item.getItemById(0), 0, 0);
+ this.isDirty = false;
+ }
+
+ @Override
+ public void writeToNBT(NBTTagCompound nbt)
+ {
+ super.writeToNBT(nbt);
+ nbt.setInteger("melting", melting);
+ nbt.setFloat("quantity", quantity);
+ nbt.setBoolean("hasMetal", hasMetal);
+ nbt.setBoolean("hasMoltenMetal", hasMoltenMetal);
+ nbt.setBoolean("pouring", pouring);
+ NBTTagCompound tag = new NBTTagCompound();
+ NBTTagCompound tag1 = new NBTTagCompound();
+ this.metal.writeToNBT(tag);
+ nbt.setTag("metal", tag);
+ this.moltenMetal.writeToNBT(tag1);
+ nbt.setTag("moltenMetal", tag1);
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound nbt)
+ {
+ super.readFromNBT(nbt);
+ this.melting = nbt.getInteger("melting");
+ this.quantity = nbt.getFloat("quantity");
+ this.hasMetal = nbt.getBoolean("hasMetal");
+ this.hasMoltenMetal = nbt.getBoolean("hasMoltenMetal");
+ this.pouring = nbt.getBoolean("pouring");
+ this.metal = new ItemStack(Item.getItemById(0), 0, 0);
+ this.metal.readFromNBT(nbt.getCompoundTag("metal"));
+ this.moltenMetal = new ItemStack(Item.getItemById(0), 0, 0);
+ this.moltenMetal.readFromNBT(nbt.getCompoundTag("moltenMetal"));
+ }
+
+ @Override
+ public void updateEntity()
+ {
+ super.updateEntity();
+ Random rand = new Random();
+ if (isDirty)
+ {
+ worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
+ isDirty = false;
+ }
+ if (p > 0) --p;
+ else p = 5;
+ if (n == 0 && p == 0)
+ {
+ flow += 16;
+ if (flow >= 16 * 20) n = 1;
+ }
+ if (n == 1 && p == 0)
+ {
+ flow -= 16;
+ if (flow <= 0) n = 0;
+ }
+ if (this.hasMetal)
+ {
+ for (int l = 0; l < 2; ++l)
+ this.worldObj.spawnParticle("flame", xCoord + rand.nextFloat(), (double) yCoord + 0.3F, zCoord + rand.nextFloat(), 0.0D, 0.0D, 0.0D);
+ }
+ if (rand.nextInt(65) == 0)
+ {
+ double d5 = this.xCoord + rand.nextFloat();
+ double d7 = this.yCoord;
+ double d6 = this.zCoord + rand.nextFloat();
+ this.worldObj.playSound(d5, d7, d6, "liquid.lavapop", 0.2F + rand.nextFloat() * 0.2F, 0.9F + rand.nextFloat() * 0.15F, false);
+ }
+ if (this.hasMetal && !this.hasMoltenMetal)
+ {
+ boolean isOre = JewelrycraftUtil.isOre(metal);
+ if (melting > 0) this.melting--;
+ if (melting == 0)
+ {
+ this.hasMetal = false;
+ if(!isOre) this.moltenMetal = metal;
+ else{
+ this.moltenMetal = JewelrycraftUtil.getIngotFromOre(metal.getItem());
+ moltenMetal.stackSize*=2;
+ }
+// System.out.println(JewelrycraftUtil.getIngotFromOre(metal) + " | " + JewelrycraftUtil.ores + " | " + JewelrycraftUtil.oreToIngot);
+ this.hasMoltenMetal = true;
+ if(!isOre) this.quantity = 0.1f * metal.stackSize;
+ else this.quantity = 0.2f * metal.stackSize;
+ this.metal = new ItemStack(Item.getItemById(0), 0, 0);
+ melting = -1;
+ this.isDirty = true;
+ }
+ }
+ else if (this.hasMoltenMetal)
+ {
+ boolean isOre = JewelrycraftUtil.isOre(metal);
+ if (melting > 0) this.melting--;
+ if (melting == 0)
+ {
+ this.hasMetal = false;
+ if(!isOre) this.moltenMetal.stackSize += this.metal.stackSize;
+ else this.moltenMetal.stackSize += this.metal.stackSize*2;
+ if(!isOre) this.quantity += 0.1f * metal.stackSize;
+ else this.quantity += 0.2f * metal.stackSize;
+ this.metal = new ItemStack(Item.getItemById(0), 0, 0);
+ melting = -1;
+ this.isDirty = true;
+ }
+ }
+ TileEntityMolder me = null;
+ if (worldObj.getBlockMetadata(xCoord, yCoord, zCoord) == 0 && worldObj.getTileEntity(xCoord, yCoord, zCoord - 1) != null && worldObj.getTileEntity(xCoord, yCoord, zCoord - 1) instanceof TileEntityMolder) me = (TileEntityMolder) worldObj.getTileEntity(xCoord, yCoord, zCoord - 1);
+ else if (worldObj.getBlockMetadata(xCoord, yCoord, zCoord) == 1 && worldObj.getTileEntity(xCoord + 1, yCoord, zCoord) != null && worldObj.getTileEntity(xCoord + 1, yCoord, zCoord) instanceof TileEntityMolder) me = (TileEntityMolder) worldObj.getTileEntity(xCoord + 1, yCoord, zCoord);
+ else if (worldObj.getBlockMetadata(xCoord, yCoord, zCoord) == 2 && worldObj.getTileEntity(xCoord, yCoord, zCoord + 1) != null && worldObj.getTileEntity(xCoord, yCoord, zCoord + 1) instanceof TileEntityMolder) me = (TileEntityMolder) worldObj.getTileEntity(xCoord, yCoord, zCoord + 1);
+ else if (worldObj.getBlockMetadata(xCoord, yCoord, zCoord) == 3 && worldObj.getTileEntity(xCoord - 1, yCoord, zCoord) != null && worldObj.getTileEntity(xCoord - 1, yCoord, zCoord) instanceof TileEntityMolder) me = (TileEntityMolder) worldObj.getTileEntity(xCoord - 1, yCoord, zCoord);
+ if (pouring && pouredQuantity > 0f)
+ {
+ quantity -= 0.01f;
+ pouredQuantity -= 0.01f;
+ me.quantity += 0.01f;
+ if (!me.hasMoltenMetal)
+ {
+ me.moltenMetal = moltenMetal;
+ me.hasMoltenMetal = true;
+ }
+ if (pouredQuantity <= 0f)
+ {
+ pouring = false;
+ pouredQuantity = 0.1f;
+ me.cooling = ConfigHandler.ingotCoolingTime;
+ }
+ if (quantity <= 0f)
+ {
+ quantity = 0f;
+ hasMoltenMetal = false;
+ moltenMetal = new ItemStack(Item.getItemById(0), 0, 0);
+ // pouring = false;
+ me.cooling = ConfigHandler.ingotCoolingTime;
+ }
+ me.isDirty = true;
+ }
+ }
+
+ public Packet getDescriptionPacket()
+ {
+ NBTTagCompound nbttagcompound = new NBTTagCompound();
+ this.writeToNBT(nbttagcompound);
+ return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbttagcompound);
+ }
+
+ @Override
+ public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet)
+ {
+ readFromNBT(packet.func_148857_g());
+ worldObj.func_147479_m(xCoord, yCoord, zCoord);
+ }
+}