Add world-based permissions and migration commands

- Switch bau logic from owner-scoped to world-scoped data
- Add CLI commands for world migration, templating, and archiving
- Extend world storage with team worlds and lock state support
This commit is contained in:
2026-05-19 20:53:32 +02:00
parent 5a5090c74d
commit 9aa363de6f
33 changed files with 1318 additions and 230 deletions
@@ -29,6 +29,7 @@ import java.util.function.Consumer;
@Getter
public class Bauserver extends Subserver {
private static final Map<UUID, Bauserver> servers = new HashMap<>();
private static final Map<UUID, Bauserver> serversByWorld = new HashMap<>();
public static Bauserver get(UUID owner) {
synchronized (servers) {
@@ -36,25 +37,43 @@ public class Bauserver extends Subserver {
}
}
public static Bauserver getByWorld(UUID world) {
synchronized (serversByWorld) {
return serversByWorld.get(world);
}
}
private final UUID owner;
private final UUID world;
public Bauserver(String serverName, UUID owner, int port, ProcessBuilder processBuilder, Runnable shutdownCallback) {
this(serverName, owner, port, processBuilder, shutdownCallback, null);
this(serverName, owner, owner, port, processBuilder, shutdownCallback, null);
}
public Bauserver(String serverName, UUID owner, int port, ProcessBuilder processBuilder, Runnable shutdownCallback, Consumer<Exception> failureCallback) {
this(serverName, owner, owner, port, processBuilder, shutdownCallback, failureCallback);
}
public Bauserver(String serverName, UUID owner, UUID world, int port, ProcessBuilder processBuilder, Runnable shutdownCallback, Consumer<Exception> failureCallback) {
super(serverName, port, processBuilder, shutdownCallback, failureCallback);
this.owner = owner;
this.world = world;
synchronized (servers) {
servers.put(owner, this);
servers.putIfAbsent(owner, this);
}
synchronized (serversByWorld) {
serversByWorld.put(world, this);
}
}
@Override
protected void unregister() {
synchronized (servers) {
servers.remove(owner);
servers.remove(owner, this);
}
synchronized (serversByWorld) {
serversByWorld.remove(world);
}
super.unregister();
}