mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-02-16 02:20:57 +00:00
preparations for Sponge API8
This commit is contained in:
@@ -7,14 +7,14 @@ import com.dfsek.terra.api.platform.handle.WorldHandle;
|
||||
import com.dfsek.terra.api.platform.world.World;
|
||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||
import com.dfsek.terra.api.registry.LockedRegistry;
|
||||
import com.dfsek.terra.api.util.DebugLogger;
|
||||
import com.dfsek.terra.api.util.logging.DebugLogger;
|
||||
import com.dfsek.terra.api.util.logging.Logger;
|
||||
import com.dfsek.terra.config.PluginConfig;
|
||||
import com.dfsek.terra.config.lang.Language;
|
||||
import com.dfsek.terra.config.pack.ConfigPack;
|
||||
import com.dfsek.terra.world.TerraWorld;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Represents a Terra mod/plugin instance.
|
||||
@@ -24,7 +24,7 @@ public interface TerraPlugin extends LoaderRegistrar {
|
||||
|
||||
TerraWorld getWorld(World world);
|
||||
|
||||
Logger getLogger();
|
||||
Logger logger();
|
||||
|
||||
PluginConfig getTerraConfig();
|
||||
|
||||
|
||||
@@ -47,15 +47,15 @@ public class TerraEventManager implements EventManager {
|
||||
} catch(InvocationTargetException e) {
|
||||
StringWriter writer = new StringWriter();
|
||||
e.getTargetException().printStackTrace(new PrintWriter(writer));
|
||||
main.getLogger().warning("Exception occurred during event handling:");
|
||||
main.getLogger().warning(writer.toString());
|
||||
main.getLogger().warning("Report this to the maintainers of " + listenerHolder.method.getName());
|
||||
main.logger().warning("Exception occurred during event handling:");
|
||||
main.logger().warning(writer.toString());
|
||||
main.logger().warning("Report this to the maintainers of " + listenerHolder.method.getName());
|
||||
} catch(Exception e) {
|
||||
StringWriter writer = new StringWriter();
|
||||
e.printStackTrace(new PrintWriter(writer));
|
||||
main.getLogger().warning("Exception occurred during event handling:");
|
||||
main.getLogger().warning(writer.toString());
|
||||
main.getLogger().warning("Report this to the maintainers of " + listenerHolder.method.getName());
|
||||
main.logger().warning("Exception occurred during event handling:");
|
||||
main.logger().warning(writer.toString());
|
||||
main.logger().warning("Report this to the maintainers of " + listenerHolder.method.getName());
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
@@ -8,9 +8,13 @@ import com.dfsek.terra.api.platform.entity.EntityType;
|
||||
* Interface to be implemented for world manipulation.
|
||||
*/
|
||||
public interface WorldHandle {
|
||||
void setBlockData(Block block, BlockData data, boolean physics);
|
||||
default void setBlockData(Block block, BlockData data, boolean physics) {
|
||||
block.setBlockData(data, physics);
|
||||
}
|
||||
|
||||
BlockData getBlockData(Block block);
|
||||
default BlockData getBlockData(Block block) {
|
||||
return block.getBlockData();
|
||||
}
|
||||
|
||||
BlockData createBlockData(String data);
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ public class EnchantFunction implements LootFunction {
|
||||
try {
|
||||
meta.addEnchantment(chosen, FastMath.max(lvl, 1));
|
||||
} catch(IllegalArgumentException e) {
|
||||
main.getLogger().warning("Attempted to enchant " + original.getType() + " with " + chosen + " at level " + FastMath.max(lvl, 1) + ", but an unexpected exception occurred! Usually this is caused by a misbehaving enchantment plugin.");
|
||||
main.logger().warning("Attempted to enchant " + original.getType() + " with " + chosen + " at level " + FastMath.max(lvl, 1) + ", but an unexpected exception occurred! Usually this is caused by a misbehaving enchantment plugin.");
|
||||
}
|
||||
}
|
||||
original.setItemMeta(meta);
|
||||
|
||||
@@ -149,7 +149,7 @@ public class StructureScript {
|
||||
try {
|
||||
return !block.apply(arguments).getLevel().equals(Block.ReturnLevel.FAIL);
|
||||
} catch(RuntimeException e) {
|
||||
main.getLogger().severe("Failed to generate structure at " + arguments.getBuffer().getOrigin() + ": " + e.getMessage());
|
||||
main.logger().severe("Failed to generate structure at " + arguments.getBuffer().getOrigin() + ": " + e.getMessage());
|
||||
main.getDebugLogger().stack(e);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ public class LootFunction implements Function<Void> {
|
||||
LootTable table = registry.get(id);
|
||||
|
||||
if(table == null) {
|
||||
main.getLogger().severe("No such loot table " + id);
|
||||
main.logger().severe("No such loot table " + id);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ public class StructureFunction implements Function<Boolean> {
|
||||
String app = id.apply(implementationArguments, variableMap);
|
||||
StructureScript script = registry.get(app);
|
||||
if(script == null) {
|
||||
main.getLogger().severe("No such structure " + app);
|
||||
main.logger().severe("No such structure " + app);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ public class StructureFunction implements Function<Boolean> {
|
||||
try {
|
||||
rotation1 = Rotation.valueOf(rotString);
|
||||
} catch(IllegalArgumentException e) {
|
||||
main.getLogger().severe("Invalid rotation " + rotString);
|
||||
main.logger().severe("Invalid rotation " + rotString);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ public class BufferedLootApplication implements BufferedItem {
|
||||
public void paste(Location origin) {
|
||||
BlockState data = origin.getBlock().getState();
|
||||
if(!(data instanceof Container)) {
|
||||
main.getLogger().severe("Failed to place loot at " + origin + "; block " + data + " is not container.");
|
||||
main.logger().severe("Failed to place loot at " + origin + "; block " + data + " is not container.");
|
||||
return;
|
||||
}
|
||||
Container container = (Container) data;
|
||||
|
||||
@@ -20,7 +20,7 @@ public class BufferedStateManipulator implements BufferedItem {
|
||||
state.applyState(data);
|
||||
state.update(false);
|
||||
} catch(Exception e) {
|
||||
main.getLogger().warning("Could not apply BlockState at " + origin + ": " + e.getMessage());
|
||||
main.logger().warning("Could not apply BlockState at " + origin + ": " + e.getMessage());
|
||||
main.getDebugLogger().stack(e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
package com.dfsek.terra.api.util;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
package com.dfsek.terra.api.util.logging;
|
||||
|
||||
public class DebugLogger {
|
||||
private final Logger logger;
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.dfsek.terra.api.util.logging;
|
||||
|
||||
public class JavaLogger implements Logger {
|
||||
private final java.util.logging.Logger logger;
|
||||
|
||||
public JavaLogger(java.util.logging.Logger logger) {
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String message) {
|
||||
logger.info(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warning(String message) {
|
||||
logger.warning(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void severe(String message) {
|
||||
logger.severe(message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.dfsek.terra.api.util.logging;
|
||||
|
||||
public interface Logger {
|
||||
void info(String message);
|
||||
|
||||
void warning(String message);
|
||||
|
||||
void severe(String message);
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import com.dfsek.tectonic.exception.ConfigException;
|
||||
import com.dfsek.tectonic.loading.ConfigLoader;
|
||||
import com.dfsek.terra.api.TerraPlugin;
|
||||
import com.dfsek.terra.api.util.JarUtil;
|
||||
import com.dfsek.terra.api.util.logging.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
@@ -14,7 +15,6 @@ import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.time.Duration;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@SuppressWarnings("FieldMayBeFinal")
|
||||
public class PluginConfig implements ConfigTemplate {
|
||||
@@ -63,7 +63,7 @@ public class PluginConfig implements ConfigTemplate {
|
||||
private int maxRecursion = 1000;
|
||||
|
||||
public void load(TerraPlugin main) {
|
||||
Logger logger = main.getLogger();
|
||||
Logger logger = main.logger();
|
||||
logger.info("Loading config values");
|
||||
try(FileInputStream file = new FileInputStream(new File(main.getDataFolder(), "config.yml"))) {
|
||||
ConfigLoader loader = new ConfigLoader();
|
||||
|
||||
@@ -2,22 +2,20 @@ package com.dfsek.terra.config.lang;
|
||||
|
||||
import com.dfsek.terra.api.TerraPlugin;
|
||||
import com.dfsek.terra.api.platform.CommandSender;
|
||||
import com.dfsek.terra.api.util.logging.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import static com.dfsek.terra.api.util.JarUtil.copyResourcesToDirectory;
|
||||
|
||||
public final class LangUtil {
|
||||
private static Language language;
|
||||
private static Logger logger;
|
||||
|
||||
public static void load(String langID, TerraPlugin main) {
|
||||
logger = main.getLogger();
|
||||
Logger logger = main.logger();
|
||||
File file = new File(main.getDataFolder(), "lang");
|
||||
try(JarFile jar = new JarFile(new File(TerraPlugin.class.getProtectionDomain().getCodeSource().getLocation().toURI()))) {
|
||||
copyResourcesToDirectory(jar, "lang", file.toString());
|
||||
@@ -41,10 +39,6 @@ public final class LangUtil {
|
||||
return language;
|
||||
}
|
||||
|
||||
public static void log(String messageID, Level level, String... args) {
|
||||
language.getMessage(messageID).log(logger, level, args);
|
||||
}
|
||||
|
||||
public static void send(String messageID, CommandSender sender, String... args) {
|
||||
language.getMessage(messageID).send(sender, args);
|
||||
}
|
||||
|
||||
@@ -34,7 +34,6 @@ import com.dfsek.terra.config.factories.TreeFactory;
|
||||
import com.dfsek.terra.config.fileloaders.FolderLoader;
|
||||
import com.dfsek.terra.config.fileloaders.Loader;
|
||||
import com.dfsek.terra.config.fileloaders.ZIPLoader;
|
||||
import com.dfsek.terra.config.lang.LangUtil;
|
||||
import com.dfsek.terra.config.loaders.config.BufferedImageLoader;
|
||||
import com.dfsek.terra.config.loaders.config.biome.templates.source.BiomePipelineTemplate;
|
||||
import com.dfsek.terra.config.loaders.config.biome.templates.source.ImageProviderTemplate;
|
||||
@@ -79,7 +78,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.logging.Level;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
@@ -136,7 +134,7 @@ public class ConfigPack implements LoaderRegistrar {
|
||||
try {
|
||||
selfLoader.load(template, new FileInputStream(pack));
|
||||
|
||||
main.getLogger().info("Loading config pack \"" + template.getID() + "\"");
|
||||
main.logger().info("Loading config pack \"" + template.getID() + "\"");
|
||||
|
||||
load(l, main);
|
||||
ConfigPackPostTemplate packPostTemplate = new ConfigPackPostTemplate();
|
||||
@@ -147,7 +145,7 @@ public class ConfigPack implements LoaderRegistrar {
|
||||
throw new LoadException("No pack.yml file found in " + folder.getAbsolutePath(), e);
|
||||
}
|
||||
} catch(Exception e) {
|
||||
main.getLogger().severe("Failed to load config pack from folder \"" + folder.getAbsolutePath() + "\"");
|
||||
main.logger().severe("Failed to load config pack from folder \"" + folder.getAbsolutePath() + "\"");
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
@@ -178,7 +176,7 @@ public class ConfigPack implements LoaderRegistrar {
|
||||
if(pack == null) throw new LoadException("No pack.yml file found in " + file.getName());
|
||||
|
||||
selfLoader.load(template, file.getInputStream(pack));
|
||||
main.getLogger().info("Loading config pack \"" + template.getID() + "\"");
|
||||
main.logger().info("Loading config pack \"" + template.getID() + "\"");
|
||||
|
||||
load(l, main);
|
||||
|
||||
@@ -191,7 +189,7 @@ public class ConfigPack implements LoaderRegistrar {
|
||||
throw new LoadException("Unable to load pack.yml from ZIP file", e);
|
||||
}
|
||||
} catch(Exception e) {
|
||||
main.getLogger().severe("Failed to load config pack from ZIP archive \"" + file.getName() + "\"");
|
||||
main.logger().severe("Failed to load config pack from ZIP archive \"" + file.getName() + "\"");
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
@@ -236,7 +234,7 @@ public class ConfigPack implements LoaderRegistrar {
|
||||
.open("biomes", ".yml").then(streams -> buildAll(new BiomeFactory(this), biomeRegistry, abstractConfigLoader.load(streams, () -> new BiomeTemplate(this, main)), main)).close();
|
||||
|
||||
main.getEventManager().callEvent(new ConfigPackPostLoadEvent(this));
|
||||
LangUtil.log("config-pack.loaded", Level.INFO, template.getID(), String.valueOf((System.nanoTime() - start) / 1000000D), template.getAuthor(), template.getVersion());
|
||||
main.logger().info("Loaded config pack \"" + template.getID() + "\" v" + template.getVersion() + " by " + template.getAuthor() + " in " + (System.nanoTime() - start) / 1000000D + "ms.");
|
||||
}
|
||||
|
||||
public TerraBiome getBiome(String id) {
|
||||
|
||||
@@ -59,7 +59,7 @@ public class FloraRegistry extends OpenRegistry<Flora> {
|
||||
try {
|
||||
add(id, flora.call());
|
||||
} catch(Exception e) {
|
||||
main.getLogger().warning("Failed to load Flora item: " + id + ": " + e.getMessage());
|
||||
main.logger().warning("Failed to load Flora item: " + id + ": " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ public class TreeRegistry extends OpenRegistry<Tree> {
|
||||
try {
|
||||
add(id, new FractalTreeHolder(value));
|
||||
} catch(Exception e) {
|
||||
main.getLogger().warning("Unable to load tree " + id + ": " + e.getMessage());
|
||||
main.logger().warning("Unable to load tree " + id + ": " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ public class AddonRegistry extends OpenRegistry<TerraAddon> {
|
||||
public boolean add(String identifier, TerraAddon addon) {
|
||||
if(contains(identifier)) throw new IllegalArgumentException("Addon " + identifier + " is already registered.");
|
||||
addon.initialize();
|
||||
main.getLogger().info("Loaded addon " + addon.getName() + " v" + addon.getVersion() + ", by " + addon.getAuthor());
|
||||
main.logger().info("Loaded addon " + addon.getName() + " v" + addon.getVersion() + ", by " + addon.getAuthor());
|
||||
return super.add(identifier, addon);
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ public class AddonRegistry extends OpenRegistry<TerraAddon> {
|
||||
|
||||
try {
|
||||
for(File jar : addonsFolder.listFiles(file -> file.getName().endsWith(".jar"))) {
|
||||
main.getLogger().info("Loading Addon(s) from: " + jar.getName());
|
||||
main.logger().info("Loading Addon(s) from: " + jar.getName());
|
||||
for(Class<? extends TerraAddon> addonClass : AddonClassLoader.fetchAddonClasses(jar)) {
|
||||
pool.add(new PreLoadAddon(addonClass));
|
||||
}
|
||||
@@ -95,9 +95,9 @@ public class AddonRegistry extends OpenRegistry<TerraAddon> {
|
||||
addChecked(loadedAddon.getName(), loadedAddon);
|
||||
} catch(DuplicateEntryException e) {
|
||||
valid = false;
|
||||
main.getLogger().severe("Duplicate addon ID; addon with ID " + loadedAddon.getName() + " is already loaded.");
|
||||
main.getLogger().severe("Existing addon class: " + get(loadedAddon.getName()).getClass().getCanonicalName());
|
||||
main.getLogger().severe("Duplicate addon class: " + addonClass.getCanonicalName());
|
||||
main.logger().severe("Duplicate addon ID; addon with ID " + loadedAddon.getName() + " is already loaded.");
|
||||
main.logger().severe("Existing addon class: " + get(loadedAddon.getName()).getClass().getCanonicalName());
|
||||
main.logger().severe("Duplicate addon class: " + addonClass.getCanonicalName());
|
||||
}
|
||||
}
|
||||
} catch(AddonLoadException | IOException e) {
|
||||
|
||||
@@ -18,8 +18,9 @@ import com.dfsek.terra.api.platform.world.Biome;
|
||||
import com.dfsek.terra.api.platform.world.World;
|
||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||
import com.dfsek.terra.api.registry.LockedRegistry;
|
||||
import com.dfsek.terra.api.util.DebugLogger;
|
||||
import com.dfsek.terra.api.util.collections.ProbabilityCollection;
|
||||
import com.dfsek.terra.api.util.logging.DebugLogger;
|
||||
import com.dfsek.terra.api.util.logging.JavaLogger;
|
||||
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
||||
import com.dfsek.terra.api.world.biome.Generator;
|
||||
import com.dfsek.terra.api.world.biome.TerraBiome;
|
||||
@@ -70,8 +71,8 @@ public class DistributionTest {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Logger getLogger() {
|
||||
return Logger.getLogger("Terra");
|
||||
public com.dfsek.terra.api.util.logging.Logger logger() {
|
||||
return new JavaLogger(Logger.getLogger("Terra"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -126,7 +127,7 @@ public class DistributionTest {
|
||||
|
||||
@Override
|
||||
public DebugLogger getDebugLogger() {
|
||||
return new DebugLogger(Logger.getLogger("Terra"));
|
||||
return new DebugLogger(new JavaLogger(Logger.getLogger("Terra")));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,7 +15,9 @@ import com.dfsek.terra.api.platform.world.Biome;
|
||||
import com.dfsek.terra.api.platform.world.World;
|
||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||
import com.dfsek.terra.api.registry.LockedRegistry;
|
||||
import com.dfsek.terra.api.util.DebugLogger;
|
||||
import com.dfsek.terra.api.util.logging.DebugLogger;
|
||||
import com.dfsek.terra.api.util.logging.JavaLogger;
|
||||
import com.dfsek.terra.api.util.logging.Logger;
|
||||
import com.dfsek.terra.api.world.generation.TerraChunkGenerator;
|
||||
import com.dfsek.terra.bukkit.command.command.TerraCommand;
|
||||
import com.dfsek.terra.bukkit.command.command.structure.LocateCommand;
|
||||
@@ -136,7 +138,7 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin {
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
debugLogger = new DebugLogger(getLogger());
|
||||
debugLogger = new DebugLogger(logger());
|
||||
|
||||
getLogger().info("Running on version " + BUKKIT_VERSION);
|
||||
if(BUKKIT_VERSION == BukkitVersion.UNKNOWN) {
|
||||
@@ -245,6 +247,11 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin {
|
||||
return worldMap.computeIfAbsent(w, world -> new TerraWorld(w, worlds.get(w.getName()), this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Logger logger() {
|
||||
return new JavaLogger(getLogger());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PluginConfig getTerraConfig() {
|
||||
|
||||
@@ -7,7 +7,6 @@ import com.dfsek.terra.api.world.generation.TerraChunkGenerator;
|
||||
import com.dfsek.terra.bukkit.population.PopulationManager;
|
||||
import com.dfsek.terra.bukkit.world.BukkitAdapter;
|
||||
import com.dfsek.terra.bukkit.world.BukkitBiomeGrid;
|
||||
import com.dfsek.terra.config.lang.LangUtil;
|
||||
import com.dfsek.terra.profiler.DataType;
|
||||
import com.dfsek.terra.profiler.Measurement;
|
||||
import com.dfsek.terra.world.TerraWorld;
|
||||
@@ -28,7 +27,6 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.logging.Level;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class BukkitChunkGeneratorWrapper extends ChunkGenerator implements com.dfsek.terra.api.platform.world.generator.ChunkGenerator {
|
||||
@@ -76,8 +74,8 @@ public class BukkitChunkGeneratorWrapper extends ChunkGenerator implements com.d
|
||||
private void load(com.dfsek.terra.api.platform.world.World w) {
|
||||
try {
|
||||
popMan.loadBlocks(w);
|
||||
} catch(FileNotFoundException e) {
|
||||
LangUtil.log("warning.no-population", Level.WARNING);
|
||||
} catch(FileNotFoundException ignore) {
|
||||
|
||||
} catch(IOException | ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public class PaperListener implements Listener {
|
||||
}, main);
|
||||
finder.run(); // Do this synchronously.
|
||||
} else {
|
||||
main.getLogger().warning("No overrides are defined for \"" + name + "\"");
|
||||
main.logger().warning("No overrides are defined for \"" + name + "\"");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ public class SpigotListener implements Listener {
|
||||
}, main);
|
||||
finder.run(); // Do this synchronously so eye doesn't change direction several ticks after spawning.
|
||||
} else
|
||||
main.getLogger().warning("No overrides are defined for Strongholds. Ender Signals will not work correctly.");
|
||||
main.logger().warning("No overrides are defined for Strongholds. Ender Signals will not work correctly.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,9 +56,9 @@ public class SpigotListener implements Listener {
|
||||
if(!TerraWorld.isTerraWorld(BukkitAdapter.adapt(e.getEntity().getWorld()))) return;
|
||||
if(!(e.getEntity() instanceof Villager)) return;
|
||||
if(((Villager) e.getEntity()).getProfession().equals(Villager.Profession.CARTOGRAPHER)) {
|
||||
main.getLogger().severe("Prevented server crash by stopping Cartographer villager from spawning.");
|
||||
main.getLogger().severe("Please upgrade to Paper, which has a StructureLocateEvent that fixes this issue");
|
||||
main.getLogger().severe("at the source, and doesn't require us to do stupid band-aids.");
|
||||
main.logger().severe("Prevented server crash by stopping Cartographer villager from spawning.");
|
||||
main.logger().severe("Please upgrade to Paper, which has a StructureLocateEvent that fixes this issue");
|
||||
main.logger().severe("at the source, and doesn't require us to do stupid band-aids.");
|
||||
e.setCancelled(true); // Cancel leveling if the villager is a Cartographer, to prevent crashing server.
|
||||
}
|
||||
}
|
||||
@@ -67,9 +67,9 @@ public class SpigotListener implements Listener {
|
||||
public void onCartographerLevel(VillagerCareerChangeEvent e) {
|
||||
if(!TerraWorld.isTerraWorld(BukkitAdapter.adapt(e.getEntity().getWorld()))) return;
|
||||
if(e.getProfession().equals(Villager.Profession.CARTOGRAPHER)) {
|
||||
main.getLogger().severe("Prevented server crash by stopping Cartographer villager from spawning.");
|
||||
main.getLogger().severe("Please upgrade to Paper, which has a StructureLocateEvent that fixes this issue");
|
||||
main.getLogger().severe("at the source, and doesn't require us to do stupid band-aids.");
|
||||
main.logger().severe("Prevented server crash by stopping Cartographer villager from spawning.");
|
||||
main.logger().severe("Please upgrade to Paper, which has a StructureLocateEvent that fixes this issue");
|
||||
main.logger().severe("at the source, and doesn't require us to do stupid band-aids.");
|
||||
e.getEntity().setProfession(Villager.Profession.NITWIT); // Give villager new profession to prevent server crash.
|
||||
e.setCancelled(true);
|
||||
}
|
||||
|
||||
@@ -20,7 +20,8 @@ import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||
import com.dfsek.terra.api.registry.LockedRegistry;
|
||||
import com.dfsek.terra.api.transform.NotNullValidator;
|
||||
import com.dfsek.terra.api.transform.Transformer;
|
||||
import com.dfsek.terra.api.util.DebugLogger;
|
||||
import com.dfsek.terra.api.util.logging.DebugLogger;
|
||||
import com.dfsek.terra.api.util.logging.Logger;
|
||||
import com.dfsek.terra.api.world.biome.TerraBiome;
|
||||
import com.dfsek.terra.api.world.tree.Tree;
|
||||
import com.dfsek.terra.config.GenericLoaders;
|
||||
@@ -73,9 +74,7 @@ import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.LogManager;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
||||
public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
||||
|
||||
@@ -93,16 +92,24 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
||||
public static final ConfiguredFeature<?, ?> POPULATOR_CONFIGURED_FEATURE = POPULATOR_FEATURE.configure(FeatureConfig.DEFAULT).decorate(Decorator.NOPE.configure(NopeDecoratorConfig.INSTANCE));
|
||||
|
||||
private final GenericLoaders genericLoaders = new GenericLoaders(this);
|
||||
private final Logger logger;
|
||||
private final DebugLogger debugLogger;
|
||||
private final Logger logger = new Logger() {
|
||||
@Override
|
||||
public void info(String message) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warning(String message) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void severe(String message) {
|
||||
|
||||
}
|
||||
};
|
||||
private final DebugLogger debugLogger = new DebugLogger(logger);
|
||||
|
||||
{
|
||||
Logger logger = Logger.getLogger("Terra");
|
||||
LogManager.getLogManager().addLogger(logger);
|
||||
this.logger = logger;
|
||||
debugLogger = new DebugLogger(logger);
|
||||
debugLogger.setDebug(true);
|
||||
}
|
||||
|
||||
private final ItemHandle itemHandle = new FabricItemHandle();
|
||||
private final WorldHandle worldHandle = new FabricWorldHandle();
|
||||
@@ -131,7 +138,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Logger getLogger() {
|
||||
public Logger logger() {
|
||||
return logger;
|
||||
}
|
||||
|
||||
@@ -254,8 +261,6 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
||||
|
||||
@Override
|
||||
public void onInitialize() {
|
||||
logger.setLevel(Level.INFO);
|
||||
|
||||
instance = this;
|
||||
|
||||
config = new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra");
|
||||
|
||||
@@ -76,7 +76,7 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements com.d
|
||||
this.pack = configPack;
|
||||
|
||||
this.delegate = new DefaultChunkGenerator3D(configPack, TerraFabricPlugin.getInstance(), pack.getSamplerCache());
|
||||
delegate.getMain().getLogger().info("Loading world...");
|
||||
delegate.getMain().logger().info("Loading world...");
|
||||
this.biomeSource = biomeSource;
|
||||
|
||||
this.seed = seed;
|
||||
|
||||
@@ -12,7 +12,8 @@ import com.dfsek.terra.api.platform.world.Biome;
|
||||
import com.dfsek.terra.api.platform.world.World;
|
||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||
import com.dfsek.terra.api.registry.LockedRegistry;
|
||||
import com.dfsek.terra.api.util.DebugLogger;
|
||||
import com.dfsek.terra.api.util.logging.DebugLogger;
|
||||
import com.dfsek.terra.api.util.logging.JavaLogger;
|
||||
import com.dfsek.terra.config.GenericLoaders;
|
||||
import com.dfsek.terra.config.PluginConfig;
|
||||
import com.dfsek.terra.config.lang.LangUtil;
|
||||
@@ -49,8 +50,8 @@ public class StandalonePlugin implements TerraPlugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Logger getLogger() {
|
||||
return Logger.getLogger("Terra");
|
||||
public com.dfsek.terra.api.util.logging.Logger logger() {
|
||||
return new JavaLogger(Logger.getLogger("Terra"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -109,7 +110,23 @@ public class StandalonePlugin implements TerraPlugin {
|
||||
|
||||
@Override
|
||||
public DebugLogger getDebugLogger() {
|
||||
return new DebugLogger(Logger.getLogger("Terra"));
|
||||
Logger logger = Logger.getLogger("Terra");
|
||||
return new DebugLogger(new com.dfsek.terra.api.util.logging.Logger() {
|
||||
@Override
|
||||
public void info(String message) {
|
||||
logger.info(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warning(String message) {
|
||||
logger.warning(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void severe(String message) {
|
||||
logger.severe(message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
28
platforms/sponge/build.gradle.kts
Normal file
28
platforms/sponge/build.gradle.kts
Normal file
@@ -0,0 +1,28 @@
|
||||
import com.dfsek.terra.configureCommon
|
||||
|
||||
plugins {
|
||||
java
|
||||
id("org.spongepowered.plugin").version("0.9.0")
|
||||
}
|
||||
|
||||
configureCommon()
|
||||
|
||||
group = "com.dfsek.terra"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
"compileOnly"("org.spongepowered:spongeapi:7.2.0")
|
||||
"shadedApi"(project(":common"))
|
||||
"shadedImplementation"("org.yaml:snakeyaml:1.27")
|
||||
"shadedImplementation"("com.googlecode.json-simple:json-simple:1.1.1")
|
||||
}
|
||||
|
||||
sponge {
|
||||
plugin {
|
||||
id = "terra"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.dfsek.terra.sponge;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.BlockData;
|
||||
import com.dfsek.terra.sponge.world.block.data.SpongeBlockData;
|
||||
import org.spongepowered.api.block.BlockState;
|
||||
|
||||
public final class SpongeAdapter {
|
||||
public static BlockData adapt(BlockState state) {
|
||||
return new SpongeBlockData(state);
|
||||
}
|
||||
|
||||
public static BlockState adapt(BlockData data) {
|
||||
return ((SpongeBlockData) data).getHandle();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.dfsek.terra.sponge;
|
||||
|
||||
import com.dfsek.terra.api.util.logging.Logger;
|
||||
|
||||
public class SpongeLogger implements Logger {
|
||||
private final org.slf4j.Logger logger;
|
||||
|
||||
public SpongeLogger(org.slf4j.Logger logger) {
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String message) {
|
||||
logger.info(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warning(String message) {
|
||||
logger.warn(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void severe(String message) {
|
||||
logger.error(message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
package com.dfsek.terra.sponge;
|
||||
|
||||
import com.dfsek.tectonic.loading.TypeRegistry;
|
||||
import com.dfsek.terra.api.TerraPlugin;
|
||||
import com.dfsek.terra.api.addons.TerraAddon;
|
||||
import com.dfsek.terra.api.event.EventManager;
|
||||
import com.dfsek.terra.api.event.TerraEventManager;
|
||||
import com.dfsek.terra.api.platform.handle.ItemHandle;
|
||||
import com.dfsek.terra.api.platform.handle.WorldHandle;
|
||||
import com.dfsek.terra.api.platform.world.World;
|
||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||
import com.dfsek.terra.api.registry.LockedRegistry;
|
||||
import com.dfsek.terra.api.util.logging.DebugLogger;
|
||||
import com.dfsek.terra.config.PluginConfig;
|
||||
import com.dfsek.terra.config.lang.Language;
|
||||
import com.dfsek.terra.config.pack.ConfigPack;
|
||||
import com.dfsek.terra.registry.master.AddonRegistry;
|
||||
import com.dfsek.terra.registry.master.ConfigRegistry;
|
||||
import com.dfsek.terra.sponge.world.SpongeWorldHandle;
|
||||
import com.dfsek.terra.world.TerraWorld;
|
||||
import com.google.inject.Inject;
|
||||
import org.slf4j.Logger;
|
||||
import org.spongepowered.api.config.ConfigDir;
|
||||
import org.spongepowered.api.event.Listener;
|
||||
import org.spongepowered.api.event.game.state.GameStartedServerEvent;
|
||||
import org.spongepowered.api.plugin.Plugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
|
||||
@Plugin(id = "terra", name = "Terra-Sponge", version = "", description = "Terra")
|
||||
public class TerraSpongePlugin implements TerraPlugin {
|
||||
private final ConfigRegistry configRegistry = new ConfigRegistry();
|
||||
private final CheckedRegistry<ConfigPack> packCheckedRegistry = new CheckedRegistry<>(configRegistry);
|
||||
private final PluginConfig config = new PluginConfig();
|
||||
private final AddonRegistry addonRegistry = new AddonRegistry(this);
|
||||
private final LockedRegistry<TerraAddon> addonLockedRegistry = new LockedRegistry<>(addonRegistry);
|
||||
|
||||
private final SpongeWorldHandle spongeWorldHandle = new SpongeWorldHandle();
|
||||
|
||||
private final EventManager eventManager = new TerraEventManager(this);
|
||||
|
||||
@Inject
|
||||
@ConfigDir(sharedRoot = false)
|
||||
private Path privateConfigDir;
|
||||
|
||||
@Inject
|
||||
private Logger logger;
|
||||
|
||||
|
||||
@Listener
|
||||
public void initialize(GameStartedServerEvent event) {
|
||||
addonRegistry.loadAll();
|
||||
configRegistry.loadAll(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(TypeRegistry registry) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public WorldHandle getWorldHandle() {
|
||||
return spongeWorldHandle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TerraWorld getWorld(World world) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public com.dfsek.terra.api.util.logging.Logger logger() {
|
||||
return new SpongeLogger(logger);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PluginConfig getTerraConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getDataFolder() {
|
||||
return privateConfigDir.toFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDebug() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Language getLanguage() {
|
||||
try {
|
||||
return new Language(new File(getDataFolder(), "lang/en_us.yml"));
|
||||
} catch(IOException e) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CheckedRegistry<ConfigPack> getConfigRegistry() {
|
||||
return packCheckedRegistry;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LockedRegistry<TerraAddon> getAddons() {
|
||||
return addonLockedRegistry;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean reload() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemHandle getItemHandle() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveDefaultConfig() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String platformName() {
|
||||
return "Sponge";
|
||||
}
|
||||
|
||||
@Override
|
||||
public DebugLogger getDebugLogger() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventManager getEventManager() {
|
||||
return eventManager;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.dfsek.terra.sponge.world;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.BlockData;
|
||||
import com.dfsek.terra.api.platform.entity.EntityType;
|
||||
import com.dfsek.terra.api.platform.handle.WorldHandle;
|
||||
import com.dfsek.terra.sponge.SpongeAdapter;
|
||||
import org.spongepowered.api.Sponge;
|
||||
import org.spongepowered.api.block.BlockState;
|
||||
|
||||
public class SpongeWorldHandle implements WorldHandle {
|
||||
@Override
|
||||
public BlockData createBlockData(String data) {
|
||||
return SpongeAdapter.adapt(Sponge.getRegistry().getType(BlockState.class, data).orElseThrow(() -> new IllegalArgumentException("Invalid block data \"" + data + "\"")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType getEntity(String id) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.dfsek.terra.sponge.world.block.data;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.BlockData;
|
||||
import com.dfsek.terra.api.platform.block.BlockType;
|
||||
import org.spongepowered.api.block.BlockState;
|
||||
|
||||
public class SpongeBlockData implements BlockData {
|
||||
private final BlockState delegate;
|
||||
|
||||
public SpongeBlockData(BlockState delegate) {
|
||||
this.delegate = delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getHandle() {
|
||||
return delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockType getBlockType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(BlockData other) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockData clone() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAsString() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAir() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@ include("common")
|
||||
include("platforms:bukkit")
|
||||
include("platforms:fabric")
|
||||
include("platforms:region")
|
||||
include("platforms:sponge")
|
||||
|
||||
pluginManagement {
|
||||
repositories {
|
||||
|
||||
Reference in New Issue
Block a user