some progress on the new energy system, for #1578

This commit is contained in:
SpaceToad 2014-04-06 18:05:39 +02:00
parent 69825c8fc8
commit d66a0e6271
2 changed files with 32 additions and 22 deletions

View file

@ -14,6 +14,7 @@ import java.util.TreeMap;
import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World; import net.minecraft.world.World;
import buildcraft.api.core.SafeTimeTracker; import buildcraft.api.core.SafeTimeTracker;
import buildcraft.api.mj.MjBattery;
import buildcraft.core.BlockIndex; import buildcraft.core.BlockIndex;
import buildcraft.core.LaserData; import buildcraft.core.LaserData;
import buildcraft.core.TileBuildCraft; import buildcraft.core.TileBuildCraft;
@ -24,15 +25,8 @@ import buildcraft.core.network.RPCSide;
public class TileEnergyEmitter extends TileBuildCraft { public class TileEnergyEmitter extends TileBuildCraft {
/** @MjBattery (maxCapacity = 1024, maxReceivedPerCycle = 1204, minimumConsumption = 0)
* TODO: Try to use these instead of IPowerReceptor public double mjStored;
*/
public float _MJ_STORED = 0;
/*
public static final float __MJ_POWER_MAX = 1024;
public static final boolean __MJ_RECEIVE_PNEUMATIC = true;
public static final boolean __MJ_RECEIVE_LASER = false;
*/
public float mjAcc = 0; public float mjAcc = 0;
public int accumulated = 0; public int accumulated = 0;
@ -72,7 +66,7 @@ public class TileEnergyEmitter extends TileBuildCraft {
if (t.data.wavePosition > t.data.renderSize) { if (t.data.wavePosition > t.data.renderSize) {
t.data.wavePosition = 0; t.data.wavePosition = 0;
t.data.waveSize = (_MJ_STORED / targets.size() / 10F); t.data.waveSize = (float) (mjStored / targets.size() / 10F);
if (t.data.waveSize > 1) { if (t.data.waveSize > 1) {
t.data.waveSize = 1F; t.data.waveSize = 1F;
@ -112,7 +106,7 @@ public class TileEnergyEmitter extends TileBuildCraft {
// synchronize regularly with the client an average of the energy in // synchronize regularly with the client an average of the energy in
// the emitter // the emitter
mjAcc += _MJ_STORED; mjAcc += mjStored;
accumulated++; accumulated++;
if (syncMJ.markTimeIfDelay(worldObj)) { if (syncMJ.markTimeIfDelay(worldObj)) {
@ -122,7 +116,7 @@ public class TileEnergyEmitter extends TileBuildCraft {
accumulated = 0; accumulated = 0;
} }
if (_MJ_STORED == 0) { if (mjStored == 0) {
for (Target t : targets.values()) { for (Target t : targets.values()) {
if (t.data.isVisible) { if (t.data.isVisible) {
t.data.isVisible = false; t.data.isVisible = false;
@ -132,13 +126,13 @@ public class TileEnergyEmitter extends TileBuildCraft {
} }
} }
} else { } else {
float perTargetEnergy = 10; double perTargetEnergy = 10;
if (_MJ_STORED > targets.size() * 10) { if (mjStored > targets.size() * 10) {
_MJ_STORED -= targets.size() * 10; mjStored -= targets.size() * 10;
} else { } else {
perTargetEnergy = _MJ_STORED / targets.size(); perTargetEnergy = mjStored / targets.size();
_MJ_STORED = 0; mjStored = 0;
} }
for (Target t : targets.values()) { for (Target t : targets.values()) {
@ -158,7 +152,7 @@ public class TileEnergyEmitter extends TileBuildCraft {
@RPC (RPCSide.CLIENT) @RPC (RPCSide.CLIENT)
public void synchronizeMJ (float val) { public void synchronizeMJ (float val) {
_MJ_STORED = val; mjStored = val;
} }
@RPC (RPCSide.CLIENT) @RPC (RPCSide.CLIENT)

View file

@ -12,16 +12,19 @@ import java.util.LinkedList;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.power.IPowerEmitter;
import buildcraft.api.power.IPowerReceptor; import buildcraft.api.power.IPowerReceptor;
import buildcraft.api.power.PowerHandler; import buildcraft.api.power.PowerHandler;
import buildcraft.api.power.PowerHandler.PowerReceiver; import buildcraft.api.power.PowerHandler.PowerReceiver;
import buildcraft.api.transport.IPipeConnection; import buildcraft.api.transport.IPipeConnection;
import buildcraft.api.transport.IPipeTile.PipeType; import buildcraft.api.transport.IPipeTile.PipeType;
import buildcraft.core.ReflectMjAPI;
import buildcraft.core.ReflectMjAPI.BatteryObject;
import buildcraft.core.TileBuffer; import buildcraft.core.TileBuffer;
import buildcraft.core.TileBuildCraft; import buildcraft.core.TileBuildCraft;
public class TileEnergyReceiver extends TileBuildCraft implements IPipeConnection { public class TileEnergyReceiver extends TileBuildCraft implements IPipeConnection, IPowerEmitter {
public float energyStored = 0;; public float energyStored = 0;
private TileBuffer[] tileCache; private TileBuffer[] tileCache;
@ -47,6 +50,8 @@ public class TileEnergyReceiver extends TileBuildCraft implements IPipeConnectio
public boolean isPoweredTile(TileEntity tile, ForgeDirection side) { public boolean isPoweredTile(TileEntity tile, ForgeDirection side) {
if (tile instanceof IPowerReceptor) { if (tile instanceof IPowerReceptor) {
return ((IPowerReceptor) tile).getPowerReceiver(side.getOpposite()) != null; return ((IPowerReceptor) tile).getPowerReceiver(side.getOpposite()) != null;
} else if (ReflectMjAPI.getMjBattery(tile) != null) {
return true;
} }
return false; return false;
@ -66,9 +71,15 @@ public class TileEnergyReceiver extends TileBuildCraft implements IPipeConnectio
energyStored = 0; energyStored = 0;
} }
} else if (tile != null) {
BatteryObject battery = ReflectMjAPI.getMjBattery(tile);
if (battery != null) {
battery.addEnergy(energyStored);
energyStored = 0;
}
} }
} }
} }
@Override @Override
@ -82,4 +93,9 @@ public class TileEnergyReceiver extends TileBuildCraft implements IPipeConnectio
sendPower (); sendPower ();
} }
} @Override
public boolean canEmitPowerFrom(ForgeDirection side) {
return true;
}
}