From 1a767425ccedbf02d2c175c00f737b59f573184a Mon Sep 17 00:00:00 2001 From: DrParadox7 Date: Sat, 23 Dec 2023 00:23:04 +0100 Subject: [PATCH 1/4] Add check for fuel value should improve performance slightly --- .../common/tile/TileEntityFuelwoodHeater.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/main/java/mekanism/common/tile/TileEntityFuelwoodHeater.java b/src/main/java/mekanism/common/tile/TileEntityFuelwoodHeater.java index 11976c0b48c..edcd8e461d6 100644 --- a/src/main/java/mekanism/common/tile/TileEntityFuelwoodHeater.java +++ b/src/main/java/mekanism/common/tile/TileEntityFuelwoodHeater.java @@ -82,20 +82,21 @@ public void onUpdate() burning = true; } else { - if(inventory[0] != null) - { - maxBurnTime = burnTime = TileEntityFurnace.getItemBurnTime(inventory[0])/2; - - if(burnTime > 0) - { - inventory[0].stackSize--; - - if(inventory[0].stackSize == 0) - { - inventory[0] = inventory[0].getItem().getContainerItem(inventory[0]); + if(inventory[0] != null) { + int fuelTime = TileEntityFurnace.getItemBurnTime(inventory[0]); + + if (fuelTime > 0) { + maxBurnTime = burnTime = fuelTime / 2; + + if (burnTime > 0) { + inventory[0].stackSize--; + + if (inventory[0].stackSize == 0) { + inventory[0] = inventory[0].getItem().getContainerItem(inventory[0]); + } + + burning = true; } - - burning = true; } } } From 1e9b28dfbef4888b125fb8fc3a92be4b0d20c9d2 Mon Sep 17 00:00:00 2001 From: DrParadox7 Date: Wed, 31 Jan 2024 15:41:14 +0100 Subject: [PATCH 2/4] Double Roundoff Fix Fix Double roundoff from preventing the Heating Machines from reaching 0 degrees resulting in the block constantly ticking. --- .../content/boiler/SynchronizedBoilerData.java | 9 +++++++-- .../multipart/PartThermodynamicConductor.java | 7 ++++++- .../common/tile/TileEntityFuelwoodHeater.java | 18 ++++++++++++++++-- .../tile/TileEntityQuantumEntangloporter.java | 7 ++++++- .../common/tile/TileEntityResistiveHeater.java | 11 ++++++++--- .../common/tile/TileEntityHeatGenerator.java | 8 +++++++- 6 files changed, 50 insertions(+), 10 deletions(-) diff --git a/src/main/java/mekanism/common/content/boiler/SynchronizedBoilerData.java b/src/main/java/mekanism/common/content/boiler/SynchronizedBoilerData.java index a22be07e35b..3375be1b0e3 100644 --- a/src/main/java/mekanism/common/content/boiler/SynchronizedBoilerData.java +++ b/src/main/java/mekanism/common/content/boiler/SynchronizedBoilerData.java @@ -142,9 +142,14 @@ public double[] simulateHeat() @Override public double applyTemperatureChange() { - temperature += heatToAbsorb / locations.size(); + if (heatToAbsorb < 0) { // Heat subtraction + double newTemperature = temperature + (heatToAbsorb / locations.size()); + temperature = newTemperature >= 0.01 ? newTemperature : 0.0; + } else { + temperature += heatToAbsorb / locations.size(); + } heatToAbsorb = 0; - + return temperature; } diff --git a/src/main/java/mekanism/common/multipart/PartThermodynamicConductor.java b/src/main/java/mekanism/common/multipart/PartThermodynamicConductor.java index 592aa17a079..3c5844fd6ad 100644 --- a/src/main/java/mekanism/common/multipart/PartThermodynamicConductor.java +++ b/src/main/java/mekanism/common/multipart/PartThermodynamicConductor.java @@ -215,7 +215,12 @@ public double[] simulateHeat() @Override public double applyTemperatureChange() { - temperature += tier.inverseHeatCapacity * heatToAbsorb; + if (heatToAbsorb < 0) { // Heat subtraction + double newTemperature = temperature + (tier.inverseHeatCapacity * heatToAbsorb); + temperature = newTemperature >= 0.01 ? newTemperature : 0.0; + } else { + temperature += tier.inverseHeatCapacity * heatToAbsorb; + } heatToAbsorb = 0; if(Math.abs(temperature - clientTemperature) > (temperature / 100)) diff --git a/src/main/java/mekanism/common/tile/TileEntityFuelwoodHeater.java b/src/main/java/mekanism/common/tile/TileEntityFuelwoodHeater.java index edcd8e461d6..bdf470252fd 100644 --- a/src/main/java/mekanism/common/tile/TileEntityFuelwoodHeater.java +++ b/src/main/java/mekanism/common/tile/TileEntityFuelwoodHeater.java @@ -29,7 +29,7 @@ public class TileEntityFuelwoodHeater extends TileEntityContainerBlock implement public int burnTime; public int maxBurnTime; - /** Whether or not this machine is in it's active state. */ + /** Whether this machine is in its active state. */ public boolean isActive; /** The client's current active state. */ @@ -104,6 +104,15 @@ public void onUpdate() if(burning) { heatToAbsorb += general.heatPerFuelTick; + setActive(true); + } else if (isActive) { + setActive(false); + } + + if (burning || temperature > 0) { + double[] loss = simulateHeat(); + applyTemperatureChange(); + lastEnvironmentLoss = loss[1]; } double[] loss = simulateHeat(); @@ -252,7 +261,12 @@ public double[] simulateHeat() @Override public double applyTemperatureChange() { - temperature += heatToAbsorb; + if (heatToAbsorb < 0) { // Heat subtraction + double newTemperature = temperature + heatToAbsorb; + temperature = newTemperature >= 0.01 ? newTemperature : 0.0; + } else { + temperature += heatToAbsorb; + } heatToAbsorb = 0; return temperature; diff --git a/src/main/java/mekanism/common/tile/TileEntityQuantumEntangloporter.java b/src/main/java/mekanism/common/tile/TileEntityQuantumEntangloporter.java index c87f7d001c0..1e4e5f66226 100644 --- a/src/main/java/mekanism/common/tile/TileEntityQuantumEntangloporter.java +++ b/src/main/java/mekanism/common/tile/TileEntityQuantumEntangloporter.java @@ -610,7 +610,12 @@ public double applyTemperatureChange() { if(hasFrequency()) { - frequency.temperature += heatToAbsorb; + if (heatToAbsorb < 0) { // Heat subtraction + double newTemperature = frequency.temperature + heatToAbsorb; + frequency.temperature = newTemperature >= 0.01 ? newTemperature : 0.0; + } else { + frequency.temperature += heatToAbsorb; + } } heatToAbsorb = 0; diff --git a/src/main/java/mekanism/common/tile/TileEntityResistiveHeater.java b/src/main/java/mekanism/common/tile/TileEntityResistiveHeater.java index 5fab2d54ec0..dd9a47f9ca5 100644 --- a/src/main/java/mekanism/common/tile/TileEntityResistiveHeater.java +++ b/src/main/java/mekanism/common/tile/TileEntityResistiveHeater.java @@ -241,11 +241,16 @@ public double[] simulateHeat() } @Override - public double applyTemperatureChange() + public double applyTemperatureChange() { - temperature += heatToAbsorb; + if (heatToAbsorb < 0) { // Heat subtraction + double newTemperature = temperature + heatToAbsorb; + temperature = newTemperature >= 0.01 ? newTemperature : 0.0; + } else { + temperature += heatToAbsorb; + } heatToAbsorb = 0; - + return temperature; } diff --git a/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java b/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java index c9f580b1136..f4310f2f7c1 100644 --- a/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java +++ b/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java @@ -437,7 +437,13 @@ public double[] simulateHeat() @Override public double applyTemperatureChange() { - temperature += invHeatCapacity * heatToAbsorb; + if (heatToAbsorb < 0) { // Heat subtraction + double newTemperature = temperature + (invHeatCapacity * heatToAbsorb); + temperature = newTemperature >= 0.01 ? newTemperature : 0.0; + } else { + temperature += invHeatCapacity * heatToAbsorb; + } + heatToAbsorb = 0; return temperature; } From 97f2d46d65b02a987749d8240bb4ed26990c5800 Mon Sep 17 00:00:00 2001 From: DrParadox7 Date: Thu, 25 Jan 2024 20:50:24 +0100 Subject: [PATCH 3/4] Improve Fuelwood Tick performance Improves server performance of Fuelwood Heater by: - Preventing it from doing unnecessary operations when it has no fuel and no temperature. - Reducing fuel value checks of empty container items. This is a block that gets spammed a lot for steam generation so these small tweaks go a long way. Better non-burnable detection Saves last invalid ItemStack (no fuel value). The next operation will only occur with a different stack. It will no longer attempt to read fuel values of something that cannot be consumed (since no fuel value) more than once. --- .../common/tile/TileEntityFuelwoodHeater.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/main/java/mekanism/common/tile/TileEntityFuelwoodHeater.java b/src/main/java/mekanism/common/tile/TileEntityFuelwoodHeater.java index bdf470252fd..3ff895c30f1 100644 --- a/src/main/java/mekanism/common/tile/TileEntityFuelwoodHeater.java +++ b/src/main/java/mekanism/common/tile/TileEntityFuelwoodHeater.java @@ -25,10 +25,12 @@ public class TileEntityFuelwoodHeater extends TileEntityContainerBlock implement { public double temperature; public double heatToAbsorb = 0; - + public int burnTime; public int maxBurnTime; - + public ItemStack nonBurnable; + + /** Whether this machine is in its active state. */ public boolean isActive; @@ -73,19 +75,20 @@ public void onUpdate() Mekanism.packetHandler.sendToReceivers(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), new Range4D(Coord4D.get(this))); } } - + boolean burning = false; - + if(burnTime > 0) { burnTime--; burning = true; } else { - if(inventory[0] != null) { + if (inventory[0] != null && inventory[0] != nonBurnable) { int fuelTime = TileEntityFurnace.getItemBurnTime(inventory[0]); if (fuelTime > 0) { + nonBurnable = null; maxBurnTime = burnTime = fuelTime / 2; if (burnTime > 0) { @@ -97,10 +100,13 @@ public void onUpdate() burning = true; } + } else { + nonBurnable = inventory[0]; } } } - + + if(burning) { heatToAbsorb += general.heatPerFuelTick; @@ -114,13 +120,6 @@ public void onUpdate() applyTemperatureChange(); lastEnvironmentLoss = loss[1]; } - - double[] loss = simulateHeat(); - applyTemperatureChange(); - - lastEnvironmentLoss = loss[1]; - - setActive(burning); } } From 553a3e44d5eff5a74cd113c63ed1c20440142412 Mon Sep 17 00:00:00 2001 From: DrParadox7 Date: Wed, 31 Jan 2024 16:18:43 +0100 Subject: [PATCH 4/4] Update version --- Mekanism.txt | 2 +- README.md | 2 ++ gradle.properties | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Mekanism.txt b/Mekanism.txt index b9abb48f25d..5cfe42e28ba 100644 --- a/Mekanism.txt +++ b/Mekanism.txt @@ -1,2 +1,2 @@ -1.7.10:9.10.32:(22/22/22) FIXES for EVERYONE! +1.7.10:9.10.35:(22/22/22) FIXES for EVERYONE! 1.12.2:9.12.8:(22/22/22) FIXES for EVERYONE! diff --git a/README.md b/README.md index 70732ef0607..bf446901136 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ Mekanism CE also has two dependencies that it requires, as a modpack creator DO | FEATURE: [Configurable radius digitalminer](https://github.com/Thorfusion/Mekanism-Community-Edition/issues/55) | :x: | :heavy_check_mark: | | FEATURE: [Whitelist dimension's for windmill](https://github.com/Thorfusion/Mekanism-Community-Edition/issues/16) | :x: | :heavy_check_mark: | | FEATURE: [Immersive Deuterium](https://github.com/Thorfusion/Mekanism-Community-Edition/pull/94) | :x: | :heavy_check_mark: | +| PERFORMANCE: [Fix Infinite Heat Transfers](https://github.com/Thorfusion/Mekanism-Community-Edition/pull/158) | :x: | :heavy_check_mark: | | NEW FEATURES, BUGFIXES & MORE! | :x: | :heavy_check_mark: | ### Full changelog @@ -152,6 +153,7 @@ Note that changes not by the mekanism ce team has been added by us from their re + Fixes CMEs crashes in https://github.com/Thorfusion/Mekanism-Community-Edition/pull/141 + Plat Compat Shenanigans in https://github.com/Thorfusion/Mekanism-Community-Edition/pull/142 + Patch Personal Chest dupe in https://github.com/Thorfusion/Mekanism-Community-Edition/pull/143 ++ Fixed lag with in heat transferring devices https://github.com/Thorfusion/Mekanism-Community-Edition/pull/158 #### leytilera + universal cable connection to IC2 diff --git a/gradle.properties b/gradle.properties index 1f03cdab241..3358a4f33d8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,5 +4,5 @@ FMP_version=1.2.0.345 CCLIB_version=1.1.3.141 NEI_version=1.0.5.120 CCC_version=1.0.7.48 -mod_version=9.10.32 -alt_version=9, 10, 32 +mod_version=9.10.35 +alt_version=9, 10, 35