BloodMagic/src/main/java/WayofTime/bloodmagic/tile/TileDemonPylon.java

106 lines
3 KiB
Java
Raw Normal View History

package WayofTime.bloodmagic.tile;
import WayofTime.bloodmagic.apibutnotreally.soul.DemonWillHolder;
import WayofTime.bloodmagic.apibutnotreally.soul.EnumDemonWillType;
import WayofTime.bloodmagic.apibutnotreally.soul.IDemonWillConduit;
import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler;
import WayofTime.bloodmagic.tile.base.TileTicking;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
2017-08-15 21:30:48 -07:00
public class TileDemonPylon extends TileTicking implements IDemonWillConduit {
public final int maxWill = 100;
public final double drainRate = 1;
2017-08-15 21:30:48 -07:00
public DemonWillHolder holder = new DemonWillHolder();
2017-08-15 21:30:48 -07:00
public TileDemonPylon() {
}
@Override
2017-08-15 21:30:48 -07:00
public void onUpdate() {
if (getWorld().isRemote) {
return;
}
2017-08-15 21:30:48 -07:00
for (EnumDemonWillType type : EnumDemonWillType.values()) {
2016-12-12 19:56:36 -08:00
double currentAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type);
2017-08-15 21:30:48 -07:00
for (EnumFacing side : EnumFacing.HORIZONTALS) {
BlockPos offsetPos = pos.offset(side, 16);
2016-12-12 19:56:36 -08:00
double sideAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), offsetPos, type);
2017-08-15 21:30:48 -07:00
if (sideAmount > currentAmount) {
double drainAmount = Math.min((sideAmount - currentAmount) / 2, drainRate);
2016-12-12 19:56:36 -08:00
double drain = WorldDemonWillHandler.drainWill(getWorld(), offsetPos, type, drainAmount, true);
WorldDemonWillHandler.fillWill(getWorld(), pos, type, drain, true);
}
}
}
}
@Override
2017-08-15 21:30:48 -07:00
public void deserialize(NBTTagCompound tag) {
holder.readFromNBT(tag, "Will");
}
@Override
2017-08-15 21:30:48 -07:00
public NBTTagCompound serialize(NBTTagCompound tag) {
holder.writeToNBT(tag, "Will");
return tag;
}
// IDemonWillConduit
@Override
2017-08-15 21:30:48 -07:00
public int getWeight() {
return 10;
}
@Override
2017-08-15 21:30:48 -07:00
public double fillDemonWill(EnumDemonWillType type, double amount, boolean doFill) {
if (amount <= 0) {
return 0;
}
2017-08-15 21:30:48 -07:00
if (!canFill(type)) {
return 0;
}
2017-08-15 21:30:48 -07:00
if (!doFill) {
return Math.min(maxWill - holder.getWill(type), amount);
}
return holder.addWill(type, amount, maxWill);
}
@Override
2017-08-15 21:30:48 -07:00
public double drainDemonWill(EnumDemonWillType type, double amount, boolean doDrain) {
double drained = amount;
double current = holder.getWill(type);
2017-08-15 21:30:48 -07:00
if (current < drained) {
drained = current;
}
2017-08-15 21:30:48 -07:00
if (doDrain) {
return holder.drainWill(type, amount);
}
return drained;
}
@Override
2017-08-15 21:30:48 -07:00
public boolean canFill(EnumDemonWillType type) {
return true;
}
@Override
2017-08-15 21:30:48 -07:00
public boolean canDrain(EnumDemonWillType type) {
return true;
}
@Override
2017-08-15 21:30:48 -07:00
public double getCurrentWill(EnumDemonWillType type) {
return holder.getWill(type);
}
}