2015-06-14 14:35:36 +02:00
|
|
|
package techreborn.tiles.lesu;
|
|
|
|
|
2015-11-23 15:45:16 +01:00
|
|
|
import net.minecraft.util.EnumFacing;
|
2016-03-15 09:13:05 +01:00
|
|
|
import net.minecraft.util.math.BlockPos;
|
2016-03-08 18:34:04 +01:00
|
|
|
import reborncore.api.power.EnumPowerTier;
|
2016-07-21 17:22:56 +02:00
|
|
|
import reborncore.common.tile.TilePowerAcceptorProducer;
|
2015-11-08 13:15:45 +01:00
|
|
|
import reborncore.common.util.Inventory;
|
2015-06-14 17:54:49 +02:00
|
|
|
import techreborn.config.ConfigTechReborn;
|
2016-07-21 16:51:55 +02:00
|
|
|
import techreborn.power.EnergyUtils;
|
2015-06-14 14:35:36 +02:00
|
|
|
|
2016-03-28 21:51:23 +02:00
|
|
|
import java.util.ArrayList;
|
|
|
|
|
2016-07-21 17:22:56 +02:00
|
|
|
public class TileLesu extends TilePowerAcceptorProducer {// TODO wrench
|
2016-03-25 10:47:34 +01:00
|
|
|
|
|
|
|
public int connectedBlocks = 0;
|
|
|
|
public Inventory inventory = new Inventory(2, "TileAesu", 64, this);
|
2016-04-03 15:34:39 +02:00
|
|
|
private ArrayList<LesuNetwork> countedNetworks = new ArrayList<>();
|
2016-03-25 10:47:34 +01:00
|
|
|
private double euLastTick = 0;
|
|
|
|
private double euChange;
|
|
|
|
private int ticks;
|
|
|
|
private int output;
|
|
|
|
private int maxStorage;
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
2016-07-21 17:22:56 +02:00
|
|
|
public void update() {
|
|
|
|
super.update();
|
2016-07-18 06:57:52 +02:00
|
|
|
if (worldObj.isRemote) {
|
2016-03-25 10:47:34 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
countedNetworks.clear();
|
|
|
|
connectedBlocks = 0;
|
2016-07-18 06:57:52 +02:00
|
|
|
for (EnumFacing dir : EnumFacing.values()) {
|
2016-03-25 10:47:34 +01:00
|
|
|
if (worldObj.getTileEntity(
|
|
|
|
new BlockPos(getPos().getX() + dir.getFrontOffsetX(), getPos().getY() + dir.getFrontOffsetY(),
|
2016-07-18 06:57:52 +02:00
|
|
|
getPos().getZ() + dir.getFrontOffsetZ())) instanceof TileLesuStorage) {
|
2016-03-25 10:47:34 +01:00
|
|
|
if (((TileLesuStorage) worldObj.getTileEntity(
|
|
|
|
new BlockPos(getPos().getX() + dir.getFrontOffsetX(), getPos().getY() + dir.getFrontOffsetY(),
|
2016-07-18 06:57:52 +02:00
|
|
|
getPos().getZ() + dir.getFrontOffsetZ()))).network != null) {
|
2016-03-25 10:47:34 +01:00
|
|
|
LesuNetwork network = ((TileLesuStorage) worldObj.getTileEntity(new BlockPos(
|
|
|
|
getPos().getX() + dir.getFrontOffsetX(), getPos().getY() + dir.getFrontOffsetY(),
|
|
|
|
getPos().getZ() + dir.getFrontOffsetZ()))).network;
|
2016-07-18 06:57:52 +02:00
|
|
|
if (!countedNetworks.contains(network)) {
|
|
|
|
if (network.master == null || network.master == this) {
|
2016-03-25 10:47:34 +01:00
|
|
|
connectedBlocks += network.storages.size();
|
|
|
|
countedNetworks.add(network);
|
|
|
|
network.master = this;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-03-28 21:51:23 +02:00
|
|
|
maxStorage = ((connectedBlocks + 1) * ConfigTechReborn.LesuStoragePerBlock);
|
|
|
|
output = (connectedBlocks * ConfigTechReborn.ExtraOutputPerLesuBlock) + ConfigTechReborn.BaseLesuOutput;
|
2016-03-25 10:47:34 +01:00
|
|
|
|
2016-07-18 06:57:52 +02:00
|
|
|
if (ticks == ConfigTechReborn.AverageEuOutTickTime) {
|
2016-03-25 10:47:34 +01:00
|
|
|
euChange = -1;
|
|
|
|
ticks = 0;
|
2016-07-18 06:57:52 +02:00
|
|
|
} else {
|
2016-03-25 10:47:34 +01:00
|
|
|
ticks++;
|
2016-07-18 06:57:52 +02:00
|
|
|
if (euChange == -1) {
|
2016-03-25 10:47:34 +01:00
|
|
|
euChange = 0;
|
|
|
|
}
|
|
|
|
euChange += getEnergy() - euLastTick;
|
2016-07-18 06:57:52 +02:00
|
|
|
if (euLastTick == getEnergy()) {
|
2016-03-25 10:47:34 +01:00
|
|
|
euChange = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
euLastTick = getEnergy();
|
2016-07-18 06:57:52 +02:00
|
|
|
|
|
|
|
if (!worldObj.isRemote && getEnergy() > 0) {
|
|
|
|
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
|
2016-07-21 17:22:56 +02:00
|
|
|
for(EnumFacing facing : EnumFacing.VALUES) {
|
|
|
|
double disposed = emitEnergy(facing, maxOutput);
|
|
|
|
if(disposed != 0) {
|
|
|
|
maxOutput -= disposed;
|
|
|
|
useEnergy(disposed);
|
|
|
|
if (maxOutput == 0) return;
|
|
|
|
}
|
|
|
|
}
|
2016-07-18 06:57:52 +02:00
|
|
|
}
|
|
|
|
|
2016-03-25 10:47:34 +01:00
|
|
|
}
|
|
|
|
|
2016-07-21 17:22:56 +02:00
|
|
|
//TODO move to RebornCore
|
|
|
|
public double emitEnergy(EnumFacing enumFacing, double amount) {
|
|
|
|
BlockPos pos = getPos().offset(enumFacing);
|
|
|
|
EnergyUtils.PowerNetReceiver receiver = EnergyUtils.getReceiver(
|
|
|
|
worldObj, enumFacing.getOpposite(), pos);
|
|
|
|
if(receiver != null) {
|
|
|
|
return receiver.receiveEnergy(amount, false);
|
2016-03-25 10:47:34 +01:00
|
|
|
}
|
2016-07-21 17:22:56 +02:00
|
|
|
return 0;
|
2016-03-25 10:47:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-07-21 17:22:56 +02:00
|
|
|
public double getEuChange() {
|
|
|
|
if (euChange == -1) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return (euChange / ticks);
|
2016-03-25 10:47:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2016-07-21 17:22:56 +02:00
|
|
|
public double getMaxPower() {
|
|
|
|
return maxStorage;
|
2016-03-25 10:47:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2016-07-21 17:22:56 +02:00
|
|
|
public EnumPowerTier getTier() {
|
|
|
|
return EnumPowerTier.INSANE;
|
2016-03-25 10:47:34 +01:00
|
|
|
}
|
2015-06-14 14:35:36 +02:00
|
|
|
}
|