diff --git a/changelog.txt b/changelog.txt index 50240f4d..167daa66 100644 --- a/changelog.txt +++ b/changelog.txt @@ -3,6 +3,8 @@ Version 2.1.0-67 ------------------------------------------------------ - Added the Destructive Will effect to the Ritual of the Green Grove. This ritual now is done~ - Added more augmentations for the Lava Ritual. +- Implemented a new model for the Blood Altar to be more in-line with the rest of the mod (Thanks, wiiv!) +- Made the Blood Altar respect the new capability system for fluid management. ------------------------------------------------------ Version 2.1.0-66 diff --git a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java index da924c36..d3c30a6b 100644 --- a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java +++ b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java @@ -12,11 +12,12 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.capability.FluidTankPropertiesWrapper; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; @@ -788,7 +789,7 @@ public class BloodAltar implements IFluidHandler } @Override - public int fill(EnumFacing from, FluidStack resource, boolean doFill) + public int fill(FluidStack resource, boolean doFill) { if (resource == null || resource.getFluid() != BlockLifeEssence.getLifeEssence()) { @@ -836,17 +837,17 @@ public class BloodAltar implements IFluidHandler } @Override - public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + public FluidStack drain(FluidStack resource, boolean doDrain) { if (resource == null || !resource.isFluidEqual(fluidOutput)) { return null; } - return drain(from, resource.amount, doDrain); + return drain(resource.amount, doDrain); } @Override - public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + public FluidStack drain(int maxDrain, boolean doDrain) { if (fluidOutput == null) { @@ -868,20 +869,8 @@ public class BloodAltar implements IFluidHandler } @Override - public boolean canFill(EnumFacing from, Fluid fluid) + public IFluidTankProperties[] getTankProperties() { - return fluid == BlockLifeEssence.getLifeEssence(); - } - - @Override - public boolean canDrain(EnumFacing from, Fluid fluid) - { - return fluid == BlockLifeEssence.getLifeEssence(); - } - - @Override - public FluidTankInfo[] getTankInfo(EnumFacing from) - { - return new FluidTankInfo[] { new FluidTankInfo(fluid, capacity) }; + return new IFluidTankProperties[] { new FluidTankPropertiesWrapper(new FluidTank(fluid, capacity)) }; } } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualLava.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualLava.java index 273e64be..b225e5a5 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualLava.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualLava.java @@ -62,6 +62,7 @@ public class RitualLava extends Ritual World world = masterRitualStone.getWorldObj(); SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); int currentEssence = network.getCurrentEssence(); + int lpDrain = 0; if (currentEssence < getRefreshCost()) { @@ -70,10 +71,11 @@ public class RitualLava extends Ritual } BlockPos pos = masterRitualStone.getBlockPos(); - int maxEffects = currentEssence / getRefreshCost(); - int totalEffects = 0; - List willConfig = masterRitualStone.getActiveWillConfig(); + + double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); + double rawDrained = 0; + DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(world, pos); AreaDescriptor lavaRange = getBlockRange(LAVA_RANGE); @@ -88,13 +90,20 @@ public class RitualLava extends Ritual IBlockState state = world.getBlockState(newPos); if (world.isAirBlock(newPos) || Utils.isFlowingLiquid(world, newPos, state)) { + int lpCost = getLPCostForRawWill(rawWill); + if (currentEssence < lpCost) + { + break; + } world.setBlockState(newPos, Blocks.FLOWING_LAVA.getDefaultState()); - totalEffects++; - } - - if (totalEffects >= maxEffects) - { - break; + currentEssence -= lpCost; + lpDrain += lpCost; + if (rawWill > 0) + { + double drain = getWillCostForRawWill(rawWill); + rawWill -= drain; + rawDrained += drain; + } } } @@ -201,7 +210,12 @@ public class RitualLava extends Ritual } } - network.syphon(getRefreshCost() * totalEffects); + if (rawDrained > 0) + { + WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawDrained, true); + } + + network.syphon(lpDrain); } @Override @@ -292,4 +306,14 @@ public class RitualLava extends Ritual { return (float) (1 + corrosiveWill * 0.05); } + + public int getLPCostForRawWill(double raw) + { + return Math.max((int) (500 - raw), 0); + } + + public double getWillCostForRawWill(double raw) + { + return Math.min(1, raw / 500); + } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java b/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java index 7e28a486..523c1190 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java @@ -1,18 +1,20 @@ package WayofTime.bloodmagic.tile; -import WayofTime.bloodmagic.altar.BloodAltar; -import WayofTime.bloodmagic.api.altar.EnumAltarTier; -import WayofTime.bloodmagic.api.altar.IBloodAltar; +import javax.annotation.Nonnull; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import WayofTime.bloodmagic.altar.BloodAltar; +import WayofTime.bloodmagic.api.altar.EnumAltarTier; +import WayofTime.bloodmagic.api.altar.IBloodAltar; -public class TileAltar extends TileInventory implements IBloodAltar, ITickable, IFluidHandler +import com.sun.istack.internal.Nullable; + +public class TileAltar extends TileInventory implements IBloodAltar, ITickable { private BloodAltar bloodAltar; @@ -62,43 +64,6 @@ public class TileAltar extends TileInventory implements IBloodAltar, ITickable, return slot == 0; } - /* IFluidHandler */ - @Override - public int fill(EnumFacing from, FluidStack resource, boolean doFill) - { - return bloodAltar.fill(from, resource, doFill); - } - - @Override - public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) - { - return bloodAltar.drain(from, resource, doDrain); - } - - @Override - public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) - { - return bloodAltar.drain(from, maxDrain, doDrain); - } - - @Override - public boolean canFill(EnumFacing from, Fluid fluid) - { - return bloodAltar.canFill(from, fluid); - } - - @Override - public boolean canDrain(EnumFacing from, Fluid fluid) - { - return bloodAltar.canDrain(from, fluid); - } - - @Override - public FluidTankInfo[] getTankInfo(EnumFacing from) - { - return bloodAltar.getTankInfo(from); - } - @Override public int getCapacity() { @@ -234,4 +199,27 @@ public class TileAltar extends TileInventory implements IBloodAltar, ITickable, { return bloodAltar.setCurrentTierDisplayed(altarTier); } + + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return true; + } + + return super.hasCapability(capability, facing); + } + + @SuppressWarnings("unchecked") + @Override + public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return (T) bloodAltar; + } + + return super.getCapability(capability, facing); + } } \ No newline at end of file