aboutsummaryrefslogtreecommitdiff
path: root/src/Java
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java')
-rw-r--r--src/Java/gtPlusPlus/core/handler/GuiHandler.java9
-rw-r--r--src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockEntityBase.java (renamed from src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockBase.java)8
-rw-r--r--src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockTileEntity.java43
-rw-r--r--src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java9
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/common/ItemBlockThaumcraft.java34
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java22
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastArcaneAlembic.java373
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java10
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java17
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastArcaneAlembic.java258
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/gui/ContainerFastAlchemyFurnace.java143
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/gui/GuiFastAlchemyFurnace.java45
12 files changed, 896 insertions, 75 deletions
diff --git a/src/Java/gtPlusPlus/core/handler/GuiHandler.java b/src/Java/gtPlusPlus/core/handler/GuiHandler.java
index 6791289f9f..cf7c90eca5 100644
--- a/src/Java/gtPlusPlus/core/handler/GuiHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/GuiHandler.java
@@ -32,6 +32,9 @@ import gtPlusPlus.core.tileentities.machines.TileEntityTradeTable;
import gtPlusPlus.core.tileentities.machines.TileEntityWorkbench;
import gtPlusPlus.core.tileentities.machines.TileEntityWorkbenchAdvanced;
import gtPlusPlus.core.util.Utils;
+import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastAlchemyFurnace;
+import gtPlusPlus.xmod.thaumcraft.gui.ContainerFastAlchemyFurnace;
+import gtPlusPlus.xmod.thaumcraft.gui.GuiFastAlchemyFurnace;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChunkCoordinates;
@@ -94,6 +97,9 @@ public class GuiHandler implements IGuiHandler {
else if (ID == GUI7){
return new Container_TradeTable(player.inventory, (TileEntityTradeTable)te);
}
+ else if (ID == GUI8){
+ return new ContainerFastAlchemyFurnace(player.inventory, (TileFastAlchemyFurnace)te);
+ }
}
if (ID == GUI9){
@@ -143,6 +149,9 @@ public class GuiHandler implements IGuiHandler {
else if (ID == GUI7){
return new GUI_TradeTable(player.inventory, (TileEntityTradeTable)te, ((TileEntityBase) te).getOwner());
}
+ else if (ID == GUI8){
+ return new GuiFastAlchemyFurnace(player.inventory, (TileFastAlchemyFurnace)te);
+ }
}
if (ID == GUI9){
diff --git a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockBase.java b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockEntityBase.java
index 372539ca7d..43a37b423c 100644
--- a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockBase.java
+++ b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockEntityBase.java
@@ -5,11 +5,13 @@ import net.minecraft.block.Block;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
-public class ItemBlockBase extends ItemBlock {
+public class ItemBlockEntityBase extends ItemBlock {
- public ItemBlockBase(final Block block) {
+ public ItemBlockEntityBase(final Block block) {
super(block);
- this.setCreativeTab(AddToCreativeTab.tabBlock);
+ this.setMaxDamage(0);
+ this.setHasSubtypes(true);
+ this.setCreativeTab(AddToCreativeTab.tabMachines);
}
@Override
diff --git a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockTileEntity.java b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockTileEntity.java
deleted file mode 100644
index 7a5f20833f..0000000000
--- a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockTileEntity.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package gtPlusPlus.core.item.base.itemblock;
-
-import java.util.List;
-
-import net.minecraft.block.Block;
-import net.minecraft.entity.Entity;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemBlock;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-
-public class ItemBlockTileEntity extends ItemBlock{
-
- String[] description;
-
- public ItemBlockTileEntity(final Block block) {
- super(block);
- }
-
- @Override
- public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) {
- for (int i =0; i< this.description.length; i++){
- if (!this.description[i].equals("")){
- list.add(this.description[i]);
- }
- }
-
-
- super.addInformation(stack, aPlayer, list, bool);
- }
-
- @Override
- public void onUpdate(final ItemStack iStack, final World world, final Entity entityHolding, final int p_77663_4_, final boolean p_77663_5_) {
-
- }
-
- public void setDecription(final String[] description){
- for (int i =0; i< description.length; i++){
- this.description[i] = description[i];
- }
- }
-
-}
diff --git a/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java b/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java
index 6dd948bcd1..83d274473c 100644
--- a/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java
+++ b/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java
@@ -1,13 +1,18 @@
package gtPlusPlus.core.tileentities;
import cpw.mods.fml.common.registry.GameRegistry;
-import gtPlusPlus.core.tileentities.general.*;
+import gtPlusPlus.core.tileentities.general.TileEntityFirepit;
+import gtPlusPlus.core.tileentities.general.TileEntityFishTrap;
+import gtPlusPlus.core.tileentities.general.TileEntityHeliumGenerator;
+import gtPlusPlus.core.tileentities.general.TileEntityInfiniteFluid;
import gtPlusPlus.core.tileentities.machines.TileEntityModularityTable;
import gtPlusPlus.core.tileentities.machines.TileEntityProjectTable;
import gtPlusPlus.core.tileentities.machines.TileEntityTradeTable;
import gtPlusPlus.core.tileentities.machines.TileEntityWorkbench;
import gtPlusPlus.core.tileentities.machines.TileEntityWorkbenchAdvanced;
import gtPlusPlus.core.util.Utils;
+import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastAlchemyFurnace;
+import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastArcaneAlembic;
public class ModTileEntities {
@@ -30,6 +35,8 @@ public class ModTileEntities {
GameRegistry.registerTileEntity(TileEntityProjectTable.class, "TileProjectTable");
GameRegistry.registerTileEntity(TileEntityTradeTable.class, "TileTradeTable");
GameRegistry.registerTileEntity(TileEntityModularityTable.class, "TileEntityModularityTable");
+ GameRegistry.registerTileEntity(TileFastAlchemyFurnace.class, "TileFastAlchemyFurnace");
+ GameRegistry.registerTileEntity(TileFastArcaneAlembic.class, "TileFastArcaneAlembic");
}
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/ItemBlockThaumcraft.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/ItemBlockThaumcraft.java
new file mode 100644
index 0000000000..465f443906
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/ItemBlockThaumcraft.java
@@ -0,0 +1,34 @@
+package gtPlusPlus.xmod.thaumcraft.common;
+
+import gtPlusPlus.core.item.base.itemblock.ItemBlockEntityBase;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class ItemBlockThaumcraft extends ItemBlockEntityBase{
+
+ public ItemBlockThaumcraft(final Block block) {
+ super(block);
+ }
+
+ @Override
+ public int getMetadata(final int par1) {
+ return par1;
+ }
+
+ @Override
+ public String getUnlocalizedName(final ItemStack par1ItemStack) {
+ return super.getUnlocalizedName() + "." + par1ItemStack.getItemDamage();
+ }
+
+ public boolean placeBlockAt(final ItemStack stack, final EntityPlayer player, final World world, final int x,
+ final int y, final int z, final int side, final float hitX, final float hitY, final float hitZ,
+ final int metadata) {
+ final boolean ret = super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata);
+ return ret;
+ }
+
+
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java
index eee996f6f9..bf4a61cfc9 100644
--- a/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java
@@ -10,12 +10,14 @@ import cpw.mods.fml.relauncher.SideOnly;
import gtPlusPlus.GTplusplus;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.handler.GuiHandler;
+import gtPlusPlus.xmod.thaumcraft.common.ItemBlockThaumcraft;
import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastAlchemyFurnace;
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.player.EntityPlayer;
-import net.minecraft.init.Blocks;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.tileentity.TileEntity;
@@ -24,17 +26,15 @@ import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
-import thaumcraft.common.Thaumcraft;
-import thaumcraft.common.blocks.BlockStoneDevice;
-import thaumcraft.common.config.ConfigBlocks;
import thaumcraft.common.lib.utils.InventoryUtils;
-public class BlockFastAlchemyFurnace extends BlockStoneDevice {
+public class BlockFastAlchemyFurnace extends BlockContainer {
public IIcon[] iconFurnace;
public IIcon[] iconPedestal;
public BlockFastAlchemyFurnace() {
+ super(Material.iron);
this.iconFurnace = new IIcon[5];
this.iconPedestal = new IIcon[2];
this.setCreativeTab(AddToCreativeTab.tabMachines);
@@ -43,7 +43,7 @@ public class BlockFastAlchemyFurnace extends BlockStoneDevice {
this.setResistance(25.0f);
this.setStepSound(Block.soundTypeStone);
this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
- GameRegistry.registerBlock(this, "blockFastAlchemyFurnace");
+ GameRegistry.registerBlock(this, ItemBlockThaumcraft.class, "blockFastAlchemyFurnace");
LanguageRegistry.addName(this, "Upgraded Alchemical Furnace");
}
@@ -122,13 +122,13 @@ public class BlockFastAlchemyFurnace extends BlockStoneDevice {
@Override
public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4,
final int par5, final int par6) {
- if (par5 == 1) {
+ /*if (par5 == 1) {
if (par1World.isRemote) {
Thaumcraft.proxy.blockSparkle(par1World, par2, par3, par4, 11960575, 2);
par1World.playAuxSFX(2001, par2, par3, par4, Block.getIdFromBlock(Blocks.stonebrick) + 0);
}
return true;
- }
+ }*/
return super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6);
}
@@ -192,10 +192,10 @@ public class BlockFastAlchemyFurnace extends BlockStoneDevice {
this.iconFurnace[4] = ir.registerIcon("thaumcraft:al_furnace_top_filled");
}
- @Override
+ /*@Override
public int getRenderType() {
return ConfigBlocks.blockStoneDeviceRI;
- }
+ }*/
@Override
public boolean isOpaqueCube() {
@@ -243,8 +243,6 @@ public class BlockFastAlchemyFurnace extends BlockStoneDevice {
}
return this.iconFurnace[2];
}
- } else if ((metadata == 1) || (metadata == 5) || (metadata == 8) || (metadata == 12)) {
- return super.getIcon(iblockaccess, i, j, k, side);
}
return this.iconFurnace[0];
}
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastArcaneAlembic.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastArcaneAlembic.java
new file mode 100644
index 0000000000..04c0673b49
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastArcaneAlembic.java
@@ -0,0 +1,373 @@
+package gtPlusPlus.xmod.thaumcraft.common.block;
+
+import java.util.List;
+import java.util.Random;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.common.registry.LanguageRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.core.creative.AddToCreativeTab;
+import gtPlusPlus.xmod.thaumcraft.common.ItemBlockThaumcraft;
+import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastArcaneAlembic;
+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.creativetab.CreativeTabs;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.ChatComponentTranslation;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.api.aspects.IEssentiaContainerItem;
+import thaumcraft.common.blocks.ItemJarFilled;
+import thaumcraft.common.config.ConfigBlocks;
+import thaumcraft.common.config.ConfigItems;
+import thaumcraft.common.lib.utils.InventoryUtils;
+
+public class BlockFastArcaneAlembic extends BlockContainer {
+ public IIcon[] icon;
+ public IIcon iconGlow;
+ private final int delay;
+
+ public BlockFastArcaneAlembic() {
+ super(Material.iron);
+ this.icon = new IIcon[23];
+ this.delay = 0;
+ this.setStepSound(Block.soundTypeMetal);
+ this.setCreativeTab(AddToCreativeTab.tabMachines);
+ this.setBlockName("blockFastArcaneAlembic");
+ this.setHardness(3.0f);
+ this.setResistance(25.0f);
+ this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
+ GameRegistry.registerBlock(this, ItemBlockThaumcraft.class, "blockFastArcaneAlembic");
+ LanguageRegistry.addName(this, "Upgraded Arcane Alembic");
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(final IIconRegister ir) {
+ this.icon[0] = ir.registerIcon("thaumcraft:metalbase");
+ for (int a = 1; a <= 6; ++a) {
+ this.icon[a] = ir.registerIcon("thaumcraft:crucible" + a);
+ }
+ this.icon[7] = ir.registerIcon("thaumcraft:goldbase");
+ this.iconGlow = ir.registerIcon("thaumcraft:animatedglow");
+ }
+
+ @Override
+ public IIcon getIcon(final int i, final int md) {
+ return ((md == 0) || (md == 1) || (md == 5) || (md == 6)) ? this.icon[0] : this.icon[7];
+ }
+
+ @Override
+ public IIcon getIcon(final IBlockAccess iblockaccess, final int i, final int j, final int k, final int side) {
+ if (side == 1) {
+ return this.icon[1];
+ }
+ if (side == 0) {
+ return this.icon[2];
+ }
+ return this.icon[3];
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List par3List) {
+ par3List.add(new ItemStack(par1, 1, 1));
+ }
+
+ @Override
+ public boolean isOpaqueCube() {
+ return false;
+ }
+
+ @Override
+ public boolean renderAsNormalBlock() {
+ return false;
+ }
+
+ @Override
+ public void onEntityCollidedWithBlock(final World world, final int i, final int j, final int k,
+ final Entity entity) {
+ if (!world.isRemote) {
+
+ }
+ }
+
+ @Override
+ public void addCollisionBoxesToList(final World world, final int i, final int j, final int k,
+ final AxisAlignedBB axisalignedbb, final List arraylist, final Entity par7Entity) {
+ this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
+ super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void randomDisplayTick(final World w, final int i, final int j, final int k, final Random r) {
+
+ }
+
+ @Override
+ public int damageDropped(final int metadata) {
+ return metadata;
+ }
+
+ @Override
+ public TileEntity createTileEntity(final World world, final int metadata) {
+
+ if (metadata == 1) {
+ return new TileFastArcaneAlembic();
+ }
+ return super.createTileEntity(world, metadata);
+ }
+
+ @Override
+ public boolean hasComparatorInputOverride() {
+ return true;
+ }
+
+ @Override
+ public int getComparatorInputOverride(final World world, final int x, final int y, final int z, final int rs) {
+ final TileEntity te = world.getTileEntity(x, y, z);
+ if ((te != null) && (te instanceof TileFastArcaneAlembic)) {
+ final float r = ((TileFastArcaneAlembic) te).amount / ((TileFastArcaneAlembic) te).maxAmount;
+ return MathHelper.floor_float(r * 14.0f) + ((((TileFastArcaneAlembic) te).amount > 0) ? 1 : 0);
+ }
+ return 0;
+ }
+
+ @Override
+ public TileEntity createNewTileEntity(final World var1, final int md) {
+ return null;
+ }
+
+ @Override
+ public void onNeighborBlockChange(final World world, final int x, final int y, final int z, final Block nbid) {
+ final TileEntity te = world.getTileEntity(x, y, z);
+ if (!world.isRemote) {
+ if ((te != null) && (te instanceof TileFastArcaneAlembic)) {
+ world.markBlockForUpdate(x, y, z);
+ }
+ }
+ super.onNeighborBlockChange(world, x, y, z, nbid);
+ }
+
+ @Override
+ public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5,
+ final int par6) {
+ InventoryUtils.dropItems(par1World, par2, par3, par4);
+ final TileEntity te = par1World.getTileEntity(par2, par3, par4);
+ if ((te != null) && (te instanceof TileFastArcaneAlembic) && (((TileFastArcaneAlembic) te).aspectFilter != null)) {
+ par1World.spawnEntityInWorld(new EntityItem(par1World, par2 + 0.5f,
+ par3 + 0.5f, par4 + 0.5f, new ItemStack(ConfigItems.itemResource, 1, 13)));
+ }
+ super.breakBlock(par1World, par2, par3, par4, par5, par6);
+ }
+
+ @Override
+ public boolean onBlockActivated(final World world, final int x, final int y, final int z, final EntityPlayer player,
+ final int side, final float par7, final float par8, final float par9) {
+ final int metadata = world.getBlockMetadata(x, y, z);
+
+ if ((metadata == 1) && !world.isRemote && !player.isSneaking() && (player.getHeldItem() == null)) {
+ final TileEntity te2 = world.getTileEntity(x, y, z);
+ if ((te2 != null) && (te2 instanceof TileFastArcaneAlembic)) {
+ final TileFastArcaneAlembic tile2 = (TileFastArcaneAlembic) te2;
+ String msg = "";
+ if ((tile2.aspect == null) || (tile2.amount == 0)) {
+ msg = StatCollector.translateToLocal("tile.alembic.msg.1");
+ } else if (tile2.amount < (tile2.maxAmount * 0.4)) {
+ msg = StatCollector.translateToLocal("tile.alembic.msg.2");
+ } else if (tile2.amount < (tile2.maxAmount * 0.8)) {
+ msg = StatCollector.translateToLocal("tile.alembic.msg.3");
+ } else if (tile2.amount < tile2.maxAmount) {
+ msg = StatCollector.translateToLocal("tile.alembic.msg.4");
+ } else if (tile2.amount == tile2.maxAmount) {
+ msg = StatCollector.translateToLocal("tile.alembic.msg.5");
+ }
+ player.addChatMessage(new ChatComponentTranslation("ยง3" + msg, new Object[0]));
+ world.playSoundEffect(x, y, z, "thaumcraft:alembicknock", 0.2f, 1.0f);
+ }
+ }
+ if (metadata == 1) {
+ final TileEntity te2 = world.getTileEntity(x, y, z);
+ if ((te2 != null) && (te2 instanceof TileFastArcaneAlembic)) {
+ if (player.isSneaking() && (((TileFastArcaneAlembic) te2).aspectFilter != null)) {
+ ((TileFastArcaneAlembic) te2).aspectFilter = null;
+ world.markBlockForUpdate(x, y, z);
+ te2.markDirty();
+ if (world.isRemote) {
+ world.playSound(x + 0.5f, y + 0.5f, z + 0.5f,
+ "thaumcraft:page", 1.0f, 1.1f, false);
+ } else {
+ final ForgeDirection fd = ForgeDirection.getOrientation(side);
+ world.spawnEntityInWorld(new EntityItem(world, x + 0.5f + (fd.offsetX / 3.0f),
+ y + 0.5f, z + 0.5f + (fd.offsetZ / 3.0f),
+ new ItemStack(ConfigItems.itemResource, 1, 13)));
+ }
+ return true;
+ }
+ if (player.isSneaking() && (player.getHeldItem() == null)) {
+ ((TileFastArcaneAlembic) te2).amount = 0;
+ ((TileFastArcaneAlembic) te2).aspect = null;
+ if (world.isRemote) {
+ world.playSound(x + 0.5f, y + 0.5f, z + 0.5f,
+ "thaumcraft:alembicknock", 0.2f, 1.0f, false);
+ world.playSound(x + 0.5f, y + 0.5f, z + 0.5f,
+ "game.neutral.swim", 0.5f,
+ 1.0f + ((world.rand.nextFloat() - world.rand.nextFloat()) * 0.3f), false);
+ }
+ } else if ((player.getHeldItem() != null) && (((TileFastArcaneAlembic) te2).aspectFilter == null)
+ && (player.getHeldItem().getItem() == ConfigItems.itemResource)
+ && (player.getHeldItem().getItemDamage() == 13)) {
+ if ((((TileFastArcaneAlembic) te2).amount == 0) && (((IEssentiaContainerItem) player.getHeldItem().getItem())
+ .getAspects(player.getHeldItem()) == null)) {
+ return true;
+ }
+ if ((((TileFastArcaneAlembic) te2).amount == 0) && (((IEssentiaContainerItem) player.getHeldItem().getItem())
+ .getAspects(player.getHeldItem()) != null)) {
+ ((TileFastArcaneAlembic) te2).aspect = ((IEssentiaContainerItem) player.getHeldItem().getItem())
+ .getAspects(player.getHeldItem()).getAspects()[0];
+ }
+ final ItemStack heldItem = player.getHeldItem();
+ --heldItem.stackSize;
+ ((TileFastArcaneAlembic) te2).aspectFilter = ((TileFastArcaneAlembic) te2).aspect;
+ world.markBlockForUpdate(x, y, z);
+ te2.markDirty();
+ if (world.isRemote) {
+ world.playSound(x + 0.5f, y + 0.5f, z + 0.5f,
+ "thaumcraft:page", 1.0f, 0.9f, false);
+ }
+ return true;
+ } else if ((player.getHeldItem() != null) && (((TileFastArcaneAlembic) te2).amount > 0)
+ && ((player.getHeldItem().getItem() == ConfigItems.itemJarFilled)
+ || player.getHeldItem().isItemEqual(new ItemStack(ConfigBlocks.blockJar, 1, 0))
+ || player.getHeldItem().isItemEqual(new ItemStack(ConfigBlocks.blockJar, 1, 3)))) {
+ boolean doit = false;
+ ItemStack drop = null;
+ if (player.getHeldItem().isItemEqual(new ItemStack(ConfigBlocks.blockJar, 1, 0))
+ || player.getHeldItem().isItemEqual(new ItemStack(ConfigBlocks.blockJar, 1, 3))) {
+ drop = new ItemStack(ConfigItems.itemJarFilled, 1, player.getHeldItem().getItemDamage());
+ doit = true;
+ ((ItemJarFilled) drop.getItem()).setAspects(drop,
+ new AspectList().add(((TileFastArcaneAlembic) te2).aspect, ((TileFastArcaneAlembic) te2).amount));
+ ((TileFastArcaneAlembic) te2).amount = 0;
+ ((TileFastArcaneAlembic) te2).aspect = null;
+ final ItemStack heldItem2 = player.getHeldItem();
+ --heldItem2.stackSize;
+ if (!player.inventory.addItemStackToInventory(drop) && !world.isRemote) {
+ world.spawnEntityInWorld(
+ new EntityItem(world, player.posX, player.posY, player.posZ, drop));
+ }
+ } else {
+ drop = player.getHeldItem();
+ if (((((ItemJarFilled) drop.getItem()).getAspects(drop) == null)
+ || (((ItemJarFilled) drop.getItem()).getAspects(drop).visSize() == 0)
+ || (((ItemJarFilled) drop.getItem()).getAspects(drop)
+ .getAmount(((TileFastArcaneAlembic) te2).aspect) > 0))
+ && ((((ItemJarFilled) drop.getItem()).getFilter(drop) == null)
+ || (((ItemJarFilled) drop.getItem())
+ .getFilter(drop) == ((TileFastArcaneAlembic) te2).aspect))) {
+ int amount = Math.min(
+ (((ItemJarFilled) drop.getItem()).getAspects(drop) == null)
+ ? 64
+ : (64 - ((ItemJarFilled) drop.getItem()).getAspects(drop).visSize()),
+ ((TileFastArcaneAlembic) te2).amount);
+ if (drop.getItemDamage() == 3) {
+ amount = ((TileFastArcaneAlembic) te2).amount;
+ }
+ if (amount > 0) {
+ final TileFastArcaneAlembic TileFastArcaneAlembic = (TileFastArcaneAlembic) te2;
+ TileFastArcaneAlembic.amount -= amount;
+ AspectList as = ((ItemJarFilled) drop.getItem()).getAspects(drop);
+ if (as == null) {
+ as = new AspectList();
+ }
+ as.add(((TileFastArcaneAlembic) te2).aspect, amount);
+ if (as.getAmount(((TileFastArcaneAlembic) te2).aspect) > 64) {
+ final int q = as.getAmount(((TileFastArcaneAlembic) te2).aspect) - 64;
+ as.reduce(((TileFastArcaneAlembic) te2).aspect, q);
+ }
+ ((ItemJarFilled) drop.getItem()).setAspects(drop, as);
+ if (((TileFastArcaneAlembic) te2).amount <= 0) {
+ ((TileFastArcaneAlembic) te2).aspect = null;
+ }
+ doit = true;
+ player.setCurrentItemOrArmor(0, drop);
+ }
+ }
+ }
+ if (doit) {
+ te2.markDirty();
+ world.markBlockForUpdate(x, y, z);
+ if (world.isRemote) {
+ world.playSound(x + 0.5f, y + 0.5f, z + 0.5f,
+ "game.neutral.swim", 0.5f,
+ 1.0f + ((world.rand.nextFloat() - world.rand.nextFloat()) * 0.3f), false);
+ }
+ }
+ return true;
+ }
+ }
+ }
+
+ if (world.isRemote) {
+ return true;
+ }
+
+ return super.onBlockActivated(world, x, y, z, player, side, par7, par8, par9);
+ }
+
+ public void onPoweredBlockChange(final World par1World, final int par2, final int par3, final int par4,
+ final boolean flag) {
+ final int l = par1World.getBlockMetadata(par2, par3, par4);
+ if ((l == 5) && flag) {
+ par1World.setBlockMetadataWithNotify(par2, par3, par4, 6, 2);
+ par1World.playAuxSFXAtEntity((EntityPlayer) null, 1003, par2, par3, par4, 0);
+ } else if ((l == 6) && !flag) {
+ par1World.setBlockMetadataWithNotify(par2, par3, par4, 5, 2);
+ par1World.playAuxSFXAtEntity((EntityPlayer) null, 1003, par2, par3, par4, 0);
+ }
+ }
+
+ @Override
+ public void onBlockPlacedBy(final World world, final int par2, final int par3, final int par4,
+ final EntityLivingBase ent, final ItemStack stack) {
+ final int l = MathHelper.floor_double(((ent.rotationYaw * 4.0f) / 360.0f) + 0.5) & 0x3;
+ if (stack.getItemDamage() == 1) {
+ final TileEntity tile = world.getTileEntity(par2, par3, par4);
+ if (tile instanceof TileFastArcaneAlembic) {
+ if (l == 0) {
+ ((TileFastArcaneAlembic) tile).facing = 2;
+ }
+ if (l == 1) {
+ ((TileFastArcaneAlembic) tile).facing = 5;
+ }
+ if (l == 2) {
+ ((TileFastArcaneAlembic) tile).facing = 3;
+ }
+ if (l == 3) {
+ ((TileFastArcaneAlembic) tile).facing = 4;
+ }
+ }
+ }
+ }
+
+ @Override
+ public int getLightValue(final IBlockAccess world, final int x, final int y, final int z) {
+ return super.getLightValue(world, x, y, z);
+ }
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java
index fade8601f0..0b8d18f7d2 100644
--- a/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java
@@ -4,10 +4,12 @@ import net.minecraft.block.Block;
public class TC_BlockHandler {
- static Block blockFurnace;
-
+ public static Block blockFastAlchemyFurnace;
+ public static Block blockFastArcaneAlembic;
+
public static void run(){
- blockFurnace = new BlockFastAlchemyFurnace();
+ blockFastAlchemyFurnace = new BlockFastAlchemyFurnace();
+ blockFastArcaneAlembic = new BlockFastArcaneAlembic();
}
-
+
}
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java
index ec39e7f4af..756578a536 100644
--- a/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java
@@ -4,6 +4,7 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
+import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
@@ -13,15 +14,15 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraft.world.EnumSkyBlock;
import net.minecraftforge.common.util.ForgeDirection;
+import thaumcraft.api.TileThaumcraft;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.AspectList;
import thaumcraft.common.config.ConfigItems;
import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager;
-import thaumcraft.common.tiles.TileAlchemyFurnace;
import thaumcraft.common.tiles.TileAlembic;
import thaumcraft.common.tiles.TileBellows;
-public class TileFastAlchemyFurnace extends TileAlchemyFurnace {
+public class TileFastAlchemyFurnace extends TileThaumcraft implements ISidedInventory {
private static final int[] slots_bottom;
private static final int[] slots_top;
private static final int[] slots_sides;
@@ -103,7 +104,6 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace {
return (this.customName != null) && (this.customName.length() > 0);
}
- @Override
public void setGuiDisplayName(final String par1Str) {
this.customName = par1Str;
}
@@ -168,7 +168,6 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace {
return 64;
}
- @Override
@SideOnly(Side.CLIENT)
public int getCookProgressScaled(final int par1) {
if (this.smeltTime <= 0) {
@@ -177,13 +176,11 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace {
return (this.furnaceCookTime * par1) / this.smeltTime;
}
- @Override
@SideOnly(Side.CLIENT)
public int getContentsScaled(final int par1) {
return (this.vis * par1) / this.maxVis;
}
- @Override
@SideOnly(Side.CLIENT)
public int getBurnTimeRemainingScaled(final int par1) {
if (this.currentItemBurnTime == 0) {
@@ -192,7 +189,6 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace {
return (this.furnaceBurnTime * par1) / this.currentItemBurnTime;
}
- @Override
public boolean isBurning() {
return this.furnaceBurnTime > 0;
}
@@ -229,9 +225,10 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace {
while (deep < 5) {
++deep;
tile = this.worldObj.getTileEntity(this.xCoord, this.yCoord + deep, this.zCoord);
- if (!(tile instanceof TileAlembic)) {
+ if (!(tile instanceof TileAlembic) || !(tile instanceof TileFastArcaneAlembic)) {
break;
}
+
final TileAlembic alembic = (TileAlembic) tile;
if ((alembic.aspect != null) && (alembic.amount < alembic.maxAmount)
&& (this.aspects.getAmount(alembic.aspect) > 0)) {
@@ -325,13 +322,11 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace {
return true;
}
- @Override
public void getBellows() {
this.bellows = TileBellows.getBellows(this.worldObj, this.xCoord, this.yCoord, this.zCoord,
ForgeDirection.VALID_DIRECTIONS);
}
- @Override
public void smeltItem() {
if (this.canSmelt()) {
AspectList al = ThaumcraftCraftingManager.getObjectTags(this.furnaceItemStacks[0]);
@@ -395,7 +390,6 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace {
return (par3 != 0) || (par1 != 1) || (par2ItemStack.getItem() == Items.bucket);
}
- @Override
public Aspect takeRandomAspect(final AspectList exlude) {
if (this.aspects.size() > 0) {
final AspectList temp = this.aspects.copy();
@@ -414,7 +408,6 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace {
return null;
}
- @Override
public boolean takeFromContainer(final Aspect tag, final int amount) {
if ((this.aspects != null) && (this.aspects.getAmount(tag) >= amount)) {
this.aspects.remove(tag, amount);
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastArcaneAlembic.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastArcaneAlembic.java
new file mode 100644
index 0000000000..b89f9a4229
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastArcaneAlembic.java
@@ -0,0 +1,258 @@
+package gtPlusPlus.xmod.thaumcraft.common.tile;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.xmod.thaumcraft.common.block.TC_BlockHandler;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.NetworkManager;
+import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.common.config.ConfigBlocks;
+import thaumcraft.common.tiles.TileAlembic;
+
+public class TileFastArcaneAlembic extends TileAlembic {
+ public Aspect aspect;
+ public Aspect aspectFilter;
+ public int amount;
+ public int maxAmount;
+ public int facing;
+ public boolean aboveAlembic;
+ public boolean aboveFurnace;
+ ForgeDirection fd;
+
+ public TileFastArcaneAlembic() {
+ this.aspectFilter = null;
+ this.amount = 0;
+ this.maxAmount = 64;
+ this.facing = 2;
+ this.aboveAlembic = false;
+ this.aboveFurnace = false;
+ this.fd = null;
+ }
+
+ @Override
+ public AspectList getAspects() {
+ return (this.aspect != null) ? new AspectList().add(this.aspect, this.amount) : new AspectList();
+ }
+
+ @Override
+ public void setAspects(final AspectList aspects) {
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public AxisAlignedBB getRenderBoundingBox() {
+ return AxisAlignedBB.getBoundingBox(this.xCoord - 1, this.yCoord,
+ this.zCoord - 1, this.xCoord + 2, this.yCoord + 1,
+ this.zCoord + 2);
+ }
+
+ @Override
+ public void readCustomNBT(final NBTTagCompound nbttagcompound) {
+ this.facing = nbttagcompound.getByte("facing");
+ this.aspectFilter = Aspect.getAspect(nbttagcompound.getString("AspectFilter"));
+ final String tag = nbttagcompound.getString("aspect");
+ if (tag != null) {
+ this.aspect = Aspect.getAspect(tag);
+ }
+ this.amount = nbttagcompound.getShort("amount");
+ this.fd = ForgeDirection.getOrientation(this.facing);
+ }
+
+ @Override
+ public void writeCustomNBT(final NBTTagCompound nbttagcompound) {
+ if (this.aspect != null) {
+ nbttagcompound.setString("aspect", this.aspect.getTag());
+ }
+ if (this.aspectFilter != null) {
+ nbttagcompound.setString("AspectFilter", this.aspectFilter.getTag());
+ }
+ nbttagcompound.setShort("amount", (short) this.amount);
+ nbttagcompound.setByte("facing", (byte) this.facing);
+ }
+
+ @Override
+ public boolean canUpdate() {
+ return false;
+ }
+
+ @Override
+ public int addToContainer(final Aspect tt, int am) {
+ if (((this.amount < this.maxAmount) && (tt == this.aspect)) || (this.amount == 0)) {
+ this.aspect = tt;
+ final int added = Math.min(am, this.maxAmount - this.amount);
+ this.amount += added;
+ am -= added;
+ }
+ this.markDirty();
+ this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
+ return am;
+ }
+
+ @Override
+ public boolean takeFromContainer(final Aspect tt, final int am) {
+ if ((this.amount == 0) || (this.aspect == null)) {
+ this.aspect = null;
+ this.amount = 0;
+ }
+ if ((this.aspect != null) && (this.amount >= am) && (tt == this.aspect)) {
+ this.amount -= am;
+ if (this.amount <= 0) {
+ this.aspect = null;
+ this.amount = 0;
+ }
+ this.markDirty();
+ this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean doesContainerContain(final AspectList ot) {
+ return (this.amount > 0) && (this.aspect != null) && (ot.getAmount(this.aspect) > 0);
+ }
+
+ @Override
+ public boolean doesContainerContainAmount(final Aspect tt, final int am) {
+ return (this.amount >= am) && (tt == this.aspect);
+ }
+
+ @Override
+ public int containerContains(final Aspect tt) {
+ return (tt == this.aspect) ? this.amount : 0;
+ }
+
+ @Override
+ public boolean doesContainerAccept(final Aspect tag) {
+ return true;
+ }
+
+ @Override
+ public boolean takeFromContainer(final AspectList ot) {
+ return false;
+ }
+
+ @Override
+ public void getAppearance() {
+ this.aboveAlembic = false;
+ this.aboveFurnace = false;
+ if ((this.worldObj.getBlock(this.xCoord, this.yCoord - 1, this.zCoord) == ConfigBlocks.blockStoneDevice)
+ && (this.worldObj.getBlockMetadata(this.xCoord, this.yCoord - 1, this.zCoord) == 0)) {
+ this.aboveFurnace = true;
+ }
+ else if ((this.worldObj.getBlock(this.xCoord, this.yCoord - 1, this.zCoord) == TC_BlockHandler.blockFastAlchemyFurnace)
+ && (this.worldObj.getBlockMetadata(this.xCoord, this.yCoord - 1, this.zCoord) == 0)) {
+ this.aboveFurnace = true;
+ }
+
+ if ((this.worldObj.getBlock(this.xCoord, this.yCoord - 1, this.zCoord) == ConfigBlocks.blockMetalDevice)
+ && (this.worldObj.getBlockMetadata(this.xCoord, this.yCoord - 1, this.zCoord) == this
+ .getBlockMetadata())) {
+ this.aboveAlembic = true;
+ }
+ else if ((this.worldObj.getBlock(this.xCoord, this.yCoord - 1, this.zCoord) == TC_BlockHandler.blockFastArcaneAlembic)
+ && (this.worldObj.getBlockMetadata(this.xCoord, this.yCoord - 1, this.zCoord) == 1)) {
+ this.aboveAlembic = true;
+ }
+ }
+
+ @Override
+ public void onDataPacket(final NetworkManager net, final S35PacketUpdateTileEntity pkt) {
+ super.onDataPacket(net, pkt);
+ this.getAppearance();
+ }
+
+ @Override
+ public int onWandRightClick(final World world, final ItemStack wandstack, final EntityPlayer player, final int x,
+ final int y, final int z, final int side, final int md) {
+ if (side <= 1) {
+ return 0;
+ }
+ this.facing = side;
+ this.fd = ForgeDirection.getOrientation(this.facing);
+ this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
+ player.swingItem();
+ this.markDirty();
+ return 0;
+ }
+
+ @Override
+ public ItemStack onWandRightClick(final World world, final ItemStack wandstack, final EntityPlayer player) {
+ return null;
+ }
+
+ @Override
+ public void onUsingWandTick(final ItemStack wandstack, final EntityPlayer player, final int count) {
+ }
+
+ @Override
+ public void onWandStoppedUsing(final ItemStack wandstack, final World world, final EntityPlayer player,
+ final int count) {
+ }
+
+ @Override
+ public boolean isConnectable(final ForgeDirection face) {
+ return (face != ForgeDirection.getOrientation(this.facing)) && (face != ForgeDirection.DOWN);
+ }
+
+ @Override
+ public boolean canInputFrom(final ForgeDirection face) {
+ return false;
+ }
+
+ @Override
+ public boolean canOutputTo(final ForgeDirection face) {
+ return (face != ForgeDirection.getOrientation(this.facing)) && (face != ForgeDirection.DOWN);
+ }
+
+ @Override
+ public void setSuction(final Aspect aspect, final int amount) {
+ }
+
+ @Override
+ public Aspect getSuctionType(final ForgeDirection loc) {
+ return null;
+ }
+
+ @Override
+ public int getSuctionAmount(final ForgeDirection loc) {
+ return 0;
+ }
+
+ @Override
+ public Aspect getEssentiaType(final ForgeDirection loc) {
+ return this.aspect;
+ }
+
+ @Override
+ public int getEssentiaAmount(final ForgeDirection loc) {
+ return this.amount;
+ }
+
+ @Override
+ public int takeEssentia(final Aspect aspect, final int amount, final ForgeDirection face) {
+ return (this.canOutputTo(face) && this.takeFromContainer(aspect, amount)) ? amount : 0;
+ }
+
+ @Override
+ public int addEssentia(final Aspect aspect, final int amount, final ForgeDirection loc) {
+ return 0;
+ }
+
+ @Override
+ public int getMinimumSuction() {
+ return 0;
+ }
+
+ @Override
+ public boolean renderExtendedTube() {
+ return true;
+ }
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/gui/ContainerFastAlchemyFurnace.java b/src/Java/gtPlusPlus/xmod/thaumcraft/gui/ContainerFastAlchemyFurnace.java
new file mode 100644
index 0000000000..e06d83846e
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/gui/ContainerFastAlchemyFurnace.java
@@ -0,0 +1,143 @@
+package gtPlusPlus.xmod.thaumcraft.gui;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastAlchemyFurnace;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Container;
+import net.minecraft.inventory.ICrafting;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.common.container.SlotLimitedHasAspects;
+import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager;
+
+public class ContainerFastAlchemyFurnace extends Container {
+ private final TileFastAlchemyFurnace furnace;
+ private int lastCookTime;
+ private int lastBurnTime;
+ private int lastItemBurnTime;
+ private int lastVis;
+ private int lastSmelt;
+
+ public ContainerFastAlchemyFurnace(final InventoryPlayer par1InventoryPlayer, final TileFastAlchemyFurnace tileEntity) {
+ this.furnace = tileEntity;
+ this.addSlotToContainer(new SlotLimitedHasAspects(tileEntity, 0, 80, 8));
+ this.addSlotToContainer(new Slot(tileEntity, 1, 80, 48));
+ for (int i = 0; i < 3; ++i) {
+ for (int j = 0; j < 9; ++j) {
+ this.addSlotToContainer(
+ new Slot(par1InventoryPlayer, j + (i * 9) + 9, 8 + (j * 18), 84 + (i * 18)));
+ }
+ }
+ for (int i = 0; i < 9; ++i) {
+ this.addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + (i * 18), 142));
+ }
+ }
+
+ @Override
+ public void addCraftingToCrafters(final ICrafting par1ICrafting) {
+ super.addCraftingToCrafters(par1ICrafting);
+ par1ICrafting.sendProgressBarUpdate(this, 0, this.furnace.furnaceCookTime);
+ par1ICrafting.sendProgressBarUpdate(this, 1, this.furnace.furnaceBurnTime);
+ par1ICrafting.sendProgressBarUpdate(this, 2, this.furnace.currentItemBurnTime);
+ par1ICrafting.sendProgressBarUpdate(this, 3, this.furnace.vis);
+ par1ICrafting.sendProgressBarUpdate(this, 4, this.furnace.smeltTime);
+ }
+
+ @Override
+ public void detectAndSendChanges() {
+ super.detectAndSendChanges();
+ for (int i = 0; i < this.crafters.size(); ++i) {
+ final ICrafting icrafting = (ICrafting) this.crafters.get(i);
+ if (this.lastCookTime != this.furnace.furnaceCookTime) {
+ icrafting.sendProgressBarUpdate(this, 0, this.furnace.furnaceCookTime);
+ }
+ if (this.lastBurnTime != this.furnace.furnaceBurnTime) {
+ icrafting.sendProgressBarUpdate(this, 1, this.furnace.furnaceBurnTime);
+ }
+ if (this.lastItemBurnTime != this.furnace.currentItemBurnTime) {
+ icrafting.sendProgressBarUpdate(this, 2, this.furnace.currentItemBurnTime);
+ }
+ if (this.lastVis != this.furnace.vis) {
+ icrafting.sendProgressBarUpdate(this, 3, this.furnace.vis);
+ }
+ if (this.lastSmelt != this.furnace.smeltTime) {
+ icrafting.sendProgressBarUpdate(this, 4, this.furnace.smeltTime);
+ }
+ }
+ this.lastCookTime = this.furnace.furnaceCookTime;
+ this.lastBurnTime = this.furnace.furnaceBurnTime;
+ this.lastItemBurnTime = this.furnace.currentItemBurnTime;
+ this.lastVis = this.furnace.vis;
+ this.lastSmelt = this.furnace.smeltTime;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void updateProgressBar(final int par1, final int par2) {
+ if (par1 == 0) {
+ this.furnace.furnaceCookTime = par2;
+ }
+ if (par1 == 1) {
+ this.furnace.furnaceBurnTime = par2;
+ }
+ if (par1 == 2) {
+ this.furnace.currentItemBurnTime = par2;
+ }
+ if (par1 == 3) {
+ this.furnace.vis = par2;
+ }
+ if (par1 == 4) {
+ this.furnace.smeltTime = par2;
+ }
+ }
+
+ @Override
+ public boolean canInteractWith(final EntityPlayer par1EntityPlayer) {
+ return this.furnace.isUseableByPlayer(par1EntityPlayer);
+ }
+
+ @Override
+ public ItemStack transferStackInSlot(final EntityPlayer par1EntityPlayer, final int par2) {
+ ItemStack itemstack = null;
+ final Slot slot = (Slot) this.inventorySlots.get(par2);
+ if ((slot != null) && slot.getHasStack()) {
+ final ItemStack itemstack2 = slot.getStack();
+ itemstack = itemstack2.copy();
+ if ((par2 != 1) && (par2 != 0)) {
+ AspectList al = ThaumcraftCraftingManager.getObjectTags(itemstack2);
+ al = ThaumcraftCraftingManager.getBonusTags(itemstack2, al);
+ if (TileFastAlchemyFurnace.isItemFuel(itemstack2)) {
+ if (!this.mergeItemStack(itemstack2, 1, 2, false)
+ && !this.mergeItemStack(itemstack2, 0, 1, false)) {
+ return null;
+ }
+ } else if ((al != null) && (al.size() > 0)) {
+ if (!this.mergeItemStack(itemstack2, 0, 1, false)) {
+ return null;
+ }
+ } else if ((par2 >= 2) && (par2 < 29)) {
+ if (!this.mergeItemStack(itemstack2, 29, 38, false)) {
+ return null;
+ }
+ } else if ((par2 >= 29) && (par2 < 38) && !this.mergeItemStack(itemstack2, 2, 29, false)) {
+ return null;
+ }
+ } else if (!this.mergeItemStack(itemstack2, 2, 38, false)) {
+ return null;
+ }
+ if (itemstack2.stackSize == 0) {
+ slot.putStack((ItemStack) null);
+ } else {
+ slot.onSlotChanged();
+ }
+ if (itemstack2.stackSize == itemstack.stackSize) {
+ return null;
+ }
+ slot.onPickupFromSlot(par1EntityPlayer, itemstack2);
+ }
+ return itemstack;
+ }
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/gui/GuiFastAlchemyFurnace.java b/src/Java/gtPlusPlus/xmod/thaumcraft/gui/GuiFastAlchemyFurnace.java
new file mode 100644
index 0000000000..5f23568bc1
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/gui/GuiFastAlchemyFurnace.java
@@ -0,0 +1,45 @@
+package gtPlusPlus.xmod.thaumcraft.gui;
+
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastAlchemyFurnace;
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.entity.player.InventoryPlayer;
+import thaumcraft.client.lib.UtilsFX;
+
+@SideOnly(Side.CLIENT)
+public class GuiFastAlchemyFurnace extends GuiContainer {
+ private final TileFastAlchemyFurnace furnaceInventory;
+
+ public GuiFastAlchemyFurnace(final InventoryPlayer par1InventoryPlayer,
+ final TileFastAlchemyFurnace par2TileEntityFurnace) {
+ super(new ContainerFastAlchemyFurnace(par1InventoryPlayer, par2TileEntityFurnace));
+ this.furnaceInventory = par2TileEntityFurnace;
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(final int par1, final int par2) {
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(final float par1, final int par2, final int par3) {
+ GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ UtilsFX.bindTexture("textures/gui/gui_alchemyfurnace.png");
+ final int k = (this.width - this.xSize) / 2;
+ final int l = (this.height - this.ySize) / 2;
+ GL11.glEnable(3042);
+ this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
+ if (this.furnaceInventory.isBurning()) {
+ final int i1 = this.furnaceInventory.getBurnTimeRemainingScaled(20);
+ this.drawTexturedModalRect(k + 80, (l + 26 + 20) - i1, 176, 20 - i1, 16, i1);
+ }
+ int i1 = this.furnaceInventory.getCookProgressScaled(46);
+ this.drawTexturedModalRect(k + 106, (l + 13 + 46) - i1, 216, 46 - i1, 9, i1);
+ i1 = this.furnaceInventory.getContentsScaled(48);
+ this.drawTexturedModalRect(k + 61, (l + 12 + 48) - i1, 200, 48 - i1, 8, i1);
+ this.drawTexturedModalRect(k + 60, l + 8, 232, 0, 10, 55);
+ GL11.glDisable(3042);
+ }
+} \ No newline at end of file