
walkmc.Storage.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of walk-server Show documentation
Show all versions of walk-server Show documentation
A spigot fork to kotlin structure and news.
package walkmc
import org.bukkit.*
import org.bukkit.block.*
import org.bukkit.entity.*
import org.bukkit.inventory.*
import walkmc.block.*
import walkmc.cache.*
import walkmc.extensions.*
import walkmc.extensions.constants.*
import walkmc.serializer.tag.*
import walkmc.serializer.tag.impl.*
import kotlin.reflect.*
import java.util.*
/**
* Returns if this compound tag has the specified key.
*/
fun CompoundTag.hasKey(key: String) = key in this
/**
* A player storage that is persistent across server restarts. Use this when data is permanent.
*/
object PlayerLocalStorage : Cache() {
@Synchronized
fun save(uuid: UUID) = (get(uuid) ?: CompoundTag()).writeTo(uuid.playerRepository)
@Synchronized
fun load(uuid: UUID) = put(uuid, uuid.playerRepository.readTagGroup())
}
/**
* A player storage that is not persistent across server restarts. Use this when data is temporary.
*/
object PlayerSessionStorage : Cache()
/**
* A location storage that is persistent across server restarts. Use this when data is permanent.
*/
object LocationLocalStorage : Cache() {
private val file = TaggedFile(LocationRepository)
@Synchronized
fun saveAll() {
for ((key, value) in this) {
val str = key.stringify(false)
file[str] = value
}
file.save()
}
@Synchronized
fun loadAll() {
file.load()
for ((key, value) in file) {
val loc = location(key, false)
put(loc, value as CompoundTag)
}
}
}
/**
* A location storage that is not persistent across server restarts. Use this when data is temporary.
*/
object LocationSessionStorage : Cache()
class Storage : HashMap() {
fun recover(key: String) = get(key)!!
fun hasKey(key: String) = key in this
@JvmName("hasKeyOf")
inline fun hasKey(key: String) = key in this && recover(key) is T
fun getByOrNull(key: String) = runCatching { get(key)?.cast() }.getOrNull()
fun getBy(key: String, default: T? = null) = getByOrNull(key) ?: default ?: error("Unknown value at key $key")
fun getByteOrNull(key: String) = getByOrNull(key)
fun getByte(key: String, default: Byte = 0) = getBy(key, default)
fun getShortOrNull(key: String) = getByOrNull(key)
fun getShort(key: String, default: Short = 0) = getBy(key, default)
fun getIntOrNull(key: String) = getByOrNull(key)
fun getInt(key: String, default: Int = 0) = getBy(key, default)
fun getLongOrNull(key: String) = getByOrNull(key)
fun getLong(key: String, default: Long = 0) = getBy(key, default)
fun getFloatOrNull(key: String) = getByOrNull(key)
fun getFloat(key: String, default: Float = 0f) = getBy(key, default)
fun getDoubleOrNull(key: String) = getByOrNull(key)
fun getDouble(key: String, default: Double = 0.0) = getBy(key, default)
fun getCharOrNull(key: String) = getByOrNull(key)
fun getChar(key: String, default: Char = ' ') = getBy(key, default)
fun getBooleanOrNull(key: String) = getByOrNull(key)
fun getBoolean(key: String, default: Boolean = false) = getBy(key, default)
fun getStringOrNull(key: String) = getByOrNull(key)
fun getString(key: String, default: String = "") = getBy(key, default)
fun getItemOrNull(key: String) = getByOrNull(key)
fun getItem(key: String, default: ItemStack? = null) = getBy(key, default)
fun getSlotOrNull(key: String) = getByOrNull(key)
fun getSlot(key: String, default: Slot? = null) = getBy(key, default)
fun getInventoryOrNull(key: String) = getByOrNull(key)
fun getInventory(key: String, default: Inventory? = null) = getBy(key, default)
fun getUuidOrNull(key: String) = getByOrNull(key)
fun getUuid(key: String, default: UUID? = null) = getBy(key, default)
fun > getEnumOrNull(key: String) = getByOrNull>(key)
fun > getEnum(key: String, default: Enum? = null) = getBy(key, default)
fun getClassOrNull(key: String) = getByOrNull>(key)
inline fun getClass(key: String, default: Class = T::class.java) = getBy(key, default)
fun getKClassOrNull(key: String) = getByOrNull>(key)
inline fun getKClass(key: String, default: KClass = T::class) = getBy(key, default)
fun getEntityOrNull(key: String) = getByOrNull(key)
fun getEntity(key: String, default: Entity? = null) = getBy(key, default)
@JvmName("getEntityOrNullOf")
fun getEntityOrNull(key: String) = getByOrNull(key)
@JvmName("getEntityOf")
fun getEntity(key: String, default: T? = null) = getBy(key, default)
fun getLocationOrNull(key: String) = getByOrNull(key)
fun getLocation(key: String, default: Location? = null) = getBy(key, default)
fun getBlockOrNull(key: String) = getByOrNull(key)
fun getBlock(key: String, default: Block? = null) = getBy(key, default)
fun getCustomBlockOrNull(key: String) = getByOrNull(key)
fun getCustomBlock(key: String, default: IBlock? = null) = getBy(key, default)
@JvmName("getCustomBlockOrNullOf")
fun getCustomBlockOrNull(key: String) = getByOrNull(key)
@JvmName("getCustomBlockOf")
fun getCustomBlock(key: String, default: T? = null) = getBy(key, default)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy