diff --git a/src/main/scala/li/cil/oc/integration/bloodmagic/DriverBloodAltar.java b/src/main/scala/li/cil/oc/integration/bloodmagic/DriverBloodAltar.java index 150aa4405e..f4a0c0ea8b 100644 --- a/src/main/scala/li/cil/oc/integration/bloodmagic/DriverBloodAltar.java +++ b/src/main/scala/li/cil/oc/integration/bloodmagic/DriverBloodAltar.java @@ -10,6 +10,10 @@ import li.cil.oc.integration.ManagedTileEntityEnvironment; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; +import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; public class DriverBloodAltar extends DriverSidedTileEntity { @Override @@ -40,47 +44,113 @@ public int priority() { @Callback(doc = "function():number -- Get the capacity.") public Object[] getCapacity(final Context context, final Arguments arguments) { - return new Object[] {tileEntity.getCapacity()}; + return new Object[] { tileEntity.getCapacity() }; } @Callback(doc = "function():number -- Get the amount of blood currently contained by this altar.") public Object[] getCurrentBlood(final Context context, final Arguments arguments) { - return new Object[] {tileEntity.getCurrentBlood()}; + return new Object[] { tileEntity.getCurrentBlood() }; } @Callback(doc = "function():number -- Get the current tier.") public Object[] getTier(final Context context, final Arguments arguments) { - return new Object[] {tileEntity.getTier()}; + return new Object[] { tileEntity.getTier() }; } @Callback(doc = "function():number -- Get the progress.") public Object[] getProgress(final Context context, final Arguments arguments) { - return new Object[] {tileEntity.getProgress()}; + return new Object[] { tileEntity.getProgress() }; } @Callback(doc = "function():number -- Get the sacrifice multiplier.") public Object[] getSacrificeMultiplier(final Context context, final Arguments arguments) { - return new Object[] {tileEntity.getSacrificeMultiplier()}; + return new Object[] { tileEntity.getSacrificeMultiplier() }; } @Callback(doc = "function():number -- Get the self sacrifice multiplier.") public Object[] getSelfSacrificeMultiplier(final Context context, final Arguments arguments) { - return new Object[] {tileEntity.getSelfSacrificeMultiplier()}; + return new Object[] { tileEntity.getSelfSacrificeMultiplier() }; } @Callback(doc = "function():number -- Get the orb multiplier.") public Object[] getOrbMultiplier(final Context context, final Arguments arguments) { - return new Object[] {tileEntity.getOrbMultiplier()}; + return new Object[] { tileEntity.getOrbMultiplier() }; } @Callback(doc = "function():number -- Get the dislocation multiplier.") public Object[] getDislocationMultiplier(final Context context, final Arguments arguments) { - return new Object[] {tileEntity.getDislocationMultiplier()}; + return new Object[] { tileEntity.getDislocationMultiplier() }; } @Callback(doc = "function():number -- Get IO buffer capacity.") public Object[] getBufferCapacity(final Context context, final Arguments arguments) { - return new Object[] {tileEntity.getBufferCapacity()}; + return new Object[] { tileEntity.getBufferCapacity() }; + } + + @Callback(doc = "function():string -- Returns the owner name of the blood orb.") + public Object[] getOwnerName(final Context context, final Arguments args) { + ItemStack orb; + try { + orb = getBloodOrb(); + } catch (Exception e) { + return new Object[] { null, e.getMessage() }; + } + String owner = SoulNetworkHandler.getOwnerName(orb); + return new Object[] { owner }; + } + + @Callback(doc = "function():number -- Returns the current LP in the owner's soul network.") + public Object[] getLP(final Context context, final Arguments args) { + ItemStack orb; + try { + orb = getBloodOrb(); + } catch (Exception e) { + return new Object[] { null, e.getMessage() }; + } + String owner = SoulNetworkHandler.getOwnerName(orb); + if (owner == null || owner.isEmpty()) { + return new Object[] { 0, "Orb has no bound owner" }; + } + int currentLP = SoulNetworkHandler.getCurrentEssence(owner); + return new Object[] { currentLP }; + } + + @Callback(doc = "function():number -- Returns the maximum LP capacity for this orb's tier.") + public Object[] getMaxLP(final Context context, final Arguments args) { + ItemStack orb; + try { + orb = getBloodOrb(); + } catch (Exception e) { + return new Object[] { null, e.getMessage() }; + } + int maxLP = ((IBloodOrb) orb.getItem()).getMaxEssence(); + return new Object[] { maxLP }; + } + + @Callback(doc = "function():number -- Returns the orb's tier level.") + public Object[] getOrbLevel(final Context context, final Arguments args) { + ItemStack orb; + try { + orb = getBloodOrb(); + } catch (Exception e) { + return new Object[] { null, e.getMessage() }; + } + int level = ((IBloodOrb) orb.getItem()).getOrbLevel(); + return new Object[] { level }; + } + + private ItemStack getBloodOrb() throws Exception { + if (!(tileEntity instanceof IInventory)) { + throw new Exception("Blood Altar does not contain a blood orb"); + } + IInventory inventory = (IInventory) tileEntity; + for (int slot = 0; slot < inventory.getSizeInventory(); slot++) { + ItemStack stackInSlot = inventory.getStackInSlot(slot); + if (stackInSlot != null && stackInSlot.getItem() instanceof IBloodOrb) { + return stackInSlot; + } + } + throw new Exception("Blood Altar does not contain a blood orb"); } } }