From 415602a604f91fdd524fa6f1bd12475332bdc222 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 14 Mar 2014 06:04:03 +0100 Subject: [PATCH] updated bc and ic2 apis -> working power from those two in 1.7; fixed sound in obf'ed mc --- .../buildcraft/api/core/SafeTimeTracker.java | 52 ++++++-- .../buildcraft/api/power/IPowerEmitter.java | 10 +- .../buildcraft/api/power/IPowerReceptor.java | 11 +- .../buildcraft/api/power/PowerHandler.java | 117 ++++++++++-------- .../buildcraft/api/power/package-info.java | 2 +- .../buildcraft/api/tools/IToolWrench.java | 8 ++ .../cofh/api/energy/IEnergyContainerItem.java | 56 --------- .../java/cofh/api/energy/IEnergyHandler.java | 61 --------- .../java/cofh/api/energy/IEnergyStorage.java | 47 ------- .../ic2/api/energy/event/EnergyTileEvent.java | 7 +- .../api/energy/event/EnergyTileLoadEvent.java | 13 +- .../energy/event/EnergyTileUnloadEvent.java | 13 +- .../ic2/api/energy/tile/IEnergyAcceptor.java | 10 +- .../java/ic2/api/energy/tile/IEnergySink.java | 26 ++-- .../java/ic2/api/energy/tile/IEnergyTile.java | 6 +- src/main/scala/li/cil/oc/client/Sound.scala | 2 +- .../oc/common/tileentity/PowerAcceptor.scala | 24 ++-- 17 files changed, 175 insertions(+), 290 deletions(-) delete mode 100644 src/api/java/cofh/api/energy/IEnergyContainerItem.java delete mode 100644 src/api/java/cofh/api/energy/IEnergyHandler.java delete mode 100644 src/api/java/cofh/api/energy/IEnergyStorage.java diff --git a/src/api/java/buildcraft/api/core/SafeTimeTracker.java b/src/api/java/buildcraft/api/core/SafeTimeTracker.java index 44e1531e8..46ca28096 100644 --- a/src/api/java/buildcraft/api/core/SafeTimeTracker.java +++ b/src/api/java/buildcraft/api/core/SafeTimeTracker.java @@ -1,8 +1,9 @@ /** - * Copyright (c) SpaceToad, 2011 http://www.mod-buildcraft.com + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com * - * BuildCraft is distributed under the terms of the Minecraft Mod Public License - * 1.0, or MMPL. Please check the contents of the license located in + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft.api.core; @@ -13,10 +14,45 @@ public class SafeTimeTracker { private long lastMark = Long.MIN_VALUE; private long duration = -1; + private long randomRange = 0; + private long lastRandomDelay = 0; + private long internalDelay = 1; + + /** + * @deprecated should use constructors with parameters instead + */ + public SafeTimeTracker () { + + } + + public SafeTimeTracker (long delay) { + internalDelay = delay; + } + + /** + * In many situations, it is a bad idea to have all objects of the same + * kind to be waiting for the exact same amount of time, as that can lead + * to some situation where they're all synchronized and got to work all + * at the same time. When created with a random range, the mark that is set + * when reaching the expect delay will be added with a random number + * between [0, range[, meaning that the event will take between 0 and range + * more tick to run. + */ + public SafeTimeTracker (long delay, long random) { + internalDelay = delay; + randomRange = random; + } + + public boolean markTimeIfDelay(World world) { + return markTimeIfDelay(world, internalDelay); + } /** * Return true if a given delay has passed since last time marked was called * successfully. + * + * @deprecated should use the constructor with a delay instead, and call + * this function without a parameter */ public boolean markTimeIfDelay(World world, long delay) { if (world == null) @@ -27,13 +63,15 @@ public class SafeTimeTracker { if (currentTime < lastMark) { lastMark = currentTime; return false; - } else if (lastMark + delay <= currentTime) { + } else if (lastMark + delay + lastRandomDelay <= currentTime) { duration = currentTime - lastMark; lastMark = currentTime; - return true; - } else - return false; + lastRandomDelay = (int) (Math.random() * randomRange); + return true; + } else { + return false; + } } public long durationOfLastDelay() { diff --git a/src/api/java/buildcraft/api/power/IPowerEmitter.java b/src/api/java/buildcraft/api/power/IPowerEmitter.java index 7ccf62b9d..4bb48497b 100644 --- a/src/api/java/buildcraft/api/power/IPowerEmitter.java +++ b/src/api/java/buildcraft/api/power/IPowerEmitter.java @@ -1,22 +1,20 @@ -/* - * Copyright (c) SpaceToad, 2011-2012 +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team * http://www.mod-buildcraft.com - * + * * BuildCraft is distributed under the terms of the Minecraft Mod Public * License 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft.api.power; -import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.util.ForgeDirection; /** * Essentially only used for Wooden Power Pipe connection rules. * * This Tile Entity interface allows you to indicate that a block can emit power * from a specific side. - * - * @author CovertJaguar */ public interface IPowerEmitter { diff --git a/src/api/java/buildcraft/api/power/IPowerReceptor.java b/src/api/java/buildcraft/api/power/IPowerReceptor.java index 48b84c909..79586e9e1 100644 --- a/src/api/java/buildcraft/api/power/IPowerReceptor.java +++ b/src/api/java/buildcraft/api/power/IPowerReceptor.java @@ -1,20 +1,19 @@ /** - * Copyright (c) SpaceToad, 2011 http://www.mod-buildcraft.com + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com * - * BuildCraft is distributed under the terms of the Minecraft Mod Public License - * 1.0, or MMPL. Please check the contents of the license located in + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft.api.power; import net.minecraft.world.World; -import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.util.ForgeDirection; /** * This interface should be implemented by any Tile Entity that wishes to be * able to receive power. - * - * @author CovertJaguar */ public interface IPowerReceptor { diff --git a/src/api/java/buildcraft/api/power/PowerHandler.java b/src/api/java/buildcraft/api/power/PowerHandler.java index 5f4055465..8979086ea 100644 --- a/src/api/java/buildcraft/api/power/PowerHandler.java +++ b/src/api/java/buildcraft/api/power/PowerHandler.java @@ -1,15 +1,16 @@ /** - * Copyright (c) SpaceToad, 2011 http://www.mod-buildcraft.com + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com * - * BuildCraft is distributed under the terms of the Minecraft Mod Public License - * 1.0, or MMPL. Please check the contents of the license located in + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft.api.power; import buildcraft.api.core.SafeTimeTracker; import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.util.ForgeDirection; /** * The PowerHandler is similar to FluidTank in that it holds your power and @@ -21,13 +22,11 @@ import net.minecraftforge.common.ForgeDirection; * If you plan emit power, you need only implement IPowerEmitter. You do not * need a PowerHandler. Engines have a PowerHandler because they can also * receive power from other Engines. - * + * * See TileRefinery for a simple example of a power using machine. * * @see IPowerReceptor * @see IPowerEmitter - * - * @author CovertJaguar */ public final class PowerHandler { @@ -65,7 +64,7 @@ public final class PowerHandler { public static final float DEFAULT_POWERLOSS = 1F; public static final float MIN_POWERLOSS = 0.01F; - private final float powerLoss; + private final double powerLoss; public PerditionCalculator() { powerLoss = DEFAULT_POWERLOSS; @@ -76,7 +75,7 @@ public final class PowerHandler { * * @param powerLoss power loss per tick */ - public PerditionCalculator(float powerLoss) { + public PerditionCalculator(double powerLoss) { if (powerLoss < MIN_POWERLOSS) { powerLoss = MIN_POWERLOSS; } @@ -93,13 +92,11 @@ public final class PowerHandler { * @param ticksPassed ticks since the last time this function was called * @return */ - public float applyPerdition(PowerHandler powerHandler, float current, long ticksPassed) { -// float prev = current; + public double applyPerdition(PowerHandler powerHandler, double current, long ticksPassed) { current -= powerLoss * ticksPassed; if (current < 0) { current = 0; } -// powerHandler.totalLostPower += prev - current; return current; } @@ -110,16 +107,19 @@ public final class PowerHandler { * * @return percent of input to tax */ - public float getTaxPercent() { + public double getTaxPercent() { return 0; } } public static final PerditionCalculator DEFAULT_PERDITION = new PerditionCalculator(); - private float minEnergyReceived; - private float maxEnergyReceived; - private float maxEnergyStored; - private float activationEnergy; - private float energyStored = 0; + public static final double ROLLING_AVERAGE_WEIGHT = 100.0; + public static final double ROLLING_AVERAGE_NUMERATOR = ROLLING_AVERAGE_WEIGHT - 1; + public static final double ROLLING_AVERAGE_DENOMINATOR = 1.0 / ROLLING_AVERAGE_WEIGHT; + private double minEnergyReceived; + private double maxEnergyReceived; + private double maxEnergyStored; + private double activationEnergy; + private double energyStored = 0; private final SafeTimeTracker doWorkTracker = new SafeTimeTracker(); private final SafeTimeTracker sourcesTracker = new SafeTimeTracker(); private final SafeTimeTracker perditionTracker = new SafeTimeTracker(); @@ -128,11 +128,10 @@ public final class PowerHandler { private PerditionCalculator perdition; private final PowerReceiver receiver; private final Type type; - // Debug -// private double totalLostPower = 0; -// private double totalReceivedPower = 0; -// private double totalUsedPower = 0; -// private long startTime = -1; + // Tracking + private double averageLostPower = 0; + private double averageReceivedPower = 0; + private double averageUsedPower = 0; public PowerHandler(IPowerReceptor receptor, Type type) { this.receptor = receptor; @@ -145,23 +144,23 @@ public final class PowerHandler { return receiver; } - public float getMinEnergyReceived() { + public double getMinEnergyReceived() { return minEnergyReceived; } - public float getMaxEnergyReceived() { + public double getMaxEnergyReceived() { return maxEnergyReceived; } - public float getMaxEnergyStored() { + public double getMaxEnergyStored() { return maxEnergyStored; } - public float getActivationEnergy() { + public double getActivationEnergy() { return activationEnergy; } - public float getEnergyStored() { + public double getEnergyStored() { return energyStored; } @@ -183,7 +182,7 @@ public final class PowerHandler { * store. Values tend to range between 100 and 5000. With 1000 and 1500 * being common. */ - public void configure(float minEnergyReceived, float maxEnergyReceived, float activationEnergy, float maxStoredEnergy) { + public void configure(double minEnergyReceived, double maxEnergyReceived, double activationEnergy, double maxStoredEnergy) { if (minEnergyReceived > maxEnergyReceived) { maxEnergyReceived = minEnergyReceived; } @@ -242,13 +241,6 @@ public final class PowerHandler { * design around this though if you are aware of the limitations. */ public void update() { -// if (startTime == -1) -// startTime = receptor.getWorld().getTotalWorldTime(); -// else { -// long duration = receptor.getWorld().getTotalWorldTime() - startTime; -// System.out.printf("Power Stats: %s - Stored: %.2f Gained: %.2f - %.2f/t Lost: %.2f - %.2f/t Used: %.2f - %.2f/t%n", receptor.getClass().getSimpleName(), energyStored, totalReceivedPower, totalReceivedPower / duration, totalLostPower, totalLostPower / duration, totalUsedPower, totalUsedPower / duration); -// } - applyPerdition(); applyWork(); validateEnergy(); @@ -256,12 +248,15 @@ public final class PowerHandler { private void applyPerdition() { if (perditionTracker.markTimeIfDelay(receptor.getWorld(), 1) && energyStored > 0) { - float newEnergy = getPerdition().applyPerdition(this, energyStored, perditionTracker.durationOfLastDelay()); + double prev = energyStored; + double newEnergy = getPerdition().applyPerdition(this, energyStored, perditionTracker.durationOfLastDelay()); if (newEnergy == 0 || newEnergy < energyStored) energyStored = newEnergy; else energyStored = DEFAULT_PERDITION.applyPerdition(this, energyStored, perditionTracker.durationOfLastDelay()); validateEnergy(); + + averageLostPower = (averageLostPower * ROLLING_AVERAGE_NUMERATOR + (prev - energyStored)) * ROLLING_AVERAGE_DENOMINATOR; } } @@ -296,10 +291,10 @@ public final class PowerHandler { * @param doUse * @return amount used */ - public float useEnergy(float min, float max, boolean doUse) { + public double useEnergy(double min, double max, boolean doUse) { applyPerdition(); - float result = 0; + double result = 0; if (energyStored >= min) { if (energyStored <= max) { @@ -317,8 +312,8 @@ public final class PowerHandler { validateEnergy(); -// if (doUse) -// totalUsedPower += result; + if (doUse) + averageUsedPower = (averageUsedPower * ROLLING_AVERAGE_NUMERATOR + result) * ROLLING_AVERAGE_DENOMINATOR; return result; } @@ -329,7 +324,7 @@ public final class PowerHandler { public void readFromNBT(NBTTagCompound data, String tag) { NBTTagCompound nbt = data.getCompoundTag(tag); - energyStored = nbt.getFloat("storedEnergy"); + energyStored = nbt.getDouble("energyStored"); } public void writeToNBT(NBTTagCompound data) { @@ -338,8 +333,8 @@ public final class PowerHandler { public void writeToNBT(NBTTagCompound data, String tag) { NBTTagCompound nbt = new NBTTagCompound(); - nbt.setFloat("storedEnergy", energyStored); - data.setCompoundTag(tag, nbt); + nbt.setDouble("energyStored", energyStored); + data.setTag(tag, nbt); } public final class PowerReceiver { @@ -347,26 +342,38 @@ public final class PowerHandler { private PowerReceiver() { } - public float getMinEnergyReceived() { + public double getMinEnergyReceived() { return minEnergyReceived; } - public float getMaxEnergyReceived() { + public double getMaxEnergyReceived() { return maxEnergyReceived; } - public float getMaxEnergyStored() { + public double getMaxEnergyStored() { return maxEnergyStored; } - public float getActivationEnergy() { + public double getActivationEnergy() { return activationEnergy; } - public float getEnergyStored() { + public double getEnergyStored() { return energyStored; } + public double getAveragePowerReceived() { + return averageReceivedPower; + } + + public double getAveragePowerUsed() { + return averageUsedPower; + } + + public double getAveragePowerLost() { + return averageLostPower; + } + public Type getType() { return type; } @@ -380,7 +387,7 @@ public final class PowerHandler { * * @return */ - public float powerRequest() { + public double powerRequest() { update(); return Math.min(maxEnergyReceived, maxEnergyStored - energyStored); } @@ -394,8 +401,8 @@ public final class PowerHandler { * @param from * @return the amount of power used */ - public float receiveEnergy(Type source, final float quantity, ForgeDirection from) { - float used = quantity; + public double receiveEnergy(Type source, final double quantity, ForgeDirection from) { + double used = quantity; if (source == Type.ENGINE) { if (used < minEnergyReceived) { return 0; @@ -416,7 +423,7 @@ public final class PowerHandler { used = Math.min(quantity, maxEnergyReceived); } -// totalReceivedPower += used; + averageReceivedPower = (averageReceivedPower * ROLLING_AVERAGE_NUMERATOR + used) * ROLLING_AVERAGE_DENOMINATOR; return used; } @@ -426,7 +433,7 @@ public final class PowerHandler { * * @return the amount the power changed by */ - public float addEnergy(float quantity) { + public double addEnergy(double quantity) { energyStored += quantity; if (energyStored > maxEnergyStored) { @@ -442,7 +449,7 @@ public final class PowerHandler { return quantity; } - public void setEnergy(float quantity) { + public void setEnergy(double quantity) { this.energyStored = quantity; validateEnergy(); } diff --git a/src/api/java/buildcraft/api/power/package-info.java b/src/api/java/buildcraft/api/power/package-info.java index c119e142b..4a98dbbea 100644 --- a/src/api/java/buildcraft/api/power/package-info.java +++ b/src/api/java/buildcraft/api/power/package-info.java @@ -1,3 +1,3 @@ -@API(apiVersion="1.0",owner="BuildCraftAPI|core",provides="BuildCraftAPI|power") +@API(apiVersion="1.1",owner="BuildCraftAPI|core",provides="BuildCraftAPI|power") package buildcraft.api.power; import cpw.mods.fml.common.API; \ No newline at end of file diff --git a/src/api/java/buildcraft/api/tools/IToolWrench.java b/src/api/java/buildcraft/api/tools/IToolWrench.java index bd0c3c595..a6c56e8d3 100644 --- a/src/api/java/buildcraft/api/tools/IToolWrench.java +++ b/src/api/java/buildcraft/api/tools/IToolWrench.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ package buildcraft.api.tools; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/api/java/cofh/api/energy/IEnergyContainerItem.java b/src/api/java/cofh/api/energy/IEnergyContainerItem.java deleted file mode 100644 index bfdec5678..000000000 --- a/src/api/java/cofh/api/energy/IEnergyContainerItem.java +++ /dev/null @@ -1,56 +0,0 @@ -package cofh.api.energy; - -import net.minecraft.item.ItemStack; - -/** - * Implement this interface on Item classes that support external manipulation of their internal - * energy storages. - * - * A reference implementation is provided {@link ItemEnergyContainer}. - * - * @author King Lemming - * - */ -public interface IEnergyContainerItem -{ - - /** - * Adds energy to a container item. Returns the quantity of energy that was accepted. This - * should always return 0 if the item cannot be externally charged. - * - * @param container - * ItemStack to be charged. - * @param maxReceive - * Maximum amount of energy to be sent into the item. - * @param simulate - * If TRUE, the charge will only be simulated. - * @return Amount of energy that was (or would have been, if simulated) received by the item. - */ - int receiveEnergy(ItemStack container, int maxReceive, boolean simulate); - - /** - * Removes energy from a container item. Returns the quantity of energy that was removed. This - * should always return 0 if the item cannot be externally - * discharged. - * - * @param container - * ItemStack to be discharged. - * @param maxExtract - * Maximum amount of energy to be extracted from the item. - * @param simulate - * If TRUE, the discharge will only be simulated. - * @return Amount of energy that was (or would have been, if simulated) extracted from the item. - */ - int extractEnergy(ItemStack container, int maxExtract, boolean simulate); - - /** - * Get the amount of energy currently stored in the container item. - */ - int getEnergyStored(ItemStack container); - - /** - * Get the max amount of energy that can be stored in the container item. - */ - int getMaxEnergyStored(ItemStack container); - -} diff --git a/src/api/java/cofh/api/energy/IEnergyHandler.java b/src/api/java/cofh/api/energy/IEnergyHandler.java deleted file mode 100644 index ece284c49..000000000 --- a/src/api/java/cofh/api/energy/IEnergyHandler.java +++ /dev/null @@ -1,61 +0,0 @@ -package cofh.api.energy; - -import net.minecraftforge.common.ForgeDirection; - -/** - * Implement this interface on TileEntities which should handle energy, generally storing it in one - * or more internal {@link IEnergyStorage} objects. - * - * A reference implementation is provided {@link TileEnergyHandler}. - * - * @author King Lemming - * - */ -public interface IEnergyHandler -{ - - /** - * Add energy to an IEnergyHandler, internal distribution is left entirely to the - * IEnergyHandler. - * - * @param from - * Orientation the energy is received from. - * @param maxReceive - * Maximum amount of energy to received. - * @param simulate - * If TRUE, the charge will only be simulated. - * @return Amount of energy that was (or would have been, if simulated) received. - */ - int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate); - - /** - * Remove energy from an IEnergyHandler, internal distribution is left entirely to the - * IEnergyHandler. - * - * @param from - * Orientation the energy is extracted to. - * @param maxExtract - * Maximum amount of energy to extract. - * @param simulate - * If TRUE, the discharge will only be simulated. - * @return Amount of energy that was (or would have been, if simulated) extracted. - */ - int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate); - - /** - * Returns true if the Handler functions on a given side - if a Tile Entity can receive and/or - * send energy from a given side, this should return true. - */ - boolean canInterface(ForgeDirection from); - - /** - * Returns the amount of energy currently stored. - */ - int getEnergyStored(ForgeDirection from); - - /** - * Returns the maximum amount of energy that can be stored. - */ - int getMaxEnergyStored(ForgeDirection from); - -} diff --git a/src/api/java/cofh/api/energy/IEnergyStorage.java b/src/api/java/cofh/api/energy/IEnergyStorage.java deleted file mode 100644 index ac9b3eff3..000000000 --- a/src/api/java/cofh/api/energy/IEnergyStorage.java +++ /dev/null @@ -1,47 +0,0 @@ -package cofh.api.energy; - -/** - * An energy storage is the unit of interaction with Energy inventories. - * - * A reference implementation can be found at {@link EnergyStorage}. - * - * @author King Lemming - * - */ -public interface IEnergyStorage -{ - - /** - * Adds energy to the storage. Returns quantity of energy that was accepted. - * - * @param maxReceive - * Maximum amount of energy to be inserted. - * @param simulate - * If TRUE, the insertion will only be simulated. - * @return Amount of energy that was (or would have been, if simulated) accepted by the storage. - */ - int receiveEnergy(int maxReceive, boolean simulate); - - /** - * Removes energy from the storage. Returns quantity of energy that was removed. - * - * @param maxExtract - * Maximum amount of energy to be extracted. - * @param simulate - * If TRUE, the extraction will only be simulated. - * @return Amount of energy that was (or would have been, if simulated) extracted from the - * storage. - */ - int extractEnergy(int maxExtract, boolean simulate); - - /** - * Returns the amount of energy currently stored. - */ - int getEnergyStored(); - - /** - * Returns the maximum amount of energy that can be stored. - */ - int getMaxEnergyStored(); - -} diff --git a/src/api/java/ic2/api/energy/event/EnergyTileEvent.java b/src/api/java/ic2/api/energy/event/EnergyTileEvent.java index 3b1b4809c..2182e497c 100644 --- a/src/api/java/ic2/api/energy/event/EnergyTileEvent.java +++ b/src/api/java/ic2/api/energy/event/EnergyTileEvent.java @@ -11,14 +11,13 @@ import ic2.api.energy.tile.IEnergyTile; * * See ic2/api/energy/usage.txt for an overall description of the energy net api. */ -public class EnergyTileEvent extends WorldEvent -{ +public class EnergyTileEvent extends WorldEvent { public final IEnergyTile energyTile; - public EnergyTileEvent(IEnergyTile energyTile1) - { + public EnergyTileEvent(IEnergyTile energyTile1) { super(((TileEntity) energyTile1).getWorldObj()); this.energyTile = energyTile1; } } + diff --git a/src/api/java/ic2/api/energy/event/EnergyTileLoadEvent.java b/src/api/java/ic2/api/energy/event/EnergyTileLoadEvent.java index 6583f4210..bf019ae34 100644 --- a/src/api/java/ic2/api/energy/event/EnergyTileLoadEvent.java +++ b/src/api/java/ic2/api/energy/event/EnergyTileLoadEvent.java @@ -4,24 +4,23 @@ import ic2.api.energy.tile.IEnergyTile; /** * Event announcing new energy tiles. - * + * * This event notifies subscribers of loaded energy tiles, e.g. after getting * loaded through the chunk they are in or after being placed down by the * player or another deployer mechanism. - * + * * Every energy tile which wants to get connected to the IC2 Energy Network has * to either post this event or alternatively call EnergyNet.addTileEntity(). - * + * * You may use this event to build a static representation of energy tiles for * your own energy grid implementation if you need to. It's not required if you * always lookup energy paths on demand. * * See ic2/api/energy/usage.txt for an overall description of the energy net api. */ -public class EnergyTileLoadEvent extends EnergyTileEvent -{ - public EnergyTileLoadEvent(IEnergyTile energyTile1) - { +public class EnergyTileLoadEvent extends EnergyTileEvent { + public EnergyTileLoadEvent(IEnergyTile energyTile1) { super(energyTile1); } } + diff --git a/src/api/java/ic2/api/energy/event/EnergyTileUnloadEvent.java b/src/api/java/ic2/api/energy/event/EnergyTileUnloadEvent.java index 1c6ee3b4d..2b22ae31c 100644 --- a/src/api/java/ic2/api/energy/event/EnergyTileUnloadEvent.java +++ b/src/api/java/ic2/api/energy/event/EnergyTileUnloadEvent.java @@ -4,25 +4,24 @@ import ic2.api.energy.tile.IEnergyTile; /** * Event announcing terminated energy tiles. - * + * * This event notifies subscribers of unloaded energy tiles, e.g. after getting * unloaded through the chunk they are in or after being destroyed by the * player or another block pick/destruction mechanism. - * + * * Every energy tile which wants to get disconnected from the IC2 Energy * Network has to either post this event or alternatively call * EnergyNet.removeTileEntity(). - * + * * You may use this event to build a static representation of energy tiles for * your own energy grid implementation if you need to. It's not required if you * always lookup energy paths on demand. * * See ic2/api/energy/usage.txt for an overall description of the energy net api. */ -public class EnergyTileUnloadEvent extends EnergyTileEvent -{ - public EnergyTileUnloadEvent(IEnergyTile energyTile1) - { +public class EnergyTileUnloadEvent extends EnergyTileEvent { + public EnergyTileUnloadEvent(IEnergyTile energyTile1) { super(energyTile1); } } + diff --git a/src/api/java/ic2/api/energy/tile/IEnergyAcceptor.java b/src/api/java/ic2/api/energy/tile/IEnergyAcceptor.java index 7ced0ed3d..1735ff5e4 100644 --- a/src/api/java/ic2/api/energy/tile/IEnergyAcceptor.java +++ b/src/api/java/ic2/api/energy/tile/IEnergyAcceptor.java @@ -2,26 +2,26 @@ package ic2.api.energy.tile; import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.util.ForgeDirection; /** * For internal/multi-block usage only. - * + * * @see IEnergySink * @see IEnergyConductor * * See ic2/api/energy/usage.txt for an overall description of the energy net api. */ -public interface IEnergyAcceptor extends IEnergyTile -{ +public interface IEnergyAcceptor extends IEnergyTile { /** * Determine if this acceptor can accept current from an adjacent emitter in a direction. * * The TileEntity in the emitter parameter is what was originally added to the energy net, * which may be normal in-world TileEntity, a delegate or an IMetaDelegate. * - * @param emitter energy emitter + * @param emitter energy emitter, may also be null or an IMetaDelegate * @param direction direction the energy is being received from */ boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction); } + diff --git a/src/api/java/ic2/api/energy/tile/IEnergySink.java b/src/api/java/ic2/api/energy/tile/IEnergySink.java index c7ae6ebed..fe305783b 100644 --- a/src/api/java/ic2/api/energy/tile/IEnergySink.java +++ b/src/api/java/ic2/api/energy/tile/IEnergySink.java @@ -1,21 +1,22 @@ package ic2.api.energy.tile; -import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.util.ForgeDirection; /** * Allows a tile entity (mostly a machine) to receive energy. * * See ic2/api/energy/usage.txt for an overall description of the energy net api. */ -public interface IEnergySink extends IEnergyAcceptor -{ +public interface IEnergySink extends IEnergyAcceptor { /** * Determine how much energy the sink accepts. - * + * * This value is unrelated to getMaxSafeInput(). - * + * * Make sure that injectEnergy() does accepts energy if demandsEnergy() returns anything > 0. * + * @note Modifying the energy net from this method is disallowed. + * * @return max accepted input in eu */ double demandedEnergyUnits(); @@ -25,7 +26,7 @@ public interface IEnergySink extends IEnergyAcceptor * * It's highly recommended to accept all energy by letting the internal buffer overflow to * increase the performance and accuracy of the distribution simulation. - * + * * @param directionFrom direction from which the energy comes from * @param amount energy to be transferred * @return Energy not consumed (leftover) @@ -33,16 +34,17 @@ public interface IEnergySink extends IEnergyAcceptor double injectEnergyUnits(ForgeDirection directionFrom, double amount); /** - * Determine the amount of eu which can be safely injected into the specific energy sink without - * exploding. - * - * Typical values are 32 for LV, 128 for MV, 512 for HV and 2048 for EV. A value of - * Integer.MAX_VALUE indicates no + * Determine the amount of eu which can be safely injected into the specific energy sink without exploding. + * + * Typical values are 32 for LV, 128 for MV, 512 for HV and 2048 for EV. A value of Integer.MAX_VALUE indicates no * limit. - * + * * This value is unrelated to demandsEnergy(). * + * @note Modifying the energy net from this method is disallowed. + * * @return max safe input in eu */ int getMaxSafeInput(); } + diff --git a/src/api/java/ic2/api/energy/tile/IEnergyTile.java b/src/api/java/ic2/api/energy/tile/IEnergyTile.java index c914a14b9..3938190a4 100644 --- a/src/api/java/ic2/api/energy/tile/IEnergyTile.java +++ b/src/api/java/ic2/api/energy/tile/IEnergyTile.java @@ -2,14 +2,14 @@ package ic2.api.energy.tile; /** * For internal usage only, base class for all energy tiles. - * + * * @see IEnergySink * @see IEnergySource * @see IEnergyConductor * * See ic2/api/energy/usage.txt for an overall description of the energy net api. */ -public interface IEnergyTile -{ +public interface IEnergyTile { // } + diff --git a/src/main/scala/li/cil/oc/client/Sound.scala b/src/main/scala/li/cil/oc/client/Sound.scala index adeba4fc4..2ed562f80 100644 --- a/src/main/scala/li/cil/oc/client/Sound.scala +++ b/src/main/scala/li/cil/oc/client/Sound.scala @@ -38,7 +38,7 @@ object Sound { // Set in init event. var manager: SoundManager = _ - def soundSystem: SoundSystem = ReflectionHelper.getPrivateValue(classOf[SoundManager], manager, "sndSystem") + def soundSystem: SoundSystem = ReflectionHelper.getPrivateValue(classOf[SoundManager], manager, "sndSystem", "field_148620_e", "e") private def updateVolume() { val volume = FMLClientHandler.instance.getClient.gameSettings.getSoundLevel(SoundCategory.BLOCKS) diff --git a/src/main/scala/li/cil/oc/common/tileentity/PowerAcceptor.scala b/src/main/scala/li/cil/oc/common/tileentity/PowerAcceptor.scala index 0fa341c71..047fc44d9 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/PowerAcceptor.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/PowerAcceptor.scala @@ -1,7 +1,7 @@ package li.cil.oc.common.tileentity import buildcraft.api.power.{IPowerReceptor, PowerHandler} -import cofh.api.energy.IEnergyHandler +//import cofh.api.energy.IEnergyHandler import cpw.mods.fml.common.{ModAPIManager, Loader, Optional} import cpw.mods.fml.relauncher.{Side, SideOnly} import ic2.api.energy.event.{EnergyTileUnloadEvent, EnergyTileLoadEvent} @@ -14,12 +14,12 @@ import net.minecraftforge.common.util.ForgeDirection @Optional.InterfaceList(Array( new Optional.Interface(iface = "buildcraft.api.power.IPowerReceptor", modid = "BuildCraftAPI|power"), - new Optional.Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = "IC2"), - new Optional.Interface(iface = "cofh.api.energy.IEnergyHandler", modid = "ThermalExpansion"), - new Optional.Interface(iface = "universalelectricity.api.energy.IEnergyInterface", modid = "UniversalElectricity"), - new Optional.Interface(iface = "universalelectricity.api.energy.IEnergyContainer", modid = "UniversalElectricity") + new Optional.Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = "IC2") +// new Optional.Interface(iface = "cofh.api.energy.IEnergyHandler", modid = "ThermalExpansion"), +// new Optional.Interface(iface = "universalelectricity.api.energy.IEnergyInterface", modid = "UniversalElectricity"), +// new Optional.Interface(iface = "universalelectricity.api.energy.IEnergyContainer", modid = "UniversalElectricity") )) -abstract class PowerAcceptor extends TileEntity with IPowerReceptor with IEnergySink with IEnergyHandler with IEnergyInterface with IEnergyContainer { +abstract class PowerAcceptor extends TileEntity with IPowerReceptor with IEnergySink /* with IEnergyHandler with IEnergyInterface with IEnergyContainer */ { @SideOnly(Side.CLIENT) protected def hasConnector(side: ForgeDirection) = false @@ -165,11 +165,11 @@ abstract class PowerAcceptor extends TileEntity with IPowerReceptor with IEnergy // ----------------------------------------------------------------------- // // Universal Electricity - override def canConnect(direction: ForgeDirection, source: AnyRef) = + def canConnect(direction: ForgeDirection, source: AnyRef) = !Settings.get.ignorePower && direction != null && direction != ForgeDirection.UNKNOWN && (if (isClient) hasConnector(direction) else connector(direction).isDefined) - override def onReceiveEnergy(from: ForgeDirection, receive: Long, doReceive: Boolean) = + def onReceiveEnergy(from: ForgeDirection, receive: Long, doReceive: Boolean) = if (isClient || Settings.get.ignorePower) 0 else connector(from) match { case Some(node) => @@ -185,18 +185,18 @@ abstract class PowerAcceptor extends TileEntity with IPowerReceptor with IEnergy case _ => 0 } - override def onExtractEnergy(from: ForgeDirection, extract: Long, doExtract: Boolean) = 0 + def onExtractEnergy(from: ForgeDirection, extract: Long, doExtract: Boolean) = 0 - override def setEnergy(from: ForgeDirection, energy: Long) {} + def setEnergy(from: ForgeDirection, energy: Long) {} - override def getEnergy(from: ForgeDirection) = + def getEnergy(from: ForgeDirection) = if (isClient) 0 else connector(from) match { case Some(node) => (node.globalBuffer * Settings.ratioBC).toLong case _ => 0 } - override def getEnergyCapacity(from: ForgeDirection) = + def getEnergyCapacity(from: ForgeDirection) = if (isClient) 0 else connector(from) match { case Some(node) => (node.globalBufferSize * Settings.ratioBC).toLong