From b740f0507988b33d96672c5f93ff60137a6b591d Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Fri, 5 Jul 2013 17:54:22 +0100 Subject: [PATCH] Add power recording to networks and display to EnergyMeter --- common/mekanism/common/EnergyNetwork.java | 54 +++++++++++++++++++-- common/mekanism/common/ItemEnergyMeter.java | 1 + 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/common/mekanism/common/EnergyNetwork.java b/common/mekanism/common/EnergyNetwork.java index 2ddbda708..050e69c4c 100644 --- a/common/mekanism/common/EnergyNetwork.java +++ b/common/mekanism/common/EnergyNetwork.java @@ -5,6 +5,7 @@ import ic2.api.energy.tile.IEnergySink; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -12,6 +13,11 @@ import java.util.List; import java.util.Map; import java.util.Set; +import cpw.mods.fml.common.ITickHandler; +import cpw.mods.fml.common.TickType; +import cpw.mods.fml.common.registry.TickRegistry; +import cpw.mods.fml.relauncher.Side; + import mekanism.api.IStrictEnergyAcceptor; import mekanism.api.Object3D; import net.minecraft.tileentity.TileEntity; @@ -21,16 +27,20 @@ import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.world.ChunkEvent; import buildcraft.api.power.IPowerReceptor; -public class EnergyNetwork +public class EnergyNetwork implements ITickHandler { public Set cables = new HashSet(); public Set possibleAcceptors = new HashSet(); public Map acceptorDirections = new HashMap(); + private double joulesTransmitted = 0; + private double joulesLastTick = 0; + public EnergyNetwork(IUniversalCable... varCables) { cables.addAll(Arrays.asList(varCables)); + TickRegistry.registerTickHandler(this, Side.SERVER); } public double getEnergyNeeded(ArrayList ignored) @@ -61,16 +71,18 @@ public class EnergyNetwork public double emit(double energyToSend, ArrayList ignored) { + double energyAvailable = energyToSend; + double sent; List availableAcceptors = Arrays.asList(getEnergyAcceptors().toArray()); - + Collections.shuffle(availableAcceptors); - + if(!availableAcceptors.isEmpty()) { int divider = availableAcceptors.size(); double remaining = energyToSend % divider; double sending = (energyToSend-remaining)/divider; - + for(Object obj : availableAcceptors) { if(obj instanceof TileEntity && !ignored.contains(obj)) @@ -99,6 +111,8 @@ public class EnergyNetwork } } } + sent = energyAvailable - energyToSend; + joulesTransmitted += sent; } return energyToSend; @@ -344,10 +358,40 @@ public class EnergyNetwork } } } - + @Override public String toString() { return "[EnergyNetwork] " + cables.size() + " cables, " + possibleAcceptors.size() + " acceptors."; } + + public double getPower() + { + return joulesTransmitted * 20; + } + + @Override + public void tickStart(EnumSet type, Object... tickData) + { + return; + } + + @Override + public void tickEnd(EnumSet type, Object... tickData) + { + joulesLastTick = joulesTransmitted; + joulesTransmitted = 0; + } + + @Override + public EnumSet ticks() + { + return EnumSet.of(TickType.SERVER); + } + + @Override + public String getLabel() + { + return toString(); + } } \ No newline at end of file diff --git a/common/mekanism/common/ItemEnergyMeter.java b/common/mekanism/common/ItemEnergyMeter.java index 5775860c5..a167edcb6 100644 --- a/common/mekanism/common/ItemEnergyMeter.java +++ b/common/mekanism/common/ItemEnergyMeter.java @@ -39,6 +39,7 @@ public class ItemEnergyMeter extends ItemEnergized player.sendChatToPlayer(EnumColor.GREY + " *Cables: " + EnumColor.DARK_GREY + cable.getNetwork().cables.size()); player.sendChatToPlayer(EnumColor.GREY + " *Acceptors: " + EnumColor.DARK_GREY + cable.getNetwork().possibleAcceptors.size()); player.sendChatToPlayer(EnumColor.GREY + " *Needed energy: " + EnumColor.DARK_GREY + ElectricityDisplay.getDisplay(cable.getNetwork().getEnergyNeeded(new ArrayList()), ElectricUnit.JOULES)); + player.sendChatToPlayer(EnumColor.GREY + " *Power: " + EnumColor.DARK_GREY + ElectricityDisplay.getDisplay(cable.getNetwork().getPower(), ElectricUnit.WATT)); player.sendChatToPlayer(EnumColor.GREY + "------------- " + EnumColor.DARK_BLUE + "[=======]" + EnumColor.GREY + " -------------"); } }