├── .vscode └── settings.json ├── docs └── _static │ ├── logging.png │ └── server_up.png ├── .settings ├── org.eclipse.jdt.apt.core.prefs ├── org.eclipse.m2e.core.prefs ├── org.eclipse.core.resources.prefs └── org.eclipse.jdt.core.prefs ├── download └── latest │ ├── mineos-bedrock-wrapper-1.0-SNAPSHOT.jar.md5sum │ └── mineos-bedrock-wrapper-1.0-SNAPSHOT.jar ├── retired ├── mineos-node_patch │ ├── README.md │ ├── minecraftbedrockwrapper.js │ ├── profiles.js.patch │ └── profiles.d.patch └── README.md ├── src ├── test │ └── java │ │ └── uk │ │ └── org │ │ └── tucks │ │ └── minecraft │ │ └── wrappers │ │ └── mineos-bedrock-wrapper │ │ └── AppTest.java └── main │ └── java │ └── uk │ └── org │ └── tucks │ └── minecraft │ └── wrappers │ └── mineos-bedrock-wrapper │ └── App.java ├── .project ├── .gitignore ├── README.md ├── .classpath └── pom.xml /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "java.configuration.updateBuildConfiguration": "automatic" 3 | } -------------------------------------------------------------------------------- /docs/_static/logging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tucks/mineos-bedrock-wrapper/HEAD/docs/_static/logging.png -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.apt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.apt.aptEnabled=false 3 | -------------------------------------------------------------------------------- /docs/_static/server_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tucks/mineos-bedrock-wrapper/HEAD/docs/_static/server_up.png -------------------------------------------------------------------------------- /.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /download/latest/mineos-bedrock-wrapper-1.0-SNAPSHOT.jar.md5sum: -------------------------------------------------------------------------------- 1 | c8ab291994e24e821c6b41e8b3d80d1d mineos-bedrock-wrapper-1.0-SNAPSHOT.jar 2 | -------------------------------------------------------------------------------- /.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding//src/main/java=UTF-8 3 | encoding//src/test/java=UTF-8 4 | encoding/=UTF-8 5 | -------------------------------------------------------------------------------- /download/latest/mineos-bedrock-wrapper-1.0-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tucks/mineos-bedrock-wrapper/HEAD/download/latest/mineos-bedrock-wrapper-1.0-SNAPSHOT.jar -------------------------------------------------------------------------------- /retired/mineos-node_patch/README.md: -------------------------------------------------------------------------------- 1 | # mineos-node Patch 2 | 3 | Several methods exist to add the extra profile. 4 | 5 | 1. minecraftbedrockwrapper.js - place this in mineos-node/profiles.d prior to compilation 6 | 7 | 2. profiles.d.patch - a patch file version of 1 if preferred 8 | 9 | 3. profiles.js.patch - a patch for a compiled mineos-node against /usr/games/minecraft/profiles.js. Patch and restart the mineos service. 10 | 11 | -------------------------------------------------------------------------------- /src/test/java/uk/org/tucks/minecraft/wrappers/mineos-bedrock-wrapper/AppTest.java: -------------------------------------------------------------------------------- 1 | package uk.org.tucks.minecraft.wrappers.mineosbedrockwrapper; 2 | 3 | import org.junit.Test; 4 | import static org.junit.Assert.*; 5 | 6 | /** 7 | * Unit test for simple App. 8 | */ 9 | public class AppTest 10 | { 11 | /** 12 | * Rigourous Test :-) 13 | */ 14 | @Test 15 | public void testApp() 16 | { 17 | assertTrue( true ); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 3 | org.eclipse.jdt.core.compiler.compliance=1.8 4 | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled 5 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 6 | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore 7 | org.eclipse.jdt.core.compiler.processAnnotations=disabled 8 | org.eclipse.jdt.core.compiler.release=disabled 9 | org.eclipse.jdt.core.compiler.source=1.8 10 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | mineos-bedrock 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | 25 | 1627583910333 26 | 27 | 30 28 | 29 | org.eclipse.core.resources.regexFilterMatcher 30 | node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.nar 17 | *.ear 18 | *.zip 19 | *.tar.gz 20 | *.rar 21 | 22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 23 | hs_err_pid* 24 | 25 | ### Maven ### 26 | target/ 27 | pom.xml.tag 28 | pom.xml.releaseBackup 29 | pom.xml.versionsBackup 30 | pom.xml.next 31 | release.properties 32 | dependency-reduced-pom.xml 33 | buildNumber.properties 34 | .mvn/timing.properties 35 | # https://github.com/takari/maven-wrapper#usage-without-binary-jar 36 | .mvn/wrapper/maven-wrapper.jar 37 | 38 | ### vscode ### 39 | .vscode/* 40 | !.vscode/settings.json 41 | !.vscode/tasks.json 42 | !.vscode/launch.json 43 | !.vscode/extensions.json 44 | *.code-workspace 45 | 46 | # End of https://www.toptal.com/developers/gitignore/api/java,maven,vscode 47 | 48 | svr/ 49 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MineOS Bedrock Wrapper 2 | A Java jar wrapper for the official Minecraft Linux Bedrock Server 3 | 4 | https://www.minecraft.net/en-us/download/server/bedrock 5 | 6 | This functionality is now available in MineOS v1.2.1+ 7 | 8 | 9 | Preamble 10 | -------- 11 | My children asked to play Bedrock latest edition with their friends. With Java edition, I host on my MineOS server. 12 | NukkitX is one available Bedrock profile (and looks to be really well supported, you should check it out) but it was behind the official release. 13 | So I thought laterally.. if I wrapped the official release in a jar, it's reasonably compatible with MineOS expectations and supports stop, etc., 14 | and here we are... 15 | 16 | 17 | Usage 18 | ----- 19 | 20 | Upgrade to MineOS v1.2.1+ 21 | 22 | 23 | **Play Bedrock. Enjoy.** 24 | 25 | 26 | Start and Stop Bedrock servers as per usual 27 | 28 | ![Server Status](docs/_static/server_up.png) 29 | 30 | 31 | Full logging output with interactive CLI 32 | 33 | ![Full Interactive Logging](docs/_static/logging.png) 34 | -------------------------------------------------------------------------------- /retired/mineos-node_patch/minecraftbedrockwrapper.js: -------------------------------------------------------------------------------- 1 | // var async = require('async'); 2 | var path = require('path'); 3 | var fs = require('fs-extra'); 4 | var profile = require('./template'); 5 | 6 | exports.profile = { 7 | name: 'MineOS Bedrock Wrapper', 8 | handler: function(profile_dir, callback) { 9 | var p = []; 10 | 11 | try { 12 | var item = {}; 13 | 14 | item['id'] = 'mineos-bedrock-wrapper'; 15 | item['time'] = new Date().getTime(); 16 | item['releaseTime'] = new Date().getTime(); 17 | item['type'] = 'release'; 18 | item['group'] = 'mineosbedrockwrapper'; 19 | item['webui_desc'] = 'MineOS Bedrock Wrapper'; 20 | item['weight'] = 0; 21 | item['filename'] = 'mineos-bedrock-wrapper-1.0-SNAPSHOT.jar'; 22 | item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename)); 23 | item['version'] = 0; 24 | item['release_version'] = ''; 25 | item['url'] = 'https://github.com/tucks/mineos-bedrock-wrapper/raw/master/download/latest/mineos-bedrock-wrapper-1.0-SNAPSHOT.jar'; 26 | 27 | p.push(item); 28 | } catch (e) { } 29 | 30 | callback(null, p); 31 | } //end handler 32 | 33 | } 34 | -------------------------------------------------------------------------------- /retired/mineos-node_patch/profiles.js.patch: -------------------------------------------------------------------------------- 1 | --- profiles.js.orig 2021-07-29 20:32:10.868838241 +0100 2 | +++ profiles.js 2021-07-30 19:07:08.508679292 +0100 3 | @@ -648,4 +648,31 @@ 4 | callback(null, p); 5 | } //end handler 6 | }, 7 | + mineosbedrockwrapper: { 8 | + name: 'MineOS Bedrock Wrapper', 9 | + handler: function(profile_dir, callback) { 10 | + var p = []; 11 | + 12 | + try { 13 | + var item = {}; 14 | + 15 | + item['id'] = 'mineos-bedrock-wrapper'; 16 | + item['time'] = new Date().getTime(); 17 | + item['releaseTime'] = new Date().getTime(); 18 | + item['type'] = 'release'; 19 | + item['group'] = 'mineosbedrockwrapper'; 20 | + item['webui_desc'] = 'MineOS Bedrock Wrapper'; 21 | + item['weight'] = 0; 22 | + item['filename'] = 'mineos-bedrock-wrapper-1.0-SNAPSHOT.jar'; 23 | + item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename)); 24 | + item['version'] = 0; 25 | + item['release_version'] = ''; 26 | + item['url'] = 'https://github.com/tucks/mineos-bedrock-wrapper/raw/master/download/latest/mineos-bedrock-wrapper-1.0-SNAPSHOT.jar'; 27 | + 28 | + p.push(item); 29 | + } catch (e) {} 30 | + 31 | + callback(null, p); 32 | + } //end handler 33 | + }, 34 | }; 35 | -------------------------------------------------------------------------------- /retired/mineos-node_patch/profiles.d.patch: -------------------------------------------------------------------------------- 1 | --- mineos-node/profiles.d/minecraftbedrockwrapper.js 1970-01-01 01:00:00.000000000 +0100 2 | +++ mineos-node.wrapped/profiles.d/minecraftbedrockwrapper.js 2021-07-30 19:22:31.640232776 +0100 3 | @@ -0,0 +1,33 @@ 4 | +// var async = require('async'); 5 | +var path = require('path'); 6 | +var fs = require('fs-extra'); 7 | +var profile = require('./template'); 8 | + 9 | +exports.profile = { 10 | + name: 'MineOS Bedrock Wrapper', 11 | + handler: function(profile_dir, callback) { 12 | + var p = []; 13 | + 14 | + try { 15 | + var item = {}; 16 | + 17 | + item['id'] = 'mineos-bedrock-wrapper'; 18 | + item['time'] = new Date().getTime(); 19 | + item['releaseTime'] = new Date().getTime(); 20 | + item['type'] = 'release'; 21 | + item['group'] = 'mineosbedrockwrapper'; 22 | + item['webui_desc'] = 'MineOS Bedrock Wrapper'; 23 | + item['weight'] = 0; 24 | + item['filename'] = 'mineos-bedrock-wrapper-1.0-SNAPSHOT.jar'; 25 | + item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename)); 26 | + item['version'] = 0; 27 | + item['release_version'] = ''; 28 | + item['url'] = 'https://github.com/tucks/mineos-bedrock-wrapper/raw/master/download/latest/mineos-bedrock-wrapper-1.0-SNAPSHOT.jar'; 29 | + 30 | + p.push(item); 31 | + } catch (e) { } 32 | + 33 | + callback(null, p); 34 | + } //end handler 35 | + 36 | +} 37 | -------------------------------------------------------------------------------- /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /retired/README.md: -------------------------------------------------------------------------------- 1 | # MineOS Bedrock Wrapper 2 | A Java jar wrapper for the official Minecraft Linux Bedrock Server 3 | 4 | https://www.minecraft.net/en-us/download/server/bedrock 5 | 6 | Consult the README in `mineos-node_patch/` to correctly add this functionality to mineos-node whilst not in the official MineOS-node release. 7 | 8 | Preamble 9 | -------- 10 | My children asked to play Bedrock latest edition with their friends. With Java edition, I host on my MineOS server. 11 | NukkitX is one available Bedrock profile (and looks to be really well supported, you should check it out) but it was behind the official release. 12 | So I thought laterally.. if I wrapped the official release in a jar, it's reasonably compatible with MineOS expectations and supports stop, etc., 13 | and here we are... 14 | 15 | 16 | Usage 17 | ----- 18 | 19 | In the MineOS UI 20 | 21 | 1. Download the `Mineosbedrockwrapper` profile 22 | 2. Create a new server (E.G. `bedrock1`) and set the profile to `Mineosbedrockwrapper`. Note: -Xmx and -Xms are ignored. The default is OK. 23 | 3. Set the service to start on boot, edit the `Server.properties`, etc. 24 | 4. Select button Copy profile to live server files 25 | 5. Set the runnable jar to `mineos-bedrock-wrapper-1.0-SNAPSHOT.jar` 26 | 27 | At the CLI 28 | 29 | 6. `cd` to the hosted server directory (E.G. `/var/games/minecraft/servers/bedrock1`) 30 | 7. Download the official Linux Bedrock Server from https://www.minecraft.net/en-us/download/server/bedrock 31 | 8. `unzip` the bedrock server software. The server itself will be at (E.G) `/var/games/minecraft/servers/bedrock1/bedrock_server` 32 | 9. chmod +x the `bedrock_server` software. Ensure all other permissons are appropriate. 33 | 34 | In the MineOS UI 35 | 36 | 10. Start the server 37 | 38 | **Play Bedrock. Enjoy.** 39 | 40 | 41 | Start and Stop Bedrock servers as per usual 42 | 43 | ![Server Status](docs/_static/server_up.png) 44 | 45 | 46 | Full logging output with interactive CLI 47 | 48 | ![Full Interactive Logging](docs/_static/logging.png) 49 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | uk.org.tucks.minecraft.wrappers.mineosbedrockwrapper 6 | mineos-bedrock-wrapper 7 | 1.0-SNAPSHOT 8 | jar 9 | 10 | mineos-bedrock-wrapper 11 | http://maven.apache.org 12 | 13 | 14 | UTF-8 15 | 16 | 17 | 18 | 19 | junit 20 | junit 21 | 4.10 22 | test 23 | 24 | 25 | 26 | 27 | 28 | 29 | org.apache.maven.plugins 30 | maven-compiler-plugin 31 | 32 | 1.8 33 | 1.8 34 | uk.org.tucks.minecraft.wrappers.mineosbedrockwrapper.App 35 | 36 | 37 | 38 | 39 | org.apache.maven.plugins 40 | maven-jar-plugin 41 | 2.4 42 | 43 | 44 | true 45 | 46 | lib/ 47 | true 48 | uk.org.tucks.minecraft.wrappers.mineosbedrockwrapper.App 49 | 50 | 51 | 52 | 53 | 54 | 55 | org.apache.maven.plugins 56 | maven-dependency-plugin 57 | 2.2 58 | 59 | 60 | copy-dependencies 61 | package 62 | 63 | copy-dependencies 64 | 65 | 66 | ${project.build.directory}/lib 67 | true 68 | true 69 | true 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /src/main/java/uk/org/tucks/minecraft/wrappers/mineos-bedrock-wrapper/App.java: -------------------------------------------------------------------------------- 1 | package uk.org.tucks.minecraft.wrappers.mineosbedrockwrapper; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.BufferedWriter; 5 | import java.io.File; 6 | import java.io.InputStreamReader; 7 | import java.io.IOException; 8 | import java.io.OutputStreamWriter; 9 | import java.lang.ProcessBuilder; 10 | import java.util.logging.FileHandler; 11 | import java.util.logging.Logger; 12 | import java.util.logging.SimpleFormatter; 13 | import java.util.Scanner; 14 | 15 | /* 16 | * Main App 17 | * 18 | * Shamelessly lifted the super example from deFreitas (https://stackoverflow.com/users/2979435/defreitas) 19 | * ref: https://stackoverflow.com/questions/13431473/opening-a-shell-and-interacting-with-its-i-o-in-java/35261487#35261487 20 | * 21 | */ 22 | public class App 23 | { 24 | public static void main( String[] args ) throws IOException, InterruptedException 25 | { 26 | // create a logger 27 | System.setProperty("java.util.logging.SimpleFormatter.format", "[%1$tT] %5$s%n"); 28 | Logger logger = Logger.getLogger("mineos-bedrock-wrapper"); 29 | //logger.setUseParentHandlers(false); 30 | 31 | /* 32 | * Setup the wrapper 33 | * 34 | */ 35 | 36 | // check bedrock_server in same ./dir and executable 37 | try { 38 | File bedrockServer = new File("./bedrock_server"); 39 | if (bedrockServer.exists()) { 40 | if (!bedrockServer.canExecute()) { 41 | System.out.println(bedrockServer.getPath() + " is not executable"); 42 | } 43 | } else { 44 | System.out.println("Linux/Ubuntu Bedrock Server is not found at " + bedrockServer.getPath()); 45 | } 46 | 47 | /* make log dir if does not exist */ 48 | File directory = new File("./logs"); 49 | if (! directory.exists()) { 50 | directory.mkdir(); 51 | } 52 | 53 | FileHandler logFile; 54 | logFile = new FileHandler("./logs/latest.log"); 55 | logger.addHandler(logFile); 56 | 57 | SimpleFormatter formatter = new SimpleFormatter(); 58 | logFile.setFormatter(formatter); 59 | 60 | logger.info("mineos-bedrock-wrapper starting Bedrock dedicated server..."); 61 | 62 | } catch (Exception e) { 63 | e.printStackTrace(); 64 | } 65 | 66 | // Create a child process 67 | final Process process = new ProcessBuilder().command("sh", "-c", "LD_LIBRARY_PATH=. ./bedrock_server").start(); 68 | 69 | // stderr from child 70 | new Thread(() -> { 71 | BufferedReader stderr = new BufferedReader(new InputStreamReader(process.getErrorStream())); 72 | String line = null; 73 | try { 74 | while((line = stderr.readLine()) != null){ 75 | // write the console stderr to ./logs/latest.log for mineos to tail 76 | logger.info(line); 77 | } 78 | } catch(IOException e) {} 79 | }).start(); 80 | 81 | // stdout from child 82 | new Thread(() -> { 83 | BufferedReader stdout = new BufferedReader(new InputStreamReader(process.getInputStream())); 84 | String line = null; 85 | try { 86 | while((line = stdout.readLine()) != null){ 87 | // write the console stdout to ./logs/latest.log for mineos to tail 88 | logger.info(line); 89 | } 90 | } catch(IOException e) {} 91 | }).start(); 92 | 93 | // process control 94 | new Thread(() -> { 95 | 96 | int exitCode = 0; 97 | try { 98 | exitCode = process.waitFor(); 99 | } catch(InterruptedException e) { 100 | e.printStackTrace(); 101 | } 102 | System.out.printf("Exited with code %d\n", exitCode); 103 | logger.info("mineos-bedrock-wrapper stopped Bedrock dedicated server..."); 104 | // pass through the bedrock_server exit code 105 | System.exit(exitCode); 106 | }).start(); 107 | 108 | // process 'user' input (stdin to child) 109 | final Scanner scanner = new Scanner(System.in); 110 | final BufferedWriter stdin = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); 111 | final String newLine = System.getProperty("line.separator"); 112 | while(true){ 113 | // pass any commands straight through to bedrock_server 114 | String commandLine = scanner.nextLine(); 115 | stdin.write(commandLine); 116 | stdin.newLine(); 117 | stdin.flush(); 118 | } 119 | } 120 | } 121 | 122 | 123 | /* 124 | 125 | command line args from Java edition 126 | 127 | --bonusChest 128 | If a bonus chest should be generated, when the world is first generated. 129 | --demo 130 | If the server is in demo mode. (Shows the players a demo pop-up, and players cannot break or place blocks or eat if the demo time has expired) 131 | --eraseCache 132 | Erases the lighting caches, etc. Same option as when optimizing single player worlds. 133 | --forceUpgrade 134 | Forces upgrade on all the chunks, such that the data version of all chunks matches the current server version (same as with sp worlds). 135 | --help 136 | Shows this help. 137 | --initSettings 138 | Initializes 'server.properties' and 'eula.txt', then quits. 139 | --nogui 140 | Doesn't open the GUI when launching the server. 141 | --port 142 | Which port to listen on, overrides the server.properties value. (default: -1) 143 | --safeMode 144 | Loads level with vanilla datapack only. 145 | --serverId 146 | Gives an ID to the server. (??) 147 | --singleplayer 148 | Runs the server in offline mode (unknown where is used for, probably used internally by mojang?) 149 | --universe 150 | The folder in which to look for world folders. (default: .) 151 | --world 152 | The name of the world folder in which the level.dat resides. 153 | 154 | */ 155 | 156 | 157 | /* 158 | 159 | kick <player name or xuid> <reason> 160 | Immediately kicks a player. The reason will be shown on the kicked players screen. 161 | 162 | stop 163 | Shuts down the server gracefully. 164 | 165 | save <hold | resume | query> 166 | Used to make atomic backups while the server is running. See the backup section for more information. 167 | 168 | whitelist <on | off | list | reload> 169 | 170 | on and off turns the whitelist on and off. Note that this does not change the value in the server.properties 171 | file! 172 | 173 | list prints the current whitelist used by the server 174 | 175 | reload makes the server reload the whitelist from the file. 176 | 177 | See the Whitelist section for more information. 178 | 179 | whitelist <add | remove> <name> 180 | Adds or removes a player from the whitelist file. The name parameter should be the Xbox Gamertag of the player you want to add or remove. You don't need 181 | to specify a XUID here, it will be resolved the first time the player connects.

See the Whitelist section for more information. 182 | 183 | 184 | permission <list | reload> 185 | 186 |

187 | list prints the current used operator list. 188 |

189 |

190 | reload makes the server reload the operator list from the ops file. 191 |

192 |

193 | See the Permissions section for more information. 194 |

195 | 196 | 197 | 198 | op <player> 199 | 200 |

201 | Promote a player to operator. This will also persist in permissions.json if the player is authenticated to XBL. If p 202 | ermissions.json is missing it will be created. If the player is not connected to XBL, the player is promoted for the current server session and it will not be persis 203 | ted on disk. Defualt server permission level will be assigned to the player after a server restart. 204 |

205 | 206 | 207 | 208 | deop <player> 209 | 210 |

211 | Demote a player to member. This will also persist in permissions.json if the player is authenticated to XBL. If permissions.json is missing it will be created. 212 |

213 | 214 | 215 | 216 | changesetting <setting> <value> 217 | Changes a server setting without having to restart the server. Currently only two settings are supported to be changed, allow-cheats (true or false) and difficulty (0, peaceful, 1, easy, 2, normal, 3 or hard). They do not modify the value that's specified in server.properties. 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 |

Backups

226 | The server supports taking backups of the world files while the server is running. It's not particularly friendly for taking manual backups, but works better when automated. The backup (from the servers perspective) consists of three commands. 227 | 228 | save hold 229 | This will ask the server to prepare for a backup. It’s asynchronous and will return immediately. 230 | 231 | save query 232 | After calling save hold you should call this command repeatedly to see if the preparation has finished. When it returns a success it will return a file list (with lengths for each file) of the files you need to copy. The server will not pause while this is happening, so some files can be modified while the backup is taking place. As long as you only copy the files in the given file list and truncate the copied files to the specified lengths, then the backup should be valid. 233 | 234 | save resume 235 | When you’re finished with copying the files you should call this to tell the server that it’s okay to remove old files again. 236 | 237 | */ --------------------------------------------------------------------------------