Skip to content
This repository was archived by the owner on May 23, 2023. It is now read-only.

Commit c1f00a5

Browse files
committed
feat: basic computercraft integration
1 parent 223be80 commit c1f00a5

9 files changed

+198
-1
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ dependencies {
145145
implementation fg.deobf("curse.maven:tfcraft-302973:3268988")
146146
implementation fg.deobf("curse.maven:ae2-extended-life-570458:4323863")
147147
implementation fg.deobf("curse.maven:gregtech-food-option-477021:4423324")
148+
implementation fg.deobf("curse.maven:cc-tweaked-282001:2718128")
148149

149150
if (project.use_mixins.toBoolean()) {
150151
compileOnly 'zone.rong:mixinbooter:7.0'

src/main/java/gregification/base/BaseConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,10 @@ public class BaseConfig {
2323
@Comment({"Enable TerraFirmaCraft integration.", "Default: true"})
2424
@RequiresMcRestart
2525
public static boolean enableTerraFirmaCraftModule = true;
26+
27+
28+
@Comment({"Enable ComputerCraft integration.", "Default: true"})
29+
@RequiresMcRestart
30+
public static boolean enableComputerCraftModule = true;
31+
2632
}

src/main/java/gregification/base/ModIDs.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@ public class ModIDs {
2323
MODID_THAUM = "thaumcraft",
2424
GENDUSTRY = "gendustry",
2525
MODID_GTFO = "gregtechfoodoption",
26-
MODID_TFC = "tfc";
26+
MODID_TFC = "tfc",
27+
MODID_CC = "computercraft";
2728
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package gregification.modules.computercraft;
2+
3+
import gregification.Gregification;
4+
import net.minecraftforge.common.config.Config;
5+
import net.minecraftforge.common.config.Config.LangKey;
6+
7+
8+
@LangKey("gregification.config.open_computers")
9+
@Config(modid = Gregification.MODID, name = Gregification.MODID + "/computercraft", category = "ComputerCraft")
10+
public class ComputerCraftConfig {
11+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package gregification.modules.computercraft;
2+
3+
import dan200.computercraft.api.ComputerCraftAPI;
4+
import dan200.computercraft.api.peripheral.IPeripheral;
5+
import dan200.computercraft.api.peripheral.IPeripheralProvider;
6+
import gregification.base.BaseConfig;
7+
import gregification.base.ModIDs;
8+
import gregification.base.Module;
9+
import gregification.modules.computercraft.peripheral.MetaTileEntityPeripheral;
10+
import gregtech.api.metatileentity.MetaTileEntity;
11+
import gregtech.api.util.GTUtility;
12+
import net.minecraft.util.EnumFacing;
13+
import net.minecraft.util.math.BlockPos;
14+
import net.minecraft.world.World;
15+
import net.minecraftforge.fml.common.Loader;
16+
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
17+
import org.apache.logging.log4j.Logger;
18+
19+
import javax.annotation.Nonnull;
20+
import javax.annotation.Nullable;
21+
22+
@Module.Root(name = "Gregification: Computercraft")
23+
public class ComputerCraftModule implements Module {
24+
25+
@Log
26+
public static Logger logger;
27+
28+
@Override
29+
public boolean isModuleActive() {
30+
return BaseConfig.enableComputerCraftModule && Loader.isModLoaded(ModIDs.MODID_CC);
31+
}
32+
33+
@Override
34+
public void init(FMLInitializationEvent event) {
35+
ComputerCraftAPI.registerPeripheralProvider(new IPeripheralProvider() {
36+
@Nullable
37+
@Override
38+
public IPeripheral getPeripheral(@Nonnull World world, @Nonnull BlockPos blockPos, @Nonnull EnumFacing enumFacing) {
39+
MetaTileEntity metaTileEntity = GTUtility.getMetaTileEntity(world, blockPos);
40+
if (metaTileEntity != null) {
41+
return new MetaTileEntityPeripheral(metaTileEntity, enumFacing);
42+
}
43+
return null;
44+
}
45+
});
46+
}
47+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package gregification.modules.computercraft.peripheral;
2+
3+
import dan200.computercraft.api.lua.ILuaContext;
4+
import dan200.computercraft.api.lua.LuaException;
5+
import dan200.computercraft.api.peripheral.IComputerAccess;
6+
import dan200.computercraft.api.peripheral.IPeripheral;
7+
import gregtech.api.metatileentity.MetaTileEntity;
8+
import net.minecraft.util.EnumFacing;
9+
10+
import javax.annotation.Nonnull;
11+
import javax.annotation.Nullable;
12+
import java.util.Arrays;
13+
14+
public class MetaTileEntityPeripheral implements IPeripheral {
15+
private final MetaTileEntityPeripheralFunction[] functions;
16+
17+
public MetaTileEntityPeripheral(MetaTileEntity metaTileEntity, EnumFacing enumFacing) {
18+
this.functions = Arrays.stream(new MetaTileEntityPeripheralFunction[]{
19+
new MetaTileEntityPeripheralEnergyContainerFunction(metaTileEntity, enumFacing),
20+
new MetaTileEntityPeripheralTierFunction(metaTileEntity),
21+
}).filter(MetaTileEntityPeripheralFunction::isEnabled).toArray(MetaTileEntityPeripheralFunction[]::new);
22+
}
23+
24+
@Nonnull
25+
public String getType() {
26+
return "gregtech_meta_timer_entity";
27+
}
28+
29+
@Nonnull
30+
public String[] getMethodNames() {
31+
return Arrays.stream(functions).map(MetaTileEntityPeripheralFunction::getName).toArray(String[]::new);
32+
}
33+
34+
@Nullable
35+
public Object[] callMethod(@Nonnull IComputerAccess iComputerAccess, @Nonnull ILuaContext iLuaContext, int i, @Nonnull Object[] objects) throws LuaException, InterruptedException {
36+
return functions[i].call(iComputerAccess, iLuaContext, i, objects);
37+
}
38+
39+
public boolean equals(@Nullable IPeripheral iPeripheral) {
40+
return iPeripheral == this;
41+
}
42+
43+
}
44+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package gregification.modules.computercraft.peripheral;
2+
3+
import dan200.computercraft.api.lua.ILuaContext;
4+
import dan200.computercraft.api.peripheral.IComputerAccess;
5+
import gregtech.api.capability.GregtechCapabilities;
6+
import gregtech.api.capability.IEnergyContainer;
7+
import gregtech.api.metatileentity.MetaTileEntity;
8+
import net.minecraft.util.EnumFacing;
9+
10+
import java.util.HashMap;
11+
import java.util.Map;
12+
13+
class MetaTileEntityPeripheralEnergyContainerFunction implements MetaTileEntityPeripheralFunction {
14+
15+
private final IEnergyContainer energyContainer;
16+
17+
public MetaTileEntityPeripheralEnergyContainerFunction(MetaTileEntity metaTileEntity, EnumFacing enumFacing) {
18+
this.energyContainer = metaTileEntity.getCapability(GregtechCapabilities.CAPABILITY_ENERGY_CONTAINER, enumFacing);
19+
}
20+
21+
@Override
22+
public boolean isEnabled() {
23+
return this.energyContainer != null;
24+
}
25+
26+
@Override
27+
public String getName() {
28+
return "getEnergy";
29+
}
30+
31+
@Override
32+
public Object[] call(IComputerAccess iComputerAccess, ILuaContext iLuaContext, int i, Object[] objects) {
33+
Map<String, Object> data = new HashMap<>();
34+
data.put("stored", energyContainer.getEnergyStored());
35+
data.put("capacity", energyContainer.getEnergyCapacity());
36+
data.put("average_input", energyContainer.getInputPerSec());
37+
data.put("average_output", energyContainer.getOutputPerSec());
38+
data.put("input_voltage", energyContainer.getInputVoltage());
39+
data.put("output_voltage", energyContainer.getOutputVoltage());
40+
data.put("input_amperage", energyContainer.getInputAmperage());
41+
data.put("output_amperage", energyContainer.getOutputAmperage());
42+
return new Object[]{data};
43+
}
44+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package gregification.modules.computercraft.peripheral;
2+
3+
import dan200.computercraft.api.lua.ILuaContext;
4+
import dan200.computercraft.api.lua.LuaException;
5+
import dan200.computercraft.api.peripheral.IComputerAccess;
6+
7+
interface MetaTileEntityPeripheralFunction {
8+
boolean isEnabled();
9+
10+
String getName();
11+
12+
Object[] call(IComputerAccess iComputerAccess, ILuaContext iLuaContext, int i, Object[] objects) throws LuaException, InterruptedException;
13+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package gregification.modules.computercraft.peripheral;
2+
3+
import dan200.computercraft.api.lua.ILuaContext;
4+
import dan200.computercraft.api.peripheral.IComputerAccess;
5+
import gregtech.api.metatileentity.MetaTileEntity;
6+
import gregtech.api.metatileentity.TieredMetaTileEntity;
7+
8+
class MetaTileEntityPeripheralTierFunction implements MetaTileEntityPeripheralFunction {
9+
10+
private final TieredMetaTileEntity tieredMetaTileEntity;
11+
12+
public MetaTileEntityPeripheralTierFunction(MetaTileEntity metaTileEntity) {
13+
this.tieredMetaTileEntity = metaTileEntity instanceof TieredMetaTileEntity ? (TieredMetaTileEntity) metaTileEntity : null;
14+
}
15+
16+
@Override
17+
public boolean isEnabled() {
18+
return this.tieredMetaTileEntity != null;
19+
}
20+
21+
@Override
22+
public String getName() {
23+
return "getTier";
24+
}
25+
26+
@Override
27+
public Object[] call(IComputerAccess iComputerAccess, ILuaContext iLuaContext, int i, Object[] objects) {
28+
return new Object[]{tieredMetaTileEntity.getTier()};
29+
}
30+
}

0 commit comments

Comments
 (0)