Made the Blood Altar respect the new capability system for fluid management.

This commit is contained in:
WayofTime 2016-10-24 18:15:30 -04:00
parent db33b87b1c
commit 77b5f898ca
4 changed files with 79 additions and 76 deletions

View file

@ -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

View file

@ -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)) };
}
}

View file

@ -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<EnumDemonWillType> 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);
}
}

View file

@ -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> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing)
{
if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
{
return (T) bloodAltar;
}
return super.getCapability(capability, facing);
}
}