From a776ecfc2b6d543a894425ff0c194040bdbb42a5 Mon Sep 17 00:00:00 2001 From: solonovamax Date: Mon, 30 Aug 2021 19:53:35 -0400 Subject: [PATCH 01/19] Migrate logging to SLF4J Signed-off-by: solonovamax --- .../chunkgenerator/BiomePaletteTemplate.java | 2 +- .../generators/NoiseChunkGenerator3D.java | 6 ++- .../structure/StructureExportCommand.java | 47 +++++++++--------- .../loot/functions/EnchantFunction.java | 9 ++-- .../dfsek/terra/addons/yaml/YamlAddon.java | 6 ++- .../buffer/items/BufferedBlock.java | 8 +++- .../buffer/items/BufferedLootApplication.java | 15 +++--- .../items/BufferedStateManipulator.java | 8 +++- .../terrascript/script/StructureScript.java | 9 ++-- .../script/functions/LootFunction.java | 6 ++- .../terrascript/tokenizer/Lookahead.java | 7 ++- common/api/build.gradle.kts | 2 + .../main/java/com/dfsek/terra/api/Logger.java | 13 ----- .../java/com/dfsek/terra/api/TerraPlugin.java | 4 -- .../com/dfsek/terra/AbstractTerraPlugin.java | 48 +++++++------------ .../java/com/dfsek/terra/InternalAddon.java | 9 +++- .../profiler/ProfileQueryCommand.java | 7 ++- .../dfsek/terra/config/PluginConfigImpl.java | 21 ++++---- .../config/fileloaders/FolderLoader.java | 9 +++- .../terra/config/fileloaders/LoaderImpl.java | 6 ++- .../terra/config/fileloaders/ZIPLoader.java | 7 ++- .../com/dfsek/terra/config/lang/LangUtil.java | 13 ++--- .../terra/config/pack/ConfigPackImpl.java | 38 +++++++-------- .../event/FunctionalEventHandlerImpl.java | 18 +++---- .../registry/config/ConfigTypeRegistry.java | 9 +++- .../terra/registry/master/AddonRegistry.java | 30 ++++++++---- .../terra/registry/master/ConfigRegistry.java | 10 ++-- .../dfsek/terra/util/logging/DebugLogger.java | 37 -------------- .../dfsek/terra/util/logging/JavaLogger.java | 27 ----------- platforms/bukkit/build.gradle.kts | 2 + .../dfsek/terra/bukkit/TerraBukkitPlugin.java | 44 +++++++++-------- .../dfsek/terra/bukkit/TerraPluginImpl.java | 7 --- .../bukkit/command/BukkitCommandAdapter.java | 6 ++- .../BukkitChunkGeneratorWrapper.java | 17 ++++--- .../bukkit/listeners/SpigotListener.java | 47 +++++++++++------- platforms/fabric/build.gradle.kts | 2 + .../com/dfsek/terra/fabric/FabricAddon.java | 15 +++--- .../dfsek/terra/fabric/TerraPluginImpl.java | 23 --------- .../FabricChunkGeneratorWrapper.java | 6 ++- .../terra/fabric/mixin/ServerWorldMixin.java | 7 ++- platforms/sponge/build.gradle.kts | 3 ++ .../dfsek/terra/sponge/TerraPluginImpl.java | 21 -------- 42 files changed, 306 insertions(+), 325 deletions(-) delete mode 100644 common/api/src/main/java/com/dfsek/terra/api/Logger.java delete mode 100644 common/implementation/src/main/java/com/dfsek/terra/util/logging/DebugLogger.java delete mode 100644 common/implementation/src/main/java/com/dfsek/terra/util/logging/JavaLogger.java diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/BiomePaletteTemplate.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/BiomePaletteTemplate.java index b0c797800..037bcde3f 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/BiomePaletteTemplate.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/BiomePaletteTemplate.java @@ -14,7 +14,7 @@ import com.dfsek.terra.api.world.generator.Palette; public class BiomePaletteTemplate implements ObjectTemplate { @Value("slant") @Default - private final @Meta SlantHolder slant; + private @Meta SlantHolder slant; @Value("palette") private @Meta PaletteHolder palette; @Value("ocean.level") diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/generators/NoiseChunkGenerator3D.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/generators/NoiseChunkGenerator3D.java index f76391908..d8bf28a08 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/generators/NoiseChunkGenerator3D.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/generators/NoiseChunkGenerator3D.java @@ -2,6 +2,8 @@ package com.dfsek.terra.addons.chunkgenerator.generation.generators; import net.jafama.FastMath; import org.jetbrains.annotations.NotNull; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; @@ -30,6 +32,8 @@ import com.dfsek.terra.api.world.generator.Sampler; public class NoiseChunkGenerator3D implements ChunkGenerator { + private static final Logger logger = LoggerFactory.getLogger(NoiseChunkGenerator3D.class); + private final ConfigPack configPack; private final TerraPlugin main; private final List generationStages = new ArrayList<>(); @@ -87,7 +91,7 @@ public class NoiseChunkGenerator3D implements ChunkGenerator { PaletteInfo paletteInfo = biome.getContext().get(PaletteInfo.class); if(paletteInfo == null) { - main.logger().info("null palette: " + biome.getID()); + logger.info("null palette: {}", biome.getID()); } GenerationSettings generationSettings = biome.getGenerator(); diff --git a/common/addons/config-structure/src/main/java/com/dfsek/terra/addons/structure/command/structure/StructureExportCommand.java b/common/addons/config-structure/src/main/java/com/dfsek/terra/addons/structure/command/structure/StructureExportCommand.java index a1f7f89c1..a40627ae1 100644 --- a/common/addons/config-structure/src/main/java/com/dfsek/terra/addons/structure/command/structure/StructureExportCommand.java +++ b/common/addons/config-structure/src/main/java/com/dfsek/terra/addons/structure/command/structure/StructureExportCommand.java @@ -1,5 +1,8 @@ package com.dfsek.terra.addons.structure.command.structure; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; @@ -28,6 +31,8 @@ import com.dfsek.terra.api.vector.Vector3; @DebugCommand @Command(arguments = @Argument("id"), usage = "/terra structure export ") public class StructureExportCommand implements CommandTemplate { + private static final Logger logger = LoggerFactory.getLogger(StructureExportCommand.class); + @Inject private TerraPlugin main; @@ -38,10 +43,10 @@ public class StructureExportCommand implements CommandTemplate { public void execute(CommandSender sender) { Player player = (Player) sender; - Pair l = main.getWorldHandle().getSelectedLocation(player); + Pair area = main.getWorldHandle().getSelectedLocation(player); - Vector3 l1 = l.getLeft(); - Vector3 l2 = l.getRight(); + Vector3 firstCorner = area.getLeft(); + Vector3 secondCorner = area.getRight(); StringBuilder scriptBuilder = new StringBuilder("id \"" + id + "\";\nnum y = 0;\n"); @@ -49,38 +54,36 @@ public class StructureExportCommand implements CommandTemplate { int centerY = 0; int centerZ = 0; - for(int x = l1.getBlockX(); x <= l2.getBlockX(); x++) { - for(int y = l1.getBlockY(); y <= l2.getBlockY(); y++) { - for(int z = l1.getBlockZ(); z <= l2.getBlockZ(); z++) { + for(int x = firstCorner.getBlockX(); x <= secondCorner.getBlockX(); x++) { + for(int y = firstCorner.getBlockY(); y <= secondCorner.getBlockY(); y++) { + for(int z = firstCorner.getBlockZ(); z <= secondCorner.getBlockZ(); z++) { BlockEntity state = player.world().getBlockState(x, y, z); - if(state instanceof Sign) { - Sign sign = (Sign) state; - if(sign.getLine(0).equals("[TERRA]") && sign.getLine(1).equals("[CENTER]")) { - centerX = x - l1.getBlockX(); - centerY = y - l1.getBlockY(); - centerZ = z - l1.getBlockZ(); + if(state instanceof Sign sign) { + if("[TERRA]".equals(sign.getLine(0)) && "[CENTER]".equals(sign.getLine(1))) { + centerX = x - firstCorner.getBlockX(); + centerY = y - firstCorner.getBlockY(); + centerZ = z - firstCorner.getBlockZ(); } } } } } - for(int x = l1.getBlockX(); x <= l2.getBlockX(); x++) { - for(int y = l1.getBlockY(); y <= l2.getBlockY(); y++) { - for(int z = l1.getBlockZ(); z <= l2.getBlockZ(); z++) { + for(int x = firstCorner.getBlockX(); x <= secondCorner.getBlockX(); x++) { + for(int y = firstCorner.getBlockY(); y <= secondCorner.getBlockY(); y++) { + for(int z = firstCorner.getBlockZ(); z <= secondCorner.getBlockZ(); z++) { BlockState data = player.world().getBlockData(x, y, z); if(data.isStructureVoid()) continue; BlockEntity state = player.world().getBlockState(x, y, z); - if(state instanceof Sign) { - Sign sign = (Sign) state; - if(sign.getLine(0).equals("[TERRA]")) { + if(state instanceof Sign sign) { + if("[TERRA]".equals(sign.getLine(0))) { data = main.getWorldHandle().createBlockData(sign.getLine(2) + sign.getLine(3)); } } if(!data.isStructureVoid()) { - scriptBuilder.append("block(").append(x - l1.getBlockX() - centerX).append(", y + ").append( - y - l1.getBlockY() - centerY).append(", ").append(z - l1.getBlockZ() - centerZ).append(", ") + scriptBuilder.append("block(").append(x - firstCorner.getBlockX() - centerX).append(", y + ").append( + y - firstCorner.getBlockY() - centerY).append(", ").append(z - firstCorner.getBlockZ() - centerZ).append(", ") .append("\""); scriptBuilder.append(data.getAsString()).append("\");\n"); } @@ -93,12 +96,12 @@ public class StructureExportCommand implements CommandTemplate { file.getParentFile().mkdirs(); file.createNewFile(); } catch(IOException e) { - e.printStackTrace(); + logger.error("Error creating file to export", e); } try(BufferedWriter writer = new BufferedWriter(new FileWriter(file))) { writer.write(scriptBuilder.toString()); } catch(IOException e) { - e.printStackTrace(); + logger.error("Error writing script file", e); } sender.sendMessage("Exported structure to " + file.getAbsolutePath()); diff --git a/common/addons/config-structure/src/main/java/com/dfsek/terra/addons/structure/structures/loot/functions/EnchantFunction.java b/common/addons/config-structure/src/main/java/com/dfsek/terra/addons/structure/structures/loot/functions/EnchantFunction.java index b64b1808d..d1835c0c6 100644 --- a/common/addons/config-structure/src/main/java/com/dfsek/terra/addons/structure/structures/loot/functions/EnchantFunction.java +++ b/common/addons/config-structure/src/main/java/com/dfsek/terra/addons/structure/structures/loot/functions/EnchantFunction.java @@ -2,6 +2,8 @@ package com.dfsek.terra.addons.structure.structures.loot.functions; import net.jafama.FastMath; import org.json.simple.JSONArray; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Collections; @@ -15,6 +17,8 @@ import com.dfsek.terra.api.inventory.item.ItemMeta; public class EnchantFunction implements LootFunction { + private static final Logger logger = LoggerFactory.getLogger(EnchantFunction.class); + private final int min; private final int max; private final JSONArray disabled; @@ -60,9 +64,8 @@ public class EnchantFunction implements LootFunction { try { meta.addEnchantment(chosen, FastMath.max(lvl, 1)); } catch(IllegalArgumentException e) { - 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."); + logger.warn("Attempted to enchant {} with {} at level {}, but an unexpected exception occurred! Usually this is caused " + + "by a misbehaving enchantment plugin.", original.getType(), chosen, FastMath.max(lvl, 1)); } } original.setItemMeta(meta); diff --git a/common/addons/language-yaml/src/main/java/com/dfsek/terra/addons/yaml/YamlAddon.java b/common/addons/language-yaml/src/main/java/com/dfsek/terra/addons/yaml/YamlAddon.java index 53ed6b2b4..7b832a86d 100644 --- a/common/addons/language-yaml/src/main/java/com/dfsek/terra/addons/yaml/YamlAddon.java +++ b/common/addons/language-yaml/src/main/java/com/dfsek/terra/addons/yaml/YamlAddon.java @@ -1,6 +1,8 @@ package com.dfsek.terra.addons.yaml; import com.dfsek.tectonic.yaml.YamlConfiguration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.addon.TerraAddon; @@ -16,6 +18,8 @@ import com.dfsek.terra.api.injection.annotations.Inject; @Version("1.0.0") @Author("Terra") public class YamlAddon extends TerraAddon { + private static final Logger logger = LoggerFactory.getLogger(YamlAddon.class); + @Inject private TerraPlugin main; @@ -25,7 +29,7 @@ public class YamlAddon extends TerraAddon { .getHandler(FunctionalEventHandler.class) .register(this, ConfigurationDiscoveryEvent.class) .then(event -> event.getLoader().open("", ".yml").thenEntries(entries -> entries.forEach(entry -> { - main.getDebugLogger().info("Discovered config " + entry.getKey()); + logger.info("Discovered config {}", entry.getKey()); event.register(entry.getKey(), new YamlConfiguration(entry.getValue(), entry.getKey())); }))) .failThrough(); diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/buffer/items/BufferedBlock.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/buffer/items/BufferedBlock.java index 6ea90fe5b..c88be8222 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/buffer/items/BufferedBlock.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/buffer/items/BufferedBlock.java @@ -1,5 +1,8 @@ package com.dfsek.terra.addons.terrascript.buffer.items; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.block.state.properties.base.Properties; @@ -9,6 +12,8 @@ import com.dfsek.terra.api.world.World; public class BufferedBlock implements BufferedItem { + private static final Logger logger = LoggerFactory.getLogger(BufferedBlock.class); + private final BlockState data; private final boolean overwrite; private final TerraPlugin main; @@ -32,8 +37,7 @@ public class BufferedBlock implements BufferedItem { world.setBlockData(origin, data); } } catch(RuntimeException e) { - main.logger().severe("Failed to place block at location " + origin + ": " + e.getMessage()); - main.getDebugLogger().stack(e); + logger.error("Failed to place block at location {}", origin, e); } } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/buffer/items/BufferedLootApplication.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/buffer/items/BufferedLootApplication.java index c6e350f3e..0d102d693 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/buffer/items/BufferedLootApplication.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/buffer/items/BufferedLootApplication.java @@ -1,5 +1,8 @@ package com.dfsek.terra.addons.terrascript.buffer.items; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.Random; import com.dfsek.terra.addons.terrascript.script.StructureScript; @@ -14,6 +17,8 @@ import com.dfsek.terra.api.world.World; public class BufferedLootApplication implements BufferedItem { + private static final Logger logger = LoggerFactory.getLogger(BufferedLootApplication.class); + private final LootTable table; private final TerraPlugin main; private final StructureScript structure; @@ -28,12 +33,11 @@ public class BufferedLootApplication implements BufferedItem { public void paste(Vector3 origin, World world) { try { BlockEntity data = world.getBlockState(origin); - if(!(data instanceof Container)) { - main.logger().severe("Failed to place loot at " + origin + "; block " + data + " is not container."); + if(!(data instanceof Container container)) { + logger.error("Failed to place loot at {}; block {} is not container.", origin, data); return; } - Container container = (Container) data; - + LootPopulateEvent event = new LootPopulateEvent(container, table, world.getConfig().getPack(), structure); main.getEventManager().callEvent(event); if(event.isCancelled()) return; @@ -41,8 +45,7 @@ public class BufferedLootApplication implements BufferedItem { event.getTable().fillInventory(container.getInventory(), new Random(origin.hashCode())); data.update(false); } catch(Exception e) { - main.logger().warning("Could not apply loot at " + origin + ": " + e.getMessage()); - e.printStackTrace(); + logger.warn("Could not apply loot at {}", origin, e); } } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/buffer/items/BufferedStateManipulator.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/buffer/items/BufferedStateManipulator.java index 7181e1f47..dadc7177a 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/buffer/items/BufferedStateManipulator.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/buffer/items/BufferedStateManipulator.java @@ -1,5 +1,8 @@ package com.dfsek.terra.addons.terrascript.buffer.items; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.block.entity.BlockEntity; import com.dfsek.terra.api.structure.buffer.BufferedItem; @@ -8,6 +11,8 @@ import com.dfsek.terra.api.world.World; public class BufferedStateManipulator implements BufferedItem { + private static final Logger logger = LoggerFactory.getLogger(BufferedStateManipulator.class); + private final TerraPlugin main; private final String data; @@ -23,8 +28,7 @@ public class BufferedStateManipulator implements BufferedItem { state.applyState(data); state.update(false); } catch(Exception e) { - main.logger().warning("Could not apply BlockState at " + origin + ": " + e.getMessage()); - e.printStackTrace(); + logger.warn("Could not apply BlockState at {}", origin, e); } } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/StructureScript.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/StructureScript.java index ee44b457f..6d99bfbc0 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/StructureScript.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/StructureScript.java @@ -4,6 +4,8 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import net.jafama.FastMath; import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.InputStream; @@ -49,6 +51,8 @@ import com.dfsek.terra.api.world.World; public class StructureScript implements Structure { + private static final Logger logger = LoggerFactory.getLogger(StructureScript.class); + private final Block block; private final String id; private final Cache cache; @@ -93,7 +97,7 @@ public class StructureScript implements Structure { .registerFunction("rotationDegrees", new ZeroArgFunctionBuilder<>(arguments -> arguments.getRotation().getDegrees(), Returnable.ReturnType.NUMBER)) .registerFunction("print", - new UnaryStringFunctionBuilder(string -> main.getDebugLogger().info("[" + tempID + "] " + string))) + new UnaryStringFunctionBuilder(string -> logger.info("[{}] {}", tempID, string))) .registerFunction("abs", new UnaryNumberFunctionBuilder(number -> FastMath.abs(number.doubleValue()))) .registerFunction("pow", new BinaryNumberFunctionBuilder( (number, number2) -> FastMath.pow(number.doubleValue(), number2.doubleValue()))) @@ -175,8 +179,7 @@ public class StructureScript implements Structure { try { return block.apply(arguments).getLevel() != Block.ReturnLevel.FAIL; } catch(RuntimeException e) { - main.logger().severe("Failed to generate structure at " + arguments.getBuffer().getOrigin() + ": " + e.getMessage()); - main.getDebugLogger().stack(e); + logger.error("Failed to generate structure at {}: {}", arguments.getBuffer().getOrigin(), e.getMessage(), e); return false; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/LootFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/LootFunction.java index 02b230c80..9f4d5a5b6 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/LootFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/LootFunction.java @@ -1,6 +1,8 @@ package com.dfsek.terra.addons.terrascript.script.functions; import net.jafama.FastMath; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.Map; @@ -21,6 +23,8 @@ import com.dfsek.terra.api.vector.Vector3; public class LootFunction implements Function { + private static final Logger logger = LoggerFactory.getLogger(LootFunction.class); + private final Registry registry; private final Returnable data; private final Returnable x, y, z; @@ -52,7 +56,7 @@ public class LootFunction implements Function { LootTable table = registry.get(id); if(table == null) { - main.logger().severe("No such loot table " + id); + logger.error("No such loot table {}", id); return null; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Lookahead.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Lookahead.java index e65c6476f..98933e70a 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Lookahead.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Lookahead.java @@ -1,6 +1,9 @@ package com.dfsek.terra.addons.terrascript.tokenizer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; import java.io.Reader; import java.util.ArrayList; @@ -11,6 +14,8 @@ import java.util.List; * Stream-like data structure that allows viewing future elements without consuming current. */ public class Lookahead { + private static final Logger logger = LoggerFactory.getLogger(Lookahead.class); + private final List buffer = new ArrayList<>(); private final Reader input; private int index = 0; @@ -108,7 +113,7 @@ public class Lookahead { index++; return new Char((char) c, line, index); } catch(IOException e) { - e.printStackTrace(); + logger.error("Error while fetching next token", e); return null; } } diff --git a/common/api/build.gradle.kts b/common/api/build.gradle.kts index dabfe2ff0..e0460312c 100644 --- a/common/api/build.gradle.kts +++ b/common/api/build.gradle.kts @@ -4,5 +4,7 @@ dependencies { "shadedApi"("com.dfsek.tectonic:common:2.1.2") "shadedApi"("net.jafama:jafama:2.3.2") + + "shadedApi"("org.slf4j:slf4j-api:1.7.32") } diff --git a/common/api/src/main/java/com/dfsek/terra/api/Logger.java b/common/api/src/main/java/com/dfsek/terra/api/Logger.java deleted file mode 100644 index d4815ee43..000000000 --- a/common/api/src/main/java/com/dfsek/terra/api/Logger.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.dfsek.terra.api; - -public interface Logger { - void info(String message); - - void warning(String message); - - void severe(String message); - - default void stack(Throwable t) { - t.printStackTrace(); - } -} diff --git a/common/api/src/main/java/com/dfsek/terra/api/TerraPlugin.java b/common/api/src/main/java/com/dfsek/terra/api/TerraPlugin.java index eb36c835a..482a99d04 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/TerraPlugin.java +++ b/common/api/src/main/java/com/dfsek/terra/api/TerraPlugin.java @@ -19,8 +19,6 @@ import com.dfsek.terra.api.tectonic.LoaderRegistrar; * Represents a Terra mod/plugin instance. */ public interface TerraPlugin extends LoaderRegistrar { - Logger logger(); - boolean reload(); String platformName(); @@ -50,8 +48,6 @@ public interface TerraPlugin extends LoaderRegistrar { ItemHandle getItemHandle(); - Logger getDebugLogger(); - EventManager getEventManager(); default String getVersion() { diff --git a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java index cf85d1458..8f23509bd 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java +++ b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java @@ -3,6 +3,8 @@ package com.dfsek.terra; import com.dfsek.tectonic.loading.TypeRegistry; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.yaml.snakeyaml.Yaml; import java.io.File; @@ -16,7 +18,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import com.dfsek.terra.api.Logger; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.command.CommandManager; @@ -28,7 +29,6 @@ import com.dfsek.terra.api.lang.Language; import com.dfsek.terra.api.profiler.Profiler; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.Registry; -import com.dfsek.terra.api.util.generic.Lazy; import com.dfsek.terra.api.util.mutable.MutableBoolean; import com.dfsek.terra.commands.CommandUtil; import com.dfsek.terra.commands.TerraCommandManager; @@ -40,7 +40,6 @@ import com.dfsek.terra.profiler.ProfilerImpl; import com.dfsek.terra.registry.CheckedRegistryImpl; import com.dfsek.terra.registry.master.AddonRegistry; import com.dfsek.terra.registry.master.ConfigRegistry; -import com.dfsek.terra.util.logging.DebugLogger; /** @@ -49,9 +48,10 @@ import com.dfsek.terra.util.logging.DebugLogger; * Implementations must invoke {@link #load()} in their constructors. */ public abstract class AbstractTerraPlugin implements TerraPlugin { + private static final Logger logger = LoggerFactory.getLogger(AbstractTerraPlugin.class); + private static final MutableBoolean LOADED = new MutableBoolean(false); private final EventManager eventManager = new EventManagerImpl(this); - private final ConfigRegistry configRegistry = new ConfigRegistry(); private final CheckedRegistry checkedConfigRegistry = new CheckedRegistryImpl<>(configRegistry); @@ -66,19 +66,11 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { private final AddonRegistry addonRegistry = new AddonRegistry(this); - private final Lazy logger = Lazy.lazy(() -> createLogger()); - private final Lazy debugLogger = Lazy.lazy(() -> new DebugLogger(logger())); - @Override public void register(TypeRegistry registry) { loaders.register(registry); } - @Override - public Logger logger() { - return logger.value(); - } - @Override public PluginConfig getTerraConfig() { return config; @@ -99,11 +91,6 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { return addonRegistry; } - @Override - public Logger getDebugLogger() { - return debugLogger.value(); - } - @Override public EventManager getEventManager() { return eventManager; @@ -122,7 +109,7 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { } LOADED.set(true); - logger().info("Initializing Terra..."); + logger.info("Initializing Terra..."); getPlatformAddon().ifPresent(addonRegistry::register); @@ -132,7 +119,7 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { FileUtils.copyInputStreamToFile(stream, configFile); } } catch(IOException e) { - e.printStackTrace(); + logger.error("Error loading config.yml resource from jar", e); } @@ -143,16 +130,17 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { if(config.dumpDefaultConfig()) { try(InputStream resourcesConfig = getClass().getResourceAsStream("/resources.yml")) { if(resourcesConfig == null) { - logger().info("No resources config found. Skipping resource dumping."); + logger.info("No resources config found. Skipping resource dumping."); return; } String resourceYaml = IOUtils.toString(resourcesConfig, StandardCharsets.UTF_8); Map> resources = new Yaml().load(resourceYaml); resources.forEach((dir, entries) -> entries.forEach(entry -> { - String resourcePath = dir + "/" + entry; + String resourcePath = String.format("%s/%s", dir, entry); File resource = new File(getDataFolder(), resourcePath); - if(resource.exists()) return; // dont overwrite - logger().info("Dumping resource " + resource.getAbsolutePath()); + if(resource.exists()) + return; // dont overwrite + logger.info("Dumping resource {}...", resource.getAbsolutePath()); try { resource.getParentFile().mkdirs(); resource.createNewFile(); @@ -167,14 +155,12 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { } })); } catch(IOException e) { - e.printStackTrace(); + logger.error("Error while dumping resources...", e); } } else { - getDebugLogger().info("Skipping resource dumping."); + logger.info("Skipping resource dumping."); } - debugLogger.value().setDebug(config.isDebugLogging()); // enable debug logger if applicable - if(config.isDebugProfiler()) { // if debug.profiler is enabled, start profiling profiler.start(); } @@ -184,20 +170,18 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { if(!addonRegistry.loadAll(getClass().getClassLoader())) { // load all addons throw new IllegalStateException("Failed to load addons. Please correct addon installations to continue."); } - logger().info("Loaded addons."); + logger.info("Loaded addons."); try { CommandUtil.registerAll(manager); } catch(MalformedCommandException e) { - e.printStackTrace(); // TODO do something here even though this should literally never happen + logger.error("Error registering commands", e); } - logger().info("Finished initialization."); + logger.info("Finished initialization."); } - protected abstract Logger createLogger(); - protected Optional getPlatformAddon() { return Optional.empty(); } diff --git a/common/implementation/src/main/java/com/dfsek/terra/InternalAddon.java b/common/implementation/src/main/java/com/dfsek/terra/InternalAddon.java index f212823cb..983a4723d 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/InternalAddon.java +++ b/common/implementation/src/main/java/com/dfsek/terra/InternalAddon.java @@ -1,5 +1,8 @@ package com.dfsek.terra; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.addon.annotations.Addon; import com.dfsek.terra.api.addon.annotations.Author; @@ -12,6 +15,8 @@ import com.dfsek.terra.api.event.functional.FunctionalEventHandler; @Author("Terra") @Version("1.0.0") public class InternalAddon extends TerraAddon { + private static final Logger logger = LoggerFactory.getLogger(InternalAddon.class); + private final AbstractTerraPlugin main; public InternalAddon(AbstractTerraPlugin main) { @@ -24,9 +29,9 @@ public class InternalAddon extends TerraAddon { .getHandler(FunctionalEventHandler.class) .register(this, PlatformInitializationEvent.class) .then(event -> { - main.logger().info("Loading config packs..."); + logger.info("Loading config packs..."); main.getRawConfigRegistry().loadAll(main); - main.logger().info("Loaded packs."); + logger.info("Loaded packs."); }) .global(); } diff --git a/common/implementation/src/main/java/com/dfsek/terra/commands/profiler/ProfileQueryCommand.java b/common/implementation/src/main/java/com/dfsek/terra/commands/profiler/ProfileQueryCommand.java index 7dddc6b15..f95ef7e53 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/commands/profiler/ProfileQueryCommand.java +++ b/common/implementation/src/main/java/com/dfsek/terra/commands/profiler/ProfileQueryCommand.java @@ -1,5 +1,8 @@ package com.dfsek.terra.commands.profiler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.command.CommandTemplate; import com.dfsek.terra.api.command.annotation.Command; @@ -11,6 +14,8 @@ import com.dfsek.terra.api.injection.annotations.Inject; @Command @DebugCommand public class ProfileQueryCommand implements CommandTemplate { + private static final Logger logger = LoggerFactory.getLogger(ProfileQueryCommand.class); + @Inject private TerraPlugin main; @@ -18,7 +23,7 @@ public class ProfileQueryCommand implements CommandTemplate { public void execute(CommandSender sender) { StringBuilder data = new StringBuilder("Terra Profiler data dump: \n"); main.getProfiler().getTimings().forEach((id, timings) -> data.append(id).append(": ").append(timings.toString()).append('\n')); - main.logger().info(data.toString()); + logger.info(data.toString()); sender.sendMessage("Profiler data dumped to console."); } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/PluginConfigImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/PluginConfigImpl.java index 26547e4ce..72604f64b 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/PluginConfigImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/PluginConfigImpl.java @@ -6,6 +6,8 @@ import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.tectonic.exception.ConfigException; import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.yaml.YamlConfiguration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileInputStream; @@ -13,19 +15,20 @@ import java.io.IOException; import java.io.UncheckedIOException; import java.time.Duration; -import com.dfsek.terra.api.Logger; import com.dfsek.terra.api.TerraPlugin; @SuppressWarnings("FieldMayBeFinal") public class PluginConfigImpl implements ConfigTemplate, com.dfsek.terra.api.config.PluginConfig { + private static final Logger logger = LoggerFactory.getLogger(PluginConfigImpl.class); + @Value("debug.commands") @Default private boolean debugCommands = false; @Value("debug.log") @Default - private boolean debugLog = false; + private boolean debugLog = false; // TODO: 2021-08-30 remove me @Value("debug.profiler") @Default @@ -77,20 +80,20 @@ public class PluginConfigImpl implements ConfigTemplate, com.dfsek.terra.api.con @Override public void load(TerraPlugin main) { - Logger logger = main.logger(); logger.info("Loading config values"); try(FileInputStream file = new FileInputStream(new File(main.getDataFolder(), "config.yml"))) { ConfigLoader loader = new ConfigLoader(); loader.load(this, new YamlConfiguration(file, "config.yml")); } catch(ConfigException | IOException | UncheckedIOException e) { - logger.severe("Failed to load config"); - e.printStackTrace(); + logger.error("Failed to load config", e); } - if(isDebugCommands()) logger.info("Debug commands enabled."); - if(isDebugLogging()) logger.info("Debug logging enabled."); - if(isDebugProfiler()) logger.info("Debug profiler enabled."); - if(isDebugScript()) logger.info("Script debug blocks enabled."); + if(isDebugCommands()) + logger.info("Debug commands enabled."); + if(isDebugProfiler()) + logger.info("Debug profiler enabled."); + if(isDebugScript()) + logger.info("Script debug blocks enabled."); } @Override diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/FolderLoader.java b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/FolderLoader.java index 37d04b7e2..14d2da819 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/FolderLoader.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/FolderLoader.java @@ -1,5 +1,8 @@ package com.dfsek.terra.config.fileloaders; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -14,6 +17,8 @@ import java.util.stream.Stream; * Load all {@code *.yml} files from a {@link java.nio.file.Path}. */ public class FolderLoader extends LoaderImpl { + private static final Logger logger = LoggerFactory.getLogger(FolderLoader.class); + private final Path path; public FolderLoader(Path path) { @@ -34,11 +39,11 @@ public class FolderLoader extends LoaderImpl { String rel = newPath.toPath().relativize(file).toString(); streams.put(rel, new FileInputStream(file.toFile())); } catch(FileNotFoundException e) { - e.printStackTrace(); + logger.error("Could not find file to load", e); } }); } catch(IOException e) { - e.printStackTrace(); + logger.error("Error while loading files", e); } } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/LoaderImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/LoaderImpl.java index fd4394c60..860c00b53 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/LoaderImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/LoaderImpl.java @@ -1,6 +1,8 @@ package com.dfsek.terra.config.fileloaders; import com.dfsek.tectonic.exception.ConfigException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.InputStream; @@ -15,6 +17,8 @@ import com.dfsek.terra.api.config.Loader; public abstract class LoaderImpl implements Loader { + private static final Logger logger = LoggerFactory.getLogger(LoaderImpl.class); + protected final Map streams = new HashMap<>(); @Override @@ -51,7 +55,7 @@ public abstract class LoaderImpl implements Loader { try { input.close(); } catch(IOException e) { - e.printStackTrace(); + logger.warn("Error occurred while loading", e); } }); streams.clear(); diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/ZIPLoader.java b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/ZIPLoader.java index 2633e24d4..689707460 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/ZIPLoader.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/ZIPLoader.java @@ -1,5 +1,8 @@ package com.dfsek.terra.config.fileloaders; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; @@ -8,6 +11,8 @@ import java.util.zip.ZipFile; public class ZIPLoader extends LoaderImpl { + private static final Logger logger = LoggerFactory.getLogger(ZIPLoader.class); + private final ZipFile file; public ZIPLoader(ZipFile file) { @@ -33,7 +38,7 @@ public class ZIPLoader extends LoaderImpl { String rel = entry.getName().substring(directory.length()); streams.put(rel, file.getInputStream(entry)); } catch(IOException e) { - e.printStackTrace(); + logger.error("Error while loading file from zip", e); } } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java b/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java index 3b47c332e..b6e79fc68 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java @@ -1,29 +1,30 @@ package com.dfsek.terra.config.lang; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.File; import java.io.IOException; -import com.dfsek.terra.api.Logger; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.entity.CommandSender; import com.dfsek.terra.api.lang.Language; public final class LangUtil { + private static final Logger logger = LoggerFactory.getLogger(LangUtil.class); + private static Language language; public static void load(String langID, TerraPlugin main) { - Logger logger = main.logger(); File file = new File(main.getDataFolder(), "lang"); try { File file1 = new File(file, langID + ".yml"); logger.info(file1.getAbsolutePath()); language = new LanguageImpl(file1); - logger.info("Loaded language " + langID); + logger.info("Loaded language {}", langID); } catch(IOException e) { - logger.severe("Unable to load language: " + langID); - e.printStackTrace(); - logger.severe("Double-check your configuration before reporting this to Terra!"); + logger.error("Unable to load language: {}.\nDouble-check your configuration before reporting this to Terra!", langID, e); } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java index 914c5c4a4..9c777e728 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java @@ -12,6 +12,8 @@ import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.tectonic.yaml.YamlConfiguration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.awt.image.BufferedImage; import java.io.File; @@ -78,6 +80,8 @@ import com.dfsek.terra.registry.config.ConfigTypeRegistry; * Represents a Terra configuration pack. */ public class ConfigPackImpl implements ConfigPack { + private static final Logger logger = LoggerFactory.getLogger(ConfigPackImpl.class); + private final ConfigPackTemplate template = new ConfigPackTemplate(); private final RegistryFactory registryFactory = new RegistryFactoryImpl(); @@ -127,7 +131,7 @@ public class ConfigPackImpl implements ConfigPack { selfLoader.load(template, configuration); - main.logger().info("Loading config pack \"" + template.getID() + "\""); + logger.info("Loading config pack \"{}\"", template.getID()); load(l, main); ConfigPackPostTemplate packPostTemplate = new ConfigPackPostTemplate(); @@ -138,7 +142,7 @@ public class ConfigPackImpl implements ConfigPack { throw new LoadException("No pack.yml file found in " + folder.getAbsolutePath(), e); } } catch(Exception e) { - main.logger().severe("Failed to load config pack from folder \"" + folder.getAbsolutePath() + "\""); + logger.error("Failed to load config pack from folder \"{}\"", folder.getAbsolutePath(), e); throw e; } toWorldConfig(new DummyWorld()); // Build now to catch any errors immediately. @@ -177,7 +181,7 @@ public class ConfigPackImpl implements ConfigPack { selfLoader.load(template, configuration); - main.logger().info("Loading config pack \"" + template.getID() + "\""); + logger.info("Loading config pack \"" + template.getID() + "\""); load(l, main); @@ -190,7 +194,7 @@ public class ConfigPackImpl implements ConfigPack { throw new LoadException("Unable to load pack.yml from ZIP file", e); } } catch(Exception e) { - main.logger().severe("Failed to load config pack from ZIP archive \"" + file.getName() + "\""); + logger.error("Failed to load config pack from ZIP archive \"{}\"", file.getName()); throw e; } @@ -281,16 +285,14 @@ public class ConfigPackImpl implements ConfigPack { OpenRegistry registry = new OpenRegistryImpl<>(); selfLoader.registerLoader(c, registry); abstractConfigLoader.registerLoader(c, registry); - main.getDebugLogger().info("Registered loader for registry of class " + ReflectionUtil.typeToString(c)); + logger.debug("Registered loader for registry of class {}", ReflectionUtil.typeToString(c)); - if(type instanceof ParameterizedType) { - ParameterizedType param = (ParameterizedType) type; + if(type instanceof ParameterizedType param) { Type base = param.getRawType(); if(base instanceof Class // should always be true but we'll check anyways && Supplier.class.isAssignableFrom((Class) base)) { // If it's a supplier Type supplied = param.getActualTypeArguments()[0]; // Grab the supplied type - if(supplied instanceof ParameterizedType) { - ParameterizedType suppliedParam = (ParameterizedType) supplied; + if(supplied instanceof ParameterizedType suppliedParam) { Type suppliedBase = suppliedParam.getRawType(); if(suppliedBase instanceof Class // should always be true but we'll check anyways && ObjectTemplate.class.isAssignableFrom((Class) suppliedBase)) { @@ -299,8 +301,7 @@ public class ConfigPackImpl implements ConfigPack { (Registry>>>>) registry); selfLoader.registerLoader(templateType, loader); abstractConfigLoader.registerLoader(templateType, loader); - main.getDebugLogger().info( - "Registered template loader for registry of class " + ReflectionUtil.typeToString(templateType)); + logger.debug("Registered template loader for registry of class {}", ReflectionUtil.typeToString(templateType)); } } } @@ -361,13 +362,9 @@ public class ConfigPackImpl implements ConfigPack { } private void checkDeadEntries(TerraPlugin main) { - registryMap.forEach((clazz, pair) -> ((OpenRegistryImpl) pair.getLeft()).getDeadEntries() - .forEach((id, value) -> main.getDebugLogger() - .warning("Dead entry in '" + - ReflectionUtil.typeToString( - clazz) + - "' registry: '" + - id + "'"))); + registryMap.forEach((clazz, pair) -> ((OpenRegistryImpl) pair.getLeft()) + .getDeadEntries() + .forEach((id, value) -> logger.warn("Dead entry in '{}' registry: '{}'", ReflectionUtil.typeToString(clazz), id))); } @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -431,9 +428,8 @@ public class ConfigPackImpl implements ConfigPack { } main.getEventManager().callEvent(new ConfigPackPostLoadEvent(this, template -> selfLoader.load(template, configuration))); - main.logger().info( - "Loaded config pack \"" + template.getID() + "\" v" + template.getVersion() + " by " + template.getAuthor() + " in " + - (System.nanoTime() - start) / 1000000D + "ms."); + logger.info("Loaded config pack \"{}\" v{} by {} in {}ms.", + template.getID(), template.getVersion(), template.getAuthor(), (System.nanoTime() - start) / 1000000.0D); } protected Map, CheckedRegistry>> getRegistryMap() { diff --git a/common/implementation/src/main/java/com/dfsek/terra/event/FunctionalEventHandlerImpl.java b/common/implementation/src/main/java/com/dfsek/terra/event/FunctionalEventHandlerImpl.java index 43a7f1a35..34ba14f27 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/event/FunctionalEventHandlerImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/event/FunctionalEventHandlerImpl.java @@ -1,7 +1,8 @@ package com.dfsek.terra.event; -import java.io.PrintWriter; -import java.io.StringWriter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collections; @@ -21,6 +22,8 @@ import com.dfsek.terra.api.util.reflection.TypeKey; public class FunctionalEventHandlerImpl implements FunctionalEventHandler { + private static final Logger logger = LoggerFactory.getLogger(FunctionalEventHandlerImpl.class); + private final Map>> contextMap = new HashMap<>(); private final TerraPlugin main; @@ -42,13 +45,10 @@ public class FunctionalEventHandlerImpl implements FunctionalEventHandler { ((EventContextImpl) context).handle(event); } } catch(Exception e) { - if(context.isFailThrough() && event instanceof FailThroughEvent) throw e; // Rethrow if it's fail-through. - StringWriter writer = new StringWriter(); - e.printStackTrace(new PrintWriter(writer)); - main.logger().warning("Exception occurred during event handling:"); - main.logger().warning(writer.toString()); - main.logger().warning( - "Report this to the maintainers of " + context.getAddon().getName() + ", " + context.getAddon().getAuthor()); + if(context.isFailThrough() && event instanceof FailThroughEvent) + throw e; // Rethrow if it's fail-through. + // else warn + logger.warn("Exception occurred during event handling. Report this to the maintainers of {}, {}", context.getAddon().getName(), context.getAddon().getAuthor(), e); } }); } diff --git a/common/implementation/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java b/common/implementation/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java index 2d54a0a83..151aac255 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java +++ b/common/implementation/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java @@ -1,5 +1,8 @@ package com.dfsek.terra.registry.config; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.LinkedHashMap; import java.util.function.BiConsumer; @@ -10,6 +13,8 @@ import com.dfsek.terra.registry.OpenRegistryImpl; public class ConfigTypeRegistry extends OpenRegistryImpl> { + private static final Logger logger = LoggerFactory.getLogger(ConfigTypeRegistry.class); + private final BiConsumer> callback; private final TerraPlugin main; @@ -23,8 +28,8 @@ public class ConfigTypeRegistry extends OpenRegistryImpl> { @Override public boolean register(String identifier, Entry> value) { callback.accept(identifier, value.getValue()); - main.getDebugLogger().info("Registered config registry with ID " + identifier + " to type " + - ReflectionUtil.typeToString(value.getValue().getTypeKey().getType())); + logger.debug("Registered config registry with ID {} to type {}", identifier, + ReflectionUtil.typeToString(value.getValue().getTypeKey().getType())); return super.register(identifier, value); } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java b/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java index d31f61d68..eddac10d1 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java +++ b/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java @@ -1,5 +1,7 @@ package com.dfsek.terra.registry.master; +import org.slf4j.LoggerFactory; + import java.io.File; import java.io.IOException; import java.lang.reflect.Constructor; @@ -13,6 +15,7 @@ import com.dfsek.terra.addon.PreLoadAddon; import com.dfsek.terra.addon.exception.AddonLoadException; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.addon.TerraAddon; +import com.dfsek.terra.api.injection.Injector; import com.dfsek.terra.api.injection.exception.InjectionException; import com.dfsek.terra.api.registry.exception.DuplicateEntryException; import com.dfsek.terra.inject.InjectorImpl; @@ -20,6 +23,8 @@ import com.dfsek.terra.registry.OpenRegistryImpl; public class AddonRegistry extends OpenRegistryImpl { + private static final org.slf4j.Logger logger = LoggerFactory.getLogger(AddonRegistry.class); + private final TerraPlugin main; public AddonRegistry(TerraPlugin main) { @@ -35,7 +40,7 @@ public class AddonRegistry extends OpenRegistryImpl { public boolean register(String identifier, TerraAddon addon) { if(contains(identifier)) throw new IllegalArgumentException("Addon " + identifier + " is already registered."); addon.initialize(); - main.logger().info("Loaded addon " + addon.getName() + " v" + addon.getVersion() + ", by " + addon.getAuthor()); + logger.info("Loaded addon {} v{}, by {}", addon.getName(), addon.getVersion(), addon.getAuthor()); return super.register(identifier, addon); } @@ -52,6 +57,7 @@ public class AddonRegistry extends OpenRegistryImpl { return loadAll(TerraPlugin.class.getClassLoader()); } + @SuppressWarnings({ "NestedTryStatement", "ThrowCaughtLocally" }) public boolean loadAll(ClassLoader parent) { InjectorImpl pluginInjector = new InjectorImpl<>(main); pluginInjector.addExplicitTarget(TerraPlugin.class); @@ -64,7 +70,7 @@ public class AddonRegistry extends OpenRegistryImpl { try { for(File jar : addonsFolder.listFiles(file -> file.getName().endsWith(".jar"))) { - main.logger().info("Loading Addon(s) from: " + jar.getName()); + logger.info("Loading Addon(s) from: " + jar.getName()); for(Class addonClass : AddonClassLoader.fetchAddonClasses(jar, parent)) { pool.add(new PreLoadAddon(addonClass, jar)); } @@ -82,8 +88,9 @@ public class AddonRegistry extends OpenRegistryImpl { if(!LogManager.getLogManager().addLogger(addonLogger)) { addonLogger = LogManager.getLogManager().getLogger(logPrefix); } - - InjectorImpl loggerInjector = new InjectorImpl<>(addonLogger); + + // TODO: 2021-08-30 Remove logger injector entirely? + Injector loggerInjector = new InjectorImpl<>(addonLogger); loggerInjector.addExplicitTarget(Logger.class); try { @@ -97,19 +104,24 @@ public class AddonRegistry extends OpenRegistryImpl { pluginInjector.inject(loadedAddon); loggerInjector.inject(loadedAddon); } catch(InstantiationException | IllegalAccessException | InvocationTargetException | InjectionException e) { - throw new AddonLoadException("Failed to load com.dfsek.terra.addon \" + " + addon.getId() + "\": ", e); + throw new AddonLoadException(String.format("Failed to load addon \"%s\"", addon.getId()), e); } try { registerChecked(loadedAddon.getName(), loadedAddon); } catch(DuplicateEntryException e) { valid = false; - 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()); + logger.error(""" + Duplicate addon ID; addon with ID {} is already loaded. + Existing addon class: {} + Duplicate addon class: {} + """, + loadedAddon.getName(), + get(loadedAddon.getName()).getClass().getCanonicalName(), + addonClass.getCanonicalName()); } } } catch(AddonLoadException | IOException e) { - e.printStackTrace(); + logger.error("Failed during addon loading", e); valid = false; } diff --git a/common/implementation/src/main/java/com/dfsek/terra/registry/master/ConfigRegistry.java b/common/implementation/src/main/java/com/dfsek/terra/registry/master/ConfigRegistry.java index 24a105ff6..ea7be541a 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/registry/master/ConfigRegistry.java +++ b/common/implementation/src/main/java/com/dfsek/terra/registry/master/ConfigRegistry.java @@ -1,6 +1,8 @@ package com.dfsek.terra.registry.master; import com.dfsek.tectonic.exception.ConfigException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; @@ -16,6 +18,8 @@ import com.dfsek.terra.registry.OpenRegistryImpl; * Class to hold config packs */ public class ConfigRegistry extends OpenRegistryImpl { + private static final Logger logger = LoggerFactory.getLogger(ConfigRegistry.class); + public void load(File folder, TerraPlugin main) throws ConfigException { ConfigPack pack = new ConfigPackImpl(folder, main); register(pack.getID(), pack); @@ -29,16 +33,16 @@ public class ConfigRegistry extends OpenRegistryImpl { try { load(dir, main); } catch(ConfigException e) { - e.printStackTrace(); + logger.error("Error loading config pack {}", dir.getName(), e); valid = false; } } for(File zip : packsFolder.listFiles(file -> file.getName().endsWith(".zip") || file.getName().endsWith(".terra"))) { try { - main.getDebugLogger().info("Loading ZIP archive: " + zip.getName()); + logger.info("Loading ZIP archive: " + zip.getName()); load(new ZipFile(zip), main); } catch(IOException | ConfigException e) { - e.printStackTrace(); + logger.error("Error loading config pack {}", zip.getName(), e); valid = false; } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/util/logging/DebugLogger.java b/common/implementation/src/main/java/com/dfsek/terra/util/logging/DebugLogger.java deleted file mode 100644 index 1ad8eba2c..000000000 --- a/common/implementation/src/main/java/com/dfsek/terra/util/logging/DebugLogger.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.dfsek.terra.util.logging; - -import com.dfsek.terra.api.Logger; - - -public class DebugLogger implements Logger { - private final Logger logger; - private boolean debug = false; - - public DebugLogger(Logger logger) { - this.logger = logger; - } - - public void info(String message) { - if(debug) logger.info(message); - } - - public void warning(String message) { - if(debug) logger.warning(message); - } - - public void severe(String message) { - if(debug) logger.severe(message); - } - - public void stack(Throwable e) { - if(debug) e.printStackTrace(); - } - - public boolean isDebug() { - return debug; - } - - public void setDebug(boolean debug) { - this.debug = debug; - } -} diff --git a/common/implementation/src/main/java/com/dfsek/terra/util/logging/JavaLogger.java b/common/implementation/src/main/java/com/dfsek/terra/util/logging/JavaLogger.java deleted file mode 100644 index 7efb4f5fb..000000000 --- a/common/implementation/src/main/java/com/dfsek/terra/util/logging/JavaLogger.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.dfsek.terra.util.logging; - -import com.dfsek.terra.api.Logger; - - -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/platforms/bukkit/build.gradle.kts b/platforms/bukkit/build.gradle.kts index 25fcb1739..fa74e8af3 100644 --- a/platforms/bukkit/build.gradle.kts +++ b/platforms/bukkit/build.gradle.kts @@ -17,6 +17,8 @@ val purpurURL = "https://ci.pl3x.net/job/Purpur/lastSuccessfulBuild/artifact/fin dependencies { "shadedApi"(project(":common:implementation")) + "shadedImplementation"("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") + "compileOnly"("io.papermc.paper:paper-api:1.17-R0.1-SNAPSHOT") "shadedImplementation"("io.papermc:paperlib:1.0.5") 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 8c51a4a15..e35651b05 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 @@ -8,6 +8,8 @@ import org.bukkit.generator.ChunkGenerator; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; @@ -31,6 +33,7 @@ import com.dfsek.terra.commands.TerraCommandManager; public class TerraBukkitPlugin extends JavaPlugin { public static final BukkitVersion BUKKIT_VERSION; + private static final Logger logger = LoggerFactory.getLogger(TerraBukkitPlugin.class); static { String ver = Bukkit.getServer().getClass().getPackage().getName(); @@ -53,9 +56,9 @@ public class TerraBukkitPlugin extends JavaPlugin { @Override public void onEnable() { - getLogger().info("Running on version " + BUKKIT_VERSION); + logger.info("Running on version {}", BUKKIT_VERSION); if(BUKKIT_VERSION == BukkitVersion.UNKNOWN) { - getLogger().warning("Terra is running on an unknown Bukkit version. Proceed with caution."); + logger.warn("Terra is running on an unknown Bukkit version. Proceed with caution."); } terraPlugin.getEventManager().callEvent(new PlatformInitializationEvent()); @@ -72,9 +75,12 @@ public class TerraBukkitPlugin extends JavaPlugin { manager.register("save-data", SaveDataCommand.class); manager.register("fix-chunk", FixChunkCommand.class); } catch(MalformedCommandException e) { // This should never happen. - terraPlugin.logger().severe("Errors occurred while registering commands."); - e.printStackTrace(); - terraPlugin.logger().severe("Please report this to Terra."); + logger.error(""" + TERRA HAS BEEN DISABLED + + Errors occurred while registering commands. + Please report this to Terra. + """, e); Bukkit.getPluginManager().disablePlugin(this); return; } @@ -115,21 +121,21 @@ public class TerraBukkitPlugin extends JavaPlugin { private void registerSpigotEvents(boolean outdated) { if(outdated) { - getLogger().severe("You are using an outdated version of Paper."); - getLogger().severe("This version does not contain StructureLocateEvent."); - getLogger().severe("Terra will now fall back to Spigot events."); - getLogger().severe("This will prevent cartographer villagers from spawning,"); - getLogger().severe("and cause structure location to not function."); - getLogger().severe("If you want these functionalities, update to the latest build of Paper."); - getLogger().severe("If you use a fork, update to the latest version, then if you still"); - getLogger().severe("receive this message, ask the fork developer to update upstream."); + logger.error("You are using an outdated version of Paper."); + logger.error("This version does not contain StructureLocateEvent."); + logger.error("Terra will now fall back to Spigot events."); + logger.error("This will prevent cartographer villagers from spawning,"); + logger.error("and cause structure location to not function."); + logger.error("If you want these functionalities, update to the latest build of Paper."); + logger.error("If you use a fork, update to the latest version, then if you still"); + logger.error("receive this message, ask the fork developer to update upstream."); } else { - getLogger().severe("Paper is not in use. Falling back to Spigot events."); - getLogger().severe("This will prevent cartographer villagers from spawning,"); - getLogger().severe("and cause structure location to not function."); - getLogger().severe("If you want these functionalities (and all the other"); - getLogger().severe("benefits that Paper offers), upgrade your server to Paper."); - getLogger().severe("Find out more at https://papermc.io/"); + logger.error("Paper is not in use. Falling back to Spigot events."); + logger.error("This will prevent cartographer villagers from spawning,"); + logger.error("and cause structure location to not function."); + logger.error("If you want these functionalities (and all the other"); + logger.error("benefits that Paper offers), upgrade your server to Paper."); + logger.error("Find out more at https://papermc.io/"); } Bukkit.getPluginManager().registerEvents(new SpigotListener(terraPlugin), this); // Register Spigot event listener diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraPluginImpl.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraPluginImpl.java index 3313dc43d..7c346198e 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraPluginImpl.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraPluginImpl.java @@ -10,7 +10,6 @@ import java.util.Locale; import java.util.Optional; import com.dfsek.terra.AbstractTerraPlugin; -import com.dfsek.terra.api.Logger; import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.handle.ItemHandle; @@ -19,7 +18,6 @@ import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.bukkit.handles.BukkitItemHandle; import com.dfsek.terra.bukkit.handles.BukkitWorldHandle; import com.dfsek.terra.bukkit.world.BukkitBiome; -import com.dfsek.terra.util.logging.JavaLogger; public class TerraPluginImpl extends AbstractTerraPlugin { @@ -78,11 +76,6 @@ public class TerraPluginImpl extends AbstractTerraPlugin { } - @Override - protected Logger createLogger() { - return new JavaLogger(plugin.getLogger()); - } - @Override protected Optional getPlatformAddon() { return Optional.of(new BukkitAddon(this)); diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/BukkitCommandAdapter.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/BukkitCommandAdapter.java index 727b0ef57..1cbd65c01 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/BukkitCommandAdapter.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/BukkitCommandAdapter.java @@ -6,6 +6,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Arrays; @@ -20,6 +22,8 @@ import com.dfsek.terra.bukkit.world.BukkitAdapter; public class BukkitCommandAdapter implements CommandExecutor, TabCompleter { + private static final Logger logger = LoggerFactory.getLogger(BukkitCommandAdapter.class); + private final CommandManager manager; public BukkitCommandAdapter(CommandManager manager) { @@ -51,7 +55,7 @@ public class BukkitCommandAdapter implements CommandExecutor, TabCompleter { .filter(s -> s.toLowerCase(Locale.ROOT).startsWith(args[args.length - 1].toLowerCase(Locale.ROOT))).sorted( String::compareTo).collect(Collectors.toList()); } catch(CommandException e) { - e.printStackTrace(); + logger.warn("Exception occurred during tab completion", e); return Collections.emptyList(); } } 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 32816e1e8..661f60030 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 @@ -3,6 +3,8 @@ package com.dfsek.terra.bukkit.generator; import org.bukkit.World; import org.bukkit.generator.BlockPopulator; import org.jetbrains.annotations.NotNull; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.FileNotFoundException; import java.io.IOException; @@ -23,6 +25,7 @@ import com.dfsek.terra.bukkit.world.BukkitBiomeGrid; public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGenerator implements GeneratorWrapper { + private static final Logger logger = LoggerFactory.getLogger(BukkitChunkGeneratorWrapper.class); private static final Map popMap = new HashMap<>(); @@ -44,17 +47,17 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener public static synchronized void saveAll() { - for(Map.Entry e : popMap.entrySet()) { + for(Map.Entry entry : popMap.entrySet()) { try { - e.getValue().saveBlocks(e.getKey()); - } catch(IOException ioException) { - ioException.printStackTrace(); + entry.getValue().saveBlocks(entry.getKey()); + } catch(IOException e) { + logger.error("Error occurred while saving population manager", e); } } } - public static synchronized void fixChunk(Chunk c) { - popMap.get(c.getWorld()).checkNeighbors(c.getX(), c.getZ(), c.getWorld()); + public static synchronized void fixChunk(Chunk chunk) { + popMap.get(chunk.getWorld()).checkNeighbors(chunk.getX(), chunk.getZ(), chunk.getWorld()); } private void load(com.dfsek.terra.api.world.World w) { @@ -63,7 +66,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener } catch(FileNotFoundException ignore) { } catch(IOException | ClassNotFoundException e) { - e.printStackTrace(); + logger.error("Error occurred while loading terra world", e); } popMap.put(w, popMan); needsLoad = false; 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 6d30937af..0e788d3f9 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 @@ -7,6 +7,8 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.entity.VillagerAcquireTradeEvent; import org.bukkit.event.entity.VillagerCareerChangeEvent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.dfsek.terra.api.TerraPlugin; @@ -18,6 +20,8 @@ import com.dfsek.terra.api.TerraPlugin; * StructureLocateEvent). */ public class SpigotListener implements Listener { + private static final Logger logger = LoggerFactory.getLogger(SpigotListener.class); + private final TerraPlugin main; public SpigotListener(TerraPlugin main) { @@ -26,46 +30,57 @@ public class SpigotListener implements Listener { @EventHandler(priority = EventPriority.NORMAL) public void onEnderEye(EntitySpawnEvent e) { - /* +/* Entity entity = e.getEntity(); - if(e.getEntityType().equals(EntityType.ENDER_SIGNAL)) { - main.getDebugLogger().info("Detected Ender Signal..."); + if(e.getEntityType() == EntityType.ENDER_SIGNAL) { + logger.info("Detected Ender Signal..."); World w = BukkitAdapter.adapt(e.getEntity().getWorld()); EnderSignal signal = (EnderSignal) entity; ConfiguredStructure config = tw.getConfig().getRegistry(TerraStructure.class).get(w.getConfig().getLocatable().get ("STRONGHOLD")); if(config != null) { - main.getDebugLogger().info("Overriding Ender Signal..."); + logger.info("Overriding Ender Signal..."); AsyncStructureFinder finder = new AsyncStructureFinder(tw.getBiomeProvider(), config, BukkitAdapter.adapt(e.getLocation() .toVector()), tw.getWorld(), 0, 500, location -> { if(location != null) signal.setTargetLocation(BukkitAdapter.adapt(location).toLocation(e.getLocation().getWorld())); - main.getDebugLogger().info("Location: " + location); + logger.info("Location: {}", location); }, main); finder.run(); // Do this synchronously so eye doesn't change direction several ticks after spawning. } else - main.logger().warning("No overrides are defined for Strongholds. Ender Signals will not work correctly."); + logger.warn("No overrides are defined for Strongholds. Ender Signals will not work correctly."); } - */ +*/ } @EventHandler public void onCartographerChange(VillagerAcquireTradeEvent e) { - if(!(e.getEntity() instanceof Villager)) return; - if(((Villager) e.getEntity()).getProfession().equals(Villager.Profession.CARTOGRAPHER)) { - 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."); + if(!(e.getEntity() instanceof Villager)) + return; + if(((Villager) e.getEntity()).getProfession() == Villager.Profession.CARTOGRAPHER) { + logger.error(""" + .------------------------------------------------------------------------. + | Prevented server crash by stopping Cartographer villager from | + | spawning. Please upgrade to Paper, which has a StructureLocateEvent | + | that fixes this issue 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. } } @EventHandler public void onCartographerLevel(VillagerCareerChangeEvent e) { - if(e.getProfession().equals(Villager.Profession.CARTOGRAPHER)) { - 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."); + if(e.getProfession() == Villager.Profession.CARTOGRAPHER) { + logger.error(""" + .------------------------------------------------------------------------. + | Prevented server crash by stopping Cartographer villager from leveling | + | up. Please upgrade to Paper, which has a StructureLocateEvent that | + | fixes this issue 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/build.gradle.kts b/platforms/fabric/build.gradle.kts index b602d9ed2..d608fa830 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -21,6 +21,8 @@ tasks.named("shadowJar") { dependencies { "shadedApi"(project(":common:implementation")) + "shadedImplementation"("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") + "minecraft"("com.mojang:minecraft:1.17.1") "mappings"("net.fabricmc:yarn:1.17.1+build.1:v2") "modImplementation"("net.fabricmc:fabric-loader:0.11.3") diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java index 5f97915ab..6b2c6ad14 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java @@ -6,6 +6,8 @@ import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.Registry; import net.minecraft.world.biome.Biome; import net.minecraft.world.gen.feature.ConfiguredFeature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; @@ -33,6 +35,8 @@ import com.dfsek.terra.fabric.util.FabricUtil; @Author("Terra") @Version("1.0.0") public final class FabricAddon extends TerraAddon { + private static final Logger logger = LoggerFactory.getLogger(FabricAddon.class); + private final TerraPluginImpl terraFabricPlugin; private final Map> templates = new HashMap<>(); @@ -50,7 +54,7 @@ public final class FabricAddon extends TerraAddon { try { event.loadTemplate(template); } catch(ConfigException e) { - e.printStackTrace(); + logger.error("Error loading config template", e); } if(template.doRegistryInjection()) { @@ -59,8 +63,7 @@ public final class FabricAddon extends TerraAddon { try { event.getPack().getCheckedRegistry(Tree.class).register(entry.getKey().getValue().toString(), (Tree) entry.getValue()); - terraFabricPlugin.getDebugLogger().info( - "Injected ConfiguredFeature " + entry.getKey().getValue() + " as Tree."); + logger.info("Injected ConfiguredFeature {} as Tree.", entry.getKey().getValue()); } catch(DuplicateEntryException ignored) { } } @@ -79,7 +82,7 @@ public final class FabricAddon extends TerraAddon { try { event.loadTemplate(template); } catch(ConfigException e) { - e.printStackTrace(); + logger.error("Error loading config templatE", e); } templates.get(event.getPack()).setRight(template); @@ -91,7 +94,7 @@ public final class FabricAddon extends TerraAddon { .getHandler(FunctionalEventHandler.class) .register(this, BiomeRegistrationEvent.class) .then(event -> { - terraFabricPlugin.logger().info("Registering biomes..."); + logger.info("Registering biomes..."); Registry biomeRegistry = event.getRegistryManager().get(Registry.BIOME_KEY); terraFabricPlugin.getConfigRegistry().forEach(pack -> pack.getCheckedRegistry(TerraBiome.class) .forEach( @@ -102,7 +105,7 @@ public final class FabricAddon extends TerraAddon { pack, id)), FabricUtil.createBiome(biome, pack, event.getRegistryManager())))); // Register all Terra biomes. - terraFabricPlugin.logger().info("Biomes registered."); + logger.info("Biomes registered."); }) .global(); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java index 7a0931f29..c7a5050c7 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java @@ -5,13 +5,11 @@ import com.dfsek.tectonic.loading.TypeRegistry; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.util.Identifier; import net.minecraft.util.registry.BuiltinRegistries; -import org.apache.logging.log4j.LogManager; import java.io.File; import java.util.Optional; import com.dfsek.terra.AbstractTerraPlugin; -import com.dfsek.terra.api.Logger; import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.handle.WorldHandle; @@ -72,27 +70,6 @@ public class TerraPluginImpl extends AbstractTerraPlugin { }); } - @Override - protected Logger createLogger() { - final org.apache.logging.log4j.Logger log4jLogger = LogManager.getLogger(); - return new Logger() { - @Override - public void info(String message) { - log4jLogger.info(message); - } - - @Override - public void warning(String message) { - log4jLogger.warn(message); - } - - @Override - public void severe(String message) { - log4jLogger.error(message); - } - }; - } - @Override protected Optional getPlatformAddon() { return Optional.of(new FabricAddon(this)); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java index 880246ed1..3e7342265 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java @@ -25,6 +25,8 @@ import net.minecraft.world.gen.chunk.StructuresConfig; import net.minecraft.world.gen.chunk.VerticalBlockSample; import net.minecraft.world.gen.feature.StructureFeature; import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; @@ -42,6 +44,8 @@ import com.dfsek.terra.util.FastRandom; public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.ChunkGenerator implements GeneratorWrapper { + private static final Logger logger = LoggerFactory.getLogger(FabricChunkGeneratorWrapper.class); + public static final Codec PACK_CODEC = RecordCodecBuilder.create( config -> config.group( Codec.STRING.fieldOf("pack") @@ -71,7 +75,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C this.pack = configPack; this.delegate = pack.getGeneratorProvider().newInstance(pack); - delegate.getMain().logger().info("Loading world with config pack " + pack.getID()); + logger.info("Loading world with config pack {}", pack.getID()); this.biomeSource = biomeSource; this.seed = seed; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java index c1fd971dd..bd8149fc9 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java @@ -10,6 +10,8 @@ import net.minecraft.world.gen.Spawner; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.level.ServerWorldProperties; import net.minecraft.world.level.storage.LevelStorage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -18,12 +20,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.List; import java.util.concurrent.Executor; -import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; @Mixin(ServerWorld.class) public abstract class ServerWorldMixin { + private static final Logger logger = LoggerFactory.getLogger(ServerWorldMixin.class); + @Inject(method = "", at = @At("RETURN")) public void injectConstructor(MinecraftServer server, Executor workerExecutor, LevelStorage.Session session, ServerWorldProperties properties, RegistryKey registryKey, DimensionType dimensionType, @@ -31,7 +34,7 @@ public abstract class ServerWorldMixin { boolean debugWorld, long l, List list, boolean bl, CallbackInfo ci) { if(chunkGenerator instanceof FabricChunkGeneratorWrapper) { ((FabricChunkGeneratorWrapper) chunkGenerator).setWorld((ServerWorld) (Object) this); - FabricEntryPoint.getTerraPlugin().logger().info("Registered world " + this); + logger.info("Registered world {}", this); } } } diff --git a/platforms/sponge/build.gradle.kts b/platforms/sponge/build.gradle.kts index 9377541e6..1423a938d 100644 --- a/platforms/sponge/build.gradle.kts +++ b/platforms/sponge/build.gradle.kts @@ -15,6 +15,9 @@ java { dependencies { "shadedApi"(project(":common:implementation")) + + "shadedImplementation"("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") + "annotationProcessor"("org.spongepowered:spongeapi:9.0.0-SNAPSHOT") "shadedImplementation"("org.spongepowered:spongeapi:9.0.0-SNAPSHOT") "annotationProcessor"("org.spongepowered:mixin:0.8.2:processor") diff --git a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraPluginImpl.java b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraPluginImpl.java index b582f4826..9a47512ad 100644 --- a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraPluginImpl.java +++ b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraPluginImpl.java @@ -5,7 +5,6 @@ import org.spongepowered.api.Sponge; import java.io.File; import com.dfsek.terra.AbstractTerraPlugin; -import com.dfsek.terra.api.Logger; import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.handle.WorldHandle; import com.dfsek.terra.sponge.handle.SpongeWorldHandle; @@ -44,24 +43,4 @@ public class TerraPluginImpl extends AbstractTerraPlugin { public ItemHandle getItemHandle() { return null; } - - @Override - protected Logger createLogger() { - return new Logger() { - @Override - public void info(String message) { - plugin.getPluginContainer().logger().info(message); - } - - @Override - public void warning(String message) { - plugin.getPluginContainer().logger().warn(message); - } - - @Override - public void severe(String message) { - plugin.getPluginContainer().logger().error(message); - } - }; - } } From 7b9c88f8a626665bcf9c96bbf28f715dfcccad80 Mon Sep 17 00:00:00 2001 From: solonovamax Date: Mon, 30 Aug 2021 20:35:18 -0400 Subject: [PATCH 02/19] Improve bukkit logging Signed-off-by: solonovamax --- .../script/functions/StructureFunction.java | 8 +- .../dfsek/terra/bukkit/TerraBukkitPlugin.java | 199 +++++++++++------- .../dfsek/terra/bukkit/util/VersionUtil.java | 197 +++++++++++++++++ 3 files changed, 322 insertions(+), 82 deletions(-) create mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/util/VersionUtil.java diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StructureFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StructureFunction.java index d11083507..fff3136f0 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StructureFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StructureFunction.java @@ -1,6 +1,8 @@ package com.dfsek.terra.addons.terrascript.script.functions; import net.jafama.FastMath; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.List; import java.util.Map; @@ -22,6 +24,8 @@ import com.dfsek.terra.api.vector.Vector3; public class StructureFunction implements Function { + private static final Logger logger = LoggerFactory.getLogger(StructureFunction.class); + private final Registry registry; private final Returnable id; private final Returnable x, y, z; @@ -61,7 +65,7 @@ public class StructureFunction implements Function { String app = id.apply(implementationArguments, variableMap); Structure script = registry.get(app); if(script == null) { - main.logger().severe("No such structure " + app); + logger.error("No such structure {}", app); return null; } @@ -70,7 +74,7 @@ public class StructureFunction implements Function { try { rotation1 = Rotation.valueOf(rotString); } catch(IllegalArgumentException e) { - main.logger().severe("Invalid rotation " + rotString); + logger.error("Invalid rotation {}", rotString); return null; } 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 e35651b05..776a64c0a 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 @@ -1,6 +1,5 @@ package com.dfsek.terra.bukkit; -import io.papermc.lib.PaperLib; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.command.PluginCommand; @@ -27,24 +26,14 @@ import com.dfsek.terra.bukkit.listeners.CommonListener; import com.dfsek.terra.bukkit.listeners.PaperListener; import com.dfsek.terra.bukkit.listeners.SpigotListener; import com.dfsek.terra.bukkit.util.PaperUtil; +import com.dfsek.terra.bukkit.util.VersionUtil; import com.dfsek.terra.commands.CommandUtil; import com.dfsek.terra.commands.TerraCommandManager; public class TerraBukkitPlugin extends JavaPlugin { - public static final BukkitVersion BUKKIT_VERSION; private static final Logger logger = LoggerFactory.getLogger(TerraBukkitPlugin.class); - static { - String ver = Bukkit.getServer().getClass().getPackage().getName(); - if(ver.contains("1_17")) BUKKIT_VERSION = BukkitVersion.V1_17; - else if(ver.contains("1_16")) BUKKIT_VERSION = BukkitVersion.V1_16; - else if(ver.contains("1_15")) BUKKIT_VERSION = BukkitVersion.V1_15; - else if(ver.contains("1_14")) BUKKIT_VERSION = BukkitVersion.V1_14; - else if(ver.contains("1_13")) BUKKIT_VERSION = BukkitVersion.V1_13; - else BUKKIT_VERSION = BukkitVersion.UNKNOWN; - } - private final TerraPluginImpl terraPlugin = new TerraPluginImpl(this); private final Map generatorMap = new HashMap<>(); private final Map worlds = new HashMap<>(); @@ -56,16 +45,11 @@ public class TerraBukkitPlugin extends JavaPlugin { @Override public void onEnable() { - logger.info("Running on version {}", BUKKIT_VERSION); - if(BUKKIT_VERSION == BukkitVersion.UNKNOWN) { - logger.warn("Terra is running on an unknown Bukkit version. Proceed with caution."); - } - terraPlugin.getEventManager().callEvent(new PlatformInitializationEvent()); new Metrics(this, 9017); // Set up bStats. - PluginCommand c = Objects.requireNonNull(getCommand("terra")); + PluginCommand cmd = Objects.requireNonNull(getCommand("terra")); CommandManager manager = new TerraCommandManager(terraPlugin); @@ -87,8 +71,8 @@ public class TerraBukkitPlugin extends JavaPlugin { BukkitCommandAdapter command = new BukkitCommandAdapter(manager); - c.setExecutor(command); - c.setTabCompleter(command); + cmd.setExecutor(command); + cmd.setTabCompleter(command); long save = terraPlugin.getTerraConfig().getDataSaveInterval(); @@ -97,20 +81,55 @@ public class TerraBukkitPlugin extends JavaPlugin { Bukkit.getPluginManager().registerEvents(new CommonListener(terraPlugin), this); // Register master event listener PaperUtil.checkPaper(this); - if(PaperLib.isPaper()) { - try { - Class.forName("io.papermc.paper.event.world.StructureLocateEvent"); // Check if user is on Paper version with event. - Bukkit.getPluginManager().registerEvents(new PaperListener(terraPlugin), this); // Register Paper events. - } catch(ClassNotFoundException e) { - registerSpigotEvents(true); // Outdated Paper version. + try { + Class.forName("io.papermc.paper.event.world.StructureLocateEvent"); // Check if user is on Paper version with event. + Bukkit.getPluginManager().registerEvents(new PaperListener(terraPlugin), this); // Register Paper events. + } catch(ClassNotFoundException e) { + /* + The command + + fmt -w 72 -g 72 -u text | \ + boxes -a cmd -p a1h3 -t 4e -d jstone -s82 | \ + sed -Ee 's/\+-+\*\//|------------------------------------------------------------------------------|/g' \ + -e 's/^\s*(.*)$/"\1\\n"/g' -e 's/\///g' -e 's/\*|\+/./g' -e 's/$/ +/g' -e '/^"\| {3}-{72} {3}\|\\n" \+$/d' + + was used to create these boxes. Leaving this here for if we want to create more/modify them. + */ + if(VersionUtil.getSpigotVersionInfo().isPaper()) { // logging with stack trace to be annoying. + logger.warn(""" + .------------------------------------------------------------------------------. + | | + | You are using an outdated version of Paper. This version does not | + | contain StructureLocateEvent. Terra will now fall back to Spigot | + | events. This will prevent cartographer villagers from spawning, | + | and cause structure location to not function. If you want these | + | functionalities, update to the latest build of Paper. If you use a | + | fork, update to the latest version, then if you still receive this | + | message, ask the fork developer to update upstream. | + | | + |------------------------------------------------------------------------------| + """, e); + } else { + logger.warn(""" + .------------------------------------------------------------------------------. + | | + | Paper is not in use. Falling back to Spigot events. This will prevent | + | cartographer villagers from spawning, and cause structure location to | + | not function. If you want these functionalities (and all the other | + | benefits that Paper offers), upgrade your server to Paper. Find out | + | more at https://papermc.io/ | + | | + |------------------------------------------------------------------------------| + """, e); + + Bukkit.getPluginManager().registerEvents(new SpigotListener(terraPlugin), this); // Register Spigot event listener } - } else { - registerSpigotEvents(false); } } @Override - public @Nullable ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, @Nullable String id) { + public @Nullable + ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, @Nullable String id) { return new BukkitChunkGeneratorWrapper(generatorMap.computeIfAbsent(worldName, name -> { if(!terraPlugin.getConfigRegistry().contains(id)) throw new IllegalArgumentException("No such config pack \"" + id + "\""); ConfigPack pack = terraPlugin.getConfigRegistry().get(id); @@ -119,57 +138,77 @@ public class TerraBukkitPlugin extends JavaPlugin { })); } - private void registerSpigotEvents(boolean outdated) { - if(outdated) { - logger.error("You are using an outdated version of Paper."); - logger.error("This version does not contain StructureLocateEvent."); - logger.error("Terra will now fall back to Spigot events."); - logger.error("This will prevent cartographer villagers from spawning,"); - logger.error("and cause structure location to not function."); - logger.error("If you want these functionalities, update to the latest build of Paper."); - logger.error("If you use a fork, update to the latest version, then if you still"); - logger.error("receive this message, ask the fork developer to update upstream."); - } else { - logger.error("Paper is not in use. Falling back to Spigot events."); - logger.error("This will prevent cartographer villagers from spawning,"); - logger.error("and cause structure location to not function."); - logger.error("If you want these functionalities (and all the other"); - logger.error("benefits that Paper offers), upgrade your server to Paper."); - logger.error("Find out more at https://papermc.io/"); - } + private boolean doVersionCheck() { + logger.info("Running on version {} with {}.", VersionUtil.getMinecraftVersionInfo(), VersionUtil.getSpigotVersionInfo()); - Bukkit.getPluginManager().registerEvents(new SpigotListener(terraPlugin), this); // Register Spigot event listener + if(VersionUtil.getMinecraftVersionInfo().getMinor() < 17) + logger.error("Terra does not work on version 1.16.5 at the moment."); + + if(!VersionUtil.getSpigotVersionInfo().isSpigot()) + logger.error("YOU ARE RUNNING A CRAFTBUKKIT OR BUKKIT SERVER JAR. PLEASE UPGRADE TO PAPER SPIGOT."); + + if(VersionUtil.getSpigotVersionInfo().isYatopia()) + logger.warn("Yatopia is a highly unstable fork of spigot. You may experience various issues with it."); + + if(VersionUtil.getSpigotVersionInfo().isMohist()) { + if(System.getProperty("IKnowMohistCausesLotsOfIssuesButIWillUseItAnyways") == null) { + Runnable runnable = () -> { // scary big block of text + logger.error(""" + .----------------------------------------------------------------------------------. + | | + | âš  !! Warning !! âš  | + | | + | You are currently using Mohist. | + | | + | Do not use Mohist. | + | | + | The concept of combining the rigid Bukkit platform, which assumes a 100% | + | Vanilla server, with the flexible Forge platform, which allows changing | + | core components of the game, simply does not work. These platforms are | + | incompatible at a conceptual level, the only way to combine them would | + | be to make incompatible changes to both. As a result, Mohist's Bukkit | + | API implementation is not compliant. This will cause many plugins to | + | break. Rather than fix their platform, Mohist has chosen to distribute | + | unofficial builds of plugins they deem to be "fixed". These builds are not | + | "fixed", they are simply hacked together to work with Mohist's half-baked | + | Bukkit implementation. To distribute these as "fixed" versions implies that: | + | - These builds are endorsed by the original developers. (They are not) | + | - The issue is on the plugin's end, not Mohist's. (It is not. The issue | + | is that Mohist chooses to not create a compliant Bukkit implementation) | + | Please, do not use Mohist. It causes issues with most plugins, and rather | + | than fixing their platform, Mohist has chosen to distribute unofficial | + | hacked-together builds of plugins, calling them "fixed". If you want | + | to use a server API with Forge mods, look at the Sponge project, an | + | API that is designed to be implementation-agnostic, with first-party | + | support for the Forge mod loader. You are bound to encounter issues if | + | you use Terra with Mohist. We will provide NO SUPPORT for servers running | + | Mohist. If you wish to proceed anyways, you can add the JVM System Property | + | "IKnowMohistCausesLotsOfIssuesButIWillUseItAnyways" to enable the plugin. No | + | support will be provided for servers running Mohist. | + | | + | Because of this **TERRA HAS BEEN DISABLED**. | + | Do not come ask us why it is not working. | + | | + |----------------------------------------------------------------------------------| + """); + }; + runnable.run(); + //noinspection deprecation + Bukkit.getScheduler().scheduleAsyncDelayedTask(this, runnable, 200L); + // Bukkit.shutdown(); // we're not *that* evil + setEnabled(false); + return false; + } else { + logger.warn(""" + You are using Mohist, so we will not give you any support for issues that may arise. + Since you enabled the "IKnowMohistCausesLotsOfIssuesButIWillUseItAnyways" flag, we won't disable Terra. But be warned. + + > I felt a great disturbance in the JVM,as if millions of plugins suddenly cried out in stack traces and were suddenly silenced. + > I fear something terrible has happened. + > - Astrash + """); + } + } + return true; } - - public enum BukkitVersion { - V1_13(13), - - V1_14(14), - - V1_15(15), - - V1_16(16), - - V1_17(17), - - UNKNOWN(Integer.MAX_VALUE); // Assume unknown version is latest. - - private final int index; - - BukkitVersion(int index) { - this.index = index; - } - - /** - * Gets if this version is above or equal to another. - * - * @param other Other version - * - * @return Whether this version is equal to or later than other. - */ - public boolean above(BukkitVersion other) { - return this.index >= other.index; - } - } - } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/util/VersionUtil.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/util/VersionUtil.java new file mode 100644 index 000000000..e5636ff20 --- /dev/null +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/util/VersionUtil.java @@ -0,0 +1,197 @@ +package com.dfsek.terra.bukkit.util; + +import io.papermc.lib.PaperLib; +import org.bukkit.Bukkit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +public final class VersionUtil { + public static final SpigotVersionInfo SPIGOT_VERSION_INFO; + public static final MinecraftVersionInfo MINECRAFT_VERSION_INFO; + + private static final Logger logger = LoggerFactory.getLogger(VersionUtil.class); + + static { + SPIGOT_VERSION_INFO = new SpigotVersionInfo(); + + MinecraftVersionInfo mcVersionInfo; + try { + mcVersionInfo = new MinecraftVersionInfo(); + } catch(Throwable t) { + logger.error("Error while parsing minecraft version info. Continuing launch, but setting all versions to -1."); + mcVersionInfo = new MinecraftVersionInfo(-1, -1, -1); + } + MINECRAFT_VERSION_INFO = mcVersionInfo; + } + + public static MinecraftVersionInfo getMinecraftVersionInfo() { + return MINECRAFT_VERSION_INFO; + } + + public static SpigotVersionInfo getSpigotVersionInfo() { + return SPIGOT_VERSION_INFO; + } + + public static final class SpigotVersionInfo { + private final boolean spigot; + private final boolean paper; + private final boolean mohist; + private final boolean airplane; + private final boolean tuinity; + private final boolean purpur; + private final boolean yatopia; + + + public SpigotVersionInfo() { + logger.debug("Parsing spigot version info..."); + + paper = PaperLib.isPaper(); + spigot = PaperLib.isSpigot(); + + boolean isTuinity = false; + try { + Class.forName("com.tuinity.tuinity.config.TuinityConfig"); + isTuinity = true; + } catch(ClassNotFoundException ignored) { } + this.tuinity = isTuinity; + + boolean isAirplane = false; + try { + Class.forName("gg.airplane.AirplaneConfig"); + isAirplane = true; + } catch(ClassNotFoundException ignored) { } + this.airplane = isAirplane; + + boolean isPurpur = false; + try { + Class.forName("net.pl3x.purpur.PurpurConfig"); + isPurpur = true; + } catch(ClassNotFoundException ignored) { } + this.purpur = isPurpur; + + boolean isYatopia = false; + try { + Class.forName("org.yatopiamc.yatopia.server.YatopiaConfig"); + isYatopia = true; + } catch(ClassNotFoundException ignored) { } + this.yatopia = isYatopia; + + boolean isMohist = false; + try { + Class.forName("com.mohistmc.MohistMC"); + // it's mohist + isMohist = true; + } catch(ClassNotFoundException ignore) { } + this.mohist = isMohist; + + logger.debug("Spigot version info parsed successfully."); + } + + @Override + public String toString() { + if(mohist) + return "Mohist..."; + else if(yatopia) + return "Yaptopia"; + else if(purpur) + return "Purpur"; + else if(tuinity) + return "Tuinity"; + else if(airplane) + return "Airplane"; + else if(paper) + return "Paper"; + else if(spigot) + return "Spigot"; + else + return "Craftbukkit"; + } + + public boolean isAirplane() { + return airplane; + } + + public boolean isPaper() { + return paper; + } + + public boolean isMohist() { + return mohist; + } + + public boolean isPurpur() { + return purpur; + } + + public boolean isSpigot() { + return spigot; + } + + public boolean isTuinity() { + return tuinity; + } + + public boolean isYatopia() { + return yatopia; + } + } + + + public static final class MinecraftVersionInfo { + private static final Logger logger = LoggerFactory.getLogger(MinecraftVersionInfo.class); + + private static final Pattern VERSION_PATTERN = Pattern.compile("v?(\\d+)_(\\d+)_R(\\d+)"); + private final int major; + private final int minor; + private final int patch; + + private MinecraftVersionInfo() { + this(Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]); + } + + private MinecraftVersionInfo(int major, int minor, int patch) { + this.major = major; + this.minor = minor; + this.patch = patch; + } + + private MinecraftVersionInfo(String versionString) { + Matcher versionMatcher = VERSION_PATTERN.matcher(versionString); + if(versionMatcher.find()) { + major = Integer.parseInt(versionMatcher.group(1)); + minor = Integer.parseInt(versionMatcher.group(2)); + patch = Integer.parseInt(versionMatcher.group(3)); + } else { + logger.warn("Error while parsing minecraft version info. Continuing launch, but setting all versions to -1."); + + major = -1; + minor = -1; + patch = -1; + } + } + + @Override + public String toString() { + if(major == -1 && minor == -1 && patch == -1) + return "Unknown"; + + return String.format("v%d.%d.%d", major, minor, patch); + } + + public int getMajor() { + return major; + } + + public int getMinor() { + return minor; + } + + public int getPatch() { + return patch; + } + } +} \ No newline at end of file From b6c40302b644fe9ca5f1fdf7c8c1032cf387c4be Mon Sep 17 00:00:00 2001 From: solonovamax Date: Mon, 30 Aug 2021 22:04:17 -0400 Subject: [PATCH 03/19] Improve logging Signed-off-by: solonovamax --- .../dfsek/terra/commands/AddonsCommand.java | 5 ++-- .../com/dfsek/terra/commands/CommandUtil.java | 6 +++- .../dfsek/terra/commands/PacksCommand.java | 2 +- .../dfsek/terra/commands/ReloadCommand.java | 14 ++++++++-- .../dfsek/terra/config/PluginConfigImpl.java | 8 +++--- .../terra/config/fileloaders/LoaderImpl.java | 4 +-- .../com/dfsek/terra/config/lang/LangUtil.java | 15 +++++++--- .../preprocessor/MetaStringPreprocessor.java | 3 +- .../dfsek/terra/profiler/ProfilerImpl.java | 15 ++++++++-- .../terra/registry/master/AddonRegistry.java | 2 +- .../dfsek/terra/addon/AddonClassLoader.java | 2 +- .../java/com/dfsek/terra/addon/AddonPool.java | 16 +++++------ .../com/dfsek/terra/addon/PreLoadAddon.java | 12 ++++---- .../com/dfsek/terra/bukkit/BukkitAddon.java | 2 +- .../com/dfsek/terra/fabric/FabricAddon.java | 28 +++++++++++-------- .../dfsek/terra/fabric/FabricEntryPoint.java | 10 +++++-- .../dfsek/terra/fabric/TerraPluginImpl.java | 6 ++-- 17 files changed, 94 insertions(+), 56 deletions(-) diff --git a/common/implementation/src/main/java/com/dfsek/terra/commands/AddonsCommand.java b/common/implementation/src/main/java/com/dfsek/terra/commands/AddonsCommand.java index 92c82a89d..98e8875e7 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/commands/AddonsCommand.java +++ b/common/implementation/src/main/java/com/dfsek/terra/commands/AddonsCommand.java @@ -17,7 +17,8 @@ public class AddonsCommand implements CommandTemplate { @Override public void execute(CommandSender sender) { sender.sendMessage("Installed Addons:"); - main.getAddons().forEach( - addon -> sender.sendMessage(" - " + addon.getName() + " v" + addon.getVersion() + " by " + addon.getAuthor())); + main.getAddons().forEach(addon -> { + sender.sendMessage(" - " + addon.getName() + " v" + addon.getVersion() + " by " + addon.getAuthor()); + }); } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/commands/CommandUtil.java b/common/implementation/src/main/java/com/dfsek/terra/commands/CommandUtil.java index 6b314beb7..e0866ead7 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/commands/CommandUtil.java +++ b/common/implementation/src/main/java/com/dfsek/terra/commands/CommandUtil.java @@ -1,18 +1,22 @@ package com.dfsek.terra.commands; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.dfsek.terra.api.command.CommandManager; import com.dfsek.terra.api.command.exception.MalformedCommandException; import com.dfsek.terra.commands.profiler.ProfileCommand; public final class CommandUtil { + private static final Logger logger = LoggerFactory.getLogger(CommandUtil.class); public static void registerAll(CommandManager manager) throws MalformedCommandException { + logger.info("Registering Terra commands..."); manager.register("profile", ProfileCommand.class); manager.register("reload", ReloadCommand.class); manager.register("addons", AddonsCommand.class); manager.register("version", VersionCommand.class); manager.register("getblock", GetBlockCommand.class); manager.register("packs", PacksCommand.class); - } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/commands/PacksCommand.java b/common/implementation/src/main/java/com/dfsek/terra/commands/PacksCommand.java index 761f101b6..89179f9f7 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/commands/PacksCommand.java +++ b/common/implementation/src/main/java/com/dfsek/terra/commands/PacksCommand.java @@ -21,7 +21,7 @@ public class PacksCommand implements CommandTemplate { public void execute(CommandSender sender) { CheckedRegistry registry = main.getConfigRegistry(); - if(registry.entries().size() == 0) { + if(registry.entries().isEmpty()) { LangUtil.send("command.packs.none", sender); return; } diff --git a/common/implementation/src/main/java/com/dfsek/terra/commands/ReloadCommand.java b/common/implementation/src/main/java/com/dfsek/terra/commands/ReloadCommand.java index f0f6bdbb4..a4a351e6f 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/commands/ReloadCommand.java +++ b/common/implementation/src/main/java/com/dfsek/terra/commands/ReloadCommand.java @@ -1,5 +1,8 @@ package com.dfsek.terra.commands; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.command.CommandTemplate; import com.dfsek.terra.api.command.annotation.Command; @@ -12,15 +15,20 @@ import com.dfsek.terra.config.lang.LangUtil; usage = "/terra reload" ) public class ReloadCommand implements CommandTemplate { + private static final Logger logger = LoggerFactory.getLogger(ReloadCommand.class); + @Inject private TerraPlugin main; @Override public void execute(CommandSender sender) { - if(!main.reload()) { - LangUtil.send("command.reload-error", sender); - } else { + logger.info("Reloading Terra..."); + if(main.reload()) { + logger.info("Terra reloaded successfully."); LangUtil.send("command.reload", sender); + } else { + logger.warn("Terra failed to reload."); + LangUtil.send("command.reload-error", sender); } } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/PluginConfigImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/PluginConfigImpl.java index 72604f64b..4412aff53 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/PluginConfigImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/PluginConfigImpl.java @@ -80,7 +80,7 @@ public class PluginConfigImpl implements ConfigTemplate, com.dfsek.terra.api.con @Override public void load(TerraPlugin main) { - logger.info("Loading config values"); + logger.info("Loading config values from config.yml"); try(FileInputStream file = new FileInputStream(new File(main.getDataFolder(), "config.yml"))) { ConfigLoader loader = new ConfigLoader(); loader.load(this, new YamlConfiguration(file, "config.yml")); @@ -88,11 +88,11 @@ public class PluginConfigImpl implements ConfigTemplate, com.dfsek.terra.api.con logger.error("Failed to load config", e); } - if(isDebugCommands()) + if(debugCommands) logger.info("Debug commands enabled."); - if(isDebugProfiler()) + if(debugProfiler) logger.info("Debug profiler enabled."); - if(isDebugScript()) + if(debugScript) logger.info("Script debug blocks enabled."); } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/LoaderImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/LoaderImpl.java index 860c00b53..67403bc0f 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/LoaderImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/LoaderImpl.java @@ -41,7 +41,7 @@ public abstract class LoaderImpl implements Loader { */ @Override public LoaderImpl open(String directory, String extension) { - if(streams.size() != 0) throw new IllegalStateException("Attempted to load new directory before closing existing InputStreams"); + if(!streams.isEmpty()) throw new IllegalStateException("Attempted to load new directory before closing existing InputStreams"); load(directory, extension); return this; } @@ -55,7 +55,7 @@ public abstract class LoaderImpl implements Loader { try { input.close(); } catch(IOException e) { - logger.warn("Error occurred while loading", e); + logger.error("Error occurred while loading", e); } }); streams.clear(); diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java b/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java index b6e79fc68..dc0afa954 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java @@ -1,10 +1,13 @@ package com.dfsek.terra.config.lang; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; +import java.util.Objects; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.entity.CommandSender; @@ -14,25 +17,29 @@ import com.dfsek.terra.api.lang.Language; public final class LangUtil { private static final Logger logger = LoggerFactory.getLogger(LangUtil.class); - private static Language language; + @Nullable + private static Language LANGUAGE = null; + + private LangUtil() { } public static void load(String langID, TerraPlugin main) { File file = new File(main.getDataFolder(), "lang"); try { File file1 = new File(file, langID + ".yml"); logger.info(file1.getAbsolutePath()); - language = new LanguageImpl(file1); + LANGUAGE = new LanguageImpl(file1); logger.info("Loaded language {}", langID); } catch(IOException e) { logger.error("Unable to load language: {}.\nDouble-check your configuration before reporting this to Terra!", langID, e); } } + @NotNull public static Language getLanguage() { - return language; + return Objects.requireNonNull(LANGUAGE); } public static void send(String messageID, CommandSender sender, String... args) { - language.getMessage(messageID).send(sender, args); + Objects.requireNonNull(LANGUAGE).getMessage(messageID).send(sender, args); } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/preprocessor/MetaStringPreprocessor.java b/common/implementation/src/main/java/com/dfsek/terra/config/preprocessor/MetaStringPreprocessor.java index 235b6fe24..421ea1ac6 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/preprocessor/MetaStringPreprocessor.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/preprocessor/MetaStringPreprocessor.java @@ -21,8 +21,7 @@ public class MetaStringPreprocessor extends MetaPreprocessor { @SuppressWarnings("unchecked") @Override public @NotNull Result process(AnnotatedType t, T c, ConfigLoader loader, Meta annotation) { - if(String.class.equals(t.getType()) && c instanceof String) { // String is final so we use #equals - String candidate = (String) c; + if(String.class.equals(t.getType()) && c instanceof String candidate) { // String is final so we use #equals StringSubstitutor substitutor = new StringSubstitutor(key -> { Object meta = getMetaValue(key); if(!(meta instanceof String) && !(meta instanceof Number) && !(meta instanceof Character) && !(meta instanceof Boolean)) { diff --git a/common/implementation/src/main/java/com/dfsek/terra/profiler/ProfilerImpl.java b/common/implementation/src/main/java/com/dfsek/terra/profiler/ProfilerImpl.java index f6d403ef9..d75d2dd09 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/profiler/ProfilerImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/profiler/ProfilerImpl.java @@ -1,5 +1,8 @@ package com.dfsek.terra.profiler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -13,6 +16,8 @@ import com.dfsek.terra.profiler.exception.MalformedStackException; public class ProfilerImpl implements Profiler { + private static final Logger logger = LoggerFactory.getLogger(ProfilerImpl.class); + private static final ThreadLocal> THREAD_STACK = ThreadLocal.withInitial(Stack::new); private static final ThreadLocal>> TIMINGS = ThreadLocal.withInitial(HashMap::new); private static final ThreadLocal SAFE = ThreadLocal.withInitial(() -> false); @@ -22,7 +27,8 @@ public class ProfilerImpl implements Profiler { private volatile boolean running = false; public ProfilerImpl() { - if(instantiated) throw new IllegalStateException("Only one instance of Profiler may exist!"); + if(instantiated) + throw new IllegalStateException("Only one instance of Profiler may exist!"); instantiated = true; } @@ -45,14 +51,14 @@ public class ProfilerImpl implements Profiler { Map> timingsMap = TIMINGS.get(); - if(timingsMap.size() == 0) { + if(timingsMap.isEmpty()) { synchronized(accessibleThreadMaps) { accessibleThreadMaps.add(timingsMap); } } Frame top = stack.pop(); - if(stack.size() != 0 ? !top.getId().endsWith("." + frame) : !top.getId().equals(frame)) + if(!stack.isEmpty() ? !top.getId().endsWith("." + frame) : !top.getId().equals(frame)) throw new MalformedStackException("Expected " + frame + ", found " + top); List timings = timingsMap.computeIfAbsent(top.getId(), id -> new ArrayList<>()); @@ -64,16 +70,19 @@ public class ProfilerImpl implements Profiler { @Override public void start() { + logger.info("Starting Terra profiler"); running = true; } @Override public void stop() { + logger.info("Stopping Terra profiler"); running = false; } @Override public void reset() { + logger.info("Resetting Terra profiler"); accessibleThreadMaps.forEach(Map::clear); } diff --git a/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java b/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java index eddac10d1..0f13bb637 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java +++ b/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java @@ -70,7 +70,7 @@ public class AddonRegistry extends OpenRegistryImpl { try { for(File jar : addonsFolder.listFiles(file -> file.getName().endsWith(".jar"))) { - logger.info("Loading Addon(s) from: " + jar.getName()); + logger.info("Loading Addon(s) from: {}", jar.getName()); for(Class addonClass : AddonClassLoader.fetchAddonClasses(jar, parent)) { pool.add(new PreLoadAddon(addonClass, jar)); } diff --git a/common/loader/addon/src/main/java/com/dfsek/terra/addon/AddonClassLoader.java b/common/loader/addon/src/main/java/com/dfsek/terra/addon/AddonClassLoader.java index 859dfe498..b8b36dbc8 100644 --- a/common/loader/addon/src/main/java/com/dfsek/terra/addon/AddonClassLoader.java +++ b/common/loader/addon/src/main/java/com/dfsek/terra/addon/AddonClassLoader.java @@ -49,7 +49,7 @@ public class AddonClassLoader extends URLClassLoader { if(addon == null) continue; if(!TerraAddon.class.isAssignableFrom(clazz)) - throw new IllegalArgumentException("Addon class \"" + clazz + "\" must extend TerraAddon."); + throw new IllegalArgumentException(String.format("Addon class \"%s\" must extend TerraAddon.", clazz)); set.add((Class) clazz); } catch(ClassNotFoundException e) { diff --git a/common/loader/addon/src/main/java/com/dfsek/terra/addon/AddonPool.java b/common/loader/addon/src/main/java/com/dfsek/terra/addon/AddonPool.java index 35faba3e0..dddc7e9c0 100644 --- a/common/loader/addon/src/main/java/com/dfsek/terra/addon/AddonPool.java +++ b/common/loader/addon/src/main/java/com/dfsek/terra/addon/AddonPool.java @@ -13,15 +13,13 @@ public class AddonPool { public void add(PreLoadAddon addon) throws AddonLoadException { if(pool.containsKey(addon.getId())) { - String message = "Duplicate com.dfsek.terra.addon ID: " + - addon.getId() + "; original ID from file: " + - pool.get(addon.getId()).getFile().getAbsolutePath() + - ", class: " + - pool.get(addon.getId()).getAddonClass().getCanonicalName() + - "Duplicate ID from file: " + - addon.getFile().getAbsolutePath() + - ", class: " + - addon.getAddonClass().getCanonicalName(); + String message = String.format("Duplicate addon " + + "ID: %s; original ID from file: %s, class: %sDuplicate ID from file: %s, class: %s", + addon.getId(), + pool.get(addon.getId()).getFile().getAbsolutePath(), + pool.get(addon.getId()).getAddonClass().getCanonicalName(), + addon.getFile().getAbsolutePath(), + addon.getAddonClass().getCanonicalName()); throw new AddonLoadException(message); } pool.put(addon.getId(), addon); diff --git a/common/loader/addon/src/main/java/com/dfsek/terra/addon/PreLoadAddon.java b/common/loader/addon/src/main/java/com/dfsek/terra/addon/PreLoadAddon.java index 09648bda9..67a1bf952 100644 --- a/common/loader/addon/src/main/java/com/dfsek/terra/addon/PreLoadAddon.java +++ b/common/loader/addon/src/main/java/com/dfsek/terra/addon/PreLoadAddon.java @@ -14,6 +14,8 @@ import com.dfsek.terra.api.addon.annotations.Depends; public class PreLoadAddon { + public static final String[] ZERO_LENGTH_STRING_ARRAY = { }; // Don't allocate more than once + private final List depends = new ArrayList<>(); private final Class addonClass; private final String id; @@ -25,19 +27,19 @@ public class PreLoadAddon { this.id = addonClass.getAnnotation(Addon.class).value(); this.file = file; Depends depends = addonClass.getAnnotation(Depends.class); - this.dependencies = depends == null ? new String[]{ } : depends.value(); + this.dependencies = depends == null ? ZERO_LENGTH_STRING_ARRAY : depends.value(); } public void rebuildDependencies(AddonPool pool, PreLoadAddon origin, boolean levelG1) throws AddonLoadException { if(this.equals(origin) && !levelG1) - throw new CircularDependencyException( - "Detected circular dependency in addon \"" + id + "\", dependencies: " + Arrays.toString(dependencies)); + throw new CircularDependencyException(String.format("Detected circular dependency in addon \"%s\", dependencies: %s", + id, Arrays.toString(dependencies))); for(String dependency : dependencies) { PreLoadAddon preLoadAddon = pool.get(dependency); if(preLoadAddon == null) - throw new DependencyMissingException( - "Dependency " + dependency + " was not found. Please install " + dependency + " to use " + id + "."); + throw new DependencyMissingException(String.format("Dependency %s was not found. Please install %s to use %s.", + dependency, dependency, id)); depends.add(preLoadAddon); preLoadAddon.rebuildDependencies(pool, origin, false); } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitAddon.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitAddon.java index ff63e4738..ac5aa1a94 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitAddon.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitAddon.java @@ -10,7 +10,7 @@ import com.dfsek.terra.api.addon.annotations.Version; @Addon("Terra-Bukkit") @Version("1.0.0") @Author("Terra") -final class BukkitAddon extends TerraAddon { +public final class BukkitAddon extends TerraAddon { private final TerraPlugin main; public BukkitAddon(TerraPlugin main) { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java index 6b2c6ad14..5b14a9b07 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java @@ -58,11 +58,14 @@ public final class FabricAddon extends TerraAddon { } if(template.doRegistryInjection()) { + logger.info("Injecting structures into Terra"); + BuiltinRegistries.CONFIGURED_FEATURE.getEntries().forEach(entry -> { if(!template.getExcludedRegistryFeatures().contains(entry.getKey().getValue())) { try { - event.getPack().getCheckedRegistry(Tree.class).register(entry.getKey().getValue().toString(), - (Tree) entry.getValue()); + event.getPack() + .getCheckedRegistry(Tree.class) + .register(entry.getKey().getValue().toString(), (Tree) entry.getValue()); logger.info("Injected ConfiguredFeature {} as Tree.", entry.getKey().getValue()); } catch(DuplicateEntryException ignored) { } @@ -82,7 +85,7 @@ public final class FabricAddon extends TerraAddon { try { event.loadTemplate(template); } catch(ConfigException e) { - logger.error("Error loading config templatE", e); + logger.error("Error loading config template", e); } templates.get(event.getPack()).setRight(template); @@ -95,16 +98,17 @@ public final class FabricAddon extends TerraAddon { .register(this, BiomeRegistrationEvent.class) .then(event -> { logger.info("Registering biomes..."); + Registry biomeRegistry = event.getRegistryManager().get(Registry.BIOME_KEY); - terraFabricPlugin.getConfigRegistry().forEach(pack -> pack.getCheckedRegistry(TerraBiome.class) - .forEach( - (id, biome) -> FabricUtil.registerOrOverwrite( - biomeRegistry, Registry.BIOME_KEY, - new Identifier("terra", - FabricUtil.createBiomeID( - pack, id)), - FabricUtil.createBiome(biome, pack, - event.getRegistryManager())))); // Register all Terra biomes. + terraFabricPlugin.getConfigRegistry().forEach(pack -> { // Register all Terra biomes. + pack.getCheckedRegistry(TerraBiome.class) + .forEach((id, biome) -> { + Identifier identifier = new Identifier("terra", FabricUtil.createBiomeID(pack, id)); + Biome fabricBiome = FabricUtil.createBiome(biome, pack, event.getRegistryManager()); + + FabricUtil.registerOrOverwrite(biomeRegistry, Registry.BIOME_KEY, identifier, fabricBiome); + }); + }); logger.info("Biomes registered."); }) .global(); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java index fd4034967..785f92c3e 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java @@ -10,6 +10,8 @@ import net.minecraft.world.gen.decorator.NopeDecoratorConfig; import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.DefaultFeatureConfig; import net.minecraft.world.gen.feature.FeatureConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; import com.dfsek.terra.fabric.generation.PopulatorFeature; @@ -17,9 +19,12 @@ import com.dfsek.terra.fabric.generation.TerraBiomeSource; public class FabricEntryPoint implements ModInitializer { + private static final Logger logger = LoggerFactory.getLogger(FabricEntryPoint.class); + public static final PopulatorFeature POPULATOR_FEATURE = new PopulatorFeature(DefaultFeatureConfig.CODEC); - public static final ConfiguredFeature POPULATOR_CONFIGURED_FEATURE = POPULATOR_FEATURE.configure(FeatureConfig.DEFAULT).decorate( - Decorator.NOPE.configure(NopeDecoratorConfig.INSTANCE)); + public static final ConfiguredFeature POPULATOR_CONFIGURED_FEATURE = POPULATOR_FEATURE.configure(FeatureConfig.DEFAULT) + .decorate(Decorator.NOPE.configure( + NopeDecoratorConfig.INSTANCE)); private static final TerraPluginImpl TERRA_PLUGIN = new TerraPluginImpl(); public static TerraPluginImpl getTerraPlugin() { @@ -28,6 +33,7 @@ public class FabricEntryPoint implements ModInitializer { @Override public void onInitialize() { + logger.info("Initializing Terra Fabric mod..."); // register the things Registry.register(Registry.FEATURE, new Identifier("terra", "populator"), POPULATOR_FEATURE); RegistryKey> floraKey = RegistryKey.of(Registry.CONFIGURED_FEATURE_KEY, diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java index c7a5050c7..8e2d0b569 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java @@ -61,11 +61,11 @@ public class TerraPluginImpl extends AbstractTerraPlugin { @Override public void register(TypeRegistry registry) { super.register(registry); - registry - .registerLoader(com.dfsek.terra.api.world.biome.Biome.class, (t, o, l) -> parseBiome((String) o)) + registry.registerLoader(com.dfsek.terra.api.world.biome.Biome.class, (t, o, l) -> parseBiome((String) o)) .registerLoader(Identifier.class, (t, o, l) -> { Identifier identifier = Identifier.tryParse((String) o); - if(identifier == null) throw new LoadException("Invalid identifier: " + o); + if(identifier == null) + throw new LoadException("Invalid identifier: " + o); return identifier; }); } From 9eef2599b92c7769311b6d4155b2f03d8bfd2f0c Mon Sep 17 00:00:00 2001 From: solonovamax Date: Sat, 25 Sep 2021 01:12:06 -0400 Subject: [PATCH 04/19] Finish up merge into ver/6.0.0, as there were still some errors. Signed-off-by: solonovamax --- .../java/com/dfsek/terra/api/TerraPlugin.java | 1 - .../terra/config/pack/ConfigPackImpl.java | 148 +++++++++--------- .../terra/registry/master/AddonRegistry.java | 2 +- .../dfsek/terra/bukkit/TerraBukkitPlugin.java | 12 +- 4 files changed, 81 insertions(+), 82 deletions(-) diff --git a/common/api/core/src/main/java/com/dfsek/terra/api/TerraPlugin.java b/common/api/core/src/main/java/com/dfsek/terra/api/TerraPlugin.java index 3418e39b1..482a99d04 100644 --- a/common/api/core/src/main/java/com/dfsek/terra/api/TerraPlugin.java +++ b/common/api/core/src/main/java/com/dfsek/terra/api/TerraPlugin.java @@ -13,7 +13,6 @@ import com.dfsek.terra.api.profiler.Profiler; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.Registry; import com.dfsek.terra.api.tectonic.LoaderRegistrar; -import com.dfsek.terra.api.util.Logger; /** diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java index ef88dea94..6bfc063f9 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java @@ -273,79 +273,6 @@ public class ConfigPackImpl implements ConfigPack { return template.vanillaDecorations(); } - @Override - public BiomeProvider getBiomeProviderBuilder() { - return seededBiomeProvider; - } - - @SuppressWarnings("unchecked") - @Override - public CheckedRegistry getOrCreateRegistry(Type type) { - return (CheckedRegistry) registryMap.computeIfAbsent(type, c -> { - OpenRegistry registry = new OpenRegistryImpl<>(); - selfLoader.registerLoader(c, registry); - abstractConfigLoader.registerLoader(c, registry); - logger.debug("Registered loader for registry of class {}", ReflectionUtil.typeToString(c)); - - if(type instanceof ParameterizedType param) { - Type base = param.getRawType(); - if(base instanceof Class // should always be true but we'll check anyways - && Supplier.class.isAssignableFrom((Class) base)) { // If it's a supplier - Type supplied = param.getActualTypeArguments()[0]; // Grab the supplied type - if(supplied instanceof ParameterizedType suppliedParam) { - Type suppliedBase = suppliedParam.getRawType(); - if(suppliedBase instanceof Class // should always be true but we'll check anyways - && ObjectTemplate.class.isAssignableFrom((Class) suppliedBase)) { - Type templateType = suppliedParam.getActualTypeArguments()[0]; - GenericTemplateSupplierLoader loader = new GenericTemplateSupplierLoader<>( - (Registry>>>>) registry); - selfLoader.registerLoader(templateType, loader); - abstractConfigLoader.registerLoader(templateType, loader); - logger.debug("Registered template loader for registry of class {}", ReflectionUtil.typeToString(templateType)); - } - } - } - } - - return ImmutablePair.of(registry, new CheckedRegistryImpl<>(registry)); - }).getRight(); - } - - @Override - public List getStages() { - return template.getStages(); - } - - @Override - public Loader getLoader() { - return loader; - } - - @Override - public String getAuthor() { - return template.getAuthor(); - } - - @Override - public String getVersion() { - return template.getVersion(); - } - - @Override - public Map getLocatable() { - return template.getLocatable(); - } - - @Override - public RegistryFactory getRegistryFactory() { - return registryFactory; - } - - @Override - public ChunkGeneratorProvider getGeneratorProvider() { - return template.getGeneratorProvider(); - } - @SuppressWarnings("unchecked") private ConfigTypeRegistry createRegistry() { return new ConfigTypeRegistry(main, (id, configType) -> { @@ -353,7 +280,7 @@ public class ConfigPackImpl implements ConfigPack { if(registryMap.containsKey(configType.getTypeKey() .getType())) { // Someone already registered something; we need to copy things to the // new registry. - main.getDebugLogger().warning("Copying values from old registry for " + configType.getTypeKey()); + logger.warn("Copying values from old registry for {}", configType.getTypeKey()); registryMap.get(configType.getTypeKey().getType()).getLeft().forEach(((OpenRegistry) openRegistry)::register); } selfLoader.registerLoader(configType.getTypeKey().getType(), openRegistry); @@ -433,6 +360,79 @@ public class ConfigPackImpl implements ConfigPack { template.getID(), template.getVersion(), template.getAuthor(), (System.nanoTime() - start) / 1000000.0D); } + @Override + public BiomeProvider getBiomeProviderBuilder() { + return seededBiomeProvider; + } + + @SuppressWarnings("unchecked") + @Override + public CheckedRegistry getOrCreateRegistry(Type type) { + return (CheckedRegistry) registryMap.computeIfAbsent(type, c -> { + OpenRegistry registry = new OpenRegistryImpl<>(); + selfLoader.registerLoader(c, registry); + abstractConfigLoader.registerLoader(c, registry); + logger.debug("Registered loader for registry of class {}", ReflectionUtil.typeToString(c)); + + if(type instanceof ParameterizedType param) { + Type base = param.getRawType(); + if(base instanceof Class // should always be true but we'll check anyways + && Supplier.class.isAssignableFrom((Class) base)) { // If it's a supplier + Type supplied = param.getActualTypeArguments()[0]; // Grab the supplied type + if(supplied instanceof ParameterizedType suppliedParam) { + Type suppliedBase = suppliedParam.getRawType(); + if(suppliedBase instanceof Class // should always be true but we'll check anyways + && ObjectTemplate.class.isAssignableFrom((Class) suppliedBase)) { + Type templateType = suppliedParam.getActualTypeArguments()[0]; + GenericTemplateSupplierLoader loader = new GenericTemplateSupplierLoader<>( + (Registry>>>>) registry); + selfLoader.registerLoader(templateType, loader); + abstractConfigLoader.registerLoader(templateType, loader); + logger.debug("Registered template loader for registry of class {}", ReflectionUtil.typeToString(templateType)); + } + } + } + } + + return ImmutablePair.of(registry, new CheckedRegistryImpl<>(registry)); + }).getRight(); + } + + @Override + public List getStages() { + return template.getStages(); + } + + @Override + public Loader getLoader() { + return loader; + } + + @Override + public String getAuthor() { + return template.getAuthor(); + } + + @Override + public String getVersion() { + return template.getVersion(); + } + + @Override + public Map getLocatable() { + return template.getLocatable(); + } + + @Override + public RegistryFactory getRegistryFactory() { + return registryFactory; + } + + @Override + public ChunkGeneratorProvider getGeneratorProvider() { + return template.getGeneratorProvider(); + } + protected Map, CheckedRegistry>> getRegistryMap() { return registryMap; } diff --git a/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java b/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java index 1b685b505..b36618268 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java +++ b/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java @@ -15,8 +15,8 @@ import com.dfsek.terra.addon.PreLoadAddon; import com.dfsek.terra.addon.exception.AddonLoadException; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.addon.TerraAddon; +import com.dfsek.terra.api.inject.Injector; import com.dfsek.terra.api.inject.exception.InjectionException; -import com.dfsek.terra.api.injection.Injector; import com.dfsek.terra.api.registry.exception.DuplicateEntryException; import com.dfsek.terra.inject.InjectorImpl; import com.dfsek.terra.registry.OpenRegistryImpl; 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 776a64c0a..54bd90e23 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 @@ -64,7 +64,7 @@ public class TerraBukkitPlugin extends JavaPlugin { Errors occurred while registering commands. Please report this to Terra. - """, e); + """.strip(), e); Bukkit.getPluginManager().disablePlugin(this); return; } @@ -108,7 +108,7 @@ public class TerraBukkitPlugin extends JavaPlugin { | message, ask the fork developer to update upstream. | | | |------------------------------------------------------------------------------| - """, e); + """.strip(), e); } else { logger.warn(""" .------------------------------------------------------------------------------. @@ -120,7 +120,7 @@ public class TerraBukkitPlugin extends JavaPlugin { | more at https://papermc.io/ | | | |------------------------------------------------------------------------------| - """, e); + """.strip(), e); Bukkit.getPluginManager().registerEvents(new SpigotListener(terraPlugin), this); // Register Spigot event listener } @@ -138,6 +138,7 @@ public class TerraBukkitPlugin extends JavaPlugin { })); } + @SuppressWarnings({ "deprecation", "AccessOfSystemProperties" }) private boolean doVersionCheck() { logger.info("Running on version {} with {}.", VersionUtil.getMinecraftVersionInfo(), VersionUtil.getSpigotVersionInfo()); @@ -190,10 +191,9 @@ public class TerraBukkitPlugin extends JavaPlugin { | Do not come ask us why it is not working. | | | |----------------------------------------------------------------------------------| - """); + """.strip()); }; runnable.run(); - //noinspection deprecation Bukkit.getScheduler().scheduleAsyncDelayedTask(this, runnable, 200L); // Bukkit.shutdown(); // we're not *that* evil setEnabled(false); @@ -206,7 +206,7 @@ public class TerraBukkitPlugin extends JavaPlugin { > I felt a great disturbance in the JVM,as if millions of plugins suddenly cried out in stack traces and were suddenly silenced. > I fear something terrible has happened. > - Astrash - """); + """.strip()); } } return true; From 53296b2367fecbc7eed503788b386da725807486 Mon Sep 17 00:00:00 2001 From: solonovamax Date: Sat, 25 Sep 2021 01:12:35 -0400 Subject: [PATCH 05/19] Remap log4j-slf4j-impl Signed-off-by: solonovamax --- platforms/bukkit/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/platforms/bukkit/build.gradle.kts b/platforms/bukkit/build.gradle.kts index fa74e8af3..d58794346 100644 --- a/platforms/bukkit/build.gradle.kts +++ b/platforms/bukkit/build.gradle.kts @@ -181,6 +181,7 @@ tasks.named("shadowJar") { relocate("org.bstats.bukkit", "com.dfsek.terra.lib.bstats") relocate("io.papermc.lib", "com.dfsek.terra.lib.paperlib") relocate("com.google.common", "com.dfsek.terra.lib.google.common") + relocate("org.apache.logging.slf4j", "com.dfsek.terra.lib.slf4j-over-log4j") } From 33276f1cf32a42d5d3636eb7c361bb12cef79938 Mon Sep 17 00:00:00 2001 From: solonovamax Date: Sat, 25 Sep 2021 01:19:08 -0400 Subject: [PATCH 06/19] Forgot space lol Signed-off-by: solonovamax --- .../src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 54bd90e23..201f20858 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 @@ -203,7 +203,7 @@ public class TerraBukkitPlugin extends JavaPlugin { You are using Mohist, so we will not give you any support for issues that may arise. Since you enabled the "IKnowMohistCausesLotsOfIssuesButIWillUseItAnyways" flag, we won't disable Terra. But be warned. - > I felt a great disturbance in the JVM,as if millions of plugins suddenly cried out in stack traces and were suddenly silenced. + > I felt a great disturbance in the JVM, as if millions of plugins suddenly cried out in stack traces and were suddenly silenced. > I fear something terrible has happened. > - Astrash """.strip()); From ca55f06853eb2b63bbdf6b7a69625aabf0dded75 Mon Sep 17 00:00:00 2001 From: solonovamax Date: Sat, 25 Sep 2021 01:25:28 -0400 Subject: [PATCH 07/19] Forgot to invoke doVersionCheck lol Signed-off-by: solonovamax --- .../dfsek/terra/bukkit/TerraBukkitPlugin.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) 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 201f20858..3a2f3fcce 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 @@ -45,6 +45,10 @@ public class TerraBukkitPlugin extends JavaPlugin { @Override public void onEnable() { + if(!doVersionCheck()) { + return; + } + terraPlugin.getEventManager().callEvent(new PlatformInitializationEvent()); new Metrics(this, 9017); // Set up bStats. @@ -127,17 +131,6 @@ public class TerraBukkitPlugin extends JavaPlugin { } } - @Override - public @Nullable - ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, @Nullable String id) { - return new BukkitChunkGeneratorWrapper(generatorMap.computeIfAbsent(worldName, name -> { - if(!terraPlugin.getConfigRegistry().contains(id)) throw new IllegalArgumentException("No such config pack \"" + id + "\""); - ConfigPack pack = terraPlugin.getConfigRegistry().get(id); - worlds.put(worldName, pack); - return pack.getGeneratorProvider().newInstance(pack); - })); - } - @SuppressWarnings({ "deprecation", "AccessOfSystemProperties" }) private boolean doVersionCheck() { logger.info("Running on version {} with {}.", VersionUtil.getMinecraftVersionInfo(), VersionUtil.getSpigotVersionInfo()); @@ -211,4 +204,15 @@ public class TerraBukkitPlugin extends JavaPlugin { } return true; } + + @Override + public @Nullable + ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, @Nullable String id) { + return new BukkitChunkGeneratorWrapper(generatorMap.computeIfAbsent(worldName, name -> { + if(!terraPlugin.getConfigRegistry().contains(id)) throw new IllegalArgumentException("No such config pack \"" + id + "\""); + ConfigPack pack = terraPlugin.getConfigRegistry().get(id); + worlds.put(worldName, pack); + return pack.getGeneratorProvider().newInstance(pack); + })); + } } From bb463dae7edaf9e2cb532f0d33e6ed58c95ce2f2 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 26 Sep 2021 15:04:58 -0700 Subject: [PATCH 08/19] remove VersionUtil bloat --- .../dfsek/terra/bukkit/TerraBukkitPlugin.java | 5 +- .../dfsek/terra/bukkit/util/VersionUtil.java | 59 +------------------ 2 files changed, 3 insertions(+), 61 deletions(-) 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 3a2f3fcce..6e2e2ee1a 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 @@ -139,10 +139,7 @@ public class TerraBukkitPlugin extends JavaPlugin { logger.error("Terra does not work on version 1.16.5 at the moment."); if(!VersionUtil.getSpigotVersionInfo().isSpigot()) - logger.error("YOU ARE RUNNING A CRAFTBUKKIT OR BUKKIT SERVER JAR. PLEASE UPGRADE TO PAPER SPIGOT."); - - if(VersionUtil.getSpigotVersionInfo().isYatopia()) - logger.warn("Yatopia is a highly unstable fork of spigot. You may experience various issues with it."); + logger.error("YOU ARE RUNNING A CRAFTBUKKIT OR BUKKIT SERVER JAR. PLEASE UPGRADE TO PAPER."); if(VersionUtil.getSpigotVersionInfo().isMohist()) { if(System.getProperty("IKnowMohistCausesLotsOfIssuesButIWillUseItAnyways") == null) { diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/util/VersionUtil.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/util/VersionUtil.java index e5636ff20..8e7029362 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/util/VersionUtil.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/util/VersionUtil.java @@ -40,10 +40,6 @@ public final class VersionUtil { private final boolean spigot; private final boolean paper; private final boolean mohist; - private final boolean airplane; - private final boolean tuinity; - private final boolean purpur; - private final boolean yatopia; public SpigotVersionInfo() { @@ -52,33 +48,6 @@ public final class VersionUtil { paper = PaperLib.isPaper(); spigot = PaperLib.isSpigot(); - boolean isTuinity = false; - try { - Class.forName("com.tuinity.tuinity.config.TuinityConfig"); - isTuinity = true; - } catch(ClassNotFoundException ignored) { } - this.tuinity = isTuinity; - - boolean isAirplane = false; - try { - Class.forName("gg.airplane.AirplaneConfig"); - isAirplane = true; - } catch(ClassNotFoundException ignored) { } - this.airplane = isAirplane; - - boolean isPurpur = false; - try { - Class.forName("net.pl3x.purpur.PurpurConfig"); - isPurpur = true; - } catch(ClassNotFoundException ignored) { } - this.purpur = isPurpur; - - boolean isYatopia = false; - try { - Class.forName("org.yatopiamc.yatopia.server.YatopiaConfig"); - isYatopia = true; - } catch(ClassNotFoundException ignored) { } - this.yatopia = isYatopia; boolean isMohist = false; try { @@ -95,14 +64,6 @@ public final class VersionUtil { public String toString() { if(mohist) return "Mohist..."; - else if(yatopia) - return "Yaptopia"; - else if(purpur) - return "Purpur"; - else if(tuinity) - return "Tuinity"; - else if(airplane) - return "Airplane"; else if(paper) return "Paper"; else if(spigot) @@ -110,11 +71,7 @@ public final class VersionUtil { else return "Craftbukkit"; } - - public boolean isAirplane() { - return airplane; - } - + public boolean isPaper() { return paper; } @@ -122,22 +79,10 @@ public final class VersionUtil { public boolean isMohist() { return mohist; } - - public boolean isPurpur() { - return purpur; - } - + public boolean isSpigot() { return spigot; } - - public boolean isTuinity() { - return tuinity; - } - - public boolean isYatopia() { - return yatopia; - } } From 13cfb3adc66b9b3cc6c5bebb5adfd1858a92cab5 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 26 Sep 2021 15:05:15 -0700 Subject: [PATCH 09/19] we run on 1.13-1.17 --- .../main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java | 3 --- 1 file changed, 3 deletions(-) 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 6e2e2ee1a..afa143a49 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 @@ -135,9 +135,6 @@ public class TerraBukkitPlugin extends JavaPlugin { private boolean doVersionCheck() { logger.info("Running on version {} with {}.", VersionUtil.getMinecraftVersionInfo(), VersionUtil.getSpigotVersionInfo()); - if(VersionUtil.getMinecraftVersionInfo().getMinor() < 17) - logger.error("Terra does not work on version 1.16.5 at the moment."); - if(!VersionUtil.getSpigotVersionInfo().isSpigot()) logger.error("YOU ARE RUNNING A CRAFTBUKKIT OR BUKKIT SERVER JAR. PLEASE UPGRADE TO PAPER."); From 6cde584dd97e4e43567ac50d5fe512cbf23da2d4 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 26 Sep 2021 15:06:26 -0700 Subject: [PATCH 10/19] better server brand check --- .../src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 afa143a49..7c3874ead 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 @@ -133,7 +133,7 @@ public class TerraBukkitPlugin extends JavaPlugin { @SuppressWarnings({ "deprecation", "AccessOfSystemProperties" }) private boolean doVersionCheck() { - logger.info("Running on version {} with {}.", VersionUtil.getMinecraftVersionInfo(), VersionUtil.getSpigotVersionInfo()); + logger.info("Running on Minecraft version {} with server implementation {}.", VersionUtil.getMinecraftVersionInfo(), Bukkit.getServer().getName()); if(!VersionUtil.getSpigotVersionInfo().isSpigot()) logger.error("YOU ARE RUNNING A CRAFTBUKKIT OR BUKKIT SERVER JAR. PLEASE UPGRADE TO PAPER."); From 2dc2d00c0c511c5bc1ec80035b7331c4049d24d6 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 26 Sep 2021 15:08:43 -0700 Subject: [PATCH 11/19] remove unneeded toString --- .../com/dfsek/terra/bukkit/TerraBukkitPlugin.java | 2 +- .../com/dfsek/terra/bukkit/util/VersionUtil.java | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) 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 7c3874ead..118ca502a 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 @@ -136,7 +136,7 @@ public class TerraBukkitPlugin extends JavaPlugin { logger.info("Running on Minecraft version {} with server implementation {}.", VersionUtil.getMinecraftVersionInfo(), Bukkit.getServer().getName()); if(!VersionUtil.getSpigotVersionInfo().isSpigot()) - logger.error("YOU ARE RUNNING A CRAFTBUKKIT OR BUKKIT SERVER JAR. PLEASE UPGRADE TO PAPER."); + logger.error("YOU ARE RUNNING A CRAFTBUKKIT OR BUKKIT SERVER. PLEASE UPGRADE TO PAPER."); if(VersionUtil.getSpigotVersionInfo().isMohist()) { if(System.getProperty("IKnowMohistCausesLotsOfIssuesButIWillUseItAnyways") == null) { diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/util/VersionUtil.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/util/VersionUtil.java index 8e7029362..57357ac6c 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/util/VersionUtil.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/util/VersionUtil.java @@ -59,18 +59,6 @@ public final class VersionUtil { logger.debug("Spigot version info parsed successfully."); } - - @Override - public String toString() { - if(mohist) - return "Mohist..."; - else if(paper) - return "Paper"; - else if(spigot) - return "Spigot"; - else - return "Craftbukkit"; - } public boolean isPaper() { return paper; From 0e88d95ed543d52ed37b38888fe4f911e4b3057b Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 26 Sep 2021 15:11:42 -0700 Subject: [PATCH 12/19] properly disable the plugin --- .../src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 118ca502a..54703a791 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 @@ -183,7 +183,7 @@ public class TerraBukkitPlugin extends JavaPlugin { runnable.run(); Bukkit.getScheduler().scheduleAsyncDelayedTask(this, runnable, 200L); // Bukkit.shutdown(); // we're not *that* evil - setEnabled(false); + Bukkit.getPluginManager().disablePlugin(this); return false; } else { logger.warn(""" From 10f62b75b6e8993413a62c99f68698ef65a9d55f Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 26 Sep 2021 22:49:47 -0700 Subject: [PATCH 13/19] resolve conflicts --- .../core/src/main/java/com/dfsek/terra/api/Platform.java | 2 -- .../src/main/java/com/dfsek/terra/config/lang/LangUtil.java | 1 - .../java/com/dfsek/terra/config/pack/ConfigPackImpl.java | 6 +++--- .../src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java | 1 - .../main/java/com/dfsek/terra/fabric/FabricEntryPoint.java | 4 ++-- 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/common/api/core/src/main/java/com/dfsek/terra/api/Platform.java b/common/api/core/src/main/java/com/dfsek/terra/api/Platform.java index 6d117ffff..9d8c49637 100644 --- a/common/api/core/src/main/java/com/dfsek/terra/api/Platform.java +++ b/common/api/core/src/main/java/com/dfsek/terra/api/Platform.java @@ -19,8 +19,6 @@ import com.dfsek.terra.api.tectonic.LoaderRegistrar; * Represents a Terra mod/plugin instance. */ public interface Platform extends LoaderRegistrar { - Logger logger(); - boolean reload(); String platformName(); diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java b/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java index 8afc30719..2e2ee1c9e 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java @@ -23,7 +23,6 @@ public final class LangUtil { private LangUtil() { } public static void load(String langID, Platform platform) { - Logger logger = platform.logger(); File file = new File(platform.getDataFolder(), "lang"); try { File file1 = new File(file, langID + ".yml"); diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java index c5c6a340c..5cd135161 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java @@ -137,7 +137,7 @@ public class ConfigPackImpl implements ConfigPack { ConfigPackPostTemplate packPostTemplate = new ConfigPackPostTemplate(); selfLoader.load(packPostTemplate, configuration); seededBiomeProvider = packPostTemplate.getProviderBuilder(); - checkDeadEntries(platform); + checkDeadEntries(); } catch(FileNotFoundException e) { throw new LoadException("No pack.yml file found in " + folder.getAbsolutePath(), e); } @@ -189,7 +189,7 @@ public class ConfigPackImpl implements ConfigPack { selfLoader.load(packPostTemplate, configuration); seededBiomeProvider = packPostTemplate.getProviderBuilder(); - checkDeadEntries(platform); + checkDeadEntries(); } catch(IOException e) { throw new LoadException("Unable to load pack.yml from ZIP file", e); } @@ -362,7 +362,7 @@ public class ConfigPackImpl implements ConfigPack { }); } - private void checkDeadEntries(TerraPlugin main) { + private void checkDeadEntries() { registryMap.forEach((clazz, pair) -> ((OpenRegistryImpl) pair.getLeft()) .getDeadEntries() .forEach((id, value) -> logger.warn("Dead entry in '{}' registry: '{}'", ReflectionUtil.typeToString(clazz), id))); diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java index 3cefc71be..ee4457863 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java @@ -10,7 +10,6 @@ import java.util.Locale; import java.util.Optional; import com.dfsek.terra.AbstractPlatform; -import com.dfsek.terra.api.util.Logger; import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.handle.ItemHandle; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java index c69d6a038..684bf9af6 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java @@ -25,8 +25,8 @@ public class FabricEntryPoint implements ModInitializer { public static final ConfiguredFeature POPULATOR_CONFIGURED_FEATURE = POPULATOR_FEATURE.configure(FeatureConfig.DEFAULT).decorate( Decorator.NOPE.configure(NopeDecoratorConfig.INSTANCE)); private static final PlatformImpl TERRA_PLUGIN = new PlatformImpl(); - .decorate(Decorator.NOPE.configure( - NopeDecoratorConfig.INSTANCE)); + + public static PlatformImpl getTerraPlugin() { return TERRA_PLUGIN; } From 764f93f40f928f2848fd39eed6c23f43b5c93f75 Mon Sep 17 00:00:00 2001 From: solo Date: Mon, 27 Sep 2021 10:56:10 -0400 Subject: [PATCH 14/19] Add String#strip invocations to SpigotListener to remove trailing newline --- .../java/com/dfsek/terra/bukkit/listeners/SpigotListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 70968fe5e..d77d6748f 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 @@ -64,7 +64,7 @@ public class SpigotListener implements Listener { | that fixes this issue at the source, and doesn't require us to do | | stupid band-aids. | |------------------------------------------------------------------------| - """); + """.strip()); e.setCancelled(true); // Cancel leveling if the villager is a Cartographer, to prevent crashing server. } } @@ -79,7 +79,7 @@ public class SpigotListener implements Listener { | fixes this issue at the source, and doesn't require us to do stupid | | band-aids. | |------------------------------------------------------------------------| - """); + """.strip()); e.getEntity().setProfession(Villager.Profession.NITWIT); // Give villager new profession to prevent server crash. e.setCancelled(true); } From e3df44e16f86ad4d27f6262e2e0b51f094995fc8 Mon Sep 17 00:00:00 2001 From: solo Date: Mon, 27 Sep 2021 10:57:06 -0400 Subject: [PATCH 15/19] Add String#strip to AddonRegistry to remove trialing newline --- .../java/com/dfsek/terra/registry/master/AddonRegistry.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java b/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java index 9028edf5a..081dab52a 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java +++ b/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java @@ -114,7 +114,7 @@ public class AddonRegistry extends OpenRegistryImpl { Duplicate addon ID; addon with ID {} is already loaded. Existing addon class: {} Duplicate addon class: {} - """, + """.strip(), loadedAddon.getName(), get(loadedAddon.getName()).getClass().getCanonicalName(), addonClass.getCanonicalName()); From 1c97ec10e18d6a176bf00692efd0138350800235 Mon Sep 17 00:00:00 2001 From: solonovamax Date: Sun, 21 Nov 2021 01:14:54 -0500 Subject: [PATCH 16/19] Don't remove all the addons, thanks Signed-off-by: solonovamax --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 9b9bcda58..e397131d8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -60,4 +60,4 @@ url = https://github.com/PolyhedralDev/Terra-structure-terrascript-loader [submodule "common/addons/api-addon-loader"] path = common/addons/api-addon-loader - url = https://github.com/PolyhedralDev/Terra-api-addon-loader + url = https://github.com/PolyhedralDev/Terra-api-addon-loader \ No newline at end of file From 7fee2b971896c751be3a5094d7dd6b95937e2b1a Mon Sep 17 00:00:00 2001 From: solonovamax Date: Sun, 21 Nov 2021 01:22:31 -0500 Subject: [PATCH 17/19] Actually include git submodules this time Signed-off-by: solonovamax --- common/addons/biome-provider-image | 1 + common/addons/biome-provider-single | 1 + common/addons/chunk-generator-noise-3d | 1 + common/addons/config-biome | 1 + common/addons/config-carver | 1 + common/addons/config-distributors | 1 + common/addons/config-feature | 1 + common/addons/config-flora | 1 + common/addons/config-locators | 1 + common/addons/config-ore | 1 + common/addons/config-palette | 1 + common/addons/config-structure | 1 + common/addons/generation-stage-feature | 1 + common/addons/generation-stage-structure | 1 + common/addons/language-yaml | 1 + common/addons/manifest-addon-loader | 1 + common/addons/structure-terrascript-loader | 1 + 17 files changed, 17 insertions(+) create mode 160000 common/addons/biome-provider-image create mode 160000 common/addons/biome-provider-single create mode 160000 common/addons/chunk-generator-noise-3d create mode 160000 common/addons/config-biome create mode 160000 common/addons/config-carver create mode 160000 common/addons/config-distributors create mode 160000 common/addons/config-feature create mode 160000 common/addons/config-flora create mode 160000 common/addons/config-locators create mode 160000 common/addons/config-ore create mode 160000 common/addons/config-palette create mode 160000 common/addons/config-structure create mode 160000 common/addons/generation-stage-feature create mode 160000 common/addons/generation-stage-structure create mode 160000 common/addons/language-yaml create mode 160000 common/addons/manifest-addon-loader create mode 160000 common/addons/structure-terrascript-loader diff --git a/common/addons/biome-provider-image b/common/addons/biome-provider-image new file mode 160000 index 000000000..c678f200a --- /dev/null +++ b/common/addons/biome-provider-image @@ -0,0 +1 @@ +Subproject commit c678f200a73927094d8039a864296f301d26c63a diff --git a/common/addons/biome-provider-single b/common/addons/biome-provider-single new file mode 160000 index 000000000..2b561634c --- /dev/null +++ b/common/addons/biome-provider-single @@ -0,0 +1 @@ +Subproject commit 2b561634c499ef93f735f5093a3a26c20fdea69b diff --git a/common/addons/chunk-generator-noise-3d b/common/addons/chunk-generator-noise-3d new file mode 160000 index 000000000..51b30fb81 --- /dev/null +++ b/common/addons/chunk-generator-noise-3d @@ -0,0 +1 @@ +Subproject commit 51b30fb818daa2dd8e6a15308f15cd4ee68e4b5b diff --git a/common/addons/config-biome b/common/addons/config-biome new file mode 160000 index 000000000..e8f0144a0 --- /dev/null +++ b/common/addons/config-biome @@ -0,0 +1 @@ +Subproject commit e8f0144a0c1782bfccda40ed8fe49749fd7f8801 diff --git a/common/addons/config-carver b/common/addons/config-carver new file mode 160000 index 000000000..2e9f54dd2 --- /dev/null +++ b/common/addons/config-carver @@ -0,0 +1 @@ +Subproject commit 2e9f54dd24b3500bdbd98b1605df857d0cec5112 diff --git a/common/addons/config-distributors b/common/addons/config-distributors new file mode 160000 index 000000000..030e75f4e --- /dev/null +++ b/common/addons/config-distributors @@ -0,0 +1 @@ +Subproject commit 030e75f4e6b356ed8e520bfe33801953575f8f92 diff --git a/common/addons/config-feature b/common/addons/config-feature new file mode 160000 index 000000000..387a15954 --- /dev/null +++ b/common/addons/config-feature @@ -0,0 +1 @@ +Subproject commit 387a159541ecd261f1eeda91c56757c842f195f9 diff --git a/common/addons/config-flora b/common/addons/config-flora new file mode 160000 index 000000000..c39eaab27 --- /dev/null +++ b/common/addons/config-flora @@ -0,0 +1 @@ +Subproject commit c39eaab27e59303044e585b3ab1ef0ca708f5257 diff --git a/common/addons/config-locators b/common/addons/config-locators new file mode 160000 index 000000000..02df59482 --- /dev/null +++ b/common/addons/config-locators @@ -0,0 +1 @@ +Subproject commit 02df5948217688d56951de52711cc7338c7595c0 diff --git a/common/addons/config-ore b/common/addons/config-ore new file mode 160000 index 000000000..a33315684 --- /dev/null +++ b/common/addons/config-ore @@ -0,0 +1 @@ +Subproject commit a3331568493aec776a36414031eab220367afb38 diff --git a/common/addons/config-palette b/common/addons/config-palette new file mode 160000 index 000000000..a3111c969 --- /dev/null +++ b/common/addons/config-palette @@ -0,0 +1 @@ +Subproject commit a3111c969df9dffc757facce1f756f743b55f0d8 diff --git a/common/addons/config-structure b/common/addons/config-structure new file mode 160000 index 000000000..04865538b --- /dev/null +++ b/common/addons/config-structure @@ -0,0 +1 @@ +Subproject commit 04865538bfa596f361c7364c607b492bbe754451 diff --git a/common/addons/generation-stage-feature b/common/addons/generation-stage-feature new file mode 160000 index 000000000..bd02f5528 --- /dev/null +++ b/common/addons/generation-stage-feature @@ -0,0 +1 @@ +Subproject commit bd02f5528879e88f52a50621854cb9bf2ecaf081 diff --git a/common/addons/generation-stage-structure b/common/addons/generation-stage-structure new file mode 160000 index 000000000..7cea496c0 --- /dev/null +++ b/common/addons/generation-stage-structure @@ -0,0 +1 @@ +Subproject commit 7cea496c01fafa5f233b2e983c002b640d463b1c diff --git a/common/addons/language-yaml b/common/addons/language-yaml new file mode 160000 index 000000000..b9f98da05 --- /dev/null +++ b/common/addons/language-yaml @@ -0,0 +1 @@ +Subproject commit b9f98da059b4daa9513c09151170f5239fd76d71 diff --git a/common/addons/manifest-addon-loader b/common/addons/manifest-addon-loader new file mode 160000 index 000000000..c5db2fcd2 --- /dev/null +++ b/common/addons/manifest-addon-loader @@ -0,0 +1 @@ +Subproject commit c5db2fcd23c8cd16b1ad836fbb9ae7dac7c356bb diff --git a/common/addons/structure-terrascript-loader b/common/addons/structure-terrascript-loader new file mode 160000 index 000000000..355e02402 --- /dev/null +++ b/common/addons/structure-terrascript-loader @@ -0,0 +1 @@ +Subproject commit 355e024025e9906f76c2c1c4332081549b597c6c From d2d96813ad81907622326cd28247d6abec7ffcbb Mon Sep 17 00:00:00 2001 From: solonovamax Date: Sun, 21 Nov 2021 01:25:06 -0500 Subject: [PATCH 18/19] Have your newline back Signed-off-by: solonovamax --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index e397131d8..9b9bcda58 100644 --- a/.gitmodules +++ b/.gitmodules @@ -60,4 +60,4 @@ url = https://github.com/PolyhedralDev/Terra-structure-terrascript-loader [submodule "common/addons/api-addon-loader"] path = common/addons/api-addon-loader - url = https://github.com/PolyhedralDev/Terra-api-addon-loader \ No newline at end of file + url = https://github.com/PolyhedralDev/Terra-api-addon-loader From dd259c4d8f054511ca4163b7104039b2f821d366 Mon Sep 17 00:00:00 2001 From: solonovamax Date: Sun, 21 Nov 2021 19:18:00 -0500 Subject: [PATCH 19/19] Make logging actually work Signed-off-by: solonovamax --- .../com/dfsek/terra/AbstractPlatform.java | 70 +++++++++---------- .../dfsek/terra/config/PluginConfigImpl.java | 1 - .../com/dfsek/terra/config/lang/LangUtil.java | 1 - .../event/FunctionalEventHandlerImpl.java | 4 +- .../terra/addon/BootstrapAddonLoader.java | 19 ++--- platforms/bukkit/build.gradle.kts | 3 +- platforms/fabric/build.gradle.kts | 3 +- .../dfsek/terra/fabric/FabricEntryPoint.java | 6 -- .../com/dfsek/terra/fabric/PlatformImpl.java | 5 +- .../FabricChunkGeneratorWrapper.java | 55 ++++++++------- .../terra/fabric/mixin/ServerWorldMixin.java | 1 + platforms/sponge/build.gradle.kts | 3 +- 12 files changed, 85 insertions(+), 86 deletions(-) diff --git a/common/implementation/src/main/java/com/dfsek/terra/AbstractPlatform.java b/common/implementation/src/main/java/com/dfsek/terra/AbstractPlatform.java index 644939da6..83360fd03 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/AbstractPlatform.java +++ b/common/implementation/src/main/java/com/dfsek/terra/AbstractPlatform.java @@ -94,45 +94,18 @@ public abstract class AbstractPlatform implements Platform { private final Registry lockedAddonRegistry = new LockedRegistryImpl<>(addonRegistry); - @Override - public void register(TypeRegistry registry) { - loaders.register(registry); + public ConfigRegistry getRawConfigRegistry() { + return configRegistry; } - @Override - public PluginConfig getTerraConfig() { - return config; - } - - @Override - public Language getLanguage() { - return LangUtil.getLanguage(); - } - - @Override - public CheckedRegistry getConfigRegistry() { - return checkedConfigRegistry; - } - - @Override - public Registry getAddons() { - return lockedAddonRegistry; - } - - @Override - public EventManager getEventManager() { - return eventManager; + public CommandManager getManager() { + return manager; } protected Optional platformAddon() { return Optional.empty(); } - @Override - public Profiler getProfiler() { - return profiler; - } - protected void load() { if(LOADED.get()) { throw new IllegalStateException( @@ -257,11 +230,38 @@ public abstract class AbstractPlatform implements Platform { return Optional.empty(); } - public ConfigRegistry getRawConfigRegistry() { - return configRegistry; + @Override + public void register(TypeRegistry registry) { + loaders.register(registry); } - public CommandManager getManager() { - return manager; + @Override + public PluginConfig getTerraConfig() { + return config; + } + + @Override + public Language getLanguage() { + return LangUtil.getLanguage(); + } + + @Override + public CheckedRegistry getConfigRegistry() { + return checkedConfigRegistry; + } + + @Override + public Registry getAddons() { + return lockedAddonRegistry; + } + + @Override + public EventManager getEventManager() { + return eventManager; + } + + @Override + public Profiler getProfiler() { + return profiler; } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/PluginConfigImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/PluginConfigImpl.java index b482d8af0..633b1a741 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/PluginConfigImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/PluginConfigImpl.java @@ -33,7 +33,6 @@ import java.io.UncheckedIOException; import java.time.Duration; import com.dfsek.terra.api.Platform; -import com.dfsek.terra.api.util.Logger; @SuppressWarnings("FieldMayBeFinal") diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java b/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java index 6e4a0850d..ae94dc3d8 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/lang/LangUtil.java @@ -29,7 +29,6 @@ import java.util.Objects; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.entity.CommandSender; import com.dfsek.terra.api.lang.Language; -import com.dfsek.terra.api.util.Logger; public final class LangUtil { diff --git a/common/implementation/src/main/java/com/dfsek/terra/event/FunctionalEventHandlerImpl.java b/common/implementation/src/main/java/com/dfsek/terra/event/FunctionalEventHandlerImpl.java index 5d7af7aa9..8df0bc939 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/event/FunctionalEventHandlerImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/event/FunctionalEventHandlerImpl.java @@ -65,8 +65,8 @@ public class FunctionalEventHandlerImpl implements FunctionalEventHandler { if(context.isFailThrough() && event instanceof FailThroughEvent) throw e; // Rethrow if it's fail-through. // else warn - logger.warn("Exception occurred during event handling. Report this to the maintainers of {}, {}", - context.getAddon().getID(), context.getAddon().getAuthor(), e); + logger.warn("Exception occurred during event handling. Report this to the maintainers of {}@{}", + context.getAddon().getID(), context.getAddon().getVersion().getFormatted(), e); } }); } diff --git a/common/loader/addon/src/main/java/com/dfsek/terra/addon/BootstrapAddonLoader.java b/common/loader/addon/src/main/java/com/dfsek/terra/addon/BootstrapAddonLoader.java index c2e349254..75871c23a 100644 --- a/common/loader/addon/src/main/java/com/dfsek/terra/addon/BootstrapAddonLoader.java +++ b/common/loader/addon/src/main/java/com/dfsek/terra/addon/BootstrapAddonLoader.java @@ -17,6 +17,11 @@ package com.dfsek.terra.addon; +import ca.solostudios.strata.Versions; +import ca.solostudios.strata.version.Version; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; import java.io.UncheckedIOException; import java.lang.reflect.InvocationTargetException; @@ -26,31 +31,29 @@ import java.nio.file.Path; import java.util.jar.JarFile; import java.util.stream.Collectors; -import ca.solostudios.strata.Versions; -import ca.solostudios.strata.version.Version; - import com.dfsek.terra.addon.exception.AddonLoadException; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.bootstrap.BootstrapBaseAddon; public class BootstrapAddonLoader implements BootstrapBaseAddon> { - private final Platform platform; - + private static final Logger logger = LoggerFactory.getLogger(BootstrapAddonLoader.class); private static final Version VERSION = Versions.getVersion(1, 0, 0); + private final Platform platform; + public BootstrapAddonLoader(Platform platform) { this.platform = platform; } @Override public Iterable> loadAddons(Path addonsFolder, ClassLoader parent) { Path bootstrapAddons = addonsFolder.resolve("bootstrap"); - platform.logger().info("Loading bootstrap addons from " + bootstrapAddons); + logger.info("Loading bootstrap addons from {}", bootstrapAddons); try { return Files.walk(bootstrapAddons, 1) .filter(path -> path.toFile().isFile() && path.toString().endsWith(".jar")) .map(path -> { try { - platform.logger().info("Loading bootstrap addon from JAR " + path); + logger.info("Loading bootstrap addon from JAR {}", path); JarFile jar = new JarFile(path.toFile()); String entry = jar.getManifest().getMainAttributes().getValue("Bootstrap-Addon-Entry-Point"); @@ -65,7 +68,7 @@ public class BootstrapAddonLoader implements BootstrapBaseAddon) in).getID()); + logger.info("Loaded bootstrap addon {}", ((BootstrapBaseAddon) in).getID()); return (BootstrapBaseAddon) in; } catch(InvocationTargetException e) { throw new AddonLoadException("Exception occurred while instantiating addon: ", e); diff --git a/platforms/bukkit/build.gradle.kts b/platforms/bukkit/build.gradle.kts index d58794346..4295bbd58 100644 --- a/platforms/bukkit/build.gradle.kts +++ b/platforms/bukkit/build.gradle.kts @@ -17,7 +17,8 @@ val purpurURL = "https://ci.pl3x.net/job/Purpur/lastSuccessfulBuild/artifact/fin dependencies { "shadedApi"(project(":common:implementation")) - "shadedImplementation"("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") + shadedImplementation("org.slf4j:slf4j-log4j12:1.7.32") +// "shadedImplementation"("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") "compileOnly"("io.papermc.paper:paper-api:1.17-R0.1-SNAPSHOT") "shadedImplementation"("io.papermc:paperlib:1.0.5") diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 9de29c3e6..93a2cda83 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -24,7 +24,8 @@ val fabricLoader = "0.12.5" dependencies { "shadedApi"(project(":common:implementation")) - "shadedImplementation"("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") + shadedImplementation("org.slf4j:slf4j-log4j12:1.7.32") +// shadedImplementation("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") "minecraft"("com.mojang:minecraft:$minecraft") "mappings"("net.fabricmc:yarn:$minecraft+build.$yarn:v2") diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java index 66f6c9089..11f6c64a6 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java @@ -20,12 +20,6 @@ package com.dfsek.terra.fabric; import net.fabricmc.api.ModInitializer; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryKey; -import net.minecraft.world.gen.decorator.Decorator; -import net.minecraft.world.gen.decorator.NopeDecoratorConfig; -import net.minecraft.world.gen.feature.ConfiguredFeature; -import net.minecraft.world.gen.feature.DefaultFeatureConfig; -import net.minecraft.world.gen.feature.FeatureConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/PlatformImpl.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/PlatformImpl.java index 1233d1cf7..845461887 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/PlatformImpl.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/PlatformImpl.java @@ -19,9 +19,6 @@ package com.dfsek.terra.fabric; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.TypeRegistry; - -import com.dfsek.terra.api.addon.BaseAddon; - import net.fabricmc.loader.api.FabricLoader; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.Identifier; @@ -33,9 +30,9 @@ import java.util.Optional; import java.util.Set; import com.dfsek.terra.AbstractPlatform; +import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.handle.WorldHandle; -import com.dfsek.terra.api.util.Logger; import com.dfsek.terra.api.util.generic.Lazy; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java index 1c427afd8..a22df18e2 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java @@ -17,17 +17,6 @@ package com.dfsek.terra.fabric.generation; -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.world.World; -import com.dfsek.terra.api.world.generator.ChunkData; -import com.dfsek.terra.api.world.generator.ChunkGenerator; -import com.dfsek.terra.api.world.generator.Chunkified; -import com.dfsek.terra.api.world.generator.GeneratorWrapper; -import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.block.FabricBlockState; -import com.dfsek.terra.fabric.mixin.StructureAccessorAccessor; -import com.dfsek.terra.util.FastRandom; - import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.block.BlockState; @@ -46,15 +35,18 @@ import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.SpawnSettings; import net.minecraft.world.biome.source.BiomeAccess; -import net.minecraft.world.biome.source.util.MultiNoiseUtil.MultiNoiseSampler; -import net.minecraft.world.biome.source.util.MultiNoiseUtil.NoiseValuePoint; +import net.minecraft.world.biome.source.util.MultiNoiseUtil; import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.gen.GenerationStep.Carver; +import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.StructureAccessor; import net.minecraft.world.gen.chunk.Blender; import net.minecraft.world.gen.chunk.StructuresConfig; import net.minecraft.world.gen.chunk.VerticalBlockSample; -import net.minecraft.world.gen.feature.*; +import net.minecraft.world.gen.feature.NetherFortressFeature; +import net.minecraft.world.gen.feature.OceanMonumentFeature; +import net.minecraft.world.gen.feature.PillagerOutpostFeature; +import net.minecraft.world.gen.feature.StructureFeature; +import net.minecraft.world.gen.feature.SwampHutFeature; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,6 +54,17 @@ import org.slf4j.LoggerFactory; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.world.World; +import com.dfsek.terra.api.world.generator.ChunkData; +import com.dfsek.terra.api.world.generator.ChunkGenerator; +import com.dfsek.terra.api.world.generator.Chunkified; +import com.dfsek.terra.api.world.generator.GeneratorWrapper; +import com.dfsek.terra.fabric.FabricEntryPoint; +import com.dfsek.terra.fabric.block.FabricBlockState; +import com.dfsek.terra.fabric.mixin.StructureAccessorAccessor; +import com.dfsek.terra.util.FastRandom; + public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.ChunkGenerator implements GeneratorWrapper { private static final Logger logger = LoggerFactory.getLogger(FabricChunkGeneratorWrapper.class); @@ -110,15 +113,17 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C return new FabricChunkGeneratorWrapper((TerraBiomeSource) this.biomeSource.withSeed(seed), seed, pack); } - @Override - public MultiNoiseSampler getMultiNoiseSampler() { - return (x, y, z) -> new NoiseValuePoint(0, 0, 0, 0, 0, 0); + public void setPack(ConfigPack pack) { + this.pack = pack; + this.delegate = pack.getGeneratorProvider().newInstance(pack); + biomeSource.setPack(pack); + + logger.debug("Loading world with config pack {}", pack.getID()); } @Override - public void carve(ChunkRegion chunkRegion, long seed, BiomeAccess biomeAccess, StructureAccessor structureAccessor, Chunk chunk, - Carver generationStep) { - + public MultiNoiseUtil.MultiNoiseSampler getMultiNoiseSampler() { + return (x, y, z) -> new MultiNoiseUtil.NoiseValuePoint(0, 0, 0, 0, 0, 0); } @@ -285,12 +290,10 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C return pack; } - public void setPack(ConfigPack pack) { - this.pack = pack; - this.delegate = pack.getGeneratorProvider().newInstance(pack); - biomeSource.setPack(pack); + @Override + public void carve(ChunkRegion chunkRegion, long seed, BiomeAccess biomeAccess, StructureAccessor structureAccessor, Chunk chunk, + GenerationStep.Carver generationStep) { - delegate.getPlatform().logger().info("Loading world with config pack " + pack.getID()); } public void setWorld(ServerWorld world) { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java index 702e0460e..efcc46ba7 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java @@ -37,6 +37,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.List; import java.util.concurrent.Executor; +import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; diff --git a/platforms/sponge/build.gradle.kts b/platforms/sponge/build.gradle.kts index 606d28022..eed221ad2 100644 --- a/platforms/sponge/build.gradle.kts +++ b/platforms/sponge/build.gradle.kts @@ -11,7 +11,8 @@ repositories { dependencies { "shadedApi"(project(":common:implementation")) - "shadedImplementation"("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") + shadedImplementation("org.slf4j:slf4j-log4j12:1.7.32") +// "shadedImplementation"("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") "annotationProcessor"("org.spongepowered:spongeapi:9.0.0-SNAPSHOT") "shadedImplementation"("org.spongepowered:spongeapi:9.0.0-SNAPSHOT")