Skip to content

Commit 9c3b8e4

Browse files
committed
big kelvin update
1 parent 4e467cc commit 9c3b8e4

32 files changed

+71
-80
lines changed

common/src/main/kotlin/org/valkyrienskies/clockwork/ClockworkConfig.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.valkyrienskies.clockwork
22

33
import org.valkyrienskies.clockwork.util.gui.DuctUnits
4+
import org.valkyrienskies.clockwork.util.kelvin.KelvinSolverType
45
import org.valkyrienskies.core.internal.config.ConfigEntry
56

67
object ClockworkConfig {
@@ -178,6 +179,9 @@ object ClockworkConfig {
178179
@ConfigEntry(description = "Maximum amount of blocks a smart flap bearing can assemble", min = 0.0, max = Int.MAX_VALUE.toDouble())
179180
var smartFlapBearingMaxSize = 24
180181

182+
@ConfigEntry(description = "The gas physics solver used by Kelvin. Options: CLASSIC, JACOBI_SIMPLIFIED, JACOBI")
183+
var kelvinSolver: KelvinSolverType = KelvinSolverType.JACOBI
184+
181185
@ConfigEntry(description = "Whether the (smart) flap bearing peripheral can use setAngle without rotational power")
182186
var cheatFlapBearingPeripheral = false
183187

common/src/main/kotlin/org/valkyrienskies/clockwork/ClockworkMod.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ object ClockworkMod {
191191

192192
@JvmStatic
193193
fun getKelvin(): DuctNetworkServer {
194+
KelvinMod.Kelvin.solver = ClockworkConfig.SERVER.kelvinSolver.getSolver()
194195
return KelvinMod.getKelvin() as DuctNetworkServer
195196
}
196197

common/src/main/kotlin/org/valkyrienskies/clockwork/ClockworkPackets.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import org.valkyrienskies.clockwork.platform.SharedValues.packetChannel
3030
import org.valkyrienskies.clockwork.platform.api.network.C2SCWPacket
3131
import org.valkyrienskies.clockwork.platform.api.network.CWPacket
3232
import org.valkyrienskies.clockwork.platform.api.network.S2CCWPacket
33-
import org.valkyrienskies.clockwork.util.KNodeSyncPacket
33+
import org.valkyrienskies.clockwork.util.kelvin.KNodeSyncPacket
3434
import org.valkyrienskies.clockwork.util.blocktype.SyncableStoragePacket
3535
import org.valkyrienskies.clockwork.util.universal_joint.UniversalJointItemPacket
3636
import java.util.function.Function

common/src/main/kotlin/org/valkyrienskies/clockwork/content/curiosities/solver/SolverBlockEntity.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package org.valkyrienskies.clockwork.content.curiosities.solver
22

3-
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity
43
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour
54
import net.minecraft.core.BlockPos
6-
import net.minecraft.core.Direction
75
import net.minecraft.core.particles.ParticleTypes
86
import net.minecraft.server.level.ServerLevel
97
import net.minecraft.util.Mth
@@ -20,15 +18,14 @@ import net.minecraft.world.phys.Vec3
2018
import org.valkyrienskies.clockwork.ClockworkDamageTypes
2119
import org.valkyrienskies.clockwork.ClockworkModClient
2220
import org.valkyrienskies.clockwork.content.curiosities.IArcConnector
23-
import org.valkyrienskies.clockwork.util.KNodeBlockEntity
21+
import org.valkyrienskies.clockwork.util.kelvin.KNodeBlockEntity
2422
import org.valkyrienskies.clockwork.util.arc.ArcBias
2523
import org.valkyrienskies.clockwork.util.arc.LightningBolt
2624
import org.valkyrienskies.clockwork.util.arc.LightningManager
2725
import org.valkyrienskies.core.api.ships.ClientShip
2826
import org.valkyrienskies.kelvin.api.DuctNodePos
2927
import org.valkyrienskies.kelvin.util.KelvinExtensions.toDuctNodePos
3028
import org.valkyrienskies.mod.common.getLoadedShipManagingPos
31-
import org.valkyrienskies.mod.common.toWorldCoordinates
3229
import org.valkyrienskies.mod.common.util.toDoubles
3330
import org.valkyrienskies.mod.common.util.toJOML
3431
import org.valkyrienskies.mod.common.util.toJOMLD

common/src/main/kotlin/org/valkyrienskies/clockwork/content/forces/PocketForcesController.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import org.valkyrienskies.kelvin.api.DuctNetwork
2424
import org.valkyrienskies.kelvin.api.GasType
2525
import org.valkyrienskies.kelvin.impl.DuctNetworkServer
2626
import org.valkyrienskies.kelvin.impl.registry.GasTypeRegistry
27+
import org.valkyrienskies.kelvin.util.GasPhysics.mixtureCapacity
2728
import org.valkyrienskies.mod.api.positionToWorld
2829
import org.valkyrienskies.mod.common.dimensionId
2930
import org.valkyrienskies.mod.common.shipObjectWorld
@@ -146,7 +147,7 @@ class PocketForcesController: ShipPhysicsListener {
146147

147148
val totalMass = gasMasses.values.sum()
148149
val moles = gasMasses.entries.sumOf { it.key.massToMoles(it.value) }
149-
val capacity = (KelvinMod.getKelvin() as DuctNetworkServer).mixtureCapacity(gasMasses)
150+
val capacity = mixtureCapacity(gasMasses)
150151
var currentTemperature = currentHeatEnergy / capacity
151152
val currentPressure = moles * DuctNetwork.idealGasConstant * currentTemperature / volume
152153
val molarMass = gasMasses.entries.sumOf { it.key.density * 0.0224 * it.value } / totalMass
@@ -159,15 +160,15 @@ class PocketForcesController: ShipPhysicsListener {
159160
gasMasses.forEach {
160161
gasMasses[it.key] = gasMasses[it.key]!! - exitGas * it.value / totalMass
161162
exitGasMasses[it.key] = exitGas * it.value / totalMass}
162-
val exitHeat = currentTemperature * ClockworkMod.getKelvin().mixtureCapacity(exitGasMasses)
163+
val exitHeat = currentTemperature * mixtureCapacity(exitGasMasses)
163164

164165
currentHeatEnergy -= exitHeat
165166
currentTemperature = currentHeatEnergy / capacity
166167

167168
// Gas leak heat transfer
168169
val heatFlow = ClockworkConfig.SERVER.heatTransferCoefficient * estimatedSurfaceArea * (atmoTemperature - currentTemperature)
169170
var newHeatEnergy = currentHeatEnergy + heatFlow * 0.05
170-
val newCapacity = (KelvinMod.getKelvin() as DuctNetworkServer).mixtureCapacity(gasMasses)
171+
val newCapacity = mixtureCapacity(gasMasses)
171172
var newTemperature = newHeatEnergy / newCapacity
172173

173174
// Gas leak entering

common/src/main/kotlin/org/valkyrienskies/clockwork/content/forces/data/BalloonData.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import org.valkyrienskies.kelvin.impl.DuctNetworkServer
3232
import org.valkyrienskies.kelvin.impl.client.particle.DefaultGasParticle
3333
import org.valkyrienskies.kelvin.impl.registry.GasParticlePickerRegistry
3434
import org.valkyrienskies.kelvin.impl.registry.GasTypeRegistry
35+
import org.valkyrienskies.kelvin.util.GasPhysics.mixtureCapacity
3536
import org.valkyrienskies.mod.api.positionToWorld
3637
import org.valkyrienskies.mod.common.dimensionId
3738
import org.valkyrienskies.mod.common.getLoadedShipManagingPos
@@ -163,7 +164,7 @@ class BalloonData {
163164

164165

165166
val moles = currentGasMasses.entries.sumOf { it.key.massToMoles(it.value) }
166-
val capacity = (KelvinMod.getKelvin() as DuctNetworkServer).mixtureCapacity(currentGasMasses)
167+
val capacity = mixtureCapacity(currentGasMasses)
167168
var currentTemperature = currentHeatEnergy / capacity
168169
val currentPressure = moles * DuctNetwork.idealGasConstant * currentTemperature / volume
169170
val molarMass = currentGasMasses.entries.sumOf { it.key.density * 0.0224 * it.value } / totalMass
@@ -176,10 +177,10 @@ class BalloonData {
176177
currentGasMasses.forEach {
177178
currentGasMasses[it.key] = currentGasMasses[it.key]!! - exitGas * it.value / totalMass
178179
exitGasMasses[it.key] = exitGas * it.value / totalMass}
179-
val exitHeat = currentTemperature * ClockworkMod.getKelvin().mixtureCapacity(exitGasMasses)
180+
val exitHeat = mixtureCapacity(exitGasMasses)
180181

181182
currentHeatEnergy -= exitHeat
182-
val newCapacity = (KelvinMod.getKelvin() as DuctNetworkServer).mixtureCapacity(currentGasMasses)
183+
val newCapacity = mixtureCapacity(currentGasMasses)
183184
currentTemperature = currentHeatEnergy / newCapacity
184185

185186
// Gas leak heat transfer
@@ -320,7 +321,7 @@ class BalloonData {
320321
val atmoPressure = level.shipObjectWorld.aerodynamicUtils.getAirPressureForY(rootYInWorld, level.dimensionId)
321322
val internalPressure = run {
322323
val moles = gasMasses.entries.sumOf { GasTypeRegistry.getGasType(ResourceLocation(it.key))!!.massToMoles(it.value) }
323-
val capacity = (KelvinMod.getKelvin() as DuctNetworkServer).mixtureCapacity(gasMasses.mapKeys { GasTypeRegistry.getGasType(ResourceLocation(it.key))!! })
324+
val capacity = mixtureCapacity(gasMasses.mapKeys { GasTypeRegistry.getGasType(ResourceLocation(it.key))!! })
324325
val temperature = currentEnergy / capacity
325326
moles * DuctNetwork.idealGasConstant * temperature / currentVolume
326327
}

common/src/main/kotlin/org/valkyrienskies/clockwork/content/logistics/gas/backtank/GasBacktankBlockEntity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import net.minecraft.core.BlockPos
55
import net.minecraft.nbt.CompoundTag
66
import net.minecraft.world.level.block.entity.BlockEntityType
77
import net.minecraft.world.level.block.state.BlockState
8-
import org.valkyrienskies.clockwork.util.KNodeBlockEntity
8+
import org.valkyrienskies.clockwork.util.kelvin.KNodeBlockEntity
99

1010
class GasBacktankBlockEntity(type: BlockEntityType<*>, pos: BlockPos, state: BlockState) : KNodeBlockEntity(type, pos, state) {
1111

common/src/main/kotlin/org/valkyrienskies/clockwork/content/logistics/gas/crafter/GasCrafterBlockEntity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import net.minecraft.world.item.crafting.Recipe
1212
import net.minecraft.world.level.block.entity.BlockEntityType
1313
import net.minecraft.world.level.block.state.BlockState
1414
import org.valkyrienskies.clockwork.ClockworkRecipes
15-
import org.valkyrienskies.clockwork.util.KNodeBlockEntity
15+
import org.valkyrienskies.clockwork.util.kelvin.KNodeBlockEntity
1616
import java.util.*
1717
import java.util.function.Predicate
1818
import kotlin.math.max

common/src/main/kotlin/org/valkyrienskies/clockwork/content/logistics/gas/duct/DuctBlock.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ import org.valkyrienskies.clockwork.content.logistics.gas.duct.IDuct.Companion.N
4848
import org.valkyrienskies.clockwork.content.logistics.gas.duct.IDuct.Companion.SOUTH_CONNECTION
4949
import org.valkyrienskies.clockwork.content.logistics.gas.duct.IDuct.Companion.UP_CONNECTION
5050
import org.valkyrienskies.clockwork.content.logistics.gas.duct.IDuct.Companion.WEST_CONNECTION
51-
import org.valkyrienskies.clockwork.util.KelvinParticleHelper
51+
import org.valkyrienskies.clockwork.util.kelvin.KelvinParticleHelper
5252
import org.valkyrienskies.clockwork.util.MathFunctions.isWithin
5353
import org.valkyrienskies.clockwork.util.MathFunctions.removeAxis
5454
import org.valkyrienskies.clockwork.util.gui.IHaveDuctStats

0 commit comments

Comments
 (0)