48 lines
1.7 KiB
Kotlin
48 lines
1.7 KiB
Kotlin
package ru.dbotthepony.kstarbound.defs
|
|
|
|
import com.google.gson.JsonElement
|
|
import com.google.gson.JsonNull
|
|
import ru.dbotthepony.kstarbound.json.builder.IStringSerializable
|
|
import ru.dbotthepony.kstarbound.json.readJsonElement
|
|
import ru.dbotthepony.kstarbound.json.writeJsonElement
|
|
import java.io.DataInputStream
|
|
import java.io.DataOutputStream
|
|
|
|
data class InteractAction(val type: Type = Type.NONE, val entityID: Int = 0, val data: JsonElement = JsonNull.INSTANCE) {
|
|
// int32_t
|
|
enum class Type(override val jsonName: String) : IStringSerializable {
|
|
NONE("None"),
|
|
OPEN_CONTAINER("OpenContainer"),
|
|
SIT_DOWN("SitDown"),
|
|
OPEN_CRAFTING_INTERFACE("OpenCraftingInterface"),
|
|
OPEN_SONGBOOK_INTERFACE("OpenSongbookInterface"),
|
|
OPEN_NPC_CRAFTING_INTERFACE("OpenNpcCraftingInterface"),
|
|
OPEN_MERCHANT_INTERFACE("OpenMerchantInterface"),
|
|
OPEN_AI_INTERFACE("OpenAiInterface"),
|
|
OPEN_TELEPORT_DIALOG("OpenTeleportDialog"),
|
|
SHOW_POPUP("ShowPopup"),
|
|
SCRIPT_PANE("ScriptPane"),
|
|
MESSAGE("Message");
|
|
}
|
|
|
|
constructor(type: String, entityID: Int = 0, data: JsonElement = JsonNull.INSTANCE) : this(
|
|
Type.entries.firstOrNull { it.jsonName == type } ?: throw NoSuchElementException("No such interaction action $type!"), entityID, data
|
|
)
|
|
|
|
constructor(stream: DataInputStream, isLegacy: Boolean) : this(
|
|
if (isLegacy) Type.entries[stream.readInt()] else Type.entries[stream.readUnsignedByte()],
|
|
stream.readInt(),
|
|
stream.readJsonElement()
|
|
)
|
|
|
|
fun write(stream: DataOutputStream, isLegacy: Boolean) {
|
|
if (isLegacy) stream.writeInt(type.ordinal) else stream.writeByte(type.ordinal)
|
|
stream.writeInt(entityID)
|
|
stream.writeJsonElement(data)
|
|
}
|
|
|
|
companion object {
|
|
val NONE = InteractAction()
|
|
}
|
|
}
|