Updated on 23 April 2024, Commit: 5559187
This is the Cuberite User's Manual. It is intended as a guide on how to operate the basics of Cuberite, as well as an introduction to some advanced features. It is organised into major sections as well as more detailed subsections and these are laid out in the Table of Contents. The first section deals with downloading, installing, and running Cuberite. The second section is an overview of configuring Cuberite. Reading those two sections is enough to get you started. The remaining sections cover more advanced features and further configuration options in greater depth.
As with Cuberite itself, this manual is in active development, and you can contribute yourself or file an issue if you find an error or ommission on the GitHub Repository. If you're using a printed version, note that the latest version of this manual is always available online.
Cuberite is a Free and Open Source (FOSS) game server compatible with Minecraft Java Edition. Cuberite is designed with performance, configurability, and extensibility in mind, and aims to accurately recreate most vanilla features. The server is written in C++, and there is an extensive plugin system that allows for the user to write their own plugins with Lua. In fact, many of the built in commands are implemented by the Core plugin, which has its own GitHub repository and developer community. For more information on the plugin system and how to use it, as well as how to develop for it, please see Plugins.
Today, Cuberite lives on thanks to its contributors and plugin developers. If you want to reward the developers for their work, you should set up a donation on Liberapay.
Cuberite was created in late 2010 by FakeTruth with its original name "MCServer", as a replacement for the vanilla server, designed to be better performing and more configurable. It was later open-sourced, and other developers started contributing.
In the summer of 2013, the main MCServer repository was moved from Google Code to GitHub, and a new build system was introduced. Several new developers also joined the project around that time, and the project began to increase in members and popularity.
As of late 2014, MCServer had a team of more than 10 regular developers, and the codebase had grown to over 125,000 lines (excluding comments, blank lines and external libraries). Many new features were also introduced in 2014:
In 2015, many new developers joined the project, and the community decided to adopt the current name of Cuberite. As of late 2015, Cuberite has over 1000 stars on GitHub.
2020 marks the 10th anniversary of Cuberite. As a longstanding project, Cuberite's lifecycle has seen several ups and downs. Despite periods of hibernation and developers with busy lives, Cuberite's development still continues thanks to new and old contributors.
For Windows, Linux, Raspberry Pi or Mac builds, the main download location is the official homepage, with the latest builds available. For developers who want more control over the builds they download, visit the buildserver.
On Linux, macOS, FreeBSD or Raspberry Pi, you can simply paste this command into your terminal to install Cuberite:
Once you have downloaded Cuberite, you can skip straight to Running Cuberite.
Pre-compiled builds are faster to install and easier to use than compiling the source yourself, and are recommended for beginners. However, for some unusual hardware for which no pre-compiled build exists it may be necessary to compile the code yourself. Compiling yourself also has a significant performance advantage on modern machines. If you know how to use the command line or want extra speed you should compile Cuberite yourself.
Compiling yourself takes longer and is more involved, but on modern processors can lead to a speed increase of up to 1.5 to 3x. If your operating system or hardware is not officially supported, compiling may be the only way to run Cuberite.
The automatic compilation script is recommended for *nix users. The automatic compilation script takes care of the compilation process for you. You only need to copy this command to your terminal:
If you prefer to manually compile, or want to compile for Windows, please see COMPILING.md in the main repository.
Once you have a compiled copy of Cuberite, with the supporting files (in most cases these are distributed with the executable, in a directory called Server), you can run the server and generate yourself a world. It's easy to run the server, although the method varies depending on the operating system you are using.
To run Cuberite on Windows, just double click on the executable. A command window will come up, and the world will generate.
To run Cuberite on Linux, Mac or FreeBSD, just run the executable in your shell:
./Cuberite
Just like Vanilla, once you've started Cuberite, you can join the server on localhost:25565
, or just localhost
in your Minecraft client.
Cuberite can be configured by editing various files. Below is a list of all such files:
http://localhost:8080
or http://<Server IP address>:8080
by default.
world.ini
file, each stored in <World name>/world.ini
.
plugins/WorldEdit/config.cfg
Permissions allow different players to access different commands and features.
Each plugin has its own permissions. Setting up player permissions is most easily done via the WebAdmin.
You can also use the rank <playername>
command from the server console.
Note that there is no leading slash. The console command is not /rank
.
To see the command and permissions list for the default commands, which are provided by the Core plugin,
see the Core Plugin readme.
To give yourself operator status, use the op <playername>
command in the console.
Alternatively, you can use the WebAdmin.
The WebAdmin allows you to control various aspects of Cuberite, including player permissions.
By default, the webadmin is enabled but has no users. To use the webadmin it needs to be configured properly.
A typical webadmin.ini
configuration looks like this:
In the example above, you can login to the web admin using the username john
and the password cuberiteRocks
by pointing your browser to http://<Server IP address>:8080
. If you're running your server locally, point your browser to http://localhost:8080
By default, there are three worlds: world
, world_nether
, world_the_end
.
Each world can be tweaked by editing <World Name>/world.ini
.
You can use this file to edit things like the spawn point location, the game mode, and the diffculty level.
See Configuring world.ini for details.
Plugins are an important method of customisation for Cuberite. There are many different first and third-party plugins available.
Cuberite plugins are written in Lua, and interact with the server through an extensive API. They are designed to be easy to write for anyone with basic programming experience, so if existing plugins don't fill your need you can easily write your own plugins. If you want to learn how to write your own plugins, check out the guide.
Cuberite has a plugin repository where you can upload your plugins publicly and download plugins others have released.
After downloading a plugin, you need to put it in the Plugins/
directory.
You should then edit the [Plugins]
sections of the settings.ini
file and add a plugin entry there.
Below is an example of adding a plugin called MyNewPlugin
.
To get started with writing Cuberite plugins, read this article. Cuberite Plugins are written with the Lua programming language. Cuberite has a well-documented API.
If you have read this far, you should now have enough knowledge to operate a Cuberite server. The rest of this book covers more features and further configuration options in greater depth.
It is possible to configure many different aspects of individual worlds with Cuberite. Configuration options include:
All this configuration can be done through one file. It is called world.ini
and can be found in each world's individual folder. When a world is first created by Cuberite, the file is filled out with default values that are fairly close to vanilla minecraft.
The world.ini
file is split into many different sections, each with a name surrounded in square brackets. For example [SpawnPosition]
is a section. Each section contains configuration options related to a specific feature of Cuberite.
Specifies the spawn point for new players. The coordinates are absolute, in blocks, and may be fractional. If any of the values are missing, Cuberite provides a default.
Variable | Meaning | Default |
---|---|---|
Dimension | The Dimension of this World. Can be: Overworld, Nether, End | Overworld |
UnusedChunkCap | Maximum number of chunks in memory before the server starts to start an early save (See below). | 1000 |
IsDaylightCycleEnabled | Enables/Disables the Server to stop time in the world. Boolean: Can be 0 or 1. | 1 |
GameMode |
0 means Survival mode 1 means Creative mode 2 means Adventure mode 3 means Spectator mode |
0 |
Weather |
The current weather in the world. This is set by the server on shutdown and will be replaced if edited while the server is running! 0 means clear weather 1 means rainy weather 2 means thunderstorm |
0 |
WorldAgeMS | Age of the world in milliseconds. Internal use only. | None |
TimeInTicks | This is used to keep track of the ingame time of the world measured in Ticks. In be in the range of [0, 20000]. | None |
A chunk is a 16x16x256 segment of blocks. Cuberite performs a save cycle every 5 minutes.
In a save cycle, all unused chunks are saved to disk and then removed from RAM. Saves cause
a drop in memory usage. If the number of unused chunks waiting to be saved exceeds
UnusedChunkCap
, Cuberite will perform an early save cycle to free RAM earlier.
If Cuberite is using too much RAM when the server is under load, lowering UnusedChunkCap
from its default of 1000 may help significantly. Setting the value to 0 means chunks are always saved
immediately when they are no longer used. Alternatively, if you'd like Cuberite to maximize performance
and utilize more RAM, increase UnusedChunkCap
.
The effect of UnusedChunkCap
will likely be unnoticeable on light load, when the cap
is never being reached and save cycles are being performed in 5 minutes intervals. In contrast to that,
the effect is often significant when travelling fast and loading many chunks, such as flying
at high speed.
The optimal value varies depending on settings, system hardware, and playstyle. We currently have no official recommended value, and recommend trial and error. A more intuitive setting is planned for the future, where the exact amount of maximum RAM desired is configured.
Specifies setting to broadcast certain events to all players.
Variable | Meaning | Default |
---|---|---|
BroadcastDeathMessages | If the server should broadcast death messages in this world. Boolean: Can be 0 or 1. | 1 |
BroadcastAchievementMessages | If the server should broadcast achievement messages in this world. Boolean: Can be 0 or 1. | 1 |
Specifies the spawn point for new players. The coordinates are absolute, in blocks, and may be fractional. If any of the values are missing, Cuberite provides a default.
Variable | Meaning | Default |
---|---|---|
MaxViewDistance | Sets the maximum viewing Distance for Clients. Lower this for better performance on weaker or busy systems. | 10 |
X | X coordinate of the spawn point | 0 |
Y | Y coordinate of the spawn point | The height of the terrain at the point (X, Z) |
Z | Z coordinate of the spawn point | 0 |
PregenerateDistance | Number of chunks in each direction that are generated on initial world generation. | 20 on release. 9 on Debug. |
This section specifies if Cuberite should save world chunks or not, as well as the compression level for world files.
Variable | Meaning | Default |
---|---|---|
Schema | Specifies if world chunks should be saved or not. May be one of "Default", "Anvil" and "Forgetful". See table below for their description. | Default |
CompressionFactor | How much the world files should be compressed. Lower values mean much larger file sizes, but slightly increased performance, and higher values mean slightly smaller file sizes and much lower performance. It is recommended just to keep with the default. | 6 |
Schema | File Type | Description |
---|---|---|
Default | .mca | This is just an alias for Anvil at the moment. |
Anvil | .mca | Saves chunks. Storage is compatible with other Minecraft-related tools and programs. MCA files are stored in the "region" subfolder of the world folder, and a "level.dat" file is generated inside the world folder. |
Forgetful | N/A | Doesn't save chunks. Changes to the world are lost as soon as the chunks are unloaded, making this useful for read-only public servers. Please note that Cuberite will still load chunks using other schemas. |
Specifies setting on plants in this world.
Variable | Meaning | Default |
---|---|---|
MaxCactusHeight | Limits the cactus growing height in this world. | 3 |
MaxSugarcaneHeight | Limits the sugar cane growing height in this world. | 3 |
Specifies setting for internal physics setup.
Variable | Meaning | Default |
---|---|---|
DeepSnow | Enables/Disables that snow can stack up on itself during downfall. | 1 |
ShouldLavaSpawnFire | Enables/Disables the ability of lava to spawn fire on surrounding blocks. Boolean: Can be 0 or 1. | 1 |
TNTShrapnelLevel |
Sets the blocks that should fly away after an explosion. This is disabled at the moment. 0: No blocks are blown away. 1: Only the ones affected by gravity. 2: Any block is affected. |
2 |
WaterSimulator |
Sets the water simulator. Vanilla: Notchian-like behaviour. Floody: A way more aggressive water distribution. Vaporise: Water will disappear (mostly used for nether behaviour). null: No water simulation. Vanilla and Floody can be further manipulated. See here. |
Vanilla |
LavaSimulator |
Sets the lava simulator. Vanilla: Notchian-like behaviour. Floody: A way more aggressive lava distribution. Vaporise: Lava will disappear. null: No lava simulation. Vanilla and Floody can be further manipulated. See here. |
Vanilla |
SandInstantFall | Enables/Disables the falling animation for sand. Boolean: 0 -> Animation, 1 -> No animation. | 0 |
RedstoneSimulator |
Sets the redstone simulator. Incremental: notchian-like behaviour. noop: disables redstone. |
Incremental |
Specifies setting for some game mechanics.
Variable | Meaning | Default |
---|---|---|
CommandBlocksEnabled | Enables/Disables command blocks. Command blocks are VERY experimental at this point. Boolean: Can be 0 or 1. | 0 |
PVPEnabled | Enables/Disables PVP. Boolean: Can be 0 or 1. | 1 |
UseChatPrefixes | Enables/Disables the chat prefixes for all players. Boolean: Can be 0 or 1. | 1 |
MinNetherPortalWidth | Sets the minimum nether portal width. | 2 |
MaxNetherPortalWidth | Sets the maximum nether portal width. | 21 |
MinNetherPortalHeight | Sets the minimum nether portal height. | 3 |
MaxNetherPortalHeight | Sets the maximum nether portal height. | 21 |
Specifies setting for the monsters.
Variable | Meaning | Default |
---|---|---|
VillagersShouldHarvestCrops | Villagers don't do anything at this point. So this changes nothing. | 1 |
AnimalsOn | 1 | |
Types | Sets a list of allowed monsters (both aggressive and passive). All should be lowercase and comma separated. | bat, cavespider, chicken, cow, creeper, guardian, horse, mooshroom, ocelot, pig, rabbit, sheep, silverfish, skeleton, slime, spider, squid, wolf, zombie |
Specifies setting for the weather in the world. All the values are measured in ticks.
Variable | Meaning | Default |
---|---|---|
MaxSunnyTicks | 180000 | |
MinSunnyTicks | 12000 | |
MaxRainTicks | 24000 | |
MinRainTicks | 12000 | |
MaxThunderStormTicks | 15600 | |
MinThunderStormTicks | 3600 |
Specifies setting for the generator of this world. This is the most powerful tool when customizing worlds.
Variable | Meaning | Default |
---|---|---|
Generator |
Various types of generators:
|
Composable |
BiomeGen | This value will determine the way the server chooses the biomes. | Grown |
ShapeGen | This determines the way the world is shaped. | BiomalNoise3D |
CompositionGen | This determines the way the generator fills the actual blocks. | Biomal |
CompositionGenCacheSize | 64 | |
Finishers | Default Finishers | |
Constant |
The constant biome generator (just one biome). Options:
|
||||||||||||||||||||||||||
Checkerboard |
Will generate biomes in a checkerboard layout. You can set the size of the squares and the used biomes. Options:
|
||||||||||||||||||||||||||
Voronoi |
Options:
|
||||||||||||||||||||||||||
DistortedVoronoi |
Options:
|
||||||||||||||||||||||||||
TwoLevel |
Options:
|
||||||||||||||||||||||||||
MultiStepMap |
Options:
|
||||||||||||||||||||||||||
GrownProt | |||||||||||||||||||||||||||
Grown |
The Shape generator determines the shape of the world. Depending on what your choose it can create overhangs. So two blocks facing air at the top.
BiomalNoise3D |
This generates a terrain shape by combining a lerp of two 3D noises with a vertical linear gradient. Options:
|
||||||||||||||||||||||||||||
DistortedHeightmap |
Options:
|
||||||||||||||||||||||||||||
End |
The ShapeGenerator used for the end. Options:
|
||||||||||||||||||||||||||||
HeightMap | This is a old relict. The server previously used HeightGenerators instead of ShapeGenerators. This is deprecated and won't yield any overhangs or similar. This enables the property: "HeightGen" | ||||||||||||||||||||||||||||
Noise3D |
Options:
|
||||||||||||||||||||||||||||
TwoHeights |
Merges two HeightMaps generated from the same as DistortedHeightMap
Options:
|
Generator Type | Results |
---|---|
Flat | |
Classic | |
MinMax | |
Mountains | |
Steppy | |
Biomal |
Generator Type | Results |
---|---|
Biomal | |
BiomalNoise3D | |
Classic | |
DebugBiomes | |
DistortedHeightmap | |
End | |
Nether | |
Noise3D | |
SameBlock | Fills everything with the same Block. |
Finisher | Functions | Options | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
RoughRavines | Creates the big ravines. |
|
||||||||||||||||
WormNestCaves | Creates the small caves going through the ground. |
|
||||||||||||||||
WaterLakes | Creates the water lakes at sea level. |
|
||||||||||||||||
WaterSprings | Creates the one-block water springs. | |||||||||||||||||
LavaLakes | Creates the laval lakes at sea level. |
|
||||||||||||||||
LavaSprings | Creates the one-block lava springs. | |||||||||||||||||
OreNests | Creates the ores in the ground. | |||||||||||||||||
Mineshafts | Creates Mineshafts |
|
||||||||||||||||
Trees | Creates the trees (and tree-like [e.g. Mushroom]) structures. | |||||||||||||||||
Villages | Creates the villages |
|
||||||||||||||||
SinglePieceStructures | Creates Structures that consist of single piece. |
You have a choice of:
If you want to add custom models you need to add them in the Prefabs/SinglePieceStructures folder and add the file name without the file ending to the list. |
||||||||||||||||
TallGrass | Adds the tall grass and fern to the world. | |||||||||||||||||
SprinkleFoliage | Generates the small flowers and similar blocks. | |||||||||||||||||
Ice | Adds ice to the world. | |||||||||||||||||
Snow | Adds snow to the world. | |||||||||||||||||
Lilypads | Adds lilypads to the world. | |||||||||||||||||
BottomLava | Places the lava at the bottom of the world. |
|
||||||||||||||||
DeadBushes | ||||||||||||||||||
NaturalPatches | ||||||||||||||||||
PreSimulator | The calculates the behaviour of different blocks at the point of generation instead of ticking it. This saves performance. | PreSimulatorFallingBlocks=1 PreSimulatorWater=1 PreSimulatorLava=1 |
||||||||||||||||
Animals | ||||||||||||||||||
OverworldClumpFlowers | Places flowers into the world |
Variable | Meaning | Default |
---|---|---|
ProtectRadius | Sets the radius in which non-admin players are not able to build. | 10 |
WorldDifficulty | Sets the difficulty of this world. | 1 |
LimitRadius | Limits the world similar to the nothcian world border. | 0 |
To generate a Superflat world, change the values under the [Generator]
section to:
To generate a world that only contains air, change the values under the [Generator]
section to:
Cuberite supports multiple worlds. Each world has its own world.ini
file.
Additional Worlds can be added by editing settings.ini
.
This is explained in the example below.
In the example above, 2 extra worlds are added to the server.
Note that this automatically creates 2 additional configuration files, namely myNewWorld/world.ini
and HappyLand/world.ini
.
To create a nether type world, you should append the _nether
suffix to your world name,
e.g. World=myHellishWorld_nether
. This creates a world.ini
preconfigured as a nether.
For end worlds, the same rules apply, append the _the_end
suffix to your world name.
Once a default world.ini
is created, you are free to tweak it to your liking.
The _nether
and _the_end
suffixes are only used when no world.ini
exists,
and guide the server in choosing the contents of the default world.ini it's about to create.
When a world.ini is present, the suffixes do not matter any more and the dimension is dictated
by the Dimension
option inside each world.ini
.
The _end
suffix is treated like _the_end
suffix for compatibility with previous Cuberite versions.
The rest of this section deals with linking worlds and travelling between them.
If you have the core.portal
permission, you may use the following command to travel between worlds:
/portal Worldname
. To list all available worlds, use /worlds
.
You can easily link worlds without resorting to plugins by modifying world.ini
files.
However, this method is limited: Each world can only be linked to 2 different worlds.
By default, the overworld is linked to two worlds: The Nether and The End.
Stepping through any Nether Portal leads to the Nether, and stepping through any End Portal leads to the End.
The behavior of Nether and End portals can be tweaked, and you can make each portal type teleport to a world of your choice.
This is done by editing the [LinkedWorlds]
section of each world's world.ini
file.
Note that with this method, you can't make two different portals of the same type teleport you to two different worlds.
If you want such behavior, you should use a plugin. See the next subsection.
The most configurable way to link worlds together is using a dedicated plugin, such as Portal V2. More plugins can be found at the respository.
Cuberite has experimental Bungeecord support.