aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/gtPlusPlus/xmod/thaumcraft/common/tile')
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java17
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastArcaneAlembic.java258
2 files changed, 263 insertions, 12 deletions
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