Skip to content
This repository has been archived by the owner on Feb 16, 2022. It is now read-only.

Commit

Permalink
api(config): ConfigDataType に Vector の追加 #9
Browse files Browse the repository at this point in the history
  • Loading branch information
sya-ri committed Feb 26, 2021
1 parent 0351b39 commit cc67b10
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@ import com.github.syari.spigot.api.config.type.data.ConfigMaterialDataType
import com.github.syari.spigot.api.config.type.data.ConfigNumberDataType
import com.github.syari.spigot.api.config.type.data.ConfigStringDataType
import com.github.syari.spigot.api.config.type.data.ConfigUUIDDataType
import com.github.syari.spigot.api.config.type.data.ConfigVectorDataType
import com.github.syari.spigot.api.config.type.data.ConfigWorldDataType
import com.github.syari.spigot.api.config.type.data.list.ConfigCoordinateListDataType
import com.github.syari.spigot.api.config.type.data.list.ConfigLocationListDataType
import com.github.syari.spigot.api.config.type.data.list.ConfigMaterialListDataType
import com.github.syari.spigot.api.config.type.data.list.ConfigStringListDataType
import com.github.syari.spigot.api.config.type.data.list.ConfigUUIDListDataType
import com.github.syari.spigot.api.config.type.data.list.ConfigVectorListDataType
import com.github.syari.spigot.api.config.type.data.list.ConfigWorldListDataType

/**
Expand Down Expand Up @@ -87,6 +89,8 @@ interface ConfigDataType<T> {
val String = ConfigStringDataType
val StringList = ConfigStringListDataType
val Date = ConfigDateDataType
val Vector = ConfigVectorDataType
val VectorList = ConfigVectorListDataType
val Coordinate = ConfigCoordinateDataType
val CoordinateList = ConfigCoordinateListDataType
val Location = ConfigLocationDataType
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package com.github.syari.spigot.api.config.type.data

import com.github.syari.spigot.api.config.CustomConfig
import com.github.syari.spigot.api.config.type.ConfigDataType
import org.bukkit.util.Vector

/**
* [ConfigDataType.Vector]
* @since 1.4.0
*/
object ConfigVectorDataType : ConfigDataType<Vector> {
/**
* データ型の名前
* @since 1.4.0
*/
override val typeName = "Vector"

/**
* @param config [CustomConfig]
* @param path コンフィグパス
* @param notFoundError 存在しないデータの場合にエラーを出す
* @since 1.4.0
*/
override fun get(
config: CustomConfig,
path: String,
notFoundError: Boolean
): Vector? {
val line = config.get(path, ConfigDataType.String, notFoundError) ?: return null
return stringToVector(config, path, line)
}

/**
* @param config [CustomConfig]
* @param path コンフィグパス
* @param value 設定する値
* @since 1.4.0
*/
override fun set(
config: CustomConfig,
path: String,
value: Vector?
) {
if (value != null) {
config.set(path, ConfigDataType.String, vectorToString(value))
} else {
config.setUnsafe(path, null)
}
}

/**
* [String] を [Vector] に変換します
* @since 1.4.0
*/
internal fun stringToVector(config: CustomConfig, path: String, value: String): Vector? {
val element = value.split(",\\s*".toRegex())
when (element.size) {
3 -> {
return try {
val x = element[0].toDouble()
val y = element[1].toDouble()
val z = element[2].toDouble()
Vector(x, y, z)
} catch (ex: NumberFormatException) {
config.formatMismatchError(path)
null
}
}
else -> {
config.formatMismatchError(path)
return null
}
}
}

/**
* [Vector] を [String] に変換します
* @since 1.4.0
*/
internal fun vectorToString(value: Vector): String {
return "${value.x}, ${value.y}, ${value.z}"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.github.syari.spigot.api.config.type.data.list

import com.github.syari.spigot.api.config.CustomConfig
import com.github.syari.spigot.api.config.type.ConfigDataType
import com.github.syari.spigot.api.config.type.data.ConfigVectorDataType
import org.bukkit.util.Vector

/**
* [ConfigDataType.VectorList]
* @since 1.4.0
*/
object ConfigVectorListDataType : ConfigDataType<List<Vector>> {
/**
* データ型の名前
* @since 1.4.0
*/
override val typeName = "List<Vector>"

/**
* @param config [CustomConfig]
* @param path コンフィグパス
* @param notFoundError 存在しないデータの場合にエラーを出す
* @since 1.4.0
*/
override fun get(
config: CustomConfig,
path: String,
notFoundError: Boolean
): List<Vector> {
return config.get(path, ConfigDataType.StringList, notFoundError)?.mapNotNull {
ConfigVectorDataType.stringToVector(config, "$path.$it", it)
}.orEmpty()
}

/**
* @param config [CustomConfig]
* @param path コンフィグパス
* @param value 設定する値
* @since 1.4.0
*/
override fun set(
config: CustomConfig,
path: String,
value: List<Vector>?
) {
config.set(path, ConfigDataType.StringList, value?.map(ConfigVectorDataType::vectorToString))
}
}

0 comments on commit cc67b10

Please sign in to comment.