Skip to content

Commit

Permalink
Merge pull request #126 from Engineer12798/feat/reactor-heat-storage
Browse files Browse the repository at this point in the history
IC2: Add converter for reactor components to get stored heat.
  • Loading branch information
Dream-Master authored Jul 11, 2024
2 parents 6b9b22c + 5c3cc8e commit e3fa228
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 1 deletion.
34 changes: 33 additions & 1 deletion src/main/scala/li/cil/oc/integration/ic2/DriverReactor.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package li.cil.oc.integration.ic2;

import ic2.api.reactor.IReactor;
import ic2.core.block.TileEntityBlock;
import ic2.api.reactor.IReactorComponent;
import ic2.core.block.reactor.tileentity.TileEntityNuclearReactorElectric;
import java.util.HashMap;
import li.cil.oc.api.driver.NamedBlock;
import li.cil.oc.api.machine.Arguments;
import li.cil.oc.api.machine.Callback;
Expand All @@ -11,6 +12,8 @@
import li.cil.oc.api.prefab.DriverSidedTileEntity;
import li.cil.oc.integration.ManagedTileEntityEnvironment;
import net.minecraft.world.World;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;

public final class DriverReactor extends DriverSidedTileEntity {
Expand Down Expand Up @@ -75,5 +78,34 @@ public Object[] getReactorEUOutput(final Context context, final Arguments args)
public Object[] producesEnergy(final Context context, final Arguments args) {
return new Object[] {tileEntity.produceEnergy()};
}

@Callback(doc = "function(x:int,y:int):table -- Get information about the item stored in the given reactor slot.")
public Object[] getSlotInfo(final Context context, final Arguments args) {
final int x = args.optInteger(0, -1);
final int y = args.optInteger(1, -1);

final ItemStack stack = tileEntity.getItemAt(x, y);

if (stack == null) {
return null;
}

final Item item = stack.getItem();

final HashMap<String, Object> outputMap = new HashMap<String, Object> ();

outputMap.put("item", stack);

if (item instanceof IReactorComponent) {
final IReactorComponent component = (IReactorComponent) item;
outputMap.put("canStoreHeat", component.canStoreHeat(tileEntity, stack, x, y));
outputMap.put("heat", component.getCurrentHeat(tileEntity, stack, x, y));
outputMap.put("maxHeat", component.getMaxHeat(tileEntity, stack, x, y));
}

return new Object[] {
outputMap
};
}
}
}
40 changes: 40 additions & 0 deletions src/main/scala/li/cil/oc/integration/ic2/DriverReactorChamber.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import ic2.api.reactor.IReactor;
import ic2.api.reactor.IReactorChamber;
import ic2.api.reactor.IReactorComponent;
import ic2.core.block.TileEntityBlock;
import ic2.core.block.reactor.tileentity.TileEntityNuclearReactorElectric;
import li.cil.oc.api.driver.NamedBlock;
Expand All @@ -11,9 +12,13 @@
import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverSidedTileEntity;
import li.cil.oc.integration.ManagedTileEntityEnvironment;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;

import java.util.HashMap;

public final class DriverReactorChamber extends DriverSidedTileEntity {
@Override
public Class<?> getTileEntityClass() {
Expand Down Expand Up @@ -95,5 +100,40 @@ public Object[] producesEnergy(final Context context, final Arguments args) {
return new Object[] {false};
}
}

@Callback(doc = "function(x:int,y:int):table -- Get information about the item stored in the given reactor slot.")
public Object[] getSlotInfo(final Context context, final Arguments args) {
final IReactor reactor = tileEntity.getReactor();

if (reactor == null) {
return null;
}

final int x = args.optInteger(0, -1);
final int y = args.optInteger(1, -1);

final ItemStack stack = reactor.getItemAt(x, y);

if (stack == null) {
return null;
}

final Item item = stack.getItem();

final HashMap<String, Object> outputMap = new HashMap<String, Object> ();

outputMap.put("item", stack);

if (item instanceof IReactorComponent) {
final IReactorComponent component = (IReactorComponent) item;
outputMap.put("canStoreHeat", component.canStoreHeat(reactor, stack, x, y));
outputMap.put("heat", component.getCurrentHeat(reactor, stack, x, y));
outputMap.put("maxHeat", component.getMaxHeat(reactor, stack, x, y));
}

return new Object[] {
outputMap
};
}
}
}

0 comments on commit e3fa228

Please sign in to comment.