pixlyzer data: load entity data

This commit is contained in:
Bixilon 2021-02-23 21:44:39 +01:00
parent 7bdb03b252
commit a81db59e45
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
2 changed files with 37 additions and 5 deletions

View File

@ -17,15 +17,23 @@ import de.bixilon.minosoft.data.mappings.ModIdentifier
data class EntityInformation(
val identifier: ModIdentifier,
val descriptionId: String?,
val width: Float,
val height: Float,
val size_fixed: Boolean,
val fireImmune: Boolean,
) {
companion object {
fun deserialize(identifier: ModIdentifier, data: JsonObject): EntityInformation? {
return if (data.has("width") && data.has("height")) {
EntityInformation(identifier, data["width"].asFloat, data["height"].asFloat)
} else null
fun deserialize(identifier: ModIdentifier, data: JsonObject): EntityInformation {
return EntityInformation(
identifier = identifier,
descriptionId = data["description_id"]?.asString,
width = data["width"].asFloat,
height = data["height"].asFloat,
fireImmune = data["fire_immune"]?.asBoolean ?: false,
size_fixed = data["site_fixed"]?.asBoolean ?: false
)
}
}
}

View File

@ -14,6 +14,7 @@ package de.bixilon.minosoft.data.mappings.versions
import com.google.common.collect.HashBiMap
import com.google.gson.JsonObject
import de.bixilon.minosoft.data.EntityClassMappings
import de.bixilon.minosoft.data.entities.EntityInformation
import de.bixilon.minosoft.data.entities.EntityMetaDataFields
import de.bixilon.minosoft.data.entities.entities.Entity
@ -126,12 +127,35 @@ class VersionMapping(var version: Version?) {
biomeRegistry.initialize(pixlyzerData["biomes"]?.asJsonObject, this, Biome.Companion)
dimensionRegistry.initialize(pixlyzerData["dimensions"]?.asJsonObject, this, Dimension.Companion)
loadEntities(pixlyzerData["entities"]?.asJsonObject)
// post init
biomeRegistry.postInit(this)
isFullyLoaded = true
}
private fun loadEntities(data: JsonObject?) {
if (data == null) {
return
}
for ((identifierName, entity) in data.entrySet()) {
check(entity is JsonObject)
val identifier = ModIdentifier(identifierName)
EntityClassMappings.getByIdentifier(identifier)?.let {
// not abstract
entityInformationMap[it] = EntityInformation.deserialize(identifier, entity)
entityIdClassMap[entity["id"].asInt] = it
}
entity["meta"]?.asJsonObject?.let {
for ((minosoftFieldName, index) in it.entrySet()) {
val minosoftField = EntityMetaDataFields.valueOf(minosoftFieldName)
entityMetaIndexMap[minosoftField] = index.asInt
}
}
}
}
private fun loadBlockModels(data: Map<ModIdentifier, JsonObject>) {
for ((identifier, model) in data) {