refactor(minestom): replace static singleton access to platform with dependency injection for better modularity

Renamed `MinestomPlatform` to `TerraMinestomPlatform` and updated `TerraMinestomWorldBuilder` to utilize the platform instance directly. Simplified world builder initialization and improved code clarity.
This commit is contained in:
Christian Bergschneider 2025-05-27 22:58:16 +02:00
parent d97fb4ff7b
commit 1dd59c378e
No known key found for this signature in database
GPG Key ID: 3991F97F5FA28D3E
3 changed files with 34 additions and 28 deletions

View File

@ -31,7 +31,8 @@ public class TerraMinestomExample {
}
public void attachTerra() {
world = TerraMinestomWorldBuilder.from(instance)
TerraMinestomPlatform platform = new TerraMinestomPlatform();
world = platform.worldBuilder(instance)
.defaultPack()
.attach();
}

View File

@ -2,6 +2,7 @@ package com.dfsek.terra.minestom;
import com.dfsek.tectonic.api.TypeRegistry;
import com.dfsek.tectonic.api.loader.type.TypeLoader;
import com.dfsek.terra.AbstractPlatform;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.entity.EntityType;
@ -14,34 +15,41 @@ import com.dfsek.terra.minestom.entity.MinestomEntityType;
import com.dfsek.terra.minestom.item.MinestomItemHandle;
import com.dfsek.terra.minestom.world.MinestomChunkGeneratorWrapper;
import com.dfsek.terra.minestom.world.MinestomWorldHandle;
import com.dfsek.terra.registry.master.ConfigRegistry.PackLoadFailuresException;
import com.dfsek.terra.minestom.world.TerraMinestomWorldBuilder;
import net.minestom.server.MinecraftServer;
import net.minestom.server.instance.Instance;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
public final class TerraMinestomPlatform extends AbstractPlatform {
private static final Logger LOGGER = LoggerFactory.getLogger(TerraMinestomPlatform.class);
private final WorldHandle worldHandle;
private final ItemHandle itemHandle;
private final TypeLoader<PlatformBiome> biomeTypeLoader;
public final class MinestomPlatform extends AbstractPlatform {
private static final Logger LOGGER = LoggerFactory.getLogger(MinestomPlatform.class);
private static MinestomPlatform INSTANCE = null;
private final MinestomWorldHandle worldHandle = new MinestomWorldHandle();
private final MinestomItemHandle itemHandle = new MinestomItemHandle();
private MinestomPlatform() {
public TerraMinestomPlatform(WorldHandle worldHandle, ItemHandle itemHandle, TypeLoader<PlatformBiome> biomeTypeLoader) {
this.worldHandle = worldHandle;
this.itemHandle = itemHandle;
this.biomeTypeLoader = biomeTypeLoader;
load();
getEventManager().callEvent(new PlatformInitializationEvent());
}
public TerraMinestomPlatform() {
this(new MinestomWorldHandle(), new MinestomItemHandle(), new MinestomBiomeLoader());
}
@Override
public void register(TypeRegistry registry) {
super.register(registry);
registry
.registerLoader(PlatformBiome.class, new MinestomBiomeLoader())
.registerLoader(PlatformBiome.class, biomeTypeLoader)
.registerLoader(EntityType.class, (TypeLoader<EntityType>) (annotatedType, o, configLoader, depthTracker) -> new MinestomEntityType((String) o))
.registerLoader(BlockState.class, (TypeLoader<BlockState>) (annotatedType, o, configLoader, depthTracker) -> worldHandle.createBlockState((String) o));
}
@ -82,16 +90,17 @@ public final class MinestomPlatform extends AbstractPlatform {
@Override
public @NotNull File getDataFolder() {
String pathName = System.getProperty("terra.datafolder");
if (pathName == null) pathName = "./terra/";
if(pathName == null) pathName = "./terra/";
File file = new File(pathName);
if(!file.exists()) file.mkdirs();
return file;
}
public static MinestomPlatform getInstance() {
if(INSTANCE == null) {
INSTANCE = new MinestomPlatform();
public TerraMinestomWorldBuilder worldBuilder(Instance instance) {
return new TerraMinestomWorldBuilder(this, instance);
}
return INSTANCE;
public TerraMinestomWorldBuilder worldBuilder() {
return new TerraMinestomWorldBuilder(this, MinecraftServer.getInstanceManager().createInstanceContainer());
}
}

View File

@ -4,7 +4,7 @@ import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.minestom.MinestomPlatform;
import com.dfsek.terra.minestom.TerraMinestomPlatform;
import com.dfsek.terra.minestom.api.BlockEntityFactory;
import com.dfsek.terra.minestom.api.EntityFactory;
import com.dfsek.terra.minestom.block.DefaultBlockEntityFactory;
@ -18,20 +18,16 @@ import java.util.function.Function;
public class TerraMinestomWorldBuilder {
private final TerraMinestomPlatform platform;
private final Instance instance;
private ConfigPack pack;
private long seed = new Random().nextLong();
private EntityFactory entityFactory = new DefaultEntityFactory();
private BlockEntityFactory blockEntityFactory = new DefaultBlockEntityFactory();
private TerraMinestomWorldBuilder(Instance instance) { this.instance = instance; }
public static TerraMinestomWorldBuilder from(Instance instance) {
return new TerraMinestomWorldBuilder(instance);
}
public static TerraMinestomWorldBuilder builder() {
return new TerraMinestomWorldBuilder(MinecraftServer.getInstanceManager().createInstanceContainer());
public TerraMinestomWorldBuilder(TerraMinestomPlatform platform, Instance instance) {
this.platform = platform;
this.instance = instance;
}
public TerraMinestomWorldBuilder pack(ConfigPack pack) {
@ -40,13 +36,13 @@ public class TerraMinestomWorldBuilder {
}
public TerraMinestomWorldBuilder packById(String id) {
this.pack = MinestomPlatform.getInstance().getConfigRegistry().getByID(id).orElseThrow();
this.pack = platform.getConfigRegistry().getByID(id).orElseThrow();
return this;
}
public TerraMinestomWorldBuilder findPack(Function<CheckedRegistry<ConfigPack>, ConfigPack> fn) {
this.pack = fn.apply(MinestomPlatform.getInstance().getConfigRegistry());
this.pack = fn.apply(platform.getConfigRegistry());
return this;
}