diff --git a/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java b/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java index fecee9f5a..07f9441e4 100644 --- a/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java +++ b/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java @@ -7,14 +7,14 @@ 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.DebugLogger; +import com.dfsek.terra.api.util.logging.DebugLogger; +import com.dfsek.terra.api.util.logging.Logger; import com.dfsek.terra.config.PluginConfig; import com.dfsek.terra.config.lang.Language; import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.world.TerraWorld; import java.io.File; -import java.util.logging.Logger; /** * Represents a Terra mod/plugin instance. @@ -24,7 +24,7 @@ public interface TerraPlugin extends LoaderRegistrar { TerraWorld getWorld(World world); - Logger getLogger(); + Logger logger(); PluginConfig getTerraConfig(); diff --git a/common/src/main/java/com/dfsek/terra/api/event/TerraEventManager.java b/common/src/main/java/com/dfsek/terra/api/event/TerraEventManager.java index c25b5c1ee..493efa364 100644 --- a/common/src/main/java/com/dfsek/terra/api/event/TerraEventManager.java +++ b/common/src/main/java/com/dfsek/terra/api/event/TerraEventManager.java @@ -47,15 +47,15 @@ public class TerraEventManager implements EventManager { } catch(InvocationTargetException e) { StringWriter writer = new StringWriter(); e.getTargetException().printStackTrace(new PrintWriter(writer)); - main.getLogger().warning("Exception occurred during event handling:"); - main.getLogger().warning(writer.toString()); - main.getLogger().warning("Report this to the maintainers of " + listenerHolder.method.getName()); + main.logger().warning("Exception occurred during event handling:"); + main.logger().warning(writer.toString()); + main.logger().warning("Report this to the maintainers of " + listenerHolder.method.getName()); } catch(Exception e) { StringWriter writer = new StringWriter(); e.printStackTrace(new PrintWriter(writer)); - main.getLogger().warning("Exception occurred during event handling:"); - main.getLogger().warning(writer.toString()); - main.getLogger().warning("Report this to the maintainers of " + listenerHolder.method.getName()); + main.logger().warning("Exception occurred during event handling:"); + main.logger().warning(writer.toString()); + main.logger().warning("Report this to the maintainers of " + listenerHolder.method.getName()); } } ); diff --git a/common/src/main/java/com/dfsek/terra/api/platform/handle/WorldHandle.java b/common/src/main/java/com/dfsek/terra/api/platform/handle/WorldHandle.java index 8e6f4e251..f4ce3096b 100644 --- a/common/src/main/java/com/dfsek/terra/api/platform/handle/WorldHandle.java +++ b/common/src/main/java/com/dfsek/terra/api/platform/handle/WorldHandle.java @@ -8,9 +8,13 @@ import com.dfsek.terra.api.platform.entity.EntityType; * Interface to be implemented for world manipulation. */ public interface WorldHandle { - void setBlockData(Block block, BlockData data, boolean physics); + default void setBlockData(Block block, BlockData data, boolean physics) { + block.setBlockData(data, physics); + } - BlockData getBlockData(Block block); + default BlockData getBlockData(Block block) { + return block.getBlockData(); + } BlockData createBlockData(String data); diff --git a/common/src/main/java/com/dfsek/terra/api/structures/loot/functions/EnchantFunction.java b/common/src/main/java/com/dfsek/terra/api/structures/loot/functions/EnchantFunction.java index 555f0cf21..ff19b24c1 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/loot/functions/EnchantFunction.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/loot/functions/EnchantFunction.java @@ -55,7 +55,7 @@ public class EnchantFunction implements LootFunction { try { meta.addEnchantment(chosen, FastMath.max(lvl, 1)); } catch(IllegalArgumentException e) { - main.getLogger().warning("Attempted to enchant " + original.getType() + " with " + chosen + " at level " + FastMath.max(lvl, 1) + ", but an unexpected exception occurred! Usually this is caused by a misbehaving enchantment plugin."); + main.logger().warning("Attempted to enchant " + original.getType() + " with " + chosen + " at level " + FastMath.max(lvl, 1) + ", but an unexpected exception occurred! Usually this is caused by a misbehaving enchantment plugin."); } } original.setItemMeta(meta); diff --git a/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java b/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java index c3d8a70fc..8d6795294 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java @@ -149,7 +149,7 @@ public class StructureScript { try { return !block.apply(arguments).getLevel().equals(Block.ReturnLevel.FAIL); } catch(RuntimeException e) { - main.getLogger().severe("Failed to generate structure at " + arguments.getBuffer().getOrigin() + ": " + e.getMessage()); + main.logger().severe("Failed to generate structure at " + arguments.getBuffer().getOrigin() + ": " + e.getMessage()); main.getDebugLogger().stack(e); return false; } diff --git a/common/src/main/java/com/dfsek/terra/api/structures/script/functions/LootFunction.java b/common/src/main/java/com/dfsek/terra/api/structures/script/functions/LootFunction.java index 09f1af284..353294c73 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/script/functions/LootFunction.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/script/functions/LootFunction.java @@ -45,7 +45,7 @@ public class LootFunction implements Function { LootTable table = registry.get(id); if(table == null) { - main.getLogger().severe("No such loot table " + id); + main.logger().severe("No such loot table " + id); return null; } diff --git a/common/src/main/java/com/dfsek/terra/api/structures/script/functions/StructureFunction.java b/common/src/main/java/com/dfsek/terra/api/structures/script/functions/StructureFunction.java index 6fdefff68..7b9b38830 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/script/functions/StructureFunction.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/script/functions/StructureFunction.java @@ -57,7 +57,7 @@ public class StructureFunction implements Function { String app = id.apply(implementationArguments, variableMap); StructureScript script = registry.get(app); if(script == null) { - main.getLogger().severe("No such structure " + app); + main.logger().severe("No such structure " + app); return null; } @@ -66,7 +66,7 @@ public class StructureFunction implements Function { try { rotation1 = Rotation.valueOf(rotString); } catch(IllegalArgumentException e) { - main.getLogger().severe("Invalid rotation " + rotString); + main.logger().severe("Invalid rotation " + rotString); return null; } diff --git a/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedLootApplication.java b/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedLootApplication.java index 482b242fd..34ef61853 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedLootApplication.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedLootApplication.java @@ -20,7 +20,7 @@ public class BufferedLootApplication implements BufferedItem { public void paste(Location origin) { BlockState data = origin.getBlock().getState(); if(!(data instanceof Container)) { - main.getLogger().severe("Failed to place loot at " + origin + "; block " + data + " is not container."); + main.logger().severe("Failed to place loot at " + origin + "; block " + data + " is not container."); return; } Container container = (Container) data; diff --git a/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedStateManipulator.java b/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedStateManipulator.java index ef3ef0501..c486e02d5 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedStateManipulator.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedStateManipulator.java @@ -20,7 +20,7 @@ public class BufferedStateManipulator implements BufferedItem { state.applyState(data); state.update(false); } catch(Exception e) { - main.getLogger().warning("Could not apply BlockState at " + origin + ": " + e.getMessage()); + main.logger().warning("Could not apply BlockState at " + origin + ": " + e.getMessage()); main.getDebugLogger().stack(e); } } diff --git a/common/src/main/java/com/dfsek/terra/api/util/DebugLogger.java b/common/src/main/java/com/dfsek/terra/api/util/logging/DebugLogger.java similarity index 90% rename from common/src/main/java/com/dfsek/terra/api/util/DebugLogger.java rename to common/src/main/java/com/dfsek/terra/api/util/logging/DebugLogger.java index 35604d620..5236401f9 100644 --- a/common/src/main/java/com/dfsek/terra/api/util/DebugLogger.java +++ b/common/src/main/java/com/dfsek/terra/api/util/logging/DebugLogger.java @@ -1,6 +1,4 @@ -package com.dfsek.terra.api.util; - -import java.util.logging.Logger; +package com.dfsek.terra.api.util.logging; public class DebugLogger { private final Logger logger; diff --git a/common/src/main/java/com/dfsek/terra/api/util/logging/JavaLogger.java b/common/src/main/java/com/dfsek/terra/api/util/logging/JavaLogger.java new file mode 100644 index 000000000..8a8a62e56 --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/util/logging/JavaLogger.java @@ -0,0 +1,24 @@ +package com.dfsek.terra.api.util.logging; + +public class JavaLogger implements Logger { + private final java.util.logging.Logger logger; + + public JavaLogger(java.util.logging.Logger logger) { + this.logger = 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); + } +} diff --git a/common/src/main/java/com/dfsek/terra/api/util/logging/Logger.java b/common/src/main/java/com/dfsek/terra/api/util/logging/Logger.java new file mode 100644 index 000000000..df812533f --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/util/logging/Logger.java @@ -0,0 +1,9 @@ +package com.dfsek.terra.api.util.logging; + +public interface Logger { + void info(String message); + + void warning(String message); + + void severe(String message); +} diff --git a/common/src/main/java/com/dfsek/terra/config/PluginConfig.java b/common/src/main/java/com/dfsek/terra/config/PluginConfig.java index b9815d4f1..e1112dcf4 100644 --- a/common/src/main/java/com/dfsek/terra/config/PluginConfig.java +++ b/common/src/main/java/com/dfsek/terra/config/PluginConfig.java @@ -7,6 +7,7 @@ import com.dfsek.tectonic.exception.ConfigException; import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.util.JarUtil; +import com.dfsek.terra.api.util.logging.Logger; import java.io.File; import java.io.FileInputStream; @@ -14,7 +15,6 @@ import java.io.IOException; import java.net.URISyntaxException; import java.time.Duration; import java.util.jar.JarFile; -import java.util.logging.Logger; @SuppressWarnings("FieldMayBeFinal") public class PluginConfig implements ConfigTemplate { @@ -63,7 +63,7 @@ public class PluginConfig implements ConfigTemplate { private int maxRecursion = 1000; public void load(TerraPlugin main) { - Logger logger = main.getLogger(); + Logger logger = main.logger(); logger.info("Loading config values"); try(FileInputStream file = new FileInputStream(new File(main.getDataFolder(), "config.yml"))) { ConfigLoader loader = new ConfigLoader(); diff --git a/common/src/main/java/com/dfsek/terra/config/lang/LangUtil.java b/common/src/main/java/com/dfsek/terra/config/lang/LangUtil.java index 2c8452d64..347a1e577 100644 --- a/common/src/main/java/com/dfsek/terra/config/lang/LangUtil.java +++ b/common/src/main/java/com/dfsek/terra/config/lang/LangUtil.java @@ -2,22 +2,20 @@ package com.dfsek.terra.config.lang; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.platform.CommandSender; +import com.dfsek.terra.api.util.logging.Logger; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.util.jar.JarFile; -import java.util.logging.Level; -import java.util.logging.Logger; import static com.dfsek.terra.api.util.JarUtil.copyResourcesToDirectory; public final class LangUtil { private static Language language; - private static Logger logger; public static void load(String langID, TerraPlugin main) { - logger = main.getLogger(); + Logger logger = main.logger(); File file = new File(main.getDataFolder(), "lang"); try(JarFile jar = new JarFile(new File(TerraPlugin.class.getProtectionDomain().getCodeSource().getLocation().toURI()))) { copyResourcesToDirectory(jar, "lang", file.toString()); @@ -41,10 +39,6 @@ public final class LangUtil { return language; } - public static void log(String messageID, Level level, String... args) { - language.getMessage(messageID).log(logger, level, args); - } - public static void send(String messageID, CommandSender sender, String... args) { language.getMessage(messageID).send(sender, args); } diff --git a/common/src/main/java/com/dfsek/terra/config/pack/ConfigPack.java b/common/src/main/java/com/dfsek/terra/config/pack/ConfigPack.java index 2e88fda2b..dafcc73e4 100644 --- a/common/src/main/java/com/dfsek/terra/config/pack/ConfigPack.java +++ b/common/src/main/java/com/dfsek/terra/config/pack/ConfigPack.java @@ -34,7 +34,6 @@ import com.dfsek.terra.config.factories.TreeFactory; import com.dfsek.terra.config.fileloaders.FolderLoader; import com.dfsek.terra.config.fileloaders.Loader; import com.dfsek.terra.config.fileloaders.ZIPLoader; -import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.loaders.config.BufferedImageLoader; import com.dfsek.terra.config.loaders.config.biome.templates.source.BiomePipelineTemplate; import com.dfsek.terra.config.loaders.config.biome.templates.source.ImageProviderTemplate; @@ -79,7 +78,6 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Supplier; -import java.util.logging.Level; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -136,7 +134,7 @@ public class ConfigPack implements LoaderRegistrar { try { selfLoader.load(template, new FileInputStream(pack)); - main.getLogger().info("Loading config pack \"" + template.getID() + "\""); + main.logger().info("Loading config pack \"" + template.getID() + "\""); load(l, main); ConfigPackPostTemplate packPostTemplate = new ConfigPackPostTemplate(); @@ -147,7 +145,7 @@ public class ConfigPack implements LoaderRegistrar { throw new LoadException("No pack.yml file found in " + folder.getAbsolutePath(), e); } } catch(Exception e) { - main.getLogger().severe("Failed to load config pack from folder \"" + folder.getAbsolutePath() + "\""); + main.logger().severe("Failed to load config pack from folder \"" + folder.getAbsolutePath() + "\""); throw e; } } @@ -178,7 +176,7 @@ public class ConfigPack implements LoaderRegistrar { if(pack == null) throw new LoadException("No pack.yml file found in " + file.getName()); selfLoader.load(template, file.getInputStream(pack)); - main.getLogger().info("Loading config pack \"" + template.getID() + "\""); + main.logger().info("Loading config pack \"" + template.getID() + "\""); load(l, main); @@ -191,7 +189,7 @@ public class ConfigPack implements LoaderRegistrar { throw new LoadException("Unable to load pack.yml from ZIP file", e); } } catch(Exception e) { - main.getLogger().severe("Failed to load config pack from ZIP archive \"" + file.getName() + "\""); + main.logger().severe("Failed to load config pack from ZIP archive \"" + file.getName() + "\""); throw e; } } @@ -236,7 +234,7 @@ public class ConfigPack implements LoaderRegistrar { .open("biomes", ".yml").then(streams -> buildAll(new BiomeFactory(this), biomeRegistry, abstractConfigLoader.load(streams, () -> new BiomeTemplate(this, main)), main)).close(); main.getEventManager().callEvent(new ConfigPackPostLoadEvent(this)); - LangUtil.log("config-pack.loaded", Level.INFO, template.getID(), String.valueOf((System.nanoTime() - start) / 1000000D), template.getAuthor(), template.getVersion()); + main.logger().info("Loaded config pack \"" + template.getID() + "\" v" + template.getVersion() + " by " + template.getAuthor() + " in " + (System.nanoTime() - start) / 1000000D + "ms."); } public TerraBiome getBiome(String id) { diff --git a/common/src/main/java/com/dfsek/terra/registry/config/FloraRegistry.java b/common/src/main/java/com/dfsek/terra/registry/config/FloraRegistry.java index 5a3ce612b..71fd680cd 100644 --- a/common/src/main/java/com/dfsek/terra/registry/config/FloraRegistry.java +++ b/common/src/main/java/com/dfsek/terra/registry/config/FloraRegistry.java @@ -59,7 +59,7 @@ public class FloraRegistry extends OpenRegistry { try { add(id, flora.call()); } catch(Exception e) { - main.getLogger().warning("Failed to load Flora item: " + id + ": " + e.getMessage()); + main.logger().warning("Failed to load Flora item: " + id + ": " + e.getMessage()); } } diff --git a/common/src/main/java/com/dfsek/terra/registry/config/TreeRegistry.java b/common/src/main/java/com/dfsek/terra/registry/config/TreeRegistry.java index fe5cddc6d..b786c64f4 100644 --- a/common/src/main/java/com/dfsek/terra/registry/config/TreeRegistry.java +++ b/common/src/main/java/com/dfsek/terra/registry/config/TreeRegistry.java @@ -39,7 +39,7 @@ public class TreeRegistry extends OpenRegistry { try { add(id, new FractalTreeHolder(value)); } catch(Exception e) { - main.getLogger().warning("Unable to load tree " + id + ": " + e.getMessage()); + main.logger().warning("Unable to load tree " + id + ": " + e.getMessage()); } } diff --git a/common/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java b/common/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java index 6f8ae2663..9ee605061 100644 --- a/common/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java +++ b/common/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java @@ -35,7 +35,7 @@ public class AddonRegistry extends OpenRegistry { public boolean add(String identifier, TerraAddon addon) { if(contains(identifier)) throw new IllegalArgumentException("Addon " + identifier + " is already registered."); addon.initialize(); - main.getLogger().info("Loaded addon " + addon.getName() + " v" + addon.getVersion() + ", by " + addon.getAuthor()); + main.logger().info("Loaded addon " + addon.getName() + " v" + addon.getVersion() + ", by " + addon.getAuthor()); return super.add(identifier, addon); } @@ -56,7 +56,7 @@ public class AddonRegistry extends OpenRegistry { try { for(File jar : addonsFolder.listFiles(file -> file.getName().endsWith(".jar"))) { - main.getLogger().info("Loading Addon(s) from: " + jar.getName()); + main.logger().info("Loading Addon(s) from: " + jar.getName()); for(Class addonClass : AddonClassLoader.fetchAddonClasses(jar)) { pool.add(new PreLoadAddon(addonClass)); } @@ -95,9 +95,9 @@ public class AddonRegistry extends OpenRegistry { addChecked(loadedAddon.getName(), loadedAddon); } catch(DuplicateEntryException e) { valid = false; - main.getLogger().severe("Duplicate addon ID; addon with ID " + loadedAddon.getName() + " is already loaded."); - main.getLogger().severe("Existing addon class: " + get(loadedAddon.getName()).getClass().getCanonicalName()); - main.getLogger().severe("Duplicate addon class: " + addonClass.getCanonicalName()); + main.logger().severe("Duplicate addon ID; addon with ID " + loadedAddon.getName() + " is already loaded."); + main.logger().severe("Existing addon class: " + get(loadedAddon.getName()).getClass().getCanonicalName()); + main.logger().severe("Duplicate addon class: " + addonClass.getCanonicalName()); } } } catch(AddonLoadException | IOException e) { diff --git a/common/src/test/java/biome/DistributionTest.java b/common/src/test/java/biome/DistributionTest.java index 2c763f80a..3a6d8d6df 100644 --- a/common/src/test/java/biome/DistributionTest.java +++ b/common/src/test/java/biome/DistributionTest.java @@ -18,8 +18,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.collections.ProbabilityCollection; +import com.dfsek.terra.api.util.logging.DebugLogger; +import com.dfsek.terra.api.util.logging.JavaLogger; import com.dfsek.terra.api.util.seeded.NoiseSeeded; import com.dfsek.terra.api.world.biome.Generator; import com.dfsek.terra.api.world.biome.TerraBiome; @@ -70,8 +71,8 @@ public class DistributionTest { } @Override - public Logger getLogger() { - return Logger.getLogger("Terra"); + public com.dfsek.terra.api.util.logging.Logger logger() { + return new JavaLogger(Logger.getLogger("Terra")); } @Override @@ -126,7 +127,7 @@ public class DistributionTest { @Override public DebugLogger getDebugLogger() { - return new DebugLogger(Logger.getLogger("Terra")); + return new DebugLogger(new JavaLogger(Logger.getLogger("Terra"))); } @Override diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java index 785f85215..57f75d073 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java @@ -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() { diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java index 20e283332..278583560 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java @@ -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(); } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/PaperListener.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/PaperListener.java index fd79cde9b..94370dfb0 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/PaperListener.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/PaperListener.java @@ -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 + "\""); } } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java index 01748e1c5..87fb29b53 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java @@ -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); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index 4c1aabf52..1e99898bb 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -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"); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java index e595bbcb4..d28a1cde9 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java @@ -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; diff --git a/platforms/region/src/main/java/com/dfsek/terra/StandalonePlugin.java b/platforms/region/src/main/java/com/dfsek/terra/StandalonePlugin.java index 6a8762a12..a1dd2e4c9 100644 --- a/platforms/region/src/main/java/com/dfsek/terra/StandalonePlugin.java +++ b/platforms/region/src/main/java/com/dfsek/terra/StandalonePlugin.java @@ -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 diff --git a/platforms/sponge/build.gradle.kts b/platforms/sponge/build.gradle.kts new file mode 100644 index 000000000..9880b8c93 --- /dev/null +++ b/platforms/sponge/build.gradle.kts @@ -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" + } +} \ No newline at end of file diff --git a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/SpongeAdapter.java b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/SpongeAdapter.java new file mode 100644 index 000000000..781b5f91e --- /dev/null +++ b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/SpongeAdapter.java @@ -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(); + } +} diff --git a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/SpongeLogger.java b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/SpongeLogger.java new file mode 100644 index 000000000..1ead85e8d --- /dev/null +++ b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/SpongeLogger.java @@ -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); + } +} diff --git a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraSpongePlugin.java b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraSpongePlugin.java new file mode 100644 index 000000000..78baf45d5 --- /dev/null +++ b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraSpongePlugin.java @@ -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 packCheckedRegistry = new CheckedRegistry<>(configRegistry); + private final PluginConfig config = new PluginConfig(); + private final AddonRegistry addonRegistry = new AddonRegistry(this); + private final LockedRegistry 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 getConfigRegistry() { + return packCheckedRegistry; + } + + @Override + public LockedRegistry 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; + } +} diff --git a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/world/SpongeWorldHandle.java b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/world/SpongeWorldHandle.java new file mode 100644 index 000000000..422229ba9 --- /dev/null +++ b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/world/SpongeWorldHandle.java @@ -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; + } +} diff --git a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/world/block/data/SpongeBlockData.java b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/world/block/data/SpongeBlockData.java new file mode 100644 index 000000000..9dc5dd3bd --- /dev/null +++ b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/world/block/data/SpongeBlockData.java @@ -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; + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 682f7912b..303d70045 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,6 +12,7 @@ include("common") include("platforms:bukkit") include("platforms:fabric") include("platforms:region") +include("platforms:sponge") pluginManagement { repositories {