diff --git a/dependencies.gradle b/dependencies.gradle index 4334e330e3c..fcfdee1e87d 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -93,8 +93,8 @@ dependencies { modExtraLocalRuntime(forge.javd) modExtraLocalRuntime(forge.trenzalore) modExtraLocalRuntime(forge.curios) + modExtraLocalRuntime(forge.cc.tweaked.forge.impl) // modExtraLocalRuntime(forge.worldstripper) -// modExtraLocalRuntime(forge.cc.tweaked.forge.impl) for some reason this breaks create modExtraLocalRuntime(forge.bundles.kjs) diff --git a/gradle/forge.versions.toml b/gradle/forge.versions.toml index eac33484595..e98ba18e3bf 100644 --- a/gradle/forge.versions.toml +++ b/gradle/forge.versions.toml @@ -21,7 +21,7 @@ ftblibrary = "2001.2.4" ftbteams = "2001.3.0" ftbquests = "2001.4.11" ftbchunks = "2001.3.4" -ccTweaked = "1.114.3" +ccTweaked = "1.115.1" create = "6.0.6-150" ponder = "1.0.80" flywheel = "1.0.4" diff --git a/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java index db0589bd9c4..a36235f28d9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java @@ -7,6 +7,7 @@ import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; @@ -179,6 +180,15 @@ public static LazyOptional getCapability(MetaMachine machine, @NotNull Ca return GTCapability.CAPABILITY_CONTROLLABLE.orEmpty(cap, LazyOptional.of(() -> controllable)); } } + } else if (cap == GTCapability.CAPABILITY_CIRCUIT_SLOT) { + if (machine instanceof IHasCircuitSlot hasCircuitSlot) { + return GTCapability.CAPABILITY_CIRCUIT_SLOT.orEmpty(cap, LazyOptional.of(() -> hasCircuitSlot)); + } + for (MachineTrait trait : machine.getTraits()) { + if (trait instanceof IHasCircuitSlot hasCircuitSlot) { + return GTCapability.CAPABILITY_CIRCUIT_SLOT.orEmpty(cap, LazyOptional.of(() -> hasCircuitSlot)); + } + } } else if (cap == GTCapability.CAPABILITY_RECIPE_LOGIC) { for (MachineTrait trait : machine.getTraits()) { if (trait instanceof RecipeLogic recipeLogic) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java index 49ba637ac4d..babd82db0fb 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.api.capability; import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; @@ -70,6 +71,11 @@ public static IControllable getControllable(Level level, BlockPos pos, @Nullable return getBlockEntityCapability(GTCapability.CAPABILITY_CONTROLLABLE, level, pos, side); } + @Nullable + public static IHasCircuitSlot getCircuitSlot(Level level, BlockPos pos, @Nullable Direction side) { + return getBlockEntityCapability(GTCapability.CAPABILITY_CIRCUIT_SLOT, level, pos, side); + } + @Nullable public static RecipeLogic getRecipeLogic(Level level, BlockPos pos, @Nullable Direction side) { return getBlockEntityCapability(GTCapability.CAPABILITY_RECIPE_LOGIC, level, pos, side); diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java index 18e989bda1e..da01c5e0a22 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.api.capability.forge; import com.gregtechceu.gtceu.api.capability.*; +import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; @@ -20,6 +21,8 @@ public class GTCapability { public static final Capability CAPABILITY_WORKABLE = CapabilityManager.get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_CONTROLLABLE = CapabilityManager .get(new CapabilityToken<>() {}); + public static final Capability CAPABILITY_CIRCUIT_SLOT = CapabilityManager + .get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_RECIPE_LOGIC = CapabilityManager .get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_ELECTRIC_ITEM = CapabilityManager @@ -53,6 +56,7 @@ public static void register(RegisterCapabilitiesEvent event) { event.register(IToolable.class); event.register(IWorkable.class); event.register(IControllable.class); + event.register(IHasCircuitSlot.class); event.register(RecipeLogic.class); event.register(IElectricItem.class); event.register(ICleanroomReceiver.class); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java index 5df5704c76a..a87218ec587 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java @@ -20,10 +20,12 @@ public static void init() { ComputerCraftAPI.registerGenericSource(new WorkablePeripheral()); ComputerCraftAPI.registerGenericSource(new CoverHolderPeripheral()); ComputerCraftAPI.registerGenericSource(new CentralMonitorPeripheral()); + ComputerCraftAPI.registerGenericSource(new CircuitSlotPeripheral()); ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_CONTROLLABLE); ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_ENERGY_INFO_PROVIDER); ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_TURBINE_MACHINE); ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_WORKABLE); + ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_CIRCUIT_SLOT); ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_COVERABLE); ForgeComputerCraftAPI.registerGenericCapability(GTCapability.CAPABILITY_CENTRAL_MONITOR); PlaceholderHandler.addPlaceholder(new Placeholder("bufferText") { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/CircuitSlotPeripheral.java b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/CircuitSlotPeripheral.java new file mode 100644 index 00000000000..fbeb396689e --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/peripherals/CircuitSlotPeripheral.java @@ -0,0 +1,43 @@ +package com.gregtechceu.gtceu.integration.cctweaked.peripherals; + +import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; +import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; + +import net.minecraft.world.item.ItemStack; + +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.api.lua.LuaFunction; +import dan200.computercraft.api.peripheral.GenericPeripheral; + +import java.util.Optional; + +import javax.annotation.Nullable; + +public class CircuitSlotPeripheral implements GenericPeripheral { + + public String id() { + return "gtceu:circuit_slot"; + } + + @LuaFunction + public static @Nullable Integer getProgrammedCircuit(IHasCircuitSlot hasCircuitSlot) { + ItemStack circuitStack = hasCircuitSlot.getCircuitInventory().getStackInSlot(0); + if (circuitStack == ItemStack.EMPTY) return null; + return IntCircuitBehaviour.getCircuitConfiguration(circuitStack); + } + + // Note: using '@Nullable Integer newValue' as a param causes the function to not be picked up by CC. + // It needs the Optional, despite Java complaining about it. + @LuaFunction + public static void setProgrammedCircuit(IHasCircuitSlot hasCircuitSlot, + Optional newValue) throws LuaException { + if (newValue.isEmpty()) { + hasCircuitSlot.getCircuitInventory().setStackInSlot(0, ItemStack.EMPTY); + } else { + if ((newValue.get() < 0) || (newValue.get() > 32)) { + throw new LuaException("newValue " + newValue.get() + " is not within range 0..32 or nil"); + } + hasCircuitSlot.getCircuitInventory().setStackInSlot(0, IntCircuitBehaviour.stack(newValue.get())); + } + } +}