diff options
Diffstat (limited to 'src/Java/miscutil/enderio/conduit/GregTech')
12 files changed, 0 insertions, 1455 deletions
diff --git a/src/Java/miscutil/enderio/conduit/GregTech/AbstractGtConduit.java b/src/Java/miscutil/enderio/conduit/GregTech/AbstractGtConduit.java deleted file mode 100644 index de0fc13371..0000000000 --- a/src/Java/miscutil/enderio/conduit/GregTech/AbstractGtConduit.java +++ /dev/null @@ -1,73 +0,0 @@ -package miscutil.enderio.conduit.GregTech; - -import mekanism.api.gas.Gas; -import mekanism.api.gas.GasStack; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraftforge.common.util.ForgeDirection; -import crazypants.enderio.conduit.AbstractConduitNetwork; -import crazypants.enderio.conduit.gas.AbstractGasConduit; -import crazypants.enderio.conduit.geom.CollidableComponent; - -public class AbstractGtConduit extends AbstractGasConduit{ - - @Override - public ItemStack createItem() { - // TODO Auto-generated method stub - return null; - } - - @Override - public AbstractConduitNetwork<?, ?> getNetwork() { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean setNetwork(AbstractConduitNetwork<?, ?> network) { - // TODO Auto-generated method stub - return false; - } - - @Override - public IIcon getTextureForState(CollidableComponent component) { - // TODO Auto-generated method stub - return null; - } - - @Override - public IIcon getTransmitionTextureForState(CollidableComponent component) { - // TODO Auto-generated method stub - return null; - } - - @Override - public int receiveGas(ForgeDirection side, GasStack stack) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public GasStack drawGas(ForgeDirection side, int amount) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean canReceiveGas(ForgeDirection side, Gas type) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean canDrawGas(ForgeDirection side, Gas type) { - // TODO Auto-generated method stub - return false; - } - - protected boolean canJoinNeighbour(IGtConduit n) { - // TODO Auto-generated method stub - return false; - } - -} diff --git a/src/Java/miscutil/enderio/conduit/GregTech/AbstractGtTankConduit.java b/src/Java/miscutil/enderio/conduit/GregTech/AbstractGtTankConduit.java deleted file mode 100644 index 1b440aa0bb..0000000000 --- a/src/Java/miscutil/enderio/conduit/GregTech/AbstractGtTankConduit.java +++ /dev/null @@ -1,161 +0,0 @@ -package miscutil.enderio.conduit.GregTech; - -import java.util.List; - -import mekanism.api.gas.GasStack; -import mekanism.api.gas.IGasHandler; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import crazypants.enderio.conduit.AbstractConduitNetwork; -import crazypants.enderio.conduit.ConduitUtil; -import crazypants.enderio.conduit.ConnectionMode; -import crazypants.enderio.conduit.RaytraceResult; -import crazypants.enderio.tool.ToolUtil; -import crazypants.util.BlockCoord; - -public abstract class AbstractGtTankConduit extends AbstractGtConduit { - - protected ConduitGtTank tank = new ConduitGtTank(0); - protected boolean stateDirty = false; - protected long lastEmptyTick = 0; - protected int numEmptyEvents = 0; - - @Override - public boolean onBlockActivated(EntityPlayer player, RaytraceResult res, List<RaytraceResult> all) { - if(player.getCurrentEquippedItem() == null) { - return false; - } - if(ToolUtil.isToolEquipped(player)) { - - if(!getBundle().getEntity().getWorldObj().isRemote) { - - if(res != null && res.component != null) { - - ForgeDirection connDir = res.component.dir; - ForgeDirection faceHit = ForgeDirection.getOrientation(res.movingObjectPosition.sideHit); - - if(connDir == ForgeDirection.UNKNOWN || connDir == faceHit) { - - if(getConnectionMode(faceHit) == ConnectionMode.DISABLED) { - setConnectionMode(faceHit, getNextConnectionMode(faceHit)); - return true; - } - - BlockCoord loc = getLocation().getLocation(faceHit); - IGtConduit n = ConduitUtil.getConduit(getBundle().getEntity().getWorldObj(), loc.x, loc.y, loc.z, IGtConduit.class); - if(n == null) { - return false; - } - if(!canJoinNeighbour(n)) { - return false; - } - if(!(n instanceof AbstractGtTankConduit)) { - return false; - } - AbstractGtTankConduit neighbour = (AbstractGtTankConduit) n; - if(neighbour.getGasType() == null || getGasType() == null) { - GasStack type = getGasType(); - type = type != null ? type : neighbour.getGasType(); - neighbour.setGasTypeOnNetwork(neighbour, type); - setGasTypeOnNetwork(this, type); - } - return ConduitUtil.joinConduits(this, faceHit); - } else if(containsExternalConnection(connDir)) { - // Toggle extraction mode - setConnectionMode(connDir, getNextConnectionMode(connDir)); - } else if(containsConduitConnection(connDir)) { - GasStack curGasType = null; - if(getTankNetwork() != null) { - curGasType = getTankNetwork().getGasType(); - } - ConduitUtil.disconectConduits(this, connDir); - setGasType(curGasType); - - } - } - } - return true; - - } - - return false; - } - - private void setGasTypeOnNetwork(AbstractGtTankConduit con, GasStack type) { - AbstractConduitNetwork<?, ?> n = con.getNetwork(); - if(n != null) { - AbstractGtTankConduitNetwork<?> network = (AbstractGtTankConduitNetwork<?>) n; - network.setGasType(type); - } - - } - - protected abstract boolean canJoinNeighbour(IGtConduit n); - - public abstract AbstractGtTankConduitNetwork<? extends AbstractGtTankConduit> getTankNetwork(); - - public void setGasType(GasStack gasType) { - if(tank.getGas() != null && tank.getGas().isGasEqual(gasType)) { - return; - } - if(gasType != null) { - gasType = gasType.copy(); - } else if(tank.getGas() == null) { - return; - } - tank.setGas(gasType); - stateDirty = true; - } - - public ConduitGtTank getTank() { - return tank; - } - - public GasStack getGasType() { - GasStack result = null; - if(getTankNetwork() != null) { - result = getTankNetwork().getGasType(); - } - if(result == null) { - result = tank.getGas(); - } - return result; - } - - @Override - public boolean canOutputToDir(ForgeDirection dir) { - if (super.canOutputToDir(dir)) { - IGasHandler ext = getExternalHandler(dir); - return ext != null && ext.canReceiveGas(dir.getOpposite(), tank.getGasType()); - } - return false; - } - - protected abstract void updateTank(); - - @Override - public void readFromNBT(NBTTagCompound nbtRoot, short nbtVersion) { - super.readFromNBT(nbtRoot, nbtVersion); - updateTank(); - if(nbtRoot.hasKey("tank")) { - GasStack gas = GasStack.readFromNBT(nbtRoot.getCompoundTag("tank")); - tank.setGas(gas); - } else { - tank.setGas(null); - } - } - - @Override - public void writeToNBT(NBTTagCompound nbtRoot) { - super.writeToNBT(nbtRoot); - GasStack gt = getGasType(); - if(GtUtil.isGasValid(gt)) { - updateTank(); - gt = gt.copy(); - gt.amount = tank.getStored(); - nbtRoot.setTag("tank", gt.write(new NBTTagCompound())); - } - } - -} diff --git a/src/Java/miscutil/enderio/conduit/GregTech/AbstractGtTankConduitNetwork.java b/src/Java/miscutil/enderio/conduit/GregTech/AbstractGtTankConduitNetwork.java deleted file mode 100644 index e48a9b97e5..0000000000 --- a/src/Java/miscutil/enderio/conduit/GregTech/AbstractGtTankConduitNetwork.java +++ /dev/null @@ -1,64 +0,0 @@ -package miscutil.enderio.conduit.GregTech; - -import mekanism.api.gas.GasStack; -import crazypants.enderio.conduit.AbstractConduitNetwork; - -public class AbstractGtTankConduitNetwork<T extends AbstractGtTankConduit> extends AbstractConduitNetwork<IGtConduit, T> { - - protected GasStack gasType; - private int test; - protected AbstractGtTankConduitNetwork(Class<T> cl) { - super(cl); - } - - public GasStack getGasType() { - return gasType; - } - - @Override - public Class<IGtConduit> getBaseConduitType() { - return IGtConduit.class; - } - - @Override - public void addConduit(T con) { - super.addConduit(con); - con.setGasType(gasType); - } - - public boolean setGasType(GasStack newType) { - if(gasType != null && gasType.isGasEqual(newType)) { - return false; - } - if(newType != null) { - gasType = newType.copy(); - gasType.amount = 0; - } else { - gasType = null; - } - for (AbstractGtTankConduit conduit : conduits) { - conduit.setGasType(gasType); - } - return true; - } - - public boolean canAcceptGas(GasStack acceptable) { - return areGassCompatable(gasType, acceptable); - } - - public static boolean areGassCompatable(GasStack a, GasStack b) { - if(a == null || b == null) { - return true; - } - return a.isGasEqual(b); - } - - public int getTotalVolume() { - int totalVolume = 0; - for (T con : conduits) { - totalVolume += con.getTank().getStored(); - } - return totalVolume; - } - -} diff --git a/src/Java/miscutil/enderio/conduit/GregTech/ConduitGtTank.java b/src/Java/miscutil/enderio/conduit/GregTech/ConduitGtTank.java deleted file mode 100644 index d1a81f32d2..0000000000 --- a/src/Java/miscutil/enderio/conduit/GregTech/ConduitGtTank.java +++ /dev/null @@ -1,153 +0,0 @@ -package miscutil.enderio.conduit.GregTech; - -import mekanism.api.gas.GasStack; -import mekanism.api.gas.GasTank; -import net.minecraft.nbt.NBTTagCompound; - -public class ConduitGtTank extends GasTank { - - private int capacity; - - ConduitGtTank(int capacity) { - super(capacity); - this.capacity = capacity; - } - - public float getFilledRatio() { - if(getStored() <= 0) { - return 0; - } - if(getMaxGas() <= 0) { - return -1; - } - float res = (float) getStored() / getMaxGas(); - return res; - } - - public boolean isFull() { - return getStored() >= getMaxGas(); - } - - public void setAmount(int amount) { - if(stored != null) { - stored.amount = amount; - } - } - - public int getAvailableSpace() { - return getMaxGas() - getStored(); - } - - public void addAmount(int amount) { - setAmount(getStored() + amount); - } - - @Override - public int getMaxGas() { - return this.capacity; - } - - public void setCapacity(int capacity) { - this.capacity = capacity; - if(getStored() > capacity) { - setAmount(capacity); - } - } - - @Override - public int receive(GasStack resource, boolean doReceive) { - if(resource == null || resource.getGas().getID() < 0) { - return 0; - } - - if(stored == null || stored.getGas().getID() < 0) { - if(resource.amount <= capacity) { - if(doReceive) { - setGas(resource.copy()); - } - return resource.amount; - } else { - if(doReceive) { - stored = resource.copy(); - stored.amount = capacity; - } - return capacity; - } - } - - if(!stored.isGasEqual(resource)) { - return 0; - } - - int space = capacity - stored.amount; - if(resource.amount <= space) { - if(doReceive) { - addAmount(resource.amount); - } - return resource.amount; - } else { - if(doReceive) { - stored.amount = capacity; - } - return space; - } - - } - - @Override - public GasStack draw(int maxDrain, boolean doDraw) { - if(stored == null || stored.getGas().getID() < 0) { - return null; - } - if(stored.amount <= 0) { - return null; - } - - int used = maxDrain; - if(stored.amount < used) { - used = stored.amount; - } - - if(doDraw) { - addAmount(-used); - } - - GasStack drained = new GasStack(stored.getGas().getID(), used); - - if(stored.amount < 0) { - stored.amount = 0; - } - return drained; - } - - public String getGasName() { - return stored != null ? stored.getGas().getLocalizedName() : null; - } - - public boolean containsValidGas() { - return GtUtil.isGasValid(stored); - } - - public NBTTagCompound write(NBTTagCompound nbt) { - if(containsValidGas()) { - stored.write(nbt); - } else { - nbt.setBoolean("emptyGasTank", true); - } - return nbt; - } - - public void read(NBTTagCompound nbt) { - if(!nbt.hasKey("emptyGasTank")) { - GasStack gas = GasStack.readFromNBT(nbt); - if(gas != null) { - setGas(gas); - } - } - } - - public boolean isEmpty() { - return stored == null || stored.amount == 0; - } - -} diff --git a/src/Java/miscutil/enderio/conduit/GregTech/GtConduit.java b/src/Java/miscutil/enderio/conduit/GregTech/GtConduit.java deleted file mode 100644 index 3af9f089e4..0000000000 --- a/src/Java/miscutil/enderio/conduit/GregTech/GtConduit.java +++ /dev/null @@ -1,265 +0,0 @@ -package miscutil.enderio.conduit.GregTech; - -import java.util.HashMap; -import java.util.Map; - -import mekanism.api.gas.Gas; -import mekanism.api.gas.GasStack; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import crazypants.enderio.EnderIO; -import crazypants.enderio.conduit.AbstractConduitNetwork; -import crazypants.enderio.conduit.ConnectionMode; -import crazypants.enderio.conduit.IConduit; -import crazypants.enderio.conduit.geom.CollidableComponent; -import crazypants.enderio.config.Config; -import crazypants.render.IconUtil; -import crazypants.util.BlockCoord; - -public class GtConduit extends AbstractGtTankConduit { - - public static final int CONDUIT_VOLUME = 1000; - - public static final String ICON_KEY = "enderio:gasConduit"; - public static final String ICON_CORE_KEY = "enderio:gasConduitCore"; - public static final String ICON_EXTRACT_KEY = "enderio:gasConduitInput"; - public static final String ICON_INSERT_KEY = "enderio:gasConduitOutput"; - public static final String ICON_EMPTY_EDGE = "enderio:gasConduitEdge"; - - static final Map<String, IIcon> ICONS = new HashMap<String, IIcon>(); - - @SideOnly(Side.CLIENT) - public static void initIcons() { - IconUtil.addIconProvider(new IconUtil.IIconProvider() { - - @Override - public void registerIcons(IIconRegister register) { - ICONS.put(ICON_KEY, register.registerIcon(ICON_KEY)); - ICONS.put(ICON_CORE_KEY, register.registerIcon(ICON_CORE_KEY)); - ICONS.put(ICON_EXTRACT_KEY, register.registerIcon(ICON_EXTRACT_KEY)); - ICONS.put(ICON_INSERT_KEY, register.registerIcon(ICON_INSERT_KEY)); - ICONS.put(ICON_EMPTY_EDGE, register.registerIcon(ICON_EMPTY_EDGE)); - } - - @Override - public int getTextureType() { - return 0; - } - - }); - } - - private GtConduitNetwork network; - - private long ticksSinceFailedExtract = 0; - - public static final int MAX_EXTRACT_PER_TICK = Config.gasConduitExtractRate; - - public static final int MAX_IO_PER_TICK = Config.gasConduitMaxIoRate; - - public GtConduit() { - updateTank(); - } - - @Override - public void updateEntity(World world) { - super.updateEntity(world); - if(world.isRemote) { - return; - } - doExtract(); - if(stateDirty) { - getBundle().dirty(); - stateDirty = false; - } - } - - private void doExtract() { - BlockCoord loc = getLocation(); - if(!hasConnectionMode(ConnectionMode.INPUT)) { - return; - } - if(network == null) { - return; - } - - // assume failure, reset to 0 if we do extract - ticksSinceFailedExtract++; - if(ticksSinceFailedExtract > 25 && ticksSinceFailedExtract % 10 != 0) { - // after 25 ticks of failing, only check every 10 ticks - return; - } - - Gas f = tank.getGas() == null ? null : tank.getGas().getGas(); - for (ForgeDirection dir : externalConnections) { - if(autoExtractForDir(dir)) { - if(network.extractFrom(this, dir, MAX_EXTRACT_PER_TICK)) { - ticksSinceFailedExtract = 0; - } - } - } - - } - - @Override - protected void updateTank() { - tank.setCapacity(CONDUIT_VOLUME); - if(network != null) { - network.updateConduitVolumes(); - } - } - - @Override - public ItemStack createItem() { - return new ItemStack(EnderIO.itemGasConduit); - } - - @Override - public AbstractConduitNetwork<?, ?> getNetwork() { - return network; - } - - @Override - public boolean setNetwork(AbstractConduitNetwork<?, ?> network) { - if(network == null) { - this.network = null; - return true; - } - if(!(network instanceof GtConduitNetwork)) { - return false; - } - - GtConduitNetwork n = (GtConduitNetwork) network; - if(tank.getGas() == null) { - tank.setGas(n.getGasType() == null ? null : n.getGasType().copy()); - } else if(n.getGasType() == null) { - n.setGasType(tank.getGas()); - } else if(!tank.getGas().isGasEqual(n.getGasType())) { - return false; - } - this.network = n; - return true; - - } - - @Override - public boolean canConnectToConduit(ForgeDirection direction, IConduit con) { - if(!super.canConnectToConduit(direction, con)) { - return false; - } - if(!(con instanceof GtConduit)) { - return false; - } - if(getGasType() != null && ((GtConduit) con).getGasType() == null) { - return false; - } - return GtConduitNetwork.areGassCompatable(getGasType(), ((GtConduit) con).getGasType()); - } - - @Override - public void setConnectionMode(ForgeDirection dir, ConnectionMode mode) { - super.setConnectionMode(dir, mode); - refreshInputs(dir); - } - - private void refreshInputs(ForgeDirection dir) { - if(network == null) { - return; - } - GtOutput lo = new GtOutput(getLocation().getLocation(dir), dir.getOpposite()); - network.removeInput(lo); - if(getConnectionMode(dir).acceptsOutput() && containsExternalConnection(dir)) { - network.addInput(lo); - } - } - - @Override - public void externalConnectionAdded(ForgeDirection fromDirection) { - super.externalConnectionAdded(fromDirection); - refreshInputs(fromDirection); - } - - @Override - public void externalConnectionRemoved(ForgeDirection fromDirection) { - super.externalConnectionRemoved(fromDirection); - refreshInputs(fromDirection); - } - - @Override - public IIcon getTextureForState(CollidableComponent component) { - if(component.dir == ForgeDirection.UNKNOWN) { - return ICONS.get(ICON_CORE_KEY); - } - return ICONS.get(ICON_KEY); - } - - public IIcon getTextureForInputMode() { - return ICONS.get(ICON_EXTRACT_KEY); - } - - public IIcon getTextureForOutputMode() { - return ICONS.get(ICON_INSERT_KEY); - } - - public IIcon getNotSetEdgeTexture() { - return ICONS.get(ICON_EMPTY_EDGE); - } - - @Override - public IIcon getTransmitionTextureForState(CollidableComponent component) { - if(isActive() && tank.containsValidGas()) { - return tank.getGas().getGas().getIcon(); - } - return null; - } - - // ------------------------------------------- Gas API - - @Override - public int receiveGas(ForgeDirection from, GasStack resource) { - if(network == null || !getConnectionMode(from).acceptsInput()) { - return 0; - } - return network.fill(from, resource, true); - } - - @Override - public GasStack drawGas(ForgeDirection from, int maxDrain) { - if(network == null || !getConnectionMode(from).acceptsOutput()) { - return null; - } - return network.drain(from, maxDrain, true); - } - - @Override - public boolean canReceiveGas(ForgeDirection from, Gas gas) { - if(network == null) { - return false; - } - return getConnectionMode(from).acceptsInput() && GtConduitNetwork.areGassCompatable(getGasType(), new GasStack(gas, 0)); - } - - @Override - public boolean canDrawGas(ForgeDirection from, Gas gas) { - if(network == null) { - return false; - } - return getConnectionMode(from).acceptsOutput() && GtConduitNetwork.areGassCompatable(getGasType(), new GasStack(gas, 0)); - } - - @Override - protected boolean canJoinNeighbour(IGtConduit n) { - return n instanceof GtConduit; - } - - @Override - public AbstractGtTankConduitNetwork<? extends AbstractGtTankConduit> getTankNetwork() { - return network; - } - -} diff --git a/src/Java/miscutil/enderio/conduit/GregTech/GtConduitNetwork.java b/src/Java/miscutil/enderio/conduit/GregTech/GtConduitNetwork.java deleted file mode 100644 index 7855547a7e..0000000000 --- a/src/Java/miscutil/enderio/conduit/GregTech/GtConduitNetwork.java +++ /dev/null @@ -1,310 +0,0 @@ -package miscutil.enderio.conduit.GregTech; - -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - -import mekanism.api.gas.GasStack; -import mekanism.api.gas.IGasHandler; -import miscutil.enderio.conduit.ConduitGTHandler; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent; -import crazypants.enderio.conduit.ConduitNetworkTickHandler; -import crazypants.enderio.conduit.ConduitNetworkTickHandler.TickListener; -import crazypants.enderio.conduit.IConduit; -import crazypants.util.BlockCoord; - -public class GtConduitNetwork extends AbstractGtTankConduitNetwork<GtConduit> { - - private final ConduitGtTank tank = new ConduitGtTank(0); - - private final Set<GtOutput> outputs = new HashSet<GtOutput>(); - - private Iterator<GtOutput> outputIterator; - - private int ticksActiveUnsynced; - - private boolean lastSyncedActive = false; - - private int lastSyncedVolume = -1; - - private long timeAtLastApply; - - private final InnerTickHandler tickHandler = new InnerTickHandler(); - - public GtConduitNetwork() { - super(GtConduit.class); - } - - @Override - public Class<IGtConduit> getBaseConduitType() { - return IGtConduit.class; - } - - @Override - public void addConduit(GtConduit con) { - tank.setCapacity(tank.getMaxGas() + GtConduit.CONDUIT_VOLUME); - if(con.getTank().containsValidGas()) { - tank.addAmount(con.getTank().getStored()); - } - for (ForgeDirection dir : con.getExternalConnections()) { - if(con.getConnectionMode(dir).acceptsOutput()) { - outputs.add(new GtOutput(con.getLocation().getLocation(dir), dir.getOpposite())); - } - } - outputIterator = null; - super.addConduit(con); - } - - @Override - public boolean setGasType(GasStack newType) { - if(super.setGasType(newType)) { - - GasStack ft = getGasType(); - tank.setGas(ft == null ? null : ft.copy()); - return true; - } - return false; - } - - @Override - public void destroyNetwork() { - setConduitVolumes(); - outputs.clear(); - super.destroyNetwork(); - } - - private void setConduitVolumes() { - if(tank.containsValidGas() && !conduits.isEmpty()) { - GasStack gasPerConduit = tank.getGas().copy(); - int numCons = conduits.size(); - int leftOvers = gasPerConduit.amount % numCons; - gasPerConduit.amount = gasPerConduit.amount / numCons; - - for (GtConduit con : conduits) { - GasStack f = gasPerConduit.copy(); - if(leftOvers > 0) { - f.amount += 1; - leftOvers--; - } - con.getTank().setGas(f); - BlockCoord bc = con.getLocation(); - con.getBundle().getEntity().getWorldObj().markTileEntityChunkModified(bc.x, bc.y, bc.z, con.getBundle().getEntity()); - } - - } - } - - @Override - public void onUpdateEntity(IConduit conduit) { - World world = conduit.getBundle().getEntity().getWorldObj(); - if(world == null) { - return; - } - if(world.isRemote) { - return; - } - - long curTime = world.getTotalWorldTime(); - if(curTime > 0 && curTime != timeAtLastApply) { - timeAtLastApply = curTime; - ConduitNetworkTickHandler.instance.addListener(tickHandler); - } - - } - - private void doTick() { - if(gasType == null || outputs.isEmpty() || !tank.containsValidGas() || tank.isEmpty()) { - updateActiveState(); - return; - } - - if(outputIterator == null || !outputIterator.hasNext()) { - outputIterator = outputs.iterator(); - } - - updateActiveState(); - - int numVisited = 0; - while (!tank.isEmpty() && numVisited < outputs.size()) { - if(!outputIterator.hasNext()) { - outputIterator = outputs.iterator(); - } - GtOutput output = outputIterator.next(); - if(output != null) { - ConduitGTHandler cont = (ConduitGTHandler) getTankContainer(output.location); - if(cont != null) { - GasStack offer = tank.getGas().copy(); - int filled = cont.receiveGas(output.dir, offer); - if(filled > 0) { - tank.addAmount(-filled); - - } - } - } - numVisited++; - } - - } - - private void updateActiveState() { - boolean isActive = tank.containsValidGas() && !tank.isEmpty(); - if(lastSyncedActive != isActive) { - ticksActiveUnsynced++; - } else { - ticksActiveUnsynced = 0; - } - if(ticksActiveUnsynced >= 10 || ticksActiveUnsynced > 0 && isActive) { - if(!isActive) { - setGasType(null); - } - for (IConduit con : conduits) { - con.setActive(isActive); - } - lastSyncedActive = isActive; - ticksActiveUnsynced = 0; - } - } - - public int fill(ForgeDirection from, GasStack resource, boolean doFill) { - if(resource == null) { - return 0; - } - resource.amount = Math.min(resource.amount, GtConduit.MAX_IO_PER_TICK); - boolean gasWasValid = tank.containsValidGas(); - int res = tank.receive(resource, doFill); - if(doFill && res > 0 && gasWasValid) { - int vol = tank.getStored(); - setGasType(resource); - tank.setAmount(vol); - } - return res; - } - - public GasStack drain(ForgeDirection from, GasStack resource, boolean doDrain) { - if(resource == null || tank.isEmpty() || !tank.containsValidGas() || !GtConduitNetwork.areGassCompatable(getGasType(), resource)) { - return null; - } - int amount = Math.min(resource.amount, tank.getStored()); - amount = Math.min(amount, GtConduit.MAX_IO_PER_TICK); - GasStack result = resource.copy(); - result.amount = amount; - if(doDrain) { - tank.addAmount(-amount); - } - return result; - } - - public GasStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { - if(tank.isEmpty() || !tank.containsValidGas()) { - return null; - } - int amount = Math.min(maxDrain, tank.getStored()); - GasStack result = tank.getGas().copy(); - result.amount = amount; - if(doDrain) { - tank.addAmount(-amount); - } - return result; - } - - public boolean extractFrom(GtConduit advancedGtConduit, ForgeDirection dir, int maxExtractPerTick) { - - if(tank.isFull()) { - return false; - } - - IGasHandler extTank = getTankContainer(advancedGtConduit, dir); - if(extTank != null) { - int maxExtract = Math.min(maxExtractPerTick, tank.getAvailableSpace()); - - if(gasType == null || !tank.containsValidGas()) { - GasStack drained = extTank.drawGas(dir.getOpposite(), maxExtract); - if(drained == null || drained.amount <= 0) { - return false; - } - setGasType(drained); - tank.setGas(drained.copy()); - return true; - } - - GasStack couldDrain = gasType.copy(); - couldDrain.amount = maxExtract; - - // GasStack drained = extTank.drain(dir.getOpposite(), couldDrain, true); - // if(drained == null || drained.amount <= 0) { - // return false; - // } - // tank.addAmount(drained.amount); - - //Have to use this 'double handle' approach to work around an issue with TiC - GasStack drained = extTank.drawGas(dir.getOpposite(), maxExtract); - if(drained == null || drained.amount == 0) { - return false; - } else { - if(drained.isGasEqual(getGasType())) { - tank.addAmount(drained.amount); - } - } - return true; - } - return false; - } - - public IGasHandler getTankContainer(BlockCoord bc) { - World w = getWorld(); - if(w == null) { - return null; - } - TileEntity te = w.getTileEntity(bc.x, bc.y, bc.z); - if(te instanceof IGasHandler) { - return (IGasHandler) te; - } - return null; - } - - public IGasHandler getTankContainer(GtConduit con, ForgeDirection dir) { - BlockCoord bc = con.getLocation().getLocation(dir); - return getTankContainer(bc); - } - - World getWorld() { - if(conduits.isEmpty()) { - return null; - |
