Skip to content

Commit ce64595

Browse files
Add CC: Tweaked peripheral for ghost programmed circuit (#4468)
1 parent 58457f2 commit ce64595

7 files changed

Lines changed: 67 additions & 2 deletions

File tree

dependencies.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ dependencies {
9393
modExtraLocalRuntime(forge.javd)
9494
modExtraLocalRuntime(forge.trenzalore)
9595
modExtraLocalRuntime(forge.curios)
96+
modExtraLocalRuntime(forge.cc.tweaked.forge.impl)
9697
// modExtraLocalRuntime(forge.worldstripper)
97-
// modExtraLocalRuntime(forge.cc.tweaked.forge.impl) for some reason this breaks create
9898

9999
modExtraLocalRuntime(forge.bundles.kjs)
100100

gradle/forge.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ ftblibrary = "2001.2.4"
2121
ftbteams = "2001.3.0"
2222
ftbquests = "2001.4.11"
2323
ftbchunks = "2001.3.4"
24-
ccTweaked = "1.114.3"
24+
ccTweaked = "1.115.1"
2525
create = "6.0.6-150"
2626
ponder = "1.0.80"
2727
flywheel = "1.0.4"

src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.gregtechceu.gtceu.api.item.tool.GTToolType;
88
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
99
import com.gregtechceu.gtceu.api.machine.MetaMachine;
10+
import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot;
1011
import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine;
1112
import com.gregtechceu.gtceu.api.machine.trait.MachineTrait;
1213
import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic;
@@ -179,6 +180,15 @@ public static <T> LazyOptional<T> getCapability(MetaMachine machine, @NotNull Ca
179180
return GTCapability.CAPABILITY_CONTROLLABLE.orEmpty(cap, LazyOptional.of(() -> controllable));
180181
}
181182
}
183+
} else if (cap == GTCapability.CAPABILITY_CIRCUIT_SLOT) {
184+
if (machine instanceof IHasCircuitSlot hasCircuitSlot) {
185+
return GTCapability.CAPABILITY_CIRCUIT_SLOT.orEmpty(cap, LazyOptional.of(() -> hasCircuitSlot));
186+
}
187+
for (MachineTrait trait : machine.getTraits()) {
188+
if (trait instanceof IHasCircuitSlot hasCircuitSlot) {
189+
return GTCapability.CAPABILITY_CIRCUIT_SLOT.orEmpty(cap, LazyOptional.of(() -> hasCircuitSlot));
190+
}
191+
}
182192
} else if (cap == GTCapability.CAPABILITY_RECIPE_LOGIC) {
183193
for (MachineTrait trait : machine.getTraits()) {
184194
if (trait instanceof RecipeLogic recipeLogic) {

src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.gregtechceu.gtceu.api.capability;
22

33
import com.gregtechceu.gtceu.api.capability.forge.GTCapability;
4+
import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot;
45
import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine;
56
import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic;
67

@@ -70,6 +71,11 @@ public static IControllable getControllable(Level level, BlockPos pos, @Nullable
7071
return getBlockEntityCapability(GTCapability.CAPABILITY_CONTROLLABLE, level, pos, side);
7172
}
7273

74+
@Nullable
75+
public static IHasCircuitSlot getCircuitSlot(Level level, BlockPos pos, @Nullable Direction side) {
76+
return getBlockEntityCapability(GTCapability.CAPABILITY_CIRCUIT_SLOT, level, pos, side);
77+
}
78+
7379
@Nullable
7480
public static RecipeLogic getRecipeLogic(Level level, BlockPos pos, @Nullable Direction side) {
7581
return getBlockEntityCapability(GTCapability.CAPABILITY_RECIPE_LOGIC, level, pos, side);

src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.gregtechceu.gtceu.api.capability.forge;
22

33
import com.gregtechceu.gtceu.api.capability.*;
4+
import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot;
45
import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine;
56
import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic;
67

@@ -20,6 +21,8 @@ public class GTCapability {
2021
public static final Capability<IWorkable> CAPABILITY_WORKABLE = CapabilityManager.get(new CapabilityToken<>() {});
2122
public static final Capability<IControllable> CAPABILITY_CONTROLLABLE = CapabilityManager
2223
.get(new CapabilityToken<>() {});
24+
public static final Capability<IHasCircuitSlot> CAPABILITY_CIRCUIT_SLOT = CapabilityManager
25+
.get(new CapabilityToken<>() {});
2326
public static final Capability<RecipeLogic> CAPABILITY_RECIPE_LOGIC = CapabilityManager
2427
.get(new CapabilityToken<>() {});
2528
public static final Capability<IElectricItem> CAPABILITY_ELECTRIC_ITEM = CapabilityManager
@@ -53,6 +56,7 @@ public static void register(RegisterCapabilitiesEvent event) {
5356
event.register(IToolable.class);
5457
event.register(IWorkable.class);
5558
event.register(IControllable.class);
59+
event.register(IHasCircuitSlot.class);
5660
event.register(RecipeLogic.class);
5761
event.register(IElectricItem.class);
5862
event.register(ICleanroomReceiver.class);

src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ public static void init() {
2020
ComputerCraftAPI.registerGenericSource(new WorkablePeripheral());
2121
ComputerCraftAPI.registerGenericSource(new CoverHolderPeripheral());
2222
ComputerCraftAPI.registerGenericSource(new CentralMonitorPeripheral());
23+
ComputerCraftAPI.registerGenericSource(new CircuitSlotPeripheral());
2324
ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_CONTROLLABLE);
2425
ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_ENERGY_INFO_PROVIDER);
2526
ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_TURBINE_MACHINE);
2627
ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_WORKABLE);
28+
ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_CIRCUIT_SLOT);
2729
ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_COVERABLE);
2830
ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_CENTRAL_MONITOR);
2931
PlaceholderHandler.addPlaceholder(new Placeholder("bufferText") {
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.gregtechceu.gtceu.integration.cctweaked.peripherals;
2+
3+
import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot;
4+
import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour;
5+
6+
import net.minecraft.world.item.ItemStack;
7+
8+
import dan200.computercraft.api.lua.LuaException;
9+
import dan200.computercraft.api.lua.LuaFunction;
10+
import dan200.computercraft.api.peripheral.GenericPeripheral;
11+
12+
import java.util.Optional;
13+
14+
import javax.annotation.Nullable;
15+
16+
public class CircuitSlotPeripheral implements GenericPeripheral {
17+
18+
public String id() {
19+
return "gtceu:circuit_slot";
20+
}
21+
22+
@LuaFunction
23+
public static @Nullable Integer getProgrammedCircuit(IHasCircuitSlot hasCircuitSlot) {
24+
ItemStack circuitStack = hasCircuitSlot.getCircuitInventory().getStackInSlot(0);
25+
if (circuitStack == ItemStack.EMPTY) return null;
26+
return IntCircuitBehaviour.getCircuitConfiguration(circuitStack);
27+
}
28+
29+
// Note: using '@Nullable Integer newValue' as a param causes the function to not be picked up by CC.
30+
// It needs the Optional<Integer>, despite Java complaining about it.
31+
@LuaFunction
32+
public static void setProgrammedCircuit(IHasCircuitSlot hasCircuitSlot,
33+
Optional<Integer> newValue) throws LuaException {
34+
if (newValue.isEmpty()) {
35+
hasCircuitSlot.getCircuitInventory().setStackInSlot(0, ItemStack.EMPTY);
36+
} else {
37+
if ((newValue.get() < 0) || (newValue.get() > 32)) {
38+
throw new LuaException("newValue " + newValue.get() + " is not within range 0..32 or nil");
39+
}
40+
hasCircuitSlot.getCircuitInventory().setStackInSlot(0, IntCircuitBehaviour.stack(newValue.get()));
41+
}
42+
}
43+
}

0 commit comments

Comments
 (0)