From 102828039def9a286e823a8568db2773c34b0a07 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 29 Jul 2021 09:32:41 -0700 Subject: [PATCH] split up bukkit terraplugin impl --- .../com/dfsek/terra/bukkit/BukkitAddon.java | 23 +++ .../dfsek/terra/bukkit/TerraBukkitPlugin.java | 148 ++---------------- .../dfsek/terra/bukkit/TerraPluginImpl.java | 90 +++++++++++ 3 files changed, 124 insertions(+), 137 deletions(-) create mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitAddon.java create mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraPluginImpl.java 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 new file mode 100644 index 000000000..0648a2a6e --- /dev/null +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitAddon.java @@ -0,0 +1,23 @@ +package com.dfsek.terra.bukkit; + +import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.addon.TerraAddon; +import com.dfsek.terra.api.addon.annotations.Addon; +import com.dfsek.terra.api.addon.annotations.Author; +import com.dfsek.terra.api.addon.annotations.Version; + +@Addon("Terra-Bukkit") +@Version("1.0.0") +@Author("Terra") +final class BukkitAddon extends TerraAddon { + private final TerraPlugin main; + + public BukkitAddon(TerraPlugin main) { + this.main = main; + } + + @Override + public void initialize() { + + } +} 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 f1e51d032..200cfa7ac 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 @@ -61,7 +61,7 @@ import java.util.Map; import java.util.Objects; -public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin { +public class TerraBukkitPlugin extends JavaPlugin { public static final BukkitVersion BUKKIT_VERSION; static { @@ -74,57 +74,9 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin { else BUKKIT_VERSION = BukkitVersion.UNKNOWN; } + private final TerraPluginImpl terraPlugin = new TerraPluginImpl(this); private final Map generatorMap = new HashMap<>(); private final Map worlds = new HashMap<>(); - private final Profiler profiler = new ProfilerImpl(); - private final ConfigRegistry registry = new ConfigRegistry(); - private final CheckedRegistry checkedRegistry = new CheckedRegistryImpl<>(registry); - private final PluginConfig config = new PluginConfigImpl(); - private final ItemHandle itemHandle = new BukkitItemHandle(); - private final GenericLoaders genericLoaders = new GenericLoaders(this); - private final EventManager eventManager = new EventManagerImpl(this); - private final AddonRegistry addonRegistry = new AddonRegistry(new BukkitAddon(this), this); - private final LockedRegistryImpl addonLockedRegistry = new LockedRegistryImpl<>(addonRegistry); - private WorldHandle handle = new BukkitWorldHandle(); - private DebugLogger debugLogger; - - public boolean reload() { - config.load(this); - LangUtil.load(config.getLanguage(), this); // Load language. - boolean succeed = registry.loadAll(this); - - return succeed; - } - - @Override - public ItemHandle getItemHandle() { - return itemHandle; - } - - @Override - public String platformName() { - return "Bukkit"; - } - - @Override - public DebugLogger getDebugLogger() { - return debugLogger; - } - - @Override - public EventManager getEventManager() { - return eventManager; - } - - @Override - public void runPossiblyUnsafeTask(Runnable task) { - Bukkit.getScheduler().runTask(this, task); - } - - @Override - public Profiler getProfiler() { - return profiler; - } @Override public void onDisable() { @@ -133,35 +85,17 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin { @Override public void onEnable() { - debugLogger = new DebugLogger(logger()); - getLogger().info("Running on version " + BUKKIT_VERSION); if(BUKKIT_VERSION == BukkitVersion.UNKNOWN) { getLogger().warning("Terra is running on an unknown Bukkit version. Proceed with caution."); } - saveDefaultConfig(); Metrics metrics = new Metrics(this, 9017); // Set up bStats. - metrics.addCustomChart(new Metrics.SingleLineChart("worlds", worldMap::size)); // World number chart. - - config.load(this); // Load master config.yml - LangUtil.load(config.getLanguage(), this); // Load language. - - debugLogger.setDebug(config.isDebugLogging()); - if(config.isDebugProfiler()) profiler.start(); - - if(!addonRegistry.loadAll()) { - getLogger().severe("Failed to load addons. Please correct com.dfsek.terra.addon installations to continue."); - Bukkit.getPluginManager().disablePlugin(this); - return; - } - - registry.loadAll(this); // Load all config packs. PluginCommand c = Objects.requireNonNull(getCommand("terra")); - CommandManager manager = new TerraCommandManager(this); + CommandManager manager = new TerraCommandManager(terraPlugin); try { @@ -169,9 +103,9 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin { manager.register("save-data", SaveDataCommand.class); manager.register("fix-chunk", FixChunkCommand.class); } catch(MalformedCommandException e) { // This should never happen. - logger().severe("Errors occurred while registering commands."); + terraPlugin.logger().severe("Errors occurred while registering commands."); e.printStackTrace(); - logger().severe("Please report this to Terra."); + terraPlugin.logger().severe("Please report this to Terra."); Bukkit.getPluginManager().disablePlugin(this); return; } @@ -182,15 +116,15 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin { c.setTabCompleter(command); - long save = config.getDataSaveInterval(); + long save = terraPlugin.getTerraConfig().getDataSaveInterval(); Bukkit.getScheduler().runTaskTimerAsynchronously(this, BukkitChunkGeneratorWrapper::saveAll, save, save); // Schedule population data saving - Bukkit.getPluginManager().registerEvents(new CommonListener(this), this); // Register master event listener + 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(this), this); // Register Paper events. + Bukkit.getPluginManager().registerEvents(new PaperListener(terraPlugin), this); // Register Paper events. } catch(ClassNotFoundException e) { registerSpigotEvents(true); // Outdated Paper version. } @@ -218,64 +152,19 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin { getLogger().severe("Find out more at https://papermc.io/"); } - Bukkit.getPluginManager().registerEvents(new SpigotListener(this), this); // Register Spigot event listener + Bukkit.getPluginManager().registerEvents(new SpigotListener(terraPlugin), this); // Register Spigot event listener } @Override public @Nullable ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, @Nullable String id) { return new BukkitChunkGeneratorWrapper(generatorMap.computeIfAbsent(worldName, name -> { - if(!registry.contains(id)) throw new IllegalArgumentException("No such config pack \"" + id + "\""); - ConfigPack pack = registry.get(id); + 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); })); } - @Override - public Language getLanguage() { - return LangUtil.getLanguage(); - } - - public CheckedRegistry getConfigRegistry() { - return checkedRegistry; - } - - @Override - public Logger logger() { - return new JavaLogger(getLogger()); - } - - @NotNull - @Override - public PluginConfig getTerraConfig() { - return config; - } - - @Override - public WorldHandle getWorldHandle() { - return handle; - } - - - @Override - public void register(TypeRegistry registry) { - registry - .registerLoader(BlockState.class, (t, o, l) -> handle.createBlockData((String) o)) - .registerLoader(Biome.class, (t, o, l) -> parseBiome((String) o)) - .registerLoader(EntityType.class, (t, o, l) -> EntityType.valueOf((String) o)); - genericLoaders.register(registry); - } - - private BukkitBiome parseBiome(String id) throws LoadException { - if(!id.startsWith("minecraft:")) throw new LoadException("Invalid biome identifier " + id); - return new BukkitBiome(org.bukkit.block.Biome.valueOf(id.toUpperCase(Locale.ROOT).substring(10))); - } - - @Override - public Registry getAddons() { - return addonLockedRegistry; - } - public enum BukkitVersion { V1_13(13), @@ -306,19 +195,4 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin { } } - @Addon("Terra-Bukkit") - @Version("1.0.0") - @Author("Terra") - private static final class BukkitAddon extends TerraAddon { - private final TerraPlugin main; - - private BukkitAddon(TerraPlugin main) { - this.main = main; - } - - @Override - public void initialize() { - - } - } } 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 new file mode 100644 index 000000000..140ffb4e2 --- /dev/null +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraPluginImpl.java @@ -0,0 +1,90 @@ +package com.dfsek.terra.bukkit; + +import com.dfsek.tectonic.exception.LoadException; +import com.dfsek.tectonic.loading.TypeRegistry; +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; +import com.dfsek.terra.api.handle.WorldHandle; +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; +import org.bukkit.Bukkit; +import org.bukkit.entity.EntityType; + +import java.io.File; +import java.util.Locale; +import java.util.Optional; + +public class TerraPluginImpl extends AbstractTerraPlugin { + private final ItemHandle itemHandle = new BukkitItemHandle(); + + private WorldHandle handle = new BukkitWorldHandle(); + + private final TerraBukkitPlugin plugin; + + public TerraPluginImpl(TerraBukkitPlugin plugin) { + this.plugin = plugin; + load(); + } + + + @Override + public WorldHandle getWorldHandle() { + return handle; + } + + @Override + public File getDataFolder() { + return plugin.getDataFolder(); + } + + @Override + public boolean reload() { + return false; + } + + @Override + protected Optional getPlatformAddon() { + return Optional.of(new BukkitAddon(this)); + } + + @Override + public ItemHandle getItemHandle() { + return itemHandle; + } + + @Override + public String platformName() { + return "Bukkit"; + } + + @Override + protected Logger createLogger() { + return new JavaLogger(plugin.getLogger()); + } + + @Override + public void register(TypeRegistry registry) { + super.register(registry); + registry + .registerLoader(BlockState.class, (t, o, l) -> handle.createBlockData((String) o)) + .registerLoader(Biome.class, (t, o, l) -> parseBiome((String) o)) + .registerLoader(EntityType.class, (t, o, l) -> EntityType.valueOf((String) o)); + + } + + private BukkitBiome parseBiome(String id) throws LoadException { + if(!id.startsWith("minecraft:")) throw new LoadException("Invalid biome identifier " + id); + return new BukkitBiome(org.bukkit.block.Biome.valueOf(id.toUpperCase(Locale.ROOT).substring(10))); + } + + @Override + public void runPossiblyUnsafeTask(Runnable task) { + Bukkit.getScheduler().runTask(plugin, task); + } +}