ILiquidItem
This commit is contained in:
parent
f76530e5b6
commit
6fa7b2193e
@ -27,6 +27,7 @@ import ru.dbotthepony.kstarbound.defs.item.ItemPrototype
|
|||||||
import ru.dbotthepony.kstarbound.defs.item.ItemRarity
|
import ru.dbotthepony.kstarbound.defs.item.ItemRarity
|
||||||
import ru.dbotthepony.kstarbound.defs.item.ItemTooltipKind
|
import ru.dbotthepony.kstarbound.defs.item.ItemTooltipKind
|
||||||
import ru.dbotthepony.kstarbound.defs.item.LeveledStatusEffect
|
import ru.dbotthepony.kstarbound.defs.item.LeveledStatusEffect
|
||||||
|
import ru.dbotthepony.kstarbound.defs.item.LiquidItemPrototype
|
||||||
import ru.dbotthepony.kstarbound.defs.item.MaterialItemPrototype
|
import ru.dbotthepony.kstarbound.defs.item.MaterialItemPrototype
|
||||||
import ru.dbotthepony.kstarbound.defs.liquid.LiquidDefinition
|
import ru.dbotthepony.kstarbound.defs.liquid.LiquidDefinition
|
||||||
import ru.dbotthepony.kstarbound.defs.projectile.*
|
import ru.dbotthepony.kstarbound.defs.projectile.*
|
||||||
@ -169,11 +170,13 @@ object Starbound {
|
|||||||
.also(AtlasConfiguration::registerGson)
|
.also(AtlasConfiguration::registerGson)
|
||||||
|
|
||||||
.registerTypeAdapter(LeveledStatusEffect.ADAPTER)
|
.registerTypeAdapter(LeveledStatusEffect.ADAPTER)
|
||||||
|
.registerTypeAdapter(MaterialReference.Companion)
|
||||||
|
|
||||||
.registerTypeAdapter(ItemPrototype.ADAPTER)
|
.registerTypeAdapter(ItemPrototype.ADAPTER)
|
||||||
.registerTypeAdapter(CurrencyItemPrototype.ADAPTER)
|
.registerTypeAdapter(CurrencyItemPrototype.ADAPTER)
|
||||||
.registerTypeAdapter(ArmorItemPrototype.ADAPTER)
|
.registerTypeAdapter(ArmorItemPrototype.ADAPTER)
|
||||||
.registerTypeAdapter(MaterialItemPrototype.ADAPTER)
|
.registerTypeAdapter(MaterialItemPrototype.ADAPTER)
|
||||||
|
.registerTypeAdapter(LiquidItemPrototype.ADAPTER)
|
||||||
|
|
||||||
.registerTypeAdapter(IItemDefinition.InventoryIcon.ADAPTER)
|
.registerTypeAdapter(IItemDefinition.InventoryIcon.ADAPTER)
|
||||||
.registerTypeAdapter(IFossilItemDefinition.FossilSetDescription.ADAPTER)
|
.registerTypeAdapter(IFossilItemDefinition.FossilSetDescription.ADAPTER)
|
||||||
@ -516,7 +519,7 @@ object Starbound {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun loadItemDefinitions(callback: (String) -> Unit) {
|
private fun loadItemDefinitions(callback: (String) -> Unit) {
|
||||||
val files = listOf(".item", ".currency", ".head", ".chest", ".legs", ".back", ".activeitem", ".matitem")
|
val files = listOf(".item", ".currency", ".head", ".chest", ".legs", ".back", ".activeitem", ".matitem", ".liqitem")
|
||||||
|
|
||||||
for (fs in fileSystems) {
|
for (fs in fileSystems) {
|
||||||
for (listedFile in fs.explore().filter { it.isFile }.filter { f -> files.any { f.name.endsWith(it) } }) {
|
for (listedFile in fs.explore().filter { it.isFile }.filter { f -> files.any { f.name.endsWith(it) } }) {
|
||||||
@ -531,6 +534,9 @@ object Starbound {
|
|||||||
} else if (listedFile.name.endsWith(".matitem")) {
|
} else if (listedFile.name.endsWith(".matitem")) {
|
||||||
val def = GSON.fromJson(listedFile.reader(), MaterialItemPrototype::class.java)
|
val def = GSON.fromJson(listedFile.reader(), MaterialItemPrototype::class.java)
|
||||||
check(items.put(def.itemName, def.assemble()) == null) { "Already has item with name ${def.itemName} loaded!" }
|
check(items.put(def.itemName, def.assemble()) == null) { "Already has item with name ${def.itemName} loaded!" }
|
||||||
|
} else if (listedFile.name.endsWith(".liqitem")) {
|
||||||
|
val def = GSON.fromJson(listedFile.reader(), LiquidItemPrototype::class.java)
|
||||||
|
check(items.put(def.itemName, def.assemble()) == null) { "Already has item with name ${def.itemName} loaded!" }
|
||||||
} else if (listedFile.name.endsWith(".currency")) {
|
} else if (listedFile.name.endsWith(".currency")) {
|
||||||
val def = GSON.fromJson(listedFile.reader(), CurrencyItemPrototype::class.java)
|
val def = GSON.fromJson(listedFile.reader(), CurrencyItemPrototype::class.java)
|
||||||
check(items.put(def.itemName, def.assemble()) == null) { "Already has item with name ${def.itemName} loaded!" }
|
check(items.put(def.itemName, def.assemble()) == null) { "Already has item with name ${def.itemName} loaded!" }
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
package ru.dbotthepony.kstarbound.defs.item
|
||||||
|
|
||||||
|
import ru.dbotthepony.kstarbound.defs.MaterialReference
|
||||||
|
|
||||||
|
interface ILiquidItem : IItemDefinition {
|
||||||
|
/**
|
||||||
|
* То, какую жидкость из себя представляет данный предмет
|
||||||
|
*/
|
||||||
|
val liquid: MaterialReference
|
||||||
|
}
|
@ -6,6 +6,11 @@ enum class ItemTooltipKind {
|
|||||||
*/
|
*/
|
||||||
NORMAL,
|
NORMAL,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Инструмент (кирка, музыкальный инструмент, мотыга, т.п.)
|
||||||
|
*/
|
||||||
|
TOOL,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Улучшение для рюкзака
|
* Улучшение для рюкзака
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
package ru.dbotthepony.kstarbound.defs.item
|
||||||
|
|
||||||
|
import ru.dbotthepony.kstarbound.defs.MaterialReference
|
||||||
|
|
||||||
|
data class LiquidItemDefinition(
|
||||||
|
override val shortdescription: String,
|
||||||
|
override val description: String,
|
||||||
|
override val itemName: String,
|
||||||
|
override val price: Long,
|
||||||
|
override val rarity: ItemRarity,
|
||||||
|
override val category: String?,
|
||||||
|
override val inventoryIcon: List<IItemDefinition.IInventoryIcon>?,
|
||||||
|
override val itemTags: List<String>,
|
||||||
|
override val learnBlueprintsOnPickup: List<String>,
|
||||||
|
override val maxStack: Long,
|
||||||
|
override val eventCategory: String?,
|
||||||
|
override val consumeOnPickup: Boolean,
|
||||||
|
override val pickupQuestTemplates: List<String>,
|
||||||
|
override val scripts: List<String>,
|
||||||
|
override val tooltipKind: ItemTooltipKind,
|
||||||
|
override val twoHanded: Boolean,
|
||||||
|
override val radioMessagesOnPickup: List<String>,
|
||||||
|
override val fuelAmount: Long?,
|
||||||
|
|
||||||
|
override val liquid: MaterialReference,
|
||||||
|
|
||||||
|
val json: Map<String, Any>
|
||||||
|
) : ILiquidItem
|
@ -0,0 +1,56 @@
|
|||||||
|
package ru.dbotthepony.kstarbound.defs.item
|
||||||
|
|
||||||
|
import ru.dbotthepony.kstarbound.defs.MaterialReference
|
||||||
|
import ru.dbotthepony.kstarbound.defs.enrollMap
|
||||||
|
import ru.dbotthepony.kstarbound.io.json.BuilderAdapter
|
||||||
|
|
||||||
|
class LiquidItemPrototype : ItemPrototype() {
|
||||||
|
var liquid: MaterialReference? = null
|
||||||
|
|
||||||
|
var liquidId: Int?
|
||||||
|
get() = liquid?.id
|
||||||
|
set(value) {
|
||||||
|
if (liquid == null)
|
||||||
|
liquid = MaterialReference(id = value, name = null)
|
||||||
|
}
|
||||||
|
|
||||||
|
var liquidName: String?
|
||||||
|
get() = liquid?.name
|
||||||
|
set(value) { liquid = MaterialReference(name = value, id = null) }
|
||||||
|
|
||||||
|
override fun assemble(): IItemDefinition {
|
||||||
|
return LiquidItemDefinition(
|
||||||
|
shortdescription = shortdescription,
|
||||||
|
description = description,
|
||||||
|
itemName = itemName,
|
||||||
|
price = price,
|
||||||
|
rarity = rarity,
|
||||||
|
category = category,
|
||||||
|
inventoryIcon = inventoryIcon,
|
||||||
|
itemTags = itemTags,
|
||||||
|
learnBlueprintsOnPickup = learnBlueprintsOnPickup,
|
||||||
|
maxStack = maxStack,
|
||||||
|
eventCategory = eventCategory,
|
||||||
|
consumeOnPickup = consumeOnPickup,
|
||||||
|
pickupQuestTemplates = pickupQuestTemplates,
|
||||||
|
scripts = scripts,
|
||||||
|
tooltipKind = tooltipKind,
|
||||||
|
twoHanded = twoHanded,
|
||||||
|
radioMessagesOnPickup = radioMessagesOnPickup,
|
||||||
|
fuelAmount = fuelAmount,
|
||||||
|
|
||||||
|
liquid = checkNotNull(liquid) { "Liquid is null (either 'liquidId' or 'liquidName' should be present, or 'liquid' itself)" },
|
||||||
|
|
||||||
|
json = enrollMap(json),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val ADAPTER = BuilderAdapter.Builder(::LiquidItemPrototype)
|
||||||
|
.also { addFields(it as BuilderAdapter.Builder<ItemPrototype>) } // безопасность: свойства родительского класса объявлены как final
|
||||||
|
.auto(LiquidItemPrototype::liquid)
|
||||||
|
.auto(LiquidItemPrototype::liquidId)
|
||||||
|
.auto(LiquidItemPrototype::liquidName)
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user