From f6cd4712fcbf536ae43b536b6fefe851a497039b Mon Sep 17 00:00:00 2001 From: Simon Wanner Date: Fri, 15 Oct 2021 15:27:47 +0200 Subject: [PATCH] Support Flattening conversions (Fixes #1) --- README.md | 4 +- build.gradle.kts | 12 +- gradle.properties | 2 +- .../de/skyrising/mc/scanner/inventories.kt | 49 +- .../kotlin/de/skyrising/mc/scanner/nbt.kt | 1 + .../kotlin/de/skyrising/mc/scanner/needles.kt | 186 ++ .../kotlin/de/skyrising/mc/scanner/region.kt | 223 +-- .../de/skyrising/mc/scanner/region/io.kt | 102 + .../de/skyrising/mc/scanner/region/tree.kt | 30 + .../skyrising/mc/scanner/region/visitors.kt | 47 + .../kotlin/de/skyrising/mc/scanner/scanner.kt | 24 +- .../resources/flattening/block_states.json | 1675 +++++++++++++++++ src/main/resources/flattening/items.json | 322 ++++ 13 files changed, 2543 insertions(+), 134 deletions(-) create mode 100644 src/main/kotlin/de/skyrising/mc/scanner/needles.kt create mode 100644 src/main/kotlin/de/skyrising/mc/scanner/region/io.kt create mode 100644 src/main/kotlin/de/skyrising/mc/scanner/region/tree.kt create mode 100644 src/main/kotlin/de/skyrising/mc/scanner/region/visitors.kt create mode 100644 src/main/resources/flattening/block_states.json create mode 100644 src/main/resources/flattening/items.json diff --git a/README.md b/README.md index 98a22b5..5fdce09 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,9 @@ collect statistics about inventory contents ## Example Usage -### Searching for Sponges (in 1.12) +### Searching for Sponges ```shell -> java -jar mc-scanner-.jar -i sponge -b 19 sponges.zip +> java -jar mc-scanner-.jar -i sponge -i wet_sponge -b sponge -b wet_sponge sponges.zip # ... 20s later ... # 2671/2671 5.9GiB/5.9GiB 298.6MiB/s 30 results ``` diff --git a/build.gradle.kts b/build.gradle.kts index c2e960c..1c13675 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,8 +2,10 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { - kotlin("jvm") version "1.4.21" + kotlin("jvm") version "1.5.31" + kotlin("plugin.serialization") version "1.5.31" id("com.github.johnrengelman.shadow") version "6.1.0" + application } @@ -16,19 +18,21 @@ dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") implementation("it.unimi.dsi:fastutil:8.5.2") implementation("net.sf.jopt-simple:jopt-simple:6.0-alpha-3") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0") testImplementation("org.jetbrains.kotlin:kotlin-test") testImplementation("org.jetbrains.kotlin:kotlin-test-junit") } +application { + mainClassName = "de.skyrising.mc.scanner.ScannerKt" +} + tasks { named("shadowJar") { classifier = "" mergeServiceFiles() minimize() - manifest { - attributes(mapOf("Main-Class" to "de.skyrising.mc.scanner.ScannerKt")) - } } } diff --git a/gradle.properties b/gradle.properties index 29645a8..2035256 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -version = 0.1.0 \ No newline at end of file +version = 0.2.0 \ No newline at end of file diff --git a/src/main/kotlin/de/skyrising/mc/scanner/inventories.kt b/src/main/kotlin/de/skyrising/mc/scanner/inventories.kt index a4c7067..99cb7db 100644 --- a/src/main/kotlin/de/skyrising/mc/scanner/inventories.kt +++ b/src/main/kotlin/de/skyrising/mc/scanner/inventories.kt @@ -1,11 +1,17 @@ package de.skyrising.mc.scanner +import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap +import it.unimi.dsi.fastutil.objects.Object2IntMap +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap import it.unimi.dsi.fastutil.objects.Object2LongMap import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap import java.nio.ByteBuffer import java.nio.file.Files import java.nio.file.Path import java.util.* +import java.util.function.LongPredicate +import kotlin.collections.LinkedHashMap +import kotlin.collections.LinkedHashSet data class PlayerFile(private val path: Path) : Scannable { override val size: Long = Files.size(path) @@ -36,30 +42,57 @@ data class PlayerFile(private val path: Path) : Scannable { } fun scanInventory(slots: ListTag, needles: Collection, statsMode: Boolean): List> { - val ids = needles.mapTo(mutableSetOf(), ItemType::id) + val byId = LinkedHashMap>() + for (needle in needles) { + byId.computeIfAbsent(needle.id) { LinkedHashSet() }.add(needle) + } val result = Object2LongOpenHashMap() val inventories = mutableListOf>(result) for (slot in slots) { if (!slot.has("id", Tag.STRING)) continue - val id = slot.getString("id") + val id = Identifier(slot.getString("id")) val contained = getSubResults(slot, needles, statsMode) - if (id in ids || (ids.isEmpty() && statsMode && contained.isEmpty())) { + val matchingTypes = byId[id] + if (matchingTypes != null || (byId.isEmpty() && statsMode && contained.isEmpty())) { val dmg = if (slot.has("Damage", Tag.INTEGER)) slot.getInt("Damage") else null - if (dmg != null && dmg != 0 && dmg < 16) { - result.addTo(ItemType("$id:$dmg"), slot.getInt("Count").toLong()) - } else { - result.addTo(ItemType(id), slot.getInt("Count").toLong()) + var bestMatch = if (statsMode) ItemType(id, dmg ?: -1) else null + if (matchingTypes != null) { + for (type in matchingTypes) { + if (dmg == type.damage || (bestMatch == null && type.damage < 0)) { + bestMatch = type + } + } + } + if (bestMatch != null) { + result.addTo(bestMatch, slot.getInt("Count").toLong()) } } if (contained.isEmpty()) continue - if (statsMode) inventories.addAll(contained) + if (statsMode) { + contained.forEach(::flatten) + inventories.addAll(contained) + } for (e in contained[0].object2LongEntrySet()) { result.addTo(e.key, e.longValue) } } + flatten(result) return inventories } +fun flatten(items: Object2LongMap) { + val updates = Object2LongOpenHashMap() + for (e in items.object2LongEntrySet()) { + if (e.key.flattened) continue + val flattened = e.key.flatten() + if (flattened == e.key) continue + updates[flattened] = if (flattened in updates) updates.getLong(flattened) else items.getLong(flattened) + e.longValue + e.setValue(0) + } + items.putAll(updates) + items.values.removeIf(LongPredicate{ it == 0L }) +} + fun getSubResults(slot: CompoundTag, needles: Collection, statsMode: Boolean): List> { if (!slot.has("tag", Tag.COMPOUND)) return emptyList() val tag = slot.getCompound("tag") diff --git a/src/main/kotlin/de/skyrising/mc/scanner/nbt.kt b/src/main/kotlin/de/skyrising/mc/scanner/nbt.kt index e380bd4..23d82ac 100644 --- a/src/main/kotlin/de/skyrising/mc/scanner/nbt.kt +++ b/src/main/kotlin/de/skyrising/mc/scanner/nbt.kt @@ -360,6 +360,7 @@ data class CompoundTag(val value: MutableMap) : Tag(), MutableMap(key) { it } fun getByteArray(key: String) = getTyped(key, ByteArrayTag::value) fun getString(key: String) = getTyped(key, StringTag::value) + fun getLongArray(key: String) = getTyped(key, LongArrayTag::value) fun getInt(key: String): Int { val tag = get(key, INTEGER) ?: throw IllegalArgumentException("No int value for $key") diff --git a/src/main/kotlin/de/skyrising/mc/scanner/needles.kt b/src/main/kotlin/de/skyrising/mc/scanner/needles.kt new file mode 100644 index 0000000..d3781f9 --- /dev/null +++ b/src/main/kotlin/de/skyrising/mc/scanner/needles.kt @@ -0,0 +1,186 @@ +package de.skyrising.mc.scanner + +import kotlinx.serialization.* +import kotlinx.serialization.json.* + +interface Needle + +private val BLOCK_STATE_MAP = readBlockStateMap() +private val ITEM_MAP = readItemMap() + +data class Identifier(val namespace: String, val path: String) : Comparable { + constructor(id: String) : this(getNamespace(id), getPath(id)) + + override fun compareTo(other: Identifier): Int { + val namespaceCompare = namespace.compareTo(other.namespace) + if (namespaceCompare != 0) return namespaceCompare + return path.compareTo(other.path) + } + + override fun toString() = "$namespace:$path" + + companion object { + fun getNamespace(id: String) = id.substringBefore(':', "minecraft") + fun getPath(id: String) = id.substringAfter(':') + } +} + +data class BlockState(val id: Identifier, val properties: Map = emptyMap()) : Needle, Comparable { + fun unflatten(): List { + val list = mutableListOf() + var id: Int? = null + var mask = 0 + for (i in BLOCK_STATE_MAP.indices) { + val mapped = BLOCK_STATE_MAP[i] ?: continue + if (!mapped.matches(this)) continue + val currentId = i shr 4 + if (id != null && currentId != id) { + list.add(BlockIdMask(id, mask, this)) + mask = 0 + } + id = currentId + mask = mask or (1 shl (i and 0xf)) + } + if (id != null) list.add(BlockIdMask(id, mask, this)) + return list + } + + fun matches(predicate: BlockState): Boolean { + if (id != predicate.id) return false + for (e in predicate.properties.entries) { + if (!properties.containsKey(e.key) || properties[e.key] != e.value) return false + } + return true + } + + override fun compareTo(other: BlockState): Int { + val idComp = id.compareTo(other.id) + if (idComp != 0) return idComp + if (properties == other.properties) return 0 + return properties.hashCode().compareTo(other.properties.hashCode()) or 1 + } + + fun format(): String { + if (properties.isEmpty()) return id.toString() + val sb = StringBuilder(id.toString()).append('[') + var first = true + for (e in properties.entries) { + if (!first) sb.append(',') + first = false + sb.append(e.key).append('=').append(e.value) + } + return sb.append(']').toString() + } + + override fun toString() = "BlockState(${format()})" + + companion object { + fun parse(desc: String): BlockState { + if (!desc.contains('[')) return BlockState(Identifier(desc)) + val bracketIndex = desc.indexOf('[') + val closingBracketIndex = desc.indexOf(']', bracketIndex + 1) + if (closingBracketIndex != desc.lastIndex) throw IllegalArgumentException("Expected closing ]") + val id = Identifier(desc.substring(0, bracketIndex)) + val properties = LinkedHashMap() + for (kvPair in desc.substring(bracketIndex + 1, closingBracketIndex).split(',')) { + val equalsIndex = kvPair.indexOf('=') + if (equalsIndex < 0) throw IllegalArgumentException("Invalid key-value pair") + properties[kvPair.substring(0, equalsIndex)] = kvPair.substring(equalsIndex + 1) + } + return BlockState(id, properties) + } + + fun from(nbt: CompoundTag): BlockState { + val id = Identifier(nbt.getString("Name")) + if (!nbt.has("Properties", Tag.COMPOUND)) return BlockState(id) + val properties = LinkedHashMap() + for (e in nbt.getCompound("Properties").entries) { + properties[e.key] = (e.value as StringTag).value + } + return BlockState(id, properties) + } + } +} + +data class BlockIdMask(val id: Int, val metaMask: Int, val blockState: BlockState? = null) : Needle { + fun matches(id: Int, meta: Int) = this.id == id && (1 shl meta) and metaMask != 0 + + infix fun or(other: BlockIdMask): BlockIdMask { + if (other.id != id) throw IllegalArgumentException("Cannot combine different ids") + return BlockIdMask(id, metaMask or other.metaMask) + } + + override fun toString(): String { + if (blockState == null) return "BlockIdMask(%d:0x%04x)".format(id, metaMask) + return "BlockIdMask(%d:0x%04x %s)".format(id, metaMask, blockState.format()) + } +} + +data class ItemType(val id: Identifier, val damage: Int = -1, val flattened: Boolean = damage < 0) : Needle, Comparable { + fun flatten(): ItemType { + if (this.flattened) return this + var flattened = ITEM_MAP[this] + if (flattened == null) flattened = ITEM_MAP[ItemType(id, 0)] + if (flattened == null) return ItemType(id, damage, true) + return ItemType(flattened, -1, true) + } + + fun unflatten(): List { + if (!flattened) return emptyList() + val list = mutableListOf() + for (e in ITEM_MAP.entries) { + if (e.value == this.id && e.key.id != this.id) { + list.add(e.key) + } + } + return list + } + + override fun toString(): String { + return "ItemType(${format()})" + } + + fun format() = if (damage < 0 || (flattened && damage == 0)) "$id" else "$id.$damage" + + override fun compareTo(other: ItemType): Int { + val idComp = id.compareTo(other.id) + if (idComp != 0) return idComp + return damage.compareTo(other.damage) + } + + companion object { + fun parse(str: String): ItemType { + if (!str.contains('.')) return ItemType(Identifier(str)) + return ItemType(Identifier(str.substringBefore('.')), str.substringAfter('.').toInt()) + } + } +} + +private fun getFlatteningMap(name: String): JsonObject = Json.decodeFromString(BlockIdMask::class.java.getResourceAsStream("/flattening/$name.json")!!.reader().readText()) + +private fun readBlockStateMap(): Array { + val jsonMap = getFlatteningMap("block_states") + val map = Array(256 * 16) { null } + for (e in jsonMap.entries) { + val id = if (e.key.contains(':')) { + e.key.substringBefore(':').toInt() shl 4 or e.key.substringAfter(':').toInt() + } else { + e.key.toInt() shl 4 + } + map[id] = BlockState.parse(e.value.jsonPrimitive.content) + } + for (i in map.indices) { + if (map[i] != null) continue + map[i] = map[i and 0xff0] + } + return map +} + +private fun readItemMap(): Map { + val jsonMap = getFlatteningMap("items") + val map = LinkedHashMap() + for (e in jsonMap.entries) { + map[ItemType.parse(e.key)] = Identifier(e.value.jsonPrimitive.content) + } + return map +} diff --git a/src/main/kotlin/de/skyrising/mc/scanner/region.kt b/src/main/kotlin/de/skyrising/mc/scanner/region.kt index ed9a290..2b64b6f 100644 --- a/src/main/kotlin/de/skyrising/mc/scanner/region.kt +++ b/src/main/kotlin/de/skyrising/mc/scanner/region.kt @@ -1,10 +1,15 @@ package de.skyrising.mc.scanner -import java.io.IOException -import java.nio.ByteBuffer +import de.skyrising.mc.scanner.region.RegionReader +import de.skyrising.mc.scanner.region.RegionVisitor +import it.unimi.dsi.fastutil.ints.* +import it.unimi.dsi.fastutil.objects.Object2IntMap +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap import java.nio.file.Files import java.nio.file.Path import java.nio.file.StandardOpenOption +import kotlin.math.ceil +import kotlin.math.log2 data class RegionFile(private val path: Path) : Scannable { private val x: Int @@ -28,123 +33,125 @@ data class RegionFile(private val path: Path) : Scannable { override fun scan(needles: Collection, statsMode: Boolean): List { val results = mutableListOf() - val blockNeedles = needles.filterIsInstance().mapTo(mutableSetOf(), BlockType::id).toTypedArray().toIntArray() + val blockIdNeedles: Set = needles.filterIsInstanceTo(mutableSetOf()) + val blockStateNeedles: Set = needles.filterIsInstanceTo(mutableSetOf()) val itemNeedles: Set = needles.filterIsInstanceTo(mutableSetOf()) - val channel = Files.newByteChannel(path, StandardOpenOption.READ) - val fileSize = channel.size() - val tableBuf = ByteBuffer.allocateDirect(1024 * 2 * 4) - readFully(channel, tableBuf) - tableBuf.flip() - var chunkBuf: ByteBuffer? = null - var decompressedBuf: ByteArray? = null - val tableInts = tableBuf.asIntBuffer() - for (i in 0 until 1024) { - val location = tableInts[i] - if (location == 0) continue - val chunkPos = ChunkPos(dimension, (x shl 5) or (i and 0x1f), (z shl 5) or (i shr 5)) - val offset = location shr 8 - val sectors = location and 0xff - if (chunkBuf == null || chunkBuf.capacity() < sectors * 4096) { - chunkBuf = ByteBuffer.allocateDirect(sectors * 4096)!! - } - chunkBuf.position(0) - val byteOffset = offset * 4096L - chunkBuf.limit(minOf(sectors * 4096, (fileSize - byteOffset).toInt())) - channel.position(byteOffset) - try { - readFully(channel, chunkBuf) - } catch (e: IOException) { - throw IOException("Could not read chunk $chunkPos in $this at offset ${offset * 4096L}, size ${sectors * 4096}, file size $fileSize", e) - } - chunkBuf.flip() - val length = chunkBuf.int - 1 - chunkBuf.limit(length + 5) - val compression = chunkBuf.get() - //println("$chunkPos, offset=$offset, sectors=$sectors, length=$length, compression=$compression, buf=$chunkBuf") - if (decompressedBuf == null) decompressedBuf = ByteArray(length) + RegionReader(Files.newByteChannel(path, StandardOpenOption.READ)).use { + it.accept(RegionVisitor.visitAllChunks { x, z, version, data -> + scanChunk(results, blockIdNeedles, blockStateNeedles, itemNeedles, statsMode, ChunkPos(dimension, x, z), version, data) + }) + } + return results + } - val chunk = when (compression.toInt()) { - 1 -> { - val buf = gunzip(chunkBuf, decompressedBuf) - decompressedBuf = buf.array() - Tag.read(ByteBufferDataInput(buf)) - } - 2 -> { - val buf = inflate(chunkBuf, decompressedBuf) - decompressedBuf = buf.array() - Tag.read(ByteBufferDataInput(buf)) - } - else -> { - System.err.println("Unsupported compression: $compression") - continue + override fun toString(): String { + return "RegionFile($dimension, x=$x, z=$z)" + } +} + +fun scanChunk(results: MutableList, blockIdNeedles: Set, blockStateNeedles: Set, itemNeedles: Set, statsMode: Boolean, chunkPos: ChunkPos, version: Int, data: CompoundTag) { + val dimension = chunkPos.dimension + val flattened = version >= 1451 // 17w47a + if (!flattened && blockIdNeedles.isNotEmpty()) { + val sections = data.getList("Sections") + val matches = Object2IntOpenHashMap() + for (section in sections) { + val y = section.getInt("Y") + val blocks = section.getByteArray("Blocks") + //val add = if (section.has("Add", Tag.BYTE_ARRAY)) section.getByteArray("Add") else null + for (blockNeedle in blockIdNeedles) { + val count = blocks.count { it == blockNeedle.id.toByte() } + if (count != 0) { + matches[blockNeedle] = matches.getInt(blockNeedle) + count } } - if (chunk !is CompoundTag) { - System.err.println("Expected chunk to be a CompoundTag") - continue + if (matches.size == blockIdNeedles.size) break + } + for (match in matches) { + results.add(SearchResult(match.key.blockState ?: match.key, chunkPos, match.value.toLong())) + } + } + if (flattened && blockStateNeedles.isNotEmpty()) { + val sections = data.getList("Sections") + val matches = Object2IntOpenHashMap() + for (section in sections) { + if (!section.has("Palette", Tag.LIST)) continue + val palette = section.getList("Palette") + val matchingPaletteEntries = Int2ObjectOpenHashMap() + palette.forEachIndexed { index, paletteEntry -> + val state = BlockState.from(paletteEntry) + for (blockNeedle in blockStateNeedles) { + if (state.matches(blockNeedle)) matchingPaletteEntries[index] = blockNeedle + } } - if (!chunk.has("DataVersion", Tag.INTEGER)) { - //System.err.println("No data version $chunkPos") - continue + if (matchingPaletteEntries.isEmpty()) continue + val blockStates = section.getLongArray("BlockStates") + val counts = scanBlockStates(matchingPaletteEntries, blockStates, palette.size, version < 2529) + for (e in counts.object2IntEntrySet()) { + matches[e.key] = matches.getInt(e.key) + e.intValue } - val dataVersion = chunk.getInt("DataVersion") - val flattened = dataVersion >= 1451 // 17w47a - val level = chunk.getCompound("Level") - if (blockNeedles.isNotEmpty() && !flattened) { - val sections = level.getList("Sections") - val matches = mutableMapOf() - for (section in sections) { - val y = section.getInt("Y") - val blocks = section.getByteArray("Blocks") - //val add = if (section.has("Add", Tag.BYTE_ARRAY)) section.getByteArray("Add") else null - for (blockNeedle in blockNeedles) { - val count = blocks.count { it == blockNeedle.toByte() } - if (count != 0) { - val type = BlockType(blockNeedle) - matches[type] = (matches[type] ?: 0) + count - } - } - if (matches.size == blockNeedles.size) break - } - for (match in matches) { - results.add(SearchResult(match.key, chunkPos, match.value.toLong())) - } + } + for (match in matches) { + results.add(SearchResult(match.key, chunkPos, match.value.toLong())) + } + } + if (itemNeedles.isNotEmpty() || statsMode) { + if (data.has("TileEntities", Tag.LIST)) { + for (blockEntity in data.getList("TileEntities")) { + if (!blockEntity.has("Items", Tag.LIST)) continue + val contents = scanInventory(blockEntity.getList("Items"), itemNeedles, statsMode) + val pos = BlockPos(dimension, blockEntity.getInt("x"), blockEntity.getInt("y"), blockEntity.getInt("z")) + val container = Container(blockEntity.getString("id"), pos) + addResults(results, container, contents, statsMode) } - if (itemNeedles.isNotEmpty() || statsMode) { - if (level.has("TileEntities", Tag.LIST)) { - for (blockEntity in level.getList("TileEntities")) { - if (!blockEntity.has("Items", Tag.LIST)) continue - val contents = scanInventory(blockEntity.getList("Items"), itemNeedles, statsMode) - val pos = BlockPos(dimension, blockEntity.getInt("x"), blockEntity.getInt("y"), blockEntity.getInt("z")) - val container = Container(blockEntity.getString("id"), pos) - addResults(results, container, contents, statsMode) - } - } - if (level.has("Entities", Tag.LIST)) { - for (entity in level.getList("Entities")) { - val id = entity.getString("id") - val items = mutableListOf() - if (entity.has("HandItems", Tag.LIST)) items.addAll(entity.getList("HandItems")) - if (entity.has("ArmorItems", Tag.LIST)) items.addAll(entity.getList("ArmorItems")) - if (entity.has("Inventory", Tag.LIST)) items.addAll(entity.getList("Inventory")) - if (entity.has("Item", Tag.COMPOUND)) items.add(entity.getCompound("Item")) - val listTag = ListTag(items.filter(CompoundTag::isNotEmpty)) - if (listTag.isNotEmpty()) { - val posTag = entity.getList("Pos") - val pos = Vec3d(dimension, posTag[0].value, posTag[1].value, posTag[2].value) - val entityLocation = Entity(id, pos) - val contents = scanInventory(listTag, itemNeedles, statsMode) - addResults(results, entityLocation, contents, statsMode) - } - } + } + if (data.has("Entities", Tag.LIST)) { + for (entity in data.getList("Entities")) { + val id = entity.getString("id") + val items = mutableListOf() + if (entity.has("HandItems", Tag.LIST)) items.addAll(entity.getList("HandItems")) + if (entity.has("ArmorItems", Tag.LIST)) items.addAll(entity.getList("ArmorItems")) + if (entity.has("Inventory", Tag.LIST)) items.addAll(entity.getList("Inventory")) + if (entity.has("Item", Tag.COMPOUND)) items.add(entity.getCompound("Item")) + val listTag = ListTag(items.filter(CompoundTag::isNotEmpty)) + if (listTag.isNotEmpty()) { + val posTag = entity.getList("Pos") + val pos = Vec3d(dimension, posTag[0].value, posTag[1].value, posTag[2].value) + val entityLocation = Entity(id, pos) + val contents = scanInventory(listTag, itemNeedles, statsMode) + addResults(results, entityLocation, contents, statsMode) } } } - channel.close() - return results } +} - override fun toString(): String { - return "RegionFile($dimension, x=$x, z=$z)" +fun scanBlockStates(ids: Int2ObjectMap, blockStates: LongArray, paletteSize: Int, packed: Boolean): Object2IntMap { + val counts = Object2IntOpenHashMap() + val bits = ceil(log2(paletteSize.toDouble())).toInt() + val mask = (1 shl bits) - 1 + var longIndex = 0 + var subIndex = 0 + repeat(16 * 16 * 16) { + if (subIndex + bits > 64 && !packed) { + longIndex++ + subIndex = 0 + } + val id = if (subIndex + bits > 64) { + val loBitsCount = 64 - subIndex + val loBits = (blockStates[longIndex] ushr subIndex).toInt() + val hiBits = blockStates[longIndex + 1].toInt() + longIndex++ + (loBits or (hiBits shl loBitsCount)) and mask + } else { + (blockStates[longIndex] ushr subIndex).toInt() and mask + } + if (id in ids) { + val state = ids[id] + counts[state] = counts.getInt(state) + 1 + } + if (subIndex + bits == 64) longIndex++ + subIndex = (subIndex + bits) and 0x3f } + return counts } \ No newline at end of file diff --git a/src/main/kotlin/de/skyrising/mc/scanner/region/io.kt b/src/main/kotlin/de/skyrising/mc/scanner/region/io.kt new file mode 100644 index 0000000..9277903 --- /dev/null +++ b/src/main/kotlin/de/skyrising/mc/scanner/region/io.kt @@ -0,0 +1,102 @@ +package de.skyrising.mc.scanner.region + +import de.skyrising.mc.scanner.* +import java.io.IOException +import java.nio.ByteBuffer +import java.nio.channels.SeekableByteChannel + +class RegionReader(private val channel: SeekableByteChannel): AutoCloseable { + private var fileSize: Long = 0 + private var chunkBuf: ByteBuffer? = null + private var decompressedBuf: ByteArray? = null + + fun accept(visitor: RegionVisitor) { + channel.position(0) + fileSize = channel.size() + val tableBuf = ByteBuffer.allocateDirect(1024 * 2 * 4) + readFully(channel, tableBuf) + tableBuf.flip() + val tableInts = tableBuf.asIntBuffer() + for (i in 0 until 1024) { + val location = tableInts[i] + if (location == 0) continue + val chunkX = i and 0x1f + val chunkZ = i shr 5 + val chunkVisitor = visitor.visitChunk(chunkX, chunkZ) ?: continue + val offset = location shr 8 + val sectors = location and 0xff + visitChunk(chunkVisitor, offset, sectors, chunkX, chunkZ) + } + } + + override fun close() { + channel.close() + } + + private fun readChunk(offset: Int, sectors: Int, chunkX: Int, chunkZ: Int): ByteBuffer { + var chunkBuf = this.chunkBuf + if (chunkBuf == null || chunkBuf.capacity() < sectors * 4096) { + chunkBuf = ByteBuffer.allocateDirect(sectors * 4096)!! + } + chunkBuf.position(0) + val byteOffset = offset * 4096L + chunkBuf.limit(minOf(sectors * 4096, (fileSize - byteOffset).toInt())) + channel.position(byteOffset) + try { + readFully(channel, chunkBuf) + } catch (e: IOException) { + throw IOException("Could not read chunk $chunkX, $chunkZ at offset ${offset * 4096L}, size ${sectors * 4096}, file size $fileSize", e) + } + chunkBuf.flip() + return chunkBuf + } + + private fun visitChunk(visitor: ChunkVisitor, offset: Int, sectors: Int, chunkX: Int, chunkZ: Int) { + val chunkBuf = readChunk(offset, sectors, chunkX, chunkZ) + val length = chunkBuf.int - 1 + chunkBuf.limit(length + 5) + val compression = chunkBuf.get() + //println("$chunkPos, offset=$offset, sectors=$sectors, length=$length, compression=$compression, buf=$chunkBuf") + if (decompressedBuf == null) decompressedBuf = ByteArray(length) + + val chunk = when (compression.toInt()) { + 1 -> { + try { + val buf = gunzip(chunkBuf, decompressedBuf) + decompressedBuf = buf.array() + Tag.read(ByteBufferDataInput(buf)) + } catch (e: Exception) { + visitor.onInvalidData(e) + return + } + } + 2 -> { + try { + val buf = inflate(chunkBuf, decompressedBuf) + decompressedBuf = buf.array() + Tag.read(ByteBufferDataInput(buf)) + } catch (e: Exception) { + visitor.onInvalidData(e) + return + } + } + else -> { + visitor.onUnsupportedCompressionType(compression.toInt()) + return + } + } + if (chunk !is CompoundTag) { + visitor.onInvalidData(IllegalArgumentException("Expected chunk to be a CompoundTag")) + return + } + if (!chunk.has("DataVersion", Tag.INTEGER)) { + visitor.onInvalidData(IllegalArgumentException("No data version")) + return + } + if (!chunk.has("Level", Tag.COMPOUND)) { + visitor.onInvalidData(IllegalArgumentException("No level tag")) + return + } + visitor.visit(chunk.getInt("DataVersion"), chunk.getCompound("Level")) + } +} \ No newline at end of file diff --git a/src/main/kotlin/de/skyrising/mc/scanner/region/tree.kt b/src/main/kotlin/de/skyrising/mc/scanner/region/tree.kt new file mode 100644 index 0000000..8b2fc9d --- /dev/null +++ b/src/main/kotlin/de/skyrising/mc/scanner/region/tree.kt @@ -0,0 +1,30 @@ +package de.skyrising.mc.scanner.region + +import de.skyrising.mc.scanner.CompoundTag + +class RegionNode : RegionVisitor() { + private val chunks = Array(32 * 32) { null } + + fun accept(visitor: RegionVisitor) { + for (i in chunks.indices) { + val chunk = chunks[i] ?: continue + visitor.visitChunk(i and 0x1f, i shr 5)?.let { chunk.accept(it) } + } + } + + override fun visitChunk(x: Int, z: Int): ChunkNode { + val node = ChunkNode() + chunks[(z shl 5) or x] = node + return node + } +} + +class ChunkNode : ChunkVisitor() { + private var version = 0 + private var data: CompoundTag? = null + + fun accept(visitor: ChunkVisitor) { + val data = this.data + if (data != null) visitor.visit(version, data) + } +} \ No newline at end of file diff --git a/src/main/kotlin/de/skyrising/mc/scanner/region/visitors.kt b/src/main/kotlin/de/skyrising/mc/scanner/region/visitors.kt new file mode 100644 index 0000000..f6baf14 --- /dev/null +++ b/src/main/kotlin/de/skyrising/mc/scanner/region/visitors.kt @@ -0,0 +1,47 @@ +package de.skyrising.mc.scanner.region + +import de.skyrising.mc.scanner.CompoundTag + +abstract class RegionVisitor() { + protected var delegate: RegionVisitor? = null + + constructor(regionVisitor: RegionVisitor) : this() { + this.delegate = regionVisitor + } + + open fun visitChunk(x: Int, z: Int): ChunkVisitor? { + return delegate?.visitChunk(x, z) + } + + companion object { + fun visitAllChunks(visit: (x: Int, z: Int, version: Int, data: CompoundTag) -> Unit) = object : RegionVisitor() { + override fun visitChunk(x: Int, z: Int): ChunkVisitor { + return object : ChunkVisitor() { + override fun visit(version: Int, data: CompoundTag) { + visit(x, z, version, data) + } + } + } + } + } +} + +abstract class ChunkVisitor() { + protected var delegate: ChunkVisitor? = null + + constructor(chunkVisitor: ChunkVisitor) : this() { + this.delegate = chunkVisitor + } + + open fun visit(version: Int, data: CompoundTag) { + delegate?.visit(version, data) + } + + open fun onUnsupportedCompressionType(type: Int) { + delegate?.onUnsupportedCompressionType(type) + } + + open fun onInvalidData(ex: Exception) { + delegate?.onInvalidData(ex) + } +} \ No newline at end of file diff --git a/src/main/kotlin/de/skyrising/mc/scanner/scanner.kt b/src/main/kotlin/de/skyrising/mc/scanner/scanner.kt index 1379255..62c4b34 100644 --- a/src/main/kotlin/de/skyrising/mc/scanner/scanner.kt +++ b/src/main/kotlin/de/skyrising/mc/scanner/scanner.kt @@ -16,7 +16,7 @@ fun main(args: Array) { val parser = OptionParser() val helpArg = parser.accepts("help").forHelp() val nonOptions = parser.nonOptions() - val blockArg = parser.acceptsAll(listOf("b", "block"), "Add a block to search for").withRequiredArg().ofType(Integer::class.java) + val blockArg = parser.acceptsAll(listOf("b", "block"), "Add a block to search for").withRequiredArg() val itemArg = parser.acceptsAll(listOf("i", "item"), "Add an item to search for").withRequiredArg() val statsArg = parser.accepts("stats", "Calculate statistics for storage tech") val threadsArg = parser.acceptsAll(listOf("t", "threads"), "Set the number of threads to use").withRequiredArg().ofType(Integer::class.java) @@ -39,10 +39,14 @@ fun main(args: Array) { return } for (block in options.valuesOf(blockArg)) { - needles.add(BlockType(block.toInt())) + val state = BlockState.parse(block) + needles.add(state) + needles.addAll(state.unflatten()) } for (item in options.valuesOf(itemArg)) { - needles.add(ItemType(if (':' in item) item else "minecraft:$item")) + val itemType = ItemType.parse(item) + needles.add(itemType) + needles.addAll(itemType.unflatten()) } if (options.has(threadsArg)) threads = options.valueOf(threadsArg).toInt() statsMode = options.has(statsArg) @@ -138,6 +142,7 @@ fun getHaystack(path: Path): Set { } fun runScan(path: Path, outPath: Path, executor: ExecutorService, needles: Collection, statsMode: Boolean) { + println(needles) val haystack = getHaystack(path) var totalSize = 0L for (s in haystack) totalSize += s.size @@ -226,8 +231,8 @@ fun runScan(path: Path, outPath: Path, executor: ExecutorService, needles: Colle if (!statsMode) { val totalTypes = total.keys.sortedWith { a, b -> if (a.javaClass != b.javaClass) return@sortedWith a.javaClass.hashCode() - b.javaClass.hashCode() - if (a is ItemType && b is ItemType) return@sortedWith a.id.compareTo(b.id) - if (a is BlockType && b is BlockType) return@sortedWith Integer.compareUnsigned(a.id, b.id) + if (a is ItemType && b is ItemType) return@sortedWith a.compareTo(b) + if (a is BlockState && b is BlockState) return@sortedWith a.compareTo(b) 0 } for (type in totalTypes) { @@ -246,11 +251,11 @@ fun runScan(path: Path, outPath: Path, executor: ExecutorService, needles: Colle locationsFile.println('"') } locationsFile.close() - val types = stats.keys.sortedBy { it.id } + val types = stats.keys.sorted() val countsFile = PrintStream(Files.newOutputStream(outPath.resolve("counts.csv")), false, "UTF-8") countsFile.println("Type,Total,Number of Inventories") for (type in types) { - countsFile.print(type.id) + countsFile.print(type.format()) countsFile.print(',') countsFile.print(total.getLong(type)) countsFile.print(',') @@ -260,7 +265,7 @@ fun runScan(path: Path, outPath: Path, executor: ExecutorService, needles: Colle val statsFile = PrintStream(Files.newOutputStream(outPath.resolve("stats.csv")), false, "UTF-8") for (type in types) { statsFile.print(',') - statsFile.print(type.id) + statsFile.print(type.format()) } statsFile.println() for (a in types) { @@ -286,10 +291,7 @@ interface Scannable { fun scan(needles: Collection, statsMode: Boolean): List } interface Location -interface Needle -data class BlockType(val id: Int) : Needle -data class ItemType(val id: String) : Needle data class SubLocation(val parent: Location, val index: Int): Location data class ChunkPos(val dimension: String, val x: Int, val z: Int) : Location data class Container(val type: String, val location: Location) : Location diff --git a/src/main/resources/flattening/block_states.json b/src/main/resources/flattening/block_states.json new file mode 100644 index 0000000..bc4f84c --- /dev/null +++ b/src/main/resources/flattening/block_states.json @@ -0,0 +1,1675 @@ +{ + "0": "minecraft:air", + "1:0": "minecraft:stone", + "1:1": "minecraft:granite", + "1:2": "minecraft:polished_granite", + "1:3": "minecraft:diorite", + "1:4": "minecraft:polished_diorite", + "1:5": "minecraft:andesite", + "1:6": "minecraft:polished_andesite", + "2": "minecraft:grass_block[snowy=false]", + "3:0": "minecraft:dirt", + "3:1": "minecraft:coarse_dirt", + "3:2": "minecraft:podzol[snowy=false]", + "4": "minecraft:cobblestone", + "5:0": "minecraft:oak_planks", + "5:1": "minecraft:spruce_planks", + "5:2": "minecraft:birch_planks", + "5:3": "minecraft:jungle_planks", + "5:4": "minecraft:acacia_planks", + "5:5": "minecraft:dark_oak_planks", + "6:0": "minecraft:oak_sapling[stage=0]", + "6:1": "minecraft:spruce_sapling[stage=0]", + "6:2": "minecraft:birch_sapling[stage=0]", + "6:3": "minecraft:jungle_sapling[stage=0]", + "6:4": "minecraft:acacia_sapling[stage=0]", + "6:5": "minecraft:dark_oak_sapling[stage=0]", + "6:8": "minecraft:oak_sapling[stage=1]", + "6:9": "minecraft:spruce_sapling[stage=1]", + "6:10": "minecraft:birch_sapling[stage=1]", + "6:11": "minecraft:jungle_sapling[stage=1]", + "6:12": "minecraft:acacia_sapling[stage=1]", + "6:13": "minecraft:dark_oak_sapling[stage=1]", + "7": "minecraft:bedrock", + "8:0": "minecraft:water[level=0]", + "8:1": "minecraft:water[level=1]", + "8:2": "minecraft:water[level=2]", + "8:3": "minecraft:water[level=3]", + "8:4": "minecraft:water[level=4]", + "8:5": "minecraft:water[level=5]", + "8:6": "minecraft:water[level=6]", + "8:7": "minecraft:water[level=7]", + "8:8": "minecraft:water[level=8]", + "8:9": "minecraft:water[level=9]", + "8:10": "minecraft:water[level=10]", + "8:11": "minecraft:water[level=11]", + "8:12": "minecraft:water[level=12]", + "8:13": "minecraft:water[level=13]", + "8:14": "minecraft:water[level=14]", + "8:15": "minecraft:water[level=15]", + "9:0": "minecraft:water[level=0]", + "9:1": "minecraft:water[level=1]", + "9:2": "minecraft:water[level=2]", + "9:3": "minecraft:water[level=3]", + "9:4": "minecraft:water[level=4]", + "9:5": "minecraft:water[level=5]", + "9:6": "minecraft:water[level=6]", + "9:7": "minecraft:water[level=7]", + "9:8": "minecraft:water[level=8]", + "9:9": "minecraft:water[level=9]", + "9:10": "minecraft:water[level=10]", + "9:11": "minecraft:water[level=11]", + "9:12": "minecraft:water[level=12]", + "9:13": "minecraft:water[level=13]", + "9:14": "minecraft:water[level=14]", + "9:15": "minecraft:water[level=15]", + "10:0": "minecraft:lava[level=0]", + "10:1": "minecraft:lava[level=1]", + "10:2": "minecraft:lava[level=2]", + "10:3": "minecraft:lava[level=3]", + "10:4": "minecraft:lava[level=4]", + "10:5": "minecraft:lava[level=5]", + "10:6": "minecraft:lava[level=6]", + "10:7": "minecraft:lava[level=7]", + "10:8": "minecraft:lava[level=8]", + "10:9": "minecraft:lava[level=9]", + "10:10": "minecraft:lava[level=10]", + "10:11": "minecraft:lava[level=11]", + "10:12": "minecraft:lava[level=12]", + "10:13": "minecraft:lava[level=13]", + "10:14": "minecraft:lava[level=14]", + "10:15": "minecraft:lava[level=15]", + "11:0": "minecraft:lava[level=0]", + "11:1": "minecraft:lava[level=1]", + "11:2": "minecraft:lava[level=2]", + "11:3": "minecraft:lava[level=3]", + "11:4": "minecraft:lava[level=4]", + "11:5": "minecraft:lava[level=5]", + "11:6": "minecraft:lava[level=6]", + "11:7": "minecraft:lava[level=7]", + "11:8": "minecraft:lava[level=8]", + "11:9": "minecraft:lava[level=9]", + "11:10": "minecraft:lava[level=10]", + "11:11": "minecraft:lava[level=11]", + "11:12": "minecraft:lava[level=12]", + "11:13": "minecraft:lava[level=13]", + "11:14": "minecraft:lava[level=14]", + "11:15": "minecraft:lava[level=15]", + "12:0": "minecraft:sand", + "12:1": "minecraft:red_sand", + "13": "minecraft:gravel", + "14": "minecraft:gold_ore", + "15": "minecraft:iron_ore", + "16": "minecraft:coal_ore", + "17:0": "minecraft:oak_log[axis=y]", + "17:1": "minecraft:spruce_log[axis=y]", + "17:2": "minecraft:birch_log[axis=y]", + "17:3": "minecraft:jungle_log[axis=y]", + "17:4": "minecraft:oak_log[axis=x]", + "17:5": "minecraft:spruce_log[axis=x]", + "17:6": "minecraft:birch_log[axis=x]", + "17:7": "minecraft:jungle_log[axis=x]", + "17:8": "minecraft:oak_log[axis=z]", + "17:9": "minecraft:spruce_log[axis=z]", + "17:10": "minecraft:birch_log[axis=z]", + "17:11": "minecraft:jungle_log[axis=z]", + "17:12": "minecraft:oak_bark", + "17:13": "minecraft:spruce_bark", + "17:14": "minecraft:birch_bark", + "17:15": "minecraft:jungle_bark", + "18:0": "minecraft:oak_leaves[check_decay=false,decayable=true]", + "18:1": "minecraft:spruce_leaves[check_decay=false,decayable=true]", + "18:2": "minecraft:birch_leaves[check_decay=false,decayable=true]", + "18:3": "minecraft:jungle_leaves[check_decay=false,decayable=true]", + "18:4": "minecraft:oak_leaves[check_decay=false,decayable=false]", + "18:5": "minecraft:spruce_leaves[check_decay=false,decayable=false]", + "18:6": "minecraft:birch_leaves[check_decay=false,decayable=false]", + "18:7": "minecraft:jungle_leaves[check_decay=false,decayable=false]", + "18:8": "minecraft:oak_leaves[check_decay=true,decayable=true]", + "18:9": "minecraft:spruce_leaves[check_decay=true,decayable=true]", + "18:10": "minecraft:birch_leaves[check_decay=true,decayable=true]", + "18:11": "minecraft:jungle_leaves[check_decay=true,decayable=true]", + "18:12": "minecraft:oak_leaves[check_decay=true,decayable=false]", + "18:13": "minecraft:spruce_leaves[check_decay=true,decayable=false]", + "18:14": "minecraft:birch_leaves[check_decay=true,decayable=false]", + "18:15": "minecraft:jungle_leaves[check_decay=true,decayable=false]", + "19:0": "minecraft:sponge", + "19:1": "minecraft:wet_sponge", + "20": "minecraft:glass", + "21": "minecraft:lapis_ore", + "22": "minecraft:lapis_block", + "23:0": "minecraft:dispenser[triggered=false,facing=down]", + "23:1": "minecraft:dispenser[triggered=false,facing=up]", + "23:2": "minecraft:dispenser[triggered=false,facing=north]", + "23:3": "minecraft:dispenser[triggered=false,facing=south]", + "23:4": "minecraft:dispenser[triggered=false,facing=west]", + "23:5": "minecraft:dispenser[triggered=false,facing=east]", + "23:8": "minecraft:dispenser[triggered=true,facing=down]", + "23:9": "minecraft:dispenser[triggered=true,facing=up]", + "23:10": "minecraft:dispenser[triggered=true,facing=north]", + "23:11": "minecraft:dispenser[triggered=true,facing=south]", + "23:12": "minecraft:dispenser[triggered=true,facing=west]", + "23:13": "minecraft:dispenser[triggered=true,facing=east]", + "24:0": "minecraft:sandstone", + "24:1": "minecraft:chiseled_sandstone", + "24:2": "minecraft:cut_sandstone", + "25": "minecraft:note_block", + "26:0": "minecraft:red_bed[part=foot,facing=south,occupied=false]", + "26:1": "minecraft:red_bed[part=foot,facing=west,occupied=false]", + "26:2": "minecraft:red_bed[part=foot,facing=north,occupied=false]", + "26:3": "minecraft:red_bed[part=foot,facing=east,occupied=false]", + "26:8": "minecraft:red_bed[part=head,facing=south,occupied=false]", + "26:9": "minecraft:red_bed[part=head,facing=west,occupied=false]", + "26:10": "minecraft:red_bed[part=head,facing=north,occupied=false]", + "26:11": "minecraft:red_bed[part=head,facing=east,occupied=false]", + "26:12": "minecraft:red_bed[part=head,facing=south,occupied=true]", + "26:13": "minecraft:red_bed[part=head,facing=west,occupied=true]", + "26:14": "minecraft:red_bed[part=head,facing=north,occupied=true]", + "26:15": "minecraft:red_bed[part=head,facing=east,occupied=true]", + "27:0": "minecraft:powered_rail[powered=false,shape=north_south]", + "27:1": "minecraft:powered_rail[powered=false,shape=east_west]", + "27:2": "minecraft:powered_rail[powered=false,shape=ascending_east]", + "27:3": "minecraft:powered_rail[powered=false,shape=ascending_west]", + "27:4": "minecraft:powered_rail[powered=false,shape=ascending_north]", + "27:5": "minecraft:powered_rail[powered=false,shape=ascending_south]", + "27:8": "minecraft:powered_rail[powered=true,shape=north_south]", + "27:9": "minecraft:powered_rail[powered=true,shape=east_west]", + "27:10": "minecraft:powered_rail[powered=true,shape=ascending_east]", + "27:11": "minecraft:powered_rail[powered=true,shape=ascending_west]", + "27:12": "minecraft:powered_rail[powered=true,shape=ascending_north]", + "27:13": "minecraft:powered_rail[powered=true,shape=ascending_south]", + "28:0": "minecraft:detector_rail[powered=false,shape=north_south]", + "28:1": "minecraft:detector_rail[powered=false,shape=east_west]", + "28:2": "minecraft:detector_rail[powered=false,shape=ascending_east]", + "28:3": "minecraft:detector_rail[powered=false,shape=ascending_west]", + "28:4": "minecraft:detector_rail[powered=false,shape=ascending_north]", + "28:5": "minecraft:detector_rail[powered=false,shape=ascending_south]", + "28:8": "minecraft:detector_rail[powered=true,shape=north_south]", + "28:9": "minecraft:detector_rail[powered=true,shape=east_west]", + "28:10": "minecraft:detector_rail[powered=true,shape=ascending_east]", + "28:11": "minecraft:detector_rail[powered=true,shape=ascending_west]", + "28:12": "minecraft:detector_rail[powered=true,shape=ascending_north]", + "28:13": "minecraft:detector_rail[powered=true,shape=ascending_south]", + "29:0": "minecraft:sticky_piston[facing=down,extended=false]", + "29:1": "minecraft:sticky_piston[facing=up,extended=false]", + "29:2": "minecraft:sticky_piston[facing=north,extended=false]", + "29:3": "minecraft:sticky_piston[facing=south,extended=false]", + "29:4": "minecraft:sticky_piston[facing=west,extended=false]", + "29:5": "minecraft:sticky_piston[facing=east,extended=false]", + "29:8": "minecraft:sticky_piston[facing=down,extended=true]", + "29:9": "minecraft:sticky_piston[facing=up,extended=true]", + "29:10": "minecraft:sticky_piston[facing=north,extended=true]", + "29:11": "minecraft:sticky_piston[facing=south,extended=true]", + "29:12": "minecraft:sticky_piston[facing=west,extended=true]", + "29:13": "minecraft:sticky_piston[facing=east,extended=true]", + "30": "minecraft:cobweb", + "31:0": "minecraft:dead_bush", + "31:1": "minecraft:grass", + "31:2": "minecraft:fern", + "32": "minecraft:dead_bush", + "33:0": "minecraft:piston[facing=down,extended=false]", + "33:1": "minecraft:piston[facing=up,extended=false]", + "33:2": "minecraft:piston[facing=north,extended=false]", + "33:3": "minecraft:piston[facing=south,extended=false]", + "33:4": "minecraft:piston[facing=west,extended=false]", + "33:5": "minecraft:piston[facing=east,extended=false]", + "33:8": "minecraft:piston[facing=down,extended=true]", + "33:9": "minecraft:piston[facing=up,extended=true]", + "33:10": "minecraft:piston[facing=north,extended=true]", + "33:11": "minecraft:piston[facing=south,extended=true]", + "33:12": "minecraft:piston[facing=west,extended=true]", + "33:13": "minecraft:piston[facing=east,extended=true]", + "34:0": "minecraft:piston_head[facing=down,short=false,type=normal]", + "34:1": "minecraft:piston_head[facing=up,short=false,type=normal]", + "34:2": "minecraft:piston_head[facing=north,short=false,type=normal]", + "34:3": "minecraft:piston_head[facing=south,short=false,type=normal]", + "34:4": "minecraft:piston_head[facing=west,short=false,type=normal]", + "34:5": "minecraft:piston_head[facing=east,short=false,type=normal]", + "34:8": "minecraft:piston_head[facing=down,short=false,type=sticky]", + "34:9": "minecraft:piston_head[facing=up,short=false,type=sticky]", + "34:10": "minecraft:piston_head[facing=north,short=false,type=sticky]", + "34:11": "minecraft:piston_head[facing=south,short=false,type=sticky]", + "34:12": "minecraft:piston_head[facing=west,short=false,type=sticky]", + "34:13": "minecraft:piston_head[facing=east,short=false,type=sticky]", + "35:0": "minecraft:white_wool", + "35:1": "minecraft:orange_wool", + "35:2": "minecraft:magenta_wool", + "35:3": "minecraft:light_blue_wool", + "35:4": "minecraft:yellow_wool", + "35:5": "minecraft:lime_wool", + "35:6": "minecraft:pink_wool", + "35:7": "minecraft:gray_wool", + "35:8": "minecraft:light_gray_wool", + "35:9": "minecraft:cyan_wool", + "35:10": "minecraft:purple_wool", + "35:11": "minecraft:blue_wool", + "35:12": "minecraft:brown_wool", + "35:13": "minecraft:green_wool", + "35:14": "minecraft:red_wool", + "35:15": "minecraft:black_wool", + "36:0": "minecraft:moving_piston[facing=down,type=normal]", + "36:1": "minecraft:moving_piston[facing=up,type=normal]", + "36:2": "minecraft:moving_piston[facing=north,type=normal]", + "36:3": "minecraft:moving_piston[facing=south,type=normal]", + "36:4": "minecraft:moving_piston[facing=west,type=normal]", + "36:5": "minecraft:moving_piston[facing=east,type=normal]", + "36:8": "minecraft:moving_piston[facing=down,type=sticky]", + "36:9": "minecraft:moving_piston[facing=up,type=sticky]", + "36:10": "minecraft:moving_piston[facing=north,type=sticky]", + "36:11": "minecraft:moving_piston[facing=south,type=sticky]", + "36:12": "minecraft:moving_piston[facing=west,type=sticky]", + "36:13": "minecraft:moving_piston[facing=east,type=sticky]", + "37": "minecraft:dandelion", + "38:0": "minecraft:poppy", + "38:1": "minecraft:blue_orchid", + "38:2": "minecraft:allium", + "38:3": "minecraft:azure_bluet", + "38:4": "minecraft:red_tulip", + "38:5": "minecraft:orange_tulip", + "38:6": "minecraft:white_tulip", + "38:7": "minecraft:pink_tulip", + "38:8": "minecraft:oxeye_daisy", + "39": "minecraft:brown_mushroom", + "40": "minecraft:red_mushroom", + "41": "minecraft:gold_block", + "42": "minecraft:iron_block", + "43:0": "minecraft:stone_slab[type=double]", + "43:1": "minecraft:sandstone_slab[type=double]", + "43:2": "minecraft:petrified_oak_slab[type=double]", + "43:3": "minecraft:cobblestone_slab[type=double]", + "43:4": "minecraft:brick_slab[type=double]", + "43:5": "minecraft:stone_brick_slab[type=double]", + "43:6": "minecraft:nether_brick_slab[type=double]", + "43:7": "minecraft:quartz_slab[type=double]", + "43:8": "minecraft:smooth_stone", + "43:9": "minecraft:smooth_sandstone", + "43:10": "minecraft:petrified_oak_slab[type=double]", + "43:11": "minecraft:cobblestone_slab[type=double]", + "43:12": "minecraft:brick_slab[type=double]", + "43:13": "minecraft:stone_brick_slab[type=double]", + "43:14": "minecraft:nether_brick_slab[type=double]", + "43:15": "minecraft:smooth_quartz", + "44:0": "minecraft:stone_slab[type=bottom]", + "44:1": "minecraft:sandstone_slab[type=bottom]", + "44:2": "minecraft:petrified_oak_slab[type=bottom]", + "44:3": "minecraft:cobblestone_slab[type=bottom]", + "44:4": "minecraft:brick_slab[type=bottom]", + "44:5": "minecraft:stone_brick_slab[type=bottom]", + "44:6": "minecraft:nether_brick_slab[type=bottom]", + "44:7": "minecraft:quartz_slab[type=bottom]", + "44:8": "minecraft:stone_slab[type=top]", + "44:9": "minecraft:sandstone_slab[type=top]", + "44:10": "minecraft:petrified_oak_slab[type=top]", + "44:11": "minecraft:cobblestone_slab[type=top]", + "44:12": "minecraft:brick_slab[type=top]", + "44:13": "minecraft:stone_brick_slab[type=top]", + "44:14": "minecraft:nether_brick_slab[type=top]", + "44:15": "minecraft:quartz_slab[type=top]", + "45": "minecraft:bricks", + "46:0": "minecraft:tnt[unstable=false]", + "46:1": "minecraft:tnt[unstable=true]", + "47": "minecraft:bookshelf", + "48": "minecraft:mossy_cobblestone", + "49": "minecraft:obsidian", + "50:0": "minecraft:wall_torch[facing=east]", + "50:2": "minecraft:wall_torch[facing=west]", + "50:3": "minecraft:wall_torch[facing=south]", + "50:4": "minecraft:wall_torch[facing=north]", + "50:5": "minecraft:torch", + "51:0": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=0]", + "51:1": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=1]", + "51:2": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=2]", + "51:3": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=3]", + "51:4": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=4]", + "51:5": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=5]", + "51:6": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=6]", + "51:7": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=7]", + "51:8": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=8]", + "51:9": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=9]", + "51:10": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=10]", + "51:11": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=11]", + "51:12": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=12]", + "51:13": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=13]", + "51:14": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=14]", + "51:15": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=15]", + "52": "minecraft:mob_spawner", + "53:0": "minecraft:oak_stairs[half=bottom,shape=straight,facing=east]", + "53:1": "minecraft:oak_stairs[half=bottom,shape=straight,facing=west]", + "53:2": "minecraft:oak_stairs[half=bottom,shape=straight,facing=south]", + "53:3": "minecraft:oak_stairs[half=bottom,shape=straight,facing=north]", + "53:4": "minecraft:oak_stairs[half=top,shape=straight,facing=east]", + "53:5": "minecraft:oak_stairs[half=top,shape=straight,facing=west]", + "53:6": "minecraft:oak_stairs[half=top,shape=straight,facing=south]", + "53:7": "minecraft:oak_stairs[half=top,shape=straight,facing=north]", + "54:0": "minecraft:chest[facing=north,type=single]", + "54:3": "minecraft:chest[facing=south,type=single]", + "54:4": "minecraft:chest[facing=west,type=single]", + "54:5": "minecraft:chest[facing=east,type=single]", + "55:0": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=0]", + "55:1": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=1]", + "55:2": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=2]", + "55:3": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=3]", + "55:4": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=4]", + "55:5": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=5]", + "55:6": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=6]", + "55:7": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=7]", + "55:8": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=8]", + "55:9": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=9]", + "55:10": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=10]", + "55:11": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=11]", + "55:12": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=12]", + "55:13": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=13]", + "55:14": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=14]", + "55:15": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=15]", + "56": "minecraft:diamond_ore", + "57": "minecraft:diamond_block", + "58": "minecraft:crafting_table", + "59:0": "minecraft:wheat[age=0]", + "59:1": "minecraft:wheat[age=1]", + "59:2": "minecraft:wheat[age=2]", + "59:3": "minecraft:wheat[age=3]", + "59:4": "minecraft:wheat[age=4]", + "59:5": "minecraft:wheat[age=5]", + "59:6": "minecraft:wheat[age=6]", + "59:7": "minecraft:wheat[age=7]", + "60:0": "minecraft:farmland[moisture=0]", + "60:1": "minecraft:farmland[moisture=1]", + "60:2": "minecraft:farmland[moisture=2]", + "60:3": "minecraft:farmland[moisture=3]", + "60:4": "minecraft:farmland[moisture=4]", + "60:5": "minecraft:farmland[moisture=5]", + "60:6": "minecraft:farmland[moisture=6]", + "60:7": "minecraft:farmland[moisture=7]", + "61:0": "minecraft:furnace[lit=false,facing=north]", + "61:3": "minecraft:furnace[lit=false,facing=south]", + "61:4": "minecraft:furnace[lit=false,facing=west]", + "61:5": "minecraft:furnace[lit=false,facing=east]", + "62:0": "minecraft:furnace[lit=true,facing=north]", + "62:3": "minecraft:furnace[lit=true,facing=south]", + "62:4": "minecraft:furnace[lit=true,facing=west]", + "62:5": "minecraft:furnace[lit=true,facing=east]", + "63:0": "minecraft:sign[rotation=0]", + "63:1": "minecraft:sign[rotation=1]", + "63:2": "minecraft:sign[rotation=2]", + "63:3": "minecraft:sign[rotation=3]", + "63:4": "minecraft:sign[rotation=4]", + "63:5": "minecraft:sign[rotation=5]", + "63:6": "minecraft:sign[rotation=6]", + "63:7": "minecraft:sign[rotation=7]", + "63:8": "minecraft:sign[rotation=8]", + "63:9": "minecraft:sign[rotation=9]", + "63:10": "minecraft:sign[rotation=10]", + "63:11": "minecraft:sign[rotation=11]", + "63:12": "minecraft:sign[rotation=12]", + "63:13": "minecraft:sign[rotation=13]", + "63:14": "minecraft:sign[rotation=14]", + "63:15": "minecraft:sign[rotation=15]", + "64:0": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=east,open=false]", + "64:1": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=south,open=false]", + "64:2": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=west,open=false]", + "64:3": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=north,open=false]", + "64:4": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=east,open=true]", + "64:5": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=south,open=true]", + "64:6": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=west,open=true]", + "64:7": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=north,open=true]", + "64:8": "minecraft:oak_door[hinge=left,half=upper,powered=false,facing=east,open=false]", + "64:9": "minecraft:oak_door[hinge=right,half=upper,powered=false,facing=east,open=false]", + "64:10": "minecraft:oak_door[hinge=left,half=upper,powered=true,facing=east,open=false]", + "64:11": "minecraft:oak_door[hinge=right,half=upper,powered=true,facing=east,open=false]", + "64:12": "minecraft:oak_door[hinge=left,half=upper,powered=false,facing=east,open=true]", + "64:13": "minecraft:oak_door[hinge=left,half=upper,powered=false,facing=south,open=true]", + "64:14": "minecraft:oak_door[hinge=left,half=upper,powered=false,facing=west,open=true]", + "64:15": "minecraft:oak_door[hinge=left,half=upper,powered=false,facing=north,open=true]", + "65:0": "minecraft:ladder[facing=north]", + "65:3": "minecraft:ladder[facing=south]", + "65:4": "minecraft:ladder[facing=west]", + "65:5": "minecraft:ladder[facing=east]", + "66:0": "minecraft:rail[shape=north_south]", + "66:1": "minecraft:rail[shape=east_west]", + "66:2": "minecraft:rail[shape=ascending_east]", + "66:3": "minecraft:rail[shape=ascending_west]", + "66:4": "minecraft:rail[shape=ascending_north]", + "66:5": "minecraft:rail[shape=ascending_south]", + "66:6": "minecraft:rail[shape=south_east]", + "66:7": "minecraft:rail[shape=south_west]", + "66:8": "minecraft:rail[shape=north_west]", + "66:9": "minecraft:rail[shape=north_east]", + "67:0": "minecraft:cobblestone_stairs[half=bottom,shape=straight,facing=east]", + "67:1": "minecraft:cobblestone_stairs[half=bottom,shape=straight,facing=west]", + "67:2": "minecraft:cobblestone_stairs[half=bottom,shape=straight,facing=south]", + "67:3": "minecraft:cobblestone_stairs[half=bottom,shape=straight,facing=north]", + "67:4": "minecraft:cobblestone_stairs[half=top,shape=straight,facing=east]", + "67:5": "minecraft:cobblestone_stairs[half=top,shape=straight,facing=west]", + "67:6": "minecraft:cobblestone_stairs[half=top,shape=straight,facing=south]", + "67:7": "minecraft:cobblestone_stairs[half=top,shape=straight,facing=north]", + "68:0": "minecraft:wall_sign[facing=north]", + "68:3": "minecraft:wall_sign[facing=south]", + "68:4": "minecraft:wall_sign[facing=west]", + "68:5": "minecraft:wall_sign[facing=east]", + "69:0": "minecraft:lever[face=ceiling,powered=false,facing=west]", + "69:1": "minecraft:lever[face=wall,powered=false,facing=east]", + "69:2": "minecraft:lever[face=wall,powered=false,facing=west]", + "69:3": "minecraft:lever[face=wall,powered=false,facing=south]", + "69:4": "minecraft:lever[face=wall,powered=false,facing=north]", + "69:5": "minecraft:lever[face=floor,powered=false,facing=north]", + "69:6": "minecraft:lever[face=floor,powered=false,facing=west]", + "69:7": "minecraft:lever[face=ceiling,powered=false,facing=north]", + "69:8": "minecraft:lever[face=ceiling,powered=true,facing=west]", + "69:9": "minecraft:lever[face=wall,powered=true,facing=east]", + "69:10": "minecraft:lever[face=wall,powered=true,facing=west]", + "69:11": "minecraft:lever[face=wall,powered=true,facing=south]", + "69:12": "minecraft:lever[face=wall,powered=true,facing=north]", + "69:13": "minecraft:lever[face=floor,powered=true,facing=north]", + "69:14": "minecraft:lever[face=floor,powered=true,facing=west]", + "69:15": "minecraft:lever[face=ceiling,powered=true,facing=north]", + "70:0": "minecraft:stone_pressure_plate[powered=false]", + "70:1": "minecraft:stone_pressure_plate[powered=true]", + "71:0": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=east,open=false]", + "71:1": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=south,open=false]", + "71:2": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=west,open=false]", + "71:3": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=north,open=false]", + "71:4": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=east,open=true]", + "71:5": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=south,open=true]", + "71:6": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=west,open=true]", + "71:7": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=north,open=true]", + "71:8": "minecraft:iron_door[hinge=left,half=upper,powered=false,facing=east,open=false]", + "71:9": "minecraft:iron_door[hinge=right,half=upper,powered=false,facing=east,open=false]", + "71:10": "minecraft:iron_door[hinge=left,half=upper,powered=true,facing=east,open=false]", + "71:11": "minecraft:iron_door[hinge=right,half=upper,powered=true,facing=east,open=false]", + "71:12": "minecraft:iron_door[hinge=left,half=upper,powered=false,facing=east,open=true]", + "71:13": "minecraft:iron_door[hinge=left,half=upper,powered=false,facing=south,open=true]", + "71:14": "minecraft:iron_door[hinge=left,half=upper,powered=false,facing=west,open=true]", + "71:15": "minecraft:iron_door[hinge=left,half=upper,powered=false,facing=north,open=true]", + "72:0": "minecraft:oak_pressure_plate[powered=false]", + "72:1": "minecraft:oak_pressure_plate[powered=true]", + "73": "minecraft:redstone_ore[lit=false]", + "74": "minecraft:redstone_ore[lit=true]", + "75:0": "minecraft:redstone_wall_torch[lit=false,facing=east]", + "75:2": "minecraft:redstone_wall_torch[lit=false,facing=west]", + "75:3": "minecraft:redstone_wall_torch[lit=false,facing=south]", + "75:4": "minecraft:redstone_wall_torch[lit=false,facing=north]", + "75:5": "minecraft:redstone_torch[lit=false]", + "76:0": "minecraft:redstone_wall_torch[lit=true,facing=east]", + "76:2": "minecraft:redstone_wall_torch[lit=true,facing=west]", + "76:3": "minecraft:redstone_wall_torch[lit=true,facing=south]", + "76:4": "minecraft:redstone_wall_torch[lit=true,facing=north]", + "76:5": "minecraft:redstone_torch[lit=true]", + "77:0": "minecraft:stone_button[face=ceiling,powered=false,facing=north]", + "77:1": "minecraft:stone_button[face=wall,powered=false,facing=east]", + "77:2": "minecraft:stone_button[face=wall,powered=false,facing=west]", + "77:3": "minecraft:stone_button[face=wall,powered=false,facing=south]", + "77:4": "minecraft:stone_button[face=wall,powered=false,facing=north]", + "77:5": "minecraft:stone_button[face=floor,powered=false,facing=north]", + "77:8": "minecraft:stone_button[face=ceiling,powered=true,facing=north]", + "77:9": "minecraft:stone_button[face=wall,powered=true,facing=east]", + "77:10": "minecraft:stone_button[face=wall,powered=true,facing=west]", + "77:11": "minecraft:stone_button[face=wall,powered=true,facing=south]", + "77:12": "minecraft:stone_button[face=wall,powered=true,facing=north]", + "77:13": "minecraft:stone_button[face=floor,powered=true,facing=north]", + "78:0": "minecraft:snow[layers=1]", + "78:1": "minecraft:snow[layers=2]", + "78:2": "minecraft:snow[layers=3]", + "78:3": "minecraft:snow[layers=4]", + "78:4": "minecraft:snow[layers=5]", + "78:5": "minecraft:snow[layers=6]", + "78:6": "minecraft:snow[layers=7]", + "78:7": "minecraft:snow[layers=8]", + "79": "minecraft:ice", + "80": "minecraft:snow_block", + "81:0": "minecraft:cactus[age=0]", + "81:1": "minecraft:cactus[age=1]", + "81:2": "minecraft:cactus[age=2]", + "81:3": "minecraft:cactus[age=3]", + "81:4": "minecraft:cactus[age=4]", + "81:5": "minecraft:cactus[age=5]", + "81:6": "minecraft:cactus[age=6]", + "81:7": "minecraft:cactus[age=7]", + "81:8": "minecraft:cactus[age=8]", + "81:9": "minecraft:cactus[age=9]", + "81:10": "minecraft:cactus[age=10]", + "81:11": "minecraft:cactus[age=11]", + "81:12": "minecraft:cactus[age=12]", + "81:13": "minecraft:cactus[age=13]", + "81:14": "minecraft:cactus[age=14]", + "81:15": "minecraft:cactus[age=15]", + "82": "minecraft:clay", + "83:0": "minecraft:sugar_cane[age=0]", + "83:1": "minecraft:sugar_cane[age=1]", + "83:2": "minecraft:sugar_cane[age=2]", + "83:3": "minecraft:sugar_cane[age=3]", + "83:4": "minecraft:sugar_cane[age=4]", + "83:5": "minecraft:sugar_cane[age=5]", + "83:6": "minecraft:sugar_cane[age=6]", + "83:7": "minecraft:sugar_cane[age=7]", + "83:8": "minecraft:sugar_cane[age=8]", + "83:9": "minecraft:sugar_cane[age=9]", + "83:10": "minecraft:sugar_cane[age=10]", + "83:11": "minecraft:sugar_cane[age=11]", + "83:12": "minecraft:sugar_cane[age=12]", + "83:13": "minecraft:sugar_cane[age=13]", + "83:14": "minecraft:sugar_cane[age=14]", + "83:15": "minecraft:sugar_cane[age=15]", + "84:0": "minecraft:jukebox[has_record=false]", + "84:1": "minecraft:jukebox[has_record=true]", + "85": "minecraft:oak_fence[east=false,south=false,north=false,west=false]", + "86:0": "minecraft:carved_pumpkin[facing=south]", + "86:1": "minecraft:carved_pumpkin[facing=west]", + "86:2": "minecraft:carved_pumpkin[facing=north]", + "86:3": "minecraft:carved_pumpkin[facing=east]", + "87": "minecraft:netherrack", + "88": "minecraft:soul_sand", + "89": "minecraft:glowstone", + "90:0": "minecraft:portal[axis=x]", + "90:2": "minecraft:portal[axis=z]", + "91:0": "minecraft:jack_o_lantern[facing=south]", + "91:1": "minecraft:jack_o_lantern[facing=west]", + "91:2": "minecraft:jack_o_lantern[facing=north]", + "91:3": "minecraft:jack_o_lantern[facing=east]", + "92:0": "minecraft:cake[bites=0]", + "92:1": "minecraft:cake[bites=1]", + "92:2": "minecraft:cake[bites=2]", + "92:3": "minecraft:cake[bites=3]", + "92:4": "minecraft:cake[bites=4]", + "92:5": "minecraft:cake[bites=5]", + "92:6": "minecraft:cake[bites=6]", + "93:0": "minecraft:repeater[delay=1,powered=false,facing=south,locked=false]", + "93:1": "minecraft:repeater[delay=1,powered=false,facing=west,locked=false]", + "93:2": "minecraft:repeater[delay=1,powered=false,facing=north,locked=false]", + "93:3": "minecraft:repeater[delay=1,powered=false,facing=east,locked=false]", + "93:4": "minecraft:repeater[delay=2,powered=false,facing=south,locked=false]", + "93:5": "minecraft:repeater[delay=2,powered=false,facing=west,locked=false]", + "93:6": "minecraft:repeater[delay=2,powered=false,facing=north,locked=false]", + "93:7": "minecraft:repeater[delay=2,powered=false,facing=east,locked=false]", + "93:8": "minecraft:repeater[delay=3,powered=false,facing=south,locked=false]", + "93:9": "minecraft:repeater[delay=3,powered=false,facing=west,locked=false]", + "93:10": "minecraft:repeater[delay=3,powered=false,facing=north,locked=false]", + "93:11": "minecraft:repeater[delay=3,powered=false,facing=east,locked=false]", + "93:12": "minecraft:repeater[delay=4,powered=false,facing=south,locked=false]", + "93:13": "minecraft:repeater[delay=4,powered=false,facing=west,locked=false]", + "93:14": "minecraft:repeater[delay=4,powered=false,facing=north,locked=false]", + "93:15": "minecraft:repeater[delay=4,powered=false,facing=east,locked=false]", + "94:0": "minecraft:repeater[delay=1,powered=true,facing=south,locked=false]", + "94:1": "minecraft:repeater[delay=1,powered=true,facing=west,locked=false]", + "94:2": "minecraft:repeater[delay=1,powered=true,facing=north,locked=false]", + "94:3": "minecraft:repeater[delay=1,powered=true,facing=east,locked=false]", + "94:4": "minecraft:repeater[delay=2,powered=true,facing=south,locked=false]", + "94:5": "minecraft:repeater[delay=2,powered=true,facing=west,locked=false]", + "94:6": "minecraft:repeater[delay=2,powered=true,facing=north,locked=false]", + "94:7": "minecraft:repeater[delay=2,powered=true,facing=east,locked=false]", + "94:8": "minecraft:repeater[delay=3,powered=true,facing=south,locked=false]", + "94:9": "minecraft:repeater[delay=3,powered=true,facing=west,locked=false]", + "94:10": "minecraft:repeater[delay=3,powered=true,facing=north,locked=false]", + "94:11": "minecraft:repeater[delay=3,powered=true,facing=east,locked=false]", + "94:12": "minecraft:repeater[delay=4,powered=true,facing=south,locked=false]", + "94:13": "minecraft:repeater[delay=4,powered=true,facing=west,locked=false]", + "94:14": "minecraft:repeater[delay=4,powered=true,facing=north,locked=false]", + "94:15": "minecraft:repeater[delay=4,powered=true,facing=east,locked=false]", + "95:0": "minecraft:white_stained_glass", + "95:1": "minecraft:orange_stained_glass", + "95:2": "minecraft:magenta_stained_glass", + "95:3": "minecraft:light_blue_stained_glass", + "95:4": "minecraft:yellow_stained_glass", + "95:5": "minecraft:lime_stained_glass", + "95:6": "minecraft:pink_stained_glass", + "95:7": "minecraft:gray_stained_glass", + "95:8": "minecraft:light_gray_stained_glass", + "95:9": "minecraft:cyan_stained_glass", + "95:10": "minecraft:purple_stained_glass", + "95:11": "minecraft:blue_stained_glass", + "95:12": "minecraft:brown_stained_glass", + "95:13": "minecraft:green_stained_glass", + "95:14": "minecraft:red_stained_glass", + "95:15": "minecraft:black_stained_glass", + "96:0": "minecraft:oak_trapdoor[half=bottom,facing=north,open=false]", + "96:1": "minecraft:oak_trapdoor[half=bottom,facing=south,open=false]", + "96:2": "minecraft:oak_trapdoor[half=bottom,facing=west,open=false]", + "96:3": "minecraft:oak_trapdoor[half=bottom,facing=east,open=false]", + "96:4": "minecraft:oak_trapdoor[half=bottom,facing=north,open=true]", + "96:5": "minecraft:oak_trapdoor[half=bottom,facing=south,open=true]", + "96:6": "minecraft:oak_trapdoor[half=bottom,facing=west,open=true]", + "96:7": "minecraft:oak_trapdoor[half=bottom,facing=east,open=true]", + "96:8": "minecraft:oak_trapdoor[half=top,facing=north,open=false]", + "96:9": "minecraft:oak_trapdoor[half=top,facing=south,open=false]", + "96:10": "minecraft:oak_trapdoor[half=top,facing=west,open=false]", + "96:11": "minecraft:oak_trapdoor[half=top,facing=east,open=false]", + "96:12": "minecraft:oak_trapdoor[half=top,facing=north,open=true]", + "96:13": "minecraft:oak_trapdoor[half=top,facing=south,open=true]", + "96:14": "minecraft:oak_trapdoor[half=top,facing=west,open=true]", + "96:15": "minecraft:oak_trapdoor[half=top,facing=east,open=true]", + "97:0": "minecraft:infested_stone", + "97:1": "minecraft:infested_cobblestone", + "97:2": "minecraft:infested_stone_bricks", + "97:3": "minecraft:infested_mossy_stone_bricks", + "97:4": "minecraft:infested_cracked_stone_bricks", + "97:5": "minecraft:infested_chiseled_stone_bricks", + "98:0": "minecraft:stone_bricks", + "98:1": "minecraft:mossy_stone_bricks", + "98:2": "minecraft:cracked_stone_bricks", + "98:3": "minecraft:chiseled_stone_bricks", + "99:0": "minecraft:brown_mushroom_block[east=false,south=false,north=false,west=false,up=false,down=false]", + "99:1": "minecraft:brown_mushroom_block[east=false,south=false,north=true,west=true,up=true,down=false]", + "99:2": "minecraft:brown_mushroom_block[east=false,south=false,north=true,west=false,up=true,down=false]", + "99:3": "minecraft:brown_mushroom_block[east=true,south=false,north=true,west=false,up=true,down=false]", + "99:4": "minecraft:brown_mushroom_block[east=false,south=false,north=false,west=true,up=true,down=false]", + "99:5": "minecraft:brown_mushroom_block[east=false,south=false,north=false,west=false,up=true,down=false]", + "99:6": "minecraft:brown_mushroom_block[east=true,south=false,north=false,west=false,up=true,down=false]", + "99:7": "minecraft:brown_mushroom_block[east=false,south=true,north=false,west=true,up=true,down=false]", + "99:8": "minecraft:brown_mushroom_block[east=false,south=true,north=false,west=false,up=true,down=false]", + "99:9": "minecraft:brown_mushroom_block[east=true,south=true,north=false,west=false,up=true,down=false]", + "99:10": "minecraft:mushroom_stem[east=true,south=true,north=true,west=true,up=false,down=false]", + "99:14": "minecraft:brown_mushroom_block[east=true,south=true,north=true,west=true,up=true,down=true]", + "99:15": "minecraft:mushroom_stem[east=true,south=true,north=true,west=true,up=true,down=true]", + "100:0": "minecraft:red_mushroom_block[east=false,south=false,north=false,west=false,up=false,down=false]", + "100:1": "minecraft:red_mushroom_block[east=false,south=false,north=true,west=true,up=true,down=false]", + "100:2": "minecraft:red_mushroom_block[east=false,south=false,north=true,west=false,up=true,down=false]", + "100:3": "minecraft:red_mushroom_block[east=true,south=false,north=true,west=false,up=true,down=false]", + "100:4": "minecraft:red_mushroom_block[east=false,south=false,north=false,west=true,up=true,down=false]", + "100:5": "minecraft:red_mushroom_block[east=false,south=false,north=false,west=false,up=true,down=false]", + "100:6": "minecraft:red_mushroom_block[east=true,south=false,north=false,west=false,up=true,down=false]", + "100:7": "minecraft:red_mushroom_block[east=false,south=true,north=false,west=true,up=true,down=false]", + "100:8": "minecraft:red_mushroom_block[east=false,south=true,north=false,west=false,up=true,down=false]", + "100:9": "minecraft:red_mushroom_block[east=true,south=true,north=false,west=false,up=true,down=false]", + "100:10": "minecraft:mushroom_stem[east=true,south=true,north=true,west=true,up=false,down=false]", + "100:14": "minecraft:red_mushroom_block[east=true,south=true,north=true,west=true,up=true,down=true]", + "100:15": "minecraft:mushroom_stem[east=true,south=true,north=true,west=true,up=true,down=true]", + "101": "minecraft:iron_bars[east=false,south=false,north=false,west=false]", + "102": "minecraft:glass_pane[east=false,south=false,north=false,west=false]", + "103": "minecraft:melon_block", + "104:0": "minecraft:pumpkin_stem[age=0]", + "104:1": "minecraft:pumpkin_stem[age=1]", + "104:2": "minecraft:pumpkin_stem[age=2]", + "104:3": "minecraft:pumpkin_stem[age=3]", + "104:4": "minecraft:pumpkin_stem[age=4]", + "104:5": "minecraft:pumpkin_stem[age=5]", + "104:6": "minecraft:pumpkin_stem[age=6]", + "104:7": "minecraft:pumpkin_stem[age=7]", + "105:0": "minecraft:melon_stem[age=0]", + "105:1": "minecraft:melon_stem[age=1]", + "105:2": "minecraft:melon_stem[age=2]", + "105:3": "minecraft:melon_stem[age=3]", + "105:4": "minecraft:melon_stem[age=4]", + "105:5": "minecraft:melon_stem[age=5]", + "105:6": "minecraft:melon_stem[age=6]", + "105:7": "minecraft:melon_stem[age=7]", + "106:0": "minecraft:vine[east=false,south=false,north=false,west=false,up=true]", + "106:1": "minecraft:vine[east=false,south=true,north=false,west=false,up=true]", + "106:2": "minecraft:vine[east=false,south=false,north=false,west=true,up=true]", + "106:3": "minecraft:vine[east=false,south=true,north=false,west=true,up=true]", + "106:4": "minecraft:vine[east=false,south=false,north=true,west=false,up=true]", + "106:5": "minecraft:vine[east=false,south=true,north=true,west=false,up=true]", + "106:6": "minecraft:vine[east=false,south=false,north=true,west=true,up=true]", + "106:7": "minecraft:vine[east=false,south=true,north=true,west=true,up=true]", + "106:8": "minecraft:vine[east=true,south=false,north=false,west=false,up=true]", + "106:9": "minecraft:vine[east=true,south=true,north=false,west=false,up=true]", + "106:10": "minecraft:vine[east=true,south=false,north=false,west=true,up=true]", + "106:11": "minecraft:vine[east=true,south=true,north=false,west=true,up=true]", + "106:12": "minecraft:vine[east=true,south=false,north=true,west=false,up=true]", + "106:13": "minecraft:vine[east=true,south=true,north=true,west=false,up=true]", + "106:14": "minecraft:vine[east=true,south=false,north=true,west=true,up=true]", + "106:15": "minecraft:vine[east=true,south=true,north=true,west=true,up=true]", + "107:0": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=south,open=false]", + "107:1": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=west,open=false]", + "107:2": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=north,open=false]", + "107:3": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=east,open=false]", + "107:4": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=south,open=true]", + "107:5": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=west,open=true]", + "107:6": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=north,open=true]", + "107:7": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=east,open=true]", + "107:8": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=south,open=false]", + "107:9": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=west,open=false]", + "107:10": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=north,open=false]", + "107:11": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=east,open=false]", + "107:12": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=south,open=true]", + "107:13": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=west,open=true]", + "107:14": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=north,open=true]", + "107:15": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=east,open=true]", + "108:0": "minecraft:brick_stairs[half=bottom,shape=straight,facing=east]", + "108:1": "minecraft:brick_stairs[half=bottom,shape=straight,facing=west]", + "108:2": "minecraft:brick_stairs[half=bottom,shape=straight,facing=south]", + "108:3": "minecraft:brick_stairs[half=bottom,shape=straight,facing=north]", + "108:4": "minecraft:brick_stairs[half=top,shape=straight,facing=east]", + "108:5": "minecraft:brick_stairs[half=top,shape=straight,facing=west]", + "108:6": "minecraft:brick_stairs[half=top,shape=straight,facing=south]", + "108:7": "minecraft:brick_stairs[half=top,shape=straight,facing=north]", + "109:0": "minecraft:stone_brick_stairs[half=bottom,shape=straight,facing=east]", + "109:1": "minecraft:stone_brick_stairs[half=bottom,shape=straight,facing=west]", + "109:2": "minecraft:stone_brick_stairs[half=bottom,shape=straight,facing=south]", + "109:3": "minecraft:stone_brick_stairs[half=bottom,shape=straight,facing=north]", + "109:4": "minecraft:stone_brick_stairs[half=top,shape=straight,facing=east]", + "109:5": "minecraft:stone_brick_stairs[half=top,shape=straight,facing=west]", + "109:6": "minecraft:stone_brick_stairs[half=top,shape=straight,facing=south]", + "109:7": "minecraft:stone_brick_stairs[half=top,shape=straight,facing=north]", + "110": "minecraft:mycelium[snowy=false]", + "111": "minecraft:lily_pad", + "112": "minecraft:nether_bricks", + "113": "minecraft:nether_brick_fence[east=false,south=false,north=false,west=false]", + "114:0": "minecraft:nether_brick_stairs[half=bottom,shape=straight,facing=east]", + "114:1": "minecraft:nether_brick_stairs[half=bottom,shape=straight,facing=west]", + "114:2": "minecraft:nether_brick_stairs[half=bottom,shape=straight,facing=south]", + "114:3": "minecraft:nether_brick_stairs[half=bottom,shape=straight,facing=north]", + "114:4": "minecraft:nether_brick_stairs[half=top,shape=straight,facing=east]", + "114:5": "minecraft:nether_brick_stairs[half=top,shape=straight,facing=west]", + "114:6": "minecraft:nether_brick_stairs[half=top,shape=straight,facing=south]", + "114:7": "minecraft:nether_brick_stairs[half=top,shape=straight,facing=north]", + "115:0": "minecraft:nether_wart[age=0]", + "115:1": "minecraft:nether_wart[age=1]", + "115:2": "minecraft:nether_wart[age=2]", + "115:3": "minecraft:nether_wart[age=3]", + "116": "minecraft:enchanting_table", + "117:0": "minecraft:brewing_stand[has_bottle_0=false,has_bottle_1=false,has_bottle_2=false]", + "117:1": "minecraft:brewing_stand[has_bottle_0=true,has_bottle_1=false,has_bottle_2=false]", + "117:2": "minecraft:brewing_stand[has_bottle_0=false,has_bottle_1=true,has_bottle_2=false]", + "117:3": "minecraft:brewing_stand[has_bottle_0=true,has_bottle_1=true,has_bottle_2=false]", + "117:4": "minecraft:brewing_stand[has_bottle_0=false,has_bottle_1=false,has_bottle_2=true]", + "117:5": "minecraft:brewing_stand[has_bottle_0=true,has_bottle_1=false,has_bottle_2=true]", + "117:6": "minecraft:brewing_stand[has_bottle_0=false,has_bottle_1=true,has_bottle_2=true]", + "117:7": "minecraft:brewing_stand[has_bottle_0=true,has_bottle_1=true,has_bottle_2=true]", + "118:0": "minecraft:cauldron[level=0]", + "118:1": "minecraft:cauldron[level=1]", + "118:2": "minecraft:cauldron[level=2]", + "118:3": "minecraft:cauldron[level=3]", + "119": "minecraft:end_portal", + "120:0": "minecraft:end_portal_frame[eye=false,facing=south]", + "120:1": "minecraft:end_portal_frame[eye=false,facing=west]", + "120:2": "minecraft:end_portal_frame[eye=false,facing=north]", + "120:3": "minecraft:end_portal_frame[eye=false,facing=east]", + "120:4": "minecraft:end_portal_frame[eye=true,facing=south]", + "120:5": "minecraft:end_portal_frame[eye=true,facing=west]", + "120:6": "minecraft:end_portal_frame[eye=true,facing=north]", + "120:7": "minecraft:end_portal_frame[eye=true,facing=east]", + "121": "minecraft:end_stone", + "122": "minecraft:dragon_egg", + "123": "minecraft:redstone_lamp[lit=false]", + "124": "minecraft:redstone_lamp[lit=true]", + "125:0": "minecraft:oak_slab[type=double]", + "125:1": "minecraft:spruce_slab[type=double]", + "125:2": "minecraft:birch_slab[type=double]", + "125:3": "minecraft:jungle_slab[type=double]", + "125:4": "minecraft:acacia_slab[type=double]", + "125:5": "minecraft:dark_oak_slab[type=double]", + "126:0": "minecraft:oak_slab[type=bottom]", + "126:1": "minecraft:spruce_slab[type=bottom]", + "126:2": "minecraft:birch_slab[type=bottom]", + "126:3": "minecraft:jungle_slab[type=bottom]", + "126:4": "minecraft:acacia_slab[type=bottom]", + "126:5": "minecraft:dark_oak_slab[type=bottom]", + "126:8": "minecraft:oak_slab[type=top]", + "126:9": "minecraft:spruce_slab[type=top]", + "126:10": "minecraft:birch_slab[type=top]", + "126:11": "minecraft:jungle_slab[type=top]", + "126:12": "minecraft:acacia_slab[type=top]", + "126:13": "minecraft:dark_oak_slab[type=top]", + "127:0": "minecraft:cocoa[facing=south,age=0]", + "127:1": "minecraft:cocoa[facing=west,age=0]", + "127:2": "minecraft:cocoa[facing=north,age=0]", + "127:3": "minecraft:cocoa[facing=east,age=0]", + "127:4": "minecraft:cocoa[facing=south,age=1]", + "127:5": "minecraft:cocoa[facing=west,age=1]", + "127:6": "minecraft:cocoa[facing=north,age=1]", + "127:7": "minecraft:cocoa[facing=east,age=1]", + "127:8": "minecraft:cocoa[facing=south,age=2]", + "127:9": "minecraft:cocoa[facing=west,age=2]", + "127:10": "minecraft:cocoa[facing=north,age=2]", + "127:11": "minecraft:cocoa[facing=east,age=2]", + "128:0": "minecraft:sandstone_stairs[half=bottom,shape=straight,facing=east]", + "128:1": "minecraft:sandstone_stairs[half=bottom,shape=straight,facing=west]", + "128:2": "minecraft:sandstone_stairs[half=bottom,shape=straight,facing=south]", + "128:3": "minecraft:sandstone_stairs[half=bottom,shape=straight,facing=north]", + "128:4": "minecraft:sandstone_stairs[half=top,shape=straight,facing=east]", + "128:5": "minecraft:sandstone_stairs[half=top,shape=straight,facing=west]", + "128:6": "minecraft:sandstone_stairs[half=top,shape=straight,facing=south]", + "128:7": "minecraft:sandstone_stairs[half=top,shape=straight,facing=north]", + "129": "minecraft:emerald_ore", + "130:0": "minecraft:ender_chest[facing=north]", + "130:3": "minecraft:ender_chest[facing=south]", + "130:4": "minecraft:ender_chest[facing=west]", + "130:5": "minecraft:ender_chest[facing=east]", + "131:0": "minecraft:tripwire_hook[powered=false,attached=false,facing=south]", + "131:1": "minecraft:tripwire_hook[powered=false,attached=false,facing=west]", + "131:2": "minecraft:tripwire_hook[powered=false,attached=false,facing=north]", + "131:3": "minecraft:tripwire_hook[powered=false,attached=false,facing=east]", + "131:4": "minecraft:tripwire_hook[powered=false,attached=true,facing=south]", + "131:5": "minecraft:tripwire_hook[powered=false,attached=true,facing=west]", + "131:6": "minecraft:tripwire_hook[powered=false,attached=true,facing=north]", + "131:7": "minecraft:tripwire_hook[powered=false,attached=true,facing=east]", + "131:8": "minecraft:tripwire_hook[powered=true,attached=false,facing=south]", + "131:9": "minecraft:tripwire_hook[powered=true,attached=false,facing=west]", + "131:10": "minecraft:tripwire_hook[powered=true,attached=false,facing=north]", + "131:11": "minecraft:tripwire_hook[powered=true,attached=false,facing=east]", + "131:12": "minecraft:tripwire_hook[powered=true,attached=true,facing=south]", + "131:13": "minecraft:tripwire_hook[powered=true,attached=true,facing=west]", + "131:14": "minecraft:tripwire_hook[powered=true,attached=true,facing=north]", + "131:15": "minecraft:tripwire_hook[powered=true,attached=true,facing=east]", + "132:0": "minecraft:tripwire[disarmed=false,east=false,powered=false,south=false,north=false,attached=false,west=false]", + "132:1": "minecraft:tripwire[disarmed=false,east=false,powered=true,south=false,north=false,attached=false,west=false]", + "132:3": "minecraft:tripwire[disarmed=false,east=false,powered=true,south=false,north=false,attached=false,west=false]", + "132:4": "minecraft:tripwire[disarmed=false,east=false,powered=false,south=false,north=false,attached=true,west=false]", + "132:5": "minecraft:tripwire[disarmed=false,east=false,powered=true,south=false,north=false,attached=true,west=false]", + "132:6": "minecraft:tripwire[disarmed=false,east=false,powered=false,south=false,north=false,attached=true,west=false]", + "132:7": "minecraft:tripwire[disarmed=false,east=false,powered=true,south=false,north=false,attached=true,west=false]", + "132:8": "minecraft:tripwire[disarmed=true,east=false,powered=false,south=false,north=false,attached=false,west=false]", + "132:9": "minecraft:tripwire[disarmed=true,east=false,powered=true,south=false,north=false,attached=false,west=false]", + "132:10": "minecraft:tripwire[disarmed=true,east=false,powered=false,south=false,north=false,attached=false,west=false]", + "132:11": "minecraft:tripwire[disarmed=true,east=false,powered=true,south=false,north=false,attached=false,west=false]", + "132:12": "minecraft:tripwire[disarmed=true,east=false,powered=false,south=false,north=false,attached=true,west=false]", + "132:13": "minecraft:tripwire[disarmed=true,east=false,powered=true,south=false,north=false,attached=true,west=false]", + "132:14": "minecraft:tripwire[disarmed=true,east=false,powered=false,south=false,north=false,attached=true,west=false]", + "133": "minecraft:emerald_block", + "134:0": "minecraft:spruce_stairs[half=bottom,shape=straight,facing=east]", + "134:1": "minecraft:spruce_stairs[half=bottom,shape=straight,facing=west]", + "134:2": "minecraft:spruce_stairs[half=bottom,shape=straight,facing=south]", + "134:3": "minecraft:spruce_stairs[half=bottom,shape=straight,facing=north]", + "134:4": "minecraft:spruce_stairs[half=top,shape=straight,facing=east]", + "134:5": "minecraft:spruce_stairs[half=top,shape=straight,facing=west]", + "134:6": "minecraft:spruce_stairs[half=top,shape=straight,facing=south]", + "134:7": "minecraft:spruce_stairs[half=top,shape=straight,facing=north]", + "135:0": "minecraft:birch_stairs[half=bottom,shape=straight,facing=east]", + "135:1": "minecraft:birch_stairs[half=bottom,shape=straight,facing=west]", + "135:2": "minecraft:birch_stairs[half=bottom,shape=straight,facing=south]", + "135:3": "minecraft:birch_stairs[half=bottom,shape=straight,facing=north]", + "135:4": "minecraft:birch_stairs[half=top,shape=straight,facing=east]", + "135:5": "minecraft:birch_stairs[half=top,shape=straight,facing=west]", + "135:6": "minecraft:birch_stairs[half=top,shape=straight,facing=south]", + "135:7": "minecraft:birch_stairs[half=top,shape=straight,facing=north]", + "136:0": "minecraft:jungle_stairs[half=bottom,shape=straight,facing=east]", + "136:1": "minecraft:jungle_stairs[half=bottom,shape=straight,facing=west]", + "136:2": "minecraft:jungle_stairs[half=bottom,shape=straight,facing=south]", + "136:3": "minecraft:jungle_stairs[half=bottom,shape=straight,facing=north]", + "136:4": "minecraft:jungle_stairs[half=top,shape=straight,facing=east]", + "136:5": "minecraft:jungle_stairs[half=top,shape=straight,facing=west]", + "136:6": "minecraft:jungle_stairs[half=top,shape=straight,facing=south]", + "136:7": "minecraft:jungle_stairs[half=top,shape=straight,facing=north]", + "137:0": "minecraft:command_block[conditional=false,facing=down]", + "137:1": "minecraft:command_block[conditional=false,facing=up]", + "137:2": "minecraft:command_block[conditional=false,facing=north]", + "137:3": "minecraft:command_block[conditional=false,facing=south]", + "137:4": "minecraft:command_block[conditional=false,facing=west]", + "137:5": "minecraft:command_block[conditional=false,facing=east]", + "137:8": "minecraft:command_block[conditional=true,facing=down]", + "137:9": "minecraft:command_block[conditional=true,facing=up]", + "137:10": "minecraft:command_block[conditional=true,facing=north]", + "137:11": "minecraft:command_block[conditional=true,facing=south]", + "137:12": "minecraft:command_block[conditional=true,facing=west]", + "137:13": "minecraft:command_block[conditional=true,facing=east]", + "138": "minecraft:beacon", + "139:0": "minecraft:cobblestone_wall[east=false,south=false,north=false,west=false,up=false]", + "139:1": "minecraft:mossy_cobblestone_wall[east=false,south=false,north=false,west=false,up=false]", + "140": "minecraft:potted_cactus", + "141:0": "minecraft:carrots[age=0]", + "141:1": "minecraft:carrots[age=1]", + "141:2": "minecraft:carrots[age=2]", + "141:3": "minecraft:carrots[age=3]", + "141:4": "minecraft:carrots[age=4]", + "141:5": "minecraft:carrots[age=5]", + "141:6": "minecraft:carrots[age=6]", + "141:7": "minecraft:carrots[age=7]", + "142:0": "minecraft:potatoes[age=0]", + "142:1": "minecraft:potatoes[age=1]", + "142:2": "minecraft:potatoes[age=2]", + "142:3": "minecraft:potatoes[age=3]", + "142:4": "minecraft:potatoes[age=4]", + "142:5": "minecraft:potatoes[age=5]", + "142:6": "minecraft:potatoes[age=6]", + "142:7": "minecraft:potatoes[age=7]", + "143:0": "minecraft:oak_button[face=ceiling,powered=false,facing=north]", + "143:1": "minecraft:oak_button[face=wall,powered=false,facing=east]", + "143:2": "minecraft:oak_button[face=wall,powered=false,facing=west]", + "143:3": "minecraft:oak_button[face=wall,powered=false,facing=south]", + "143:4": "minecraft:oak_button[face=wall,powered=false,facing=north]", + "143:5": "minecraft:oak_button[face=floor,powered=false,facing=north]", + "143:8": "minecraft:oak_button[face=ceiling,powered=true,facing=north]", + "143:9": "minecraft:oak_button[face=wall,powered=true,facing=east]", + "143:10": "minecraft:oak_button[face=wall,powered=true,facing=west]", + "143:11": "minecraft:oak_button[face=wall,powered=true,facing=south]", + "143:12": "minecraft:oak_button[face=wall,powered=true,facing=north]", + "143:13": "minecraft:oak_button[face=floor,powered=true,facing=north]", + "144:0": "%%FILTER_ME%%[nodrop=false,facing=down]", + "144:1": "%%FILTER_ME%%[nodrop=false,facing=up]", + "144:2": "%%FILTER_ME%%[nodrop=false,facing=north]", + "144:3": "%%FILTER_ME%%[nodrop=false,facing=south]", + "144:4": "%%FILTER_ME%%[nodrop=false,facing=west]", + "144:5": "%%FILTER_ME%%[nodrop=false,facing=east]", + "144:8": "%%FILTER_ME%%[nodrop=true,facing=down]", + "144:9": "%%FILTER_ME%%[nodrop=true,facing=up]", + "144:10": "%%FILTER_ME%%[nodrop=true,facing=north]", + "144:11": "%%FILTER_ME%%[nodrop=true,facing=south]", + "144:12": "%%FILTER_ME%%[nodrop=true,facing=west]", + "144:13": "%%FILTER_ME%%[nodrop=true,facing=east]", + "145:0": "minecraft:anvil[facing=south]", + "145:1": "minecraft:anvil[facing=west]", + "145:2": "minecraft:anvil[facing=north]", + "145:3": "minecraft:anvil[facing=east]", + "145:4": "minecraft:chipped_anvil[facing=south]", + "145:5": "minecraft:chipped_anvil[facing=west]", + "145:6": "minecraft:chipped_anvil[facing=north]", + "145:7": "minecraft:chipped_anvil[facing=east]", + "145:8": "minecraft:damaged_anvil[facing=south]", + "145:9": "minecraft:damaged_anvil[facing=west]", + "145:10": "minecraft:damaged_anvil[facing=north]", + "145:11": "minecraft:damaged_anvil[facing=east]", + "146:0": "minecraft:trapped_chest[facing=north,type=single]", + "146:3": "minecraft:trapped_chest[facing=south,type=single]", + "146:4": "minecraft:trapped_chest[facing=west,type=single]", + "146:5": "minecraft:trapped_chest[facing=east,type=single]", + "147:0": "minecraft:light_weighted_pressure_plate[power=0]", + "147:1": "minecraft:light_weighted_pressure_plate[power=1]", + "147:2": "minecraft:light_weighted_pressure_plate[power=2]", + "147:3": "minecraft:light_weighted_pressure_plate[power=3]", + "147:4": "minecraft:light_weighted_pressure_plate[power=4]", + "147:5": "minecraft:light_weighted_pressure_plate[power=5]", + "147:6": "minecraft:light_weighted_pressure_plate[power=6]", + "147:7": "minecraft:light_weighted_pressure_plate[power=7]", + "147:8": "minecraft:light_weighted_pressure_plate[power=8]", + "147:9": "minecraft:light_weighted_pressure_plate[power=9]", + "147:10": "minecraft:light_weighted_pressure_plate[power=10]", + "147:11": "minecraft:light_weighted_pressure_plate[power=11]", + "147:12": "minecraft:light_weighted_pressure_plate[power=12]", + "147:13": "minecraft:light_weighted_pressure_plate[power=13]", + "147:14": "minecraft:light_weighted_pressure_plate[power=14]", + "147:15": "minecraft:light_weighted_pressure_plate[power=15]", + "148:0": "minecraft:heavy_weighted_pressure_plate[power=0]", + "148:1": "minecraft:heavy_weighted_pressure_plate[power=1]", + "148:2": "minecraft:heavy_weighted_pressure_plate[power=2]", + "148:3": "minecraft:heavy_weighted_pressure_plate[power=3]", + "148:4": "minecraft:heavy_weighted_pressure_plate[power=4]", + "148:5": "minecraft:heavy_weighted_pressure_plate[power=5]", + "148:6": "minecraft:heavy_weighted_pressure_plate[power=6]", + "148:7": "minecraft:heavy_weighted_pressure_plate[power=7]", + "148:8": "minecraft:heavy_weighted_pressure_plate[power=8]", + "148:9": "minecraft:heavy_weighted_pressure_plate[power=9]", + "148:10": "minecraft:heavy_weighted_pressure_plate[power=10]", + "148:11": "minecraft:heavy_weighted_pressure_plate[power=11]", + "148:12": "minecraft:heavy_weighted_pressure_plate[power=12]", + "148:13": "minecraft:heavy_weighted_pressure_plate[power=13]", + "148:14": "minecraft:heavy_weighted_pressure_plate[power=14]", + "148:15": "minecraft:heavy_weighted_pressure_plate[power=15]", + "149:0": "minecraft:comparator[mode=compare,powered=false,facing=south]", + "149:1": "minecraft:comparator[mode=compare,powered=false,facing=west]", + "149:2": "minecraft:comparator[mode=compare,powered=false,facing=north]", + "149:3": "minecraft:comparator[mode=compare,powered=false,facing=east]", + "149:4": "minecraft:comparator[mode=subtract,powered=false,facing=south]", + "149:5": "minecraft:comparator[mode=subtract,powered=false,facing=west]", + "149:6": "minecraft:comparator[mode=subtract,powered=false,facing=north]", + "149:7": "minecraft:comparator[mode=subtract,powered=false,facing=east]", + "149:8": "minecraft:comparator[mode=compare,powered=true,facing=south]", + "149:9": "minecraft:comparator[mode=compare,powered=true,facing=west]", + "149:10": "minecraft:comparator[mode=compare,powered=true,facing=north]", + "149:11": "minecraft:comparator[mode=compare,powered=true,facing=east]", + "149:12": "minecraft:comparator[mode=subtract,powered=true,facing=south]", + "149:13": "minecraft:comparator[mode=subtract,powered=true,facing=west]", + "149:14": "minecraft:comparator[mode=subtract,powered=true,facing=north]", + "149:15": "minecraft:comparator[mode=subtract,powered=true,facing=east]", + "150:0": "minecraft:comparator[mode=compare,powered=false,facing=south]", + "150:1": "minecraft:comparator[mode=compare,powered=false,facing=west]", + "150:2": "minecraft:comparator[mode=compare,powered=false,facing=north]", + "150:3": "minecraft:comparator[mode=compare,powered=false,facing=east]", + "150:4": "minecraft:comparator[mode=subtract,powered=false,facing=south]", + "150:5": "minecraft:comparator[mode=subtract,powered=false,facing=west]", + "150:6": "minecraft:comparator[mode=subtract,powered=false,facing=north]", + "150:7": "minecraft:comparator[mode=subtract,powered=false,facing=east]", + "150:8": "minecraft:comparator[mode=compare,powered=true,facing=south]", + "150:9": "minecraft:comparator[mode=compare,powered=true,facing=west]", + "150:10": "minecraft:comparator[mode=compare,powered=true,facing=north]", + "150:11": "minecraft:comparator[mode=compare,powered=true,facing=east]", + "150:12": "minecraft:comparator[mode=subtract,powered=true,facing=south]", + "150:13": "minecraft:comparator[mode=subtract,powered=true,facing=west]", + "150:14": "minecraft:comparator[mode=subtract,powered=true,facing=north]", + "150:15": "minecraft:comparator[mode=subtract,powered=true,facing=east]", + "151:0": "minecraft:daylight_detector[power=0,inverted=false]", + "151:1": "minecraft:daylight_detector[power=1,inverted=false]", + "151:2": "minecraft:daylight_detector[power=2,inverted=false]", + "151:3": "minecraft:daylight_detector[power=3,inverted=false]", + "151:4": "minecraft:daylight_detector[power=4,inverted=false]", + "151:5": "minecraft:daylight_detector[power=5,inverted=false]", + "151:6": "minecraft:daylight_detector[power=6,inverted=false]", + "151:7": "minecraft:daylight_detector[power=7,inverted=false]", + "151:8": "minecraft:daylight_detector[power=8,inverted=false]", + "151:9": "minecraft:daylight_detector[power=9,inverted=false]", + "151:10": "minecraft:daylight_detector[power=10,inverted=false]", + "151:11": "minecraft:daylight_detector[power=11,inverted=false]", + "151:12": "minecraft:daylight_detector[power=12,inverted=false]", + "151:13": "minecraft:daylight_detector[power=13,inverted=false]", + "151:14": "minecraft:daylight_detector[power=14,inverted=false]", + "151:15": "minecraft:daylight_detector[power=15,inverted=false]", + "152": "minecraft:redstone_block", + "153": "minecraft:nether_quartz_ore", + "154:0": "minecraft:hopper[facing=down,enabled=true]", + "154:2": "minecraft:hopper[facing=north,enabled=true]", + "154:3": "minecraft:hopper[facing=south,enabled=true]", + "154:4": "minecraft:hopper[facing=west,enabled=true]", + "154:5": "minecraft:hopper[facing=east,enabled=true]", + "154:8": "minecraft:hopper[facing=down,enabled=false]", + "154:10": "minecraft:hopper[facing=north,enabled=false]", + "154:11": "minecraft:hopper[facing=south,enabled=false]", + "154:12": "minecraft:hopper[facing=west,enabled=false]", + "154:13": "minecraft:hopper[facing=east,enabled=false]", + "155:0": "minecraft:quartz_block", + "155:1": "minecraft:chiseled_quartz_block", + "155:2": "minecraft:quartz_pillar[axis=y]", + "155:3": "minecraft:quartz_pillar[axis=x]", + "155:4": "minecraft:quartz_pillar[axis=z]", + "156:0": "minecraft:quartz_stairs[half=bottom,shape=straight,facing=east]", + "156:1": "minecraft:quartz_stairs[half=bottom,shape=straight,facing=west]", + "156:2": "minecraft:quartz_stairs[half=bottom,shape=straight,facing=south]", + "156:3": "minecraft:quartz_stairs[half=bottom,shape=straight,facing=north]", + "156:4": "minecraft:quartz_stairs[half=top,shape=straight,facing=east]", + "156:5": "minecraft:quartz_stairs[half=top,shape=straight,facing=west]", + "156:6": "minecraft:quartz_stairs[half=top,shape=straight,facing=south]", + "156:7": "minecraft:quartz_stairs[half=top,shape=straight,facing=north]", + "157:0": "minecraft:activator_rail[powered=false,shape=north_south]", + "157:1": "minecraft:activator_rail[powered=false,shape=east_west]", + "157:2": "minecraft:activator_rail[powered=false,shape=ascending_east]", + "157:3": "minecraft:activator_rail[powered=false,shape=ascending_west]", + "157:4": "minecraft:activator_rail[powered=false,shape=ascending_north]", + "157:5": "minecraft:activator_rail[powered=false,shape=ascending_south]", + "157:8": "minecraft:activator_rail[powered=true,shape=north_south]", + "157:9": "minecraft:activator_rail[powered=true,shape=east_west]", + "157:10": "minecraft:activator_rail[powered=true,shape=ascending_east]", + "157:11": "minecraft:activator_rail[powered=true,shape=ascending_west]", + "157:12": "minecraft:activator_rail[powered=true,shape=ascending_north]", + "157:13": "minecraft:activator_rail[powered=true,shape=ascending_south]", + "158:0": "minecraft:dropper[triggered=false,facing=down]", + "158:1": "minecraft:dropper[triggered=false,facing=up]", + "158:2": "minecraft:dropper[triggered=false,facing=north]", + "158:3": "minecraft:dropper[triggered=false,facing=south]", + "158:4": "minecraft:dropper[triggered=false,facing=west]", + "158:5": "minecraft:dropper[triggered=false,facing=east]", + "158:8": "minecraft:dropper[triggered=true,facing=down]", + "158:9": "minecraft:dropper[triggered=true,facing=up]", + "158:10": "minecraft:dropper[triggered=true,facing=north]", + "158:11": "minecraft:dropper[triggered=true,facing=south]", + "158:12": "minecraft:dropper[triggered=true,facing=west]", + "158:13": "minecraft:dropper[triggered=true,facing=east]", + "159:0": "minecraft:white_terracotta", + "159:1": "minecraft:orange_terracotta", + "159:2": "minecraft:magenta_terracotta", + "159:3": "minecraft:light_blue_terracotta", + "159:4": "minecraft:yellow_terracotta", + "159:5": "minecraft:lime_terracotta", + "159:6": "minecraft:pink_terracotta", + "159:7": "minecraft:gray_terracotta", + "159:8": "minecraft:light_gray_terracotta", + "159:9": "minecraft:cyan_terracotta", + "159:10": "minecraft:purple_terracotta", + "159:11": "minecraft:blue_terracotta", + "159:12": "minecraft:brown_terracotta", + "159:13": "minecraft:green_terracotta", + "159:14": "minecraft:red_terracotta", + "159:15": "minecraft:black_terracotta", + "160:0": "minecraft:white_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:1": "minecraft:orange_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:2": "minecraft:magenta_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:3": "minecraft:light_blue_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:4": "minecraft:yellow_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:5": "minecraft:lime_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:6": "minecraft:pink_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:7": "minecraft:gray_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:8": "minecraft:light_gray_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:9": "minecraft:cyan_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:10": "minecraft:purple_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:11": "minecraft:blue_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:12": "minecraft:brown_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:13": "minecraft:green_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:14": "minecraft:red_stained_glass_pane[east=false,south=false,north=false,west=false]", + "160:15": "minecraft:black_stained_glass_pane[east=false,south=false,north=false,west=false]", + "161:0": "minecraft:acacia_leaves[check_decay=false,decayable=true]", + "161:1": "minecraft:dark_oak_leaves[check_decay=false,decayable=true]", + "161:4": "minecraft:acacia_leaves[check_decay=false,decayable=false]", + "161:5": "minecraft:dark_oak_leaves[check_decay=false,decayable=false]", + "161:8": "minecraft:acacia_leaves[check_decay=true,decayable=true]", + "161:9": "minecraft:dark_oak_leaves[check_decay=true,decayable=true]", + "161:12": "minecraft:acacia_leaves[check_decay=true,decayable=false]", + "161:13": "minecraft:dark_oak_leaves[check_decay=true,decayable=false]", + "162:0": "minecraft:acacia_log[axis=y]", + "162:1": "minecraft:dark_oak_log[axis=y]", + "162:4": "minecraft:acacia_log[axis=x]", + "162:5": "minecraft:dark_oak_log[axis=x]", + "162:8": "minecraft:acacia_log[axis=z]", + "162:9": "minecraft:dark_oak_log[axis=z]", + "162:12": "minecraft:acacia_bark", + "162:13": "minecraft:dark_oak_bark", + "163:0": "minecraft:acacia_stairs[half=bottom,shape=straight,facing=east]", + "163:1": "minecraft:acacia_stairs[half=bottom,shape=straight,facing=west]", + "163:2": "minecraft:acacia_stairs[half=bottom,shape=straight,facing=south]", + "163:3": "minecraft:acacia_stairs[half=bottom,shape=straight,facing=north]", + "163:4": "minecraft:acacia_stairs[half=top,shape=straight,facing=east]", + "163:5": "minecraft:acacia_stairs[half=top,shape=straight,facing=west]", + "163:6": "minecraft:acacia_stairs[half=top,shape=straight,facing=south]", + "163:7": "minecraft:acacia_stairs[half=top,shape=straight,facing=north]", + "164:0": "minecraft:dark_oak_stairs[half=bottom,shape=straight,facing=east]", + "164:1": "minecraft:dark_oak_stairs[half=bottom,shape=straight,facing=west]", + "164:2": "minecraft:dark_oak_stairs[half=bottom,shape=straight,facing=south]", + "164:3": "minecraft:dark_oak_stairs[half=bottom,shape=straight,facing=north]", + "164:4": "minecraft:dark_oak_stairs[half=top,shape=straight,facing=east]", + "164:5": "minecraft:dark_oak_stairs[half=top,shape=straight,facing=west]", + "164:6": "minecraft:dark_oak_stairs[half=top,shape=straight,facing=south]", + "164:7": "minecraft:dark_oak_stairs[half=top,shape=straight,facing=north]", + "165": "minecraft:slime_block", + "166": "minecraft:barrier", + "167:0": "minecraft:iron_trapdoor[half=bottom,facing=north,open=false]", + "167:1": "minecraft:iron_trapdoor[half=bottom,facing=south,open=false]", + "167:2": "minecraft:iron_trapdoor[half=bottom,facing=west,open=false]", + "167:3": "minecraft:iron_trapdoor[half=bottom,facing=east,open=false]", + "167:4": "minecraft:iron_trapdoor[half=bottom,facing=north,open=true]", + "167:5": "minecraft:iron_trapdoor[half=bottom,facing=south,open=true]", + "167:6": "minecraft:iron_trapdoor[half=bottom,facing=west,open=true]", + "167:7": "minecraft:iron_trapdoor[half=bottom,facing=east,open=true]", + "167:8": "minecraft:iron_trapdoor[half=top,facing=north,open=false]", + "167:9": "minecraft:iron_trapdoor[half=top,facing=south,open=false]", + "167:10": "minecraft:iron_trapdoor[half=top,facing=west,open=false]", + "167:11": "minecraft:iron_trapdoor[half=top,facing=east,open=false]", + "167:12": "minecraft:iron_trapdoor[half=top,facing=north,open=true]", + "167:13": "minecraft:iron_trapdoor[half=top,facing=south,open=true]", + "167:14": "minecraft:iron_trapdoor[half=top,facing=west,open=true]", + "167:15": "minecraft:iron_trapdoor[half=top,facing=east,open=true]", + "168:0": "minecraft:prismarine", + "168:1": "minecraft:prismarine_bricks", + "168:2": "minecraft:dark_prismarine", + "169": "minecraft:sea_lantern", + "170:0": "minecraft:hay_block[axis=y]", + "170:4": "minecraft:hay_block[axis=x]", + "170:8": "minecraft:hay_block[axis=z]", + "171:0": "minecraft:white_carpet", + "171:1": "minecraft:orange_carpet", + "171:2": "minecraft:magenta_carpet", + "171:3": "minecraft:light_blue_carpet", + "171:4": "minecraft:yellow_carpet", + "171:5": "minecraft:lime_carpet", + "171:6": "minecraft:pink_carpet", + "171:7": "minecraft:gray_carpet", + "171:8": "minecraft:light_gray_carpet", + "171:9": "minecraft:cyan_carpet", + "171:10": "minecraft:purple_carpet", + "171:11": "minecraft:blue_carpet", + "171:12": "minecraft:brown_carpet", + "171:13": "minecraft:green_carpet", + "171:14": "minecraft:red_carpet", + "171:15": "minecraft:black_carpet", + "172": "minecraft:terracotta", + "173": "minecraft:coal_block", + "174": "minecraft:packed_ice", + "175:0": "minecraft:sunflower[half=lower]", + "175:1": "minecraft:lilac[half=lower]", + "175:2": "minecraft:tall_grass[half=lower]", + "175:3": "minecraft:large_fern[half=lower]", + "175:4": "minecraft:rose_bush[half=lower]", + "175:5": "minecraft:peony[half=lower]", + "175:8": "minecraft:peony[half=upper]", + "175:9": "minecraft:peony[half=upper]", + "175:10": "minecraft:peony[half=upper]", + "175:11": "minecraft:peony[half=upper]", + "176:0": "minecraft:white_banner[rotation=0]", + "176:1": "minecraft:white_banner[rotation=1]", + "176:2": "minecraft:white_banner[rotation=2]", + "176:3": "minecraft:white_banner[rotation=3]", + "176:4": "minecraft:white_banner[rotation=4]", + "176:5": "minecraft:white_banner[rotation=5]", + "176:6": "minecraft:white_banner[rotation=6]", + "176:7": "minecraft:white_banner[rotation=7]", + "176:8": "minecraft:white_banner[rotation=8]", + "176:9": "minecraft:white_banner[rotation=9]", + "176:10": "minecraft:white_banner[rotation=10]", + "176:11": "minecraft:white_banner[rotation=11]", + "176:12": "minecraft:white_banner[rotation=12]", + "176:13": "minecraft:white_banner[rotation=13]", + "176:14": "minecraft:white_banner[rotation=14]", + "176:15": "minecraft:white_banner[rotation=15]", + "177:0": "minecraft:white_wall_banner[facing=north]", + "177:3": "minecraft:white_wall_banner[facing=south]", + "177:4": "minecraft:white_wall_banner[facing=west]", + "177:5": "minecraft:white_wall_banner[facing=east]", + "178:0": "minecraft:daylight_detector[power=0,inverted=true]", + "178:1": "minecraft:daylight_detector[power=1,inverted=true]", + "178:2": "minecraft:daylight_detector[power=2,inverted=true]", + "178:3": "minecraft:daylight_detector[power=3,inverted=true]", + "178:4": "minecraft:daylight_detector[power=4,inverted=true]", + "178:5": "minecraft:daylight_detector[power=5,inverted=true]", + "178:6": "minecraft:daylight_detector[power=6,inverted=true]", + "178:7": "minecraft:daylight_detector[power=7,inverted=true]", + "178:8": "minecraft:daylight_detector[power=8,inverted=true]", + "178:9": "minecraft:daylight_detector[power=9,inverted=true]", + "178:10": "minecraft:daylight_detector[power=10,inverted=true]", + "178:11": "minecraft:daylight_detector[power=11,inverted=true]", + "178:12": "minecraft:daylight_detector[power=12,inverted=true]", + "178:13": "minecraft:daylight_detector[power=13,inverted=true]", + "178:14": "minecraft:daylight_detector[power=14,inverted=true]", + "178:15": "minecraft:daylight_detector[power=15,inverted=true]", + "179:0": "minecraft:red_sandstone", + "179:1": "minecraft:chiseled_red_sandstone", + "179:2": "minecraft:cut_red_sandstone", + "180:0": "minecraft:red_sandstone_stairs[half=bottom,shape=straight,facing=east]", + "180:1": "minecraft:red_sandstone_stairs[half=bottom,shape=straight,facing=west]", + "180:2": "minecraft:red_sandstone_stairs[half=bottom,shape=straight,facing=south]", + "180:3": "minecraft:red_sandstone_stairs[half=bottom,shape=straight,facing=north]", + "180:4": "minecraft:red_sandstone_stairs[half=top,shape=straight,facing=east]", + "180:5": "minecraft:red_sandstone_stairs[half=top,shape=straight,facing=west]", + "180:6": "minecraft:red_sandstone_stairs[half=top,shape=straight,facing=south]", + "180:7": "minecraft:red_sandstone_stairs[half=top,shape=straight,facing=north]", + "181:0": "minecraft:red_sandstone_slab[type=double]", + "181:8": "minecraft:smooth_red_sandstone", + "182:0": "minecraft:red_sandstone_slab[type=bottom]", + "182:8": "minecraft:red_sandstone_slab[type=top]", + "183:0": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=south,open=false]", + "183:1": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=west,open=false]", + "183:2": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=north,open=false]", + "183:3": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=east,open=false]", + "183:4": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=south,open=true]", + "183:5": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=west,open=true]", + "183:6": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=north,open=true]", + "183:7": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=east,open=true]", + "183:8": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=south,open=false]", + "183:9": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=west,open=false]", + "183:10": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=north,open=false]", + "183:11": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=east,open=false]", + "183:12": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=south,open=true]", + "183:13": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=west,open=true]", + "183:14": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=north,open=true]", + "183:15": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=east,open=true]", + "184:0": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=south,open=false]", + "184:1": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=west,open=false]", + "184:2": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=north,open=false]", + "184:3": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=east,open=false]", + "184:4": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=south,open=true]", + "184:5": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=west,open=true]", + "184:6": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=north,open=true]", + "184:7": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=east,open=true]", + "184:8": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=south,open=false]", + "184:9": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=west,open=false]", + "184:10": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=north,open=false]", + "184:11": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=east,open=false]", + "184:12": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=south,open=true]", + "184:13": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=west,open=true]", + "184:14": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=north,open=true]", + "184:15": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=east,open=true]", + "185:0": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=south,open=false]", + "185:1": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=west,open=false]", + "185:2": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=north,open=false]", + "185:3": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=east,open=false]", + "185:4": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=south,open=true]", + "185:5": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=west,open=true]", + "185:6": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=north,open=true]", + "185:7": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=east,open=true]", + "185:8": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=south,open=false]", + "185:9": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=west,open=false]", + "185:10": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=north,open=false]", + "185:11": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=east,open=false]", + "185:12": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=south,open=true]", + "185:13": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=west,open=true]", + "185:14": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=north,open=true]", + "185:15": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=east,open=true]", + "186:0": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=south,open=false]", + "186:1": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=west,open=false]", + "186:2": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=north,open=false]", + "186:3": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=east,open=false]", + "186:4": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=south,open=true]", + "186:5": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=west,open=true]", + "186:6": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=north,open=true]", + "186:7": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=east,open=true]", + "186:8": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=south,open=false]", + "186:9": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=west,open=false]", + "186:10": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=north,open=false]", + "186:11": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=east,open=false]", + "186:12": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=south,open=true]", + "186:13": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=west,open=true]", + "186:14": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=north,open=true]", + "186:15": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=east,open=true]", + "187:0": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=south,open=false]", + "187:1": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=west,open=false]", + "187:2": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=north,open=false]", + "187:3": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=east,open=false]", + "187:4": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=south,open=true]", + "187:5": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=west,open=true]", + "187:6": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=north,open=true]", + "187:7": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=east,open=true]", + "187:8": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=south,open=false]", + "187:9": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=west,open=false]", + "187:10": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=north,open=false]", + "187:11": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=east,open=false]", + "187:12": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=south,open=true]", + "187:13": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=west,open=true]", + "187:14": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=north,open=true]", + "187:15": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=east,open=true]", + "188": "minecraft:spruce_fence[east=false,south=false,north=false,west=false]", + "189": "minecraft:birch_fence[east=false,south=false,north=false,west=false]", + "190": "minecraft:jungle_fence[east=false,south=false,north=false,west=false]", + "191": "minecraft:dark_oak_fence[east=false,south=false,north=false,west=false]", + "192": "minecraft:acacia_fence[east=false,south=false,north=false,west=false]", + "193:0": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=east,open=false]", + "193:1": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=south,open=false]", + "193:2": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=west,open=false]", + "193:3": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=north,open=false]", + "193:4": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=east,open=true]", + "193:5": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=south,open=true]", + "193:6": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=west,open=true]", + "193:7": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=north,open=true]", + "193:8": "minecraft:spruce_door[hinge=left,half=upper,powered=false,facing=east,open=false]", + "193:9": "minecraft:spruce_door[hinge=right,half=upper,powered=false,facing=east,open=false]", + "193:10": "minecraft:spruce_door[hinge=left,half=upper,powered=true,facing=east,open=false]", + "193:11": "minecraft:spruce_door[hinge=right,half=upper,powered=true,facing=east,open=false]", + "194:0": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=east,open=false]", + "194:1": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=south,open=false]", + "194:2": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=west,open=false]", + "194:3": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=north,open=false]", + "194:4": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=east,open=true]", + "194:5": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=south,open=true]", + "194:6": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=west,open=true]", + "194:7": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=north,open=true]", + "194:8": "minecraft:birch_door[hinge=left,half=upper,powered=false,facing=east,open=false]", + "194:9": "minecraft:birch_door[hinge=right,half=upper,powered=false,facing=east,open=false]", + "194:10": "minecraft:birch_door[hinge=left,half=upper,powered=true,facing=east,open=false]", + "194:11": "minecraft:birch_door[hinge=right,half=upper,powered=true,facing=east,open=false]", + "195:0": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=east,open=false]", + "195:1": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=south,open=false]", + "195:2": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=west,open=false]", + "195:3": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=north,open=false]", + "195:4": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=east,open=true]", + "195:5": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=south,open=true]", + "195:6": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=west,open=true]", + "195:7": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=north,open=true]", + "195:8": "minecraft:jungle_door[hinge=left,half=upper,powered=false,facing=east,open=false]", + "195:9": "minecraft:jungle_door[hinge=right,half=upper,powered=false,facing=east,open=false]", + "195:10": "minecraft:jungle_door[hinge=left,half=upper,powered=true,facing=east,open=false]", + "195:11": "minecraft:jungle_door[hinge=right,half=upper,powered=true,facing=east,open=false]", + "196:0": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=east,open=false]", + "196:1": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=south,open=false]", + "196:2": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=west,open=false]", + "196:3": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=north,open=false]", + "196:4": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=east,open=true]", + "196:5": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=south,open=true]", + "196:6": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=west,open=true]", + "196:7": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=north,open=true]", + "196:8": "minecraft:acacia_door[hinge=left,half=upper,powered=false,facing=east,open=false]", + "196:9": "minecraft:acacia_door[hinge=right,half=upper,powered=false,facing=east,open=false]", + "196:10": "minecraft:acacia_door[hinge=left,half=upper,powered=true,facing=east,open=false]", + "196:11": "minecraft:acacia_door[hinge=right,half=upper,powered=true,facing=east,open=false]", + "197:0": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=east,open=false]", + "197:1": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=south,open=false]", + "197:2": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=west,open=false]", + "197:3": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=north,open=false]", + "197:4": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=east,open=true]", + "197:5": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=south,open=true]", + "197:6": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=west,open=true]", + "197:7": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=north,open=true]", + "197:8": "minecraft:dark_oak_door[hinge=left,half=upper,powered=false,facing=east,open=false]", + "197:9": "minecraft:dark_oak_door[hinge=right,half=upper,powered=false,facing=east,open=false]", + "197:10": "minecraft:dark_oak_door[hinge=left,half=upper,powered=true,facing=east,open=false]", + "197:11": "minecraft:dark_oak_door[hinge=right,half=upper,powered=true,facing=east,open=false]", + "198:0": "minecraft:end_rod[facing=down]", + "198:1": "minecraft:end_rod[facing=up]", + "198:2": "minecraft:end_rod[facing=north]", + "198:3": "minecraft:end_rod[facing=south]", + "198:4": "minecraft:end_rod[facing=west]", + "198:5": "minecraft:end_rod[facing=east]", + "199": "minecraft:chorus_plant[east=false,south=false,north=false,west=false,up=false,down=false]", + "200:0": "minecraft:chorus_flower[age=0]", + "200:1": "minecraft:chorus_flower[age=1]", + "200:2": "minecraft:chorus_flower[age=2]", + "200:3": "minecraft:chorus_flower[age=3]", + "200:4": "minecraft:chorus_flower[age=4]", + "200:5": "minecraft:chorus_flower[age=5]", + "201": "minecraft:purpur_block", + "202:0": "minecraft:purpur_pillar[axis=y]", + "202:4": "minecraft:purpur_pillar[axis=x]", + "202:8": "minecraft:purpur_pillar[axis=z]", + "203:0": "minecraft:purpur_stairs[half=bottom,shape=straight,facing=east]", + "203:1": "minecraft:purpur_stairs[half=bottom,shape=straight,facing=west]", + "203:2": "minecraft:purpur_stairs[half=bottom,shape=straight,facing=south]", + "203:3": "minecraft:purpur_stairs[half=bottom,shape=straight,facing=north]", + "203:4": "minecraft:purpur_stairs[half=top,shape=straight,facing=east]", + "203:5": "minecraft:purpur_stairs[half=top,shape=straight,facing=west]", + "203:6": "minecraft:purpur_stairs[half=top,shape=straight,facing=south]", + "203:7": "minecraft:purpur_stairs[half=top,shape=straight,facing=north]", + "204": "minecraft:purpur_slab[type=double]", + "205:0": "minecraft:purpur_slab[type=bottom]", + "205:8": "minecraft:purpur_slab[type=top]", + "206": "minecraft:end_stone_bricks", + "207:0": "minecraft:beetroots[age=0]", + "207:1": "minecraft:beetroots[age=1]", + "207:2": "minecraft:beetroots[age=2]", + "207:3": "minecraft:beetroots[age=3]", + "208": "minecraft:grass_path", + "209": "minecraft:end_gateway", + "210:0": "minecraft:repeating_command_block[conditional=false,facing=down]", + "210:1": "minecraft:repeating_command_block[conditional=false,facing=up]", + "210:2": "minecraft:repeating_command_block[conditional=false,facing=north]", + "210:3": "minecraft:repeating_command_block[conditional=false,facing=south]", + "210:4": "minecraft:repeating_command_block[conditional=false,facing=west]", + "210:5": "minecraft:repeating_command_block[conditional=false,facing=east]", + "210:8": "minecraft:repeating_command_block[conditional=true,facing=down]", + "210:9": "minecraft:repeating_command_block[conditional=true,facing=up]", + "210:10": "minecraft:repeating_command_block[conditional=true,facing=north]", + "210:11": "minecraft:repeating_command_block[conditional=true,facing=south]", + "210:12": "minecraft:repeating_command_block[conditional=true,facing=west]", + "210:13": "minecraft:repeating_command_block[conditional=true,facing=east]", + "211:0": "minecraft:chain_command_block[conditional=false,facing=down]", + "211:1": "minecraft:chain_command_block[conditional=false,facing=up]", + "211:2": "minecraft:chain_command_block[conditional=false,facing=north]", + "211:3": "minecraft:chain_command_block[conditional=false,facing=south]", + "211:4": "minecraft:chain_command_block[conditional=false,facing=west]", + "211:5": "minecraft:chain_command_block[conditional=false,facing=east]", + "211:8": "minecraft:chain_command_block[conditional=true,facing=down]", + "211:9": "minecraft:chain_command_block[conditional=true,facing=up]", + "211:10": "minecraft:chain_command_block[conditional=true,facing=north]", + "211:11": "minecraft:chain_command_block[conditional=true,facing=south]", + "211:12": "minecraft:chain_command_block[conditional=true,facing=west]", + "211:13": "minecraft:chain_command_block[conditional=true,facing=east]", + "212:0": "minecraft:frosted_ice[age=0]", + "212:1": "minecraft:frosted_ice[age=1]", + "212:2": "minecraft:frosted_ice[age=2]", + "212:3": "minecraft:frosted_ice[age=3]", + "213": "minecraft:magma_block", + "214": "minecraft:nether_wart_block", + "215": "minecraft:red_nether_bricks", + "216:0": "minecraft:bone_block[axis=y]", + "216:4": "minecraft:bone_block[axis=x]", + "216:8": "minecraft:bone_block[axis=z]", + "217": "minecraft:structure_void", + "218:0": "minecraft:observer[powered=false,facing=down]", + "218:1": "minecraft:observer[powered=false,facing=up]", + "218:2": "minecraft:observer[powered=false,facing=north]", + "218:3": "minecraft:observer[powered=false,facing=south]", + "218:4": "minecraft:observer[powered=false,facing=west]", + "218:5": "minecraft:observer[powered=false,facing=east]", + "218:8": "minecraft:observer[powered=true,facing=down]", + "218:9": "minecraft:observer[powered=true,facing=up]", + "218:10": "minecraft:observer[powered=true,facing=north]", + "218:11": "minecraft:observer[powered=true,facing=south]", + "218:12": "minecraft:observer[powered=true,facing=west]", + "218:13": "minecraft:observer[powered=true,facing=east]", + "219:0": "minecraft:white_shulker_box[facing=down]", + "219:1": "minecraft:white_shulker_box[facing=up]", + "219:2": "minecraft:white_shulker_box[facing=north]", + "219:3": "minecraft:white_shulker_box[facing=south]", + "219:4": "minecraft:white_shulker_box[facing=west]", + "219:5": "minecraft:white_shulker_box[facing=east]", + "220:0": "minecraft:orange_shulker_box[facing=down]", + "220:1": "minecraft:orange_shulker_box[facing=up]", + "220:2": "minecraft:orange_shulker_box[facing=north]", + "220:3": "minecraft:orange_shulker_box[facing=south]", + "220:4": "minecraft:orange_shulker_box[facing=west]", + "220:5": "minecraft:orange_shulker_box[facing=east]", + "221:0": "minecraft:magenta_shulker_box[facing=down]", + "221:1": "minecraft:magenta_shulker_box[facing=up]", + "221:2": "minecraft:magenta_shulker_box[facing=north]", + "221:3": "minecraft:magenta_shulker_box[facing=south]", + "221:4": "minecraft:magenta_shulker_box[facing=west]", + "221:5": "minecraft:magenta_shulker_box[facing=east]", + "222:0": "minecraft:light_blue_shulker_box[facing=down]", + "222:1": "minecraft:light_blue_shulker_box[facing=up]", + "222:2": "minecraft:light_blue_shulker_box[facing=north]", + "222:3": "minecraft:light_blue_shulker_box[facing=south]", + "222:4": "minecraft:light_blue_shulker_box[facing=west]", + "222:5": "minecraft:light_blue_shulker_box[facing=east]", + "223:0": "minecraft:yellow_shulker_box[facing=down]", + "223:1": "minecraft:yellow_shulker_box[facing=up]", + "223:2": "minecraft:yellow_shulker_box[facing=north]", + "223:3": "minecraft:yellow_shulker_box[facing=south]", + "223:4": "minecraft:yellow_shulker_box[facing=west]", + "223:5": "minecraft:yellow_shulker_box[facing=east]", + "224:0": "minecraft:lime_shulker_box[facing=down]", + "224:1": "minecraft:lime_shulker_box[facing=up]", + "224:2": "minecraft:lime_shulker_box[facing=north]", + "224:3": "minecraft:lime_shulker_box[facing=south]", + "224:4": "minecraft:lime_shulker_box[facing=west]", + "224:5": "minecraft:lime_shulker_box[facing=east]", + "225:0": "minecraft:pink_shulker_box[facing=down]", + "225:1": "minecraft:pink_shulker_box[facing=up]", + "225:2": "minecraft:pink_shulker_box[facing=north]", + "225:3": "minecraft:pink_shulker_box[facing=south]", + "225:4": "minecraft:pink_shulker_box[facing=west]", + "225:5": "minecraft:pink_shulker_box[facing=east]", + "226:0": "minecraft:gray_shulker_box[facing=down]", + "226:1": "minecraft:gray_shulker_box[facing=up]", + "226:2": "minecraft:gray_shulker_box[facing=north]", + "226:3": "minecraft:gray_shulker_box[facing=south]", + "226:4": "minecraft:gray_shulker_box[facing=west]", + "226:5": "minecraft:gray_shulker_box[facing=east]", + "227:0": "minecraft:light_gray_shulker_box[facing=down]", + "227:1": "minecraft:light_gray_shulker_box[facing=up]", + "227:2": "minecraft:light_gray_shulker_box[facing=north]", + "227:3": "minecraft:light_gray_shulker_box[facing=south]", + "227:4": "minecraft:light_gray_shulker_box[facing=west]", + "227:5": "minecraft:light_gray_shulker_box[facing=east]", + "228:0": "minecraft:cyan_shulker_box[facing=down]", + "228:1": "minecraft:cyan_shulker_box[facing=up]", + "228:2": "minecraft:cyan_shulker_box[facing=north]", + "228:3": "minecraft:cyan_shulker_box[facing=south]", + "228:4": "minecraft:cyan_shulker_box[facing=west]", + "228:5": "minecraft:cyan_shulker_box[facing=east]", + "229:0": "minecraft:purple_shulker_box[facing=down]", + "229:1": "minecraft:purple_shulker_box[facing=up]", + "229:2": "minecraft:purple_shulker_box[facing=north]", + "229:3": "minecraft:purple_shulker_box[facing=south]", + "229:4": "minecraft:purple_shulker_box[facing=west]", + "229:5": "minecraft:purple_shulker_box[facing=east]", + "230:0": "minecraft:blue_shulker_box[facing=down]", + "230:1": "minecraft:blue_shulker_box[facing=up]", + "230:2": "minecraft:blue_shulker_box[facing=north]", + "230:3": "minecraft:blue_shulker_box[facing=south]", + "230:4": "minecraft:blue_shulker_box[facing=west]", + "230:5": "minecraft:blue_shulker_box[facing=east]", + "231:0": "minecraft:brown_shulker_box[facing=down]", + "231:1": "minecraft:brown_shulker_box[facing=up]", + "231:2": "minecraft:brown_shulker_box[facing=north]", + "231:3": "minecraft:brown_shulker_box[facing=south]", + "231:4": "minecraft:brown_shulker_box[facing=west]", + "231:5": "minecraft:brown_shulker_box[facing=east]", + "232:0": "minecraft:green_shulker_box[facing=down]", + "232:1": "minecraft:green_shulker_box[facing=up]", + "232:2": "minecraft:green_shulker_box[facing=north]", + "232:3": "minecraft:green_shulker_box[facing=south]", + "232:4": "minecraft:green_shulker_box[facing=west]", + "232:5": "minecraft:green_shulker_box[facing=east]", + "233:0": "minecraft:red_shulker_box[facing=down]", + "233:1": "minecraft:red_shulker_box[facing=up]", + "233:2": "minecraft:red_shulker_box[facing=north]", + "233:3": "minecraft:red_shulker_box[facing=south]", + "233:4": "minecraft:red_shulker_box[facing=west]", + "233:5": "minecraft:red_shulker_box[facing=east]", + "234:0": "minecraft:black_shulker_box[facing=down]", + "234:1": "minecraft:black_shulker_box[facing=up]", + "234:2": "minecraft:black_shulker_box[facing=north]", + "234:3": "minecraft:black_shulker_box[facing=south]", + "234:4": "minecraft:black_shulker_box[facing=west]", + "234:5": "minecraft:black_shulker_box[facing=east]", + "235:0": "minecraft:white_glazed_terracotta[facing=south]", + "235:1": "minecraft:white_glazed_terracotta[facing=west]", + "235:2": "minecraft:white_glazed_terracotta[facing=north]", + "235:3": "minecraft:white_glazed_terracotta[facing=east]", + "236:0": "minecraft:orange_glazed_terracotta[facing=south]", + "236:1": "minecraft:orange_glazed_terracotta[facing=west]", + "236:2": "minecraft:orange_glazed_terracotta[facing=north]", + "236:3": "minecraft:orange_glazed_terracotta[facing=east]", + "237:0": "minecraft:magenta_glazed_terracotta[facing=south]", + "237:1": "minecraft:magenta_glazed_terracotta[facing=west]", + "237:2": "minecraft:magenta_glazed_terracotta[facing=north]", + "237:3": "minecraft:magenta_glazed_terracotta[facing=east]", + "238:0": "minecraft:light_blue_glazed_terracotta[facing=south]", + "238:1": "minecraft:light_blue_glazed_terracotta[facing=west]", + "238:2": "minecraft:light_blue_glazed_terracotta[facing=north]", + "238:3": "minecraft:light_blue_glazed_terracotta[facing=east]", + "239:0": "minecraft:yellow_glazed_terracotta[facing=south]", + "239:1": "minecraft:yellow_glazed_terracotta[facing=west]", + "239:2": "minecraft:yellow_glazed_terracotta[facing=north]", + "239:3": "minecraft:yellow_glazed_terracotta[facing=east]", + "240:0": "minecraft:lime_glazed_terracotta[facing=south]", + "240:1": "minecraft:lime_glazed_terracotta[facing=west]", + "240:2": "minecraft:lime_glazed_terracotta[facing=north]", + "240:3": "minecraft:lime_glazed_terracotta[facing=east]", + "241:0": "minecraft:pink_glazed_terracotta[facing=south]", + "241:1": "minecraft:pink_glazed_terracotta[facing=west]", + "241:2": "minecraft:pink_glazed_terracotta[facing=north]", + "241:3": "minecraft:pink_glazed_terracotta[facing=east]", + "242:0": "minecraft:gray_glazed_terracotta[facing=south]", + "242:1": "minecraft:gray_glazed_terracotta[facing=west]", + "242:2": "minecraft:gray_glazed_terracotta[facing=north]", + "242:3": "minecraft:gray_glazed_terracotta[facing=east]", + "243:0": "minecraft:light_gray_glazed_terracotta[facing=south]", + "243:1": "minecraft:light_gray_glazed_terracotta[facing=west]", + "243:2": "minecraft:light_gray_glazed_terracotta[facing=north]", + "243:3": "minecraft:light_gray_glazed_terracotta[facing=east]", + "244:0": "minecraft:cyan_glazed_terracotta[facing=south]", + "244:1": "minecraft:cyan_glazed_terracotta[facing=west]", + "244:2": "minecraft:cyan_glazed_terracotta[facing=north]", + "244:3": "minecraft:cyan_glazed_terracotta[facing=east]", + "245:0": "minecraft:purple_glazed_terracotta[facing=south]", + "245:1": "minecraft:purple_glazed_terracotta[facing=west]", + "245:2": "minecraft:purple_glazed_terracotta[facing=north]", + "245:3": "minecraft:purple_glazed_terracotta[facing=east]", + "246:0": "minecraft:blue_glazed_terracotta[facing=south]", + "246:1": "minecraft:blue_glazed_terracotta[facing=west]", + "246:2": "minecraft:blue_glazed_terracotta[facing=north]", + "246:3": "minecraft:blue_glazed_terracotta[facing=east]", + "247:0": "minecraft:brown_glazed_terracotta[facing=south]", + "247:1": "minecraft:brown_glazed_terracotta[facing=west]", + "247:2": "minecraft:brown_glazed_terracotta[facing=north]", + "247:3": "minecraft:brown_glazed_terracotta[facing=east]", + "248:0": "minecraft:green_glazed_terracotta[facing=south]", + "248:1": "minecraft:green_glazed_terracotta[facing=west]", + "248:2": "minecraft:green_glazed_terracotta[facing=north]", + "248:3": "minecraft:green_glazed_terracotta[facing=east]", + "249:0": "minecraft:red_glazed_terracotta[facing=south]", + "249:1": "minecraft:red_glazed_terracotta[facing=west]", + "249:2": "minecraft:red_glazed_terracotta[facing=north]", + "249:3": "minecraft:red_glazed_terracotta[facing=east]", + "250:0": "minecraft:black_glazed_terracotta[facing=south]", + "250:1": "minecraft:black_glazed_terracotta[facing=west]", + "250:2": "minecraft:black_glazed_terracotta[facing=north]", + "250:3": "minecraft:black_glazed_terracotta[facing=east]", + "251:0": "minecraft:white_concrete", + "251:1": "minecraft:orange_concrete", + "251:2": "minecraft:magenta_concrete", + "251:3": "minecraft:light_blue_concrete", + "251:4": "minecraft:yellow_concrete", + "251:5": "minecraft:lime_concrete", + "251:6": "minecraft:pink_concrete", + "251:7": "minecraft:gray_concrete", + "251:8": "minecraft:light_gray_concrete", + "251:9": "minecraft:cyan_concrete", + "251:10": "minecraft:purple_concrete", + "251:11": "minecraft:blue_concrete", + "251:12": "minecraft:brown_concrete", + "251:13": "minecraft:green_concrete", + "251:14": "minecraft:red_concrete", + "251:15": "minecraft:black_concrete", + "252:0": "minecraft:white_concrete_powder", + "252:1": "minecraft:orange_concrete_powder", + "252:2": "minecraft:magenta_concrete_powder", + "252:3": "minecraft:light_blue_concrete_powder", + "252:4": "minecraft:yellow_concrete_powder", + "252:5": "minecraft:lime_concrete_powder", + "252:6": "minecraft:pink_concrete_powder", + "252:7": "minecraft:gray_concrete_powder", + "252:8": "minecraft:light_gray_concrete_powder", + "252:9": "minecraft:cyan_concrete_powder", + "252:10": "minecraft:purple_concrete_powder", + "252:11": "minecraft:blue_concrete_powder", + "252:12": "minecraft:brown_concrete_powder", + "252:13": "minecraft:green_concrete_powder", + "252:14": "minecraft:red_concrete_powder", + "252:15": "minecraft:black_concrete_powder", + "255:0": "minecraft:structure_block[mode=save]", + "255:1": "minecraft:structure_block[mode=load]", + "255:2": "minecraft:structure_block[mode=corner]", + "255:3": "minecraft:structure_block[mode=data]" +} \ No newline at end of file diff --git a/src/main/resources/flattening/items.json b/src/main/resources/flattening/items.json new file mode 100644 index 0000000..8b2dd96 --- /dev/null +++ b/src/main/resources/flattening/items.json @@ -0,0 +1,322 @@ +{ + "minecraft:stone.0": "minecraft:stone", + "minecraft:stone.1": "minecraft:granite", + "minecraft:stone.2": "minecraft:polished_granite", + "minecraft:stone.3": "minecraft:diorite", + "minecraft:stone.4": "minecraft:polished_diorite", + "minecraft:stone.5": "minecraft:andesite", + "minecraft:stone.6": "minecraft:polished_andesite", + "minecraft:dirt.0": "minecraft:dirt", + "minecraft:dirt.1": "minecraft:coarse_dirt", + "minecraft:dirt.2": "minecraft:podzol", + "minecraft:leaves.0": "minecraft:oak_leaves", + "minecraft:leaves.1": "minecraft:spruce_leaves", + "minecraft:leaves.2": "minecraft:birch_leaves", + "minecraft:leaves.3": "minecraft:jungle_leaves", + "minecraft:leaves2.0": "minecraft:acacia_leaves", + "minecraft:leaves2.1": "minecraft:dark_oak_leaves", + "minecraft:log.0": "minecraft:oak_log", + "minecraft:log.1": "minecraft:spruce_log", + "minecraft:log.2": "minecraft:birch_log", + "minecraft:log.3": "minecraft:jungle_log", + "minecraft:log2.0": "minecraft:acacia_log", + "minecraft:log2.1": "minecraft:dark_oak_log", + "minecraft:sapling.0": "minecraft:oak_sapling", + "minecraft:sapling.1": "minecraft:spruce_sapling", + "minecraft:sapling.2": "minecraft:birch_sapling", + "minecraft:sapling.3": "minecraft:jungle_sapling", + "minecraft:sapling.4": "minecraft:acacia_sapling", + "minecraft:sapling.5": "minecraft:dark_oak_sapling", + "minecraft:planks.0": "minecraft:oak_planks", + "minecraft:planks.1": "minecraft:spruce_planks", + "minecraft:planks.2": "minecraft:birch_planks", + "minecraft:planks.3": "minecraft:jungle_planks", + "minecraft:planks.4": "minecraft:acacia_planks", + "minecraft:planks.5": "minecraft:dark_oak_planks", + "minecraft:sand.0": "minecraft:sand", + "minecraft:sand.1": "minecraft:red_sand", + "minecraft:quartz_block.0": "minecraft:quartz_block", + "minecraft:quartz_block.1": "minecraft:chiseled_quartz_block", + "minecraft:quartz_block.2": "minecraft:quartz_pillar", + "minecraft:anvil.0": "minecraft:anvil", + "minecraft:anvil.1": "minecraft:chipped_anvil", + "minecraft:anvil.2": "minecraft:damaged_anvil", + "minecraft:wool.0": "minecraft:white_wool", + "minecraft:wool.1": "minecraft:orange_wool", + "minecraft:wool.2": "minecraft:magenta_wool", + "minecraft:wool.3": "minecraft:light_blue_wool", + "minecraft:wool.4": "minecraft:yellow_wool", + "minecraft:wool.5": "minecraft:lime_wool", + "minecraft:wool.6": "minecraft:pink_wool", + "minecraft:wool.7": "minecraft:gray_wool", + "minecraft:wool.8": "minecraft:light_gray_wool", + "minecraft:wool.9": "minecraft:cyan_wool", + "minecraft:wool.10": "minecraft:purple_wool", + "minecraft:wool.11": "minecraft:blue_wool", + "minecraft:wool.12": "minecraft:brown_wool", + "minecraft:wool.13": "minecraft:green_wool", + "minecraft:wool.14": "minecraft:red_wool", + "minecraft:wool.15": "minecraft:black_wool", + "minecraft:carpet.0": "minecraft:white_carpet", + "minecraft:carpet.1": "minecraft:orange_carpet", + "minecraft:carpet.2": "minecraft:magenta_carpet", + "minecraft:carpet.3": "minecraft:light_blue_carpet", + "minecraft:carpet.4": "minecraft:yellow_carpet", + "minecraft:carpet.5": "minecraft:lime_carpet", + "minecraft:carpet.6": "minecraft:pink_carpet", + "minecraft:carpet.7": "minecraft:gray_carpet", + "minecraft:carpet.8": "minecraft:light_gray_carpet", + "minecraft:carpet.9": "minecraft:cyan_carpet", + "minecraft:carpet.10": "minecraft:purple_carpet", + "minecraft:carpet.11": "minecraft:blue_carpet", + "minecraft:carpet.12": "minecraft:brown_carpet", + "minecraft:carpet.13": "minecraft:green_carpet", + "minecraft:carpet.14": "minecraft:red_carpet", + "minecraft:carpet.15": "minecraft:black_carpet", + "minecraft:hardened_clay.0": "minecraft:terracotta", + "minecraft:stained_hardened_clay.0": "minecraft:white_terracotta", + "minecraft:stained_hardened_clay.1": "minecraft:orange_terracotta", + "minecraft:stained_hardened_clay.2": "minecraft:magenta_terracotta", + "minecraft:stained_hardened_clay.3": "minecraft:light_blue_terracotta", + "minecraft:stained_hardened_clay.4": "minecraft:yellow_terracotta", + "minecraft:stained_hardened_clay.5": "minecraft:lime_terracotta", + "minecraft:stained_hardened_clay.6": "minecraft:pink_terracotta", + "minecraft:stained_hardened_clay.7": "minecraft:gray_terracotta", + "minecraft:stained_hardened_clay.8": "minecraft:light_gray_terracotta", + "minecraft:stained_hardened_clay.9": "minecraft:cyan_terracotta", + "minecraft:stained_hardened_clay.10": "minecraft:purple_terracotta", + "minecraft:stained_hardened_clay.11": "minecraft:blue_terracotta", + "minecraft:stained_hardened_clay.12": "minecraft:brown_terracotta", + "minecraft:stained_hardened_clay.13": "minecraft:green_terracotta", + "minecraft:stained_hardened_clay.14": "minecraft:red_terracotta", + "minecraft:stained_hardened_clay.15": "minecraft:black_terracotta", + "minecraft:silver_glazed_terracotta.0": "minecraft:light_gray_glazed_terracotta", + "minecraft:stained_glass.0": "minecraft:white_stained_glass", + "minecraft:stained_glass.1": "minecraft:orange_stained_glass", + "minecraft:stained_glass.2": "minecraft:magenta_stained_glass", + "minecraft:stained_glass.3": "minecraft:light_blue_stained_glass", + "minecraft:stained_glass.4": "minecraft:yellow_stained_glass", + "minecraft:stained_glass.5": "minecraft:lime_stained_glass", + "minecraft:stained_glass.6": "minecraft:pink_stained_glass", + "minecraft:stained_glass.7": "minecraft:gray_stained_glass", + "minecraft:stained_glass.8": "minecraft:light_gray_stained_glass", + "minecraft:stained_glass.9": "minecraft:cyan_stained_glass", + "minecraft:stained_glass.10": "minecraft:purple_stained_glass", + "minecraft:stained_glass.11": "minecraft:blue_stained_glass", + "minecraft:stained_glass.12": "minecraft:brown_stained_glass", + "minecraft:stained_glass.13": "minecraft:green_stained_glass", + "minecraft:stained_glass.14": "minecraft:red_stained_glass", + "minecraft:stained_glass.15": "minecraft:black_stained_glass", + "minecraft:stained_glass_pane.0": "minecraft:white_stained_glass_pane", + "minecraft:stained_glass_pane.1": "minecraft:orange_stained_glass_pane", + "minecraft:stained_glass_pane.2": "minecraft:magenta_stained_glass_pane", + "minecraft:stained_glass_pane.3": "minecraft:light_blue_stained_glass_pane", + "minecraft:stained_glass_pane.4": "minecraft:yellow_stained_glass_pane", + "minecraft:stained_glass_pane.5": "minecraft:lime_stained_glass_pane", + "minecraft:stained_glass_pane.6": "minecraft:pink_stained_glass_pane", + "minecraft:stained_glass_pane.7": "minecraft:gray_stained_glass_pane", + "minecraft:stained_glass_pane.8": "minecraft:light_gray_stained_glass_pane", + "minecraft:stained_glass_pane.9": "minecraft:cyan_stained_glass_pane", + "minecraft:stained_glass_pane.10": "minecraft:purple_stained_glass_pane", + "minecraft:stained_glass_pane.11": "minecraft:blue_stained_glass_pane", + "minecraft:stained_glass_pane.12": "minecraft:brown_stained_glass_pane", + "minecraft:stained_glass_pane.13": "minecraft:green_stained_glass_pane", + "minecraft:stained_glass_pane.14": "minecraft:red_stained_glass_pane", + "minecraft:stained_glass_pane.15": "minecraft:black_stained_glass_pane", + "minecraft:prismarine.0": "minecraft:prismarine", + "minecraft:prismarine.1": "minecraft:prismarine_bricks", + "minecraft:prismarine.2": "minecraft:dark_prismarine", + "minecraft:concrete.0": "minecraft:white_concrete", + "minecraft:concrete.1": "minecraft:orange_concrete", + "minecraft:concrete.2": "minecraft:magenta_concrete", + "minecraft:concrete.3": "minecraft:light_blue_concrete", + "minecraft:concrete.4": "minecraft:yellow_concrete", + "minecraft:concrete.5": "minecraft:lime_concrete", + "minecraft:concrete.6": "minecraft:pink_concrete", + "minecraft:concrete.7": "minecraft:gray_concrete", + "minecraft:concrete.8": "minecraft:light_gray_concrete", + "minecraft:concrete.9": "minecraft:cyan_concrete", + "minecraft:concrete.10": "minecraft:purple_concrete", + "minecraft:concrete.11": "minecraft:blue_concrete", + "minecraft:concrete.12": "minecraft:brown_concrete", + "minecraft:concrete.13": "minecraft:green_concrete", + "minecraft:concrete.14": "minecraft:red_concrete", + "minecraft:concrete.15": "minecraft:black_concrete", + "minecraft:concrete_powder.0": "minecraft:white_concrete_powder", + "minecraft:concrete_powder.1": "minecraft:orange_concrete_powder", + "minecraft:concrete_powder.2": "minecraft:magenta_concrete_powder", + "minecraft:concrete_powder.3": "minecraft:light_blue_concrete_powder", + "minecraft:concrete_powder.4": "minecraft:yellow_concrete_powder", + "minecraft:concrete_powder.5": "minecraft:lime_concrete_powder", + "minecraft:concrete_powder.6": "minecraft:pink_concrete_powder", + "minecraft:concrete_powder.7": "minecraft:gray_concrete_powder", + "minecraft:concrete_powder.8": "minecraft:light_gray_concrete_powder", + "minecraft:concrete_powder.9": "minecraft:cyan_concrete_powder", + "minecraft:concrete_powder.10": "minecraft:purple_concrete_powder", + "minecraft:concrete_powder.11": "minecraft:blue_concrete_powder", + "minecraft:concrete_powder.12": "minecraft:brown_concrete_powder", + "minecraft:concrete_powder.13": "minecraft:green_concrete_powder", + "minecraft:concrete_powder.14": "minecraft:red_concrete_powder", + "minecraft:concrete_powder.15": "minecraft:black_concrete_powder", + "minecraft:cobblestone_wall.0": "minecraft:cobblestone_wall", + "minecraft:cobblestone_wall.1": "minecraft:mossy_cobblestone_wall", + "minecraft:sandstone.0": "minecraft:sandstone", + "minecraft:sandstone.1": "minecraft:chiseled_sandstone", + "minecraft:sandstone.2": "minecraft:cut_sandstone", + "minecraft:red_sandstone.0": "minecraft:red_sandstone", + "minecraft:red_sandstone.1": "minecraft:chiseled_red_sandstone", + "minecraft:red_sandstone.2": "minecraft:cut_red_sandstone", + "minecraft:stonebrick.0": "minecraft:stone_bricks", + "minecraft:stonebrick.1": "minecraft:mossy_stone_bricks", + "minecraft:stonebrick.2": "minecraft:cracked_stone_bricks", + "minecraft:stonebrick.3": "minecraft:chiseled_stone_bricks", + "minecraft:monster_egg.0": "minecraft:infested_stone", + "minecraft:monster_egg.1": "minecraft:infested_cobblestone", + "minecraft:monster_egg.2": "minecraft:infested_stone_bricks", + "minecraft:monster_egg.3": "minecraft:infested_mossy_stone_bricks", + "minecraft:monster_egg.4": "minecraft:infested_cracked_stone_bricks", + "minecraft:monster_egg.5": "minecraft:infested_chiseled_stone_bricks", + "minecraft:yellow_flower.0": "minecraft:dandelion", + "minecraft:red_flower.0": "minecraft:poppy", + "minecraft:red_flower.1": "minecraft:blue_orchid", + "minecraft:red_flower.2": "minecraft:allium", + "minecraft:red_flower.3": "minecraft:azure_bluet", + "minecraft:red_flower.4": "minecraft:red_tulip", + "minecraft:red_flower.5": "minecraft:orange_tulip", + "minecraft:red_flower.6": "minecraft:white_tulip", + "minecraft:red_flower.7": "minecraft:pink_tulip", + "minecraft:red_flower.8": "minecraft:oxeye_daisy", + "minecraft:double_plant.0": "minecraft:sunflower", + "minecraft:double_plant.1": "minecraft:lilac", + "minecraft:double_plant.2": "minecraft:tall_grass", + "minecraft:double_plant.3": "minecraft:large_fern", + "minecraft:double_plant.4": "minecraft:rose_bush", + "minecraft:double_plant.5": "minecraft:peony", + "minecraft:deadbush.0": "minecraft:dead_bush", + "minecraft:tallgrass.0": "minecraft:dead_bush", + "minecraft:tallgrass.1": "minecraft:grass", + "minecraft:tallgrass.2": "minecraft:fern", + "minecraft:sponge.0": "minecraft:sponge", + "minecraft:sponge.1": "minecraft:wet_sponge", + "minecraft:purpur_slab.0": "minecraft:purpur_slab", + "minecraft:stone_slab.0": "minecraft:stone_slab", + "minecraft:stone_slab.1": "minecraft:sandstone_slab", + "minecraft:stone_slab.2": "minecraft:petrified_oak_slab", + "minecraft:stone_slab.3": "minecraft:cobblestone_slab", + "minecraft:stone_slab.4": "minecraft:brick_slab", + "minecraft:stone_slab.5": "minecraft:stone_brick_slab", + "minecraft:stone_slab.6": "minecraft:nether_brick_slab", + "minecraft:stone_slab.7": "minecraft:quartz_slab", + "minecraft:stone_slab2.0": "minecraft:red_sandstone_slab", + "minecraft:wooden_slab.0": "minecraft:oak_slab", + "minecraft:wooden_slab.1": "minecraft:spruce_slab", + "minecraft:wooden_slab.2": "minecraft:birch_slab", + "minecraft:wooden_slab.3": "minecraft:jungle_slab", + "minecraft:wooden_slab.4": "minecraft:acacia_slab", + "minecraft:wooden_slab.5": "minecraft:dark_oak_slab", + "minecraft:coal.0": "minecraft:coal", + "minecraft:coal.1": "minecraft:charcoal", + "minecraft:fish.0": "minecraft:cod", + "minecraft:fish.1": "minecraft:salmon", + "minecraft:fish.2": "minecraft:clownfish", + "minecraft:fish.3": "minecraft:pufferfish", + "minecraft:cooked_fish.0": "minecraft:cooked_cod", + "minecraft:cooked_fish.1": "minecraft:cooked_salmon", + "minecraft:skull.0": "minecraft:skeleton_skull", + "minecraft:skull.1": "minecraft:wither_skeleton_skull", + "minecraft:skull.2": "minecraft:zombie_head", + "minecraft:skull.3": "minecraft:player_head", + "minecraft:skull.4": "minecraft:creeper_head", + "minecraft:skull.5": "minecraft:dragon_head", + "minecraft:golden_apple.0": "minecraft:golden_apple", + "minecraft:golden_apple.1": "minecraft:enchanted_golden_apple", + "minecraft:fireworks.0": "minecraft:firework_rocket", + "minecraft:firework_charge.0": "minecraft:firework_star", + "minecraft:dye.0": "minecraft:ink_sac", + "minecraft:dye.1": "minecraft:rose_red", + "minecraft:dye.2": "minecraft:cactus_green", + "minecraft:dye.3": "minecraft:cocoa_beans", + "minecraft:dye.4": "minecraft:lapis_lazuli", + "minecraft:dye.5": "minecraft:purple_dye", + "minecraft:dye.6": "minecraft:cyan_dye", + "minecraft:dye.7": "minecraft:light_gray_dye", + "minecraft:dye.8": "minecraft:gray_dye", + "minecraft:dye.9": "minecraft:pink_dye", + "minecraft:dye.10": "minecraft:lime_dye", + "minecraft:dye.11": "minecraft:dandelion_yellow", + "minecraft:dye.12": "minecraft:light_blue_dye", + "minecraft:dye.13": "minecraft:magenta_dye", + "minecraft:dye.14": "minecraft:orange_dye", + "minecraft:dye.15": "minecraft:bone_meal", + "minecraft:silver_shulker_box.0": "minecraft:light_gray_shulker_box", + "minecraft:fence.0": "minecraft:oak_fence", + "minecraft:fence_gate.0": "minecraft:oak_fence_gate", + "minecraft:wooden_door.0": "minecraft:oak_door", + "minecraft:boat.0": "minecraft:oak_boat", + "minecraft:lit_pumpkin.0": "minecraft:jack_o_lantern", + "minecraft:pumpkin.0": "minecraft:carved_pumpkin", + "minecraft:trapdoor.0": "minecraft:oak_trapdoor", + "minecraft:nether_brick.0": "minecraft:nether_bricks", + "minecraft:red_nether_brick.0": "minecraft:red_nether_bricks", + "minecraft:netherbrick.0": "minecraft:nether_brick", + "minecraft:wooden_button.0": "minecraft:oak_button", + "minecraft:wooden_pressure_plate.0": "minecraft:oak_pressure_plate", + "minecraft:noteblock.0": "minecraft:note_block", + "minecraft:bed.0": "minecraft:white_bed", + "minecraft:bed.1": "minecraft:orange_bed", + "minecraft:bed.2": "minecraft:magenta_bed", + "minecraft:bed.3": "minecraft:light_blue_bed", + "minecraft:bed.4": "minecraft:yellow_bed", + "minecraft:bed.5": "minecraft:lime_bed", + "minecraft:bed.6": "minecraft:pink_bed", + "minecraft:bed.7": "minecraft:gray_bed", + "minecraft:bed.8": "minecraft:light_gray_bed", + "minecraft:bed.9": "minecraft:cyan_bed", + "minecraft:bed.10": "minecraft:purple_bed", + "minecraft:bed.11": "minecraft:blue_bed", + "minecraft:bed.12": "minecraft:brown_bed", + "minecraft:bed.13": "minecraft:green_bed", + "minecraft:bed.14": "minecraft:red_bed", + "minecraft:bed.15": "minecraft:black_bed", + "minecraft:banner.15": "minecraft:white_banner", + "minecraft:banner.14": "minecraft:orange_banner", + "minecraft:banner.13": "minecraft:magenta_banner", + "minecraft:banner.12": "minecraft:light_blue_banner", + "minecraft:banner.11": "minecraft:yellow_banner", + "minecraft:banner.10": "minecraft:lime_banner", + "minecraft:banner.9": "minecraft:pink_banner", + "minecraft:banner.8": "minecraft:gray_banner", + "minecraft:banner.7": "minecraft:light_gray_banner", + "minecraft:banner.6": "minecraft:cyan_banner", + "minecraft:banner.5": "minecraft:purple_banner", + "minecraft:banner.4": "minecraft:blue_banner", + "minecraft:banner.3": "minecraft:brown_banner", + "minecraft:banner.2": "minecraft:green_banner", + "minecraft:banner.1": "minecraft:red_banner", + "minecraft:banner.0": "minecraft:black_banner", + "minecraft:grass.0": "minecraft:grass_block", + "minecraft:brick_block.0": "minecraft:bricks", + "minecraft:end_bricks.0": "minecraft:end_stone_bricks", + "minecraft:golden_rail.0": "minecraft:powered_rail", + "minecraft:magma.0": "minecraft:magma_block", + "minecraft:quartz_ore.0": "minecraft:nether_quartz_ore", + "minecraft:reeds.0": "minecraft:sugar_cane", + "minecraft:slime.0": "minecraft:slime_block", + "minecraft:stone_stairs.0": "minecraft:cobblestone_stairs", + "minecraft:waterlily.0": "minecraft:lily_pad", + "minecraft:web.0": "minecraft:cobweb", + "minecraft:snow.0": "minecraft:snow_block", + "minecraft:snow_layer.0": "minecraft:snow", + "minecraft:record_11.0": "minecraft:music_disc_11", + "minecraft:record_13.0": "minecraft:music_disc_13", + "minecraft:record_blocks.0": "minecraft:music_disc_blocks", + "minecraft:record_cat.0": "minecraft:music_disc_cat", + "minecraft:record_chirp.0": "minecraft:music_disc_chirp", + "minecraft:record_far.0": "minecraft:music_disc_far", + "minecraft:record_mall.0": "minecraft:music_disc_mall", + "minecraft:record_mellohi.0": "minecraft:music_disc_mellohi", + "minecraft:record_stal.0": "minecraft:music_disc_stal", + "minecraft:record_strad.0": "minecraft:music_disc_strad", + "minecraft:record_wait.0": "minecraft:music_disc_wait", + "minecraft:record_ward.0": "minecraft:music_disc_ward" +} \ No newline at end of file