From 0db6bb803dcd22d759879113c2e1a3bcb226f2ee Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Sun, 7 Jul 2013 09:26:51 -0400 Subject: [PATCH] changed power network and machine --- .../core/tile/network/NetworkPowerTiles.java | 28 +-- .../machine/TileEntityRunnableMachine.java | 161 +++++++++++++----- 2 files changed, 134 insertions(+), 55 deletions(-) diff --git a/src/minecraft/dark/core/tile/network/NetworkPowerTiles.java b/src/minecraft/dark/core/tile/network/NetworkPowerTiles.java index 190d29c6..a61d0839 100644 --- a/src/minecraft/dark/core/tile/network/NetworkPowerTiles.java +++ b/src/minecraft/dark/core/tile/network/NetworkPowerTiles.java @@ -36,7 +36,7 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici @Override public void startProducing(TileEntity tileEntity, ElectricityPack electricityPack) { - if (!this.networkMember.contains(tileEntity) && tileEntity != null && electricityPack.getWatts() > 0) + if (tileEntity != null && electricityPack.getWatts() > 0) { this.producers.put(tileEntity, electricityPack); } @@ -65,7 +65,7 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici @Override public void startRequesting(TileEntity tileEntity, ElectricityPack electricityPack) { - if (!this.networkMember.contains(tileEntity) && tileEntity != null && electricityPack.getWatts() > 0) + if (tileEntity != null && electricityPack.getWatts() > 0) { this.consumers.put(tileEntity, electricityPack); } @@ -142,11 +142,8 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici if (pairs.getKey() != null && pairs.getValue() != null && pack != null) { - double newWatts = totalElectricity.getWatts() + pack.getWatts(); - double newVoltage = Math.max(totalElectricity.voltage, pack.voltage); + totalElectricity = ElectricityPack.getFromWatts(totalElectricity.getWatts() + pack.getWatts(), Math.max(totalElectricity.voltage, pack.voltage)); - totalElectricity.amperes = newWatts / newVoltage; - totalElectricity.voltage = newVoltage; } } } @@ -161,9 +158,14 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici return this.getRequestWithoutReduction(); } + public double getMemberRequest() + { + return 0; + } + public double getMaxBattery() { - return Math.min(this.getRequest().getWatts(), this.networkMember.size() * 10); + return Math.min(this.getRequest().getWatts(), this.networkMember.size() * 10) * 2; } public double getCurrentBattery() @@ -208,8 +210,8 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici if (pack != null) { - totalElectricity.amperes += pack.amperes; - totalElectricity.voltage = Math.max(totalElectricity.voltage, pack.voltage); + totalElectricity = ElectricityPack.getFromWatts(totalElectricity.getWatts() + pack.getWatts(), Math.max(totalElectricity.voltage, pack.voltage)); + } } } @@ -230,7 +232,7 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici if (this.consumers.containsKey(tileEntity) && tileRequest != null) { - if (this.wattStored >= tileRequest.getWatts()) + if (this.wattStored - this.getMemberRequest() >= tileRequest.getWatts()) { this.wattStored -= tileRequest.getWatts(); return tileRequest; @@ -243,8 +245,8 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici ElectricityPack totalRequest = this.getRequestWithoutReduction(); totalElectricity.amperes *= (tileRequest.amperes / totalRequest.amperes); - double ampsReceived = totalElectricity.amperes - (totalElectricity.amperes * totalElectricity.amperes * this.getTotalResistance()) / totalElectricity.voltage; - double voltsReceived = totalElectricity.voltage - (totalElectricity.amperes * this.getTotalResistance()); + double ampsReceived = totalElectricity.amperes; + double voltsReceived = totalElectricity.voltage; totalElectricity.amperes = ampsReceived; totalElectricity.voltage = voltsReceived; @@ -293,7 +295,7 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici @Override public double getTotalResistance() { - return 1; + return 0.001; } @Override diff --git a/src/minecraft/dark/library/machine/TileEntityRunnableMachine.java b/src/minecraft/dark/library/machine/TileEntityRunnableMachine.java index d59ea8d6..30e1a391 100644 --- a/src/minecraft/dark/library/machine/TileEntityRunnableMachine.java +++ b/src/minecraft/dark/library/machine/TileEntityRunnableMachine.java @@ -17,10 +17,10 @@ import universalelectricity.core.electricity.ElectricityPack; import universalelectricity.core.electricity.IElectricityNetwork; import universalelectricity.core.vector.Vector3; import universalelectricity.prefab.tile.TileEntityElectrical; -import universalelectricity.prefab.tile.TileEntityElectricityRunnable; import buildcraft.api.power.IPowerProvider; import buildcraft.api.power.IPowerReceptor; import buildcraft.api.power.PowerFramework; +import buildcraft.api.power.PowerProvider; import dark.core.PowerSystems; import dark.core.api.INetworkPart; @@ -31,7 +31,7 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp /** Should this machine run without power */ protected boolean runPowerless = false; /** BuildCraft power provider? */ - protected IPowerProvider powerProvider; + private IPowerProvider powerProvider; public double prevWatts, wattsReceived = 0; @@ -44,7 +44,7 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp this.prevWatts = this.wattsReceived; if (!this.worldObj.isRemote) { - if ((this.runPowerless || PowerSystems.runPowerLess(powerList)) && this.wattsReceived < this.getBattery(ForgeDirection.UNKNOWN)) + if (!this.isDisabled() && (this.runPowerless || PowerSystems.runPowerLess(powerList)) && this.wattsReceived < this.getBattery(ForgeDirection.UNKNOWN)) { this.wattsReceived += Math.max(this.getBattery(ForgeDirection.UNKNOWN) - this.wattsReceived, 0); } @@ -55,6 +55,8 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp } } + /** Any updating for power. Called seperate from the main update method too allow for inf power + * without unneeded power drain */ public void doPowerUpdate() { // UNIVERSAL ELECTRICITY UPDATE @@ -67,47 +69,13 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp { ElectricityNetworkHelper.consumeFromMultipleSides(this, new ElectricityPack(0, 0)); } - - // BUILDCRAFT POWER UPDATE - if (PowerFramework.currentFramework != null) - { - if (this.powerProvider == null) - { - this.powerProvider = PowerFramework.currentFramework.createPowerProvider(); - this.powerProvider.configure(0, 0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE); - } - } - float requiredEnergy = (float) (this.getRequest(ForgeDirection.UNKNOWN) * UniversalElectricity.TO_BC_RATIO); - if (this.powerProvider != null && this.powerProvider.useEnergy(0, requiredEnergy, false) > 0) - { - float energyReceived = this.powerProvider.useEnergy(requiredEnergy, requiredEnergy, true); - this.onReceive(ForgeDirection.UNKNOWN, this.getVoltage(), (UniversalElectricity.BC3_RATIO * energyReceived) / this.getVoltage()); - } //TODO add other power systems } - /** Buildcraft */ - @Override - public void setPowerProvider(IPowerProvider provider) - { - this.powerProvider = provider; - } - - @Override - public IPowerProvider getPowerProvider() - { - return this.powerProvider; - } - - @Override - public void doWork() - { - } - @Override public int powerRequest(ForgeDirection from) { - if (this.canConnect(from)) + if (this.canConnect(from) && !this.runPowerless) { return (int) Math.ceil(this.getRequest(from) * UniversalElectricity.TO_BC_RATIO); } @@ -120,13 +88,20 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp return ElectricityNetworkHelper.getDirections(this); } - /** Watts this tile want to receive each tick */ + /** Watts this tile want to receive each tick + ** + * @param side - If side == UNKNOWN then either the method that called it doesn't use sides or + * it was called from inside the machine or by the power provider. Return request equal to that + * off all sides at the given time */ public abstract double getRequest(ForgeDirection side); /** Called when this tile gets power. Should equal getRequest or power will be wasted * * @param voltage - E pressure - * @param amperes - E flow rate */ + * @param amperes - E flow rate + * @param side - If side == UNKNOWN then either the method that called it doesn't use sides or + * it was called from inside the machine or by the power provider. Accept power as an internal + * amount */ public void onReceive(ForgeDirection side, double voltage, double amperes) { if (voltage > this.getVoltage()) @@ -137,18 +112,32 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp this.wattsReceived = Math.min(this.wattsReceived + (voltage * amperes), this.getBattery(side)); } - /** Amount of Watts the internal battery/cap can store */ + /** Amount of Watts the internal battery/cap can store. + * + * @param side - If side == UNKNOWN then either the method that called it doesn't use sides or + * it was called from inside the machine or by the power provider. Return amount of all sides in + * this case */ public double getBattery(ForgeDirection side) { return this.getRequest(side) * 2; } + /** Amount of energy currently stored for use. + * + * @param side - If side == UNKNOWN then either the method that called it doesn't use sides or + * it was called from inside the machine or by the power provider. Return amount of all sides in + * this case */ + public double getCurrentBattery(ForgeDirection side) + { + return this.wattsReceived; + } + /** Sets this machine to run without power only if the given stack match an ore directory name */ public void toggleInfPower(ItemStack item) { if (item != null) { - for (ItemStack stack : OreDictionary.getOres(this.powerToggleItemID)) + for (ItemStack stack : OreDictionary.getOres(TileEntityRunnableMachine.powerToggleItemID)) { if (stack.isItemEqual(item)) { @@ -237,4 +226,92 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp return connectedNetworks; } + + /** Buildcraft */ + @Override + public void setPowerProvider(IPowerProvider provider) + { + this.powerProvider = provider; + } + + @Override + public IPowerProvider getPowerProvider() + { + if (this.powerProvider == null) + { + this.powerProvider = new RunPowerProvider(this); + } + return this.powerProvider; + } + + @Override + public void doWork() + { + } + + class RunPowerProvider extends PowerProvider + { + public TileEntityRunnableMachine tileEntity; + + public RunPowerProvider(TileEntityRunnableMachine tile) + { + tileEntity = tile; + } + + @Override + public void receiveEnergy(float quantity, ForgeDirection from) + { + powerSources[from.ordinal()] = 2; + + tileEntity.onReceive(ForgeDirection.UNKNOWN, tileEntity.getVoltage(), (UniversalElectricity.BC3_RATIO * quantity) / tileEntity.getVoltage()); + + } + + @Override + public float useEnergy(float min, float max, boolean doUse) + { + float result = 0; + + if (tileEntity.wattsReceived >= min) + { + if (tileEntity.wattsReceived <= max) + { + result = (float) tileEntity.wattsReceived; + if (doUse) + { + tileEntity.wattsReceived = 0; + } + } + else + { + result = max; + if (doUse) + { + tileEntity.wattsReceived -= max; + } + } + } + + return result; + + } + + @Override + public float getEnergyStored() + { + return (float) this.tileEntity.getCurrentBattery(ForgeDirection.UNKNOWN); + } + + @Override + public int getMaxEnergyReceived() + { + return (int) Math.ceil(this.tileEntity.getBattery(ForgeDirection.UNKNOWN)); + } + + @Override + public int getMaxEnergyStored() + { + return (int) Math.ceil(this.tileEntity.getBattery(ForgeDirection.UNKNOWN)); + } + } }