Рецепты теперь завёрнуты в RegistryObject
This commit is contained in:
parent
2d87575bfc
commit
63944456c6
@ -1,44 +1,48 @@
|
||||
package ru.dbotthepony.kstarbound
|
||||
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.JsonObject
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectFunction
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap
|
||||
import ru.dbotthepony.kstarbound.api.IStarboundFile
|
||||
import ru.dbotthepony.kstarbound.defs.player.RecipeDefinition
|
||||
import java.util.Collections
|
||||
|
||||
class RecipeRegistry {
|
||||
private val recipesInternal = ArrayList<RecipeDefinition>()
|
||||
private val group2recipesInternal = Object2ObjectOpenHashMap<String, ArrayList<RecipeDefinition>>()
|
||||
private val group2recipesBacking = Object2ObjectOpenHashMap<String, List<RecipeDefinition>>()
|
||||
private val output2recipesInternal = Object2ObjectOpenHashMap<String, ArrayList<RecipeDefinition>>()
|
||||
private val output2recipesBacking = Object2ObjectOpenHashMap<String, List<RecipeDefinition>>()
|
||||
private val input2recipesInternal = Object2ObjectOpenHashMap<String, ArrayList<RecipeDefinition>>()
|
||||
private val input2recipesBacking = Object2ObjectOpenHashMap<String, List<RecipeDefinition>>()
|
||||
private val recipesInternal = ArrayList<RegistryObject<RecipeDefinition>>()
|
||||
private val group2recipesInternal = Object2ObjectOpenHashMap<String, ArrayList<RegistryObject<RecipeDefinition>>>()
|
||||
private val group2recipesBacking = Object2ObjectOpenHashMap<String, List<RegistryObject<RecipeDefinition>>>()
|
||||
private val output2recipesInternal = Object2ObjectOpenHashMap<String, ArrayList<RegistryObject<RecipeDefinition>>>()
|
||||
private val output2recipesBacking = Object2ObjectOpenHashMap<String, List<RegistryObject<RecipeDefinition>>>()
|
||||
private val input2recipesInternal = Object2ObjectOpenHashMap<String, ArrayList<RegistryObject<RecipeDefinition>>>()
|
||||
private val input2recipesBacking = Object2ObjectOpenHashMap<String, List<RegistryObject<RecipeDefinition>>>()
|
||||
|
||||
val recipes: List<RecipeDefinition> = Collections.unmodifiableList(recipesInternal)
|
||||
val group2recipes: Map<String, List<RecipeDefinition>> = Collections.unmodifiableMap(group2recipesBacking)
|
||||
val output2recipes: Map<String, List<RecipeDefinition>> = Collections.unmodifiableMap(output2recipesBacking)
|
||||
val input2recipes: Map<String, List<RecipeDefinition>> = Collections.unmodifiableMap(input2recipesBacking)
|
||||
val recipes: List<RegistryObject<RecipeDefinition>> = Collections.unmodifiableList(recipesInternal)
|
||||
val group2recipes: Map<String, List<RegistryObject<RecipeDefinition>>> = Collections.unmodifiableMap(group2recipesBacking)
|
||||
val output2recipes: Map<String, List<RegistryObject<RecipeDefinition>>> = Collections.unmodifiableMap(output2recipesBacking)
|
||||
val input2recipes: Map<String, List<RegistryObject<RecipeDefinition>>> = Collections.unmodifiableMap(input2recipesBacking)
|
||||
|
||||
fun add(recipe: RecipeDefinition) {
|
||||
fun add(recipe: RegistryObject<RecipeDefinition>) {
|
||||
val value = recipe.value
|
||||
recipesInternal.add(recipe)
|
||||
|
||||
for (group in recipe.groups) {
|
||||
for (group in value.groups) {
|
||||
group2recipesInternal.computeIfAbsent(group, Object2ObjectFunction { p ->
|
||||
ArrayList<RecipeDefinition>().also {
|
||||
ArrayList<RegistryObject<RecipeDefinition>>().also {
|
||||
group2recipesBacking[p as String] = Collections.unmodifiableList(it)
|
||||
}
|
||||
}).add(recipe)
|
||||
}
|
||||
|
||||
output2recipesInternal.computeIfAbsent(recipe.output.item.name, Object2ObjectFunction { p ->
|
||||
ArrayList<RecipeDefinition>().also {
|
||||
output2recipesInternal.computeIfAbsent(value.output.item.name, Object2ObjectFunction { p ->
|
||||
ArrayList<RegistryObject<RecipeDefinition>>().also {
|
||||
output2recipesBacking[p as String] = Collections.unmodifiableList(it)
|
||||
}
|
||||
}).add(recipe)
|
||||
|
||||
for (input in recipe.input) {
|
||||
for (input in value.input) {
|
||||
input2recipesInternal.computeIfAbsent(input.item.name, Object2ObjectFunction { p ->
|
||||
ArrayList<RecipeDefinition>().also {
|
||||
ArrayList<RegistryObject<RecipeDefinition>>().also {
|
||||
input2recipesBacking[p as String] = Collections.unmodifiableList(it)
|
||||
}
|
||||
}).add(recipe)
|
||||
|
@ -467,7 +467,7 @@ class Starbound : ISBFileLocator {
|
||||
|
||||
state.setTableFunction("recipesForItem", this) { args ->
|
||||
args.lua.push(JsonArray().also { a ->
|
||||
recipeRegistry.output2recipes[args.getString()]?.stream()?.map { gson.toJsonTree(it) }?.forEach {
|
||||
recipeRegistry.output2recipes[args.getString()]?.stream()?.map { it.toJson() }?.forEach {
|
||||
a.add(it)
|
||||
}
|
||||
})
|
||||
@ -986,7 +986,9 @@ class Starbound : ISBFileLocator {
|
||||
for (listedFile in files) {
|
||||
try {
|
||||
callback("Loading $listedFile")
|
||||
recipeRegistry.add(gson.fromJson(listedFile.reader(), RecipeDefinition::class.java))
|
||||
val json = gson.fromJson(listedFile.reader(), JsonElement::class.java)
|
||||
val value = gson.fromJson<RecipeDefinition>(JsonTreeReader(json), RecipeDefinition::class.java)
|
||||
recipeRegistry.add(RegistryObject(value, json, listedFile, gson, pathStack))
|
||||
} catch (err: Throwable) {
|
||||
logger.error("Loading recipe definition file $listedFile", err)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user