mirror of
				https://github.com/GayPizzaSpecifications/foundation.git
				synced 2025-11-04 03:39:37 +00:00 
			
		
		
		
	Reform dependency structure.
This commit is contained in:
		@ -1,3 +1,7 @@
 | 
				
			|||||||
plugins {
 | 
					plugins {
 | 
				
			||||||
  id("gay.pizza.foundation.concrete-library")
 | 
					  id("gay.pizza.foundation.concrete-library")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dependencies {
 | 
				
			||||||
 | 
					  compileOnly(project(":foundation-shared"))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					package gay.pizza.foundation.common
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import gay.pizza.foundation.shared.IFoundationCore
 | 
				
			||||||
 | 
					import org.bukkit.Server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					object FoundationCoreLoader {
 | 
				
			||||||
 | 
					  fun get(server: Server): IFoundationCore {
 | 
				
			||||||
 | 
					    return server.pluginManager.getPlugin("Foundation") as IFoundationCore?
 | 
				
			||||||
 | 
					      ?: throw RuntimeException("Foundation Core is not loaded!")
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,3 +0,0 @@
 | 
				
			|||||||
package gay.pizza.foundation.common
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
annotation class PluginMainClass
 | 
					 | 
				
			||||||
@ -7,5 +7,6 @@ dependencies {
 | 
				
			|||||||
    exclude(module = "opus-java")
 | 
					    exclude(module = "opus-java")
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  compileOnly(project(":foundation-core"))
 | 
					  implementation(project(":common-plugin"))
 | 
				
			||||||
 | 
					  compileOnly(project(":foundation-shared"))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,10 +2,8 @@ package gay.pizza.foundation.bifrost
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.charleskorn.kaml.Yaml
 | 
					import com.charleskorn.kaml.Yaml
 | 
				
			||||||
import gay.pizza.foundation.bifrost.model.BifrostConfig
 | 
					import gay.pizza.foundation.bifrost.model.BifrostConfig
 | 
				
			||||||
import gay.pizza.foundation.common.PluginMainClass
 | 
					import gay.pizza.foundation.common.FoundationCoreLoader
 | 
				
			||||||
import gay.pizza.foundation.core.FoundationCorePlugin
 | 
					import gay.pizza.foundation.shared.*
 | 
				
			||||||
import gay.pizza.foundation.core.Util
 | 
					 | 
				
			||||||
import gay.pizza.foundation.common.AdvancementTitleCache
 | 
					 | 
				
			||||||
import io.papermc.paper.event.player.AsyncChatEvent
 | 
					import io.papermc.paper.event.player.AsyncChatEvent
 | 
				
			||||||
import net.dv8tion.jda.api.EmbedBuilder
 | 
					import net.dv8tion.jda.api.EmbedBuilder
 | 
				
			||||||
import net.dv8tion.jda.api.JDA
 | 
					import net.dv8tion.jda.api.JDA
 | 
				
			||||||
@ -38,11 +36,8 @@ class FoundationBifrostPlugin : JavaPlugin(), DiscordEventListener, BukkitEventL
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  override fun onEnable() {
 | 
					  override fun onEnable() {
 | 
				
			||||||
    isDev = description.version == "DEV"
 | 
					    isDev = description.version == "DEV"
 | 
				
			||||||
 | 
					    val foundation = FoundationCoreLoader.get(server)
 | 
				
			||||||
    val foundation = server.pluginManager.getPlugin("Foundation") as FoundationCorePlugin
 | 
					    val configPath = copyDefaultConfig<FoundationBifrostPlugin>(
 | 
				
			||||||
    slF4JLogger.info("Plugin data path: ${foundation.pluginDataPath}")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    val configPath = Util.copyDefaultConfig<FoundationBifrostPlugin>(
 | 
					 | 
				
			||||||
      slF4JLogger,
 | 
					      slF4JLogger,
 | 
				
			||||||
      foundation.pluginDataPath,
 | 
					      foundation.pluginDataPath,
 | 
				
			||||||
      "bifrost.yaml"
 | 
					      "bifrost.yaml"
 | 
				
			||||||
 | 
				
			|||||||
@ -4,5 +4,5 @@ plugins {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
dependencies {
 | 
					dependencies {
 | 
				
			||||||
  implementation(project(":common-plugin"))
 | 
					  implementation(project(":common-plugin"))
 | 
				
			||||||
  compileOnly(project(":foundation-core"))
 | 
					  compileOnly(project(":foundation-shared"))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,9 +2,9 @@ package gay.pizza.foundation.chaos
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.charleskorn.kaml.Yaml
 | 
					import com.charleskorn.kaml.Yaml
 | 
				
			||||||
import gay.pizza.foundation.chaos.model.ChaosConfig
 | 
					import gay.pizza.foundation.chaos.model.ChaosConfig
 | 
				
			||||||
import gay.pizza.foundation.common.PluginMainClass
 | 
					import gay.pizza.foundation.common.FoundationCoreLoader
 | 
				
			||||||
import gay.pizza.foundation.core.FoundationCorePlugin
 | 
					import gay.pizza.foundation.shared.PluginMainClass
 | 
				
			||||||
import gay.pizza.foundation.core.Util
 | 
					import gay.pizza.foundation.shared.copyDefaultConfig
 | 
				
			||||||
import org.bukkit.plugin.java.JavaPlugin
 | 
					import org.bukkit.plugin.java.JavaPlugin
 | 
				
			||||||
import kotlin.io.path.inputStream
 | 
					import kotlin.io.path.inputStream
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -17,9 +17,8 @@ class FoundationChaosPlugin : JavaPlugin() {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  override fun onEnable() {
 | 
					  override fun onEnable() {
 | 
				
			||||||
    val foundation = server.pluginManager.getPlugin("Foundation") as FoundationCorePlugin
 | 
					    val foundation = FoundationCoreLoader.get(server)
 | 
				
			||||||
    slF4JLogger.info("Plugin data path: ${foundation.pluginDataPath}")
 | 
					    val configPath = copyDefaultConfig<FoundationChaosPlugin>(
 | 
				
			||||||
    val configPath = Util.copyDefaultConfig<FoundationChaosPlugin>(
 | 
					 | 
				
			||||||
      slF4JLogger,
 | 
					      slF4JLogger,
 | 
				
			||||||
      foundation.pluginDataPath,
 | 
					      foundation.pluginDataPath,
 | 
				
			||||||
      "chaos.yaml"
 | 
					      "chaos.yaml"
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
package gay.pizza.foundation.chaos.modules
 | 
					package gay.pizza.foundation.chaos.modules
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import gay.pizza.foundation.common.spawn
 | 
					import gay.pizza.foundation.shared.spawn
 | 
				
			||||||
import org.bukkit.entity.TNTPrimed
 | 
					import org.bukkit.entity.TNTPrimed
 | 
				
			||||||
import org.bukkit.plugin.Plugin
 | 
					import org.bukkit.plugin.Plugin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
package gay.pizza.foundation.chaos.modules
 | 
					package gay.pizza.foundation.chaos.modules
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import gay.pizza.foundation.common.spawn
 | 
					import gay.pizza.foundation.shared.spawn
 | 
				
			||||||
import org.bukkit.entity.TNTPrimed
 | 
					import org.bukkit.entity.TNTPrimed
 | 
				
			||||||
import org.bukkit.plugin.Plugin
 | 
					import org.bukkit.plugin.Plugin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -3,10 +3,9 @@ plugins {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dependencies {
 | 
					dependencies {
 | 
				
			||||||
  // TODO: might be able to ship all dependencies in core? are we duplicating classes in JARs?
 | 
					  implementation(project(":foundation-shared"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  implementation("software.amazon.awssdk:s3:2.19.31")
 | 
					  implementation("software.amazon.awssdk:s3:2.19.31")
 | 
				
			||||||
  implementation("org.quartz-scheduler:quartz:2.3.2")
 | 
					  implementation("org.quartz-scheduler:quartz:2.3.2")
 | 
				
			||||||
  implementation("com.google.guava:guava:31.1-jre")
 | 
					  implementation("com.google.guava:guava:31.1-jre")
 | 
				
			||||||
 | 
					 | 
				
			||||||
  api(project(":common-plugin"))
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
package gay.pizza.foundation.core
 | 
					package gay.pizza.foundation.core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import gay.pizza.foundation.common.PluginMainClass
 | 
					import gay.pizza.foundation.shared.IFoundationCore
 | 
				
			||||||
 | 
					import gay.pizza.foundation.shared.PluginMainClass
 | 
				
			||||||
import gay.pizza.foundation.core.abstraction.FoundationPlugin
 | 
					import gay.pizza.foundation.core.abstraction.FoundationPlugin
 | 
				
			||||||
import gay.pizza.foundation.core.features.backup.BackupFeature
 | 
					import gay.pizza.foundation.core.features.backup.BackupFeature
 | 
				
			||||||
import gay.pizza.foundation.core.features.dev.DevFeature
 | 
					import gay.pizza.foundation.core.features.dev.DevFeature
 | 
				
			||||||
@ -15,17 +16,17 @@ import org.koin.dsl.module
 | 
				
			|||||||
import java.nio.file.Path
 | 
					import java.nio.file.Path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@PluginMainClass
 | 
					@PluginMainClass
 | 
				
			||||||
class FoundationCorePlugin : FoundationPlugin() {
 | 
					class FoundationCorePlugin : IFoundationCore, FoundationPlugin() {
 | 
				
			||||||
  private lateinit var _pluginDataPath: Path
 | 
					  private lateinit var _pluginDataPath: Path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var pluginDataPath: Path
 | 
					  override var pluginDataPath: Path
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Data path of the core plugin.
 | 
					     * Data path of the core plugin.
 | 
				
			||||||
     * Can be used as a check of sorts for dependencies to be sure the plugin is loaded.
 | 
					     * Can be used as a check of sorts for dependencies to be sure the plugin is loaded.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    get() {
 | 
					    get() {
 | 
				
			||||||
      if (!::_pluginDataPath.isInitialized) {
 | 
					      if (!::_pluginDataPath.isInitialized) {
 | 
				
			||||||
        throw Exception("FoundationCore is not loaded!")
 | 
					        throw Exception("Foundation Core is not loaded!")
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      return _pluginDataPath
 | 
					      return _pluginDataPath
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -2,8 +2,6 @@ package gay.pizza.foundation.core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import net.kyori.adventure.text.Component
 | 
					import net.kyori.adventure.text.Component
 | 
				
			||||||
import net.kyori.adventure.text.format.TextColor
 | 
					import net.kyori.adventure.text.format.TextColor
 | 
				
			||||||
import org.slf4j.Logger
 | 
					 | 
				
			||||||
import java.nio.file.Path
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
object Util {
 | 
					object Util {
 | 
				
			||||||
  private val leftBracket: Component = Component.text('[')
 | 
					  private val leftBracket: Component = Component.text('[')
 | 
				
			||||||
@ -22,39 +20,4 @@ object Util {
 | 
				
			|||||||
      .append(whitespace)
 | 
					      .append(whitespace)
 | 
				
			||||||
      .append(Component.text(message))
 | 
					      .append(Component.text(message))
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
  /**
 | 
					 | 
				
			||||||
   * Copy the default configuration from the resource [resourceName] into the directory [targetPath].
 | 
					 | 
				
			||||||
   * @param targetPath The output directory as a path, it must exist before calling this.
 | 
					 | 
				
			||||||
   * @param resourceName Path to resource, it should be in the root of the `resources` directory,
 | 
					 | 
				
			||||||
   *  without the leading slash.
 | 
					 | 
				
			||||||
   */
 | 
					 | 
				
			||||||
  inline fun <reified T> copyDefaultConfig(log: Logger, targetPath: Path, resourceName: String): Path {
 | 
					 | 
				
			||||||
    if (resourceName.startsWith("/")) {
 | 
					 | 
				
			||||||
      throw IllegalArgumentException("resourceName starts with slash")
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!targetPath.toFile().exists()) {
 | 
					 | 
				
			||||||
      throw Exception("Configuration output path does not exist!")
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    val outPath = targetPath.resolve(resourceName)
 | 
					 | 
				
			||||||
    val outFile = outPath.toFile()
 | 
					 | 
				
			||||||
    if (outFile.exists()) {
 | 
					 | 
				
			||||||
      log.debug("Configuration file already exists.")
 | 
					 | 
				
			||||||
      return outPath
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    val resourceStream = T::class.java.getResourceAsStream("/$resourceName")
 | 
					 | 
				
			||||||
      ?: throw Exception("Configuration resource does not exist!")
 | 
					 | 
				
			||||||
    val outputStream = outFile.outputStream()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resourceStream.use {
 | 
					 | 
				
			||||||
      outputStream.use {
 | 
					 | 
				
			||||||
        log.info("Copied default configuration to $outPath")
 | 
					 | 
				
			||||||
        resourceStream.copyTo(outputStream)
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return outPath
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
package gay.pizza.foundation.core.features.backup
 | 
					package gay.pizza.foundation.core.features.backup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import gay.pizza.foundation.common.Platform
 | 
					import gay.pizza.foundation.shared.Platform
 | 
				
			||||||
import gay.pizza.foundation.core.FoundationCorePlugin
 | 
					import gay.pizza.foundation.core.FoundationCorePlugin
 | 
				
			||||||
import gay.pizza.foundation.core.Util
 | 
					import gay.pizza.foundation.core.Util
 | 
				
			||||||
import net.kyori.adventure.text.Component
 | 
					import net.kyori.adventure.text.Component
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,8 @@
 | 
				
			|||||||
package gay.pizza.foundation.core.features.backup
 | 
					package gay.pizza.foundation.core.features.backup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.charleskorn.kaml.Yaml
 | 
					import com.charleskorn.kaml.Yaml
 | 
				
			||||||
 | 
					import gay.pizza.foundation.shared.copyDefaultConfig
 | 
				
			||||||
import gay.pizza.foundation.core.FoundationCorePlugin
 | 
					import gay.pizza.foundation.core.FoundationCorePlugin
 | 
				
			||||||
import gay.pizza.foundation.core.Util
 | 
					 | 
				
			||||||
import gay.pizza.foundation.core.abstraction.Feature
 | 
					import gay.pizza.foundation.core.abstraction.Feature
 | 
				
			||||||
import gay.pizza.foundation.core.features.scheduler.cancel
 | 
					import gay.pizza.foundation.core.features.scheduler.cancel
 | 
				
			||||||
import gay.pizza.foundation.core.features.scheduler.cron
 | 
					import gay.pizza.foundation.core.features.scheduler.cron
 | 
				
			||||||
@ -46,7 +46,7 @@ class BackupFeature : Feature() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  override fun module() = module {
 | 
					  override fun module() = module {
 | 
				
			||||||
    single {
 | 
					    single {
 | 
				
			||||||
      val configPath = Util.copyDefaultConfig<FoundationCorePlugin>(
 | 
					      val configPath = copyDefaultConfig<FoundationCorePlugin>(
 | 
				
			||||||
        plugin.slF4JLogger,
 | 
					        plugin.slF4JLogger,
 | 
				
			||||||
        plugin.pluginDataPath,
 | 
					        plugin.pluginDataPath,
 | 
				
			||||||
        "backup.yaml",
 | 
					        "backup.yaml",
 | 
				
			||||||
 | 
				
			|||||||
@ -3,8 +3,8 @@ package gay.pizza.foundation.core.features.dev
 | 
				
			|||||||
import com.charleskorn.kaml.Yaml
 | 
					import com.charleskorn.kaml.Yaml
 | 
				
			||||||
import com.sun.net.httpserver.HttpExchange
 | 
					import com.sun.net.httpserver.HttpExchange
 | 
				
			||||||
import com.sun.net.httpserver.HttpServer
 | 
					import com.sun.net.httpserver.HttpServer
 | 
				
			||||||
 | 
					import gay.pizza.foundation.shared.copyDefaultConfig
 | 
				
			||||||
import gay.pizza.foundation.core.FoundationCorePlugin
 | 
					import gay.pizza.foundation.core.FoundationCorePlugin
 | 
				
			||||||
import gay.pizza.foundation.core.Util
 | 
					 | 
				
			||||||
import gay.pizza.foundation.core.features.update.UpdateService
 | 
					import gay.pizza.foundation.core.features.update.UpdateService
 | 
				
			||||||
import kotlinx.serialization.json.Json
 | 
					import kotlinx.serialization.json.Json
 | 
				
			||||||
import kotlinx.serialization.json.decodeFromStream
 | 
					import kotlinx.serialization.json.decodeFromStream
 | 
				
			||||||
@ -23,7 +23,7 @@ class DevUpdateServer(val plugin: FoundationCorePlugin) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  fun enable() {
 | 
					  fun enable() {
 | 
				
			||||||
    val configPath = Util.copyDefaultConfig<FoundationCorePlugin>(
 | 
					    val configPath = copyDefaultConfig<FoundationCorePlugin>(
 | 
				
			||||||
      plugin.slF4JLogger,
 | 
					      plugin.slF4JLogger,
 | 
				
			||||||
      plugin.pluginDataPath,
 | 
					      plugin.pluginDataPath,
 | 
				
			||||||
      "devupdate.yaml"
 | 
					      "devupdate.yaml"
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,8 @@
 | 
				
			|||||||
package gay.pizza.foundation.core.features.gameplay
 | 
					package gay.pizza.foundation.core.features.gameplay
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.charleskorn.kaml.Yaml
 | 
					import com.charleskorn.kaml.Yaml
 | 
				
			||||||
 | 
					import gay.pizza.foundation.shared.copyDefaultConfig
 | 
				
			||||||
import gay.pizza.foundation.core.FoundationCorePlugin
 | 
					import gay.pizza.foundation.core.FoundationCorePlugin
 | 
				
			||||||
import gay.pizza.foundation.core.Util
 | 
					 | 
				
			||||||
import gay.pizza.foundation.core.abstraction.Feature
 | 
					import gay.pizza.foundation.core.abstraction.Feature
 | 
				
			||||||
import org.bukkit.Bukkit
 | 
					import org.bukkit.Bukkit
 | 
				
			||||||
import org.bukkit.Material
 | 
					import org.bukkit.Material
 | 
				
			||||||
@ -24,7 +24,7 @@ class GameplayFeature : Feature() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  override fun module() = module {
 | 
					  override fun module() = module {
 | 
				
			||||||
    single {
 | 
					    single {
 | 
				
			||||||
      val configPath = Util.copyDefaultConfig<FoundationCorePlugin>(
 | 
					      val configPath = copyDefaultConfig<FoundationCorePlugin>(
 | 
				
			||||||
        plugin.slF4JLogger,
 | 
					        plugin.slF4JLogger,
 | 
				
			||||||
        plugin.pluginDataPath,
 | 
					        plugin.pluginDataPath,
 | 
				
			||||||
        "gameplay.yaml",
 | 
					        "gameplay.yaml",
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
package gay.pizza.foundation.core.features.player
 | 
					package gay.pizza.foundation.core.features.player
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import gay.pizza.foundation.common.chat
 | 
					import gay.pizza.foundation.shared.chat
 | 
				
			||||||
import org.bukkit.command.Command
 | 
					import org.bukkit.command.Command
 | 
				
			||||||
import org.bukkit.command.CommandExecutor
 | 
					import org.bukkit.command.CommandExecutor
 | 
				
			||||||
import org.bukkit.command.CommandSender
 | 
					import org.bukkit.command.CommandSender
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
package gay.pizza.foundation.core.features.player
 | 
					package gay.pizza.foundation.core.features.player
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import gay.pizza.foundation.common.spawn
 | 
					import gay.pizza.foundation.shared.spawn
 | 
				
			||||||
import org.bukkit.command.Command
 | 
					import org.bukkit.command.Command
 | 
				
			||||||
import org.bukkit.command.CommandExecutor
 | 
					import org.bukkit.command.CommandExecutor
 | 
				
			||||||
import org.bukkit.command.CommandSender
 | 
					import org.bukkit.command.CommandSender
 | 
				
			||||||
 | 
				
			|||||||
@ -4,8 +4,8 @@ import com.charleskorn.kaml.Yaml
 | 
				
			|||||||
import com.google.common.cache.Cache
 | 
					import com.google.common.cache.Cache
 | 
				
			||||||
import com.google.common.cache.CacheBuilder
 | 
					import com.google.common.cache.CacheBuilder
 | 
				
			||||||
import com.google.common.cache.RemovalCause
 | 
					import com.google.common.cache.RemovalCause
 | 
				
			||||||
 | 
					import gay.pizza.foundation.shared.copyDefaultConfig
 | 
				
			||||||
import gay.pizza.foundation.core.FoundationCorePlugin
 | 
					import gay.pizza.foundation.core.FoundationCorePlugin
 | 
				
			||||||
import gay.pizza.foundation.core.Util
 | 
					 | 
				
			||||||
import gay.pizza.foundation.core.abstraction.Feature
 | 
					import gay.pizza.foundation.core.abstraction.Feature
 | 
				
			||||||
import net.kyori.adventure.text.Component
 | 
					import net.kyori.adventure.text.Component
 | 
				
			||||||
import org.bukkit.GameMode
 | 
					import org.bukkit.GameMode
 | 
				
			||||||
@ -53,7 +53,7 @@ class PlayerFeature : Feature() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  override fun module() = org.koin.dsl.module {
 | 
					  override fun module() = org.koin.dsl.module {
 | 
				
			||||||
    single {
 | 
					    single {
 | 
				
			||||||
      val configPath = Util.copyDefaultConfig<FoundationCorePlugin>(
 | 
					      val configPath = copyDefaultConfig<FoundationCorePlugin>(
 | 
				
			||||||
        plugin.slF4JLogger,
 | 
					        plugin.slF4JLogger,
 | 
				
			||||||
        plugin.pluginDataPath,
 | 
					        plugin.pluginDataPath,
 | 
				
			||||||
        "player.yaml",
 | 
					        "player.yaml",
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
package gay.pizza.foundation.core.features.stats
 | 
					package gay.pizza.foundation.core.features.stats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import gay.pizza.foundation.common.SortOrder
 | 
					import gay.pizza.foundation.shared.SortOrder
 | 
				
			||||||
import gay.pizza.foundation.common.allPlayerStatisticsOf
 | 
					import gay.pizza.foundation.shared.allPlayerStatisticsOf
 | 
				
			||||||
import org.bukkit.Statistic
 | 
					import org.bukkit.Statistic
 | 
				
			||||||
import org.bukkit.command.Command
 | 
					import org.bukkit.command.Command
 | 
				
			||||||
import org.bukkit.command.CommandExecutor
 | 
					import org.bukkit.command.CommandExecutor
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ plugins {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dependencies {
 | 
					dependencies {
 | 
				
			||||||
  api(project(":common-heimdall"))
 | 
					  implementation(project(":common-plugin"))
 | 
				
			||||||
  compileOnly(project(":foundation-core"))
 | 
					  compileOnly(project(":foundation-shared"))
 | 
				
			||||||
 | 
					  implementation(project(":common-heimdall"))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -3,8 +3,9 @@ package gay.pizza.foundation.heimdall.plugin
 | 
				
			|||||||
import com.charleskorn.kaml.Yaml
 | 
					import com.charleskorn.kaml.Yaml
 | 
				
			||||||
import com.zaxxer.hikari.HikariConfig
 | 
					import com.zaxxer.hikari.HikariConfig
 | 
				
			||||||
import com.zaxxer.hikari.HikariDataSource
 | 
					import com.zaxxer.hikari.HikariDataSource
 | 
				
			||||||
import gay.pizza.foundation.common.PluginMainClass
 | 
					import gay.pizza.foundation.common.FoundationCoreLoader
 | 
				
			||||||
import gay.pizza.foundation.core.Util
 | 
					import gay.pizza.foundation.shared.PluginMainClass
 | 
				
			||||||
 | 
					import gay.pizza.foundation.shared.copyDefaultConfig
 | 
				
			||||||
import gay.pizza.foundation.heimdall.plugin.buffer.BufferFlushThread
 | 
					import gay.pizza.foundation.heimdall.plugin.buffer.BufferFlushThread
 | 
				
			||||||
import gay.pizza.foundation.heimdall.plugin.buffer.EventBuffer
 | 
					import gay.pizza.foundation.heimdall.plugin.buffer.EventBuffer
 | 
				
			||||||
import gay.pizza.foundation.heimdall.plugin.event.*
 | 
					import gay.pizza.foundation.heimdall.plugin.event.*
 | 
				
			||||||
@ -44,12 +45,10 @@ class FoundationHeimdallPlugin : JavaPlugin(), Listener {
 | 
				
			|||||||
    val exportChunksCommand = getCommand("export_all_chunks") ?: throw Exception("Failed to get export_all_chunks command")
 | 
					    val exportChunksCommand = getCommand("export_all_chunks") ?: throw Exception("Failed to get export_all_chunks command")
 | 
				
			||||||
    exportChunksCommand.setExecutor(ExportAllChunksCommand(this))
 | 
					    exportChunksCommand.setExecutor(ExportAllChunksCommand(this))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    val pluginDataPath = dataFolder.toPath()
 | 
					    val foundation = FoundationCoreLoader.get(server)
 | 
				
			||||||
    pluginDataPath.toFile().mkdir()
 | 
					    val configPath = copyDefaultConfig<FoundationHeimdallPlugin>(
 | 
				
			||||||
 | 
					 | 
				
			||||||
    val configPath = Util.copyDefaultConfig<FoundationHeimdallPlugin>(
 | 
					 | 
				
			||||||
      slF4JLogger,
 | 
					      slF4JLogger,
 | 
				
			||||||
      pluginDataPath,
 | 
					      foundation.pluginDataPath,
 | 
				
			||||||
      "heimdall.yaml"
 | 
					      "heimdall.yaml"
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    config = Yaml.default.decodeFromStream(HeimdallConfig.serializer(), configPath.inputStream())
 | 
					    config = Yaml.default.decodeFromStream(HeimdallConfig.serializer(), configPath.inputStream())
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
name: Foundation-Heimdall
 | 
					name: Foundation-Heimdall
 | 
				
			||||||
version: '${version}'
 | 
					version: '${version}'
 | 
				
			||||||
main: gay.pizza.foundation.heimdall.plugin.HeimdallPlugin
 | 
					main: gay.pizza.foundation.heimdall.plugin.FoundationHeimdallPlugin
 | 
				
			||||||
api-version: 1.18
 | 
					api-version: 1.18
 | 
				
			||||||
prefix: Foundation-Heimdall
 | 
					prefix: Foundation-Heimdall
 | 
				
			||||||
load: STARTUP
 | 
					load: STARTUP
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										3
									
								
								foundation-shared/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								foundation-shared/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					plugins {
 | 
				
			||||||
 | 
					  id("gay.pizza.foundation.concrete-library")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
package gay.pizza.foundation.common
 | 
					package gay.pizza.foundation.shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer
 | 
					import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer
 | 
				
			||||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
 | 
					import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
 | 
				
			||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
package gay.pizza.foundation.common
 | 
					package gay.pizza.foundation.shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.entity.Player
 | 
					import org.bukkit.entity.Player
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
package gay.pizza.foundation.common
 | 
					package gay.pizza.foundation.shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fun <T, R : Comparable<R>> Collection<T>.sortedBy(order: SortOrder, selector: (T) -> R?): List<T> =
 | 
					fun <T, R : Comparable<R>> Collection<T>.sortedBy(order: SortOrder, selector: (T) -> R?): List<T> =
 | 
				
			||||||
  if (order == SortOrder.Ascending) {
 | 
					  if (order == SortOrder.Ascending) {
 | 
				
			||||||
@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					package gay.pizza.foundation.shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.nio.file.Path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface IFoundationCore {
 | 
				
			||||||
 | 
					  val pluginDataPath: Path
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
package gay.pizza.foundation.common
 | 
					package gay.pizza.foundation.shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
object Platform {
 | 
					object Platform {
 | 
				
			||||||
  private val os: String? = System.getProperty("os.name")
 | 
					  private val os: String? = System.getProperty("os.name")
 | 
				
			||||||
@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					package gay.pizza.foundation.shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					annotation class PluginMainClass
 | 
				
			||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
package gay.pizza.foundation.common
 | 
					package gay.pizza.foundation.shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.Material
 | 
					import org.bukkit.Material
 | 
				
			||||||
import org.bukkit.OfflinePlayer
 | 
					import org.bukkit.OfflinePlayer
 | 
				
			||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
package gay.pizza.foundation.common
 | 
					package gay.pizza.foundation.shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum class SortOrder {
 | 
					enum class SortOrder {
 | 
				
			||||||
  Ascending,
 | 
					  Ascending,
 | 
				
			||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
package gay.pizza.foundation.common
 | 
					package gay.pizza.foundation.shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.Location
 | 
					import org.bukkit.Location
 | 
				
			||||||
import org.bukkit.World
 | 
					import org.bukkit.World
 | 
				
			||||||
@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					package gay.pizza.foundation.shared
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.slf4j.Logger
 | 
				
			||||||
 | 
					import java.nio.file.Path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Copy the default configuration from the resource [resourceName] into the directory [targetPath].
 | 
				
			||||||
 | 
					 * @param targetPath The output directory as a path, it must exist before calling this.
 | 
				
			||||||
 | 
					 * @param resourceName Path to resource, it should be in the root of the `resources` directory,
 | 
				
			||||||
 | 
					 *  without the leading slash.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					inline fun <reified T> copyDefaultConfig(log: Logger, targetPath: Path, resourceName: String): Path {
 | 
				
			||||||
 | 
					  if (resourceName.startsWith("/")) {
 | 
				
			||||||
 | 
					    throw IllegalArgumentException("resourceName starts with slash")
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (!targetPath.toFile().exists()) {
 | 
				
			||||||
 | 
					    throw Exception("Configuration output path does not exist!")
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  val outPath = targetPath.resolve(resourceName)
 | 
				
			||||||
 | 
					  val outFile = outPath.toFile()
 | 
				
			||||||
 | 
					  if (outFile.exists()) {
 | 
				
			||||||
 | 
					    log.debug("Configuration file already exists.")
 | 
				
			||||||
 | 
					    return outPath
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  val resourceStream = T::class.java.getResourceAsStream("/$resourceName")
 | 
				
			||||||
 | 
					    ?: throw Exception("Configuration resource does not exist!")
 | 
				
			||||||
 | 
					  val outputStream = outFile.outputStream()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  resourceStream.use {
 | 
				
			||||||
 | 
					    outputStream.use {
 | 
				
			||||||
 | 
					      log.info("Copied default configuration to $outPath")
 | 
				
			||||||
 | 
					      resourceStream.copyTo(outputStream)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return outPath
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -12,6 +12,7 @@ include(
 | 
				
			|||||||
  ":common-plugin",
 | 
					  ":common-plugin",
 | 
				
			||||||
  ":common-heimdall",
 | 
					  ":common-heimdall",
 | 
				
			||||||
  ":foundation-core",
 | 
					  ":foundation-core",
 | 
				
			||||||
 | 
					  ":foundation-shared",
 | 
				
			||||||
  ":foundation-bifrost",
 | 
					  ":foundation-bifrost",
 | 
				
			||||||
  ":foundation-chaos",
 | 
					  ":foundation-chaos",
 | 
				
			||||||
  ":foundation-heimdall",
 | 
					  ":foundation-heimdall",
 | 
				
			||||||
 | 
				
			|||||||
@ -1,10 +1,10 @@
 | 
				
			|||||||
plugins {
 | 
					plugins {
 | 
				
			||||||
  id("gay.pizza.foundation.concrete-library")
 | 
					  id("gay.pizza.foundation.concrete-base")
 | 
				
			||||||
  id("com.github.johnrengelman.shadow")
 | 
					  id("com.github.johnrengelman.shadow")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dependencies {
 | 
					dependencies {
 | 
				
			||||||
  api(project(":common-heimdall"))
 | 
					  implementation(project(":common-heimdall"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  implementation("com.github.ajalt.clikt:clikt:3.5.1")
 | 
					  implementation("com.github.ajalt.clikt:clikt:3.5.1")
 | 
				
			||||||
  implementation("org.slf4j:slf4j-simple:2.0.6")
 | 
					  implementation("org.slf4j:slf4j-simple:2.0.6")
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user