diff --git a/src/main/java/techreborn/tiles/generator/TileDragonEggSiphoner.java b/src/main/java/techreborn/tiles/generator/TileDragonEggSiphoner.java index b4bea25c8..61f98fdad 100644 --- a/src/main/java/techreborn/tiles/generator/TileDragonEggSiphoner.java +++ b/src/main/java/techreborn/tiles/generator/TileDragonEggSiphoner.java @@ -8,6 +8,7 @@ import net.minecraft.util.math.BlockPos; import reborncore.api.power.EnumPowerTier; import reborncore.api.tile.IInventoryProvider; import reborncore.common.IWrenchable; +import reborncore.common.blocks.BlockMachineBase; import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.util.Inventory; import techreborn.config.ConfigTechReborn; @@ -22,17 +23,42 @@ public class TileDragonEggSiphoner extends TilePowerAcceptor implements IWrencha super(2); } + private long lastOutput = 0; + @Override public void updateEntity() { super.updateEntity(); if (!world.isRemote) { if (world.getBlockState(new BlockPos(getPos().getX(), getPos().getY() + 1, getPos().getZ())) - .getBlock() == Blocks.DRAGON_EGG) { - addEnergy(euTick); + .getBlock() == Blocks.DRAGON_EGG) { + if(tryAddingEnergy(euTick)) + this.lastOutput = this.world.getTotalWorldTime(); } + + if (this.world.getTotalWorldTime() - this.lastOutput < 30 && !this.isActive()) + this.world.setBlockState(this.getPos(), + this.world.getBlockState(this.getPos()).withProperty(BlockMachineBase.ACTIVE, true)); + else if (this.world.getTotalWorldTime() - this.lastOutput > 30 && this.isActive()) + this.world.setBlockState(this.getPos(), + this.world.getBlockState(this.getPos()).withProperty(BlockMachineBase.ACTIVE, false)); } } + + private boolean tryAddingEnergy(int amount) + { + if(this.getMaxPower() - this.getEnergy() >= amount) + { + addEnergy(amount); + return true; + } + else if(this.getMaxPower() - this.getEnergy() > 0) + { + addEnergy(this.getMaxPower() - this.getEnergy()); + return true; + } + return false; + } @Override public boolean wrenchCanSetFacing(EntityPlayer entityPlayer, EnumFacing side) { diff --git a/src/main/java/techreborn/tiles/generator/TileGasTurbine.java b/src/main/java/techreborn/tiles/generator/TileGasTurbine.java index e136e8e44..90d23d437 100644 --- a/src/main/java/techreborn/tiles/generator/TileGasTurbine.java +++ b/src/main/java/techreborn/tiles/generator/TileGasTurbine.java @@ -113,7 +113,7 @@ public class TileGasTurbine extends TilePowerAcceptor implements IWrenchable, II this.syncWithAll(); } - if (this.tank.getFluidAmount() > 0 && this.getMaxPower() - this.getEnergy() >= TileGasTurbine.euTick) { + if (this.tank.getFluidAmount() > 0 && tryAddingEnergy(euTick)) { final Integer euPerBucket = this.fluids.get(this.tank.getFluidType().getName()); // float totalTicks = (float)euPerBucket / 8f; //x eu per bucket / 8 // eu per tick @@ -128,7 +128,6 @@ public class TileGasTurbine extends TilePowerAcceptor implements IWrenchable, II this.pendingWithdraw -= currentWithdraw; this.tank.drain(currentWithdraw, true); - this.addEnergy(TileGasTurbine.euTick); if (!this.isActive()) this.world.setBlockState(this.getPos(), @@ -136,6 +135,7 @@ public class TileGasTurbine extends TilePowerAcceptor implements IWrenchable, II } else if (this.isActive()) this.world.setBlockState(this.getPos(), this.world.getBlockState(this.getPos()).withProperty(BlockMachineBase.ACTIVE, false)); + if (this.tank.getFluidType() != null && this.getStackInSlot(2) == ItemStack.EMPTY) { this.inventory.setInventorySlotContents(2, new ItemStack(this.tank.getFluidType().getBlock())); } else if (this.tank.getFluidType() == null && this.getStackInSlot(2) != ItemStack.EMPTY) { @@ -143,6 +143,21 @@ public class TileGasTurbine extends TilePowerAcceptor implements IWrenchable, II } } + private boolean tryAddingEnergy(int amount) + { + if(this.getMaxPower() - this.getEnergy() >= amount) + { + addEnergy(amount); + return true; + } + else if(this.getMaxPower() - this.getEnergy() > 0) + { + addEnergy(this.getMaxPower() - this.getEnergy()); + return true; + } + return false; + } + @Override public double getMaxPower() { return ConfigTechReborn.ThermalGeneratorCharge; diff --git a/src/main/java/techreborn/tiles/generator/TileHeatGenerator.java b/src/main/java/techreborn/tiles/generator/TileHeatGenerator.java index 2c3cd1004..4a76f67b1 100644 --- a/src/main/java/techreborn/tiles/generator/TileHeatGenerator.java +++ b/src/main/java/techreborn/tiles/generator/TileHeatGenerator.java @@ -7,6 +7,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import reborncore.api.power.EnumPowerTier; import reborncore.common.IWrenchable; +import reborncore.common.blocks.BlockMachineBase; import reborncore.common.powerSystem.TilePowerAcceptor; import techreborn.config.ConfigTechReborn; import techreborn.init.ModBlocks; @@ -18,31 +19,50 @@ public class TileHeatGenerator extends TilePowerAcceptor implements IWrenchable public TileHeatGenerator() { super(1); } + + private long lastOutput = 0; @Override public void updateEntity() { super.updateEntity(); if (!world.isRemote) { - if (world.getBlockState(new BlockPos(getPos().getX() + 1, getPos().getY(), getPos().getZ())) - .getBlock() == Blocks.LAVA) { - addEnergy(euTick); - } else if (world.getBlockState(new BlockPos(getPos().getX(), getPos().getY(), getPos().getZ() + 1)) - .getBlock() == Blocks.LAVA) { - addEnergy(euTick); - } else if (world.getBlockState(new BlockPos(getPos().getX(), getPos().getY(), getPos().getZ() - 1)) - .getBlock() == Blocks.LAVA) { - addEnergy(euTick); - } else if (world.getBlockState(new BlockPos(getPos().getX() - 1, getPos().getY(), getPos().getZ())) - .getBlock() == Blocks.LAVA) { - addEnergy(euTick); - } else if (world.getBlockState(new BlockPos(getPos().getX(), getPos().getY() - 1, getPos().getZ())) - .getBlock() == Blocks.LAVA) { - addEnergy(euTick); + for (final EnumFacing direction : EnumFacing.values()) { + if(direction.equals(EnumFacing.UP)) + continue; + if (this.world + .getBlockState(new BlockPos(this.getPos().getX() + direction.getFrontOffsetX(), + this.getPos().getY() + direction.getFrontOffsetY(), + this.getPos().getZ() + direction.getFrontOffsetZ())) + .getBlock() == Blocks.LAVA) { + if(tryAddingEnergy(euTick)) + this.lastOutput = this.world.getTotalWorldTime(); + } } + if (this.world.getTotalWorldTime() - this.lastOutput < 30 && !this.isActive()) + this.world.setBlockState(this.getPos(), + this.world.getBlockState(this.getPos()).withProperty(BlockMachineBase.ACTIVE, true)); + else if (this.world.getTotalWorldTime() - this.lastOutput > 30 && this.isActive()) + this.world.setBlockState(this.getPos(), + this.world.getBlockState(this.getPos()).withProperty(BlockMachineBase.ACTIVE, false)); } } + + private boolean tryAddingEnergy(int amount) + { + if(this.getMaxPower() - this.getEnergy() >= amount) + { + addEnergy(amount); + return true; + } + else if(this.getMaxPower() - this.getEnergy() > 0) + { + addEnergy(this.getMaxPower() - this.getEnergy()); + return true; + } + return false; + } @Override public boolean wrenchCanSetFacing(EntityPlayer entityPlayer, EnumFacing side) { diff --git a/src/main/java/techreborn/tiles/generator/TileSemifluidGenerator.java b/src/main/java/techreborn/tiles/generator/TileSemifluidGenerator.java index e57f4358a..0d55ec9a6 100644 --- a/src/main/java/techreborn/tiles/generator/TileSemifluidGenerator.java +++ b/src/main/java/techreborn/tiles/generator/TileSemifluidGenerator.java @@ -119,7 +119,7 @@ public class TileSemifluidGenerator extends TilePowerAcceptor implements IWrench this.syncWithAll(); } - if (tank.getFluidAmount() > 0 && getMaxPower() - getEnergy() >= euTick && tank.getFluidType() != null && fluids.containsKey(tank.getFluidType().getName())) { + if (tank.getFluidAmount() > 0 && tank.getFluidType() != null && fluids.containsKey(tank.getFluidType().getName()) && tryAddingEnergy(euTick)) { Integer euPerBucket = fluids.get(tank.getFluidType().getName()); // float totalTicks = (float)euPerBucket / 8f; //x eu per bucket / 8 // eu per tick @@ -133,7 +133,6 @@ public class TileSemifluidGenerator extends TilePowerAcceptor implements IWrench pendingWithdraw -= currentWithdraw; tank.drain(currentWithdraw, true); - addEnergy(euTick); if(!this.isActive()) this.world.setBlockState(this.getPos(), this.world.getBlockState(this.getPos()).withProperty(BlockMachineBase.ACTIVE, true)); @@ -147,6 +146,21 @@ public class TileSemifluidGenerator extends TilePowerAcceptor implements IWrench setInventorySlotContents(2, ItemStack.EMPTY); } } + + private boolean tryAddingEnergy(int amount) + { + if(this.getMaxPower() - this.getEnergy() >= amount) + { + addEnergy(amount); + return true; + } + else if(this.getMaxPower() - this.getEnergy() > 0) + { + addEnergy(this.getMaxPower() - this.getEnergy()); + return true; + } + return false; + } @Override public double getMaxPower() { diff --git a/src/main/java/techreborn/tiles/generator/TileThermalGenerator.java b/src/main/java/techreborn/tiles/generator/TileThermalGenerator.java index c099479fa..c4723c65a 100644 --- a/src/main/java/techreborn/tiles/generator/TileThermalGenerator.java +++ b/src/main/java/techreborn/tiles/generator/TileThermalGenerator.java @@ -108,16 +108,18 @@ public class TileThermalGenerator extends TilePowerAcceptor implements IWrenchab this.getPos().getY() + direction.getFrontOffsetY(), this.getPos().getZ() + direction.getFrontOffsetZ())) .getBlock() == Blocks.LAVA) { - this.addEnergy(1); - this.lastOutput = this.world.getTotalWorldTime(); + if(this.tryAddingEnergy(1)) + this.lastOutput = this.world.getTotalWorldTime(); } } } - if (this.tank.getFluidAmount() > 0 && this.getMaxPower() - this.getEnergy() >= TileThermalGenerator.euTick) { - this.tank.drain(1, true); - this.addEnergy(TileThermalGenerator.euTick); - this.lastOutput = this.world.getTotalWorldTime(); + if (this.tank.getFluidAmount() > 0) { + if(tryAddingEnergy(euTick)) + { + this.tank.drain(1, true); + this.lastOutput = this.world.getTotalWorldTime(); + } } if (!this.world.isRemote) { @@ -135,6 +137,21 @@ public class TileThermalGenerator extends TilePowerAcceptor implements IWrenchab this.inventory.setInventorySlotContents(2, ItemStack.EMPTY); } } + + private boolean tryAddingEnergy(int amount) + { + if(this.getMaxPower() - this.getEnergy() >= amount) + { + addEnergy(amount); + return true; + } + else if(this.getMaxPower() - this.getEnergy() > 0) + { + addEnergy(this.getMaxPower() - this.getEnergy()); + return true; + } + return false; + } @Override public double getMaxPower() {