diff --git a/src/main/scala/li/cil/oc/integration/thaumcraft/ConverterAspectItem.scala b/src/main/scala/li/cil/oc/integration/thaumcraft/ConverterAspectItem.scala index 6f1e5b3d21..207ded4bd4 100644 --- a/src/main/scala/li/cil/oc/integration/thaumcraft/ConverterAspectItem.scala +++ b/src/main/scala/li/cil/oc/integration/thaumcraft/ConverterAspectItem.scala @@ -14,30 +14,16 @@ object ConverterAspectItem extends Converter { var aspects = new AspectList() aspects.readFromNBT(stack.getTagCompound) if (aspects.size() > 0) - output += "aspects" -> aspects + output += "aspects" -> TCUtils.convert_aspects(aspects) stack.getItem match { case wand : ItemWandCasting => aspects = wand.getAllVis(stack) if (aspects.size() > 0) { - output += "aspects" -> aspects + output += "aspects" -> TCUtils.convert_aspects(aspects) } case _ => } - case container : IAspectContainer => - output += "aspects" -> container.getAspects - - case aspects : AspectList => - var i = 1 - for (aspect <- aspects.getAspects) { - if (aspect != null) { - val aspectMap = new util.HashMap[AnyRef, AnyRef]() - aspectMap += "name" -> aspect.getName - aspectMap += "amount" -> aspects.getAmount(aspect).asInstanceOf[AnyRef] - output += i.asInstanceOf[AnyRef] -> aspectMap - i += 1; - } - } case _ => } } diff --git a/src/main/scala/li/cil/oc/integration/thaumcraft/DriverAspectContainer.java b/src/main/scala/li/cil/oc/integration/thaumcraft/DriverAspectContainer.java index 11e205d94c..99c4251039 100644 --- a/src/main/scala/li/cil/oc/integration/thaumcraft/DriverAspectContainer.java +++ b/src/main/scala/li/cil/oc/integration/thaumcraft/DriverAspectContainer.java @@ -32,7 +32,7 @@ public Environment(final IAspectContainer tileEntity) { @Callback(doc = "function():table -- Get the Aspects stored in the block") public Object[] getAspects(final Context context, final Arguments args) { - return new Object[] {tileEntity}; + return new Object[] {TCUtils.convert_aspects(tileEntity.getAspects())}; } @Callback(doc = "function(aspect:string):number -- Get amount of specific aspect stored in this block") diff --git a/src/main/scala/li/cil/oc/integration/thaumcraft/DriverInfusionMatrix.java b/src/main/scala/li/cil/oc/integration/thaumcraft/DriverInfusionMatrix.java new file mode 100644 index 0000000000..471fddb79f --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/thaumcraft/DriverInfusionMatrix.java @@ -0,0 +1,62 @@ +package li.cil.oc.integration.thaumcraft; + +import com.google.common.base.Preconditions; +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.DriverSidedTileEntity; +import li.cil.oc.integration.ManagedTileEntityEnvironment; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import thaumcraft.common.tiles.TileInfusionMatrix; + +public class DriverInfusionMatrix extends DriverSidedTileEntity { + @Override + public ManagedEnvironment createEnvironment( + final World world, final int x, final int y, final int z, final ForgeDirection side) { + return new Environment((TileInfusionMatrix) world.getTileEntity(x, y, z)); + } + + @Override + public Class getTileEntityClass() { + return TileInfusionMatrix.class; + } + + public static final class Environment extends ManagedTileEntityEnvironment implements NamedBlock { + public Environment(final TileInfusionMatrix tileEntity) { + super(tileEntity, "infusion_matrix"); + } + + @Override + public String preferredName() { + return "infusion_matrix"; + } + + @Override + public int priority() { + return 1; + } + + @Callback(doc = "function():bool -- Return whether the matrix is active") + public Object[] isActive(final Context context, final Arguments args) { + return new Object[]{tileEntity.active}; + } + + @Callback(doc = "function():bool -- Return whether the matrix is crafting") + public Object[] isCrafting(final Context context, final Arguments args) { + return new Object[]{tileEntity.crafting}; + } + + @Callback(doc = "function():number -- Get the instability.") + public Object[] getInstability(final Context context, final Arguments args) { + return new Object[]{tileEntity.instability}; + } + + @Callback(doc = "function():number -- Get the symmetry.") + public Object[] getSymmetry(final Context context, final Arguments args) { + return new Object[]{tileEntity.symmetry}; + } + } +} diff --git a/src/main/scala/li/cil/oc/integration/thaumcraft/ModThaumcraft.scala b/src/main/scala/li/cil/oc/integration/thaumcraft/ModThaumcraft.scala index 5696146854..65981efff8 100644 --- a/src/main/scala/li/cil/oc/integration/thaumcraft/ModThaumcraft.scala +++ b/src/main/scala/li/cil/oc/integration/thaumcraft/ModThaumcraft.scala @@ -9,6 +9,8 @@ object ModThaumcraft extends ModProxy { override def initialize() { Driver.add(new DriverAspectContainer) + Driver.add(new DriverInfusionMatrix) + Driver.add(ConverterAspectItem) } } \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/integration/thaumcraft/TCUtils.scala b/src/main/scala/li/cil/oc/integration/thaumcraft/TCUtils.scala new file mode 100644 index 0000000000..6b462679d0 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/thaumcraft/TCUtils.scala @@ -0,0 +1,15 @@ +package li.cil.oc.integration.thaumcraft + +import thaumcraft.api.aspects.AspectList + +object TCUtils { + def convert_aspects(aspects: AspectList): Array[Map[String, Any]] = + aspects.getAspects.filter(_ != null) + .map { aspect => + Map( + "name" -> aspect.getName, + "amount" -> aspects.getAmount(aspect) + ) + } + .toArray +}