preparations for Sponge API8

This commit is contained in:
dfsek
2021-02-23 15:57:27 -07:00
parent 98c1fea7fd
commit 9c2b844290
33 changed files with 413 additions and 84 deletions

View File

@@ -15,7 +15,9 @@ import com.dfsek.terra.api.platform.world.Biome;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.registry.LockedRegistry;
import com.dfsek.terra.api.util.DebugLogger;
import com.dfsek.terra.api.util.logging.DebugLogger;
import com.dfsek.terra.api.util.logging.JavaLogger;
import com.dfsek.terra.api.util.logging.Logger;
import com.dfsek.terra.api.world.generation.TerraChunkGenerator;
import com.dfsek.terra.bukkit.command.command.TerraCommand;
import com.dfsek.terra.bukkit.command.command.structure.LocateCommand;
@@ -136,7 +138,7 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin {
@Override
public void onEnable() {
debugLogger = new DebugLogger(getLogger());
debugLogger = new DebugLogger(logger());
getLogger().info("Running on version " + BUKKIT_VERSION);
if(BUKKIT_VERSION == BukkitVersion.UNKNOWN) {
@@ -245,6 +247,11 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin {
return worldMap.computeIfAbsent(w, world -> new TerraWorld(w, worlds.get(w.getName()), this));
}
@Override
public Logger logger() {
return new JavaLogger(getLogger());
}
@NotNull
@Override
public PluginConfig getTerraConfig() {

View File

@@ -7,7 +7,6 @@ import com.dfsek.terra.api.world.generation.TerraChunkGenerator;
import com.dfsek.terra.bukkit.population.PopulationManager;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.bukkit.world.BukkitBiomeGrid;
import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.profiler.DataType;
import com.dfsek.terra.profiler.Measurement;
import com.dfsek.terra.world.TerraWorld;
@@ -28,7 +27,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.logging.Level;
import java.util.stream.Collectors;
public class BukkitChunkGeneratorWrapper extends ChunkGenerator implements com.dfsek.terra.api.platform.world.generator.ChunkGenerator {
@@ -76,8 +74,8 @@ public class BukkitChunkGeneratorWrapper extends ChunkGenerator implements com.d
private void load(com.dfsek.terra.api.platform.world.World w) {
try {
popMan.loadBlocks(w);
} catch(FileNotFoundException e) {
LangUtil.log("warning.no-population", Level.WARNING);
} catch(FileNotFoundException ignore) {
} catch(IOException | ClassNotFoundException e) {
e.printStackTrace();
}

View File

@@ -32,7 +32,7 @@ public class PaperListener implements Listener {
}, main);
finder.run(); // Do this synchronously.
} else {
main.getLogger().warning("No overrides are defined for \"" + name + "\"");
main.logger().warning("No overrides are defined for \"" + name + "\"");
}
}

View File

@@ -47,7 +47,7 @@ public class SpigotListener implements Listener {
}, main);
finder.run(); // Do this synchronously so eye doesn't change direction several ticks after spawning.
} else
main.getLogger().warning("No overrides are defined for Strongholds. Ender Signals will not work correctly.");
main.logger().warning("No overrides are defined for Strongholds. Ender Signals will not work correctly.");
}
}
@@ -56,9 +56,9 @@ public class SpigotListener implements Listener {
if(!TerraWorld.isTerraWorld(BukkitAdapter.adapt(e.getEntity().getWorld()))) return;
if(!(e.getEntity() instanceof Villager)) return;
if(((Villager) e.getEntity()).getProfession().equals(Villager.Profession.CARTOGRAPHER)) {
main.getLogger().severe("Prevented server crash by stopping Cartographer villager from spawning.");
main.getLogger().severe("Please upgrade to Paper, which has a StructureLocateEvent that fixes this issue");
main.getLogger().severe("at the source, and doesn't require us to do stupid band-aids.");
main.logger().severe("Prevented server crash by stopping Cartographer villager from spawning.");
main.logger().severe("Please upgrade to Paper, which has a StructureLocateEvent that fixes this issue");
main.logger().severe("at the source, and doesn't require us to do stupid band-aids.");
e.setCancelled(true); // Cancel leveling if the villager is a Cartographer, to prevent crashing server.
}
}
@@ -67,9 +67,9 @@ public class SpigotListener implements Listener {
public void onCartographerLevel(VillagerCareerChangeEvent e) {
if(!TerraWorld.isTerraWorld(BukkitAdapter.adapt(e.getEntity().getWorld()))) return;
if(e.getProfession().equals(Villager.Profession.CARTOGRAPHER)) {
main.getLogger().severe("Prevented server crash by stopping Cartographer villager from spawning.");
main.getLogger().severe("Please upgrade to Paper, which has a StructureLocateEvent that fixes this issue");
main.getLogger().severe("at the source, and doesn't require us to do stupid band-aids.");
main.logger().severe("Prevented server crash by stopping Cartographer villager from spawning.");
main.logger().severe("Please upgrade to Paper, which has a StructureLocateEvent that fixes this issue");
main.logger().severe("at the source, and doesn't require us to do stupid band-aids.");
e.getEntity().setProfession(Villager.Profession.NITWIT); // Give villager new profession to prevent server crash.
e.setCancelled(true);
}

View File

@@ -20,7 +20,8 @@ import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.registry.LockedRegistry;
import com.dfsek.terra.api.transform.NotNullValidator;
import com.dfsek.terra.api.transform.Transformer;
import com.dfsek.terra.api.util.DebugLogger;
import com.dfsek.terra.api.util.logging.DebugLogger;
import com.dfsek.terra.api.util.logging.Logger;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.tree.Tree;
import com.dfsek.terra.config.GenericLoaders;
@@ -73,9 +74,7 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
@@ -93,16 +92,24 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
public static final ConfiguredFeature<?, ?> POPULATOR_CONFIGURED_FEATURE = POPULATOR_FEATURE.configure(FeatureConfig.DEFAULT).decorate(Decorator.NOPE.configure(NopeDecoratorConfig.INSTANCE));
private final GenericLoaders genericLoaders = new GenericLoaders(this);
private final Logger logger;
private final DebugLogger debugLogger;
private final Logger logger = new Logger() {
@Override
public void info(String message) {
}
@Override
public void warning(String message) {
}
@Override
public void severe(String message) {
}
};
private final DebugLogger debugLogger = new DebugLogger(logger);
{
Logger logger = Logger.getLogger("Terra");
LogManager.getLogManager().addLogger(logger);
this.logger = logger;
debugLogger = new DebugLogger(logger);
debugLogger.setDebug(true);
}
private final ItemHandle itemHandle = new FabricItemHandle();
private final WorldHandle worldHandle = new FabricWorldHandle();
@@ -131,7 +138,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
}
@Override
public Logger getLogger() {
public Logger logger() {
return logger;
}
@@ -254,8 +261,6 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
@Override
public void onInitialize() {
logger.setLevel(Level.INFO);
instance = this;
config = new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra");

View File

@@ -76,7 +76,7 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements com.d
this.pack = configPack;
this.delegate = new DefaultChunkGenerator3D(configPack, TerraFabricPlugin.getInstance(), pack.getSamplerCache());
delegate.getMain().getLogger().info("Loading world...");
delegate.getMain().logger().info("Loading world...");
this.biomeSource = biomeSource;
this.seed = seed;

View File

@@ -12,7 +12,8 @@ import com.dfsek.terra.api.platform.world.Biome;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.registry.LockedRegistry;
import com.dfsek.terra.api.util.DebugLogger;
import com.dfsek.terra.api.util.logging.DebugLogger;
import com.dfsek.terra.api.util.logging.JavaLogger;
import com.dfsek.terra.config.GenericLoaders;
import com.dfsek.terra.config.PluginConfig;
import com.dfsek.terra.config.lang.LangUtil;
@@ -49,8 +50,8 @@ public class StandalonePlugin implements TerraPlugin {
}
@Override
public Logger getLogger() {
return Logger.getLogger("Terra");
public com.dfsek.terra.api.util.logging.Logger logger() {
return new JavaLogger(Logger.getLogger("Terra"));
}
@Override
@@ -109,7 +110,23 @@ public class StandalonePlugin implements TerraPlugin {
@Override
public DebugLogger getDebugLogger() {
return new DebugLogger(Logger.getLogger("Terra"));
Logger logger = Logger.getLogger("Terra");
return new DebugLogger(new com.dfsek.terra.api.util.logging.Logger() {
@Override
public void info(String message) {
logger.info(message);
}
@Override
public void warning(String message) {
logger.warning(message);
}
@Override
public void severe(String message) {
logger.severe(message);
}
});
}
@Override

View File

@@ -0,0 +1,28 @@
import com.dfsek.terra.configureCommon
plugins {
java
id("org.spongepowered.plugin").version("0.9.0")
}
configureCommon()
group = "com.dfsek.terra"
repositories {
mavenCentral()
jcenter()
}
dependencies {
"compileOnly"("org.spongepowered:spongeapi:7.2.0")
"shadedApi"(project(":common"))
"shadedImplementation"("org.yaml:snakeyaml:1.27")
"shadedImplementation"("com.googlecode.json-simple:json-simple:1.1.1")
}
sponge {
plugin {
id = "terra"
}
}

View File

@@ -0,0 +1,15 @@
package com.dfsek.terra.sponge;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.sponge.world.block.data.SpongeBlockData;
import org.spongepowered.api.block.BlockState;
public final class SpongeAdapter {
public static BlockData adapt(BlockState state) {
return new SpongeBlockData(state);
}
public static BlockState adapt(BlockData data) {
return ((SpongeBlockData) data).getHandle();
}
}

View File

@@ -0,0 +1,26 @@
package com.dfsek.terra.sponge;
import com.dfsek.terra.api.util.logging.Logger;
public class SpongeLogger implements Logger {
private final org.slf4j.Logger logger;
public SpongeLogger(org.slf4j.Logger logger) {
this.logger = logger;
}
@Override
public void info(String message) {
logger.info(message);
}
@Override
public void warning(String message) {
logger.warn(message);
}
@Override
public void severe(String message) {
logger.error(message);
}
}

View File

@@ -0,0 +1,141 @@
package com.dfsek.terra.sponge;
import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.addons.TerraAddon;
import com.dfsek.terra.api.event.EventManager;
import com.dfsek.terra.api.event.TerraEventManager;
import com.dfsek.terra.api.platform.handle.ItemHandle;
import com.dfsek.terra.api.platform.handle.WorldHandle;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.registry.LockedRegistry;
import com.dfsek.terra.api.util.logging.DebugLogger;
import com.dfsek.terra.config.PluginConfig;
import com.dfsek.terra.config.lang.Language;
import com.dfsek.terra.config.pack.ConfigPack;
import com.dfsek.terra.registry.master.AddonRegistry;
import com.dfsek.terra.registry.master.ConfigRegistry;
import com.dfsek.terra.sponge.world.SpongeWorldHandle;
import com.dfsek.terra.world.TerraWorld;
import com.google.inject.Inject;
import org.slf4j.Logger;
import org.spongepowered.api.config.ConfigDir;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.game.state.GameStartedServerEvent;
import org.spongepowered.api.plugin.Plugin;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
@Plugin(id = "terra", name = "Terra-Sponge", version = "", description = "Terra")
public class TerraSpongePlugin implements TerraPlugin {
private final ConfigRegistry configRegistry = new ConfigRegistry();
private final CheckedRegistry<ConfigPack> packCheckedRegistry = new CheckedRegistry<>(configRegistry);
private final PluginConfig config = new PluginConfig();
private final AddonRegistry addonRegistry = new AddonRegistry(this);
private final LockedRegistry<TerraAddon> addonLockedRegistry = new LockedRegistry<>(addonRegistry);
private final SpongeWorldHandle spongeWorldHandle = new SpongeWorldHandle();
private final EventManager eventManager = new TerraEventManager(this);
@Inject
@ConfigDir(sharedRoot = false)
private Path privateConfigDir;
@Inject
private Logger logger;
@Listener
public void initialize(GameStartedServerEvent event) {
addonRegistry.loadAll();
configRegistry.loadAll(this);
}
@Override
public void register(TypeRegistry registry) {
}
@Override
public WorldHandle getWorldHandle() {
return spongeWorldHandle;
}
@Override
public TerraWorld getWorld(World world) {
return null;
}
@Override
public com.dfsek.terra.api.util.logging.Logger logger() {
return new SpongeLogger(logger);
}
@Override
public PluginConfig getTerraConfig() {
return config;
}
@Override
public File getDataFolder() {
return privateConfigDir.toFile();
}
@Override
public boolean isDebug() {
return true;
}
@Override
public Language getLanguage() {
try {
return new Language(new File(getDataFolder(), "lang/en_us.yml"));
} catch(IOException e) {
throw new IllegalArgumentException();
}
}
@Override
public CheckedRegistry<ConfigPack> getConfigRegistry() {
return packCheckedRegistry;
}
@Override
public LockedRegistry<TerraAddon> getAddons() {
return addonLockedRegistry;
}
@Override
public boolean reload() {
return false;
}
@Override
public ItemHandle getItemHandle() {
return null;
}
@Override
public void saveDefaultConfig() {
}
@Override
public String platformName() {
return "Sponge";
}
@Override
public DebugLogger getDebugLogger() {
return null;
}
@Override
public EventManager getEventManager() {
return eventManager;
}
}

View File

@@ -0,0 +1,20 @@
package com.dfsek.terra.sponge.world;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.entity.EntityType;
import com.dfsek.terra.api.platform.handle.WorldHandle;
import com.dfsek.terra.sponge.SpongeAdapter;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.block.BlockState;
public class SpongeWorldHandle implements WorldHandle {
@Override
public BlockData createBlockData(String data) {
return SpongeAdapter.adapt(Sponge.getRegistry().getType(BlockState.class, data).orElseThrow(() -> new IllegalArgumentException("Invalid block data \"" + data + "\"")));
}
@Override
public EntityType getEntity(String id) {
return null;
}
}

View File

@@ -0,0 +1,43 @@
package com.dfsek.terra.sponge.world.block.data;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.block.BlockType;
import org.spongepowered.api.block.BlockState;
public class SpongeBlockData implements BlockData {
private final BlockState delegate;
public SpongeBlockData(BlockState delegate) {
this.delegate = delegate;
}
@Override
public BlockState getHandle() {
return delegate;
}
@Override
public BlockType getBlockType() {
return null;
}
@Override
public boolean matches(BlockData other) {
return false;
}
@Override
public BlockData clone() {
return null;
}
@Override
public String getAsString() {
return null;
}
@Override
public boolean isAir() {
return false;
}
}