diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt index f6739dbc..63b6d093 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt @@ -463,6 +463,12 @@ class Starbound : ISBFileLocator { 1 } + state.setTableFunction("itemType", this) { args -> + val name = args.getString() + args.lua.push(items[name]?.value?.itemType ?: throw NoSuchElementException("No such item $name")) + 1 + } + state.pop() state.load(polyfill, "@starbound.jar!/scripts/polyfill.lua") diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ArmorItemPrototype.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ArmorItemPrototype.kt index 8a202042..d353e11d 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ArmorItemPrototype.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ArmorItemPrototype.kt @@ -7,14 +7,14 @@ import ru.dbotthepony.kstarbound.io.json.builder.JsonIgnoreProperty @JsonBuilder abstract class ArmorItemPrototype : ItemPrototype(), IArmorItemDefinition { - override var colorOptions: ImmutableList> by NotNull(ImmutableList.of()) - override var maleFrames: IArmorItemDefinition.Frames by NotNull() - override var femaleFrames: IArmorItemDefinition.Frames by NotNull() - override var level: Double by NotNull(1.0) - override var leveledStatusEffects: ImmutableList by NotNull(ImmutableList.of()) + final override var colorOptions: ImmutableList> by NotNull(ImmutableList.of()) + final override var maleFrames: IArmorItemDefinition.Frames by NotNull() + final override var femaleFrames: IArmorItemDefinition.Frames by NotNull() + final override var level: Double by NotNull(1.0) + final override var leveledStatusEffects: ImmutableList by NotNull(ImmutableList.of()) - override var scripts: ImmutableList by NotNull(ImmutableList.of()) - override var scriptDelta: Int by NotNull(1) + final override var scripts: ImmutableList by NotNull(ImmutableList.of()) + final override var scriptDelta: Int by NotNull(1) init { maxStack = 1L @@ -22,13 +22,25 @@ abstract class ArmorItemPrototype : ItemPrototype(), IArmorItemDefinition { } @JsonBuilder -class HeadArmorItemPrototype : ArmorItemPrototype() +class HeadArmorItemPrototype : ArmorItemPrototype() { + override val itemType: String + get() = "headarmor" +} @JsonBuilder -class ChestArmorItemPrototype : ArmorItemPrototype() +class ChestArmorItemPrototype : ArmorItemPrototype() { + override val itemType: String + get() = "chestarmor" +} @JsonBuilder -class LegsArmorItemPrototype : ArmorItemPrototype() +class LegsArmorItemPrototype : ArmorItemPrototype() { + override val itemType: String + get() = "legsarmor" +} @JsonBuilder -class BackArmorItemPrototype : ArmorItemPrototype() +class BackArmorItemPrototype : ArmorItemPrototype() { + override val itemType: String + get() = "backarmor" +} diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ICurrencyItemDefinition.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ICurrencyItemDefinition.kt index f519030a..6574bd82 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ICurrencyItemDefinition.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ICurrencyItemDefinition.kt @@ -10,4 +10,7 @@ interface ICurrencyItemDefinition : IItemDefinition { * Ценность одного предмета в [currency] */ val value: Long + + override val itemType: String + get() = "currency" } diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/IItemDefinition.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/IItemDefinition.kt index b8a46eb3..305a85e7 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/IItemDefinition.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/IItemDefinition.kt @@ -109,4 +109,10 @@ interface IItemDefinition : IThingWithDescription { * Количество предметов ниже или равному данному значению (но не меньше [smallStackLimit]) проиграет звук [pickupSoundsMedium] */ val mediumStackLimit: Long? + + /** + * Тип предмета, используется Lua скриптами + */ + val itemType: String + get() = "item" } diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ILiquidItem.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ILiquidItem.kt index 12bcade2..d927f0a8 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ILiquidItem.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ILiquidItem.kt @@ -7,4 +7,7 @@ interface ILiquidItem : IItemDefinition { * То, какую жидкость из себя представляет данный предмет */ val liquid: Either + + override val itemType: String + get() = "liquid" } diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/IMaterialItem.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/IMaterialItem.kt index 0bbf74a6..3c56c6e2 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/IMaterialItem.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/IMaterialItem.kt @@ -7,4 +7,7 @@ interface IMaterialItem : IItemDefinition { * То, какой материал (блок) из себя представляет данный предмет */ val material: Either + + override val itemType: String + get() = "material" }