TechReborn/src/main/java/techreborn/tiles/lesu/TileLesu.java

130 lines
3.1 KiB
Java
Raw Normal View History

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;
import reborncore.api.power.EnumPowerTier;
2016-02-24 09:18:21 +01:00
import reborncore.common.powerSystem.TilePowerAcceptor;
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;
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-03-25 10:47:34 +01:00
public class TileLesu extends TilePowerAcceptor
{// TODO wrench
public int connectedBlocks = 0;
public Inventory inventory = new Inventory(2, "TileAesu", 64, this);
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;
public TileLesu()
{
super(5);
}
@Override
public void updateEntity() {
2016-03-25 10:47:34 +01:00
super.updateEntity();
if (worldObj.isRemote) {
2016-03-25 10:47:34 +01:00
return;
}
countedNetworks.clear();
connectedBlocks = 0;
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(),
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(),
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;
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
if (ticks == ConfigTechReborn.AverageEuOutTickTime) {
2016-03-25 10:47:34 +01:00
euChange = -1;
ticks = 0;
} else {
2016-03-25 10:47:34 +01:00
ticks++;
if (euChange == -1) {
2016-03-25 10:47:34 +01:00
euChange = 0;
}
euChange += getEnergy() - euLastTick;
if (euLastTick == getEnergy()) {
2016-03-25 10:47:34 +01:00
euChange = 0;
}
}
euLastTick = getEnergy();
if (!worldObj.isRemote && getEnergy() > 0) {
double maxOutput = getEnergy() > getMaxOutput() ? getMaxOutput() : getEnergy();
useEnergy(EnergyUtils.dispatchEnergyToNeighbours(worldObj, getPos(), this, maxOutput));
}
2016-03-25 10:47:34 +01:00
}
public double getEuChange()
{
if (euChange == -1)
{
return 0;
}
return (euChange / ticks);
}
@Override
public double getMaxPower()
{
return maxStorage;
}
@Override
public boolean canAcceptEnergy(EnumFacing direction)
{
return direction != getFacingEnum();
}
@Override
public boolean canProvideEnergy(EnumFacing direction)
{
return direction == getFacingEnum();
}
@Override
public double getMaxOutput()
{
return output;
}
@Override
public double getMaxInput()
{
return 8192;
}
@Override
public EnumPowerTier getTier()
{
return EnumPowerTier.EXTREME;
}
2015-06-14 14:35:36 +02:00
}