-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[A.0.0.1.0] 重大更新 | 配置文件更新 工作空间创建bug修复
- Loading branch information
1 parent
110739f
commit b19c104
Showing
13 changed files
with
468 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
project/module-common/src/main/kotlin/cn/fd/utilities/common/config/Settings.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,7 @@ | ||
dependencies {} | ||
dependencies { | ||
installTaboo("platform-bukkit") | ||
installTaboo("platform-bungee") | ||
installTaboo("platform-velocity") | ||
compileOnly("net.md-5:bungeecord-api:1.20-R0.1-SNAPSHOT") | ||
compileOnly("com.velocitypowered:velocity-api:3.1.1") | ||
} |
2 changes: 1 addition & 1 deletion
2
project/module-core/src/main/kotlin/cn/fd/utilities/core/api/Workspace.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 0 additions & 10 deletions
10
project/module-core/src/main/kotlin/cn/fd/utilities/core/util/FileUtils.kt
This file was deleted.
Oops, something went wrong.
33 changes: 33 additions & 0 deletions
33
project/module-core/src/main/kotlin/tb/common/platform/service/PlatformIO.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package tb.common.platform.service | ||
|
||
import taboolib.common.platform.PlatformService | ||
import java.io.File | ||
|
||
@PlatformService | ||
interface PlatformIO { | ||
|
||
val pluginId: String | ||
|
||
val pluginVersion: String | ||
|
||
val isPrimaryThread: Boolean | ||
|
||
fun <T> server(): T | ||
|
||
fun info(vararg message: Any?) | ||
|
||
fun severe(vararg message: Any?) | ||
|
||
fun warning(vararg message: Any?) | ||
|
||
fun releaseResourceFile(path: String, replace: Boolean = false): File | ||
|
||
//修改部分——添加 | ||
fun releaseResourceFile(resource: String, target: String = resource, replace: Boolean = false): File | ||
|
||
fun getJarFile(): File | ||
|
||
fun getDataFolder(): File | ||
|
||
fun getPlatformData(): Map<String, Any> | ||
} |
10 changes: 10 additions & 0 deletions
10
project/module-core/src/main/kotlin/tb/module/configuration/Config.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package tb.module.configuration | ||
|
||
@Target(AnnotationTarget.FIELD) | ||
@Retention(AnnotationRetention.RUNTIME) | ||
annotation class Config( | ||
val value: String = "config.yml", | ||
val target: String = "sameAsValue", //修改部分——添加 | ||
val migrate: Boolean = false, | ||
val autoReload: Boolean = false | ||
) |
99 changes: 99 additions & 0 deletions
99
project/module-core/src/main/kotlin/tb/module/configuration/ConfigLoader.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
package tb.module.configuration | ||
|
||
import taboolib.common.LifeCycle | ||
import taboolib.common.TabooLibCommon | ||
import taboolib.common.env.RuntimeDependencies | ||
import taboolib.common.env.RuntimeDependency | ||
import taboolib.common.inject.ClassVisitor | ||
import taboolib.common.platform.Awake | ||
import taboolib.common.platform.PlatformFactory | ||
import taboolib.common5.FileWatcher | ||
import taboolib.library.reflex.ClassField | ||
import taboolib.module.configuration.ConfigNodeFile | ||
import taboolib.module.configuration.ConfigNodeLoader | ||
import taboolib.module.configuration.Configuration | ||
import taboolib.module.configuration.SecuredFile | ||
import util.releaseResourceFile | ||
import java.util.function.Supplier | ||
|
||
@RuntimeDependencies( | ||
RuntimeDependency( | ||
"!org.yaml:snakeyaml:2.0", | ||
test = "!org.yaml.snakeyaml_2_0.Yaml", | ||
relocate = ["!org.yaml.snakeyaml", "!org.yaml.snakeyaml_2_0"] | ||
), | ||
RuntimeDependency("!com.typesafe:config:1.4.2", test = "!com.typesafe.config.Config"), | ||
RuntimeDependency("!com.electronwill.night-config:core:3.6.6", test = "!com.electronwill.nightconfig.core.Config"), | ||
RuntimeDependency( | ||
"!com.electronwill.night-config:toml:3.6.6", | ||
test = "!com.electronwill.nightconfig.toml.TomlFormat" | ||
), | ||
RuntimeDependency( | ||
"!com.electronwill.night-config:json:3.6.6", | ||
test = "!com.electronwill.nightconfig.json.JsonFormat" | ||
), | ||
RuntimeDependency( | ||
"!com.electronwill.night-config:hocon:3.6.6", | ||
test = "!com.electronwill.nightconfig.hocon.HoconFormat" | ||
) | ||
) | ||
@Awake | ||
class ConfigLoader : ClassVisitor(1) { | ||
|
||
@Suppress("DEPRECATION", "KotlinConstantConditions") | ||
override fun visit(field: ClassField, clazz: Class<*>, instance: Supplier<*>?) { | ||
if (field.isAnnotationPresent(Config::class.java)) { | ||
val configAnno = field.getAnnotation(Config::class.java) | ||
val name = configAnno.property("value", "config.yml") | ||
val target = configAnno.property("target", "config.yml") //修改部分——添加 | ||
if (files.containsKey(name)) { | ||
field.set(instance?.get(), files[name]!!.configuration) | ||
} else { | ||
val file = releaseResourceFile(name, if (target == "sameAsValue") name else target) //修改部分 | ||
// 兼容模式加载 | ||
val conf = | ||
if (field.fieldType == SecuredFile::class.java) SecuredFile.loadConfiguration(file) else Configuration.loadFromFile( | ||
file | ||
) | ||
// 赋值 | ||
field.set(instance?.get(), conf) | ||
// 自动重载 | ||
if (configAnno.property("autoReload", false) && isFileWatcherHook) { | ||
FileWatcher.INSTANCE.addSimpleListener(file) { | ||
if (file.exists()) { | ||
conf.loadFromFile(file) | ||
} | ||
} | ||
} | ||
val configFile = ConfigNodeFile(conf, file) | ||
conf.onReload { | ||
val loader = PlatformFactory.getAPI<ConfigNodeLoader>() | ||
configFile.nodes.forEach { loader.visit(it, clazz, instance) } | ||
} | ||
files[name] = configFile | ||
// 开发模式 | ||
if (TabooLibCommon.isDevelopmentMode()) { | ||
TabooLibCommon.print("Loaded config file: ${file.absolutePath}") | ||
} | ||
} | ||
} | ||
} | ||
|
||
override fun getLifeCycle(): LifeCycle { | ||
return LifeCycle.INIT | ||
} | ||
|
||
companion object { | ||
|
||
val files = HashMap<String, ConfigNodeFile>() | ||
|
||
val isFileWatcherHook by lazy { | ||
try { | ||
FileWatcher.INSTANCE | ||
true | ||
} catch (ex: NoClassDefFoundError) { | ||
false | ||
} | ||
} | ||
} | ||
} |
86 changes: 86 additions & 0 deletions
86
project/module-core/src/main/kotlin/tb/platform/BukkitIO.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
package tb.platform | ||
|
||
import org.bukkit.Bukkit | ||
import taboolib.common.io.newFile | ||
import taboolib.common.platform.Awake | ||
import taboolib.common.platform.Platform | ||
import taboolib.common.platform.PlatformSide | ||
import taboolib.platform.BukkitPlugin | ||
import tb.common.platform.service.PlatformIO | ||
import java.io.File | ||
|
||
/** | ||
* TabooLib | ||
* taboolib.platform.BukkitIO | ||
* | ||
* @author sky | ||
* @since 2021/6/14 11:10 下午 | ||
*/ | ||
@Awake | ||
@PlatformSide([Platform.BUKKIT]) | ||
class BukkitIO : PlatformIO { | ||
|
||
val plugin: BukkitPlugin | ||
get() = BukkitPlugin.getInstance() | ||
|
||
override val pluginId: String | ||
get() = plugin.description.name | ||
|
||
override val pluginVersion: String | ||
get() = plugin.description.version | ||
|
||
override val isPrimaryThread: Boolean | ||
get() = Bukkit.isPrimaryThread() | ||
|
||
@Suppress("UNCHECKED_CAST") | ||
override fun <T> server(): T { | ||
return Bukkit.getServer() as T | ||
} | ||
|
||
override fun info(vararg message: Any?) { | ||
message.filterNotNull().forEach { plugin.logger.info(it.toString()) } | ||
} | ||
|
||
override fun severe(vararg message: Any?) { | ||
message.filterNotNull().forEach { plugin.logger.severe(it.toString()) } | ||
} | ||
|
||
override fun warning(vararg message: Any?) { | ||
message.filterNotNull().forEach { plugin.logger.warning(it.toString()) } | ||
} | ||
|
||
override fun releaseResourceFile(path: String, replace: Boolean): File { | ||
val file = File(getDataFolder(), path) | ||
if (file.exists() && !replace) { | ||
return file | ||
} | ||
newFile(file).writeBytes(plugin.getResource(path)?.readBytes() ?: error("resource not found: $path")) | ||
return file | ||
} | ||
|
||
//修改部分——添加 | ||
override fun releaseResourceFile(resource: String, target: String, replace: Boolean): File { | ||
val file = File(getDataFolder(), target) | ||
if (file.exists() && !replace) { | ||
return file | ||
} | ||
newFile(file).writeBytes(plugin.getResource(resource)?.readBytes() ?: error("resource not found: $resource")) | ||
return file | ||
} | ||
|
||
override fun getJarFile(): File { | ||
return BukkitPlugin.getPluginInstance()?.nativeJarFile() ?: plugin.file | ||
} | ||
|
||
override fun getDataFolder(): File { | ||
return BukkitPlugin.getPluginInstance()?.nativeDataFolder() ?: plugin.dataFolder | ||
} | ||
|
||
override fun getPlatformData(): Map<String, Any> { | ||
return mapOf( | ||
"bukkitVersion" to Bukkit.getVersion(), | ||
"bukkitName" to Bukkit.getName(), | ||
"onlineMode" to if (Bukkit.getOnlineMode()) 1 else 0 | ||
) | ||
} | ||
} |
99 changes: 99 additions & 0 deletions
99
project/module-core/src/main/kotlin/tb/platform/BungeeIO.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
package tb.platform | ||
|
||
import taboolib.common.io.newFile | ||
import taboolib.common.platform.Awake | ||
import taboolib.common.platform.Platform | ||
import taboolib.common.platform.PlatformSide | ||
import taboolib.common.util.unsafeLazy | ||
import taboolib.platform.BungeePlugin | ||
import tb.common.platform.service.PlatformIO | ||
import java.io.File | ||
import java.util.logging.Logger | ||
|
||
/** | ||
* TabooLib | ||
* taboolib.platform.BungeeIO | ||
* | ||
* @author sky | ||
* @since 2021/6/14 11:10 下午 | ||
*/ | ||
@Awake | ||
@PlatformSide([Platform.BUNGEE]) | ||
class BungeeIO : PlatformIO { | ||
|
||
val plugin by unsafeLazy { BungeePlugin.getInstance() } | ||
|
||
private val logger: Logger | ||
get() = try { | ||
BungeePlugin.getInstance().logger | ||
} catch (ex: Exception) { | ||
Logger.getAnonymousLogger() | ||
} | ||
|
||
override val pluginId: String | ||
get() = BungeePlugin.getInstance().description.name | ||
|
||
override val pluginVersion: String | ||
get() = BungeePlugin.getInstance().description.version | ||
|
||
override val isPrimaryThread: Boolean | ||
get() = true | ||
|
||
@Suppress("UNCHECKED_CAST") | ||
override fun <T> server(): T { | ||
return plugin.proxy as T | ||
} | ||
|
||
override fun info(vararg message: Any?) { | ||
message.filterNotNull().forEach { logger.info(it.toString()) } | ||
} | ||
|
||
override fun severe(vararg message: Any?) { | ||
message.filterNotNull().forEach { logger.severe(it.toString()) } | ||
} | ||
|
||
override fun warning(vararg message: Any?) { | ||
message.filterNotNull().forEach { logger.warning(it.toString()) } | ||
} | ||
|
||
override fun releaseResourceFile(path: String, replace: Boolean): File { | ||
val file = File(getDataFolder(), path) | ||
if (file.exists() && !replace) { | ||
return file | ||
} | ||
newFile(file).writeBytes( | ||
BungeePlugin.getInstance().getResourceAsStream(path)?.readBytes() ?: error("resource not found: $path") | ||
) | ||
return file | ||
} | ||
|
||
//修改部分——添加 | ||
override fun releaseResourceFile(resource: String, target: String, replace: Boolean): File { | ||
val file = File(getDataFolder(), target) | ||
if (file.exists() && !replace) { | ||
return file | ||
} | ||
newFile(file).writeBytes( | ||
BungeePlugin.getInstance().getResourceAsStream(resource)?.readBytes() | ||
?: error("resource not found: $resource") | ||
) | ||
return file | ||
} | ||
|
||
override fun getJarFile(): File { | ||
return BungeePlugin.getPluginInstance()?.nativeJarFile() ?: BungeePlugin.getInstance().file | ||
} | ||
|
||
override fun getDataFolder(): File { | ||
return BungeePlugin.getPluginInstance()?.nativeDataFolder() ?: BungeePlugin.getInstance().dataFolder | ||
} | ||
|
||
override fun getPlatformData(): Map<String, Any> { | ||
val proxy = BungeePlugin.getInstance().proxy | ||
return mapOf( | ||
"managedServers" to proxy.servers.size, | ||
"onlineMode" to if (proxy.config.isOnlineMode) 1 else 0, | ||
"bungeecordVersion" to proxy.version, | ||
) | ||
} | ||
} |
Oops, something went wrong.