aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-06-18 00:35:51 +0200
committerLinnea Gräf <nea@nea.moe>2025-06-18 00:35:51 +0200
commit4a29d86e477c41327bc97f75c332e37e3dae9bbe (patch)
tree2b9b61bad629f160d974b8fbccb6fce21972cd8d
parent4b9e966ca7e8a9291f307850f715820e122d69fd (diff)
downloadFirmament-4a29d86e477c41327bc97f75c332e37e3dae9bbe.tar.gz
Firmament-4a29d86e477c41327bc97f75c332e37e3dae9bbe.tar.bz2
Firmament-4a29d86e477c41327bc97f75c332e37e3dae9bbe.zip
feat: Add 1.8.9 item exporter
-rw-r--r--src/main/kotlin/Firmament.kt13
-rw-r--r--src/main/kotlin/features/debug/PowerUserTools.kt10
-rw-r--r--src/main/kotlin/features/debug/itemeditor/ItemExporter.kt246
-rw-r--r--src/main/kotlin/features/debug/itemeditor/LegacyItemData.kt73
-rw-r--r--src/main/kotlin/util/LegacyTagWriter.kt103
-rw-r--r--src/main/kotlin/util/SkyblockId.kt2
-rw-r--r--src/main/kotlin/util/json/KJsonUtils.kt11
-rw-r--r--src/main/kotlin/util/mc/NbtUtil.kt10
-rw-r--r--src/main/kotlin/util/mc/SNbtFormatter.kt7
-rw-r--r--src/main/kotlin/util/textutil.kt41
-rw-r--r--src/main/resources/legacy_data/enchantments.json560
-rw-r--r--src/main/resources/legacy_data/items.json3733
12 files changed, 4796 insertions, 13 deletions
diff --git a/src/main/kotlin/Firmament.kt b/src/main/kotlin/Firmament.kt
index 7bc7d44..e89fc99 100644
--- a/src/main/kotlin/Firmament.kt
+++ b/src/main/kotlin/Firmament.kt
@@ -26,7 +26,6 @@ import net.fabricmc.loader.api.Version
import net.fabricmc.loader.api.metadata.ModMetadata
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.Logger
-import org.spongepowered.asm.launch.MixinBootstrap
import kotlinx.coroutines.CoroutineName
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
@@ -74,10 +73,22 @@ object Firmament {
allowTrailingComma = true
ignoreUnknownKeys = true
encodeDefaults = true
+ prettyPrintIndent = "\t"
+ }
+
+ /**
+ * FUCK two space indentation
+ */
+ val twoSpaceJson = Json(from = json) {
+ prettyPrintIndent = " "
}
val gson = Gson()
val tightJson = Json(from = json) {
prettyPrint = false
+ // Reset pretty print indent back to default to prevent getting yelled at by json
+ prettyPrintIndent = " "
+ encodeDefaults = false
+ explicitNulls = false
}
diff --git a/src/main/kotlin/features/debug/PowerUserTools.kt b/src/main/kotlin/features/debug/PowerUserTools.kt
index 893b176..b29411b 100644
--- a/src/main/kotlin/features/debug/PowerUserTools.kt
+++ b/src/main/kotlin/features/debug/PowerUserTools.kt
@@ -56,6 +56,7 @@ object PowerUserTools : FirmamentFeature {
val copyEntityData by keyBindingWithDefaultUnbound("entity-data")
val copyItemStack by keyBindingWithDefaultUnbound("copy-item-stack")
val copyTitle by keyBindingWithDefaultUnbound("copy-title")
+ val exportItemStackToRepo by keyBindingWithDefaultUnbound("export-item-stack")
}
override val config
@@ -64,14 +65,13 @@ object PowerUserTools : FirmamentFeature {
var lastCopiedStack: Pair<ItemStack, Text>? = null
set(value) {
field = value
- if (value != null) lastCopiedStackViewTime = true
+ if (value != null) lastCopiedStackViewTime = 2
}
- var lastCopiedStackViewTime = false
+ var lastCopiedStackViewTime = 0
@Subscribe
fun resetLastCopiedStack(event: TickEvent) {
- if (!lastCopiedStackViewTime) lastCopiedStack = null
- lastCopiedStackViewTime = false
+ if (lastCopiedStackViewTime-- < 0) lastCopiedStack = null
}
@Subscribe
@@ -232,7 +232,7 @@ object PowerUserTools : FirmamentFeature {
lastCopiedStack = null
return
}
- lastCopiedStackViewTime = true
+ lastCopiedStackViewTime = 0
it.lines.add(text)
}
diff --git a/src/main/kotlin/features/debug/itemeditor/ItemExporter.kt b/src/main/kotlin/features/debug/itemeditor/ItemExporter.kt
new file mode 100644
index 0000000..740648f
--- /dev/null
+++ b/src/main/kotlin/features/debug/itemeditor/ItemExporter.kt
@@ -0,0 +1,246 @@
+package moe.nea.firmament.features.debug.itemeditor
+
+import kotlinx.serialization.json.JsonArray
+import kotlinx.serialization.json.JsonElement
+import kotlinx.serialization.json.buildJsonObject
+import kotlinx.serialization.json.jsonObject
+import kotlinx.serialization.json.jsonPrimitive
+import kotlinx.serialization.json.put
+import kotlin.concurrent.thread
+import kotlin.io.path.createParentDirectories
+import kotlin.io.path.relativeTo
+import kotlin.io.path.writeText
+import net.minecraft.component.DataComponentTypes
+import net.minecraft.item.ItemStack
+import net.minecraft.nbt.NbtCompound
+import net.minecraft.nbt.NbtInt
+import net.minecraft.nbt.NbtString
+import net.minecraft.text.Text
+import net.minecraft.util.Unit
+import moe.nea.firmament.Firmament
+import moe.nea.firmament.annotations.Subscribe
+import moe.nea.firmament.events.ClientStartedEvent
+import moe.nea.firmament.events.HandledScreenKeyPressedEvent
+import moe.nea.firmament.features.debug.PowerUserTools
+import moe.nea.firmament.repo.RepoDownloadManager
+import moe.nea.firmament.util.HypixelPetInfo
+import moe.nea.firmament.util.LegacyTagWriter.Companion.toLegacyString
+import moe.nea.firmament.util.StringUtil.words
+import moe.nea.firmament.util.directLiteralStringContent
+import moe.nea.firmament.util.extraAttributes
+import moe.nea.firmament.util.focusedItemStack
+import moe.nea.firmament.util.getLegacyFormatString
+import moe.nea.firmament.util.json.toJsonArray
+import moe.nea.firmament.util.mc.displayNameAccordingToNbt
+import moe.nea.firmament.util.mc.loreAccordingToNbt
+import moe.nea.firmament.util.mc.toNbtList
+import moe.nea.firmament.util.skyBlockId
+import moe.nea.firmament.util.skyblock.Rarity
+import moe.nea.firmament.util.tr
+import moe.nea.firmament.util.transformEachRecursively
+import moe.nea.firmament.util.unformattedString
+
+class ItemExporter(var itemStack: ItemStack) {
+ var lore = itemStack.loreAccordingToNbt
+ var name = itemStack.displayNameAccordingToNbt
+ val extraAttribs = itemStack.extraAttributes.copy()
+ val legacyNbt = NbtCompound()
+ val warnings = mutableListOf<String>()
+
+ fun preprocess() {
+ // TODO: split up preprocess steps into preprocess actions that can be toggled in a ui
+ extraAttribs.remove("timestamp")
+ extraAttribs.remove("uuid")
+ extraAttribs.remove("modifier")
+ extraAttribs.getString("petInfo").ifPresent { petInfoJson ->
+ var petInfo = Firmament.json.decodeFromString<HypixelPetInfo>(petInfoJson)
+ petInfo = petInfo.copy(candyUsed = 0, heldItem = null, exp = 0.0, active = null, uuid = null)
+ extraAttribs.putString("petInfo", Firmament.tightJson.encodeToString(petInfo))
+ }
+ itemStack.skyBlockId?.let {
+ extraAttribs.putString("id", it.neuItem)
+ }
+ trimLore()
+ }
+
+ fun trimLore() {
+ val rarityIdx = lore.indexOfLast {
+ val firstWordInLine = it.unformattedString.words().filter { it.length > 2 }.firstOrNull()
+ firstWordInLine?.let(Rarity::fromString) != null
+ }
+ if (rarityIdx >= 0) {
+ lore = lore.subList(0, rarityIdx + 1)
+ }
+ deleteLineUntilNextSpace { it.startsWith("Held Item: ") }
+ deleteLineUntilNextSpace { it.startsWith("Progress to Level ") }
+ deleteLineUntilNextSpace { it.startsWith("MAX LEVEL") }
+ collapseWhitespaces()
+
+ name = name.transformEachRecursively {
+ var string = it.directLiteralStringContent ?: return@transformEachRecursively it
+ string = string.replace("Lvl \\d+".toRegex(), "Lvl {LVL}")
+ Text.literal(string).setStyle(it.style)
+ }
+ }
+
+ fun collapseWhitespaces() {
+ lore = (listOf(null as Text?) + lore).zipWithNext()
+ .filter { !it.first?.unformattedString.isNullOrBlank() || !it.second?.unformattedString.isNullOrBlank() }
+ .map { it.second!! }
+ }
+
+ fun deleteLineUntilNextSpace(search: (String) -> Boolean) {
+ val idx = lore.indexOfFirst { search(it.unformattedString) }
+ if (idx < 0) return
+ val l = lore.toMutableList()
+ val p = l.subList(idx, l.size)
+ val nextBlank = p.indexOfFirst { it.unformattedString.isEmpty() }
+ if (nextBlank < 0)
+ p.clear()
+ else
+ p.subList(0, nextBlank).clear()
+ lore = l
+ }
+
+ fun processNbt() {
+ // TODO: calculate hideflags
+ legacyNbt.put("HideFlags", NbtInt.of(254))
+ copyUnbreakable()
+ copyExtraAttributes()
+ copyLegacySkullNbt()
+ copyDisplay()
+ copyEnchantments()
+ copyEnchantGlint()
+ // TODO: copyDisplay
+ }
+
+ private fun copyDisplay() {
+ legacyNbt.put("display", NbtCompound().apply {
+ put("Lore", lore.map { NbtString.of(it.getLegacyFormatString(trimmed = true)) }.toNbtList())
+ putString("Name", name.getLegacyFormatString(trimmed = true))
+ })
+ }
+
+ fun exportJson(): JsonElement {
+ preprocess()
+ processNbt()
+ return buildJsonObject {
+ val (itemId, damage) = legacyifyItemStack()
+ put("itemid", itemId)
+ put("displayname", name.getLegacyFormatString(trimmed = true))
+ put("nbttag", legacyNbt.toLegacyString())
+ put("damage", damage)
+ put("lore", lore.map { it.getLegacyFormatString(trimmed = true) }.toJsonArray())
+ val sbId = itemStack.skyBlockId
+ if (sbId == null)
+ warnings.add("Could not find skyblock id")
+ put("internalname", sbId?.neuItem)
+ put("clickcommand", "")
+ put("crafttext", "")
+ put("modver", "Firmament ${Firmament.version.friendlyString}")
+ put("infoType", "")
+ put("info", JsonArray(listOf()))
+ }
+
+ }
+
+ companion object {
+ @Subscribe
+ fun load(event: ClientStartedEvent) {
+ thread(start = true, name = "ItemExporter Meta Load Thread") {
+ LegacyItemData.itemLut
+ }
+ }
+
+ @Subscribe
+ fun onKeyBind(event: HandledScreenKeyPressedEvent) {
+ if (event.matches(PowerUserTools.TConfig.exportItemStackToRepo)) {
+ val itemStack = event.screen.focusedItemStack ?: return
+ val exporter = ItemExporter(itemStack)
+ val json = exporter.exportJson()
+ val jsonFormatted = Firmament.twoSpaceJson.encodeToString(json)
+ val itemFile = RepoDownloadManager.repoSavedLocation.resolve("items")
+ .resolve("${json.jsonObject["internalname"]!!.jsonPrimitive.content}.json")
+ itemFile.createParentDirectories()
+ itemFile.writeText(jsonFormatted)
+ PowerUserTools.lastCopiedStack = Pair(
+ itemStack,
+ tr(
+ "firmament.repoexport.success",
+ "Exported item to ${itemFile.relativeTo(RepoDownloadManager.repoSavedLocation)}${
+ exporter.warnings.joinToString(
+ ""
+ ) { "\nWarning: $it" }
+ }"
+ )
+ )
+ }
+ }
+ }
+
+ fun copyEnchantGlint() {
+ if (itemStack.get(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE) == true) {
+ val ench = legacyNbt.getListOrEmpty("ench")
+ legacyNbt.put("ench", ench)
+ }
+ }
+
+ private fun copyUnbreakable() {
+ if (itemStack.get(DataComponentTypes.UNBREAKABLE) == Unit.INSTANCE) {
+ legacyNbt.putBoolean("Unbreakable", true)
+ }
+ }
+
+ fun copyEnchantments() {
+ val enchantments = itemStack.get(DataComponentTypes.ENCHANTMENTS)?.takeIf { !it.isEmpty } ?: return
+ val enchTag = legacyNbt.getListOrEmpty("ench")
+ legacyNbt.put("ench", enchTag)
+ enchantments.enchantmentEntries.forEach { entry ->
+ val id = entry.key.key.get().value
+ val legacyId = LegacyItemData.enchantmentLut[id]
+ if (legacyId == null) {
+ warnings.add("Could not find legacy enchantment id for ${id}")
+ return@forEach
+ }
+ enchTag.add(NbtCompound().apply {
+ putShort("lvl", entry.intValue.toShort())
+ putShort(
+ "id",
+ legacyId.id.toShort()
+ )
+ })
+ }
+ }
+
+ fun copyExtraAttributes() {
+ legacyNbt.put("ExtraAttributes", extraAttribs)
+ }
+
+ fun copyLegacySkullNbt() {
+ val profile = itemStack.get(DataComponentTypes.PROFILE) ?: return
+ legacyNbt.put("SkullOwner", NbtCompound().apply {
+ profile.id.ifPresent {
+ putString("Id", it.toString())
+ }
+ putBoolean("hypixelPopulated", true)
+ put("Properties", NbtCompound().apply {
+ profile.properties().forEach { prop, value ->
+ val list = getListOrEmpty(prop)
+ put(prop, list)
+ list.add(NbtCompound().apply {
+ value.signature?.let {
+ putString("Signature", it)
+ }
+ putString("Value", value.value)
+ putString("Name", value.name)
+ })
+ }
+ })
+ })
+ }
+
+ fun legacyifyItemStack(): LegacyItemData.LegacyItemType {
+ // TODO: add a default here
+ return LegacyItemData.itemLut[itemStack.item]!!
+ }
+}
diff --git a/src/main/kotlin/features/debug/itemeditor/LegacyItemData.kt b/src/main/kotlin/features/debug/itemeditor/LegacyItemData.kt
new file mode 100644
index 0000000..2332e2d
--- /dev/null
+++ b/src/main/kotlin/features/debug/itemeditor/LegacyItemData.kt
@@ -0,0 +1,73 @@
+package moe.nea.firmament.features.debug.itemeditor
+
+import kotlinx.serialization.Serializable
+import kotlin.jvm.optionals.getOrNull
+import net.minecraft.item.ItemStack
+import net.minecraft.nbt.NbtCompound
+import net.minecraft.util.Identifier
+import moe.nea.firmament.Firmament
+import moe.nea.firmament.repo.ItemCache
+import moe.nea.firmament.util.MC
+
+/**
+ * Load data based on [prismarine.js' 1.8 item data](https://github.com/PrismarineJS/minecraft-data/blob/master/data/pc/1.8/items.json)
+ */
+object LegacyItemData {
+ @Serializable
+ data class ItemData(
+ val id: Int,
+ val name: String,
+ val displayName: String,
+ val stackSize: Int,
+ val variations: List<Variation> = listOf()
+ ) {
+ val properId = if (name.contains(":")) name else "minecraft:$name"
+
+ fun allVariants() =
+ variations.map { LegacyItemType(properId, it.metadata.toShort()) } + LegacyItemType(properId, 0)
+ }
+
+ @Serializable
+ data class Variation(
+ val metadata: Int, val displayName: String
+ )
+
+ data class LegacyItemType(
+ val name: String,
+ val metadata: Short
+ ) {
+ override fun toString(): String {
+ return "$name:$metadata"
+ }
+ }
+
+ @Serializable
+ data class EnchantmentData(
+ val id: Int,
+ val name: String,
+ val displayName: String,
+ )
+
+ inline fun <reified T : Any> getLegacyData(name: String) =
+ Firmament.tryDecodeJsonFromStream<T>(
+ LegacyItemData::class.java.getResourceAsStream("/legacy_data/$name.json")!!
+ ).getOrThrow()
+
+ val enchantmentData = getLegacyData<List<EnchantmentData>>("enchantments")
+ val enchantmentLut = enchantmentData.associateBy { Identifier.ofVanilla(it.name) }
+
+ val itemDat = getLegacyData<List<ItemData>>("items")
+ val itemLut = itemDat.flatMap { item ->
+ item.allVariants().map { legacyItemType ->
+ val nbt = ItemCache.convert189ToModern(NbtCompound().apply {
+ putString("id", legacyItemType.name)
+ putByte("Count", 1)
+ putShort("Damage", legacyItemType.metadata)
+ })!!
+ val stack = ItemStack.fromNbt(MC.defaultRegistries, nbt).getOrNull()
+ ?: error("Could not transform ${legacyItemType}")
+ stack.item to legacyItemType
+ }
+ }.toMap()
+
+}
diff --git a/src/main/kotlin/util/LegacyTagWriter.kt b/src/main/kotlin/util/LegacyTagWriter.kt
new file mode 100644
index 0000000..9889b2c
--- /dev/null
+++ b/src/main/kotlin/util/LegacyTagWriter.kt
@@ -0,0 +1,103 @@
+package moe.nea.firmament.util
+
+import kotlinx.serialization.json.JsonPrimitive
+import net.minecraft.nbt.AbstractNbtList
+import net.minecraft.nbt.NbtByte
+import net.minecraft.nbt.NbtCompound
+import net.minecraft.nbt.NbtDouble
+import net.minecraft.nbt.NbtElement
+import net.minecraft.nbt.NbtEnd
+import net.minecraft.nbt.NbtFloat
+import net.minecraft.nbt.NbtInt
+import net.minecraft.nbt.NbtLong
+import net.minecraft.nbt.NbtShort
+import net.minecraft.nbt.NbtString
+import moe.nea.firmament.util.mc.SNbtFormatter.Companion.SIMPLE_NAME
+
+class LegacyTagWriter(val compact: Boolean) {
+ companion object {
+ fun stringify(nbt: NbtElement, compact: Boolean): String {
+ return LegacyTagWriter(compact).also { it.writeElement(nbt) }
+ .stringWriter.toString()
+ }
+
+ fun NbtElement.toLegacyString(pretty: Boolean = false): String {
+ return stringify(this, !pretty)
+ }
+ }
+
+ val stringWriter = StringBuilder()
+ var indent = 0
+ fun newLine() {
+ if (compact) return
+ stringWriter.append('\n')
+ repeat(indent) {
+ stringWriter.append(" ")
+ }
+ }
+
+ fun writeElement(nbt: NbtElement) {
+ when (nbt) {
+ is NbtInt -> stringWriter.append(nbt.value.toString())
+ is NbtString -> stringWriter.append(escapeString(nbt.value))
+ is NbtFloat -> stringWriter.append(nbt.value).append('F')
+ is NbtDouble -> stringWriter.append(nbt.value).append('D')
+ is NbtByte -> stringWriter.append(nbt.value).append('B')
+ is NbtLong -> stringWriter.append(nbt.value).append('L')
+ is NbtShort -> stringWriter.append(nbt.value).append('S')
+ is NbtCompound -> writeCompound(nbt)
+ is NbtEnd -> {}
+ is AbstractNbtList -> writeArray(nbt)
+ }
+ }
+
+ fun writeArray(nbt: AbstractNbtList) {
+ stringWriter.append('[')
+ indent++
+ newLine()
+ nbt.forEachIndexed { index, element ->
+ writeName(index.toString())
+ writeElement(element)
+ if (index != nbt.size() - 1) {
+ stringWriter.append(',')
+ newLine()
+ }
+ }
+ indent--
+ if (nbt.size() != 0)
+ newLine()
+ stringWriter.append(']')
+ }
+
+ fun writeCompound(nbt: NbtCompound) {
+ stringWriter.append('{')
+ indent++
+ newLine()
+ val entries = nbt.entrySet().sortedBy { it.key }
+ entries.forEachIndexed { index, it ->
+ writeName(it.key)
+ writeElement(it.value)
+ if (index != entries.lastIndex) {
+ stringWriter.append(',')
+ newLine()
+ }
+ }
+ indent--
+ if (nbt.size != 0)
+ newLine()
+ stringWriter.append('}')
+ }
+
+ fun escapeString(string: String): String {
+ return JsonPrimitive(string).toString()
+ }
+
+ fun escapeName(key: String): String =
+ if (key.matches(SIMPLE_NAME)) key else escapeString(key)
+
+ fun writeName(key: String) {
+ stringWriter.append(escapeName(key))
+ stringWriter.append(':')
+ if (!compact) stringWriter.append(' ')
+ }
+}
diff --git a/src/main/kotlin/util/SkyblockId.kt b/src/main/kotlin/util/SkyblockId.kt
index a2c586a..58aa24c 100644
--- a/src/main/kotlin/util/SkyblockId.kt
+++ b/src/main/kotlin/util/SkyblockId.kt
@@ -104,7 +104,7 @@ data class HypixelPetInfo(
val exp: Double = 0.0,
val candyUsed: Int = 0,
val uuid: UUID? = null,
- val active: Boolean = false,
+ val active: Boolean? = false,
val heldItem: String? = null,
) {
val skyblockId get() = SkyblockId("${type.uppercase()};${tier.ordinal}") // TODO: is this ordinal set up correctly?
diff --git a/src/main/kotlin/util/json/KJsonUtils.kt b/src/main/kotlin/util/json/KJsonUtils.kt
new file mode 100644
index 0000000..b15119b
--- /dev/null
+++ b/src/main/kotlin/util/json/KJsonUtils.kt
@@ -0,0 +1,11 @@
+package moe.nea.firmament.util.json
+
+import kotlinx.serialization.json.JsonArray
+import kotlinx.serialization.json.JsonElement
+import kotlinx.serialization.json.JsonPrimitive
+
+fun <T : JsonElement> List<T>.asJsonArray(): JsonArray {
+ return JsonArray(this)
+}
+
+fun Iterable<String>.toJsonArray(): JsonArray = map { JsonPrimitive(it) }.asJsonArray()
diff --git a/src/main/kotlin/util/mc/NbtUtil.kt b/src/main/kotlin/util/mc/NbtUtil.kt
new file mode 100644
index 0000000..cc98142
--- /dev/null
+++ b/src/main/kotlin/util/mc/NbtUtil.kt
@@ -0,0 +1,10 @@
+package moe.nea.firmament.util.mc
+
+import net.minecraft.nbt.NbtElement
+import net.minecraft.nbt.NbtList
+
+fun Iterable<NbtElement>.toNbtList() = NbtList().also {
+ for(element in this) {
+ it.add(element)
+ }
+}
diff --git a/src/main/kotlin/util/mc/SNbtFormatter.kt b/src/main/kotlin/util/mc/SNbtFormatter.kt
index e2c24f6..7617d17 100644
--- a/src/main/kotlin/util/mc/SNbtFormatter.kt
+++ b/src/main/kotlin/util/mc/SNbtFormatter.kt
@@ -110,7 +110,7 @@ class SNbtFormatter private constructor() : NbtElementVisitor {
keys.forEachIndexed { index, key ->
writeIndent()
val element = compound[key] ?: error("Key '$key' found but not present in compound: $compound")
- val escapedName = if (key.matches(SIMPLE_NAME)) key else NbtString.escape(key)
+ val escapedName = escapeName(key)
result.append(escapedName).append(": ")
element.accept(this)
if (keys.size != index + 1) {
@@ -134,6 +134,9 @@ class SNbtFormatter private constructor() : NbtElementVisitor {
fun NbtElement.toPrettyString() = prettify(this)
- private val SIMPLE_NAME = "[A-Za-z0-9._+-]+".toRegex()
+ fun escapeName(key: String): String =
+ if (key.matches(SIMPLE_NAME)) key else NbtString.escape(key)
+
+ val SIMPLE_NAME = "[A-Za-z0-9._+-]+".toRegex()
}
}
diff --git a/src/main/kotlin/util/textutil.kt b/src/main/kotlin/util/textutil.kt
index 2458891..cfda2e9 100644
--- a/src/main/kotlin/util/textutil.kt
+++ b/src/main/kotlin/util/textutil.kt
@@ -56,6 +56,7 @@ fun OrderedText.reconstitute(): MutableText {
return base
}
+
fun StringVisitable.reconstitute(): MutableText {
val base = Text.literal("")
base.setStyle(Style.EMPTY.withItalic(false))
@@ -82,15 +83,47 @@ val Text.unformattedString: String
val Text.directLiteralStringContent: String? get() = (this.content as? PlainTextContent)?.string()
-fun Text.getLegacyFormatString() =
+fun Text.getLegacyFormatString(trimmed: Boolean = false): String =
run {
+ var lastCode = "§r"
val sb = StringBuilder()
+ fun appendCode(code: String) {
+ if (code != lastCode || !trimmed) {
+ sb.append(code)
+ lastCode = code
+ }
+ }
for (component in iterator()) {
- sb.append(component.style.color?.toChatFormatting()?.toString() ?: "§r")
+ if (component.directLiteralStringContent.isNullOrEmpty() && component.siblings.isEmpty()) {
+ continue
+ }
+ appendCode(component.style.let { style ->
+ var color = style.color?.toChatFormatting()?.toString() ?: "§r"
+ if (style.isBold)
+ color += LegacyFormattingCode.BOLD.formattingCode
+ if (style.isItalic)
+ color += LegacyFormattingCode.ITALIC.formattingCode
+ if (style.isUnderlined)
+ color += LegacyFormattingCode.UNDERLINE.formattingCode
+ if (style.isObfuscated)
+ color += LegacyFormattingCode.OBFUSCATED.formattingCode
+ if (style.isStrikethrough)
+ color += LegacyFormattingCode.STRIKETHROUGH.formattingCode
+ color
+ })
sb.append(component.directLiteralStringContent)
- sb.append("§r")
+ if (!trimmed)
+ appendCode("§r")
}
sb.toString()
+ }.also {
+ var it = it
+ if (trimmed) {
+ it = it.removeSuffix("§r")
+ if (it.length == 2 && it.startsWith("§"))
+ it = ""
+ }
+ it
}
private val textColorLUT = Formatting.entries
@@ -127,7 +160,7 @@ fun MutableText.darkGrey() = withColor(Formatting.DARK_GRAY)
fun MutableText.red() = withColor(Formatting.RED)
fun MutableText.white() = withColor(Formatting.WHITE)
fun MutableText.bold(): MutableText = styled { it.withBold(true) }
-fun MutableText.hover(text: Text): MutableText = styled {it.withHoverEvent(HoverEvent.ShowText(text))}
+fun MutableText.hover(text: Text): MutableText = styled { it.withHoverEvent(HoverEvent.ShowText(text)) }
fun MutableText.clickCommand(command: String): MutableText {
diff --git a/src/main/resources/legacy_data/enchantments.json b/src/main/resources/legacy_data/enchantments.json
new file mode 100644
index 0000000..8eeaa6e
--- /dev/null
+++ b/src/main/resources/legacy_data/enchantments.json
@@ -0,0 +1,560 @@
+[
+ {
+ "id": 0,
+ "name": "protection",
+ "displayName": "Protection",
+ "maxLevel": 4,
+ "minCost": {
+ "a": 11,
+ "b": -10
+ },
+ "maxCost": {
+ "a": 11,
+ "b": 1
+ },
+ "exclude": [
+ "blast_protection",
+ "fire_protection",
+ "projectile_protection"
+ ],
+ "category": "armor",
+ "weight": 10,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 1,
+ "name": "fire_protection",
+ "displayName": "Fire Protection",
+ "maxLevel": 4,
+ "minCost": {
+ "a": 8,
+ "b": 2
+ },
+ "maxCost": {
+ "a": 8,
+ "b": 10
+ },
+ "exclude": [
+ "blast_protection",
+ "protection",
+ "projectile_protection"
+ ],
+ "category": "armor",
+ "weight": 5,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 2,
+ "name": "feather_falling",
+ "displayName": "Feather Falling",
+ "maxLevel": 4,
+ "minCost": {
+ "a": 6,
+ "b": -1
+ },
+ "maxCost": {
+ "a": 6,
+ "b": 5
+ },
+ "exclude": [],
+ "category": "armor_feet",
+ "weight": 5,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 3,
+ "name": "blast_protection",
+ "displayName": "Blast Protection",
+ "maxLevel": 4,
+ "minCost": {
+ "a": 8,
+ "b": -3
+ },
+ "maxCost": {
+ "a": 8,
+ "b": 5
+ },
+ "exclude": [
+ "fire_protection",
+ "protection",
+ "projectile_protection"
+ ],
+ "category": "armor",
+ "weight": 2,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 4,
+ "name": "projectile_protection",
+ "displayName": "Projectile Protection",
+ "maxLevel": 4,
+ "minCost": {
+ "a": 6,
+ "b": -3
+ },
+ "maxCost": {
+ "a": 6,
+ "b": 3
+ },
+ "exclude": [
+ "protection",
+ "blast_protection",
+ "fire_protection"
+ ],
+ "category": "armor",
+ "weight": 5,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 5,
+ "name": "respiration",
+ "displayName": "Respiration",
+ "maxLevel": 3,
+ "minCost": {
+ "a": 10,
+ "b": 0
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 30
+ },
+ "exclude": [],
+ "category": "armor_head",
+ "weight": 2,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 6,
+ "name": "aqua_affinity",
+ "displayName": "Aqua Affinity",
+ "maxLevel": 1,
+ "minCost": {
+ "a": 0,
+ "b": 1
+ },
+ "maxCost": {
+ "a": 0,
+ "b": 41
+ },
+ "exclude": [],
+ "category": "armor_head",
+ "weight": 2,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 7,
+ "name": "thorns",
+ "displayName": "Thorns",
+ "maxLevel": 3,
+ "minCost": {
+ "a": 20,
+ "b": -10
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 51
+ },
+ "exclude": [],
+ "category": "armor_chest",
+ "weight": 1,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 8,
+ "name": "depth_strider",
+ "displayName": "Depth Strider",
+ "maxLevel": 3,
+ "minCost": {
+ "a": 10,
+ "b": 0
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 15
+ },
+ "exclude": [
+ "frost_walker"
+ ],
+ "category": "armor_feet",
+ "weight": 2,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 16,
+ "name": "sharpness",
+ "displayName": "Sharpness",
+ "maxLevel": 5,
+ "minCost": {
+ "a": 11,
+ "b": -10
+ },
+ "maxCost": {
+ "a": 11,
+ "b": 10
+ },
+ "exclude": [
+ "smite",
+ "bane_of_arthropods"
+ ],
+ "category": "weapon",
+ "weight": 10,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 17,
+ "name": "smite",
+ "displayName": "Smite",
+ "maxLevel": 5,
+ "minCost": {
+ "a": 8,
+ "b": -3
+ },
+ "maxCost": {
+ "a": 8,
+ "b": 17
+ },
+ "exclude": [
+ "sharpness",
+ "bane_of_arthropods"
+ ],
+ "category": "weapon",
+ "weight": 5,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 18,
+ "name": "bane_of_arthropods",
+ "displayName": "Bane of Arthropods",
+ "maxLevel": 5,
+ "minCost": {
+ "a": 8,
+ "b": -3
+ },
+ "maxCost": {
+ "a": 8,
+ "b": 17
+ },
+ "exclude": [
+ "smite",
+ "sharpness"
+ ],
+ "category": "weapon",
+ "weight": 5,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 19,
+ "name": "knockback",
+ "displayName": "Knockback",
+ "maxLevel": 2,
+ "minCost": {
+ "a": 20,
+ "b": -15
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 51
+ },
+ "exclude": [],
+ "category": "weapon",
+ "weight": 5,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 20,
+ "name": "fire_aspect",
+ "displayName": "Fire Aspect",
+ "maxLevel": 2,
+ "minCost": {
+ "a": 20,
+ "b": -10
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 51
+ },
+ "exclude": [],
+ "category": "weapon",
+ "weight": 2,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 21,
+ "name": "looting",
+ "displayName": "Looting",
+ "maxLevel": 3,
+ "minCost": {
+ "a": 9,
+ "b": 6
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 51
+ },
+ "exclude": [],
+ "category": "weapon",
+ "weight": 2,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 32,
+ "name": "efficiency",
+ "displayName": "Efficiency",
+ "maxLevel": 5,
+ "minCost": {
+ "a": 10,
+ "b": -9
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 51
+ },
+ "exclude": [],
+ "category": "digger",
+ "weight": 10,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 33,
+ "name": "silk_touch",
+ "displayName": "Silk Touch",
+ "maxLevel": 1,
+ "minCost": {
+ "a": 0,
+ "b": 15
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 51
+ },
+ "exclude": [
+ "fortune"
+ ],
+ "category": "digger",
+ "weight": 1,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 34,
+ "name": "unbreaking",
+ "displayName": "Unbreaking",
+ "maxLevel": 3,
+ "minCost": {
+ "a": 8,
+ "b": -3
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 51
+ },
+ "exclude": [],
+ "category": "breakable",
+ "weight": 5,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 35,
+ "name": "fortune",
+ "displayName": "Fortune",
+ "maxLevel": 3,
+ "minCost": {
+ "a": 9,
+ "b": 6
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 51
+ },
+ "exclude": [
+ "silk_touch"
+ ],
+ "category": "digger",
+ "weight": 2,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 48,
+ "name": "power",
+ "displayName": "Power",
+ "maxLevel": 5,
+ "minCost": {
+ "a": 10,
+ "b": -9
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 6
+ },
+ "exclude": [],
+ "category": "bow",
+ "weight": 10,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 49,
+ "name": "punch",
+ "displayName": "Punch",
+ "maxLevel": 2,
+ "minCost": {
+ "a": 20,
+ "b": -8
+ },
+ "maxCost": {
+ "a": 20,
+ "b": 17
+ },
+ "exclude": [],
+ "category": "bow",
+ "weight": 2,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 50,
+ "name": "flame",
+ "displayName": "Flame",
+ "maxLevel": 1,
+ "minCost": {
+ "a": 0,
+ "b": 20
+ },
+ "maxCost": {
+ "a": 0,
+ "b": 50
+ },
+ "exclude": [],
+ "category": "bow",
+ "weight": 2,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 51,
+ "name": "infinity",
+ "displayName": "Infinity",
+ "maxLevel": 1,
+ "minCost": {
+ "a": 0,
+ "b": 20
+ },
+ "maxCost": {
+ "a": 0,
+ "b": 50
+ },
+ "exclude": [
+ "mending"
+ ],
+ "category": "bow",
+ "weight": 1,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 61,
+ "name": "luck_of_the_sea",
+ "displayName": "Luck of the Sea",
+ "maxLevel": 3,
+ "minCost": {
+ "a": 9,
+ "b": 6
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 51
+ },
+ "exclude": [],
+ "category": "fishing_rod",
+ "weight": 2,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ },
+ {
+ "id": 62,
+ "name": "lure",
+ "displayName": "Lure",
+ "maxLevel": 3,
+ "minCost": {
+ "a": 9,
+ "b": 6
+ },
+ "maxCost": {
+ "a": 10,
+ "b": 51
+ },
+ "exclude": [],
+ "category": "fishing_rod",
+ "weight": 2,
+ "treasureOnly": false,
+ "curse": false,
+ "tradeable": true,
+ "discoverable": true
+ }
+]
diff --git a/src/main/resources/legacy_data/items.json b/src/main/resources/legacy_data/items.json
new file mode 100644
index 0000000..a32702c
--- /dev/null
+++ b/src/main/resources/legacy_data/items.json
@@ -0,0 +1,3733 @@
+[
+ {
+ "id": 1,
+ "displayName": "Stone",
+ "name": "stone",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Stone"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Granite"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Polished Granite"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Diorite"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Polished Diorite"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Andesite"
+ },
+ {
+ "metadata": 6,
+ "displayName": "Polished Andesite"
+ }
+ ]
+ },
+ {
+ "id": 2,
+ "displayName": "Grass Block",
+ "name": "grass",
+ "stackSize": 64
+ },
+ {
+ "id": 3,
+ "displayName": "Dirt",
+ "name": "dirt",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Dirt"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Coarse Dirt"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Podzol"
+ }
+ ]
+ },
+ {
+ "id": 4,
+ "displayName": "Cobblestone",
+ "name": "cobblestone",
+ "stackSize": 64
+ },
+ {
+ "id": 5,
+ "displayName": "Wooden Planks",
+ "name": "planks",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Oak Wood Planks"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Spruce Wood Planks"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Birch Wood Planks"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Jungle Wood Planks"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Acacia Wood Planks"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Dark Oak Wood Planks"
+ }
+ ]
+ },
+ {
+ "id": 6,
+ "displayName": "Sapling",
+ "name": "sapling",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Oak Sapling"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Spruce Sapling"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Birch Sapling"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Jungle Sapling"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Acacia Sapling"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Dark Oak Sapling"
+ }
+ ]
+ },
+ {
+ "id": 7,
+ "displayName": "Bedrock",
+ "name": "bedrock",
+ "stackSize": 64
+ },
+ {
+ "id": 12,
+ "displayName": "Sand",
+ "name": "sand",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Sand"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Red Sand"
+ }
+ ]
+ },
+ {
+ "id": 13,
+ "displayName": "Gravel",
+ "name": "gravel",
+ "stackSize": 64
+ },
+ {
+ "id": 14,
+ "displayName": "Gold Ore",
+ "name": "gold_ore",
+ "stackSize": 64
+ },
+ {
+ "id": 15,
+ "displayName": "Iron Ore",
+ "name": "iron_ore",
+ "stackSize": 64
+ },
+ {
+ "id": 16,
+ "displayName": "Coal Ore",
+ "name": "coal_ore",
+ "stackSize": 64
+ },
+ {
+ "id": 17,
+ "displayName": "Wood",
+ "name": "log",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Oak Wood"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Spruce Wood"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Birch Wood"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Jungle Wood"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Acacia Wood"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Dark Oak Wood"
+ }
+ ]
+ },
+ {
+ "id": 18,
+ "displayName": "Leaves",
+ "name": "leaves",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Oak Leaves"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Spruce Leaves"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Birch Leaves"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Jungle Leaves"
+ }
+ ]
+ },
+ {
+ "id": 19,
+ "displayName": "Sponge",
+ "name": "sponge",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Sponge"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Wet Sponge"
+ }
+ ]
+ },
+ {
+ "id": 20,
+ "displayName": "Glass",
+ "name": "glass",
+ "stackSize": 64
+ },
+ {
+ "id": 21,
+ "displayName": "Lapis Lazuli Ore",
+ "name": "lapis_ore",
+ "stackSize": 64
+ },
+ {
+ "id": 22,
+ "displayName": "Lapis Lazuli Block",
+ "name": "lapis_block",
+ "stackSize": 64
+ },
+ {
+ "id": 23,
+ "displayName": "Dispenser",
+ "name": "dispenser",
+ "stackSize": 64
+ },
+ {
+ "id": 24,
+ "displayName": "Sandstone",
+ "name": "sandstone",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Sandstone"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Chiseled Sandstone"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Smooth Sandstone"
+ }
+ ]
+ },
+ {
+ "id": 25,
+ "displayName": "Note Block",
+ "name": "noteblock",
+ "stackSize": 64
+ },
+ {
+ "id": 27,
+ "displayName": "Powered Rail",
+ "name": "golden_rail",
+ "stackSize": 64
+ },
+ {
+ "id": 28,
+ "displayName": "Detector Rail",
+ "name": "detector_rail",
+ "stackSize": 64
+ },
+ {
+ "id": 29,
+ "displayName": "Sticky Piston",
+ "name": "sticky_piston",
+ "stackSize": 64
+ },
+ {
+ "id": 30,
+ "displayName": "Cobweb",
+ "name": "web",
+ "stackSize": 64
+ },
+ {
+ "id": 31,
+ "displayName": "Grass",
+ "name": "tallgrass",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Shrub"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Tall Grass"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Fern"
+ }
+ ]
+ },
+ {
+ "id": 32,
+ "displayName": "Dead Bush",
+ "name": "deadbush",
+ "stackSize": 64
+ },
+ {
+ "id": 33,
+ "displayName": "Piston",
+ "name": "piston",
+ "stackSize": 64
+ },
+ {
+ "id": 35,
+ "displayName": "Wool",
+ "name": "wool",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "White Wool"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Orange Wool"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Magenta Wool"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Light blue Wool"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Yellow Wool"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Lime Wool"
+ },
+ {
+ "metadata": 6,
+ "displayName": "Pink Wool"
+ },
+ {
+ "metadata": 7,
+ "displayName": "Gray Wool"
+ },
+ {
+ "metadata": 8,
+ "displayName": "Light gray Wool"
+ },
+ {
+ "metadata": 9,
+ "displayName": "Cyan Wool"
+ },
+ {
+ "metadata": 10,
+ "displayName": "Purple Wool"
+ },
+ {
+ "metadata": 11,
+ "displayName": "Blue Wool"
+ },
+ {
+ "metadata": 12,
+ "displayName": "Brown Wool"
+ },
+ {
+ "metadata": 13,
+ "displayName": "Green Wool"
+ },
+ {
+ "metadata": 14,
+ "displayName": "Red Wool"
+ },
+ {
+ "metadata": 15,
+ "displayName": "Black Wool"
+ }
+ ]
+ },
+ {
+ "id": 37,
+ "displayName": "Dandelion",
+ "name": "yellow_flower",
+ "stackSize": 64
+ },
+ {
+ "id": 38,
+ "displayName": "Poppy",
+ "name": "red_flower",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Poppy"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Blue Orchid"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Allium"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Azure Bluet"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Red Tulip"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Orange Tulip"
+ },
+ {
+ "metadata": 6,
+ "displayName": "White Tulip"
+ },
+ {
+ "metadata": 7,
+ "displayName": "Pink Tulip"
+ },
+ {
+ "metadata": 8,
+ "displayName": "Oxeye Daisy"
+ }
+ ]
+ },
+ {
+ "id": 39,
+ "displayName": "Brown Mushroom",
+ "name": "brown_mushroom",
+ "stackSize": 64
+ },
+ {
+ "id": 40,
+ "displayName": "Red Mushroom",
+ "name": "red_mushroom",
+ "stackSize": 64
+ },
+ {
+ "id": 41,
+ "displayName": "Block of Gold",
+ "name": "gold_block",
+ "stackSize": 64
+ },
+ {
+ "id": 42,
+ "displayName": "Block of Iron",
+ "name": "iron_block",
+ "stackSize": 64
+ },
+ {
+ "id": 44,
+ "displayName": "Stone Slab",
+ "name": "stone_slab",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Stone Slab"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Sandstone Slab"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Wooden Slab"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Cobblestone Slab"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Bricks Slab"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Stone Bricks Slab"
+ },
+ {
+ "metadata": 6,
+ "displayName": "Nether Brick Slab"
+ },
+ {
+ "metadata": 7,
+ "displayName": "Quartz Slab"
+ }
+ ]
+ },
+ {
+ "id": 45,
+ "displayName": "Brick",
+ "name": "brick_block",
+ "stackSize": 64
+ },
+ {
+ "id": 46,
+ "displayName": "TNT",
+ "name": "tnt",
+ "stackSize": 64
+ },
+ {
+ "id": 47,
+ "displayName": "Bookshelf",
+ "name": "bookshelf",
+ "stackSize": 64
+ },
+ {
+ "id": 48,
+ "displayName": "Moss Stone",
+ "name": "mossy_cobblestone",
+ "stackSize": 64
+ },
+ {
+ "id": 49,
+ "displayName": "Obsidian",
+ "name": "obsidian",
+ "stackSize": 64
+ },
+ {
+ "id": 50,
+ "displayName": "Torch",
+ "name": "torch",
+ "stackSize": 64
+ },
+ {
+ "id": 52,
+ "displayName": "Monster Spawner",
+ "name": "mob_spawner",
+ "stackSize": 64
+ },
+ {
+ "id": 53,
+ "displayName": "Oak Wood Stairs",
+ "name": "oak_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 54,
+ "displayName": "Chest",
+ "name": "chest",
+ "stackSize": 64
+ },
+ {
+ "id": 56,
+ "displayName": "Diamond Ore",
+ "name": "diamond_ore",
+ "stackSize": 64
+ },
+ {
+ "id": 57,
+ "displayName": "Block of Diamond",
+ "name": "diamond_block",
+ "stackSize": 64
+ },
+ {
+ "id": 58,
+ "displayName": "Crafting Table",
+ "name": "crafting_table",
+ "stackSize": 64
+ },
+ {
+ "id": 60,
+ "displayName": "Farmland",
+ "name": "farmland",
+ "stackSize": 64
+ },
+ {
+ "id": 61,
+ "displayName": "Furnace",
+ "name": "furnace",
+ "stackSize": 64
+ },
+ {
+ "id": 65,
+ "displayName": "Ladder",
+ "name": "ladder",
+ "stackSize": 64
+ },
+ {
+ "id": 66,
+ "displayName": "Rail",
+ "name": "rail",
+ "stackSize": 64
+ },
+ {
+ "id": 67,
+ "displayName": "Cobblestone Stairs",
+ "name": "stone_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 69,
+ "displayName": "Lever",
+ "name": "lever",
+ "stackSize": 64
+ },
+ {
+ "id": 70,
+ "displayName": "Stone Pressure Plate",
+ "name": "stone_pressure_plate",
+ "stackSize": 64
+ },
+ {
+ "id": 72,
+ "displayName": "Wooden Pressure Plate",
+ "name": "wooden_pressure_plate",
+ "stackSize": 64
+ },
+ {
+ "id": 73,
+ "displayName": "Redstone Ore",
+ "name": "redstone_ore",
+ "stackSize": 64
+ },
+ {
+ "id": 76,
+ "displayName": "Redstone Torch",
+ "name": "redstone_torch",
+ "stackSize": 64
+ },
+ {
+ "id": 77,
+ "displayName": "Stone Button",
+ "name": "stone_button",
+ "stackSize": 64
+ },
+ {
+ "id": 78,
+ "displayName": "Snow",
+ "name": "snow_layer",
+ "stackSize": 64
+ },
+ {
+ "id": 79,
+ "displayName": "Ice",
+ "name": "ice",
+ "stackSize": 64
+ },
+ {
+ "id": 80,
+ "displayName": "Snow",
+ "name": "snow",
+ "stackSize": 64
+ },
+ {
+ "id": 81,
+ "displayName": "Cactus",
+ "name": "cactus",
+ "stackSize": 64
+ },
+ {
+ "id": 82,
+ "displayName": "Clay",
+ "name": "clay",
+ "stackSize": 64
+ },
+ {
+ "id": 84,
+ "displayName": "Jukebox",
+ "name": "jukebox",
+ "stackSize": 64
+ },
+ {
+ "id": 85,
+ "displayName": "Oak Fence",
+ "name": "fence",
+ "stackSize": 64
+ },
+ {
+ "id": 86,
+ "displayName": "Pumpkin",
+ "name": "pumpkin",
+ "stackSize": 64
+ },
+ {
+ "id": 87,
+ "displayName": "Netherrack",
+ "name": "netherrack",
+ "stackSize": 64
+ },
+ {
+ "id": 88,
+ "displayName": "Soul Sand",
+ "name": "soul_sand",
+ "stackSize": 64
+ },
+ {
+ "id": 89,
+ "displayName": "Glowstone",
+ "name": "glowstone",
+ "stackSize": 64
+ },
+ {
+ "id": 91,
+ "displayName": "Jack o'Lantern",
+ "name": "lit_pumpkin",
+ "stackSize": 64
+ },
+ {
+ "id": 95,
+ "displayName": "Stained Glass",
+ "name": "stained_glass",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "White Stained Glass"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Orange Stained Glass"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Magenta Stained Glass"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Light Blue Stained Glass"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Yellow Stained Glass"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Lime Stained Glass"
+ },
+ {
+ "metadata": 6,
+ "displayName": "Pink Stained Glass"
+ },
+ {
+ "metadata": 7,
+ "displayName": "Gray Stained Glass"
+ },
+ {
+ "metadata": 8,
+ "displayName": "Light Gray Stained Glass"
+ },
+ {
+ "metadata": 9,
+ "displayName": "Cyan Stained Glass"
+ },
+ {
+ "metadata": 10,
+ "displayName": "Purple Stained Glass"
+ },
+ {
+ "metadata": 11,
+ "displayName": "Blue Stained Glass"
+ },
+ {
+ "metadata": 12,
+ "displayName": "Brown Stained Glass"
+ },
+ {
+ "metadata": 13,
+ "displayName": "Green Stained Glass"
+ },
+ {
+ "metadata": 14,
+ "displayName": "Red Stained Glass"
+ },
+ {
+ "metadata": 15,
+ "displayName": "Black Stained Glass"
+ }
+ ]
+ },
+ {
+ "id": 96,
+ "displayName": "Wooden Trapdoor",
+ "name": "trapdoor",
+ "stackSize": 64
+ },
+ {
+ "id": 97,
+ "displayName": "Monster Egg",
+ "name": "monster_egg",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Stone Monster Egg"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Cobblestone Monster Egg"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Stone Brick Monster Egg"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Mossy Stone Brick Monster Egg"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Cracked Stone Brick Monster Egg"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Chiseled Stone Brick Monster Egg"
+ }
+ ]
+ },
+ {
+ "id": 98,
+ "displayName": "Stone Bricks",
+ "name": "stonebrick",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Stone Bricks"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Mossy Stone Bricks"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Cracked Stone Bricks"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Chiseled Stone Bricks"
+ }
+ ]
+ },
+ {
+ "id": 99,
+ "displayName": "Brown Mushroom Block",
+ "name": "brown_mushroom_block",
+ "stackSize": 64
+ },
+ {
+ "id": 100,
+ "displayName": "Red Mushroom Block",
+ "name": "red_mushroom_block",
+ "stackSize": 64
+ },
+ {
+ "id": 101,
+ "displayName": "Iron Bars",
+ "name": "iron_bars",
+ "stackSize": 64
+ },
+ {
+ "id": 102,
+ "displayName": "Glass Pane",
+ "name": "glass_pane",
+ "stackSize": 64
+ },
+ {
+ "id": 103,
+ "displayName": "Melon",
+ "name": "melon_block",
+ "stackSize": 64
+ },
+ {
+ "id": 106,
+ "displayName": "Vines",
+ "name": "vine",
+ "stackSize": 64
+ },
+ {
+ "id": 107,
+ "displayName": "Oak Fence Gate",
+ "name": "fence_gate",
+ "stackSize": 64
+ },
+ {
+ "id": 108,
+ "displayName": "Brick Stairs",
+ "name": "brick_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 109,
+ "displayName": "Stone Brick Stairs",
+ "name": "stone_brick_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 110,
+ "displayName": "Mycelium",
+ "name": "mycelium",
+ "stackSize": 64
+ },
+ {
+ "id": 111,
+ "displayName": "Lily Pad",
+ "name": "waterlily",
+ "stackSize": 64
+ },
+ {
+ "id": 112,
+ "displayName": "Nether Brick",
+ "name": "nether_brick",
+ "stackSize": 64
+ },
+ {
+ "id": 113,
+ "displayName": "Nether Brick Fence",
+ "name": "nether_brick_fence",
+ "stackSize": 64
+ },
+ {
+ "id": 114,
+ "displayName": "Nether Brick Stairs",
+ "name": "nether_brick_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 116,
+ "displayName": "Enchantment Table",
+ "name": "enchanting_table",
+ "stackSize": 64
+ },
+ {
+ "id": 120,
+ "displayName": "End Portal Frame",
+ "name": "end_portal_frame",
+ "stackSize": 64
+ },
+ {
+ "id": 121,
+ "displayName": "End Stone",
+ "name": "end_stone",
+ "stackSize": 64
+ },
+ {
+ "id": 122,
+ "displayName": "Dragon Egg",
+ "name": "dragon_egg",
+ "stackSize": 64
+ },
+ {
+ "id": 123,
+ "displayName": "Redstone Lamp",
+ "name": "redstone_lamp",
+ "stackSize": 64
+ },
+ {
+ "id": 126,
+ "displayName": "Wood Slab",
+ "name": "wooden_slab",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Oak Wood Slab"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Spruce Wood Slab"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Birch Wood Slab"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Jungle Wood Slab"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Acacia Wood Slab"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Dark Oak Wood Slab"
+ }
+ ]
+ },
+ {
+ "id": 128,
+ "displayName": "Sandstone Stairs",
+ "name": "sandstone_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 129,
+ "displayName": "Emerald Ore",
+ "name": "emerald_ore",
+ "stackSize": 64
+ },
+ {
+ "id": 130,
+ "displayName": "Ender Chest",
+ "name": "ender_chest",
+ "stackSize": 64
+ },
+ {
+ "id": 131,
+ "displayName": "Tripwire Hook",
+ "name": "tripwire_hook",
+ "stackSize": 64
+ },
+ {
+ "id": 133,
+ "displayName": "Block of Emerald",
+ "name": "emerald_block",
+ "stackSize": 64
+ },
+ {
+ "id": 134,
+ "displayName": "Spruce Wood Stairs",
+ "name": "spruce_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 135,
+ "displayName": "Birch Wood Stairs",
+ "name": "birch_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 136,
+ "displayName": "Jungle Wood Stairs",
+ "name": "jungle_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 137,
+ "displayName": "Command Block",
+ "name": "command_block",
+ "stackSize": 64
+ },
+ {
+ "id": 138,
+ "displayName": "Beacon",
+ "name": "beacon",
+ "stackSize": 64
+ },
+ {
+ "id": 139,
+ "displayName": "Cobblestone Wall",
+ "name": "cobblestone_wall",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Cobblestone Wall"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Mossy Cobblestone Wall"
+ }
+ ]
+ },
+ {
+ "id": 143,
+ "displayName": "Wooden Button",
+ "name": "wooden_button",
+ "stackSize": 64
+ },
+ {
+ "id": 145,
+ "displayName": "Anvil",
+ "name": "anvil",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Anvil"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Slightly Damaged Anvil"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Very Damaged Anvil"
+ }
+ ]
+ },
+ {
+ "id": 146,
+ "displayName": "Trapped Chest",
+ "name": "trapped_chest",
+ "stackSize": 64
+ },
+ {
+ "id": 147,
+ "displayName": "Weighted Pressure Plate (Light)",
+ "name": "light_weighted_pressure_plate",
+ "stackSize": 64
+ },
+ {
+ "id": 148,
+ "displayName": "Weighted Pressure Plate (Heavy)",
+ "name": "heavy_weighted_pressure_plate",
+ "stackSize": 64
+ },
+ {
+ "id": 151,
+ "displayName": "Daylight Detector",
+ "name": "daylight_detector",
+ "stackSize": 64
+ },
+ {
+ "id": 152,
+ "displayName": "Block of Redstone",
+ "name": "redstone_block",
+ "stackSize": 64
+ },
+ {
+ "id": 153,
+ "displayName": "Nether Quartz",
+ "name": "quartz_ore",
+ "stackSize": 64
+ },
+ {
+ "id": 154,
+ "displayName": "Hopper",
+ "name": "hopper",
+ "stackSize": 64
+ },
+ {
+ "id": 155,
+ "displayName": "Block of Quartz",
+ "name": "quartz_block",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Block of Quartz"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Chiseled Quartz Block"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Pillar Quartz Block"
+ }
+ ]
+ },
+ {
+ "id": 156,
+ "displayName": "Quartz Stairs",
+ "name": "quartz_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 157,
+ "displayName": "Activator Rail",
+ "name": "activator_rail",
+ "stackSize": 64
+ },
+ {
+ "id": 158,
+ "displayName": "Dropper",
+ "name": "dropper",
+ "stackSize": 64
+ },
+ {
+ "id": 159,
+ "displayName": "Stained Clay",
+ "name": "stained_hardened_clay",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "White Stained Clay"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Orange Stained Clay"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Magenta Stained Clay"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Light Blue Stained Clay"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Yellow Stained Clay"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Lime Stained Clay"
+ },
+ {
+ "metadata": 6,
+ "displayName": "Pink Stained Clay"
+ },
+ {
+ "metadata": 7,
+ "displayName": "Gray Stained Clay"
+ },
+ {
+ "metadata": 8,
+ "displayName": "Light Gray Stained Clay"
+ },
+ {
+ "metadata": 9,
+ "displayName": "Cyan Stained Clay"
+ },
+ {
+ "metadata": 10,
+ "displayName": "Purple Stained Clay"
+ },
+ {
+ "metadata": 11,
+ "displayName": "Blue Stained Clay"
+ },
+ {
+ "metadata": 12,
+ "displayName": "Brown Stained Clay"
+ },
+ {
+ "metadata": 13,
+ "displayName": "Green Stained Clay"
+ },
+ {
+ "metadata": 14,
+ "displayName": "Red Stained Clay"
+ },
+ {
+ "metadata": 15,
+ "displayName": "Black Stained Clay"
+ }
+ ]
+ },
+ {
+ "id": 160,
+ "displayName": "Stained Glass Pane",
+ "name": "stained_glass_pane",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "White Stained Glass Pane"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Orange Stained Glass Pane"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Magenta Stained Glass Pane"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Light Blue Stained Glass Pane"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Yellow Stained Glass Pane"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Lime Stained Glass Pane"
+ },
+ {
+ "metadata": 6,
+ "displayName": "Pink Stained Glass Pane"
+ },
+ {
+ "metadata": 7,
+ "displayName": "Gray Stained Glass Pane"
+ },
+ {
+ "metadata": 8,
+ "displayName": "Light Gray Stained Glass Pane"
+ },
+ {
+ "metadata": 9,
+ "displayName": "Cyan Stained Glass Pane"
+ },
+ {
+ "metadata": 10,
+ "displayName": "Purple Stained Glass Pane"
+ },
+ {
+ "metadata": 11,
+ "displayName": "Blue Stained Glass Pane"
+ },
+ {
+ "metadata": 12,
+ "displayName": "Brown Stained Glass Pane"
+ },
+ {
+ "metadata": 13,
+ "displayName": "Green Stained Glass Pane"
+ },
+ {
+ "metadata": 14,
+ "displayName": "Red Stained Glass Pane"
+ },
+ {
+ "metadata": 15,
+ "displayName": "Black Stained Glass Pane"
+ }
+ ]
+ },
+ {
+ "id": 161,
+ "displayName": "Leaves",
+ "name": "leaves2",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Acacia Leaves"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Dark Oak Leaves"
+ }
+ ]
+ },
+ {
+ "id": 162,
+ "displayName": "Wood",
+ "name": "log2",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Acacia Wood"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Dark Oak Wood"
+ }
+ ]
+ },
+ {
+ "id": 163,
+ "displayName": "Acacia Wood Stairs",
+ "name": "acacia_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 164,
+ "displayName": "Dark Oak Wood Stairs",
+ "name": "dark_oak_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 165,
+ "displayName": "Slime Block",
+ "name": "slime",
+ "stackSize": 64
+ },
+ {
+ "id": 166,
+ "displayName": "Barrier",
+ "name": "barrier",
+ "stackSize": 64
+ },
+ {
+ "id": 167,
+ "displayName": "Iron Trapdoor",
+ "name": "iron_trapdoor",
+ "stackSize": 64
+ },
+ {
+ "id": 168,
+ "displayName": "Prismarine",
+ "name": "prismarine",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Prismarine"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Prismarine Bricks"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Dark Prismarine"
+ }
+ ]
+ },
+ {
+ "id": 169,
+ "displayName": "Sea Lantern",
+ "name": "sea_lantern",
+ "stackSize": 64
+ },
+ {
+ "id": 170,
+ "displayName": "Hay Bale",
+ "name": "hay_block",
+ "stackSize": 64
+ },
+ {
+ "id": 171,
+ "displayName": "Carpet",
+ "name": "carpet",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "White Carpet"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Orange Carpet"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Magenta Carpet"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Light Blue Carpet"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Yellow Carpet"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Lime Carpet"
+ },
+ {
+ "metadata": 6,
+ "displayName": "Pink Carpet"
+ },
+ {
+ "metadata": 7,
+ "displayName": "Gray Carpet"
+ },
+ {
+ "metadata": 8,
+ "displayName": "Light Gray Carpet"
+ },
+ {
+ "metadata": 9,
+ "displayName": "Cyan Carpet"
+ },
+ {
+ "metadata": 10,
+ "displayName": "Purple Carpet"
+ },
+ {
+ "metadata": 11,
+ "displayName": "Blue Carpet"
+ },
+ {
+ "metadata": 12,
+ "displayName": "Brown Carpet"
+ },
+ {
+ "metadata": 13,
+ "displayName": "Green Carpet"
+ },
+ {
+ "metadata": 14,
+ "displayName": "Red Carpet"
+ },
+ {
+ "metadata": 15,
+ "displayName": "Black Carpet"
+ }
+ ]
+ },
+ {
+ "id": 172,
+ "displayName": "Hardened Clay",
+ "name": "hardened_clay",
+ "stackSize": 64
+ },
+ {
+ "id": 173,
+ "displayName": "Block of Coal",
+ "name": "coal_block",
+ "stackSize": 64
+ },
+ {
+ "id": 174,
+ "displayName": "Packed Ice",
+ "name": "packed_ice",
+ "stackSize": 64
+ },
+ {
+ "id": 175,
+ "displayName": "Large Flowers",
+ "name": "double_plant",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Sunflower"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Lilac"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Double Tallgrass"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Large Fern"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Rose Bush"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Peony"
+ }
+ ]
+ },
+ {
+ "id": 179,
+ "displayName": "Red Sandstone",
+ "name": "red_sandstone",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Red Sandstone"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Chiseled Red Sandstone"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Smooth Red Sandstone"
+ }
+ ]
+ },
+ {
+ "id": 180,
+ "displayName": "Red Sandstone Stairs",
+ "name": "red_sandstone_stairs",
+ "stackSize": 64
+ },
+ {
+ "id": 182,
+ "displayName": "Red Sandstone Slab",
+ "name": "stone_slab2",
+ "stackSize": 64
+ },
+ {
+ "id": 183,
+ "displayName": "Spruce Fence Gate",
+ "name": "spruce_fence_gate",
+ "stackSize": 64
+ },
+ {
+ "id": 184,
+ "displayName": "Birch Fence Gate",
+ "name": "birch_fence_gate",
+ "stackSize": 64
+ },
+ {
+ "id": 185,
+ "displayName": "Jungle Fence Gate",
+ "name": "jungle_fence_gate",
+ "stackSize": 64
+ },
+ {
+ "id": 186,
+ "displayName": "Dark Oak Fence Gate",
+ "name": "dark_oak_fence_gate",
+ "stackSize": 64
+ },
+ {
+ "id": 187,
+ "displayName": "Acacia Fence Gate",
+ "name": "acacia_fence_gate",
+ "stackSize": 64
+ },
+ {
+ "id": 188,
+ "displayName": "Spruce Fence",
+ "name": "spruce_fence",
+ "stackSize": 64
+ },
+ {
+ "id": 189,
+ "displayName": "Birch Fence",
+ "name": "birch_fence",
+ "stackSize": 64
+ },
+ {
+ "id": 190,
+ "displayName": "Jungle Fence",
+ "name": "jungle_fence",
+ "stackSize": 64
+ },
+ {
+ "id": 191,
+ "displayName": "Dark Oak Fence",
+ "name": "dark_oak_fence",
+ "stackSize": 64
+ },
+ {
+ "id": 192,
+ "displayName": "Acacia Fence",
+ "name": "acacia_fence",
+ "stackSize": 64
+ },
+ {
+ "id": 256,
+ "displayName": "Iron Shovel",
+ "name": "iron_shovel",
+ "stackSize": 1,
+ "maxDurability": 250,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 257,
+ "displayName": "Iron Pickaxe",
+ "name": "iron_pickaxe",
+ "stackSize": 1,
+ "maxDurability": 250,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 258,
+ "displayName": "Iron Axe",
+ "name": "iron_axe",
+ "stackSize": 1,
+ "maxDurability": 250,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 259,
+ "displayName": "Flint and Steel",
+ "name": "flint_and_steel",
+ "stackSize": 1,
+ "maxDurability": 64,
+ "enchantCategories": [
+ "breakable",
+ "vanishable"
+ ]
+ },
+ {
+ "id": 260,
+ "displayName": "Apple",
+ "name": "apple",
+ "stackSize": 64
+ },
+ {
+ "id": 261,
+ "displayName": "Bow",
+ "name": "bow",
+ "stackSize": 1,
+ "maxDurability": 384,
+ "enchantCategories": [
+ "breakable",
+ "bow",
+ "vanishable"
+ ]
+ },
+ {
+ "id": 262,
+ "displayName": "Arrow",
+ "name": "arrow",
+ "stackSize": 64
+ },
+ {
+ "id": 263,
+ "displayName": "Coal",
+ "name": "coal",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Coal"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Charcoal"
+ }
+ ]
+ },
+ {
+ "id": 264,
+ "displayName": "Diamond",
+ "name": "diamond",
+ "stackSize": 64
+ },
+ {
+ "id": 265,
+ "displayName": "Iron Ingot",
+ "name": "iron_ingot",
+ "stackSize": 64
+ },
+ {
+ "id": 266,
+ "displayName": "Gold Ingot",
+ "name": "gold_ingot",
+ "stackSize": 64
+ },
+ {
+ "id": 267,
+ "displayName": "Iron Sword",
+ "name": "iron_sword",
+ "stackSize": 1,
+ "maxDurability": 250,
+ "enchantCategories": [
+ "weapon",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 268,
+ "displayName": "Wooden Sword",
+ "name": "wooden_sword",
+ "stackSize": 1,
+ "maxDurability": 59,
+ "enchantCategories": [
+ "weapon",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "oak_planks",
+ "spruce_planks",
+ "birch_planks",
+ "jungle_planks",
+ "acacia_planks",
+ "dark_oak_planks",
+ "crimson_planks",
+ "warped_planks"
+ ]
+ },
+ {
+ "id": 269,
+ "displayName": "Wooden Shovel",
+ "name": "wooden_shovel",
+ "stackSize": 1,
+ "maxDurability": 59,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "oak_planks",
+ "spruce_planks",
+ "birch_planks",
+ "jungle_planks",
+ "acacia_planks",
+ "dark_oak_planks",
+ "crimson_planks",
+ "warped_planks"
+ ]
+ },
+ {
+ "id": 270,
+ "displayName": "Wooden Pickaxe",
+ "name": "wooden_pickaxe",
+ "stackSize": 1,
+ "maxDurability": 59,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "oak_planks",
+ "spruce_planks",
+ "birch_planks",
+ "jungle_planks",
+ "acacia_planks",
+ "dark_oak_planks",
+ "crimson_planks",
+ "warped_planks"
+ ]
+ },
+ {
+ "id": 271,
+ "displayName": "Wooden Axe",
+ "name": "wooden_axe",
+ "stackSize": 1,
+ "maxDurability": 59,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "oak_planks",
+ "spruce_planks",
+ "birch_planks",
+ "jungle_planks",
+ "acacia_planks",
+ "dark_oak_planks",
+ "crimson_planks",
+ "warped_planks"
+ ]
+ },
+ {
+ "id": 272,
+ "displayName": "Stone Sword",
+ "name": "stone_sword",
+ "stackSize": 1,
+ "maxDurability": 131,
+ "enchantCategories": [
+ "weapon",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "cobblestone",
+ "blackstone"
+ ]
+ },
+ {
+ "id": 273,
+ "displayName": "Stone Shovel",
+ "name": "stone_shovel",
+ "stackSize": 1,
+ "maxDurability": 131,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "cobblestone",
+ "blackstone"
+ ]
+ },
+ {
+ "id": 274,
+ "displayName": "Stone Pickaxe",
+ "name": "stone_pickaxe",
+ "stackSize": 1,
+ "maxDurability": 131,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "cobblestone",
+ "blackstone"
+ ]
+ },
+ {
+ "id": 275,
+ "displayName": "Stone Axe",
+ "name": "stone_axe",
+ "stackSize": 1,
+ "maxDurability": 131,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "cobblestone",
+ "blackstone"
+ ]
+ },
+ {
+ "id": 276,
+ "displayName": "Diamond Sword",
+ "name": "diamond_sword",
+ "stackSize": 1,
+ "maxDurability": 1561,
+ "enchantCategories": [
+ "weapon",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "diamond"
+ ]
+ },
+ {
+ "id": 277,
+ "displayName": "Diamond Shovel",
+ "name": "diamond_shovel",
+ "stackSize": 1,
+ "maxDurability": 1561,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "diamond"
+ ]
+ },
+ {
+ "id": 278,
+ "displayName": "Diamond Pickaxe",
+ "name": "diamond_pickaxe",
+ "stackSize": 1,
+ "maxDurability": 1561,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "diamond"
+ ]
+ },
+ {
+ "id": 279,
+ "displayName": "Diamond Axe",
+ "name": "diamond_axe",
+ "stackSize": 1,
+ "maxDurability": 1561,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "diamond"
+ ]
+ },
+ {
+ "id": 280,
+ "displayName": "Stick",
+ "name": "stick",
+ "stackSize": 64
+ },
+ {
+ "id": 281,
+ "displayName": "Bowl",
+ "name": "bowl",
+ "stackSize": 64
+ },
+ {
+ "id": 282,
+ "displayName": "Mushroom Stew",
+ "name": "mushroom_stew",
+ "stackSize": 1
+ },
+ {
+ "id": 283,
+ "displayName": "Golden Sword",
+ "name": "golden_sword",
+ "stackSize": 1,
+ "maxDurability": 32,
+ "enchantCategories": [
+ "weapon",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "gold_ingot"
+ ]
+ },
+ {
+ "id": 284,
+ "displayName": "Golden Shovel",
+ "name": "golden_shovel",
+ "stackSize": 1,
+ "maxDurability": 32,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "gold_ingot"
+ ]
+ },
+ {
+ "id": 285,
+ "displayName": "Golden Pickaxe",
+ "name": "golden_pickaxe",
+ "stackSize": 1,
+ "maxDurability": 32,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "gold_ingot"
+ ]
+ },
+ {
+ "id": 286,
+ "displayName": "Golden Axe",
+ "name": "golden_axe",
+ "stackSize": 1,
+ "maxDurability": 32,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "gold_ingot"
+ ]
+ },
+ {
+ "id": 287,
+ "displayName": "String",
+ "name": "string",
+ "stackSize": 64
+ },
+ {
+ "id": 288,
+ "displayName": "Feather",
+ "name": "feather",
+ "stackSize": 64
+ },
+ {
+ "id": 289,
+ "displayName": "Gunpowder",
+ "name": "gunpowder",
+ "stackSize": 64
+ },
+ {
+ "id": 290,
+ "displayName": "Wooden Hoe",
+ "name": "wooden_hoe",
+ "stackSize": 1,
+ "maxDurability": 59,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "oak_planks",
+ "spruce_planks",
+ "birch_planks",
+ "jungle_planks",
+ "acacia_planks",
+ "dark_oak_planks",
+ "crimson_planks",
+ "warped_planks"
+ ]
+ },
+ {
+ "id": 291,
+ "displayName": "Stone Hoe",
+ "name": "stone_hoe",
+ "stackSize": 1,
+ "maxDurability": 131,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "cobblestone",
+ "blackstone"
+ ]
+ },
+ {
+ "id": 292,
+ "displayName": "Iron Hoe",
+ "name": "iron_hoe",
+ "stackSize": 1,
+ "maxDurability": 250,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 293,
+ "displayName": "Diamond Hoe",
+ "name": "diamond_hoe",
+ "stackSize": 1,
+ "maxDurability": 1561,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "diamond"
+ ]
+ },
+ {
+ "id": 294,
+ "displayName": "Golden Hoe",
+ "name": "golden_hoe",
+ "stackSize": 1,
+ "maxDurability": 32,
+ "enchantCategories": [
+ "digger",
+ "breakable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "gold_ingot"
+ ]
+ },
+ {
+ "id": 295,
+ "displayName": "Seeds",
+ "name": "wheat_seeds",
+ "stackSize": 64
+ },
+ {
+ "id": 296,
+ "displayName": "Wheat",
+ "name": "wheat",
+ "stackSize": 64
+ },
+ {
+ "id": 297,
+ "displayName": "Bread",
+ "name": "bread",
+ "stackSize": 64
+ },
+ {
+ "id": 298,
+ "displayName": "Leather Cap",
+ "name": "leather_helmet",
+ "stackSize": 1,
+ "maxDurability": 55,
+ "enchantCategories": [
+ "armor",
+ "armor_head",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "leather"
+ ]
+ },
+ {
+ "id": 299,
+ "displayName": "Leather Tunic",
+ "name": "leather_chestplate",
+ "stackSize": 1,
+ "maxDurability": 80,
+ "enchantCategories": [
+ "armor",
+ "armor_chest",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "leather"
+ ]
+ },
+ {
+ "id": 300,
+ "displayName": "Leather Pants",
+ "name": "leather_leggings",
+ "stackSize": 1,
+ "maxDurability": 75,
+ "enchantCategories": [
+ "armor",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "leather"
+ ]
+ },
+ {
+ "id": 301,
+ "displayName": "Leather Boots",
+ "name": "leather_boots",
+ "stackSize": 1,
+ "maxDurability": 65,
+ "enchantCategories": [
+ "armor",
+ "armor_feet",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "leather"
+ ]
+ },
+ {
+ "id": 302,
+ "displayName": "Chain Helmet",
+ "name": "chainmail_helmet",
+ "stackSize": 1,
+ "maxDurability": 165,
+ "enchantCategories": [
+ "armor",
+ "armor_head",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 303,
+ "displayName": "Chain Chestplate",
+ "name": "chainmail_chestplate",
+ "stackSize": 1,
+ "maxDurability": 240,
+ "enchantCategories": [
+ "armor",
+ "armor_chest",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 304,
+ "displayName": "Chain Leggings",
+ "name": "chainmail_leggings",
+ "stackSize": 1,
+ "maxDurability": 225,
+ "enchantCategories": [
+ "armor",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 305,
+ "displayName": "Chain Boots",
+ "name": "chainmail_boots",
+ "stackSize": 1,
+ "maxDurability": 195,
+ "enchantCategories": [
+ "armor",
+ "armor_feet",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 306,
+ "displayName": "Iron Helmet",
+ "name": "iron_helmet",
+ "stackSize": 1,
+ "maxDurability": 165,
+ "enchantCategories": [
+ "armor",
+ "armor_head",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 307,
+ "displayName": "Iron Chestplate",
+ "name": "iron_chestplate",
+ "stackSize": 1,
+ "maxDurability": 240,
+ "enchantCategories": [
+ "armor",
+ "armor_chest",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 308,
+ "displayName": "Iron Leggings",
+ "name": "iron_leggings",
+ "stackSize": 1,
+ "maxDurability": 225,
+ "enchantCategories": [
+ "armor",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 309,
+ "displayName": "Iron Boots",
+ "name": "iron_boots",
+ "stackSize": 1,
+ "maxDurability": 195,
+ "enchantCategories": [
+ "armor",
+ "armor_feet",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "iron_ingot"
+ ]
+ },
+ {
+ "id": 310,
+ "displayName": "Diamond Helmet",
+ "name": "diamond_helmet",
+ "stackSize": 1,
+ "maxDurability": 363,
+ "enchantCategories": [
+ "armor",
+ "armor_head",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "diamond"
+ ]
+ },
+ {
+ "id": 311,
+ "displayName": "Diamond Chestplate",
+ "name": "diamond_chestplate",
+ "stackSize": 1,
+ "maxDurability": 528,
+ "enchantCategories": [
+ "armor",
+ "armor_chest",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "diamond"
+ ]
+ },
+ {
+ "id": 312,
+ "displayName": "Diamond Leggings",
+ "name": "diamond_leggings",
+ "stackSize": 1,
+ "maxDurability": 495,
+ "enchantCategories": [
+ "armor",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "diamond"
+ ]
+ },
+ {
+ "id": 313,
+ "displayName": "Diamond Boots",
+ "name": "diamond_boots",
+ "stackSize": 1,
+ "maxDurability": 429,
+ "enchantCategories": [
+ "armor",
+ "armor_feet",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "diamond"
+ ]
+ },
+ {
+ "id": 314,
+ "displayName": "Golden Helmet",
+ "name": "golden_helmet",
+ "stackSize": 1,
+ "maxDurability": 77,
+ "enchantCategories": [
+ "armor",
+ "armor_head",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "gold_ingot"
+ ]
+ },
+ {
+ "id": 315,
+ "displayName": "Golden Chestplate",
+ "name": "golden_chestplate",
+ "stackSize": 1,
+ "maxDurability": 112,
+ "enchantCategories": [
+ "armor",
+ "armor_chest",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "gold_ingot"
+ ]
+ },
+ {
+ "id": 316,
+ "displayName": "Golden Leggings",
+ "name": "golden_leggings",
+ "stackSize": 1,
+ "maxDurability": 105,
+ "enchantCategories": [
+ "armor",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "gold_ingot"
+ ]
+ },
+ {
+ "id": 317,
+ "displayName": "Golden Boots",
+ "name": "golden_boots",
+ "stackSize": 1,
+ "maxDurability": 91,
+ "enchantCategories": [
+ "armor",
+ "armor_feet",
+ "breakable",
+ "wearable",
+ "vanishable"
+ ],
+ "repairWith": [
+ "gold_ingot"
+ ]
+ },
+ {
+ "id": 318,
+ "displayName": "Flint",
+ "name": "flint",
+ "stackSize": 64
+ },
+ {
+ "id": 319,
+ "displayName": "Raw Porkchop",
+ "name": "porkchop",
+ "stackSize": 64
+ },
+ {
+ "id": 320,
+ "displayName": "Cooked Porkchop",
+ "name": "cooked_porkchop",
+ "stackSize": 64
+ },
+ {
+ "id": 321,
+ "displayName": "Painting",
+ "name": "painting",
+ "stackSize": 64
+ },
+ {
+ "id": 322,
+ "displayName": "Golden Apple",
+ "name": "golden_apple",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Golden Apple"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Enchanted Golden Apple"
+ }
+ ]
+ },
+ {
+ "id": 323,
+ "displayName": "Sign",
+ "name": "sign",
+ "stackSize": 16
+ },
+ {
+ "id": 324,
+ "displayName": "Oak Door",
+ "name": "wooden_door",
+ "stackSize": 64
+ },
+ {
+ "id": 325,
+ "displayName": "Bucket",
+ "name": "bucket",
+ "stackSize": 16
+ },
+ {
+ "id": 326,
+ "displayName": "Water Bucket",
+ "name": "water_bucket",
+ "stackSize": 1
+ },
+ {
+ "id": 327,
+ "displayName": "Lava Bucket",
+ "name": "lava_bucket",
+ "stackSize": 1
+ },
+ {
+ "id": 328,
+ "displayName": "Minecart",
+ "name": "minecart",
+ "stackSize": 1
+ },
+ {
+ "id": 329,
+ "displayName": "Saddle",
+ "name": "saddle",
+ "stackSize": 1
+ },
+ {
+ "id": 330,
+ "displayName": "Iron Door",
+ "name": "iron_door",
+ "stackSize": 64
+ },
+ {
+ "id": 331,
+ "displayName": "Redstone",
+ "name": "redstone",
+ "stackSize": 64
+ },
+ {
+ "id": 332,
+ "displayName": "Snowball",
+ "name": "snowball",
+ "stackSize": 16
+ },
+ {
+ "id": 333,
+ "displayName": "Boat",
+ "name": "boat",
+ "stackSize": 1
+ },
+ {
+ "id": 334,
+ "displayName": "Leather",
+ "name": "leather",
+ "stackSize": 64
+ },
+ {
+ "id": 335,
+ "displayName": "Milk",
+ "name": "milk_bucket",
+ "stackSize": 1
+ },
+ {
+ "id": 336,
+ "displayName": "Brick",
+ "name": "brick",
+ "stackSize": 64
+ },
+ {
+ "id": 337,
+ "displayName": "Clay",
+ "name": "clay_ball",
+ "stackSize": 64
+ },
+ {
+ "id": 338,
+ "displayName": "Sugar Canes",
+ "name": "reeds",
+ "stackSize": 64
+ },
+ {
+ "id": 339,
+ "displayName": "Paper",
+ "name": "paper",
+ "stackSize": 64
+ },
+ {
+ "id": 340,
+ "displayName": "Book",
+ "name": "book",
+ "stackSize": 64
+ },
+ {
+ "id": 341,
+ "displayName": "Slimeball",
+ "name": "slime_ball",
+ "stackSize": 64
+ },
+ {
+ "id": 342,
+ "displayName": "Minecart with Chest",
+ "name": "chest_minecart",
+ "stackSize": 1
+ },
+ {
+ "id": 343,
+ "displayName": "Minecart with Furnace",
+ "name": "furnace_minecart",
+ "stackSize": 1
+ },
+ {
+ "id": 344,
+ "displayName": "Egg",
+ "name": "egg",
+ "stackSize": 16
+ },
+ {
+ "id": 345,
+ "displayName": "Compass",
+ "name": "compass",
+ "stackSize": 64
+ },
+ {
+ "id": 346,
+ "displayName": "Fishing Rod",
+ "name": "fishing_rod",
+ "stackSize": 1,
+ "maxDurability": 64,
+ "enchantCategories": [
+ "breakable",
+ "fishing_rod",
+ "vanishable"
+ ]
+ },
+ {
+ "id": 347,
+ "displayName": "Clock",
+ "name": "clock",
+ "stackSize": 64
+ },
+ {
+ "id": 348,
+ "displayName": "Glowstone Dust",
+ "name": "glowstone_dust",
+ "stackSize": 64
+ },
+ {
+ "id": 349,
+ "displayName": "Fish",
+ "name": "fish",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Raw Fish"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Raw Salmon"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Clownfish"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Pufferfish"
+ }
+ ]
+ },
+ {
+ "id": 350,
+ "displayName": "Cooked Fish",
+ "name": "cooked_fish",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Cooked Fish"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Cooked Salmon"
+ }
+ ]
+ },
+ {
+ "id": 351,
+ "displayName": "Dye",
+ "name": "dye",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Ink Sac"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Rose Red"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Cactus Green"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Cocoa Beans"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Lapis Lazuli"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Purple Dye"
+ },
+ {
+ "metadata": 6,
+ "displayName": "Cyan Dye"
+ },
+ {
+ "metadata": 7,
+ "displayName": "Light Gray Dye"
+ },
+ {
+ "metadata": 8,
+ "displayName": "Gray Dye"
+ },
+ {
+ "metadata": 9,
+ "displayName": "Pink Dye"
+ },
+ {
+ "metadata": 10,
+ "displayName": "Lime Dye"
+ },
+ {
+ "metadata": 11,
+ "displayName": "Dandelion Yellow"
+ },
+ {
+ "metadata": 12,
+ "displayName": "Light Blue Dye"
+ },
+ {
+ "metadata": 13,
+ "displayName": "Magenta Dye"
+ },
+ {
+ "metadata": 14,
+ "displayName": "Orange Dye"
+ },
+ {
+ "metadata": 15,
+ "displayName": "Bone Meal"
+ }
+ ]
+ },
+ {
+ "id": 352,
+ "displayName": "Bone",
+ "name": "bone",
+ "stackSize": 64
+ },
+ {
+ "id": 353,
+ "displayName": "Sugar",
+ "name": "sugar",
+ "stackSize": 64
+ },
+ {
+ "id": 354,
+ "displayName": "Cake",
+ "name": "cake",
+ "stackSize": 1
+ },
+ {
+ "id": 355,
+ "displayName": "Bed",
+ "name": "bed",
+ "stackSize": 1
+ },
+ {
+ "id": 356,
+ "displayName": "Redstone Repeater",
+ "name": "repeater",
+ "stackSize": 64
+ },
+ {
+ "id": 357,
+ "displayName": "Cookie",
+ "name": "cookie",
+ "stackSize": 64
+ },
+ {
+ "id": 358,
+ "displayName": "Map",
+ "name": "filled_map",
+ "stackSize": 64
+ },
+ {
+ "id": 359,
+ "displayName": "Shears",
+ "name": "shears",
+ "stackSize": 1,
+ "maxDurability": 238,
+ "enchantCategories": [
+ "breakable",
+ "vanishable"
+ ]
+ },
+ {
+ "id": 360,
+ "displayName": "Melon",
+ "name": "melon",
+ "stackSize": 64
+ },
+ {
+ "id": 361,
+ "displayName": "Pumpkin Seeds",
+ "name": "pumpkin_seeds",
+ "stackSize": 64
+ },
+ {
+ "id": 362,
+ "displayName": "Melon Seeds",
+ "name": "melon_seeds",
+ "stackSize": 64
+ },
+ {
+ "id": 363,
+ "displayName": "Raw Beef",
+ "name": "beef",
+ "stackSize": 64
+ },
+ {
+ "id": 364,
+ "displayName": "Steak",
+ "name": "cooked_beef",
+ "stackSize": 64
+ },
+ {
+ "id": 365,
+ "displayName": "Raw Chicken",
+ "name": "chicken",
+ "stackSize": 64
+ },
+ {
+ "id": 366,
+ "displayName": "Cooked Chicken",
+ "name": "cooked_chicken",
+ "stackSize": 64
+ },
+ {
+ "id": 367,
+ "displayName": "Rotten Flesh",
+ "name": "rotten_flesh",
+ "stackSize": 64
+ },
+ {
+ "id": 368,
+ "displayName": "Ender Pearl",
+ "name": "ender_pearl",
+ "stackSize": 16
+ },
+ {
+ "id": 369,
+ "displayName": "Blaze Rod",
+ "name": "blaze_rod",
+ "stackSize": 64
+ },
+ {
+ "id": 370,
+ "displayName": "Ghast Tear",
+ "name": "ghast_tear",
+ "stackSize": 64
+ },
+ {
+ "id": 371,
+ "displayName": "Gold Nugget",
+ "name": "gold_nugget",
+ "stackSize": 64
+ },
+ {
+ "id": 372,
+ "displayName": "Nether Wart",
+ "name": "nether_wart",
+ "stackSize": 64
+ },
+ {
+ "id": 373,
+ "displayName": "Potion",
+ "name": "potion",
+ "stackSize": 1
+ },
+ {
+ "id": 374,
+ "displayName": "Glass Bottle",
+ "name": "glass_bottle",
+ "stackSize": 64
+ },
+ {
+ "id": 375,
+ "displayName": "Spider Eye",
+ "name": "spider_eye",
+ "stackSize": 64
+ },
+ {
+ "id": 376,
+ "displayName": "Fermented Spider Eye",
+ "name": "fermented_spider_eye",
+ "stackSize": 64
+ },
+ {
+ "id": 377,
+ "displayName": "Blaze Powder",
+ "name": "blaze_powder",
+ "stackSize": 64
+ },
+ {
+ "id": 378,
+ "displayName": "Magma Cream",
+ "name": "magma_cream",
+ "stackSize": 64
+ },
+ {
+ "id": 379,
+ "displayName": "Brewing Stand",
+ "name": "brewing_stand",
+ "stackSize": 64
+ },
+ {
+ "id": 380,
+ "displayName": "Cauldron",
+ "name": "cauldron",
+ "stackSize": 64
+ },
+ {
+ "id": 381,
+ "displayName": "Eye of Ender",
+ "name": "ender_eye",
+ "stackSize": 64
+ },
+ {
+ "id": 382,
+ "displayName": "Glistering Melon",
+ "name": "speckled_melon",
+ "stackSize": 64
+ },
+ {
+ "id": 383,
+ "displayName": "Spawn Egg",
+ "name": "spawn_egg",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Spawn"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Spawn Dropped item"
+ },
+ {
+ "metadata": 7,
+ "displayName": "Spawn Thrown egg"
+ },
+ {
+ "metadata": 8,
+ "displayName": "Spawn Lead knot"
+ },
+ {
+ "metadata": 10,
+ "displayName": "Spawn Shot arrow"
+ },
+ {
+ "metadata": 11,
+ "displayName": "Spawn Thrown snowball"
+ },
+ {
+ "metadata": 12,
+ "displayName": "Spawn Ghast fireball"
+ },
+ {
+ "metadata": 13,
+ "displayName": "Spawn Blaze fireball"
+ },
+ {
+ "metadata": 14,
+ "displayName": "Spawn Thrown Ender Pearl"
+ },
+ {
+ "metadata": 15,
+ "displayName": "Spawn Thrown Eye of Ender"
+ },
+ {
+ "metadata": 16,
+ "displayName": "Spawn Thrown splash potion"
+ },
+ {
+ "metadata": 17,
+ "displayName": "Spawn Thrown Bottle o' Enchanting"
+ },
+ {
+ "metadata": 18,
+ "displayName": "Spawn Item Frame"
+ },
+ {
+ "metadata": 19,
+ "displayName": "Spawn Wither Skull"
+ },
+ {
+ "metadata": 20,
+ "displayName": "Spawn Primed TNT"
+ },
+ {
+ "metadata": 21,
+ "displayName": "Spawn Falling block"
+ },
+ {
+ "metadata": 21,
+ "displayName": "Spawn Falling block"
+ },
+ {
+ "metadata": 22,
+ "displayName": "Spawn Firework Rocket"
+ },
+ {
+ "metadata": 30,
+ "displayName": "Spawn Armor Stand"
+ },
+ {
+ "metadata": 41,
+ "displayName": "Spawn Boat"
+ },
+ {
+ "metadata": 42,
+ "displayName": "Spawn Minecart"
+ },
+ {
+ "metadata": 42,
+ "displayName": "Spawn Minecart"
+ },
+ {
+ "metadata": 42,
+ "displayName": "Spawn Minecart"
+ },
+ {
+ "metadata": 48,
+ "displayName": "Spawn Mob"
+ },
+ {
+ "metadata": 49,
+ "displayName": "Spawn Monster"
+ },
+ {
+ "metadata": 50,
+ "displayName": "Spawn Creeper"
+ },
+ {
+ "metadata": 51,
+ "displayName": "Spawn Skeleton"
+ },
+ {
+ "metadata": 52,
+ "displayName": "Spawn Spider"
+ },
+ {
+ "metadata": 53,
+ "displayName": "Spawn Giant"
+ },
+ {
+ "metadata": 54,
+ "displayName": "Spawn Zombie"
+ },
+ {
+ "metadata": 55,
+ "displayName": "Spawn Slime"
+ },
+ {
+ "metadata": 56,
+ "displayName": "Spawn Ghast"
+ },
+ {
+ "metadata": 57,
+ "displayName": "Spawn Zombie Pigman"
+ },
+ {
+ "metadata": 58,
+ "displayName": "Spawn Enderman"
+ },
+ {
+ "metadata": 59,
+ "displayName": "Spawn Cave Spider"
+ },
+ {
+ "metadata": 60,
+ "displayName": "Spawn Silverfish"
+ },
+ {
+ "metadata": 61,
+ "displayName": "Spawn Blaze"
+ },
+ {
+ "metadata": 62,
+ "displayName": "Spawn Magma Cube"
+ },
+ {
+ "metadata": 63,
+ "displayName": "Spawn Ender Dragon"
+ },
+ {
+ "metadata": 64,
+ "displayName": "Spawn Wither"
+ },
+ {
+ "metadata": 65,
+ "displayName": "Spawn Bat"
+ },
+ {
+ "metadata": 66,
+ "displayName": "Spawn Witch"
+ },
+ {
+ "metadata": 67,
+ "displayName": "Spawn Endermite"
+ },
+ {
+ "metadata": 68,
+ "displayName": "Spawn Guardian"
+ },
+ {
+ "metadata": 90,
+ "displayName": "Spawn Pig"
+ },
+ {
+ "metadata": 91,
+ "displayName": "Spawn Sheep"
+ },
+ {
+ "metadata": 92,
+ "displayName": "Spawn Cow"
+ },
+ {
+ "metadata": 93,
+ "displayName": "Spawn Chicken"
+ },
+ {
+ "metadata": 94,
+ "displayName": "Spawn Squid"
+ },
+ {
+ "metadata": 95,
+ "displayName": "Spawn Wolf"
+ },
+ {
+ "metadata": 96,
+ "displayName": "Spawn Mooshroom"
+ },
+ {
+ "metadata": 97,
+ "displayName": "Spawn Snow Golem"
+ },
+ {
+ "metadata": 98,
+ "displayName": "Spawn Ocelot"
+ },
+ {
+ "metadata": 99,
+ "displayName": "Spawn Iron Golem"
+ },
+ {
+ "metadata": 100,
+ "displayName": "Spawn Horse"
+ },
+ {
+ "metadata": 101,
+ "displayName": "Spawn Rabbit"
+ },
+ {
+ "metadata": 120,
+ "displayName": "Spawn Villager"
+ },
+ {
+ "metadata": 200,
+ "displayName": "Spawn Ender Crystal"
+ }
+ ]
+ },
+ {
+ "id": 384,
+ "displayName": "Bottle o' Enchanting",
+ "name": "experience_bottle",
+ "stackSize": 64
+ },
+ {
+ "id": 385,
+ "displayName": "Fire Charge",
+ "name": "fire_charge",
+ "stackSize": 64
+ },
+ {
+ "id": 386,
+ "displayName": "Book and Quill",
+ "name": "writable_book",
+ "stackSize": 1
+ },
+ {
+ "id": 387,
+ "displayName": "Written Book",
+ "name": "written_book",
+ "stackSize": 16
+ },
+ {
+ "id": 388,
+ "displayName": "Emerald",
+ "name": "emerald",
+ "stackSize": 64
+ },
+ {
+ "id": 389,
+ "displayName": "Item Frame",
+ "name": "item_frame",
+ "stackSize": 64
+ },
+ {
+ "id": 390,
+ "displayName": "Flower Pot",
+ "name": "flower_pot",
+ "stackSize": 64
+ },
+ {
+ "id": 391,
+ "displayName": "Carrot",
+ "name": "carrot",
+ "stackSize": 64
+ },
+ {
+ "id": 392,
+ "displayName": "Potato",
+ "name": "potato",
+ "stackSize": 64
+ },
+ {
+ "id": 393,
+ "displayName": "Baked Potato",
+ "name": "baked_potato",
+ "stackSize": 64
+ },
+ {
+ "id": 394,
+ "displayName": "Poisonous Potato",
+ "name": "poisonous_potato",
+ "stackSize": 64
+ },
+ {
+ "id": 395,
+ "displayName": "Empty Map",
+ "name": "map",
+ "stackSize": 64
+ },
+ {
+ "id": 396,
+ "displayName": "Golden Carrot",
+ "name": "golden_carrot",
+ "stackSize": 64
+ },
+ {
+ "id": 397,
+ "displayName": "Skull",
+ "name": "skull",
+ "stackSize": 64,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Skeleton Skull"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Wither Skeleton Skull"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Zombie Head"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Head"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Creeper Head"
+ }
+ ]
+ },
+ {
+ "id": 398,
+ "displayName": "Carrot on a Stick",
+ "name": "carrot_on_a_stick",
+ "stackSize": 1,
+ "maxDurability": 25,
+ "enchantCategories": [
+ "breakable",
+ "vanishable"
+ ]
+ },
+ {
+ "id": 399,
+ "displayName": "Nether Star",
+ "name": "nether_star",
+ "stackSize": 64
+ },
+ {
+ "id": 400,
+ "displayName": "Pumpkin Pie",
+ "name": "pumpkin_pie",
+ "stackSize": 64
+ },
+ {
+ "id": 401,
+ "displayName": "Firework Rocket",
+ "name": "fireworks",
+ "stackSize": 64
+ },
+ {
+ "id": 402,
+ "displayName": "Firework Star",
+ "name": "firework_charge",
+ "stackSize": 64
+ },
+ {
+ "id": 403,
+ "displayName": "Enchanted Book",
+ "name": "enchanted_book",
+ "stackSize": 1
+ },
+ {
+ "id": 404,
+ "displayName": "Redstone Comparator",
+ "name": "comparator",
+ "stackSize": 64
+ },
+ {
+ "id": 405,
+ "displayName": "Nether Brick",
+ "name": "netherbrick",
+ "stackSize": 64
+ },
+ {
+ "id": 406,
+ "displayName": "Nether Quartz",
+ "name": "quartz",
+ "stackSize": 64
+ },
+ {
+ "id": 407,
+ "displayName": "Minecart with TNT",
+ "name": "tnt_minecart",
+ "stackSize": 1
+ },
+ {
+ "id": 408,
+ "displayName": "Minecart with Hopper",
+ "name": "hopper_minecart",
+ "stackSize": 1
+ },
+ {
+ "id": 409,
+ "displayName": "Prismarine Shard",
+ "name": "prismarine_shard",
+ "stackSize": 64
+ },
+ {
+ "id": 410,
+ "displayName": "Prismarine Crystals",
+ "name": "prismarine_crystals",
+ "stackSize": 64
+ },
+ {
+ "id": 411,
+ "displayName": "Raw Rabbit",
+ "name": "rabbit",
+ "stackSize": 64
+ },
+ {
+ "id": 412,
+ "displayName": "Cooked Rabbit",
+ "name": "cooked_rabbit",
+ "stackSize": 64
+ },
+ {
+ "id": 413,
+ "displayName": "Rabbit Stew",
+ "name": "rabbit_stew",
+ "stackSize": 1
+ },
+ {
+ "id": 414,
+ "displayName": "Rabbit's Foot",
+ "name": "rabbit_foot",
+ "stackSize": 64
+ },
+ {
+ "id": 415,
+ "displayName": "Rabbit Hide",
+ "name": "rabbit_hide",
+ "stackSize": 64
+ },
+ {
+ "id": 416,
+ "displayName": "Armor Stand",
+ "name": "armor_stand",
+ "stackSize": 16
+ },
+ {
+ "id": 417,
+ "displayName": "Iron Horse Armor",
+ "name": "iron_horse_armor",
+ "stackSize": 1
+ },
+ {
+ "id": 418,
+ "displayName": "Gold Horse Armor",
+ "name": "golden_horse_armor",
+ "stackSize": 1
+ },
+ {
+ "id": 419,
+ "displayName": "Diamond Horse Armor",
+ "name": "diamond_horse_armor",
+ "stackSize": 1
+ },
+ {
+ "id": 420,
+ "displayName": "Lead",
+ "name": "lead",
+ "stackSize": 64
+ },
+ {
+ "id": 421,
+ "displayName": "Name Tag",
+ "name": "name_tag",
+ "stackSize": 64
+ },
+ {
+ "id": 422,
+ "displayName": "Minecart with Command Block",
+ "name": "command_block_minecart",
+ "stackSize": 1
+ },
+ {
+ "id": 423,
+ "displayName": "Raw Mutton",
+ "name": "mutton",
+ "stackSize": 64
+ },
+ {
+ "id": 424,
+ "displayName": "Cooked Mutton",
+ "name": "cooked_mutton",
+ "stackSize": 64
+ },
+ {
+ "id": 425,
+ "displayName": "Banner",
+ "name": "banner",
+ "stackSize": 16,
+ "variations": [
+ {
+ "metadata": 0,
+ "displayName": "Black Banner"
+ },
+ {
+ "metadata": 1,
+ "displayName": "Red Banner"
+ },
+ {
+ "metadata": 2,
+ "displayName": "Green Banner"
+ },
+ {
+ "metadata": 3,
+ "displayName": "Brown Banner"
+ },
+ {
+ "metadata": 4,
+ "displayName": "Blue Banner"
+ },
+ {
+ "metadata": 5,
+ "displayName": "Purple Banner"
+ },
+ {
+ "metadata": 6,
+ "displayName": "Cyan Banner"
+ },
+ {
+ "metadata": 7,
+ "displayName": "Light Gray Banner"
+ },
+ {
+ "metadata": 8,
+ "displayName": "Gray Banner"
+ },
+ {
+ "metadata": 9,
+ "displayName": "Pink Banner"
+ },
+ {
+ "metadata": 10,
+ "displayName": "Lime Banner"
+ },
+ {
+ "metadata": 11,
+ "displayName": "Yellow Banner"
+ },
+ {
+ "metadata": 12,
+ "displayName": "Light Blue Banner"
+ },
+ {
+ "metadata": 13,
+ "displayName": "Magenta Banner"
+ },
+ {
+ "metadata": 14,
+ "displayName": "Orange Banner"
+ },
+ {
+ "metadata": 15,
+ "displayName": "White Banner"
+ }
+ ]
+ },
+ {
+ "id": 427,
+ "displayName": "Spruce Door",
+ "name": "spruce_door",
+ "stackSize": 64
+ },
+ {
+ "id": 428,
+ "displayName": "Birch Door",
+ "name": "birch_door",
+ "stackSize": 64
+ },
+ {
+ "id": 429,
+ "displayName": "Jungle Door",
+ "name": "jungle_door",
+ "stackSize": 64
+ },
+ {
+ "id": 430,
+ "displayName": "Acacia Door",
+ "name": "acacia_door",
+ "stackSize": 64
+ },
+ {
+ "id": 431,
+ "displayName": "Dark Oak Door",
+ "name": "dark_oak_door",
+ "stackSize": 64
+ },
+ {
+ "id": 2256,
+ "displayName": "13 Disc",
+ "name": "record_13",
+ "stackSize": 1
+ },
+ {
+ "id": 2257,
+ "displayName": "Cat Disc",
+ "name": "record_cat",
+ "stackSize": 1
+ },
+ {
+ "id": 2258,
+ "displayName": "Blocks Disc",
+ "name": "record_blocks",
+ "stackSize": 1
+ },
+ {
+ "id": 2259,
+ "displayName": "Chirp Disc",
+ "name": "record_chirp",
+ "stackSize": 1
+ },
+ {
+ "id": 2260,
+ "displayName": "Far Disc",
+ "name": "record_far",
+ "stackSize": 1
+ },
+ {
+ "id": 2261,
+ "displayName": "Mall Disc",
+ "name": "record_mall",
+ "stackSize": 1
+ },
+ {
+ "id": 2262,
+ "displayName": "Mellohi Disc",
+ "name": "record_mellohi",
+ "stackSize": 1
+ },
+ {
+ "id": 2263,
+ "displayName": "Stal Disc",
+ "name": "record_stal",
+ "stackSize": 1
+ },
+ {
+ "id": 2264,
+ "displayName": "Strad Disc",
+ "name": "record_strad",
+ "stackSize": 1
+ },
+ {
+ "id": 2265,
+ "displayName": "Ward Disc",
+ "name": "record_ward",
+ "stackSize": 1
+ },
+ {
+ "id": 2266,
+ "displayName": "11 Disc",
+ "name": "record_11",
+ "stackSize": 1
+ },
+ {
+ "id": 2267,
+ "displayName": "Wait Disc",
+ "name": "record_wait",
+ "stackSize": 1
+ }
+] \ No newline at end of file