implement reloads on bukkit

This commit is contained in:
dfsek 2021-12-30 17:39:50 -07:00
parent c6f42da61b
commit 8560438bac
2 changed files with 33 additions and 3 deletions

View File

@ -20,6 +20,9 @@ package com.dfsek.terra.bukkit;
import com.dfsek.tectonic.api.TypeRegistry;
import com.dfsek.tectonic.api.depth.DepthTracker;
import com.dfsek.tectonic.api.exception.LoadException;
import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper;
import org.bukkit.Bukkit;
import org.bukkit.entity.EntityType;
import org.jetbrains.annotations.NotNull;
@ -36,8 +39,13 @@ import com.dfsek.terra.bukkit.handles.BukkitItemHandle;
import com.dfsek.terra.bukkit.handles.BukkitWorldHandle;
import com.dfsek.terra.bukkit.world.BukkitPlatformBiome;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PlatformImpl extends AbstractPlatform {
private static final Logger LOGGER = LoggerFactory.getLogger(PlatformImpl.class);
private final ItemHandle itemHandle = new BukkitItemHandle();
private final WorldHandle handle = new BukkitWorldHandle();
@ -55,7 +63,20 @@ public class PlatformImpl extends AbstractPlatform {
@Override
public boolean reload() {
return false;
getTerraConfig().load(this);
getRawConfigRegistry().clear();
boolean succeed = getRawConfigRegistry().loadAll(this);
Bukkit.getWorlds().forEach(world -> {
if(world.getGenerator() instanceof BukkitChunkGeneratorWrapper wrapper) {
getConfigRegistry().get(wrapper.getPack().getRegistryKey()).ifPresent(pack -> {
wrapper.setPack(pack);
LOGGER.info("Replaced pack in chunk generator for world {}", world);
});
}
});
return succeed;
}
@Override

View File

@ -40,8 +40,8 @@ import com.dfsek.terra.bukkit.world.BukkitProtoWorld;
public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGenerator implements GeneratorWrapper {
private final ChunkGenerator delegate;
private final ConfigPack pack;
private ChunkGenerator delegate;
private ConfigPack pack;
private final BlockState air;
public BukkitChunkGeneratorWrapper(ChunkGenerator delegate, ConfigPack pack, BlockState air) {
@ -50,6 +50,15 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
this.air = air;
}
public void setDelegate(ChunkGenerator delegate) {
this.delegate = delegate;
}
public void setPack(ConfigPack pack) {
this.pack = pack;
setDelegate(pack.getGeneratorProvider().newInstance(pack));
}
@Override
public @Nullable BiomeProvider getDefaultBiomeProvider(@NotNull WorldInfo worldInfo) {
return new BukkitBiomeProvider(pack.getBiomeProvider());