2016-02-23 13:40:08 -05:00
|
|
|
package WayofTime.bloodmagic.tile;
|
|
|
|
|
2018-02-05 17:04:38 -08:00
|
|
|
import WayofTime.bloodmagic.apibutnotreally.soul.DemonWillHolder;
|
|
|
|
import WayofTime.bloodmagic.apibutnotreally.soul.EnumDemonWillType;
|
|
|
|
import WayofTime.bloodmagic.apibutnotreally.soul.IDemonWillConduit;
|
2016-02-23 13:40:08 -05:00
|
|
|
import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler;
|
2016-09-07 17:46:06 -07:00
|
|
|
import WayofTime.bloodmagic.tile.base.TileTicking;
|
2016-03-17 13:00:44 -07:00
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
import net.minecraft.util.EnumFacing;
|
|
|
|
import net.minecraft.util.math.BlockPos;
|
2016-02-23 13:40:08 -05:00
|
|
|
|
2017-08-15 21:30:48 -07:00
|
|
|
public class TileDemonPylon extends TileTicking implements IDemonWillConduit {
|
2016-02-23 13:40:08 -05:00
|
|
|
public final int maxWill = 100;
|
|
|
|
public final double drainRate = 1;
|
2017-08-15 21:30:48 -07:00
|
|
|
public DemonWillHolder holder = new DemonWillHolder();
|
2016-02-23 13:40:08 -05:00
|
|
|
|
2017-08-15 21:30:48 -07:00
|
|
|
public TileDemonPylon() {
|
2016-02-23 13:40:08 -05:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2017-08-15 21:30:48 -07:00
|
|
|
public void onUpdate() {
|
|
|
|
if (getWorld().isRemote) {
|
2016-02-23 13:40:08 -05:00
|
|
|
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);
|
2016-02-23 13:40:08 -05:00
|
|
|
|
2017-08-15 21:30:48 -07:00
|
|
|
for (EnumFacing side : EnumFacing.HORIZONTALS) {
|
2016-02-23 13:40:08 -05:00
|
|
|
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) {
|
2016-02-23 13:40:08 -05:00
|
|
|
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);
|
2016-02-23 13:40:08 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2017-08-15 21:30:48 -07:00
|
|
|
public void deserialize(NBTTagCompound tag) {
|
2016-02-23 13:40:08 -05:00
|
|
|
holder.readFromNBT(tag, "Will");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2017-08-15 21:30:48 -07:00
|
|
|
public NBTTagCompound serialize(NBTTagCompound tag) {
|
2016-02-23 13:40:08 -05:00
|
|
|
holder.writeToNBT(tag, "Will");
|
2016-05-19 17:43:33 -07:00
|
|
|
return tag;
|
2016-02-23 13:40:08 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
// IDemonWillConduit
|
|
|
|
|
|
|
|
@Override
|
2017-08-15 21:30:48 -07:00
|
|
|
public int getWeight() {
|
2016-02-23 13:40:08 -05:00
|
|
|
return 10;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2017-08-15 21:30:48 -07:00
|
|
|
public double fillDemonWill(EnumDemonWillType type, double amount, boolean doFill) {
|
|
|
|
if (amount <= 0) {
|
2016-02-23 13:40:08 -05:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2017-08-15 21:30:48 -07:00
|
|
|
if (!canFill(type)) {
|
2016-02-23 13:40:08 -05:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2017-08-15 21:30:48 -07:00
|
|
|
if (!doFill) {
|
2016-02-23 13:40:08 -05:00
|
|
|
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) {
|
2016-02-23 13:40:08 -05:00
|
|
|
double drained = amount;
|
|
|
|
double current = holder.getWill(type);
|
2017-08-15 21:30:48 -07:00
|
|
|
if (current < drained) {
|
2016-02-23 13:40:08 -05:00
|
|
|
drained = current;
|
|
|
|
}
|
|
|
|
|
2017-08-15 21:30:48 -07:00
|
|
|
if (doDrain) {
|
2016-02-23 13:40:08 -05:00
|
|
|
return holder.drainWill(type, amount);
|
|
|
|
}
|
|
|
|
|
|
|
|
return drained;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2017-08-15 21:30:48 -07:00
|
|
|
public boolean canFill(EnumDemonWillType type) {
|
2016-02-23 13:40:08 -05:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2017-08-15 21:30:48 -07:00
|
|
|
public boolean canDrain(EnumDemonWillType type) {
|
2016-02-23 13:40:08 -05:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2017-08-15 21:30:48 -07:00
|
|
|
public double getCurrentWill(EnumDemonWillType type) {
|
2016-02-23 13:40:08 -05:00
|
|
|
return holder.getWill(type);
|
|
|
|
}
|
|
|
|
}
|