Compare commits

...
Author SHA1 Message Date
Nick a0ffa4c565 Work on form registry appender 2022-12-20 17:06:26 -08:00
4 changed files with 197 additions and 0 deletions
+3
View File
@@ -9,6 +9,7 @@ architectury {
repositories {
maven(url = "https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/")
maven(url = "https://maven.impactdev.net/repository/development/")
}
dependencies {
@@ -38,6 +39,8 @@ dependencies {
// modCompileOnly 'com.caoccao.javet:javet:1.0.6' // Linux or Windows
// modCompileOnly 'com.caoccao.javet:javet-macos:1.0.6' // Mac OS (x86_64 Only)
// modCompileOnly group: 'commons-io', name: 'commons-io', version: '2.6'
implementation("net.impactdev:json:1.0.0")
}
publishing {
@@ -0,0 +1,111 @@
package com.cobblemon.mod.common.api.pokemon
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.abilities.AbilityPool
import com.cobblemon.mod.common.api.abilities.AbilityTemplate
import com.cobblemon.mod.common.api.ai.SleepDepth
import com.cobblemon.mod.common.api.conditional.RegistryLikeCondition
import com.cobblemon.mod.common.api.data.DataRegistry
import com.cobblemon.mod.common.api.data.JsonDataRegistry
import com.cobblemon.mod.common.api.drop.DropEntry
import com.cobblemon.mod.common.api.drop.ItemDropMethod
import com.cobblemon.mod.common.api.entity.EntityDimensionsAdapter
import com.cobblemon.mod.common.api.moves.MoveTemplate
import com.cobblemon.mod.common.api.moves.adapters.MoveTemplateAdapter
import com.cobblemon.mod.common.api.pokemon.effect.ShoulderEffect
import com.cobblemon.mod.common.api.pokemon.effect.adapter.ShoulderEffectAdapter
import com.cobblemon.mod.common.api.pokemon.egg.EggGroup
import com.cobblemon.mod.common.api.pokemon.evolution.Evolution
import com.cobblemon.mod.common.api.pokemon.evolution.PreEvolution
import com.cobblemon.mod.common.api.pokemon.evolution.requirement.EvolutionRequirement
import com.cobblemon.mod.common.api.pokemon.experience.ExperienceGroup
import com.cobblemon.mod.common.api.pokemon.experience.ExperienceGroupAdapter
import com.cobblemon.mod.common.api.pokemon.moves.Learnset
import com.cobblemon.mod.common.api.pokemon.stats.Stat
import com.cobblemon.mod.common.api.reactive.SimpleObservable
import com.cobblemon.mod.common.api.spawning.condition.TimeRange
import com.cobblemon.mod.common.api.types.ElementalType
import com.cobblemon.mod.common.api.types.adapters.ElementalTypeAdapter
import com.cobblemon.mod.common.pokemon.FormData
import com.cobblemon.mod.common.pokemon.evolution.adapters.CobblemonEvolutionAdapter
import com.cobblemon.mod.common.pokemon.evolution.adapters.CobblemonPreEvolutionAdapter
import com.cobblemon.mod.common.pokemon.evolution.adapters.CobblemonRequirementAdapter
import com.cobblemon.mod.common.util.adapters.AbilityPoolAdapter
import com.cobblemon.mod.common.util.adapters.AbilityTemplateAdapter
import com.cobblemon.mod.common.util.adapters.BiomeLikeConditionAdapter
import com.cobblemon.mod.common.util.adapters.BlockLikeConditionAdapter
import com.cobblemon.mod.common.util.adapters.BoxAdapter
import com.cobblemon.mod.common.util.adapters.DropEntryAdapter
import com.cobblemon.mod.common.util.adapters.EggGroupAdapter
import com.cobblemon.mod.common.util.adapters.IdentifierAdapter
import com.cobblemon.mod.common.util.adapters.IntRangeAdapter
import com.cobblemon.mod.common.util.adapters.ItemLikeConditionAdapter
import com.cobblemon.mod.common.util.adapters.LazySetAdapter
import com.cobblemon.mod.common.util.adapters.LearnsetAdapter
import com.cobblemon.mod.common.util.adapters.NbtCompoundAdapter
import com.cobblemon.mod.common.util.adapters.TimeRangeAdapter
import com.cobblemon.mod.common.util.adapters.pokemonPropertiesShortAdapter
import com.cobblemon.mod.common.util.cobblemonResource
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken
import net.minecraft.block.Block
import net.minecraft.entity.EntityDimensions
import net.minecraft.item.Item
import net.minecraft.nbt.NbtCompound
import net.minecraft.resource.ResourceType
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.util.Identifier
import net.minecraft.util.math.Box
import net.minecraft.world.biome.Biome
object PokemonForms : JsonDataRegistry<FormData> {
override val id = cobblemonResource("forms")
override val type = ResourceType.SERVER_DATA
override val gson: Gson = GsonBuilder()
.registerTypeAdapter(Stat::class.java, Cobblemon.statProvider.typeAdapter)
.registerTypeAdapter(ElementalType::class.java, ElementalTypeAdapter)
.registerTypeAdapter(AbilityTemplate::class.java, AbilityTemplateAdapter)
.registerTypeAdapter(ShoulderEffect::class.java, ShoulderEffectAdapter)
.registerTypeAdapter(MoveTemplate::class.java, MoveTemplateAdapter)
.registerTypeAdapter(ExperienceGroup::class.java, ExperienceGroupAdapter)
.registerTypeAdapter(EntityDimensions::class.java, EntityDimensionsAdapter)
.registerTypeAdapter(Learnset::class.java, LearnsetAdapter)
.registerTypeAdapter(Evolution::class.java, CobblemonEvolutionAdapter)
.registerTypeAdapter(Box::class.java, BoxAdapter)
.registerTypeAdapter(AbilityPool::class.java, AbilityPoolAdapter)
.registerTypeAdapter(EvolutionRequirement::class.java, CobblemonRequirementAdapter)
.registerTypeAdapter(PreEvolution::class.java, CobblemonPreEvolutionAdapter)
.registerTypeAdapter(TypeToken.getParameterized(Set::class.java, Evolution::class.java).type, LazySetAdapter(Evolution::class))
.registerTypeAdapter(IntRange::class.java, IntRangeAdapter)
.registerTypeAdapter(PokemonProperties::class.java, pokemonPropertiesShortAdapter)
.registerTypeAdapter(Identifier::class.java, IdentifierAdapter)
.registerTypeAdapter(TimeRange::class.java, TimeRangeAdapter)
.registerTypeAdapter(ItemDropMethod::class.java, ItemDropMethod.adapter)
.registerTypeAdapter(SleepDepth::class.java, SleepDepth.adapter)
.registerTypeAdapter(DropEntry::class.java, DropEntryAdapter)
.registerTypeAdapter(NbtCompound::class.java, NbtCompoundAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Biome::class.java).type, BiomeLikeConditionAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Block::class.java).type, BlockLikeConditionAdapter)
.registerTypeAdapter(TypeToken.getParameterized(RegistryLikeCondition::class.java, Item::class.java).type, ItemLikeConditionAdapter)
.registerTypeAdapter(EggGroup::class.java, EggGroupAdapter)
.disableHtmlEscaping()
.enableComplexMapKeySerialization()
.create()
override val typeToken: TypeToken<FormData> = TypeToken.get(FormData::class.java)
override val resourcePath: String = "forms"
override val observable = SimpleObservable<PokemonForms>()
override fun reload(data: Map<Identifier, FormData>) {
TODO("Not yet implemented")
}
override fun sync(player: ServerPlayerEntity) {
TODO("Not yet implemented")
}
}
@@ -84,6 +84,8 @@ class FormData(
private var _dynamaxBlocked: Boolean? = null,
@SerializedName("eggGroups")
private val _eggGroups: Set<EggGroup>? = null,
@SerializedName("eggCycles")
private val _eggCycles: Int? = null,
@SerializedName("height")
private var _height: Float? = null,
@SerializedName("weight")
@@ -156,6 +158,9 @@ class FormData(
val eggGroups: Set<EggGroup>
get() = _eggGroups ?: species.eggGroups
val eggCycles: Int
get() = _eggCycles ?: species.eggCycles
/**
* The height in decimeters
*/
@@ -0,0 +1,78 @@
package com.cobblemon.mod.common.util
import com.google.gson.GsonBuilder
import com.google.gson.JsonObject
import org.junit.jupiter.api.Test
import java.io.File
import java.io.FileReader
import java.io.FileWriter
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
import kotlin.io.path.absolute
import kotlin.io.path.nameWithoutExtension
internal class FormScrapper {
@Test
fun scrap() {
val root = Paths.get("src")
.resolve("main")
.resolve("resources")
.resolve("data")
.resolve("cobblemon")
.resolve("species")
.absolute()
val target = root.parent
.resolve("rewrites")
val gson = GsonBuilder().setPrettyPrinting().create()
val species = target.resolve("species")
val forms = target.resolve("forms")
for (directory in root.toFile().list { dir, name -> Files.isDirectory(root.resolve(name))}) {
val d = root.resolve(directory)
Files.walk(d).use { stream ->
stream.filter{ !it.equals(d) }.forEach {
val name = it.fileName.nameWithoutExtension
val json = gson.fromJson(FileReader(it.toFile()), JsonObject::class.java)
val rewrite = JsonObject()
json.keySet().stream()
.filter { key -> !key.equals("forms") && !key.equals("evolutions")}
.forEach { key ->
rewrite.add(key, json.get(key))
}
var writer = FileWriter(this.createFile(species.resolve(directory).resolve("$name.json")))
writer.use {
writer.write(gson.toJson(rewrite))
}
val formList = json.getAsJsonArray("forms")
for (child in formList) {
val obj = child as JsonObject
val formName = obj.get("name").asString
writer = FileWriter(this.createFile(forms.resolve(directory).resolve(name).resolve("$formName.json")))
writer.use {
writer.write(gson.toJson(child))
}
}
}
}
}
}
private fun createFile(target: Path): File {
if(!Files.exists(target)) {
Files.createDirectories(target.parent)
Files.createFile(target)
}
return target.toFile()
}
}