diff --git a/build.gradle b/build.gradle index b616fa42b..011f33e68 100644 --- a/build.gradle +++ b/build.gradle @@ -135,6 +135,10 @@ repositories { name 'Railcraft' artifactPattern "http://addons.cursecdn.com/files/${config.rc.cf}/[module]_[revision].[ext]" } + ivy { + name 'BloodMagic' + artifactPattern "http://addons.cursecdn.com/files/${config.bloodmagic.cf}/[module]-${config.minecraft.version}-[revision].[ext]" + } } configurations { @@ -169,6 +173,7 @@ dependencies { provided name: 'ComputerCraft', version: config.cc.version, ext: 'jar' provided name: 'EnderIO', version: config.eio.version, ext: 'jar' provided name: 'Railcraft', version: config.rc.version, ext: 'jar' + provided name: 'BloodMagic', version: config.bloodmagic.version, ext: 'jar' compile 'com.google.code.findbugs:jsr305:1.3.9' // Annotations used by google libs. diff --git a/build.properties b/build.properties index ed01060d2..1c71fd952 100644 --- a/build.properties +++ b/build.properties @@ -6,6 +6,8 @@ oc.subversion=dev ae2.version=rv1-stable-1 bc.version=6.2.6 +bloodmagic.cf=2223/203 +bloodmagic.version=1.3.0a-1 cc.cf=2216/236 cc.version=1.65 ccl.version=1.1.1.104 diff --git a/src/main/scala/li/cil/oc/integration/Mods.scala b/src/main/scala/li/cil/oc/integration/Mods.scala index 885a960a1..67b563827 100644 --- a/src/main/scala/li/cil/oc/integration/Mods.scala +++ b/src/main/scala/li/cil/oc/integration/Mods.scala @@ -67,6 +67,7 @@ object Mods { val Waila = new SimpleMod(IDs.Waila) val WirelessRedstoneCBE = new SimpleMod(IDs.WirelessRedstoneCBE) val WirelessRedstoneSVE = new SimpleMod(IDs.WirelessRedstoneSV) + val BloodMagic = new SimpleMod(IDs.BloodMagic) // ----------------------------------------------------------------------- // @@ -98,6 +99,7 @@ object Mods { integration.waila.ModWaila, integration.wrcbe.ModWRCBE, integration.wrsve.ModWRSVE, + integration.bloodmagic.ModBloodMagic, // Register the general IPeripheral driver last, if at all, to avoid it // being used rather than other more concrete implementations. @@ -171,6 +173,7 @@ object Mods { final val Waila = "Waila" final val WirelessRedstoneCBE = "WR-CBE|Core" final val WirelessRedstoneSV = "WirelessRedstoneCore" + final val BloodMagic = "AWWayofTime" } // ----------------------------------------------------------------------- // diff --git a/src/main/scala/li/cil/oc/integration/bloodmagic/ConverterBloodOrb.java b/src/main/scala/li/cil/oc/integration/bloodmagic/ConverterBloodOrb.java new file mode 100644 index 000000000..7d33b3dce --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/bloodmagic/ConverterBloodOrb.java @@ -0,0 +1,30 @@ +package li.cil.oc.integration.bloodmagic; + +import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; +import li.cil.oc.api.driver.Converter; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import java.util.Map; + +public class ConverterBloodOrb implements Converter { + @Override + public void convert(Object value, Map output) { + if (value instanceof ItemStack) { + final ItemStack stack = (ItemStack) value; + final Item item = stack.getItem(); + if (item instanceof IBloodOrb) { + final IBloodOrb bloodOrb = (IBloodOrb) item; + final String ownerName = stack.stackTagCompound.getString("ownerName"); + final int maxOrbTier = SoulNetworkHandler.getCurrentMaxOrb(ownerName); + output.put("ownerName", ownerName); + output.put("networkOrbTier", maxOrbTier); + output.put("networkEssence", SoulNetworkHandler.getCurrentEssence(ownerName)); + output.put("maxNetworkEssence", SoulNetworkHandler.getMaximumForOrbTier(maxOrbTier)); + output.put("maxEssence", bloodOrb.getMaxEssence()); + output.put("orbTier", bloodOrb.getOrbLevel()); + } + } + } +} diff --git a/src/main/scala/li/cil/oc/integration/bloodmagic/DriverBloodAltar.java b/src/main/scala/li/cil/oc/integration/bloodmagic/DriverBloodAltar.java new file mode 100644 index 000000000..b1f72c588 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/bloodmagic/DriverBloodAltar.java @@ -0,0 +1,79 @@ +package li.cil.oc.integration.bloodmagic; + +import li.cil.oc.api.driver.NamedBlock; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.ManagedEnvironment; +import li.cil.oc.api.prefab.DriverTileEntity; +import li.cil.oc.integration.ManagedTileEntityEnvironment; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; + +public class DriverBloodAltar extends DriverTileEntity { + @Override + public Class getTileEntityClass() { + return IBloodAltar.class; + } + + @Override + public ManagedEnvironment createEnvironment(World world, int x, int y, int z) { + return new Environment((IBloodAltar) world.getTileEntity(x, y, z)); + } + + public static final class Environment extends ManagedTileEntityEnvironment implements NamedBlock { + public Environment(final IBloodAltar tileEntity) { + super(tileEntity, "blood_altar"); + } + + @Override + public String preferredName() { + return "blood_altar"; + } + + @Override + public int priority() { + return 0; + } + + @Callback(doc = "function():number -- Get the capacity.") + public Object[] getCapacity(final Context context, final Arguments arguments) { + 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()}; + } + + @Callback(doc = "function():number -- Get the current tier.") + public Object[] getTier(final Context context, final Arguments arguments) { + 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()}; + } + + @Callback(doc = "function():number -- Get the sacrifice multiplier.") + public Object[] getSacrificeMultiplier(final Context context, final Arguments arguments) { + return new Object[]{tileEntity.getCapacity()}; + } + + @Callback(doc = "function():number -- Get the self sacrifice multiplier.") + public Object[] getSelfSacrificeMultiplier(final Context context, final Arguments arguments) { + 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()}; + } + + @Callback(doc = "function():number -- Get the dislocation multiplier.") + public Object[] getDislocationMultiplier(final Context context, final Arguments arguments) { + return new Object[]{tileEntity.getDislocationMultiplier()}; + } + } +} diff --git a/src/main/scala/li/cil/oc/integration/bloodmagic/DriverMasterRitualStone.java b/src/main/scala/li/cil/oc/integration/bloodmagic/DriverMasterRitualStone.java new file mode 100644 index 000000000..3168651dc --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/bloodmagic/DriverMasterRitualStone.java @@ -0,0 +1,69 @@ +package li.cil.oc.integration.bloodmagic; + +import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; +import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; +import li.cil.oc.api.driver.NamedBlock; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.ManagedEnvironment; +import li.cil.oc.api.prefab.DriverTileEntity; +import li.cil.oc.integration.ManagedTileEntityEnvironment; +import net.minecraft.world.World; + +public class DriverMasterRitualStone extends DriverTileEntity { + @Override + public Class getTileEntityClass() { + return IMasterRitualStone.class; + } + + @Override + public ManagedEnvironment createEnvironment(World world, int x, int y, int z) { + return new Environment((IMasterRitualStone) world.getTileEntity(x, y, z)); + } + + public static class Environment extends ManagedTileEntityEnvironment implements NamedBlock { + public Environment(IMasterRitualStone tileEntity) { + super(tileEntity, "master_ritual_stone"); + } + + @Override + public String preferredName() { + return "master_ritual_stone"; + } + + @Override + public int priority() { + return 0; + } + + @Callback(doc = "function():string -- Get the name of the player owning this master ritual stone.") + public Object[] getOwner(final Context context, final Arguments arguments) { + return new Object[]{tileEntity.getOwner()}; + } + + @Callback(doc = "function():string -- Get the current ritual.") + public Object[] getCurrentRitual(final Context context, final Arguments arguments) { + if (tileEntity instanceof TEMasterStone) { + TEMasterStone masterStone = (TEMasterStone) tileEntity; + return new Object[]{masterStone.getCurrentRitual()}; + } + return new Object[]{"internal error"}; + } + + @Callback(doc = "function():number -- Get the remaining cooldown.") + public Object[] getCooldown(final Context context, final Arguments arguments) { + return new Object[]{tileEntity.getCooldown()}; + } + + @Callback(doc = "function():number -- Get the running time.") + public Object[] getRunningTime(final Context context, final Arguments arguments) { + return new Object[]{tileEntity.getRunningTime()}; + } + + @Callback(doc = "function():boolean -- Get whether the tanks are empty.") + public Object[] areTanksEmpty(final Context context, final Arguments arguments) { + return new Object[]{tileEntity.areTanksEmpty()}; + } + } +} diff --git a/src/main/scala/li/cil/oc/integration/bloodmagic/ModBloodMagic.scala b/src/main/scala/li/cil/oc/integration/bloodmagic/ModBloodMagic.scala new file mode 100644 index 000000000..a7979a672 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/bloodmagic/ModBloodMagic.scala @@ -0,0 +1,15 @@ +package li.cil.oc.integration.bloodmagic + +import li.cil.oc.api.Driver +import li.cil.oc.integration.{Mods, ModProxy} + +object ModBloodMagic extends ModProxy { + override def getMod = Mods.BloodMagic + + override def initialize() { + Driver.add(new DriverBloodAltar) + Driver.add(new DriverMasterRitualStone) + + Driver.add(new ConverterBloodOrb) + } +}