Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,17 @@ export default defineConfig({
text: "World",
items: [
{ text: "Instances", link: "/docs/world/instances" },
{
text: "Loading",
link: "/docs/world/loading",
items: [
{ text: "Anvil", link: "/docs/world/loading/anvil" },
],
},
{
text: "Chunk Management",
link: "/docs/world/chunk-management",
items: [
{ text: "Anvil Loader", link: "/docs/world/anvilloader" },
{ text: "Lighting", link: "/docs/world/lightloader" },
],
},
Expand Down
23 changes: 0 additions & 23 deletions docs/world/anvilloader.md

This file was deleted.

28 changes: 28 additions & 0 deletions docs/world/loading.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# World Loading

In order to load or save an [`Instance`](https://javadoc.minestom.net/net.minestom.server/net/minestom/server/instance/Instance.html), you must provide a [`ChunkLoader`](https://javadoc.minestom.net/net.minestom.server/net/minestom/server/instance/ChunkLoader.html) that Minestom will use to read and write chunk data to and from.

When creating your instance, you can provide the loader in multiple ways:
* [`InstanceManager#createInstanceContainer(@Nullable ChunkLoader)`](https://javadoc.minestom.net/net.minestom.server/net/minestom/server/instance/InstanceManager.html#createInstanceContainer(net.minestom.server.instance.ChunkLoader))
* [`InstanceManager#createInstanceContainer(RegistryKey<DimensionType>, @Nullable ChunkLoader)`](https://javadoc.minestom.net/net.minestom.server/net/minestom/server/instance/InstanceManager.html#createInstanceContainer(net.minestom.server.instance.ChunkLoader))
* [`InstanceContainer#setChunkLoader(ChunkLoader)`](https://javadoc.minestom.net/net.minestom.server/net/minestom/server/instance/InstanceContainer.html#setChunkLoader(net.minestom.server.instance.ChunkLoader))

Minestom will automatically load chunks from the loader once provided.

## Saving

Saving must be done in two steps:
1. [`Instance#saveChunksToStorage`](https://javadoc.minestom.net/net.minestom.server/net/minestom/server/instance/Instance.html#saveChunksToStorage())
2. [`Instance#saveInstance`](https://javadoc.minestom.net/net.minestom.server/net/minestom/server/instance/Instance.html#saveInstance())

```java
MinecraftServer.getSchedulerManager().buildShutdownTask(() -> {
this.instance.saveChunksToStorage();
this.instance.saveInstance();
});
```

## Loaders

* [No-op](https://javadoc.minestom.net/net.minestom.server/net/minestom/server/instance/ChunkLoader.html#noop())
* [Anvil](/docs/world/loading/anvil.md)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Haven't tested but pretty sure this won't work. Shouldn't they be without .md? So just /docs/world/loading/{anvil,polar}

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works on the local development server. I'd also assume that would work when the site is generated.

19 changes: 19 additions & 0 deletions docs/world/loading/anvil.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Anvil Loader

Anvil is the format made by Mojang for vanilla. Minestom provides this format and it is chosen **by default** on newly created instances. Anvil is a multi-file world format, so must be provided with a directory to store world data. The anvil loader also supports reading light data from the worlds, this is enabled by default.

## Requirements

Worlds to be used with [`AnvilLoader`](https://javadoc.minestom.net/net.minestom.server/net/minestom/server/instance/anvil/AnvilLoader.html) only need to contain the `region` directory, which is where the chunk data comes from. Chunk loaders do not read entity data.

## Usage

To use a world from the **runtime file system**, you can do something like the following code snippet, which constructs the loader using [`AnvilLoader#<init>(Path)`](https://javadoc.minestom.net/net.minestom.server/net/minestom/server/instance/anvil/AnvilLoader.html#%3Cinit%3E(java.nio.file.Path)).

```java
final Path directory = this.worlds.join("world");
final AnvilLoader loader = new AnvilLoader(directory);
final InstanceContainer instance = MinecraftServer.getInstanceManager().createInstanceContainer(loader);
```

Remember, however, that this **does not** read from the jar resources. Other war crimes must be committed for this to happen.