ItemDescriptor в ItemStack ибо странно называть его так
This commit is contained in:
parent
89180a6664
commit
b47abdced4
@ -63,7 +63,7 @@ import ru.dbotthepony.kstarbound.io.json.factory.ImmutableCollectionAdapterFacto
|
||||
import ru.dbotthepony.kstarbound.lua.LuaState
|
||||
import ru.dbotthepony.kstarbound.lua.loadInternalScript
|
||||
import ru.dbotthepony.kstarbound.math.*
|
||||
import ru.dbotthepony.kstarbound.util.ItemDescriptor
|
||||
import ru.dbotthepony.kstarbound.util.ItemStack
|
||||
import ru.dbotthepony.kstarbound.util.PathStack
|
||||
import ru.dbotthepony.kstarbound.util.SBPattern
|
||||
import ru.dbotthepony.kstarbound.util.WriteOnce
|
||||
@ -202,7 +202,7 @@ class Starbound : ISBFileLocator {
|
||||
|
||||
registerTypeAdapterFactory(AssetReferenceFactory(pathStack, this@Starbound))
|
||||
|
||||
registerTypeAdapter(ItemDescriptor.Adapter(this@Starbound))
|
||||
registerTypeAdapter(ItemStack.Adapter(this@Starbound))
|
||||
|
||||
registerTypeAdapterFactory(ItemReference.Factory(STRINGS))
|
||||
|
||||
@ -229,39 +229,39 @@ class Starbound : ISBFileLocator {
|
||||
.expireAfterAccess(Duration.ofMinutes(10))
|
||||
.build<String, ImageData>()
|
||||
|
||||
fun item(name: String): ItemDescriptor {
|
||||
return ItemDescriptor(items[name] ?: return ItemDescriptor.EMPTY)
|
||||
fun item(name: String): ItemStack {
|
||||
return ItemStack(items[name] ?: return ItemStack.EMPTY)
|
||||
}
|
||||
|
||||
fun item(name: String, count: Long): ItemDescriptor {
|
||||
fun item(name: String, count: Long): ItemStack {
|
||||
if (count <= 0L)
|
||||
return ItemDescriptor.EMPTY
|
||||
return ItemStack.EMPTY
|
||||
|
||||
return ItemDescriptor(items[name] ?: return ItemDescriptor.EMPTY, count = count)
|
||||
return ItemStack(items[name] ?: return ItemStack.EMPTY, count = count)
|
||||
}
|
||||
|
||||
fun item(name: String, count: Long, parameters: JsonObject): ItemDescriptor {
|
||||
fun item(name: String, count: Long, parameters: JsonObject): ItemStack {
|
||||
if (count <= 0L)
|
||||
return ItemDescriptor.EMPTY
|
||||
return ItemStack.EMPTY
|
||||
|
||||
return ItemDescriptor(items[name] ?: return ItemDescriptor.EMPTY, count = count, parameters = parameters)
|
||||
return ItemStack(items[name] ?: return ItemStack.EMPTY, count = count, parameters = parameters)
|
||||
}
|
||||
|
||||
fun item(descriptor: JsonObject): ItemDescriptor {
|
||||
fun item(descriptor: JsonObject): ItemStack {
|
||||
return item(
|
||||
(descriptor["name"] as? JsonPrimitive)?.asString ?: return ItemDescriptor.EMPTY,
|
||||
descriptor["count"]?.asLong ?: return ItemDescriptor.EMPTY,
|
||||
(descriptor["name"] as? JsonPrimitive)?.asString ?: return ItemStack.EMPTY,
|
||||
descriptor["count"]?.asLong ?: return ItemStack.EMPTY,
|
||||
(descriptor["parameters"] as? JsonObject)?.deepCopy() ?: JsonObject()
|
||||
)
|
||||
}
|
||||
|
||||
fun item(descriptor: JsonElement?): ItemDescriptor {
|
||||
fun item(descriptor: JsonElement?): ItemStack {
|
||||
if (descriptor is JsonPrimitive) {
|
||||
return item(descriptor.asString)
|
||||
} else if (descriptor is JsonObject) {
|
||||
return item(descriptor)
|
||||
} else {
|
||||
return ItemDescriptor.EMPTY
|
||||
return ItemStack.EMPTY
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,18 +13,18 @@ import ru.dbotthepony.kstarbound.defs.item.IItemDefinition
|
||||
import ru.dbotthepony.kstarbound.io.json.builder.FactoryAdapter
|
||||
import ru.dbotthepony.kstarbound.io.json.builder.JsonFactory
|
||||
import ru.dbotthepony.kstarbound.io.json.consumeNull
|
||||
import ru.dbotthepony.kstarbound.util.ItemDescriptor
|
||||
import ru.dbotthepony.kstarbound.util.ItemStack
|
||||
|
||||
/**
|
||||
* Прототип [ItemDescriptor] в JSON файлах
|
||||
* Прототип [ItemStack] в JSON файлах
|
||||
*/
|
||||
data class ItemReference(
|
||||
val item: RegistryReference<IItemDefinition>,
|
||||
val count: Long = 1,
|
||||
val parameters: JsonObject = JsonObject()
|
||||
) {
|
||||
fun makeStack(): ItemDescriptor {
|
||||
return ItemDescriptor(item.value ?: return ItemDescriptor.EMPTY, count, parameters)
|
||||
fun makeStack(): ItemStack {
|
||||
return ItemStack(item.value ?: return ItemStack.EMPTY, count, parameters)
|
||||
}
|
||||
|
||||
class Factory(val stringInterner: Interner<String> = Interner { it }) : TypeAdapterFactory {
|
||||
|
@ -2,7 +2,7 @@ package ru.dbotthepony.kstarbound.defs.player
|
||||
|
||||
import com.google.common.collect.ImmutableSet
|
||||
import ru.dbotthepony.kstarbound.io.json.builder.JsonFactory
|
||||
import ru.dbotthepony.kstarbound.util.ItemDescriptor
|
||||
import ru.dbotthepony.kstarbound.util.ItemStack
|
||||
import java.util.function.Predicate
|
||||
|
||||
@JsonFactory
|
||||
@ -11,8 +11,8 @@ data class BagFilterConfig(
|
||||
val typeWhitelist: ImmutableSet<String>? = null,
|
||||
val tagBlacklist: ImmutableSet<String>? = null,
|
||||
val categoryBlacklist: ImmutableSet<String>? = null,
|
||||
) : Predicate<ItemDescriptor> {
|
||||
override fun test(t: ItemDescriptor): Boolean {
|
||||
) : Predicate<ItemStack> {
|
||||
override fun test(t: ItemStack): Boolean {
|
||||
if (t.isEmpty)
|
||||
return false
|
||||
|
||||
|
@ -11,7 +11,7 @@ import ru.dbotthepony.kstarbound.Starbound
|
||||
import ru.dbotthepony.kstarbound.defs.player.TechDefinition
|
||||
import ru.dbotthepony.kstarbound.lua.LuaState
|
||||
import ru.dbotthepony.kstarbound.lua.loadInternalScript
|
||||
import ru.dbotthepony.kstarbound.util.ItemDescriptor
|
||||
import ru.dbotthepony.kstarbound.util.ItemStack
|
||||
import ru.dbotthepony.kstarbound.util.immutableMap
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
@ -40,20 +40,20 @@ class Avatar(val starbound: Starbound, val uniqueId: UUID) {
|
||||
BACK_COSMETIC;
|
||||
}
|
||||
|
||||
private val essentialSlots = EnumMap<EssentialSlot, ItemDescriptor>(EssentialSlot::class.java)
|
||||
private val equipmentSlots = EnumMap<EquipmentSlot, ItemDescriptor>(EquipmentSlot::class.java)
|
||||
private val essentialSlots = EnumMap<EssentialSlot, ItemStack>(EssentialSlot::class.java)
|
||||
private val equipmentSlots = EnumMap<EquipmentSlot, ItemStack>(EquipmentSlot::class.java)
|
||||
private val bags = ArrayList<AvatarBag>()
|
||||
private val quests = Object2ObjectOpenHashMap<String, QuestInstance>()
|
||||
|
||||
var cursorItem = ItemDescriptor.EMPTY
|
||||
var cursorItem = ItemStack.EMPTY
|
||||
|
||||
private val availableTechs = ObjectOpenHashSet<RegistryObject<TechDefinition>>()
|
||||
private val enabledTechs = ObjectOpenHashSet<RegistryObject<TechDefinition>>()
|
||||
private val equippedTechs = Object2ObjectOpenHashMap<String, RegistryObject<TechDefinition>>()
|
||||
|
||||
private val knownBlueprints = ObjectOpenHashSet<ItemDescriptor>()
|
||||
private val knownBlueprints = ObjectOpenHashSet<ItemStack>()
|
||||
// С подписью NEW
|
||||
private val newBlueprints = ObjectOpenHashSet<ItemDescriptor>()
|
||||
private val newBlueprints = ObjectOpenHashSet<ItemStack>()
|
||||
|
||||
private val currencies = Object2LongOpenHashMap<String>()
|
||||
|
||||
@ -95,7 +95,7 @@ class Avatar(val starbound: Starbound, val uniqueId: UUID) {
|
||||
* Teaches the player any recipes which can be used to craft the specified item.
|
||||
*/
|
||||
private fun giveBlueprint(name: JsonElement): Boolean {
|
||||
val item: ItemDescriptor
|
||||
val item: ItemStack
|
||||
|
||||
if (name is JsonPrimitive) {
|
||||
item = starbound.item(name.asString).conciseToNull() ?: return false
|
||||
@ -202,36 +202,36 @@ class Avatar(val starbound: Starbound, val uniqueId: UUID) {
|
||||
/**
|
||||
* Adds the specified item to the player's inventory.
|
||||
*/
|
||||
fun giveItem(descriptor: ItemDescriptor) {
|
||||
fun giveItem(descriptor: ItemStack) {
|
||||
TODO()
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the player's inventory contains an item matching the specified descriptor and `false` otherwise. If exactMatch is `true` then parameters as well as item name must match.
|
||||
*/
|
||||
fun hasItem(descriptor: ItemDescriptor, exactMatch: Boolean = false): Boolean {
|
||||
fun hasItem(descriptor: ItemStack, exactMatch: Boolean = false): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total number of items in the player's inventory matching the specified descriptor. If exactMatch is `true` then parameters as well as item name must match.
|
||||
*/
|
||||
fun hasCountOfItem(descriptor: ItemDescriptor, exactMatch: Boolean = false): Long {
|
||||
fun hasCountOfItem(descriptor: ItemStack, exactMatch: Boolean = false): Long {
|
||||
return 0L
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempts to consume the specified item from the player's inventory and returns the item consumed if successful. If consumePartial is `true`, matching stacks totalling fewer items than the requested count may be consumed, otherwise the operation will only be performed if the full count can be consumed. If exactMatch is `true` then parameters as well as item name must match.
|
||||
*/
|
||||
fun consumeItem(descriptor: ItemDescriptor, allowPartial: Boolean = false, exactMatch: Boolean = false): ItemDescriptor {
|
||||
return ItemDescriptor.EMPTY
|
||||
fun consumeItem(descriptor: ItemStack, allowPartial: Boolean = false, exactMatch: Boolean = false): ItemStack {
|
||||
return ItemStack.EMPTY
|
||||
}
|
||||
|
||||
fun inventoryTags(): Map<String, Long> {
|
||||
return mapOf()
|
||||
}
|
||||
|
||||
fun itemsWithTag(): List<ItemDescriptor> {
|
||||
fun itemsWithTag(): List<ItemStack> {
|
||||
return listOf()
|
||||
}
|
||||
|
||||
@ -247,18 +247,18 @@ class Avatar(val starbound: Starbound, val uniqueId: UUID) {
|
||||
return 0L
|
||||
}
|
||||
|
||||
fun getItemWithParameter(name: String, value: JsonElement): ItemDescriptor {
|
||||
return ItemDescriptor.EMPTY
|
||||
fun getItemWithParameter(name: String, value: JsonElement): ItemStack {
|
||||
return ItemStack.EMPTY
|
||||
}
|
||||
|
||||
var primaryHandItem: ItemDescriptor? = null
|
||||
var altHandItem: ItemDescriptor? = null
|
||||
var primaryHandItem: ItemStack? = null
|
||||
var altHandItem: ItemStack? = null
|
||||
|
||||
fun essentialItem(slotName: EssentialSlot): ItemDescriptor? {
|
||||
fun essentialItem(slotName: EssentialSlot): ItemStack? {
|
||||
return essentialSlots[slotName]?.conciseToNull()
|
||||
}
|
||||
|
||||
fun giveEssentialItem(slotName: EssentialSlot, item: ItemDescriptor) {
|
||||
fun giveEssentialItem(slotName: EssentialSlot, item: ItemStack) {
|
||||
|
||||
}
|
||||
|
||||
@ -266,11 +266,11 @@ class Avatar(val starbound: Starbound, val uniqueId: UUID) {
|
||||
|
||||
}
|
||||
|
||||
fun equippedItem(slotName: EquipmentSlot): ItemDescriptor {
|
||||
return equipmentSlots[slotName] ?: ItemDescriptor.EMPTY
|
||||
fun equippedItem(slotName: EquipmentSlot): ItemStack {
|
||||
return equipmentSlots[slotName] ?: ItemStack.EMPTY
|
||||
}
|
||||
|
||||
fun setEquippedItem(slotName: EquipmentSlot, item: ItemDescriptor) {
|
||||
fun setEquippedItem(slotName: EquipmentSlot, item: ItemStack) {
|
||||
|
||||
}
|
||||
|
||||
|
@ -2,10 +2,10 @@ package ru.dbotthepony.kstarbound.player
|
||||
|
||||
import com.google.common.collect.ImmutableList
|
||||
import ru.dbotthepony.kstarbound.defs.player.InventoryConfig
|
||||
import ru.dbotthepony.kstarbound.util.ItemDescriptor
|
||||
import ru.dbotthepony.kstarbound.util.ItemStack
|
||||
import java.util.function.Predicate
|
||||
|
||||
class AvatarBag(val avatar: Avatar, val config: InventoryConfig.Bag, val filter: Predicate<ItemDescriptor>) {
|
||||
class AvatarBag(val avatar: Avatar, val config: InventoryConfig.Bag, val filter: Predicate<ItemStack>) {
|
||||
private val slots = ImmutableList.builder<Slot>().let {
|
||||
for (i in 0 until config.size) {
|
||||
it.add(Slot())
|
||||
@ -15,9 +15,9 @@ class AvatarBag(val avatar: Avatar, val config: InventoryConfig.Bag, val filter:
|
||||
}
|
||||
|
||||
private class Slot {
|
||||
var item: ItemDescriptor? = null
|
||||
var item: ItemStack? = null
|
||||
|
||||
fun mergeFrom(value: ItemDescriptor, simulate: Boolean) {
|
||||
fun mergeFrom(value: ItemStack, simulate: Boolean) {
|
||||
if (item == null) {
|
||||
if (!simulate) {
|
||||
item = value.copy().also { it.count = value.count.coerceAtMost(value.item!!.value.maxStack) }
|
||||
@ -30,15 +30,15 @@ class AvatarBag(val avatar: Avatar, val config: InventoryConfig.Bag, val filter:
|
||||
}
|
||||
}
|
||||
|
||||
operator fun set(index: Int, value: ItemDescriptor?) {
|
||||
operator fun set(index: Int, value: ItemStack?) {
|
||||
slots[index].item = value
|
||||
}
|
||||
|
||||
operator fun get(index: Int): ItemDescriptor? {
|
||||
operator fun get(index: Int): ItemStack? {
|
||||
return slots[index].item
|
||||
}
|
||||
|
||||
fun put(item: ItemDescriptor, simulate: Boolean): ItemDescriptor {
|
||||
fun put(item: ItemStack, simulate: Boolean): ItemStack {
|
||||
if (!filter.test(item))
|
||||
return item
|
||||
|
||||
|
@ -9,7 +9,7 @@ import ru.dbotthepony.kstarbound.defs.quest.QuestTemplate
|
||||
import ru.dbotthepony.kstarbound.lua.LuaState
|
||||
import ru.dbotthepony.kstarbound.lua.MessageHandler
|
||||
import ru.dbotthepony.kstarbound.lua.exposeConfig
|
||||
import ru.dbotthepony.kstarbound.util.ItemDescriptor
|
||||
import ru.dbotthepony.kstarbound.util.ItemStack
|
||||
import ru.dbotthepony.kstarbound.util.set
|
||||
import java.util.UUID
|
||||
|
||||
@ -55,7 +55,7 @@ class QuestInstance(
|
||||
private var calledStart = false
|
||||
private var successfulStart = false
|
||||
|
||||
private val rewards = ArrayList<ItemDescriptor>()
|
||||
private val rewards = ArrayList<ItemStack>()
|
||||
|
||||
fun complete() {
|
||||
|
||||
|
@ -11,7 +11,7 @@ import ru.dbotthepony.kstarbound.RegistryObject
|
||||
import ru.dbotthepony.kstarbound.Starbound
|
||||
import ru.dbotthepony.kstarbound.defs.item.IItemDefinition
|
||||
|
||||
class ItemDescriptor private constructor(item: RegistryObject<IItemDefinition>?, count: Long, val parameters: JsonObject, marker: Unit) {
|
||||
class ItemStack private constructor(item: RegistryObject<IItemDefinition>?, count: Long, val parameters: JsonObject, marker: Unit) {
|
||||
constructor(item: RegistryObject<IItemDefinition>, count: Long = 1L, parameters: JsonObject = JsonObject()) : this(item, count, parameters, Unit)
|
||||
|
||||
var item: RegistryObject<IItemDefinition>? = item
|
||||
@ -46,7 +46,7 @@ class ItemDescriptor private constructor(item: RegistryObject<IItemDefinition>?,
|
||||
/**
|
||||
* Возвращает null если этот предмет пуст
|
||||
*/
|
||||
fun conciseToNull(): ItemDescriptor? {
|
||||
fun conciseToNull(): ItemStack? {
|
||||
if (isEmpty) {
|
||||
return null
|
||||
} else {
|
||||
@ -54,7 +54,7 @@ class ItemDescriptor private constructor(item: RegistryObject<IItemDefinition>?,
|
||||
}
|
||||
}
|
||||
|
||||
fun mergeFrom(other: ItemDescriptor, simulate: Boolean) {
|
||||
fun mergeFrom(other: ItemStack, simulate: Boolean) {
|
||||
if (isStackable(other)) {
|
||||
val newCount = (count + other.count).coerceAtMost(item!!.value.maxStack)
|
||||
val diff = newCount - count
|
||||
@ -66,7 +66,7 @@ class ItemDescriptor private constructor(item: RegistryObject<IItemDefinition>?,
|
||||
}
|
||||
|
||||
fun lenientEquals(other: Any?): Boolean {
|
||||
if (other !is ItemDescriptor)
|
||||
if (other !is ItemStack)
|
||||
return false
|
||||
|
||||
if (isEmpty)
|
||||
@ -75,12 +75,12 @@ class ItemDescriptor private constructor(item: RegistryObject<IItemDefinition>?,
|
||||
return other.count == count && other.item == item
|
||||
}
|
||||
|
||||
fun isStackable(other: ItemDescriptor): Boolean {
|
||||
fun isStackable(other: ItemStack): Boolean {
|
||||
return count != 0L && other.count != 0L && item!!.value.maxStack < count && other.item == item && other.parameters == parameters
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (other !is ItemDescriptor)
|
||||
if (other !is ItemStack)
|
||||
return false
|
||||
|
||||
if (isEmpty)
|
||||
@ -101,11 +101,11 @@ class ItemDescriptor private constructor(item: RegistryObject<IItemDefinition>?,
|
||||
return "ItemDescriptor[${item!!.value.itemName}, count = $count, params = $parameters]"
|
||||
}
|
||||
|
||||
fun copy(): ItemDescriptor {
|
||||
fun copy(): ItemStack {
|
||||
if (isEmpty)
|
||||
return this
|
||||
|
||||
return ItemDescriptor(item, count, parameters.deepCopy(), Unit)
|
||||
return ItemStack(item, count, parameters.deepCopy(), Unit)
|
||||
}
|
||||
|
||||
fun toJson(): JsonObject? {
|
||||
@ -120,8 +120,8 @@ class ItemDescriptor private constructor(item: RegistryObject<IItemDefinition>?,
|
||||
}
|
||||
}
|
||||
|
||||
class Adapter(val starbound: Starbound) : TypeAdapter<ItemDescriptor>() {
|
||||
override fun write(out: JsonWriter, value: ItemDescriptor?) {
|
||||
class Adapter(val starbound: Starbound) : TypeAdapter<ItemStack>() {
|
||||
override fun write(out: JsonWriter, value: ItemStack?) {
|
||||
val json = value?.toJson()
|
||||
|
||||
if (json == null)
|
||||
@ -130,7 +130,7 @@ class ItemDescriptor private constructor(item: RegistryObject<IItemDefinition>?,
|
||||
TypeAdapters.JSON_ELEMENT.write(out, json)
|
||||
}
|
||||
|
||||
override fun read(`in`: JsonReader): ItemDescriptor {
|
||||
override fun read(`in`: JsonReader): ItemStack {
|
||||
if (`in`.peek() == JsonToken.NULL)
|
||||
return EMPTY
|
||||
|
||||
@ -140,6 +140,6 @@ class ItemDescriptor private constructor(item: RegistryObject<IItemDefinition>?,
|
||||
|
||||
companion object {
|
||||
@JvmField
|
||||
val EMPTY = ItemDescriptor(null, 0L, JsonObject(), Unit)
|
||||
val EMPTY = ItemStack(null, 0L, JsonObject(), Unit)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user