Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0b10352
feat(thaumcraft): Added new item ArcaneCraftingUpgrade
hinyb Dec 31, 2025
4df9e11
perf: reuse TileMagicWorkbench instance.
hinyb Dec 31, 2025
612f5bd
fix: load research from file when owner is offline.
hinyb Jan 1, 2026
dfc0905
perf: use cached resource location instead.
hinyb Jan 1, 2026
4d26c3d
Merge branch 'master' into arcane_crafting
hinyb Jan 10, 2026
c856458
Merge branch 'master' into arcane_crafting
Dream-Master Feb 22, 2026
5ab8a7d
Merge branch 'master' into arcane_crafting
Dream-Master Apr 4, 2026
eedfe59
Merge branch 'master' into arcane_crafting
hinyb Apr 5, 2026
76acb1e
Merge branch 'master' into arcane_crafting
hinyb Apr 5, 2026
8ce770f
Merge branch 'master' into arcane_crafting
Dream-Master Apr 6, 2026
b99bba3
Merge branch 'master' into arcane_crafting
hinyb Apr 6, 2026
599e2dd
optimize image
UltraProdigy Apr 6, 2026
3ddd025
Merge branch 'master' into arcane_crafting
Dream-Master Apr 8, 2026
69075c9
fix: fix typo in registry name
hinyb Apr 8, 2026
fabf09d
fix: correct registration location
hinyb Apr 8, 2026
073ee47
refactor: clean up redundant getSaveHandler call
hinyb Apr 10, 2026
04afe53
refactor: use val for immutable variables
hinyb Apr 10, 2026
3c83374
feat: change recipe to shapeless
hinyb Apr 10, 2026
dfe8b54
Merge branch 'master' into arcane_crafting
Dream-Master Apr 13, 2026
37a8eef
fix: fix incorrect success condition for consumeAllVis
hinyb Apr 13, 2026
4214fd2
fix: remove duplicated crafting logic
hinyb Apr 13, 2026
d6b44cd
fix: add error handling for player research loading
hinyb Apr 13, 2026
33a7255
style: add notch name to getPrivateValue.
hinyb Apr 15, 2026
039272f
Merge branch 'master' into arcane_crafting
Dream-Master Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/main/resources/assets/opencomputers/lang/en_US.lang
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ item.oc.UpgradeContainerUpgrade0.name=Upgrade Container (Tier 1)
item.oc.UpgradeContainerUpgrade1.name=Upgrade Container (Tier 2)
item.oc.UpgradeContainerUpgrade2.name=Upgrade Container (Tier 3)
item.oc.UpgradeCrafting.name=Crafting Upgrade
item.oc.UpgradeArcaneCrafting.name=Arcane Crafting Upgrade
item.oc.UpgradeDatabase0.name=Database Upgrade (Tier 1)
item.oc.UpgradeDatabase1.name=Database Upgrade (Tier 2)
item.oc.UpgradeDatabase2.name=Database Upgrade (Tier 3)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,10 @@ beekeeperUpgrade {
["oc:circuitChip3", {item="Forestry:beealyzer"}, "oc:circuitChip3"]
[ingotGold, "oc:materialCircuitBoardPrinted", ingotGold]]
}
arcaneCraftingUpgrade {
type: shapeless
input: ["oc:craftingUpgrade", {item="Thaumcraft:blockTable", subID=15}, "oc:circuitChip2"]
}

configuratorUpgrade {
input: [[ingotIron, "", ingotIron]
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions src/main/scala/li/cil/oc/Constants.scala
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ object Constants {
final val CPUTier2 = "cpu2"
final val CPUTier3 = "cpu3"
final val CraftingUpgrade = "craftingUpgrade"
final val ArcaneCraftingUpgrade = "arcaneCraftingUpgrade"
final val ControlUnit = "cu"
final val CuttingWire = "cuttingWire"
final val DatabaseUpgradeTier1 = "databaseUpgrade1"
Expand Down
1 change: 1 addition & 0 deletions src/main/scala/li/cil/oc/client/Textures.scala
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ object Textures {
val blockRackTerminalServerPresence = new ResourceLocation(Settings.resourceDomain, "textures/blocks/TerminalServerFrontPresence.png")

val upgradeCrafting = new ResourceLocation(Settings.resourceDomain, "textures/model/UpgradeCrafting.png")
val upgradeArcaneCrafting = new ResourceLocation(Settings.resourceDomain, "textures/items/UpgradeArcaneCrafting.png")
val upgradeGenerator = new ResourceLocation(Settings.resourceDomain, "textures/model/UpgradeGenerator.png")
val upgradeInventory = new ResourceLocation(Settings.resourceDomain, "textures/model/UpgradeInventory.png")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ object ModOpenComputers extends ModProxy {
Constants.ItemName.BatteryUpgradeTier3,
Constants.ItemName.ChunkloaderUpgrade,
Constants.ItemName.CraftingUpgrade,
Constants.ItemName.ArcaneCraftingUpgrade,
Constants.ItemName.ExperienceUpgrade,
Constants.ItemName.GeneratorUpgrade,
Constants.ItemName.HoverUpgradeTier1,
Expand Down Expand Up @@ -260,6 +261,7 @@ object ModOpenComputers extends ModProxy {
Constants.ItemName.RedstoneCardTier1,
Constants.ItemName.AngelUpgrade,
Constants.ItemName.CraftingUpgrade,
Constants.ItemName.ArcaneCraftingUpgrade,
Constants.ItemName.HoverUpgradeTier1,
Constants.ItemName.HoverUpgradeTier2,
Constants.ItemName.BeekeeperUpgrade,
Expand All @@ -277,6 +279,7 @@ object ModOpenComputers extends ModProxy {
Constants.ItemName.GraphicsCardTier3,
Constants.ItemName.AngelUpgrade,
Constants.ItemName.CraftingUpgrade,
Constants.ItemName.ArcaneCraftingUpgrade,
Constants.ItemName.DatabaseUpgradeTier1,
Constants.ItemName.DatabaseUpgradeTier2,
Constants.ItemName.DatabaseUpgradeTier3,
Expand Down Expand Up @@ -313,6 +316,7 @@ object ModOpenComputers extends ModProxy {
Constants.ItemName.AngelUpgrade,
Constants.ItemName.ChunkloaderUpgrade,
Constants.ItemName.CraftingUpgrade,
Constants.ItemName.ArcaneCraftingUpgrade,
Constants.ItemName.DatabaseUpgradeTier1,
Constants.ItemName.DatabaseUpgradeTier2,
Constants.ItemName.DatabaseUpgradeTier3,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package li.cil.oc.integration.thaumcraft

import li.cil.oc.api.driver.EnvironmentProvider
import li.cil.oc.api.driver.item.HostAware
import li.cil.oc.api.internal.Robot
import li.cil.oc.api.network.{EnvironmentHost, ManagedEnvironment}
import li.cil.oc.common.{Slot, Tier}
import li.cil.oc.integration.opencomputers.Item
import li.cil.oc.{Constants, api}
import net.minecraft.item.ItemStack

object DriverUpgradeArcaneCrafting extends Item with HostAware {
override def worksWith(stack: ItemStack): Boolean = isOneOf(stack,
api.Items.get(Constants.ItemName.ArcaneCraftingUpgrade))

override def createEnvironment(stack: ItemStack, host: EnvironmentHost): ManagedEnvironment =
if (host.world != null && host.world.isRemote) null
else host match {
case robot: EnvironmentHost with Robot => new UpgradeArcaneCrafting(robot)
case _ => null
}

override def slot(stack: ItemStack): String = Slot.Upgrade

override def tier(stack: ItemStack): Int = Tier.Two

object Provider extends EnvironmentProvider {
override def getEnvironment(stack: ItemStack): Class[_] =
if (worksWith(stack))
classOf[UpgradeArcaneCrafting]
else null
}

}
Original file line number Diff line number Diff line change
@@ -1,15 +1,52 @@
package li.cil.oc.integration.thaumcraft

import li.cil.oc.api.Driver
import cpw.mods.fml.common.registry.GameRegistry
import li.cil.oc.Constants
import li.cil.oc.api.{Driver, Items}
import li.cil.oc.api.driver.item.UpgradeRenderer.MountPointName
import li.cil.oc.api.event.RobotRenderEvent.MountPoint
import li.cil.oc.api.internal.Robot
import li.cil.oc.common.recipe.Recipes
import li.cil.oc.integration.{ModProxy, Mods}
import net.minecraft.item.ItemStack
import org.lwjgl.opengl.GL11
import thaumcraft.client.lib.UtilsFX
import thaumcraft.client.renderers.models.ModelArcaneWorkbench

object ModThaumcraft extends ModProxy {
override def getMod = Mods.Thaumcraft

override def initialize() {
Driver.add(new DriverAspectContainer)
Driver.add(new DriverInfusionMatrix)

Driver.add(DriverUpgradeArcaneCrafting)
Driver.add(DriverUpgradeArcaneCrafting.Provider)
Driver.add(ConverterAspectItem)

val multi = new li.cil.oc.common.item.Delegator() {
private lazy val workbenchModel = new ModelArcaneWorkbench
private lazy val ArcaneUpgrade = Items.get(Constants.ItemName.ArcaneCraftingUpgrade)

override def computePreferredMountPoint(stack: ItemStack, robot: Robot, availableMountPoints: java.util.Set[String]): String = Items.get(stack) match {
case ArcaneUpgrade => MountPointName.Any
case _ => MountPointName.None
}

override def render(stack: ItemStack, mountPoint: MountPoint, robot: Robot, pt: Float): Unit = Items.get(stack) match {
case ArcaneUpgrade =>
UtilsFX.bindTexture("textures/models/worktable.png")
GL11.glRotatef(mountPoint.rotation.getW, mountPoint.rotation.getX, mountPoint.rotation.getY, mountPoint.rotation.getZ)
GL11.glTranslatef(mountPoint.offset.getX, mountPoint.offset.getY, mountPoint.offset.getZ)
GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F)
GL11.glTranslatef(0.0F, -0.1F, 0.0F)
GL11.glScalef(0.2F, 0.2F, 0.2F)
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F)
workbenchModel.renderAll()
case _ =>
}
}

GameRegistry.registerItem(multi, "item.thaumcraft")
Recipes.addSubItem(new item.UpgradeArcaneCrafting(multi), Constants.ItemName.ArcaneCraftingUpgrade, "oc:arcaneCraftingUpgrade")
}
}
Loading
Loading