From 245bf26480c376990963c1e70e19b45a578552ef Mon Sep 17 00:00:00 2001 From: SquidDev Date: Thu, 21 Mar 2019 13:31:58 +0000 Subject: [PATCH] Expose max computer/global times as config options These do have a direct impact on server performance, so are definitely worthwhile exposing. --- .../dan200/computercraft/ComputerCraft.java | 6 +- .../core/computer/MainThread.java | 26 +---- .../core/computer/MainThreadExecutor.java | 35 +++--- .../dan200/computercraft/shared/Config.java | 109 ++++++++++++++---- .../assets/computercraft/lang/de_de.lang | 5 +- .../assets/computercraft/lang/en_us.lang | 6 +- .../assets/computercraft/lang/it_it.lang | 3 +- .../assets/computercraft/lang/pt_br.lang | 3 +- .../assets/computercraft/lang/sv_se.lang | 3 +- 9 files changed, 124 insertions(+), 72 deletions(-) diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index beedf9b6c..4564d216a 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -96,6 +96,7 @@ import java.net.URL; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; +import java.util.concurrent.TimeUnit; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -134,9 +135,12 @@ public class ComputerCraft public static boolean disable_lua51_features = false; public static String default_computer_settings = ""; public static boolean debug_enable = true; - public static int computer_threads = 1; public static boolean logPeripheralErrors = false; + public static int computer_threads = 1; + public static long maxMainGlobalTime = TimeUnit.MILLISECONDS.toNanos( 10 ); + public static long maxMainComputerTime = TimeUnit.MILLISECONDS.toNanos( 5 ); + public static boolean http_enable = true; public static boolean http_websocket_enable = true; public static AddressPredicate http_whitelist = new AddressPredicate( DEFAULT_HTTP_WHITELIST ); diff --git a/src/main/java/dan200/computercraft/core/computer/MainThread.java b/src/main/java/dan200/computercraft/core/computer/MainThread.java index 7b867d0f1..38ff7ec46 100644 --- a/src/main/java/dan200/computercraft/core/computer/MainThread.java +++ b/src/main/java/dan200/computercraft/core/computer/MainThread.java @@ -6,13 +6,13 @@ package dan200.computercraft.core.computer; +import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.lua.ILuaTask; import javax.annotation.Nonnull; import java.util.ArrayDeque; import java.util.HashSet; import java.util.Queue; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; /** @@ -25,29 +25,11 @@ import java.util.concurrent.atomic.AtomicLong; * {@link MainThread} starts cool, and runs as many tasks as it can in the current {@link #budget}ns. Any external tasks * (those run by tile entities, etc...) will also consume the budget * - * Next tick, we put {@link #MAX_TICK_TIME} into our budget (and clamp it to that value to). If we're still over budget, - * then we should not execute any work (either as part of {@link MainThread} or externally). + * Next tick, we put {@link ComputerCraft#maxMainGlobalTime} into our budget (and clamp it to that value to). If we're + * still over budget, then we should not execute any work (either as part of {@link MainThread} or externally). */ public class MainThread { - /** - * The maximum time that can be spent executing tasks in a single tick. - * - * Note, we will quite possibly go over this limit, as there's no way to tell how long a will take - this aims - * to be the upper bound of the average time. - * - * @see #budget - */ - private static final long MAX_TICK_TIME = TimeUnit.MILLISECONDS.toNanos( 10 ); - - /** - * The ideal maximum time a computer can execute for in a tick. - * - * Note, we will quite possibly go over this limit, as there's no way to tell how long a task will take - this aims - * to be the upper bound of the average time. - */ - static final long MAX_COMPUTER_TIME = TimeUnit.MILLISECONDS.toNanos( 5 ); - /** * An internal counter for {@link ILuaTask} ids. * @@ -133,7 +115,7 @@ public class MainThread // Of course, we'll go over the MAX_TICK_TIME most of the time, but eventually that overrun will accumulate // and we'll skip a whole tick - bringing the average back down again. currentTick++; - budget += Math.min( budget + MAX_TICK_TIME, MAX_TICK_TIME ); + budget += Math.min( budget + ComputerCraft.maxMainGlobalTime, ComputerCraft.maxMainGlobalTime ); canExecute = budget > 0; // Cool down any warm computers. diff --git a/src/main/java/dan200/computercraft/core/computer/MainThreadExecutor.java b/src/main/java/dan200/computercraft/core/computer/MainThreadExecutor.java index 39c9ac91f..7c1da37d3 100644 --- a/src/main/java/dan200/computercraft/core/computer/MainThreadExecutor.java +++ b/src/main/java/dan200/computercraft/core/computer/MainThreadExecutor.java @@ -6,6 +6,7 @@ package dan200.computercraft.core.computer; +import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.peripheral.IWorkMonitor; import dan200.computercraft.core.tracking.Tracking; import dan200.computercraft.shared.turtle.core.TurtleBrain; @@ -16,8 +17,6 @@ import java.util.ArrayDeque; import java.util.Queue; import java.util.concurrent.TimeUnit; -import static dan200.computercraft.core.computer.MainThread.MAX_COMPUTER_TIME; - /** * Keeps track of tasks that a {@link Computer} should run on the main thread and how long that has been spent executing * them. @@ -26,30 +25,30 @@ import static dan200.computercraft.core.computer.MainThread.MAX_COMPUTER_TIME; * those run elsewhere (such as during the turtle's tick - see {@link TurtleBrain#update()}). In order to handle this, * the executor goes through three stages: * - * When {@link State#COOL}, the computer is allocated {@link MainThread#MAX_COMPUTER_TIME}ns to execute any work this - * tick. At the beginning of the tick, we execute as many {@link MainThread} tasks as possible, until our timeframe or - * the global time frame has expired. + * When {@link State#COOL}, the computer is allocated {@link ComputerCraft#maxMainComputerTime}ns to execute any work + * this tick. At the beginning of the tick, we execute as many {@link MainThread} tasks as possible, until our timeframe + * or the global time frame has expired. * * Then, when other objects (such as {@link TileEntity}) are ticked, we update how much time we've used using - * {@link Computer#afterExecuteMainThread(long)}. + * {@link IWorkMonitor#trackWork(long, TimeUnit)}. * * Now, if anywhere during this period, we use more than our allocated time slice, the executor is marked as * {@link State#HOT}. This means it will no longer be able to execute {@link MainThread} tasks (though will still * execute tile entity tasks, in order to prevent the main thread from exhausting work every tick). * - * At the beginning of the next tick, we increment the budget e by {@link MainThread#MAX_COMPUTER_TIME} and any + * At the beginning of the next tick, we increment the budget e by {@link ComputerCraft#maxMainComputerTime} and any * {@link State#HOT} executors are marked as {@link State#COOLING}. They will remain cooling until their budget is - * fully replenished (is equal to {@link MainThread#MAX_COMPUTER_TIME}). Note, this is different to {@link MainThread}, - * which allows running when it has any budget left. When cooling, no tasks are executed - be they on the tile - * entity or main thread. + * fully replenished (is equal to {@link ComputerCraft#maxMainComputerTime}). Note, this is different to + * {@link MainThread}, which allows running when it has any budget left. When cooling, no tasks are executed - + * be they on the tile entity or main thread. * - * This mechanism means that, on average, computers will use at most {@link MainThread#MAX_COMPUTER_TIME}ns per second, - * but one task source will not prevent others from executing. + * This mechanism means that, on average, computers will use at most {@link ComputerCraft#maxMainComputerTime}ns per + * second, but one task source will not prevent others from executing. * * @see MainThread - * @see Computer#canExecuteMainThread() + * @see IWorkMonitor + * @see Computer#getMainThreadMonitor() * @see Computer#queueMainThread(Runnable) - * @see Computer#afterExecuteMainThread(long) */ final class MainThreadExecutor implements IWorkMonitor { @@ -186,7 +185,7 @@ final class MainThreadExecutor implements IWorkMonitor if( currentTick != MainThread.currentTick() ) { currentTick = MainThread.currentTick(); - budget = MAX_COMPUTER_TIME; + budget = ComputerCraft.maxMainComputerTime; } budget -= time; @@ -200,7 +199,7 @@ final class MainThreadExecutor implements IWorkMonitor } /** - * Move this executor forward one tick, replenishing the budget by {@link MainThread#MAX_COMPUTER_TIME}. + * Move this executor forward one tick, replenishing the budget by {@link ComputerCraft#maxMainComputerTime}. * * @return Whether this executor has cooled down, and so is safe to run again. */ @@ -208,8 +207,8 @@ final class MainThreadExecutor implements IWorkMonitor { state = State.COOLING; currentTick = MainThread.currentTick(); - budget += Math.min( budget + MAX_COMPUTER_TIME, MAX_COMPUTER_TIME ); - if( budget < MAX_COMPUTER_TIME ) return false; + budget += Math.min( budget + ComputerCraft.maxMainComputerTime, ComputerCraft.maxMainComputerTime ); + if( budget < ComputerCraft.maxMainComputerTime ) return false; state = State.COOL; synchronized( queueLock ) diff --git a/src/main/java/dan200/computercraft/shared/Config.java b/src/main/java/dan200/computercraft/shared/Config.java index 061795a3d..5cd97c308 100644 --- a/src/main/java/dan200/computercraft/shared/Config.java +++ b/src/main/java/dan200/computercraft/shared/Config.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; import static dan200.computercraft.ComputerCraft.DEFAULT_HTTP_BLACKLIST; import static dan200.computercraft.ComputerCraft.DEFAULT_HTTP_WHITELIST; @@ -32,6 +33,7 @@ public class Config private static final int MODEM_MAX_RANGE = 100000; private static final String CATEGORY_GENERAL = "general"; + private static final String CATEGORY_EXECUTION = "execution"; private static final String CATEGORY_HTTP = "http"; private static final String CATEGORY_PERIPHERAL = "peripheral"; private static final String CATEGORY_TURTLE = "turtle"; @@ -44,9 +46,12 @@ public class Config private static Property disableLua51Features; private static Property defaultComputerSettings; private static Property debugEnabled; - private static Property computerThreads; private static Property logComputerErrors; + private static Property computerThreads; + private static Property maxMainGlobalTime; + private static Property maxMainComputerTime; + private static Property httpEnable; private static Property httpWebsocketEnable; private static Property httpWhitelist; @@ -97,21 +102,16 @@ public class Config maximumFilesOpen.setMinValue( 0 ); disableLua51Features = config.get( CATEGORY_GENERAL, "disable_lua51_features", ComputerCraft.disable_lua51_features ); - disableLua51Features.setComment( "Set this to true to disable Lua 5.1 functions that will be removed in a future update. Useful for ensuring forward compatibility of your programs now." ); + disableLua51Features.setComment( "Set this to true to disable Lua 5.1 functions that will be removed in a future " + + "update. Useful for ensuring forward compatibility of your programs now." ); defaultComputerSettings = config.get( CATEGORY_GENERAL, "default_computer_settings", ComputerCraft.default_computer_settings ); - defaultComputerSettings.setComment( "A comma seperated list of default system settings to set on new computers. Example: \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\" will disable all autocompletion" ); + defaultComputerSettings.setComment( "A comma seperated list of default system settings to set on new computers. Example: " + + "\"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\" will disable all autocompletion" ); debugEnabled = config.get( CATEGORY_GENERAL, "debug_enabled", ComputerCraft.debug_enable ); debugEnabled.setComment( "Enable Lua's debug library. This is sandboxed to each computer, so is generally safe to be used by players." ); - computerThreads = config.get( CATEGORY_GENERAL, "computer_threads", ComputerCraft.computer_threads ); - computerThreads - .setMinValue( 1 ) - .setRequiresMcRestart( true ) - .setComment( "Set the number of threads computers can run on. A higher number means more computers can run at once, but may induce lag.\n" + - "Please note that some mods may not work with a thread count higher than 1. Use with caution." ); - logComputerErrors = config.get( CATEGORY_GENERAL, "log_computer_errors", ComputerCraft.logPeripheralErrors ); logComputerErrors.setComment( "Log exceptions thrown by peripherals and other Lua objects.\n" + "This makes it easier for mod authors to debug problems, but may result in log spam should people use buggy methods." ); @@ -119,7 +119,42 @@ public class Config setOrder( CATEGORY_GENERAL, computerSpaceLimit, floppySpaceLimit, maximumFilesOpen, - disableLua51Features, defaultComputerSettings, debugEnabled, computerThreads, logComputerErrors + disableLua51Features, defaultComputerSettings, debugEnabled, logComputerErrors + ); + } + + { // Execution + renameProperty( CATEGORY_GENERAL, "computer_threads", CATEGORY_EXECUTION, "computer_threads" ); + + config.getCategory( CATEGORY_EXECUTION ) + .setComment( "Controls execution behaviour of computers. This is largely intended for fine-tuning " + + "servers, and generally shouldn't need to be touched" ); + + computerThreads = config.get( CATEGORY_EXECUTION, "computer_threads", ComputerCraft.computer_threads ); + computerThreads + .setMinValue( 1 ) + .setRequiresMcRestart( true ) + .setComment( "Set the number of threads computers can run on. A higher number means more computers can " + + "run at once, but may induce lag.\n" + + "Please note that some mods may not work with a thread count higher than 1. Use with caution." ); + + maxMainGlobalTime = config.get( CATEGORY_EXECUTION, "max_main_global_time", (int) TimeUnit.NANOSECONDS.toMillis( ComputerCraft.maxMainGlobalTime ) ); + maxMainGlobalTime + .setMinValue( 1 ) + .setComment( "The maximum time that can be spent executing tasks in a single tick, in milliseconds.\n" + + "Note, we will quite possibly go over this limit, as there's no way to tell how long a will take - this aims " + + "to be the upper bound of the average time." ); + + maxMainComputerTime = config.get( CATEGORY_EXECUTION, "max_main_computer_time", (int) TimeUnit.NANOSECONDS.toMillis( ComputerCraft.maxMainComputerTime ) ); + maxMainComputerTime + .setMinValue( 1 ) + .setComment( "The ideal maximum time a computer can execute for in a tick, in milliseconds.\n" + + "Note, we will quite possibly go over this limit, as there's no way to tell how long a will take - this aims " + + "to be the upper bound of the average time." ); + + setOrder( + CATEGORY_EXECUTION, + computerThreads, maxMainGlobalTime, maxMainComputerTime ); } @@ -129,20 +164,28 @@ public class Config renameProperty( CATEGORY_GENERAL, "http_whitelist", CATEGORY_HTTP, "whitelist" ); renameProperty( CATEGORY_GENERAL, "http_blacklist", CATEGORY_HTTP, "blacklist" ); + config.getCategory( CATEGORY_HTTP ) + .setComment( "Controls the HTTP API" ); + httpEnable = config.get( CATEGORY_HTTP, "enabled", ComputerCraft.http_enable ); - httpEnable.setComment( "Enable the \"http\" API on Computers (see \"http_whitelist\" and \"http_blacklist\" for more fine grained control than this)" ); + httpEnable.setComment( "Enable the \"http\" API on Computers (see \"http_whitelist\" and \"http_blacklist\" for " + + "more fine grained control than this)" ); httpWebsocketEnable = config.get( CATEGORY_HTTP, "websocket_enabled", ComputerCraft.http_websocket_enable ); httpWebsocketEnable.setComment( "Enable use of http websockets. This requires the \"http_enable\" option to also be true." ); httpWhitelist = config.get( CATEGORY_HTTP, "whitelist", DEFAULT_HTTP_WHITELIST ); - httpWhitelist.setComment( "A list of wildcards for domains or IP ranges that can be accessed through the \"http\" API on Computers.\n" + - "Set this to \"*\" to access to the entire internet. Example: \"*.pastebin.com\" will restrict access to just subdomains of pastebin.com.\n" + + httpWhitelist.setComment( "A list of wildcards for domains or IP ranges that can be accessed through the " + + "\"http\" API on Computers.\n" + + "Set this to \"*\" to access to the entire internet. Example: \"*.pastebin.com\" will restrict access to " + + "just subdomains of pastebin.com.\n" + "You can use domain names (\"pastebin.com\"), wilcards (\"*.pastebin.com\") or CIDR notation (\"127.0.0.0/8\")." ); httpBlacklist = config.get( CATEGORY_HTTP, "blacklist", DEFAULT_HTTP_BLACKLIST ); - httpBlacklist.setComment( "A list of wildcards for domains or IP ranges that cannot be accessed through the \"http\" API on Computers.\n" + - "If this is empty then all whitelisted domains will be accessible. Example: \"*.github.com\" will block access to all subdomains of github.com.\n" + + httpBlacklist.setComment( "A list of wildcards for domains or IP ranges that cannot be accessed through the " + + "\"http\" API on Computers.\n" + + "If this is empty then all whitelisted domains will be accessible. Example: \"*.github.com\" will block " + + "access to all subdomains of github.com.\n" + "You can use domain names (\"pastebin.com\"), wilcards (\"*.pastebin.com\") or CIDR notation (\"127.0.0.0/8\")." ); httpTimeout = config.get( CATEGORY_HTTP, "timeout", ComputerCraft.httpTimeout ); @@ -150,15 +193,18 @@ public class Config httpTimeout.setMinValue( 0 ); httpMaxRequests = config.get( CATEGORY_HTTP, "max_requests", ComputerCraft.httpMaxRequests ); - httpMaxRequests.setComment( "The number of http requests a computer can make at one time. Additional requests will be queued, and sent when the running requests have finished. Set to 0 for unlimited." ); + httpMaxRequests.setComment( "The number of http requests a computer can make at one time. Additional requests " + + "will be queued, and sent when the running requests have finished. Set to 0 for unlimited." ); httpMaxRequests.setMinValue( 0 ); httpMaxDownload = config.get( CATEGORY_HTTP, "max_download", (int) ComputerCraft.httpMaxDownload ); - httpMaxDownload.setComment( "The maximum size (in bytes) that a computer can download in a single request. Note that responses may receive more data than allowed, but this data will not be returned to the client." ); + httpMaxDownload.setComment( "The maximum size (in bytes) that a computer can download in a single request. " + + "Note that responses may receive more data than allowed, but this data will not be returned to the client." ); httpMaxDownload.setMinValue( 0 ); httpMaxUpload = config.get( CATEGORY_HTTP, "max_upload", (int) ComputerCraft.httpMaxUpload ); - httpMaxUpload.setComment( "The maximum size (in bytes) that a computer can upload in a single request. This includes headers and POST text." ); + httpMaxUpload.setComment( "The maximum size (in bytes) that a computer can upload in a single request. This " + + "includes headers and POST text." ); httpMaxUpload.setMinValue( 0 ); httpMaxWebsockets = config.get( CATEGORY_HTTP, "max_websockets", ComputerCraft.httpMaxWebsockets ); @@ -185,6 +231,9 @@ public class Config renameProperty( CATEGORY_GENERAL, "modem_highAltitudeRangeDuringStorm", CATEGORY_PERIPHERAL, "modem_high_altitude_range_during_storm" ); renameProperty( CATEGORY_GENERAL, "maxNotesPerTick", CATEGORY_PERIPHERAL, "max_notes_per_tick" ); + config.getCategory( CATEGORY_PERIPHERAL ) + .setComment( "Various options relating to peripherals." ); + commandBlockEnabled = config.get( CATEGORY_PERIPHERAL, "command_block_enabled", ComputerCraft.enableCommandBlock ); commandBlockEnabled.setComment( "Enable Command Block peripheral support" ); @@ -226,6 +275,9 @@ public class Config renameProperty( CATEGORY_GENERAL, "turtlesCanPush", CATEGORY_TURTLE, "can_push" ); renameProperty( CATEGORY_GENERAL, "turtle_disabled_actions", CATEGORY_TURTLE, "disabled_actions" ); + config.getCategory( CATEGORY_HTTP ) + .setComment( "Various options relating to turtles." ); + turtlesNeedFuel = config.get( CATEGORY_TURTLE, "need_fuel", ComputerCraft.turtlesNeedFuel ); turtlesNeedFuel.setComment( "Set whether Turtles require fuel to move" ); @@ -238,10 +290,12 @@ public class Config advancedTurtleFuelLimit.setMinValue( 0 ); turtlesObeyBlockProtection = config.get( CATEGORY_TURTLE, "obey_block_protection", ComputerCraft.turtlesObeyBlockProtection ); - turtlesObeyBlockProtection.setComment( "If set to true, Turtles will be unable to build, dig, or enter protected areas (such as near the server spawn point)" ); + turtlesObeyBlockProtection.setComment( "If set to true, Turtles will be unable to build, dig, or enter protected " + + "areas (such as near the server spawn point)" ); turtlesCanPush = config.get( CATEGORY_TURTLE, "can_push", ComputerCraft.turtlesCanPush ); - turtlesCanPush.setComment( "If set to true, Turtles will push entities out of the way instead of stopping if there is space to do so" ); + turtlesCanPush.setComment( "If set to true, Turtles will push entities out of the way instead of stopping if " + + "there is space to do so" ); turtleDisabledActions = config.get( CATEGORY_TURTLE, "disabled_actions", new String[0] ); turtleDisabledActions.setComment( "A list of turtle actions which are disabled." ); @@ -252,11 +306,12 @@ public class Config ); } - setupLanguage( config.getCategory( CATEGORY_GENERAL ), "gui.computercraft:config" ); for( String child : config.getCategoryNames() ) { - if( child.equals( CATEGORY_GENERAL ) ) continue; - setupLanguage( config.getCategory( child ), "gui.computercraft:config." + child ); + setupLanguage( + config.getCategory( child ), + child.equals( CATEGORY_GENERAL ) ? "gui.computercraft:config" : "gui.computercraft:config." + child + ); } sync(); @@ -374,9 +429,13 @@ public class Config ComputerCraft.disable_lua51_features = disableLua51Features.getBoolean(); ComputerCraft.default_computer_settings = defaultComputerSettings.getString(); ComputerCraft.debug_enable = debugEnabled.getBoolean(); - ComputerCraft.computer_threads = computerThreads.getInt(); ComputerCraft.logPeripheralErrors = logComputerErrors.getBoolean(); + // Execution + ComputerCraft.computer_threads = computerThreads.getInt(); + ComputerCraft.maxMainGlobalTime = TimeUnit.MILLISECONDS.toNanos( Math.max( 1, maxMainGlobalTime.getLong() ) ); + ComputerCraft.maxMainComputerTime = TimeUnit.MILLISECONDS.toNanos( Math.max( 1, maxMainComputerTime.getLong() ) ); + // HTTP ComputerCraft.http_enable = httpEnable.getBoolean(); ComputerCraft.http_websocket_enable = httpWebsocketEnable.getBoolean(); diff --git a/src/main/resources/assets/computercraft/lang/de_de.lang b/src/main/resources/assets/computercraft/lang/de_de.lang index 465867881..6e01501d2 100644 --- a/src/main/resources/assets/computercraft/lang/de_de.lang +++ b/src/main/resources/assets/computercraft/lang/de_de.lang @@ -58,7 +58,7 @@ commands.computercraft.dump.usage=[ID] commands.computercraft.dump.action=Zeigt mehr Informationen über einen Computer commands.computercraft.shutdown.synopsis=Fährt den Computer aus der Ferne herunter. -commands.computercraft.shutdown.desc=Fährt die angegebenen Computer herunter. Falls keine Computer angegeben sind, werden alle heruntergefahren. Der Computer kann entweder über seine Instanz ID (z.B. 123), seine Computer ID (z.B. #123) oder seinen Namen (z.B. "@Mein Computer") angegeben werden. +commands.computercraft.shutdown.desc=Fährt die angegebenen Computer herunter. Falls keine Computer angegeben sind, werden alle heruntergefahren. Der Computer kann entweder über seine Instanz ID (z.B. 123), seine Computer ID (z.B. #123) oder seinen Namen (z.B. "@Mein Computer") angegeben werden. commands.computercraft.shutdown.usage=[IDs...] commands.computercraft.shutdown.done=Fährt die Computer %s/%s herunter @@ -156,9 +156,10 @@ gui.computercraft:config.maximum_open_files=Maximalanzahl an gleichzeitig offene gui.computercraft:config.disable_lua51_features=Lua 5.1-Funktionen deaktivieren gui.computercraft:config.default_computer_settings=Computer-Standardeinstellungen gui.computercraft:config.debug_enabled=Debug-Library aktivieren -gui.computercraft:config.computer_threads=Computer Threads gui.computercraft:config.log_computer_errors=Computerfehler loggen +gui.computercraft:config.execution.computer_threads=Computer Threads + gui.computercraft:config.http=HTTP gui.computercraft:config.http.enabled=HTTP-API aktivieren gui.computercraft:config.http.websocket_enabled=Websockets aktivieren diff --git a/src/main/resources/assets/computercraft/lang/en_us.lang b/src/main/resources/assets/computercraft/lang/en_us.lang index 448cdb1fc..9db863d1e 100644 --- a/src/main/resources/assets/computercraft/lang/en_us.lang +++ b/src/main/resources/assets/computercraft/lang/en_us.lang @@ -156,9 +156,13 @@ gui.computercraft:config.maximum_open_files=Maximum files open per computer gui.computercraft:config.disable_lua51_features=Disable Lua 5.1 features gui.computercraft:config.default_computer_settings=Default Computer settings gui.computercraft:config.debug_enabled=Enable debug library -gui.computercraft:config.computer_threads=Computer threads gui.computercraft:config.log_computer_errors=Log computer errors +gui.computercraft:config.execution=Execution +gui.computercraft:config.execution.computer_threads=Computer threads +gui.computercraft:config.execution.max_main_global_time=Server tick global time limit +gui.computercraft:config.execution.max_main_computer_time=Server tick computer time limit + gui.computercraft:config.http=HTTP gui.computercraft:config.http.enabled=Enable the HTTP API gui.computercraft:config.http.websocket_enabled=Enable websockets diff --git a/src/main/resources/assets/computercraft/lang/it_it.lang b/src/main/resources/assets/computercraft/lang/it_it.lang index 4fbf9f1d1..6be7df879 100644 --- a/src/main/resources/assets/computercraft/lang/it_it.lang +++ b/src/main/resources/assets/computercraft/lang/it_it.lang @@ -56,9 +56,10 @@ gui.computercraft:config.maximum_open_files=Massimo file aperti per computer gui.computercraft:config.disable_lua51_features=Disattiva features Lua 5.1 gui.computercraft:config.default_computer_settings=Impostazioni Computer predefinite gui.computercraft:config.debug_enabled=Attiva libreria di debug -gui.computercraft:config.computer_threads=Threads computer gui.computercraft:config.log_computer_errors=Salva errori computer +gui.computercraft:config.execution.computer_threads=Threads computer + gui.computercraft:config.http=HTTP gui.computercraft:config.http.enabled=Attiva l'API HTTP gui.computercraft:config.http.websocket_enabled=Attiva websocket diff --git a/src/main/resources/assets/computercraft/lang/pt_br.lang b/src/main/resources/assets/computercraft/lang/pt_br.lang index bbc32cfe8..d9706ffa5 100644 --- a/src/main/resources/assets/computercraft/lang/pt_br.lang +++ b/src/main/resources/assets/computercraft/lang/pt_br.lang @@ -56,9 +56,10 @@ gui.computercraft:config.maximum_open_files=Número máximo de arquivos em um co gui.computercraft:config.disable_lua51_features=Desabilitar funcionalidade da Lua 5.1 gui.computercraft:config.default_computer_settings=Configurações padrão para Computadores gui.computercraft:config.debug_enabled=Habilitar biblioteca de debug -gui.computercraft:config.computer_threads=Threads por computador gui.computercraft:config.log_computer_errors=Registrar erros de computadores +gui.computercraft:config.execution.computer_threads=Threads por computador + gui.computercraft:config.http=HTTP gui.computercraft:config.http.enabled=Habilitar a biblioteca de HTTP gui.computercraft:config.http.websocket_enabled=Habilitar websockets diff --git a/src/main/resources/assets/computercraft/lang/sv_se.lang b/src/main/resources/assets/computercraft/lang/sv_se.lang index 5a1f8b853..ad4dc0ceb 100644 --- a/src/main/resources/assets/computercraft/lang/sv_se.lang +++ b/src/main/resources/assets/computercraft/lang/sv_se.lang @@ -56,9 +56,10 @@ gui.computercraft:config.maximum_open_files=Max antal filer öppna per dator gui.computercraft:config.disable_lua51_features=Avaktivera Lua 5.1 funktioner gui.computercraft:config.default_computer_settings=Standard Datorinställningar gui.computercraft:config.debug_enabled=Aktivera debug bibliotek -gui.computercraft:config.computer_threads=Dator trådar gui.computercraft:config.log_computer_errors=Logga datorfel +gui.computercraft:config.execution.computer_threads=Dator trådar + gui.computercraft:config.http=HTTP gui.computercraft:config.http.enabled=Aktivera HTTP API gui.computercraft:config.http.websocket_enabled=Aktivera websockets