diff --git a/src/main/resources/application.conf b/src/main/resources/application.conf index 9c7884f0d..792fd0b6f 100644 --- a/src/main/resources/application.conf +++ b/src/main/resources/application.conf @@ -1194,6 +1194,11 @@ opencomputers { # properties, i.e. througput, frequency and buffer size. # Valid values are: 0 = none, 1 = tier 1, 2 = tier 2, 3 = tier 3. serverRackSwitchTier: 1 + + # Enforced delay when changing a redstone emitting component's output, + # such as the redstone card and redstone I/O block. Lowering this can + # have very negative impact on server TPS, so beware. + redstoneDelay: 0.1 } # Settings for mod integration (the mod previously known as OpenComponents). diff --git a/src/main/scala/li/cil/oc/Settings.scala b/src/main/scala/li/cil/oc/Settings.scala index 0846170be..809615034 100644 --- a/src/main/scala/li/cil/oc/Settings.scala +++ b/src/main/scala/li/cil/oc/Settings.scala @@ -335,6 +335,7 @@ class Settings(val config: Config) { val dataCardHardLimit = config.getInt("misc.dataCardHardLimit") max 0 val dataCardTimeout = config.getDouble("misc.dataCardTimeout") max 0 val serverRackSwitchTier = (config.getInt("misc.serverRackSwitchTier") - 1) max Tier.None min Tier.Three + val redstoneDelay = config.getDouble("misc.redstoneDelay") max 0 // ----------------------------------------------------------------------- // // printer diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala b/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala index bfa7120cb..fd6f6ecac 100644 --- a/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala +++ b/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala @@ -1,5 +1,6 @@ package li.cil.oc.server.component +import li.cil.oc.Settings import li.cil.oc.api.driver.EnvironmentHost import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback @@ -36,14 +37,16 @@ trait RedstoneBundled extends RedstoneVanilla { case (color, number: Number) => redstone.bundledOutput(side, color, number.intValue()) case _ => } - context.pause(0.1) + if (Settings.get.redstoneDelay > 0) + context.pause(Settings.get.redstoneDelay) result(true) } else { val color = checkColor(args, 1) val value = args.checkInteger(2) redstone.bundledOutput(side, color, value) - context.pause(0.1) + if (Settings.get.redstoneDelay > 0) + context.pause(Settings.get.redstoneDelay) result(redstone.bundledOutput(side, color)) } } diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala b/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala index 87b2b552d..c52690c1b 100644 --- a/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala +++ b/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala @@ -1,5 +1,6 @@ package li.cil.oc.server.component +import li.cil.oc.Settings import li.cil.oc.api.driver.EnvironmentHost import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback @@ -30,7 +31,8 @@ trait RedstoneVanilla extends RedstoneSignaller { val side = checkSide(args, 0) val value = args.checkInteger(1) redstone.output(side, value) - context.pause(0.1) + if (Settings.get.redstoneDelay > 0) + context.pause(Settings.get.redstoneDelay) result(redstone.output(side)) } diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala b/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala index 67e759a32..c62710d65 100644 --- a/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala +++ b/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala @@ -4,6 +4,7 @@ import codechicken.lib.vec.Vector3 import codechicken.wirelessredstone.core.WirelessReceivingDevice import codechicken.wirelessredstone.core.WirelessTransmittingDevice import cpw.mods.fml.common.Optional +import li.cil.oc.Settings import li.cil.oc.api.driver.EnvironmentHost import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback @@ -48,7 +49,8 @@ trait RedstoneWireless extends RedstoneSignaller with WirelessReceivingDevice wi util.WirelessRedstone.updateOutput(this) - context.pause(0.1) + if (Settings.get.redstoneDelay > 0) + context.pause(Settings.get.redstoneDelay) } result(oldValue)