From d41b9a55bd7b599f47105b4a0264b8b5497a778b Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 14 Sep 2018 16:43:46 +0200 Subject: [PATCH] Added a config option to configure the autocrafting calculation timeout in milliseconds. Fixes #1964 --- CHANGELOG.md | 1 + .../java/com/raoulvdberge/refinedstorage/RSConfig.java | 10 ++++++++++ .../apiimpl/autocrafting/task/CraftingTask.java | 5 ++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb3a4b679..33b57da11 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### 1.6.6 - Added new Crafter modes: ignore redstone signal, redstone signal unlocks autocrafting, redstone signal locks autocrafting and redstone pulse inserts next set (replacement for blocking mode) (raoulvdberge) +- Added a config option to configure the autocrafting calculation timeout in milliseconds (raoulvdberge) - Fixed an autocrafting bug where it crashed when external inventories couldn't be filled (raoulvdberge) - Fixed a duplication bug with a disconnected Crafting Grid (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java index 03965fdb3..a118e9d10 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java @@ -119,6 +119,10 @@ public class RSConfig { public boolean hideCovers; //endregion + //region Autocrafting + public int calculationTimeoutMs; + //endregion + //region Categories private static final String ENERGY = "energy"; private static final String CONTROLLER = "controller"; @@ -131,6 +135,7 @@ public class RSConfig { private static final String UPGRADES = "upgrades"; private static final String READER_WRITER = "readerWriter"; private static final String COVERS = "covers"; + private static final String AUTOCRAFTING = "autocrafting"; //endregion public RSConfig(@Nullable RSConfig originalClientVersion, File configFile) { @@ -266,6 +271,10 @@ public class RSConfig { hideCovers = config.getBoolean("hideCovers", COVERS, false, "Whether to hide covers in the creative mode tabs and JEI"); //endregion + //region Autocrafting + calculationTimeoutMs = config.getInt("calculationTimeoutMs", AUTOCRAFTING, 5000, 5000, Integer.MAX_VALUE, "The autocrafting calculation timeout in milliseconds, tasks taking longer than this to calculate (NOT execute) are cancelled to avoid server strain"); + //endregion + if (config.hasChanged()) { config.save(); } @@ -286,6 +295,7 @@ public class RSConfig { list.add(new ConfigElement(config.getCategory(PORTABLE_GRID))); list.add(new ConfigElement(config.getCategory(READER_WRITER))); list.add(new ConfigElement(config.getCategory(COVERS))); + list.add(new ConfigElement(config.getCategory(AUTOCRAFTING))); return list; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java index 434ac91fb..63eb7b875 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java @@ -1,5 +1,6 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.*; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementList; @@ -57,8 +58,6 @@ public class CraftingTask implements ICraftingTask { private static final String NBT_PATTERN_STACK = "Stack"; private static final String NBT_PATTERN_CONTAINER_POS = "ContainerPos"; - private static final long CALCULATION_TIMEOUT_MS = 5000; - private static final Logger LOGGER = LogManager.getLogger(); private INetwork network; @@ -283,7 +282,7 @@ public class CraftingTask implements ICraftingTask { ICraftingPattern pattern, boolean root) { - if (System.currentTimeMillis() - calculationStarted > CALCULATION_TIMEOUT_MS) { + if (System.currentTimeMillis() - calculationStarted > RS.INSTANCE.config.calculationTimeoutMs) { return new CraftingTaskError(CraftingTaskErrorType.TOO_COMPLEX); }