diff --git a/.github/scripts/gen_recipes.py b/.github/scripts/gen_recipes.py new file mode 100644 index 0000000..5105d10 --- /dev/null +++ b/.github/scripts/gen_recipes.py @@ -0,0 +1,249 @@ +import zipfile +import json +import struct +import os +import io +import urllib.request + +def download_latest_server(): + print("Locating latest Minecraft server jar...") + manifest_url = "https://piston-meta.mojang.com/mc/game/version_manifest_v2.json" + + try: + # 1. Fetch version manifest to find the latest version ID + with urllib.request.urlopen(manifest_url) as response: + manifest = json.loads(response.read().decode('utf-8')) + + latest_version = manifest['latest']['release'] + print(f"Latest release version: {latest_version}") + + # 2. Find the URL for the specific version package JSON + version_url = None + for version in manifest['versions']: + if version['id'] == latest_version: + version_url = version['url'] + break + + if not version_url: + print("Error: Could not find version details.") + return False + + # 3. Fetch version details to get the actual download link + with urllib.request.urlopen(version_url) as response: + version_data = json.loads(response.read().decode('utf-8')) + + server_url = version_data['downloads']['server']['url'] + print(f"Downloading server.jar from {server_url}...") + + # 4. Download the file + urllib.request.urlretrieve(server_url, "server.jar") + print("Download complete!") + return True + + except Exception as e: + print(f"Failed to download server.jar: {e}") + return False + +def process_tags(zip_obj, tags_map): + # Scan for item tags + # Path format in jar: data//tags/item/.json + tag_files = [f for f in zip_obj.namelist() if '/tags/item/' in f and f.endswith('.json')] + + # First pass: Load all raw tags + raw_tags = {} + + for file_path in tag_files: + try: + with zip_obj.open(file_path) as file: + data = json.load(file) + + # Derive tag name from path + # data/minecraft/tags/item/logs.json -> minecraft:logs + parts = file_path.split('/') + # parts usually: ['data', 'minecraft', 'tags', 'item', 'logs.json'] + if len(parts) >= 5: + namespace = parts[1] + name = os.path.splitext(parts[-1])[0] + tag_key = f"{namespace}:{name}" # e.g. "minecraft:logs" + # Add # prefix to match how recipe inputs look + full_key = f"#{tag_key}" + + values = [] + raw_values = data.get("values", []) + for v in raw_values: + if isinstance(v, str): + values.append(v) + elif isinstance(v, dict) and "id" in v: + values.append(v["id"]) + + raw_tags[full_key] = values + except Exception: + continue + + # Second pass: Resolve tags within tags (basic flattening) + # We loop a few times to resolve nested tags like #minecraft:logs containing #minecraft:oak_logs + for _ in range(3): + for tag, values in raw_tags.items(): + new_values = [] + for v in values: + if v.startswith('#'): + # It's a reference to another tag, expand it if we know it + if v in raw_tags: + new_values.extend(raw_tags[v]) + else: + new_values.append(v) # Keep it if we can't resolve it + else: + new_values.append(v) + # Remove duplicates + raw_tags[tag] = list(set(new_values)) + + # Copy to the output map + for k, v in raw_tags.items(): + # Remove the # prefix for the key in the aliases table if preferred, + # but keeping it makes lookup easier for exact matches on inputs like "#minecraft:logs" + tags_map[k] = v + + return len(raw_tags) + +def process_recipes(zip_obj, furnace_list, crafting_set, crafting_recipes): + # 1.21 changed folder from 'recipes' to 'recipe' + recipe_files = [f for f in zip_obj.namelist() if f.startswith('data/minecraft/recipe/') and f.endswith('.json')] + count = 0 + for file_path in recipe_files: + try: + with zip_obj.open(file_path) as file: + data = json.load(file) + rtype = data.get("type", "") + + # --- Furnace / Smelting Logic --- + if rtype in ["minecraft:smelting", "minecraft:blasting"]: + ing = data.get("ingredient") + # Handle 1.21 list or single string/dict + if isinstance(ing, list): ing = ing[0] + item_in = ing if isinstance(ing, str) else ing.get("item") or ing.get("tag") + # Ensure tags start with # + if item_in and not item_in.startswith('#') and ':' in item_in and not item_in.startswith('minecraft:'): + # Heuristic: if it's a tag in the json but just a string here, we might miss the # + # But standard JSON reader usually sees "tag": "minecraft:logs" + pass + + if isinstance(ing, dict) and "tag" in ing: + item_in = "#" + ing["tag"] + + # 1.21 result uses 'id' instead of 'item' + res = data.get("result") + item_out = res if isinstance(res, str) else res.get("id") or res.get("item") + + if item_in and item_out: + furnace_list.append((item_in, item_out)) + + # --- Crafting Logic (Grid / Crafting) --- + if "crafting" in rtype: + res = data.get("result", {}) + # 1.21 result uses 'id' instead of 'item' + out = res if isinstance(res, str) else res.get("id") or res.get("item") + if out: + crafting_set.add(out) + + # Process crafting recipes + if rtype in ["minecraft:crafting_shaped", "minecraft:crafting_shapeless"]: + recipe = { + "type": rtype, + "result": { + "item": out, + "count": data.get("result", {}).get("count", 1) + } + } + + if rtype == "minecraft:crafting_shaped": + recipe["pattern"] = data.get("pattern", []) + recipe["key"] = data.get("key", {}) + else: + recipe["ingredients"] = data.get("ingredients", []) + + crafting_recipes.append(recipe) + count += 1 + except Exception: + continue + return count + +def generate_bins(): + # Automatically download the latest server jar + if not download_latest_server(): + print("Aborting generation due to download failure.") + return + + jar_path = "server.jar" + furnace_data = [] + crafting_items = set() + crafting_recipes = [] + tags_map = {} + + if not os.path.exists(jar_path): + print("server.jar not found.") + return + + with zipfile.ZipFile(jar_path, 'r') as outer_zip: + # Check for nested Bundler JAR first (standard for 1.21) + is_bundler = False + for name in outer_zip.namelist(): + if name.startswith("META-INF/versions/") and name.endswith(".jar"): + print(f"Detected Bundler. Processing inner JAR: {name}") + with outer_zip.open(name) as inner_file: + inner_data = io.BytesIO(inner_file.read()) + with zipfile.ZipFile(inner_data) as inner_zip: + process_recipes(inner_zip, furnace_data, crafting_items, crafting_recipes) + process_tags(inner_zip, tags_map) + is_bundler = True + break + + # If not a bundler, try the root + if not is_bundler: + process_recipes(outer_zip, furnace_data, crafting_items, crafting_recipes) + process_tags(outer_zip, tags_map) + + # Create unified JSON structure + recipes = { + "recipes": { + "furnace": [], + "crafting": [] + }, + "itemLookup": {}, + "aliases": tags_map # Add the aliases/tags table here + } + + # Add furnace recipes + for item_in, item_out in furnace_data: + recipes["recipes"]["furnace"].append({ + "type": "minecraft:smelting", + "ingredient": item_in, + "result": item_out, + "experience": 0.7, + "cookingtime": 200 + }) + + # Add crafting recipes + for recipe in crafting_recipes: + recipes["recipes"]["crafting"].append(recipe) + + # Add item lookup + item_index = 1 + for item in sorted(list(crafting_items)): + recipes["itemLookup"][item] = item_index + item_index += 1 + + # Write to JSON file + if not os.path.exists("recipes"): + os.makedirs("recipes") + + with open("recipes/recipes.json", "w") as f: + json.dump(recipes, f, indent=2) + + print(f"Success! Generated JSON:") + print(f" - {len(tags_map)} tags/aliases processed") + print(f" - {len(furnace_data)} furnace recipes") + print(f" - {len(crafting_recipes)} crafting recipes") + print(f" - {len(crafting_items)} items") + +if __name__ == "__main__": + generate_bins() \ No newline at end of file diff --git a/.github/workflows/gen_recipes.yml b/.github/workflows/gen_recipes.yml new file mode 100644 index 0000000..1dda645 --- /dev/null +++ b/.github/workflows/gen_recipes.yml @@ -0,0 +1,34 @@ +name: Generate Recipes + +on: + workflow_dispatch: + +jobs: + generate: + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Run Recipe Generator Script + run: python .github/scripts/gen_recipes.py + + - name: Commit and Push changes + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git add recipes/recipes.json + if git diff --staged --quiet; then + echo "No changes to recipes.json detected." + else + git commit -m "Auto-update recipes.json from latest server jar" + git push + fi diff --git a/.gitignore b/.gitignore index 7c553b5..dd52666 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,10 @@ log.txt config.lua basalt.lua stone.json +server.jar # Jekyll junk files .jekyll-metadata .jekyll-cache/ _site/ + diff --git a/bfile.lua b/bfile.lua deleted file mode 100644 index fd5cedf..0000000 --- a/bfile.lua +++ /dev/null @@ -1,650 +0,0 @@ ---[[ -This is a library to make custom binary data file formats incredibly easy to develop. -To get started, you'll need to create a new struct. - -local bfile = require("bfile") -local myStruct = bfile.newStruct("myStruct") - -Now this alone isn't much help, you've created an empty struct. Time to add some data! - -myStruct:constant("myStruct"):add("uint8", "myValue") - -Here we add two elements to our struct, first a constant. -This constant will write the string literal "myStruct" to the file, -this literal will also be loaded back and asserted to match when loading. - -The second element we added is data. We specifically added an 8 bit unsigned integer. -Look at structReaders and structWriters to see supported primative data types. -The string passed in ("myValue") is the index into the table we want to write/load. -If we want to write this struct to a file now we should do something like the following. - -myStruct:writeFile("myStructFile.bin", {myValue=100}) - -As you can see, the uint8 we are writing is at the index "myValue". -You can use any type here (that can be used to index tables). - -Now this alone is a little usable, but what happens when you wanna store an array of objects? -Well, you can do that too! - -local newStruct = bfile.newStruct("newStruct"):add("myStruct[]", "myStructs") - -Simply by adding [] to the end of the type name you can convert it into an array. -There's some special syntax here, specifically there's 4 usages of this: -* [] - write the length of the table using the defaultArrayLength type -* [*] - the array runs out the length of the file. This HAS to be the last type in a struct if you use it. -* [12] - use a literal integer for the length of the array, this doesn't get written to disk, so you have to know it to read it back. -* [uint8] - use an integer type name to specify what type to use to write the array length. - -If you didn't notice above you can use structs in structs. The struct will be loaded as a table at the key you give. - -One more thing, if you want a map of one type to another type, of any size, there's a syntax for that too. - -newStruct:add("map", "lotsOfStructs") - -There's no additional rules to that other than map. Yes you can have an array of maps. Multidimensional arrays also work. - -If you need to unpack a type table so it's in the parent table, set the key to "^". -]] ----Create a rudamentary emulator of a file handle from a string. ----@return handle -local function stringHandle(str) - local pointer = 0 - - local function limitPointer(modifier) - pointer = math.max(0, math.min(pointer + (modifier or 0), str:len())) - return pointer - end - - local handle = {} - - function handle.read(count) - local start = pointer + 1 - local finish = limitPointer(count or 1) - local retStr = str:sub(start, finish) - if start - 1 == finish then - -- end of string - return - end - if count then - return retStr - else - return retStr:byte() - end - end - - function handle.seek(whence, offset) - whence = whence or "cur" - offset = offset or 0 - if whence == "cur" then - pointer = pointer + offset - elseif whence == "set" then - pointer = offset - elseif whence == "end" then - pointer = str:len() - 1 + offset - else - error("Invalid whence option") - end - limitPointer() - return pointer - end - - function handle.write(value) - if type(value) == "number" then - value = string.char(value) - end - local start = pointer + 1 - pointer = pointer + value:len() - str = str:sub(1, start - 1) .. value .. str:sub(pointer + 1) - end - - function handle.getString() - return str - end - - return handle -end - -local aliases = {} - -local structReaders = { - uint8 = function(f) - return select(1, string.unpack("I1", f.read(1))) - end, - uint16 = function(f) - return select(1, string.unpack(">I2", f.read(2))) - end, - string = function(f) - local length = string.unpack(">I2", f.read(2)) - local str = f.read(length) - return str - end, - char = function(f) - return f.read(1) - end, - uint32 = function(f) - return select(1, string.unpack(">I4", f.read(4))) - end, - number = function(f) - return select(1, string.unpack("n", f.read(8))) - end -} - -local structWriters = { - uint8 = function(f, value) - f.write(string.pack("I1", value)) - end, - uint16 = function(f, value) - f.write(string.pack(">I2", value)) - end, - string = function(f, value) - f.write(string.pack(">I2", value:len())) - f.write(value) - end, - char = function(f, value) - f.write(value) - end, - uint32 = function(f, value) - f.write(string.pack(">I4", value)) - end, - number = function(f, value) - f.write(string.pack("n", value)) - end -} - -local defaultArrayLength = "uint32" - -local getReaderWriter - ----@type table -local structs = {} - -local function arrayReaderGen(arrayDatatype, lengthDatatype, fixedLength) - local dataReader = getReaderWriter(arrayDatatype) - if lengthDatatype == "*" then - -- read until file runs out - return function(f) - local t = {} - while f.read(1) do - f.seek(nil, -1) - t[#t + 1] = dataReader(f) - end - return t - end - end - if lengthDatatype == "" then - lengthDatatype = defaultArrayLength - end - local lengthReader = getReaderWriter(lengthDatatype) - return function(f) - local length - if fixedLength then - length = fixedLength - else - length = lengthReader(f) - end - local t = {} - for i = 1, length do - t[i] = dataReader(f) - end - return t - end -end - -local function arrayWriterGen(arrayDatatype, lengthDatatype, fixedLength) - local lengthWriter - if lengthDatatype == "" then - _, lengthWriter = getReaderWriter("uint32") - elseif lengthDatatype ~= "*" then - _, lengthWriter = getReaderWriter(lengthDatatype) - end - local _, dataWriter = getReaderWriter(arrayDatatype) - return function(f, value) - if lengthDatatype ~= "*" and not fixedLength then - -- this has a defined length, without one we can't read it back unless it's the whole file. - lengthWriter(f, #value) - end - for _, v in ipairs(value) do - dataWriter(f, v) - end - end -end - -local function mapReaderGen(keyType, valueType) - local keyReader = getReaderWriter(keyType) - local valueReader = getReaderWriter(valueType) - return function(f) - local t = {} - while true do - local key = assert(keyReader(f), "Got nil from reader") - local value = valueReader(f) - t[key] = value - local char = f.read(1) - if char == ";" then - return t - end - assert(char == ",", "Invalid map separator") - end - end -end - -local function mapWriterGen(keyType, valueType) - local _, keyWriter = getReaderWriter(keyType) - local _, valueWriter = getReaderWriter(valueType) - return function(f, value) - local start = true - for k, v in pairs(value) do - if not start then - f.write(",") - end - start = false - keyWriter(f, k) - valueWriter(f, v) - end - f.write(";") - end -end - ----Get a reader and writer for any supported datatype ----@param datatype string ----@generic T : any ----@return fun(f: handle): T ----@return fun(f: handle, v: T) -function getReaderWriter(datatype) - local reader, writer - if aliases[datatype] then - datatype = aliases[datatype] - end - local lengthDatatype = datatype:match("%[([%a%d*]-)%]$") - local keyType, valueType = datatype:match("^map<([%S]+),([%S]+)>") - if lengthDatatype then - local arrayDatatype = datatype:sub(1, -lengthDatatype:len() - 3) - local fixedLength - if tonumber(lengthDatatype) then - -- this is a number literal, this array is a fixed size - fixedLength = tonumber(lengthDatatype) - end - reader = arrayReaderGen(arrayDatatype, lengthDatatype, fixedLength) - writer = arrayWriterGen(arrayDatatype, lengthDatatype, fixedLength) - elseif keyType then - reader = mapReaderGen(keyType, valueType) - writer = mapWriterGen(keyType, valueType) - elseif structs[datatype] then - local structDatatype = structs[datatype] - reader = function(f) return structDatatype:readHandle(f) end - writer = function(f, value) structDatatype:writeHandle(f, value) end - else - reader = structReaders[datatype] - writer = structWriters[datatype] - end - assert(reader, "No reader for " .. datatype) - assert(writer, "No writer for " .. datatype) - return reader, writer -end - ----Add a datatype to the struct ----@param self Struct ----@param datatype string ----@param key string|integer ----@return Struct -local function add(self, datatype, key) - local reader, writer = getReaderWriter(datatype) - table.insert(self.structure, { - type = datatype, - reader = reader, - writer = writer, - key = key, - mode = "data" - }) - ---@type Struct - return self -end - ----Add a constant to the struct ----These are written directly to the file in this position. ----When read back they are asserted to be the same as written. ----@param self Struct ----@param value string ----@return Struct -local function constant(self, value) - table.insert(self.structure, { - mode = "constant", - value = value, - }) - return self -end - ----Add a conditional to the struct ----Basically, dynamically choose a datatype based on the read character/written data ----@param self any ----@param key any ----@param loadCondition fun(ch: string): string datatype to load ----@param writeCondition fun(value: table): string, string character indicating condition, datatype to save -local function conditional(self, key, loadCondition, writeCondition) - table.insert(self.structure, { - mode = "conditional", - key = key, - loadCondition = loadCondition, - writeCondition = writeCondition - }) -end - ----Read the struct from the given file handle ----@param self Struct ----@param handle handle ----@return table -local function readHandle(self, handle) - local t = {} - for k, v in ipairs(self.structure) do - if v.mode == "data" then - t[v.key] = v.reader(handle) - elseif v.mode == "constant" then - local readConstant = handle.read(v.value:len()) - assert(readConstant == v.value, ("Constant does not match. Expected %s, got %s."):format(v.value, readConstant)) - elseif v.mode == "conditional" then - local datatype = v.loadCondition(handle.read(1)) - local reader = getReaderWriter(datatype) - t[v.key] = reader(handle) - else - error("Invalid mode " .. v.mode) - end - - if v.key == "^" then - -- unpack this table onto the parent table - for k2, v2 in pairs(t[v.key]) do - t[k2] = v2 - end - t[v.key] = nil - end - end - return t -end - ----Read the struct from a given file ----@param self Struct ----@param filename string ----@return table|nil -local function readFile(self, filename) - local f = fs.open(filename, "rb") - if not f then - return - end - local t = readHandle(self, f) - f.close() - return t -end - ----Read the struct from a given string ----@param self Struct ----@param str string ----@return table -local function readString(self, str) - return readHandle(self, stringHandle(str)) -end - ----Write the struct to a given handle ----@param self Struct ----@param handle handle ----@param t table -local function writeHandle(self, handle, t) - for k, v in ipairs(self.structure) do - local valueToWrite = t[v.key] - if v.key == "^" then - valueToWrite = t - elseif v.key then - assert(valueToWrite ~= nil, "No value at key=" .. v.key) - end - if v.mode == "data" then - v.writer(handle, valueToWrite) - elseif v.mode == "constant" then - handle.write(v.value) - elseif v.mode == "conditional" then - local ch, datatype = v.writeCondition(valueToWrite) - handle.write(ch) - local _, writer = getReaderWriter(datatype) - writer(handle, valueToWrite) - else - error("Invalid mode " .. v.mode) - end - end -end - ----Write the struct to a given file ----@param self Struct ----@param filename string ----@param t table -local function writeFile(self, filename, t) - local f = assert(fs.open(filename, "wb")) - writeHandle(self, f, t) - f.close() -end - ----Write the struct to a string ----@param self Struct ----@param t table ----@return string -local function writeString(self, t) - local handle = stringHandle("") - writeHandle(self, handle, t) - return handle.getString() -end - ----Start creating a struct ----@param name string ----@return Struct -local function newStruct(name) - ---@class Struct - local struct = {} - struct.add = add - struct.constant = constant - struct.readFile = readFile - struct.readHandle = readHandle - struct.readString = readString - struct.writeFile = writeFile - struct.writeHandle = writeHandle - struct.writeString = writeString - struct.conditional = conditional - struct.name = name - struct.structure = {} - structs[name] = struct - return struct -end - ----Get a created struct by name ----@param name string ----@return Struct -local function getStruct(name) - return structs[name] -end - ----Add a primative type ----@param type string ----@generic T : any ----@param reader fun(f: handle): T ----@param writer fun(f: handle, v: T) -local function addType(type, reader, writer) - structReaders[type] = reader - structWriters[type] = writer -end - ----Get a reader for a datatype ----@param datatype string ----@generic T : any ----@return fun(f: handle): T -local function getReader(datatype) - return select(1, getReaderWriter(datatype)) -end - ----Get a writer for a datatype ----@param datatype string ----@generic T : any ----@return fun(f: handle, v: T) -local function getWriter(datatype) - return select(2, getReaderWriter(datatype)) -end - ----Add an alias for a type ----@param alias string ----@param t string -local function addAlias(alias, t) - aliases[alias] = t -end - -local CONTROL = { - START_STRING_KEY = "$", -- Strings are null terminated - START_INT_KEY = "#", -- Null terminated string representation to allow infinite indicies - END = "\25" -} - -local START_DATA = { - string = "s", - number = "n", - booleanTrue = "B", - booleanFalse = "b", - table = "\24", - int = "i", -- This is a number in the range [0,65535] that has been converted to 2 bytes -} - --- An example table serialized with this library would look something like --- {1,hello="test",[3]={"another table!"}} -> 39 bytes - --- START_DATA.table --- START_DATA.int \01 -- 2 byte representation -- --- CONTROL.START_STRING_KEY hello\0 START_DATA.string test\0 --- CONTROL.START_INT_KEY 3\0 START_DATA - -local t0 -local function serialize(T) - local isRoot = false - if not t0 then - isRoot = true - t0 = os.epoch("utc") - elseif os.epoch("utc") - t0 > 3000 then - t0 = os.epoch("utc") - sleep() - end - local serializedT = "" - local keyNum = 0 - for k, v in pairs(T) do - if type(k) == "number" and k ~= keyNum + 1 then -- this is a numeric key, but not an implicit one - serializedT = serializedT .. CONTROL.START_INT_KEY .. tostring(k) .. "\0" - elseif type(k) == "string" then -- this is a string key - serializedT = serializedT .. CONTROL.START_STRING_KEY .. k .. "\0" - end - keyNum = keyNum + 1 - local valueType = type(v) - assert(valueType ~= "function", "Cannot serialize function @ " .. tostring(k)) - if valueType == "number" then - if math.floor(v) == v and v >= 0 and v <= 65535 then - -- number is an int [0,65535] - -- Store in big endian - serializedT = serializedT .. START_DATA.int .. string.char(bit.brshift(v, 8), bit.band(v, 0xFF)) - else - serializedT = serializedT .. START_DATA.number .. tostring(v) .. "\0" - end - elseif valueType == "boolean" then - if valueType then - serializedT = serializedT .. START_DATA.booleanTrue - else - serializedT = serializedT .. START_DATA.booleanFalse - end - elseif valueType == "table" then - serializedT = serializedT .. START_DATA.table .. serialize(v) - else -- the only (accepted) possibility left is that this is a string - serializedT = serializedT .. START_DATA.string .. v .. "\0" - end - end - if isRoot then - t0 = nil - end - return serializedT .. CONTROL.END -end - --- Return a string decoded from an input string --- takes a pointer into a larger string --- returns the decoded string and an end pointer -local function decodeString(s, pointer, limiter, incLevelChar) - limiter = limiter or "\0" - local decodedString = "" - local level = 0 - while (s:sub(pointer, pointer) ~= limiter) or level > 0 do - if s:sub(pointer, pointer) == limiter then - level = level - 1 - elseif s:sub(pointer, pointer) == incLevelChar then - level = level + 1 - end - decodedString = decodedString .. s:sub(pointer, pointer) - pointer = pointer + 1 - end - return decodedString, pointer -end - -local function unserialize(s) - local isRoot = false - if not t0 then - t0 = os.epoch("utc") - isRoot = true - elseif os.epoch("utc") - t0 > 3000 then - t0 = os.epoch("utc") - sleep() - end - local pointer = 1 - local T = {} - local key - while (s:sub(pointer, pointer) ~= CONTROL.END) and pointer < s:len() do - local char = s:sub(pointer, pointer) - if char == CONTROL.START_INT_KEY then - key, pointer = decodeString(s, pointer + 1) - key = tonumber(key) - elseif char == CONTROL.START_STRING_KEY then - key, pointer = decodeString(s, pointer + 1) - else - if char == START_DATA.booleanFalse then - T[key or #T + 1] = false - elseif char == START_DATA.booleanTrue then - T[key or #T + 1] = true - elseif char == START_DATA.string then - local str = "" - str, pointer = decodeString(s, pointer + 1) - T[key or #T + 1] = str - elseif char == START_DATA.number then - local str = "" - str, pointer = decodeString(s, pointer + 1) - T[key or #T + 1] = tonumber(str) - elseif char == START_DATA.table then - local str = "" - local pointer2 = 1 - str, pointer2 = decodeString(s, pointer + 1, CONTROL.END, START_DATA.table) - str = s:sub(pointer + 1, pointer2 - 1) - pointer = pointer2 - T[key or #T + 1] = unserialize(str) - elseif char == START_DATA.int then - local str1 = s:sub(pointer + 1, pointer + 1) - local str2 = s:sub(pointer + 2, pointer + 2) - pointer = pointer + 1 - local int = bit.blshift(string.byte(str1), 8) + string.byte(str2) - T[key or #T + 1] = int - end - key = nil - end - pointer = pointer + 1 - end - if isRoot then - t0 = nil - end - return T -end - -return { - newStruct = newStruct, - getStruct = getStruct, - addType = addType, - getReaderWriter = getReaderWriter, - getReader = getReader, - getWriter = getWriter, - stringHandle = stringHandle, - addAlias = addAlias, - serialize = serialize, - serialise = serialize, - unserialize = unserialize, - unserialise = unserialize, -} diff --git a/installer.lua b/installer.lua index 7457d79..b70f952 100644 --- a/installer.lua +++ b/installer.lua @@ -26,6 +26,7 @@ elseif args[1] and args[1]:match("^[%w_-]+/[%w_-]+$") then local chunk = load(installerCode, "installer", "t", _ENV) if chunk then chunk(unpack(newArgs)) + return -- [[ FIXED: Stop this script so we don't run the default menu after the child finishes ]] else print("Error: Failed to load installer from target repository") print("Falling back to default repository") @@ -49,16 +50,14 @@ end local craftInstall = { name = "Crafting Modules", files = { - ["bfile.lua"] = fromRepository "bfile.lua", + ["lib/json.lua"] = fromRepository "lib/json.lua", modules = { ["crafting.lua"] = fromRepository "modules/crafting.lua", ["furnace.lua"] = fromRepository "modules/furnace.lua", ["grid.lua"] = fromRepository "modules/grid.lua", }, recipes = { - ["grid_recipes.bin"] = fromRepository "recipes/grid_recipes.bin", - ["item_lookup.bin"] = fromRepository "recipes/item_lookup.bin", - ["furnace_recipes.bin"] = fromRepository "recipes/furnace_recipes.bin", + ["recipes.json"] = fromRepository "recipes/recipes.json", } } } @@ -105,6 +104,7 @@ local baseInstall = { ["startup.lua"] = fromRepository "storage.lua", ["abstractInvLib.lua"] = fromRepository "lib/abstractInvLib.lua", ["common.lua"] = fromRepository "common.lua", + ["json.lua"] = fromRepository "lib/json.lua", modules = { ["inventory.lua"] = fromRepository "modules/inventory.lua", ["interface.lua"] = fromRepository "modules/interface.lua", @@ -287,4 +287,22 @@ local function processOptions(options) end end -processOptions(installOptions) \ No newline at end of file +-- [[ UPDATED: Main Loop for Post-Install Actions ]] +while true do + processOptions(installOptions) + + print("\nInstallation complete.") + write("Would you like to [R]eboot or [I]nstall more components? ") + local input = read() + local char = input and input:sub(1, 1):lower() or "" + + if char == "r" then + os.reboot() + elseif char == "i" then + -- Just loop around. The repositoryUrl is preserved because we are still + -- in the same script execution instance. + else + print("\nExiting installer.") + break + end +end \ No newline at end of file diff --git a/lib/json.lua b/lib/json.lua new file mode 100644 index 0000000..711ef78 --- /dev/null +++ b/lib/json.lua @@ -0,0 +1,388 @@ +-- +-- json.lua +-- +-- Copyright (c) 2020 rxi +-- +-- Permission is hereby granted, free of charge, to any person obtaining a copy of +-- this software and associated documentation files (the "Software"), to deal in +-- the Software without restriction, including without limitation the rights to +-- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +-- of the Software, and to permit persons to whom the Software is furnished to do +-- so, subject to the following conditions: +-- +-- The above copyright notice and this permission notice shall be included in all +-- copies or substantial portions of the Software. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +-- SOFTWARE. +-- + +local json = { _version = "0.1.2" } + +------------------------------------------------------------------------------- +-- Encode +------------------------------------------------------------------------------- + +local encode + +local escape_char_map = { + [ "\\" ] = "\\", + [ "\"" ] = "\"", + [ "\b" ] = "b", + [ "\f" ] = "f", + [ "\n" ] = "n", + [ "\r" ] = "r", + [ "\t" ] = "t", +} + +local escape_char_map_inv = { [ "/" ] = "/" } +for k, v in pairs(escape_char_map) do + escape_char_map_inv[v] = k +end + + +local function escape_char(c) + return "\\" .. (escape_char_map[c] or string.format("u%04x", c:byte())) +end + + +local function encode_nil(val) + return "null" +end + + +local function encode_table(val, stack) + local res = {} + stack = stack or {} + + -- Circular reference? + if stack[val] then error("circular reference") end + + stack[val] = true + + if rawget(val, 1) ~= nil or next(val) == nil then + -- Treat as array -- check keys are valid and it is not sparse + local n = 0 + for k in pairs(val) do + if type(k) ~= "number" then + error("invalid table: mixed or invalid key types") + end + n = n + 1 + end + if n ~= #val then + error("invalid table: sparse array") + end + -- Encode + for i, v in ipairs(val) do + table.insert(res, encode(v, stack)) + end + stack[val] = nil + return "[" .. table.concat(res, ",") .. "]" + + else + -- Treat as an object + for k, v in pairs(val) do + if type(k) ~= "string" then + error("invalid table: mixed or invalid key types") + end + table.insert(res, encode(k, stack) .. ":" .. encode(v, stack)) + end + stack[val] = nil + return "{" .. table.concat(res, ",") .. "}" + end +end + + +local function encode_string(val) + return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"' +end + + +local function encode_number(val) + -- Check for NaN, -inf and inf + if val ~= val or val <= -math.huge or val >= math.huge then + error("unexpected number value '" .. tostring(val) .. "'") + end + return string.format("%.14g", val) +end + + +local type_func_map = { + [ "nil" ] = encode_nil, + [ "table" ] = encode_table, + [ "string" ] = encode_string, + [ "number" ] = encode_number, + [ "boolean" ] = tostring, +} + + +encode = function(val, stack) + local t = type(val) + local f = type_func_map[t] + if f then + return f(val, stack) + end + error("unexpected type '" .. t .. "'") +end + + +function json.encode(val) + return ( encode(val) ) +end + + +------------------------------------------------------------------------------- +-- Decode +------------------------------------------------------------------------------- + +local parse + +local function create_set(...) + local res = {} + for i = 1, select("#", ...) do + res[ select(i, ...) ] = true + end + return res +end + +local space_chars = create_set(" ", "\t", "\r", "\n") +local delim_chars = create_set(" ", "\t", "\r", "\n", "]", "}", ",") +local escape_chars = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u") +local literals = create_set("true", "false", "null") + +local literal_map = { + [ "true" ] = true, + [ "false" ] = false, + [ "null" ] = nil, +} + + +local function next_char(str, idx, set, negate) + for i = idx, #str do + if set[str:sub(i, i)] ~= negate then + return i + end + end + return #str + 1 +end + + +local function decode_error(str, idx, msg) + local line_count = 1 + local col_count = 1 + for i = 1, idx - 1 do + col_count = col_count + 1 + if str:sub(i, i) == "\n" then + line_count = line_count + 1 + col_count = 1 + end + end + error( string.format("%s at line %d col %d", msg, line_count, col_count) ) +end + + +local function codepoint_to_utf8(n) + -- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa + local f = math.floor + if n <= 0x7f then + return string.char(n) + elseif n <= 0x7ff then + return string.char(f(n / 64) + 192, n % 64 + 128) + elseif n <= 0xffff then + return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128) + elseif n <= 0x10ffff then + return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128, + f(n % 4096 / 64) + 128, n % 64 + 128) + end + error( string.format("invalid unicode codepoint '%x'", n) ) +end + + +local function parse_unicode_escape(s) + local n1 = tonumber( s:sub(1, 4), 16 ) + local n2 = tonumber( s:sub(7, 10), 16 ) + -- Surrogate pair? + if n2 then + return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000) + else + return codepoint_to_utf8(n1) + end +end + + +local function parse_string(str, i) + local res = "" + local j = i + 1 + local k = j + + while j <= #str do + local x = str:byte(j) + + if x < 32 then + decode_error(str, j, "control character in string") + + elseif x == 92 then -- `\`: Escape + res = res .. str:sub(k, j - 1) + j = j + 1 + local c = str:sub(j, j) + if c == "u" then + local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1) + or str:match("^%x%x%x%x", j + 1) + or decode_error(str, j - 1, "invalid unicode escape in string") + res = res .. parse_unicode_escape(hex) + j = j + #hex + else + if not escape_chars[c] then + decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string") + end + res = res .. escape_char_map_inv[c] + end + k = j + 1 + + elseif x == 34 then -- `"`: End of string + res = res .. str:sub(k, j - 1) + return res, j + 1 + end + + j = j + 1 + end + + decode_error(str, i, "expected closing quote for string") +end + + +local function parse_number(str, i) + local x = next_char(str, i, delim_chars) + local s = str:sub(i, x - 1) + local n = tonumber(s) + if not n then + decode_error(str, i, "invalid number '" .. s .. "'") + end + return n, x +end + + +local function parse_literal(str, i) + local x = next_char(str, i, delim_chars) + local word = str:sub(i, x - 1) + if not literals[word] then + decode_error(str, i, "invalid literal '" .. word .. "'") + end + return literal_map[word], x +end + + +local function parse_array(str, i) + local res = {} + local n = 1 + i = i + 1 + while 1 do + local x + i = next_char(str, i, space_chars, true) + -- Empty / end of array? + if str:sub(i, i) == "]" then + i = i + 1 + break + end + -- Read token + x, i = parse(str, i) + res[n] = x + n = n + 1 + -- Next token + i = next_char(str, i, space_chars, true) + local chr = str:sub(i, i) + i = i + 1 + if chr == "]" then break end + if chr ~= "," then decode_error(str, i, "expected ']' or ','") end + end + return res, i +end + + +local function parse_object(str, i) + local res = {} + i = i + 1 + while 1 do + local key, val + i = next_char(str, i, space_chars, true) + -- Empty / end of object? + if str:sub(i, i) == "}" then + i = i + 1 + break + end + -- Read key + if str:sub(i, i) ~= '"' then + decode_error(str, i, "expected string for key") + end + key, i = parse(str, i) + -- Read ':' delimiter + i = next_char(str, i, space_chars, true) + if str:sub(i, i) ~= ":" then + decode_error(str, i, "expected ':' after key") + end + i = next_char(str, i + 1, space_chars, true) + -- Read value + val, i = parse(str, i) + -- Set + res[key] = val + -- Next token + i = next_char(str, i, space_chars, true) + local chr = str:sub(i, i) + i = i + 1 + if chr == "}" then break end + if chr ~= "," then decode_error(str, i, "expected '}' or ','") end + end + return res, i +end + + +local char_func_map = { + [ '"' ] = parse_string, + [ "0" ] = parse_number, + [ "1" ] = parse_number, + [ "2" ] = parse_number, + [ "3" ] = parse_number, + [ "4" ] = parse_number, + [ "5" ] = parse_number, + [ "6" ] = parse_number, + [ "7" ] = parse_number, + [ "8" ] = parse_number, + [ "9" ] = parse_number, + [ "-" ] = parse_number, + [ "t" ] = parse_literal, + [ "f" ] = parse_literal, + [ "n" ] = parse_literal, + [ "[" ] = parse_array, + [ "{" ] = parse_object, +} + + +parse = function(str, idx) + local chr = str:sub(idx, idx) + local f = char_func_map[chr] + if f then + return f(str, idx) + end + decode_error(str, idx, "unexpected character '" .. chr .. "'") +end + + +function json.decode(str) + if type(str) ~= "string" then + error("expected argument of type string, got " .. type(str)) + end + local res, idx = parse(str, next_char(str, 1, space_chars, true)) + idx = next_char(str, idx, space_chars, true) + if idx <= #str then + decode_error(str, idx, "trailing garbage") + end + return res +end + + +return json diff --git a/modules/crafting.lua b/modules/crafting.lua index e7b55bc..66cf4da 100644 --- a/modules/crafting.lua +++ b/modules/crafting.lua @@ -3,13 +3,18 @@ local common = require("common") ---@field interface modules.crafting.interface return { id = "crafting", - version = "1.4.1", - config = { + version = "1.4.8", -- Bumped version for fix + config = { tagLookup = { type = "table", description = "Force a given item to be used for a tag lookup. Map from tag->item.", default = {} }, + aliases = { + type = "table", + description = "Manual Table of aliases. Map input -> output (e.g. 'foo' -> 'bar').", + default = {} + }, persistence = { type = "boolean", description = @@ -43,72 +48,73 @@ return { }, init = function(loaded, config) local log = loaded.logger - ---@alias ItemInfo {[1]: string, tag: boolean?} - + + ---@alias ItemInfo {name: string, tag: boolean?} ---@alias ItemIndex integer ---@type ItemInfo[] - -- lookup into an ordered list of item names local itemLookup = {} ---@type table lookup from name -> item_lookup index local itemNameLookup = {} - local bfile = require("bfile") - bfile.addType("tag_boolean", function(f) - if f.read(1) == "T" then - return true - end - return false - end, function(f, v) - if v then - f.write("T") - else - f.write("I") - end - end) - bfile.newStruct("item_lookup_entry"):add("tag_boolean", "tag"):add("string", 1) - bfile.newStruct("item_lookup"):constant("ILUT"):add("item_lookup_entry[*]", "^") - + local json = require("lib/json") local function saveItemLookup() - bfile.getStruct("item_lookup"):writeFile("recipes/item_lookup.bin", itemLookup) + local f = assert(fs.open("recipes/item_lookup.json", "w")) + f.write(json.encode(itemLookup)) + f.close() end + local function loadItemLookup() - itemLookup = bfile.getStruct("item_lookup"):readFile("recipes/item_lookup.bin") or {} - for k, v in pairs(itemLookup) do - itemNameLookup[v[1]] = k + local f = fs.open("recipes/item_lookup.json", "r") + if f then + local contents = f.readAll() or "{}" + f.close() + local decoded = json.decode(contents) + if type(decoded) == "table" then + itemLookup = decoded + for k, v in pairs(itemLookup) do + local name = v.name or v[1] + if name then + itemNameLookup[name] = k + end + end + else + print("Warning: Invalid item lookup JSON format") + end end end - ---Get the index of a string or tag, creating one if one doesn't exist already + ---Get the index of a string or tag ---@param str string ---@param tag boolean|nil ---@return ItemIndex local function getOrCacheString(str, tag) common.enforceType(str, 1, "string") common.enforceType(tag, 2, "boolean", "nil") + + -- Manual Alias Resolution (Config) + local aliases = config.crafting.aliases and config.crafting.aliases.value + if aliases and aliases[str] then + str = aliases[str] + end + if itemNameLookup[str] then return itemNameLookup[str] end local i = #itemLookup + 1 - itemLookup[i] = { str, tag = not not tag } + itemLookup[i] = { name = str, tag = not not tag } itemNameLookup[str] = i - saveItemLookup() -- updated item lookup + saveItemLookup() return i end local jsonLogger = setmetatable({}, { - __index = function() - return function() - end - end + __index = function() return function() end end }) if log then jsonLogger = log.interface.logger("crafting", "json_importing") end local jsonTypeHandlers = {} - ---Add a JSON type handler, this should load a recipe from the given JSON table - ---@param jsonType string - ---@param handler fun(json: table) local function addJsonTypeHandler(jsonType, handler) common.enforceType(jsonType, 1, "string") common.enforceType(handler, 2, "function") @@ -127,48 +133,16 @@ return { ---@alias taskID string uuid foriegn key ---@alias JobId string - - ---@type CraftingNode[] tasks that have unmet dependencies local waitingQueue = {} - ---@type CraftingNode[] tasks that have all dependencies met local readyQueue = {} - ---@type CraftingNode[] tasks that are in progress local craftingQueue = {} - - ---@type table tasks that have been completed, but are still relavant local doneLookup = {} - - ---@type table local transferIdTaskLUT = {} - local tickNode, changeNodeState, deleteTask - - --- ITEM - this node represents a quantity of items from the network - --- ROOT - this node represents the root of a crafting task - - ---@alias NodeState string | "WAITING" | "READY" | "CRAFTING" | "DONE" - - ---@class CraftingNode - ---@field children CraftingNode[]|nil - ---@field parent CraftingNode|nil - ---@field type "ITEM" | "ROOT" | "MISSING" - ---@field name string - ---@field count integer amount of this item to produce - ---@field taskId string - ---@field jobId string - ---@field state NodeState - ---@field priority integer TODO - - ---@type table> item name -> count reserved local reservedItems = {} - bfile.addAlias("string_uint16_map", "map") - bfile.newStruct("reserved_items"):add("map", "^") - local function saveReservedItems() - if not config.crafting.persistence.value then - return - end + if not config.crafting.persistence.value then return end common.saveTableToFile(".cache/reserved_items.txt", reservedItems) end @@ -180,24 +154,15 @@ return { reservedItems = common.loadTableFromFile(".cache/reserved_items.txt") or {} end - ---Get count of item in system, excluding reserved - ---@param name string - ---@return integer local function getCount(name) common.enforceType(name, 1, "string") local reservedCount = 0 for k, v in pairs(reservedItems[name] or {}) do - -- TODO add check to ensure this is not leaked reservedCount = reservedCount + v end return loaded.inventory.interface.getCount(name) - reservedCount end - ---Reserve amount of item name - ---@param name string - ---@param amount integer - ---@param taskId string - ---@return integer local function allocateItems(name, amount, taskId) common.enforceType(name, 1, "string") common.enforceType(amount, 2, "integer") @@ -207,183 +172,278 @@ return { return amount end - ---Free amount of item name - ---@param name string - ---@param amount integer - ---@param taskId string - ---@return integer local function deallocateItems(name, amount, taskId) common.enforceType(name, 1, "string") common.enforceType(amount, 2, "integer") - - -- Ensure reservedItems[name] and reservedItems[name][taskId] exist if not reservedItems[name] or not reservedItems[name][taskId] then - -- Items were not reserved, this can happen when crafting completes successfully - -- and items were already consumed, or when tasks are cleaned up properly if log then - craftLogger:debug("Attempt to deallocate items that are not reserved (name: %s, amount: %d, taskId: %s)", name, amount, taskId) - else - print("Attempt to deallocate items that are not reserved") + -- craftLogger:debug("Attempt to deallocate...") -- craftLogger not defined yet end return 0 end - reservedItems[name][taskId] = reservedItems[name][taskId] - amount - assert(reservedItems[name][taskId] >= 0, "We have negative items reserved?") - if reservedItems[name][taskId] == 0 then - reservedItems[name][taskId] = nil - end - if not next(reservedItems[name]) then - reservedItems[name] = nil - end + if reservedItems[name][taskId] == 0 then reservedItems[name][taskId] = nil end + if not next(reservedItems[name]) then reservedItems[name] = nil end saveReservedItems() return amount end local cachedStackSizes = {} - - ---Get the maximum stacksize of an item by name - ---@param name string local function getStackSize(name) common.enforceType(name, 1, "string") - if cachedStackSizes[name] then - return cachedStackSizes[name] - end + if cachedStackSizes[name] then return cachedStackSizes[name] end local item = loaded.inventory.interface.getItem(name) cachedStackSizes[name] = (item and item.item and item.item.maxCount) or 64 return cachedStackSizes[name] end local lastId = 0 - ---Get a psuedorandom uuid - ---@return string local function id() lastId = lastId + 1 - local genId = lastId .. "$" - return genId + return lastId .. "$" end - ---@type table local craftableLists = {} - ---Set the table of craftable items for a given id - ---@param id string ID of crafting module/type - ---@param list string[] table of craftable item names, assigned by reference local function addCraftableList(id, list) common.enforceType(id, 1, "string") common.enforceType(list, 2, "string[]") craftableLists[id] = list end - ---List all the items that are craftable - ---@return string[] local function listCraftables() local l = {} for k, v in pairs(craftableLists) do - for i, s in ipairs(v) do - table.insert(l, s) - end + for i, s in ipairs(v) do table.insert(l, s) end end return l end - bfile.newStruct("cached_tags"):add("map", "^") - - ---@type table tag -> item names local cachedTagLookup = {} - local function saveCachedTags() - bfile.getStruct("cached_tags"):writeFile(".cache/cached_tags.bin", cachedTagLookup) + local f = assert(fs.open(".cache/cached_tags.json", "w")) + f.write(json.encode(cachedTagLookup)) + f.close() end - ---@type table> tag -> item name -> is it in cached_tag_lookup local cachedTagPresence = {} - local function loadCachedTags() - cachedTagLookup = bfile.getStruct("cached_tags"):readFile(".cache/cached_tags.bin") or {} - cachedTagPresence = {} - for tag, names in pairs(cachedTagLookup) do - cachedTagPresence[tag] = {} - for _, name in ipairs(names) do - cachedTagPresence[tag][name] = true + local f = fs.open(".cache/cached_tags.json", "r") + if f then + cachedTagLookup = json.decode(f.readAll() or "{}") + f.close() + cachedTagPresence = {} + for tag, names in pairs(cachedTagLookup) do + cachedTagPresence[tag] = {} + for _, name in ipairs(names) do + cachedTagPresence[tag][name] = true + end end end end + -- Load aliases/tags from recipes.json + local function loadAliases() + if not fs.exists("recipes/recipes.json") then return end + local f = fs.open("recipes/recipes.json", "r") + if f then + local content = f.readAll() + f.close() + local data = json.decode(content) + if data and data.aliases then + print("Loading aliases from recipes.json...") + local count = 0 + for tag, items in pairs(data.aliases) do + cachedTagLookup[tag] = items + cachedTagPresence[tag] = cachedTagPresence[tag] or {} + for _, item in ipairs(items) do + cachedTagPresence[tag][item] = true + end + count = count + 1 + end + print("Loaded " .. count .. " aliases/tags.") + saveCachedTags() + end + end + end + + local craft -- forward declaration + local function runOnAll(root, func) + common.enforceType(root, 1, "table") + common.enforceType(func, 2, "function") + func(root) + if root.children then + for _, v in pairs(root.children) do runOnAll(v, func) end + end + end + + local function getJobInfo(root) + common.enforceType(root, 1, "table") + local ret = { success = true, toCraft = {}, toUse = {}, missing = {}, jobId = root.jobId } + runOnAll(root, function(node) + if node.type == "ITEM" then ret.toUse[node.name] = (ret.toUse[node.name] or 0) + node.count + elseif node.type == "MISSING" then + ret.success = false + ret.missing[node.name] = (ret.missing[node.name] or 0) + node.count + elseif node.type ~= "ROOT" then + ret.toCraft[node.name] = (ret.toCraft[node.name] or 0) + (node.count or 0) + end + end) + return ret + end - ---Select the best item from a tag - ---@param tag string - ---@return boolean success - ---@return string itemName local function selectBestFromTag(tag) common.enforceType(tag, 1, "string") if config.crafting.tagLookup.value[tag] then return true, config.crafting.tagLookup.value[tag] end + if not cachedTagPresence[tag] then cachedTagPresence[tag] = {} cachedTagLookup[tag] = {} saveCachedTags() end - -- first check if we have anything - local itemsWithTag = loaded.inventory.interface.getTag(tag) - local itemsWithTagsCount = {} - for k, v in ipairs(itemsWithTag) do - if not cachedTagPresence[tag][v] then - -- update the cache if it's not in there already - cachedTagPresence[tag][v] = true - table.insert(cachedTagLookup[tag], v) - saveCachedTags() - end - itemsWithTagsCount[k] = { name = v, count = loaded.inventory.interface.getCount(v) } + + local candidates = {} + local inventoryTags = loaded.inventory.interface.getTag(tag) + if inventoryTags then + for _, item in ipairs(inventoryTags) do candidates[item] = true end end + if cachedTagLookup[tag] then + for _, item in ipairs(cachedTagLookup[tag]) do candidates[item] = true end + end + + local itemsWithTagsCount = {} + for name, _ in pairs(candidates) do + if not cachedTagPresence[tag][name] then + cachedTagPresence[tag][name] = true + table.insert(cachedTagLookup[tag], name) + saveCachedTags() + end + local count = loaded.inventory.interface.getCount(name) + if count > 0 then + table.insert(itemsWithTagsCount, { name = name, count = count }) + end + end + table.sort(itemsWithTagsCount, function(a, b) return a.count > b.count end) + if itemsWithTagsCount[1] then return true, itemsWithTagsCount[1].name end - -- then check if we can craft anything local craftableList = listCraftables() local isCraftableLUT = {} for k, v in pairs(craftableList) do isCraftableLUT[v] = true end + -- Filter candidates to only those that are theoretically craftable + local craftableCandidates = {} + for name, _ in pairs(candidates) do + if isCraftableLUT[name] then + table.insert(craftableCandidates, name) + end + end + + -- Fallback: If we have tags in cache but they weren't in candidates list for k, v in pairs(cachedTagLookup[tag]) do - if isCraftableLUT[v] then - return true, v -- this is not the best way of doing this. + if isCraftableLUT[v] and not candidates[v] then + table.insert(craftableCandidates, v) end end - -- no solution found + -- Simulation check: Pick the candidate we can actually craft + for _, name in ipairs(craftableCandidates) do + -- Simulate crafting 1 item + local simChain = { isSimulation = true } + local simNodes = craft(name, 1, "sim", nil, simChain) + -- Check success + local root = { jobId = "sim", children = simNodes, type = "ROOT", taskId = "sim" } + local info = getJobInfo(root) + if info.success then + return true, name + end + end + + -- If all fail, fallback to the first one (will likely fail later but better than nothing) + if craftableCandidates[1] then + return true, craftableCandidates[1] + end + return false, tag end - ---Select the best item from an index - ---@param index ItemIndex - ---@return boolean success - ---@return string itemName local function selectBestFromIndex(index) common.enforceType(index, 1, "integer") local itemInfo = assert(itemLookup[index], "Invalid item index") + local name = itemInfo.name or itemInfo[1] if itemInfo.tag then - return selectBestFromTag(itemInfo[1]) + local lookupName = name + if not lookupName:find("^#") then lookupName = "#" .. lookupName end + return selectBestFromTag(lookupName) end - return true, itemInfo[1] + return true, name end - ---Select the best item from a list of ItemIndex - ---@param list ItemIndex[] - ---@return boolean success - ---@return string itemName local function selectBestFromList(list) common.enforceType(list, 1, "integer[]") - return true, itemLookup[list[1]][1] + + -- 1. Check if we have any of these items directly in inventory + for _, itemIndex in ipairs(list) do + local itemInfo = itemLookup[itemIndex] + local name = itemInfo.name or itemInfo[1] + + -- If the list entry is a TAG, try to resolve it to an item we have + if itemInfo.tag then + local tagStr = name + if not tagStr:find("^#") then tagStr = "#" .. tagStr end + local success, resolved = selectBestFromTag(tagStr) + if success and getCount(resolved) > 0 then + return true, resolved + end + elseif getCount(name) > 0 then + return true, name + end + end + + local craftableList = listCraftables() + local isCraftableLUT = {} + for k, v in pairs(craftableList) do + isCraftableLUT[v] = true + end + + local craftableCandidates = {} + for _, itemIndex in ipairs(list) do + local itemInfo = itemLookup[itemIndex] + local name = itemInfo.name or itemInfo[1] + + if itemInfo.tag then + -- Resolve tag to a specific item for crafting check + local tagStr = name + if not tagStr:find("^#") then tagStr = "#" .. tagStr end + local success, resolved = selectBestFromTag(tagStr) + if success then + table.insert(craftableCandidates, resolved) + end + elseif isCraftableLUT[name] then + table.insert(craftableCandidates, name) + end + end + + for _, name in ipairs(craftableCandidates) do + local simChain = { isSimulation = true } + local simNodes = craft(name, 1, "sim", nil, simChain) + local root = { jobId = "sim", children = simNodes, type = "ROOT", taskId = "sim" } + local info = getJobInfo(root) + if info.success then + return true, name + end + end + + local firstInfo = itemLookup[list[1]] + return true, (firstInfo.name or firstInfo[1]) end - ---Select the best item - ---@param item ItemIndex[]|ItemIndex - ---@return boolean success - ---@return string name itemname if success, otherwise tag local function getBestItem(item) common.enforceType(item, 1, "integer[]", "integer") if type(item) == "table" then @@ -394,19 +454,12 @@ return { error("Invalid type " .. type(item), 2) end - ---Get the string for a given index - ---@param v integer - ---@return string string - ---@return boolean tag local function getString(v) local itemInfo = itemLookup[v] assert(itemInfo, "Invalid key passed to getString") - return itemInfo[1], itemInfo.tag + return (itemInfo.name or itemInfo[1]), itemInfo.tag end - ---Merge from into the end of to - ---@param from table - ---@param to table local function mergeInto(from, to) common.enforceType(from, 1, "table") common.enforceType(to, 1, "table") @@ -415,47 +468,30 @@ return { end end - - ---Lookup from taskId to the corrosponding CraftingNode - ---@type table local taskLookup = {} - - ---Lookup from jobId to the corrosponding CraftingNode - ---@type table local jobLookup = {} - ---Shallow clone a table - ---@param t table - ---@return table local function shallowClone(t) common.enforceType(t, 1, "table") local nt = {} - for k, v in pairs(t) do - nt[k] = v - end + for k, v in pairs(t) do nt[k] = v end return nt end local function saveTaskLookup() - if not config.crafting.persistence.value then - return - end + if not config.crafting.persistence.value then return end local flatTaskLookup = {} for k, v in pairs(taskLookup) do flatTaskLookup[k] = shallowClone(v) local flatTask = flatTaskLookup[k] - if v.parent then - flatTask.parent = v.parent.taskId - end + if v.parent then flatTask.parent = v.parent.taskId end if v.children then flatTask.children = {} - for i, ch in pairs(v.children) do - flatTask.children[i] = ch.taskId - end + for i, ch in pairs(v.children) do flatTask.children[i] = ch.taskId end end end - local f = assert(fs.open(".cache/flat_task_lookup.bin", "wb")) - f.write(bfile.serialise(flatTaskLookup)) + local f = assert(fs.open(".cache/flat_task_lookup.json", "w")) + f.write(json.encode(flatTaskLookup)) f.close() end @@ -464,19 +500,19 @@ return { taskLookup = {} return end - local taskLoaderLogger = setmetatable({}, { - __index = function() - return function() - end - end - }) - if log then - taskLoaderLogger = log.interface.logger("crafting", "loadTaskLookup") - end - local f = fs.open(".cache/flat_task_lookup.bin", "rb") + local taskLoaderLogger = setmetatable({}, { __index = function() return function() end end }) + if log then taskLoaderLogger = log.interface.logger("crafting", "loadTaskLookup") end + local f = fs.open(".cache/flat_task_lookup.json", "r") if f then - taskLookup = bfile.unserialise(f.readAll() or "") + local contents = f.readAll() or "{}" f.close() + local decoded = json.decode(contents) + if type(decoded) == "table" then + taskLookup = decoded + else + taskLookup = {} + print("Warning: Invalid task lookup JSON format") + end else taskLookup = {} end @@ -489,41 +525,23 @@ return { taskLoaderLogger:debug("Loaded taskId=%s,state=%s", v.taskId, v.state) jobLookup[v.jobId] = jobLookup[v.jobId] or {} table.insert(jobLookup[v.jobId], v) - if v.parent then - v.parent = taskLookup[v.parent] - end + if v.parent then v.parent = taskLookup[v.parent] end if v.children then - for i, ch in pairs(v.children) do - v.children[i] = taskLookup[ch] - end + for i, ch in pairs(v.children) do v.children[i] = taskLookup[ch] end end if v.state then - if v.state == "WAITING" then - table.insert(waitingQueue, v) - elseif v.state == "READY" then - table.insert(readyQueue, v) - elseif v.state == "CRAFTING" then - table.insert(craftingQueue, v) - elseif v.state == "DONE" then - doneLookup[v.taskId] = v - else - error("Invalid state on load") - end + if v.state == "WAITING" then table.insert(waitingQueue, v) + elseif v.state == "READY" then table.insert(readyQueue, v) + elseif v.state == "CRAFTING" then table.insert(craftingQueue, v) + elseif v.state == "DONE" then doneLookup[v.taskId] = v + else error("Invalid state on load") end end end end - local craftLogger = setmetatable({}, { - __index = function() - return function() - end - end - }) - if log then - craftLogger = log.interface.logger("crafting", "request_craft") - end - local craft - ---@type table + local craftLogger = setmetatable({}, { __index = function() return function() end end }) + if log then craftLogger = log.interface.logger("crafting", "request_craft") end + local requestCraftTypes = {} local function addCraftType(type, func) common.enforceType(type, 1, "string") @@ -535,22 +553,9 @@ return { common.enforceType(name, 1, "string") common.enforceType(count, 2, "integer") common.enforceType(jobId, 3, "string") - return { - name = name, - jobId = jobId, - taskId = id(), - count = count, - type = "MISSING" - } + return { name = name, jobId = jobId, taskId = id(), count = count, type = "MISSING" } end - ---Attempt a craft - ---@param node CraftingNode - ---@param name string - ---@param remaining integer - ---@param requestChain table - ---@param jobId string - ---@return number local function _attemptCraft(node, name, remaining, requestChain, jobId) common.enforceType(node, 1, "table") common.enforceType(name, 2, "string") @@ -561,27 +566,18 @@ return { for k, v in pairs(requestCraftTypes) do success = v(node, name, remaining, requestChain) if success then - craftLogger:debug("Recipe found. provider:%s,name:%s,count:%u,taskId:%s,jobId:%s", k, name, node.count, - node.taskId, jobId) + craftLogger:debug("Recipe found. provider:%s,name:%s,count:%u,taskId:%s,jobId:%s", k, name, node.count, node.taskId, jobId) craftLogger:info("Recipe for %s was provided by %s", name, k) break end end if not success then craftLogger:debug("No recipe found for %s", name) - for k, v in pairs(createMissingNode(name, remaining, jobId)) do - node[k] = v - end + for k, v in pairs(createMissingNode(name, remaining, jobId)) do node[k] = v end end return remaining - node.count end - ---@param name string item name - ---@param count integer - ---@param jobId string - ---@param force boolean|nil - ---@param requestChain table|nil table of item names that have been requested - ---@return CraftingNode[] leaves ITEM|MISSING|other node function craft(name, count, jobId, force, requestChain) common.enforceType(name, 1, "string") common.enforceType(count, 2, "integer") @@ -589,27 +585,27 @@ return { common.enforceType(force, 4, "boolean", "nil") common.enforceType(requestChain, 5, "table", "nil") requestChain = shallowClone(requestChain or {}) - if requestChain[name] then - return { createMissingNode(name, count, jobId) } - end + + -- Stop loop + if requestChain[name] then return { createMissingNode(name, count, jobId) } end requestChain[name] = true - ---@type CraftingNode[] + + local isSimulation = requestChain.isSimulation + local nodes = {} local remaining = count craftLogger:debug("Remaining craft count for %s is %u", name, remaining) while remaining > 0 do - ---@type CraftingNode - local node = { - name = name, - taskId = id(), - jobId = jobId, - priority = 1, - } - -- First check if we have any of this + local node = { name = name, taskId = id(), jobId = jobId, priority = 1 } local available = getCount(name) if available > 0 and not force then - -- we do, so allocate it - local allocateAmount = allocateItems(name, math.min(available, remaining), node.taskId) + local allocateAmount + if isSimulation then + -- Mock allocation + allocateAmount = math.min(available, remaining) + else + allocateAmount = allocateItems(name, math.min(available, remaining), node.taskId) + end node.type = "ITEM" node.count = allocateAmount remaining = remaining - allocateAmount @@ -622,101 +618,54 @@ return { return nodes end - ---Run the given function an all nodes of the given tree - ---@param root CraftingNode root - ---@param func fun(node: CraftingNode) local function runOnAll(root, func) common.enforceType(root, 1, "table") common.enforceType(func, 2, "function") func(root) if root.children then - for _, v in pairs(root.children) do - runOnAll(v, func) - end + for _, v in pairs(root.children) do runOnAll(v, func) end end end - ---Remove an object from a table - ---@generic T : any - ---@param arr T[] - ---@param val T local function removeFromArray(arr, val) common.enforceType(arr, 1, type(val) .. "[]") for i, v in ipairs(arr) do - if v == val then - table.remove(arr, i) - end + if v == val then table.remove(arr, i) end end end - ---Delete a given task, asserting the task is DONE and has no children - ---@param task CraftingNode function deleteTask(task) common.enforceType(task, 1, "table") - if task.type == "ITEM" then - deallocateItems(task.name, task.count, task.taskId) - end - if task.parent then - removeFromArray(task.parent.children, task) - end + if task.type == "ITEM" then deallocateItems(task.name, task.count, task.taskId) end + if task.parent then removeFromArray(task.parent.children, task) end assert(task.state == "DONE", "Attempt to delete not done task.") doneLookup[task.taskId] = nil assert(task.children == nil, "Attempt to delete task with children.") taskLookup[task.taskId] = nil removeFromArray(jobLookup[task.jobId], task) - if #jobLookup[task.jobId] == 0 then - jobLookup[task.jobId] = nil - end + if #jobLookup[task.jobId] == 0 then jobLookup[task.jobId] = nil end end - local nodeStateLogger = setmetatable({}, { - __index = function() - return function() - end - end - }) - if log then - nodeStateLogger = log.interface.logger("crafting", "node_state") - end - ---Safely change a node to a new state - ---Only modifies the node's state and related caches - ---@param node CraftingNode - ---@param newState NodeState + local nodeStateLogger = setmetatable({}, { __index = function() return function() end end }) + if log then nodeStateLogger = log.interface.logger("crafting", "node_state") end + function changeNodeState(node, newState) - if not node then - error("No node?", 2) - end - if node.state == newState then - return - end - if node.state == "WAITING" then - removeFromArray(waitingQueue, node) - elseif node.state == "READY" then - removeFromArray(readyQueue, node) - elseif node.state == "CRAFTING" then - removeFromArray(craftingQueue, node) - elseif node.state == "DONE" then - doneLookup[node.taskId] = nil - end + if not node then error("No node?", 2) end + if node.state == newState then return end + if node.state == "WAITING" then removeFromArray(waitingQueue, node) + elseif node.state == "READY" then removeFromArray(readyQueue, node) + elseif node.state == "CRAFTING" then removeFromArray(craftingQueue, node) + elseif node.state == "DONE" then doneLookup[node.taskId] = nil end node.state = newState - if node.state == "WAITING" then - table.insert(waitingQueue, node) - elseif node.state == "READY" then - table.insert(readyQueue, node) - elseif node.state == "CRAFTING" then - table.insert(craftingQueue, node) + if node.state == "WAITING" then table.insert(waitingQueue, node) + elseif node.state == "READY" then table.insert(readyQueue, node) + elseif node.state == "CRAFTING" then table.insert(craftingQueue, node) elseif node.state == "DONE" then doneLookup[node.taskId] = node os.queueEvent("crafting_node_done", node.taskId) end end - ---Protected pushItems, errors if it cannot move - ---enough items to a slot - ---@param to string - ---@param name string - ---@param toMove integer - ---@param slot integer local function pushItems(to, name, toMove, slot) common.enforceType(to, 1, "string") common.enforceType(name, 2, "string") @@ -728,83 +677,52 @@ return { toMove = toMove - transfered if transfered == 0 then failCount = failCount + 1 - if failCount > 3 then - error(("Unable to move %s"):format(name)) - end + if failCount > 3 then error(("Unable to move %s"):format(name)) end end end end - ---@type table Process an item in the READY state local readyHandlers = {} - - ---@param nodeType string - ---@param func fun(node: CraftingNode)> local function addReadyHandler(nodeType, func) common.enforceType(nodeType, 1, "string") common.enforceType(func, 2, "function") readyHandlers[nodeType] = func end - ---@type table Process an item that is in the CRAFTING state local craftingHandlers = {} - - ---@param nodeType string - ---@param func fun(node: CraftingNode)> local function addCraftingHandler(nodeType, func) common.enforceType(nodeType, 1, "string") common.enforceType(func, 2, "function") craftingHandlers[nodeType] = func end - ---Deletes all the node's children, calling delete_task on each local function deleteNodeChildren(node) common.enforceType(node, 1, "table") - if not node.children then - return - end - for _, child in pairs(node.children) do - deleteTask(child) - end + if not node.children then return end + for _, child in pairs(node.children) do deleteTask(child) end node.children = nil end - ---Update the state of the given node - ---@param node CraftingNode function tickNode(node) saveTaskLookup() common.enforceType(node, 1, "table") if not node.state then - if node.type == "ROOT" then - node.startTime = os.epoch("utc") - end - -- This is an uninitialized node - -- leaf -> set state to READY - -- otherwise -> set state to WAITING - if node.children then - changeNodeState(node, "WAITING") - else - changeNodeState(node, "DONE") - end + if node.type == "ROOT" then node.startTime = os.epoch("utc") end + if node.children then changeNodeState(node, "WAITING") + else changeNodeState(node, "DONE") end return end - -- this is a node that has been updated before if node.state == "WAITING" then if node.children then - -- this has children it depends upon local allChildrenDone = true for _, child in pairs(node.children) do allChildrenDone = child.state == "DONE" - if not allChildrenDone then - break - end + if not allChildrenDone then break end end if allChildrenDone then - -- this is ready to be crafted deleteNodeChildren(node) removeFromArray(waitingQueue, node) if node.type == "ROOT" then - -- This task is the root of a job nodeStateLogger:info("Finished jobId:%s in %.2fsec", node.jobId, (os.epoch("utc") - node.startTime) / 1000) os.queueEvent("craft_job_done", node.jobId) changeNodeState(node, "DONE") @@ -813,9 +731,7 @@ return { end changeNodeState(node, "READY") end - else - changeNodeState(node, "READY") - end + else changeNodeState(node, "READY") end elseif node.state == "READY" then assert(readyHandlers[node.type], "No readyHandler for type " .. (node.type or "nil")) readyHandlers[node.type](node) @@ -827,25 +743,16 @@ return { end end - ---Update every node on the tree - ---@param tree CraftingNode local function updateWholeTree(tree) common.enforceType(tree, 1, "table") - -- traverse to each node of the tree runOnAll(tree, tickNode) end - ---Remove the parent of each child - ---@param node CraftingNode local function removeChildrensParents(node) common.enforceType(node, 1, "table") - for k, v in pairs(node.children) do - v.parent = nil - end + for k, v in pairs(node.children) do v.parent = nil end end - ---Safely cancel a task by ID - ---@param taskId string local function cancelTask(taskId) common.enforceType(taskId, 1, "string") craftLogger:debug("Cancelling task %s", taskId) @@ -858,35 +765,26 @@ return { removeFromArray(readyQueue, task) removeChildrensParents(task) end - if task.type == "ITEM" then - deallocateItems(task.name, task.count, task.taskId) - end - -- if it's not in these two states, then it's not cancellable + if task.type == "ITEM" then deallocateItems(task.name, task.count, task.taskId) end return end taskLookup[taskId] = nil end - ---@type table local pendingJobs = {} - local function savePendingJobs() - if not config.crafting.persistence.value then - return - end + if not config.crafting.persistence.value then return end local flatPendingJobs = {} for jobIndex, job in pairs(pendingJobs) do local clone = shallowClone(job) runOnAll(clone, function(node) node.parent = nil - for k, v in pairs(node.children or {}) do - node.children[k] = shallowClone(v) - end + for k, v in pairs(node.children or {}) do node.children[k] = shallowClone(v) end end) flatPendingJobs[jobIndex] = clone end - local f = assert(fs.open(".cache/pending_jobs.bin", "wb")) - f.write(bfile.serialise(flatPendingJobs)) + local f = assert(fs.open(".cache/pending_jobs.json", "w")) + f.write(json.encode(flatPendingJobs)) f.close() end @@ -895,22 +793,19 @@ return { pendingJobs = {} return end - local f = fs.open(".cache/pending_jobs.bin", "rb") + local f = fs.open(".cache/pending_jobs.json", "r") if f then - pendingJobs = bfile.unserialise(f.readAll() or "") + local contents = f.readAll() or "{}" f.close() - else - pendingJobs = {} - end + local decoded = json.decode(contents) + if type(decoded) == "table" then pendingJobs = decoded + else pendingJobs = {} print("Warning: Invalid pending jobs JSON format") end + else pendingJobs = {} end runOnAll(pendingJobs, function(node) - for k, v in pairs(node.children or {}) do - v.parent = node - end + for k, v in pairs(node.children or {}) do v.parent = node end end) end - ---Cancel a job by given id - ---@param jobId any local function cancelCraft(jobId) common.enforceType(jobId, 1, "string") craftLogger:info("Cancelling job %s", jobId) @@ -923,71 +818,50 @@ return { elseif not jobLookup[jobId] then craftLogger:warn("Attempt to cancel non-existant job %s", jobId) end - for k, v in pairs(jobRoot or {}) do - cancelTask(v.taskId) - end + for k, v in pairs(jobRoot or {}) do cancelTask(v.taskId) end jobLookup[jobId] = nil saveTaskLookup() end - ---Get a list of all running jobIds - ---@return string[] local function listJobs() local runningJobs = {} - for k, v in pairs(jobLookup) do - runningJobs[#runningJobs + 1] = k - end + for k, v in pairs(jobLookup) do runningJobs[#runningJobs + 1] = k end return runningJobs end - ---Get a list of taskIds for a given job local function listTasks(job) local tasks = {} - for k, v in pairs(jobLookup[job]) do - tasks[#tasks + 1] = v.taskId - end + for k, v in pairs(jobLookup[job]) do tasks[#tasks + 1] = v.taskId end return tasks end local function tickCrafting() while true do local nodesTicked = false - for k, v in pairs(taskLookup) do - tickNode(v) - nodesTicked = true - end + for k, v in pairs(taskLookup) do tickNode(v) nodesTicked = true end if nodesTicked then craftLogger:debug("Nodes processed in crafting tick.") saveTaskLookup() end - -- Use default value if config is not properly initialized local sleepTime = 1 if config.crafting and config.crafting.tickInterval and type(config.crafting.tickInterval.value) == "number" then sleepTime = config.crafting.tickInterval.value - else - craftLogger:warn("Using default sleep time for crafting tick (config.crafting.tickInterval.value not available)") - end + else craftLogger:warn("Using default sleep time...") end os.sleep(sleepTime) end end local inventoryTransferLogger - if log then - inventoryTransferLogger = log.interface.logger("crafting", "inventory_transfer_listener") - end + if log then inventoryTransferLogger = log.interface.logger("crafting", "inventory_transfer_listener") end local function inventoryTransferListener() while true do local _, transferId = os.pullEvent("inventoryFinished") - ---@type CraftingNode local node = transferIdTaskLUT[transferId] if node then transferIdTaskLUT[transferId] = nil removeFromArray(node.transfers, transferId) if #node.transfers == 0 then - if log then - inventoryTransferLogger:debug("Node DONE, taskId:%s, jobId:%s", node.taskId, node.jobId) - end - -- all transfers finished + if log then inventoryTransferLogger:debug("Node DONE, taskId:%s, jobId:%s", node.taskId, node.jobId) end changeNodeState(node, "DONE") tickNode(node) end @@ -995,64 +869,19 @@ return { end end - - ---@param name string - ---@param count integer - ---@return JobId pendingJobId local function createCraftJob(name, count) common.enforceType(name, 1, "string") common.enforceType(count, 2, "integer") local jobId = id() - craftLogger:debug("New job. name:%s,count:%u,jobId:%s", name, count, jobId) craftLogger:info("Requested craft for %ux%s", count, name) local job = craft(name, count, jobId, true) - - ---@type CraftingNode - local root = { - jobId = jobId, - children = job, - type = "ROOT", - taskId = id(), - time = os.epoch("utc"), - } - + local root = { jobId = jobId, children = job, type = "ROOT", taskId = id(), time = os.epoch("utc") } pendingJobs[jobId] = root savePendingJobs() - return jobId end - ---@alias jobInfo {success: boolean, toCraft: table, toUse: table, missing: table|nil, jobId: JobId} - - ---Extract information from a job root - ---@param root CraftingNode - ---@return jobInfo - local function getJobInfo(root) - common.enforceType(root, 1, "table") - local ret = {} - ret.success = true - ret.toCraft = {} - ret.toUse = {} - ret.missing = {} - ret.jobId = root.jobId - runOnAll(root, function(node) - if node.type == "ITEM" then - ret.toUse[node.name] = (ret.toUse[node.name] or 0) + node.count - elseif node.type == "MISSING" then - ret.success = false - ret.missing[node.name] = (ret.missing[node.name] or 0) + node.count - elseif node.type ~= "ROOT" then - ret.toCraft[node.name] = (ret.toCraft[node.name] or 0) + (node.count or 0) - end - end) - return ret - end - - ---Request a craft job, returning info about it - ---@param name string - ---@param count integer - ---@return jobInfo local function requestCraft(name, count) common.enforceType(name, 1, "string") common.enforceType(count, 2, "integer") @@ -1061,26 +890,18 @@ return { local jobInfo = getJobInfo(pendingJobs[jobId]) if not jobInfo.success then craftLogger:debug("Craft job failed, cancelling") - -- cancelCraft(jobId) savePendingJobs() end return jobInfo end - ---Start a given job, if it's pending - ---@param jobId JobId - ---@return boolean success local function startCraft(jobId) common.enforceType(jobId, 1, "string") craftLogger:debug("Start craft called for job ID %s", jobId) local job = pendingJobs[jobId] - if not job then - return false - end + if not job then return false end local jobInfo = getJobInfo(job) - if not jobInfo.success then - return false -- cannot start unsuccessful job - end + if not jobInfo.success then return false end pendingJobs[jobId] = nil savePendingJobs() jobLookup[jobId] = {} @@ -1093,145 +914,82 @@ return { return true end - local cleanupLogger = setmetatable({}, { - __index = function() - return function() - end - end - }) - if log then - cleanupLogger = log.interface.logger("crafting", "cleanup") - end + local cleanupLogger = setmetatable({}, { __index = function() return function() end end }) + if log then cleanupLogger = log.interface.logger("crafting", "cleanup") end local function cleanupHandler() while true do - -- Use default value if config is not properly initialized local sleepTime = 60 if config.crafting and config.crafting.cleanupInterval and type(config.crafting.cleanupInterval.value) == "number" then sleepTime = config.crafting.cleanupInterval.value - else - cleanupLogger:warn("Using default sleep time for cleanup handler (config.crafting.cleanupInterval.value not available)") - end + else cleanupLogger:warn("Using default sleep time...") end os.sleep(sleepTime) cleanupLogger:debug("Performing cleanup!") for k, v in pairs(pendingJobs) do - if v.time + 200000 < os.epoch("utc") then - -- this job is too old - cleanupLogger:debug("Removing JobId %s from the pending queue, as it is too old.", v.jobId) - pendingJobs[k] = nil - end + if v.time + 200000 < os.epoch("utc") then pendingJobs[k] = nil end end for k, v in pairs(jobLookup) do - if #v == 0 then - cleanupLogger:debug("No tasks with JobId %s, removing from the lookkup.", k) - jobLookup[k] = nil - end + if #v == 0 then jobLookup[k] = nil end end for name, nodes in pairs(reservedItems) do for nodeId, count in pairs(nodes) do - if not taskLookup[nodeId] then - cleanupLogger:debug("Deallocating %u of item %s, Node %s is not in the task lookup.", count, name, nodeId) - deallocateItems(name, count, nodeId) - end + if not taskLookup[nodeId] then deallocateItems(name, count, nodeId) end end end end end - ---Auto-crafting/smelting functionality - local autoCraftLogger = setmetatable({}, { - __index = function() - return function() - end - end - }) - if log then - autoCraftLogger = log.interface.logger("crafting", "auto_craft") - end + local autoCraftLogger = setmetatable({}, { __index = function() return function() end end }) + if log then autoCraftLogger = log.interface.logger("crafting", "auto_craft") end - ---Check if an item should be auto-crafted based on current inventory count - ---@param name string - ---@return boolean shouldCraft - ---@return integer neededCount local function shouldAutoCraftItem(name) local rules = config.crafting and config.crafting.autoCraftingRules and config.crafting.autoCraftingRules.value or {} local rule = rules[name] if not rule or type(rule) ~= "table" or type(rule.threshold) ~= "number" then return false, 0 end - local currentCount = getCount(name) - if currentCount < rule.threshold then - return true, rule.threshold - currentCount - end + if currentCount < rule.threshold then return true, rule.threshold - currentCount end return false, 0 end - ---Check if an item should be auto-smelted based on current inventory count - ---@param name string - ---@return boolean shouldSmelt - ---@return integer neededCount local function shouldAutoSmeltItem(name) local rules = config.crafting and config.crafting.autoSmeltingRules and config.crafting.autoSmeltingRules.value or {} local rule = rules[name] if not rule or type(rule) ~= "table" or type(rule.threshold) ~= "number" or not rule.output then return false, 0 end - local currentCount = getCount(name) - if currentCount < rule.threshold then - return true, rule.threshold - currentCount - end + if currentCount < rule.threshold then return true, rule.threshold - currentCount end return false, 0 end - ---Check all items and trigger auto-crafting/smelting local function checkAutoCrafting() autoCraftLogger:debug("Checking for auto-crafting/smelting opportunities...") - - -- Check auto-crafting rules with proper null checks local autoCraftingRules = config.crafting and config.crafting.autoCraftingRules and config.crafting.autoCraftingRules.value or {} for item, rule in pairs(autoCraftingRules) do if type(rule) == "table" and type(rule.threshold) == "number" then local shouldCraft, neededCount = shouldAutoCraftItem(item) if shouldCraft then - autoCraftLogger:info("Auto-crafting %u %s(s) (threshold: %u)", neededCount, item, rule.threshold) local jobInfo = requestCraft(item, neededCount) - if jobInfo.success then - startCraft(jobInfo.jobId) - end + if jobInfo.success then startCraft(jobInfo.jobId) end end - else - autoCraftLogger:warn("Invalid auto-crafting rule for item %s", item) - end + else autoCraftLogger:warn("Invalid auto-crafting rule for item %s", item) end end - - -- Check auto-smelting rules with proper null checks local autoSmeltingRules = config.crafting and config.crafting.autoSmeltingRules and config.crafting.autoSmeltingRules.value or {} for item, rule in pairs(autoSmeltingRules) do if type(rule) == "table" and type(rule.threshold) == "number" and rule.output then local shouldSmelt, neededCount = shouldAutoSmeltItem(item) if shouldSmelt then - autoCraftLogger:info("Auto-smelting to produce %u %s(s) (threshold: %u)", neededCount, rule.output, rule.threshold) - -- This would need integration with furnace module - -- For now, we'll just request crafting of the output item local jobInfo = requestCraft(rule.output, neededCount) - if jobInfo.success then - startCraft(jobInfo.jobId) - end + if jobInfo.success then startCraft(jobInfo.jobId) end end - else - autoCraftLogger:warn("Invalid auto-smelting rule for item %s", item) - end + else autoCraftLogger:warn("Invalid auto-smelting rule for item %s", item) end end end - ---Auto-crafting/smelting checker loop local function autoCraftChecker() while true do - -- Use default value if config is not properly initialized local sleepTime = 10 if config.crafting and config.crafting.tickInterval and type(config.crafting.tickInterval.value) == "number" then sleepTime = config.crafting.tickInterval.value * 10 - else - autoCraftLogger:warn("Using default sleep time for auto-craft checker (config.crafting.tickInterval.value not available)") - end - sleep(sleepTime) -- Check every 10 crafting ticks (or default) + else autoCraftLogger:warn("Using default sleep time...") end + sleep(sleepTime) checkAutoCrafting() end end @@ -1242,16 +1000,11 @@ return { local e, transfer = os.pullEvent("file_transfer") for _, file in ipairs(transfer.getFiles()) do local contents = file.readAll() - local json = textutils.unserialiseJSON(contents) + local json = json.decode(contents) if type(json) == "table" then - if loadJson(json) then - print(("Successfully imported %s"):format(file.getName())) - else - print(("Failed to import %s, no handler for %s"):format(file.getName(), json.type)) - end - else - print(("Failed to import %s, not a JSON file"):format(file.getName())) - end + if loadJson(json) then print(("Successfully imported %s"):format(file.getName())) + else print(("Failed to import %s, no handler for %s"):format(file.getName(), json.type)) end + else print(("Failed to import %s, not a JSON file"):format(file.getName())) end file.close() end end @@ -1265,9 +1018,9 @@ return { loadReservedItems() loadCachedTags() loadPendingJobs() + loadAliases() -- Load the tags/aliases from recipes.json on start parallel.waitForAny(tickCrafting, inventoryTransferListener, jsonFileImport, cleanupHandler, autoCraftChecker) end, - requestCraft = requestCraft, startCraft = startCraft, loadJson = loadJson, @@ -1275,7 +1028,6 @@ return { cancelCraft = cancelCraft, listJobs = listJobs, listTasks = listTasks, - recipeInterface = { changeNodeState = changeNodeState, tickNode = tickNode, @@ -1297,4 +1049,4 @@ return { } } end -} +} \ No newline at end of file diff --git a/modules/disposal.lua b/modules/disposal.lua index 5cc6b75..87f6dab 100644 --- a/modules/disposal.lua +++ b/modules/disposal.lua @@ -75,18 +75,27 @@ return { ---@param count integer ---@return boolean success local function directDisposalHandler(name, count) - disposalLogger:info("Using direct disposal for %u %s(s)", count, name) + -- RE-VERIFY: Check current stock right before pushing + local currentCount = inventory.getCount(name) + local threshold = disposalThresholds[name] or 0 + + -- Ensure we don't try to move more than exists or dip below threshold + local safeCount = math.min(count, currentCount - threshold) + + if safeCount <= 0 then + disposalLogger:debug("Aborting disposal for %s: count changed during execution", name) + return false + end + + disposalLogger:info("Using direct disposal for %u %s(s)", safeCount, name) - -- Try to find a disposal inventory using the configured patterns local disposalInv = nil local patterns = config.disposal.disposalPatterns.value - disposalLogger:debug("Looking for disposal inventories with patterns: %s", table.concat(patterns, ", ")) for _, invName in pairs(getAttachedInventories()) do for _, pattern in ipairs(patterns) do if invName:find(pattern) then disposalInv = invName - disposalLogger:info("Found disposal inventory: %s (matched pattern: %s)", invName, pattern) break end end @@ -94,20 +103,18 @@ return { end if not disposalInv then - disposalLogger:warn("No disposal inventory found matching any patterns: %s", table.concat(patterns, ", ")) + disposalLogger:warn("No disposal inventory found matching patterns") return false end - -- Push items directly from abstract storage to the disposal inventory - -- storage is the abstractInvLib instance behind inventory.interface - local pushed = inventory.pushItems(false, disposalInv, name, count) + -- Use the safeCount instead of the original count + local pushed = inventory.pushItems(false, disposalInv, name, safeCount) if pushed > 0 then disposalLogger:info("Disposed %u %s(s) to %s", pushed, name, disposalInv) return true end - disposalLogger:warn("Direct disposal failed for %u %s(s) (nothing pushed)", count, name) return false end @@ -153,8 +160,11 @@ return { for item, threshold in pairs(disposalThresholds) do local shouldDispose, excessCount = shouldDisposeItem(item) if shouldDispose then - disposalLogger:info("Found %u excess %s(s) to dispose (threshold: %u)", excessCount, item, threshold) - requestDisposal(item, excessCount) + -- pcall prevents the module from crashing if the library throws an error + local ok, err = pcall(requestDisposal, item, excessCount) + if not ok then + disposalLogger:error("Error during disposal of %s: %s", item, err) + end end end end diff --git a/modules/furnace.lua b/modules/furnace.lua index 7a65f44..56d978f 100644 --- a/modules/furnace.lua +++ b/modules/furnace.lua @@ -1,247 +1,242 @@ --- Furnace crafting recipe handler -- 2 laptops from an AI cluster were sacrificed in fixing of this code +local json = require("lib/json") ---@class modules.furnace return { - id = "furnace", - version = "0.0.0", - config = { - fuels = { - type = "table", - description = "List of fuels table", - default = { ["minecraft:coal"] = { smelts = 8 }, ["minecraft:charcoal"] = { smelts = 8 } } - }, - checkFrequency = { - type = "number", - description = "Time in seconds to wait between checking each furnace", - default = 5 - } + id = "furnace", + version = "0.0.1", + config = { + fuels = { + type = "table", + description = "List of fuels table", + default = { ["minecraft:coal"] = { smelts = 8 }, ["minecraft:charcoal"] = { smelts = 8 } } }, - dependencies = { - logger = { min = "1.1", optional = true }, - crafting = { min = "1.4" }, - inventory = { min = "1.2" } - }, - ---@param loaded {crafting: modules.crafting, logger: modules.logger|nil, inventory: modules.inventory} - init = function(loaded, config) - local crafting = loaded.crafting.interface.recipeInterface - ---@type table output->input - local recipes = {} - - local bfile = require("bfile") - local structFurnaceRecipe = bfile.newStruct("furnace_recipe"):add("string", "output"):add("uint16", "input") - - local function updateCraftableList() - local list = {} - for k, v in pairs(recipes) do - table.insert(list, k) - end - crafting.addCraftableList("furnace", list) - end + checkFrequency = { + type = "number", + description = "Time in seconds to wait between checking each furnace", + default = 5 + } + }, + dependencies = { + logger = { min = "1.1", optional = true }, + crafting = { min = "1.4" }, + inventory = { min = "1.2" } + }, + ---@param loaded {crafting: modules.crafting, logger: modules.logger|nil, inventory: modules.inventory} + init = function(loaded, config) + local crafting = loaded.crafting.interface.recipeInterface + ---@type table output->input + local recipes = {} + + local function updateCraftableList() + local list = {} + for k, v in pairs(recipes) do + table.insert(list, k) + end + crafting.addCraftableList("furnace", list) + end - local function saveFurnaceRecipes() - local f = assert(fs.open("recipes/furnace_recipes.bin", "wb")) - f.write("FURNACE0") -- "versioned" - for k, v in pairs(recipes) do - structFurnaceRecipe:writeHandle(f, { - input = crafting.getOrCacheString(v), - output = k - }) + local function loadFurnaceRecipes() + local f = fs.open("recipes/recipes.json", "r") + if f then + local contents = f.readAll() or "{}" + f.close() + local decoded = json.decode(contents) + if type(decoded) == "table" and decoded.recipes and decoded.recipes.furnace then + for _, recipe in ipairs(decoded.recipes.furnace) do + if recipe.type == "minecraft:smelting" then + recipes[recipe.result] = recipe.ingredient end - f.close() - updateCraftableList() + end end + end + updateCraftableList() + end - local function loadFurnaceRecipes() - local f = fs.open("recipes/furnace_recipes.bin", "rb") - if not f then - recipes = {} - return - end - assert(f.read(8) == "FURNACE0", "Invalid furnace recipe file.") - while f.read(1) do - f.seek(nil, -1) - local recipeInfo = structFurnaceRecipe:readHandle(f) - _, recipes[recipeInfo.output] = crafting.getBestItem(recipeInfo.input) - end - f.close() - updateCraftableList() + local function jsonTypeHandler(json) + local input = json.ingredient.item + local output = json.result + recipes[output] = input + updateCraftableList() + end + crafting.addJsonTypeHandler("minecraft:smelting", jsonTypeHandler) + + ---Get a fuel for an item, and how many items is optimal if toSmelt is provided + ---@param toSmelt integer? ensure there's enough of this fuel to smelt this many items + ---@return string fuel + ---@return integer multiple + ---@return integer optimal + local function getFuel(toSmelt) + ---@type {diff:integer,fuel:string,optimal:integer,multiple:integer}[] + local fuelDiffs = {} + for k, v in pairs(config.furnace.fuels.value) do + -- measure the difference in terms of + -- how far off the closest multiple of the fuel is from the desired amount + local multiple = v.smelts + local optimal = math.ceil((toSmelt or 0) / multiple) * multiple + if loaded.inventory.interface.getCount(k) >= optimal / multiple then + fuelDiffs[#fuelDiffs + 1] = { + diff = optimal - toSmelt, + optimal = optimal, + fuel = k, + multiple = multiple + } end + end + table.sort(fuelDiffs, function(a, b) + return a.diff < b.diff + end) + -- Fix: Handle case where no fuel is found in inventory + if #fuelDiffs == 0 then + return nil, nil, toSmelt + end + -- TODO: Replace this hack with a proper optimizer that respects what is in storage. + return fuelDiffs[1].fuel, fuelDiffs[1].multiple, toSmelt -- fuelDiffs[1].optimal + end - local function jsonTypeHandler(json) - local input = json.ingredient.item - local output = json.result - recipes[output] = input - saveFurnaceRecipes() - end - crafting.addJsonTypeHandler("minecraft:smelting", jsonTypeHandler) - - ---Get a fuel for an item, and how many items is optimal if toSmelt is provided - ---@param toSmelt integer? ensure there's enough of this fuel to smelt this many items - ---@return string fuel - ---@return integer multiple - ---@return integer optimal - local function getFuel(toSmelt) - ---@type {diff:integer,fuel:string,optimal:integer,multiple:integer}[] - local fuelDiffs = {} - for k, v in pairs(config.furnace.fuels.value) do - -- measure the difference in terms of - -- how far off the closest multiple of the fuel is from the desired amount - local multiple = v.smelts - local optimal = math.ceil((toSmelt or 0) / multiple) * multiple - if loaded.inventory.interface.getCount(k) >= optimal / multiple then - fuelDiffs[#fuelDiffs + 1] = { - diff = optimal - toSmelt, - optimal = optimal, - fuel = k, - multiple = multiple - } - end - end - table.sort(fuelDiffs, function(a, b) - return a.diff < b.diff - end) - -- TODO: Replace this hack with a proper optimizer that respects what is in storage. - return fuelDiffs[1].fuel, fuelDiffs[1].multiple, toSmelt -- fuelDiffs[1].optimal - end + ---@class FurnaceNode : CraftingNode + ---@field type "furnace" + ---@field done integer count smelted + ---@field multiple integer fuel multiple + ---@field fuel string + ---@field ingredient string + ---@field smelting table amount to smelt in each furnace + ---@field fuelNeeded table amount of fuel each furnace requires + ---@field hasBucket boolean + + ---@type string[] + local attachedFurnaces = {} + for _, v in ipairs(peripheral.getNames()) do + if peripheral.hasType(v, "minecraft:furnace") then + attachedFurnaces[#attachedFurnaces + 1] = v + end + end - ---@class FurnaceNode : CraftingNode - ---@field type "furnace" - ---@field done integer count smelted - ---@field multiple integer fuel multiple - ---@field fuel string - ---@field ingredient string - ---@field smelting table amount to smelt in each furnace - ---@field fuelNeeded table amount of fuel each furnace requires - ---@field hasBucket boolean - - ---@type string[] - local attachedFurnaces = {} - for _, v in ipairs(peripheral.getNames()) do - if peripheral.hasType(v, "minecraft:furnace") then - attachedFurnaces[#attachedFurnaces + 1] = v - end - end + ---@param node FurnaceNode + ---@param name string + ---@param count integer + ---@param requestChain table Do not modify, just pass through to calls to craft + ---@return boolean + local function craftType(node, name, count, requestChain) + local requires = recipes[name] + if not requires then return false end + + local fuel, multiple = getFuel(count) + if not fuel then + -- Optional: Log that no fuel was found + return false + end + + node.type = "furnace" + node.count = count + node.done = 0 + node.ingredient = requires + node.fuel = fuel + node.multiple = multiple + node.smelting = {} + node.fuelNeeded = {} + + node.children = crafting.craft(requires, count, node.jobId, nil, requestChain) + node.children = crafting.craft(fuel, math.ceil(count / multiple), node.jobId, false, requestChain) + + return true + end - ---@param node FurnaceNode - ---@param name string - ---@param count integer - ---@param requestChain table Do not modify, just pass through to calls to craft - ---@return boolean - local function craftType(node, name, count, requestChain) - local requires = recipes[name] - if not requires then return false end - - local fuel, multiple = getFuel(count) - node.type = "furnace" - node.count = count - node.done = 0 - node.ingredient = requires - node.fuel = fuel - node.multiple = multiple - node.smelting = {} - node.fuelNeeded = {} - - node.children = crafting.craft(requires, count, node.jobId, nil, requestChain) - node.children = crafting.craft(fuel, math.ceil(count / multiple), node.jobId, false, requestChain) - - return true + crafting.addCraftType("furnace", craftType) + + + ---@type table + local smelting = {} + + ---@param node FurnaceNode + local function readyHandler(node) + local usedFurances = {} + local remaining = node.count + if #attachedFurnaces > 0 then + local furnaceIndex = 1 + while remaining > 0 and furnaceIndex <= #attachedFurnaces do + local furnace = attachedFurnaces[furnaceIndex] + usedFurances[furnaceIndex] = true + local toAssign = math.min(node.multiple, remaining) + local fuelNeeded = math.ceil(toAssign / node.multiple) + local absFurnace = require("abstractInvLib")({ furnace }) + local fmoved = loaded.inventory.interface.pushItems(false, absFurnace, node.fuel, fuelNeeded, 2) + local moved = loaded.inventory.interface.pushItems(false, absFurnace, node.ingredient, toAssign, 1) + node.smelting[furnace] = (node.smelting[furnace] or 0) + toAssign - moved + node.fuelNeeded[furnace] = (node.fuelNeeded[furnace] or 0) + fuelNeeded - fmoved + node.hasBucket = true + remaining = remaining - toAssign + furnaceIndex = furnaceIndex + 1 end - - crafting.addCraftType("furnace", craftType) - - - ---@type table - local smelting = {} - - ---@param node FurnaceNode - local function readyHandler(node) - local usedFurances = {} - local remaining = node.count - if #attachedFurnaces > 0 then - local furnaceIndex = 1 - while remaining > 0 and furnaceIndex <= #attachedFurnaces do - local furnace = attachedFurnaces[furnaceIndex] - usedFurances[furnaceIndex] = true - local toAssign = math.min(node.multiple, remaining) - local fuelNeeded = math.ceil(toAssign / node.multiple) - local absFurnace = require("abstractInvLib")({ furnace }) - local fmoved = loaded.inventory.interface.pushItems(false, absFurnace, node.fuel, fuelNeeded, 2) - local moved = loaded.inventory.interface.pushItems(false, absFurnace, node.ingredient, toAssign, 1) - node.smelting[furnace] = (node.smelting[furnace] or 0) + toAssign - moved - node.fuelNeeded[furnace] = (node.fuelNeeded[furnace] or 0) + fuelNeeded - fmoved - node.hasBucket = true - remaining = remaining - toAssign - furnaceIndex = furnaceIndex + 1 - end - local ordered = {} - for k, v in pairs(usedFurances) do - ordered[#ordered + 1] = k - end - table.sort(ordered) - for i = #ordered, 1, -1 do - table.remove(attachedFurnaces, ordered[i]) - end - crafting.changeNodeState(node, "CRAFTING") - smelting[node] = node - end + local ordered = {} + for k, v in pairs(usedFurances) do + ordered[#ordered + 1] = k end - crafting.addReadyHandler("furnace", readyHandler) + table.sort(ordered) + for i = #ordered, 1, -1 do + table.remove(attachedFurnaces, ordered[i]) + end + crafting.changeNodeState(node, "CRAFTING") + smelting[node] = node + end + end + crafting.addReadyHandler("furnace", readyHandler) - local function craftingHandler(node) + local function craftingHandler(node) + end + crafting.addCraftingHandler("furnace", craftingHandler) + + ---@param node FurnaceNode + local function checkNodeFurnaces(node) + for furnace, remaining in pairs(node.smelting) do + local absFurnace = require("abstractInvLib")({ furnace }) + local crafted = loaded.inventory.interface.pullItems(false, absFurnace, 3) + node.done = node.done + crafted + if config.furnace.fuels.value[node.fuel].bucket and node.hasBucket then + local i = loaded.inventory.interface.pullItems(false, absFurnace, 2) + if i > 0 then + node.hasBucket = false + end end - crafting.addCraftingHandler("furnace", craftingHandler) - - ---@param node FurnaceNode - local function checkNodeFurnaces(node) - for furnace, remaining in pairs(node.smelting) do - local absFurnace = require("abstractInvLib")({ furnace }) - local crafted = loaded.inventory.interface.pullItems(false, absFurnace, 3) - node.done = node.done + crafted - if config.furnace.fuels.value[node.fuel].bucket and node.hasBucket then - local i = loaded.inventory.interface.pullItems(false, absFurnace, 2) - if i > 0 then - node.hasBucket = false - end - end - if remaining > 0 then - local amount = loaded.inventory.interface.pushItems(false, absFurnace, node.ingredient, remaining, 1) - node.smelting[furnace] = remaining - amount - end - if node.fuelNeeded[furnace] > 0 then - local famount = loaded.inventory.interface.pushItems(false, absFurnace, node.fuel, - node.fuelNeeded[furnace], 2) - if famount == 0 and config.furnace.fuels.value[node.fuel].bucket then - -- remove the bucket - loaded.inventory.interface.pullItems(true, absFurnace, 2) - end - node.fuelNeeded[furnace] = node.fuelNeeded[furnace] - famount - end - end - if node.done == node.count then - crafting.changeNodeState(node, "DONE") - for furnace in pairs(node.smelting) do - table.insert(attachedFurnaces, furnace) - end - smelting[node] = nil - end - + if remaining > 0 then + local amount = loaded.inventory.interface.pushItems(false, absFurnace, node.ingredient, remaining, 1) + node.smelting[furnace] = remaining - amount end - - local function furnaceChecker() - while true do - sleep(config.furnace.checkFrequency.value) - for node in pairs(smelting) do - checkNodeFurnaces(node) - end - end + if node.fuelNeeded[furnace] > 0 then + local famount = loaded.inventory.interface.pushItems(false, absFurnace, node.fuel, + node.fuelNeeded[furnace], 2) + if famount == 0 and config.furnace.fuels.value[node.fuel].bucket then + -- remove the bucket + loaded.inventory.interface.pullItems(true, absFurnace, 2) + end + node.fuelNeeded[furnace] = node.fuelNeeded[furnace] - famount end + end + if node.done == node.count then + crafting.changeNodeState(node, "DONE") + for furnace in pairs(node.smelting) do + table.insert(attachedFurnaces, furnace) + end + smelting[node] = nil + end - return { - start = function() - loadFurnaceRecipes() - furnaceChecker() - end - } end + + local function furnaceChecker() + while true do + sleep(config.furnace.checkFrequency.value) + for node in pairs(smelting) do + checkNodeFurnaces(node) + end + end + end + + return { + start = function() + loadFurnaceRecipes() + furnaceChecker() + end + } + end } \ No newline at end of file diff --git a/modules/grid.lua b/modules/grid.lua index 3159d94..ec9353d 100644 --- a/modules/grid.lua +++ b/modules/grid.lua @@ -1,9 +1,11 @@ --- Grid crafting recipe handler local common = require("common") +local json = require("lib/json") + ---@class modules.grid return { id = "grid", - version = "1.1.7", + version = "1.4.5", config = { port = { type = "number", @@ -18,7 +20,7 @@ return { }, dependencies = { logger = { min = "1.1", optional = true }, - crafting = { min = "1.1" }, + crafting = { min = "1.4" }, interface = { min = "1.4" } }, ---@param loaded {crafting: modules.crafting, logger: modules.logger|nil} @@ -34,80 +36,22 @@ return { ---@field name string ---@field requires table - ---@type table + ---@type table local gridRecipes = {} - ---This node represents a grid crafting recipe - ---@class GridNode : CraftingNode - ---@field type "CG" - ---@field toCraft integer - ---@field plan table - local crafting = loaded.crafting.interface.recipeInterface ---Cache information about a GridRecipe that can be inferred from stored data ---@param recipe GridRecipe local function cacheAdditional(recipe) recipe.requires = {} - for k, v in ipairs(recipe) do - if recipe.shaped then - for row, i in ipairs(v) do - local old = recipe.requires[i] - recipe.requires[i] = (old or 0) + 1 - end - else - local i = recipe.requires[v] - recipe.requires[v] = (i or 0) + 1 - end - end - end - - local bfile = require("bfile") - bfile.newStruct("grid_recipe_shaped"):add("uint8", "produces"):add("string", "name"):add("uint8", "width"):add( - "uint8", "height") - bfile.newStruct("grid_recipe_unshaped"):add("uint8", "produces"):add("string", "name"):add("uint8", "length") - bfile.addType("grid_recipe_part", function(f) - local ch = f.read(1) - if ch == "S" then - return bfile.getReader("uint16")(f) - elseif ch == "A" then - return bfile.getReader("uint16[uint8]")(f) - end - error("Grid recipe parse error") - end, function(f, value) - if type(value) == "table" then - f.write("A") - bfile.getWriter("uint16[uint8]")(f, value) - return - end - f.write("S") - bfile.getWriter("uint16")(f, value) - end) - bfile.newStruct("grid_recipe"):conditional("^", function(ch) - if ch == "S" then - return "grid_recipe_shaped" - elseif ch == "U" then - return "grid_recipe_unshaped" - end - error("Grid recipe parse error") - end, function(value) - if value.shaped then - return "S", "grid_recipe_shaped" - end - return "U", "grid_recipe_unshaped" - end) - - ---Save the grid recipes to a file - local function saveGridRecipes() - local f = assert(fs.open("recipes/grid_recipes.bin", "wb")) - f.write("GRECIPES") - for k, v in pairs(gridRecipes) do - bfile.getStruct("grid_recipe"):writeHandle(f, v) - for _, i in ipairs(v.recipe) do - bfile.getWriter("grid_recipe_part")(f, i) + for k, v in ipairs(recipe.recipe) do + -- v can be an integer (ItemIndex) or a table (array of ItemIndex options) + if type(v) == "number" and v ~= 0 then + local key = tostring(v) + recipe.requires[key] = (recipe.requires[key] or 0) + 1 end end - f.close() end local function updateCraftableList() @@ -119,10 +63,6 @@ return { end ---Add a grid recipe manually - ---@param name string - ---@param produces integer - ---@param recipe string[] table of ITEM NAMES, this does NOT support tags. Shaped recipes are assumed 3x3. Nil is assumed empty space. - ---@param shaped boolean local function addGridRecipe(name, produces, recipe, shaped) common.enforceType(name, 1, "string") common.enforceType(produces, 2, "integer") @@ -146,49 +86,121 @@ return { table.insert(gridRecipe.recipe, crafting.getOrCacheString(v)) end end - gridRecipes[name] = gridRecipe cacheAdditional(gridRecipe) - saveGridRecipes() + + -- Store as list to support multiple recipes (e.g. Stick from Planks OR Bamboo) + if not gridRecipes[name] then gridRecipes[name] = {} end + table.insert(gridRecipes[name], gridRecipe) + updateCraftableList() end ---Remove a grid recipe - ---@param name string - ---@return boolean success local function removeGridRecipe(name) common.enforceType(name, 1, "string") if gridRecipes[name] then gridRecipes[name] = nil return true end - saveGridRecipes() + updateCraftableList() return false end ---Load the grid recipes from a file local function loadGridRecipes() - local f = fs.open("recipes/grid_recipes.bin", "rb") - if not f then - gridRecipes = {} - updateCraftableList() - return - end - assert(f.read(8) == "GRECIPES", "Invalid grid recipe file.") - local shapeIndicator = f.read(1) - while shapeIndicator do - f.seek(nil, -1) - local recipe = bfile.getStruct("grid_recipe"):readHandle(f) - recipe.shaped = not recipe.length - recipe.recipe = {} - for i = 1, recipe.length or (recipe.width * recipe.height) do - recipe.recipe[i] = bfile.getReader("grid_recipe_part")(f) + if not fs.exists("recipes/recipes.json") then return end + + local f = fs.open("recipes/recipes.json", "r") + if f then + local contents = f.readAll() or "{}" + f.close() + + local status, decoded = pcall(json.decode, contents) + if not status then + print("Error decoding recipes.json: " .. tostring(decoded)) + return + end + + if type(decoded) == "table" and decoded.recipes and decoded.recipes.crafting then + + local function parseItemString(str) + local name = str + local isTag = false + if type(name) == "string" and name:sub(1, 1) == "#" then + name = name:sub(2) + isTag = true + end + return crafting.getOrCacheString(name, isTag) + end + + local function parseIngredient(raw) + if type(raw) == "table" then + local options = {} + for _, v in pairs(raw) do + table.insert(options, parseItemString(v)) + end + return options + else + return parseItemString(raw) + end + end + + for _, recipe in ipairs(decoded.recipes.crafting) do + if (recipe.type == "minecraft:crafting_shaped" or recipe.type == "minecraft:crafting_shapeless") + and recipe.result and recipe.result.item then + + local recipeName = recipe.result.item + local count = recipe.result.count or 1 + + local gridRecipe = {} + gridRecipe.shaped = (recipe.type == "minecraft:crafting_shaped") + gridRecipe.produces = count + gridRecipe.name = recipeName + gridRecipe.recipe = {} + + local valid = true + + if gridRecipe.shaped then + if not recipe.pattern or type(recipe.key) ~= "table" then + valid = false + else + gridRecipe.width = recipe.pattern[1]:len() + gridRecipe.height = #recipe.pattern + + local keys = { [" "] = 0 } + for char, value in pairs(recipe.key) do + keys[char] = parseIngredient(value) + end + + for row, rowString in ipairs(recipe.pattern) do + for i = 1, rowString:len() do + local char = rowString:sub(i, i) + table.insert(gridRecipe.recipe, keys[char] or 0) + end + end + end + else + if not recipe.ingredients then + valid = false + else + gridRecipe.length = #recipe.ingredients + for _, ingredient in ipairs(recipe.ingredients) do + table.insert(gridRecipe.recipe, parseIngredient(ingredient)) + end + end + end + + if valid then + cacheAdditional(gridRecipe) + -- Append to list instead of overwriting + if not gridRecipes[recipeName] then gridRecipes[recipeName] = {} end + table.insert(gridRecipes[recipeName], gridRecipe) + end + end + end end - gridRecipes[recipe.name] = recipe - cacheAdditional(recipe) - shapeIndicator = f.read(1) end updateCraftableList() - f.close() end @@ -197,7 +209,6 @@ return { ---@field task nil|GridNode ---@field state "READY" | "ERROR" | "BUSY" | "CRAFTING" | "DONE" - local attachedTurtles = {} local modem = assert(peripheral.wrap(config.modem.modem.value), "Bad modem specified.") modem.open(config.grid.port.value) @@ -319,50 +330,102 @@ return { end end - ---comment ---@param node GridRecipe ---@param name string ---@param count integer ---@param requestChain table Do not modify, just pass through to calls to craft ---@return boolean local function craftType(node, name, count, requestChain) - -- attempt to craft this - local recipe = gridRecipes[name] - if not recipe then - return false + local recipes = gridRecipes[name] + if not recipes then return false end + + -- Helper to verify if a recipe plan is valid using simulation + local function tryRecipe(recipe) + local toCraft = math.ceil(count / recipe.produces) + local plan = {} + + -- 1. Resolve ingredients (check Tags/Lists) + for k, v in pairs(recipe.recipe) do + if v ~= 0 then + local success, itemName = crafting.getBestItem(v) + plan[k] = {} + if success then + plan[k].name = itemName + plan[k].max = crafting.getStackSize(plan[k].name) + toCraft = math.min(toCraft, plan[k].max) + else + -- If we can't even resolve the item (e.g. tag empty), fail immediately + return false + end + end + end + + -- 2. Simulate the full craft to ensure deep dependencies exist + -- (e.g. check if we have Logs for the Planks for the Sticks) + local simChain = { isSimulation = true } + for k,v in pairs(requestChain) do simChain[k] = v end + + for k, v in pairs(plan) do + -- Simulate asking for 'toCraft' amount of this ingredient + -- We multiply by 1 because getBestItem resolved a single unit, but here we need 'toCraft' + -- Actually, v matches the slot. If multiple slots use same item, we need total. + -- But simplistic check: can we craft ONE set of ingredients? + local nodes = crafting.craft(v.name, toCraft, node.jobId, nil, simChain) + + -- If the simulation returns ANY missing node, this recipe path is invalid + for _, n in ipairs(nodes) do + if n.type == "MISSING" then return false end + end + end + + return true, plan, toCraft end - node.type = "grid" - -- find out how many times we need to craft this recipe - local toCraft = math.ceil(count / recipe.produces) - -- this is the minimum amount we'd need to craft to produce enough of the requested item - -- now we need to find the smallest stack-size of the ingredients - ---@type table - local plan = {} - for k, v in pairs(recipe.recipe) do - if v ~= 0 then - local success, itemName = crafting.getBestItem(v) - plan[k] = {} + + -- Iterate all recipes for this item (e.g. Sticks from Planks, Sticks from Bamboo) + local bestPlan, bestToCraft, bestRecipe + + for _, recipe in ipairs(recipes) do + local success, plan, toCraft = tryRecipe(recipe) if success then - plan[k].name = itemName - -- We can only craft as many items as the smallest stack size allows us to - plan[k].max = crafting.getStackSize(plan[k].name) - toCraft = math.min(toCraft, plan[k].max) - else - plan[k].tag = itemName + bestPlan = plan + bestToCraft = toCraft + bestRecipe = recipe + break -- Found a working recipe! end - end end - node.plan = plan - node.toCraft = toCraft - node.width = recipe.width - node.height = recipe.height + + -- If no recipe worked, fallback to the first one (so the user sees "Missing: Bamboo" instead of nothing) + if not bestRecipe then + bestRecipe = recipes[1] + local toCraft = math.ceil(count / bestRecipe.produces) + bestPlan = {} + bestToCraft = toCraft + for k, v in pairs(bestRecipe.recipe) do + if v ~= 0 then + local success, itemName = crafting.getBestItem(v) + bestPlan[k] = {} + if success then + bestPlan[k].name = itemName + bestPlan[k].max = crafting.getStackSize(bestPlan[k].name) + bestToCraft = math.min(bestToCraft, bestPlan[k].max) + else + bestPlan[k].tag = itemName + end + end + end + end + + node.plan = bestPlan + node.toCraft = bestToCraft + node.width = bestRecipe.width + node.height = bestRecipe.height node.children = {} node.name = name + node.type = "grid" -- Re-added missing type assignment local requiredItemCounts = {} - for k, v in pairs(plan) do - v.count = toCraft + for k, v in pairs(bestPlan) do + v.count = bestToCraft if v.tag then - -- this is a tag we could not resolve, so make a placeholder node table.insert(node.children, crafting.createMissingNode(v.tag, v.count, node.jobId)) else requiredItemCounts[v.name] = (requiredItemCounts[v.name] or 0) + v.count @@ -374,13 +437,12 @@ return { for k, v in pairs(node.children) do v.parent = node end - node.count = toCraft * recipe.produces + node.count = bestToCraft * bestRecipe.produces return true end crafting.addCraftType("grid", craftType) local function readyHandler(node) - -- check if there is a turtle available to craft this recipe local availableTurtle for k, v in pairs(attachedTurtles) do if v.state == "READY" then @@ -412,72 +474,10 @@ return { end crafting.addReadyHandler("grid", readyHandler) - local function jsonTypeHandler(json) - local recipe = {} - local recipeName - recipe.shaped = json.type == "minecraft:crafting_shaped" - recipeName = json.result.item - recipe.produces = json.result.count or 1 - if json.type == "minecraft:crafting_shapeless" then - recipe.recipe = {} - recipe.length = #json.ingredients - for k, v in pairs(json.ingredients) do - local name = v.item or v.tag - local isTag = not not v.tag - if not (name) then - local array = {} - for _, opt in pairs(v) do - name = opt.item or opt.tag - table.insert(array, crafting.getOrCacheString(name, isTag)) - end - table.insert(recipe.recipe, array) - else - table.insert(recipe.recipe, crafting.getOrCacheString(name, isTag)) - end - end - elseif json.type == "minecraft:crafting_shaped" then - ---@type table - local keys = { [" "] = 0 } - for k, v in pairs(json.key) do - local name = v.item or v.tag - local isTag = not not v.tag - if not (name) then - local array = {} - for _, opt in pairs(v) do - name = opt.item or opt.tag - table.insert(array, crafting.getOrCacheString(name, isTag)) - end - keys[k] = array - else - keys[k] = crafting.getOrCacheString(name, isTag) - end - end - recipe.recipe = {} - recipe.width = json.pattern[1]:len() - recipe.height = #json.pattern - for row, rowString in ipairs(json.pattern) do - for i = 1, rowString:len() do - table.insert(recipe.recipe, keys[rowString:sub(i, i)]) - end - end - end - cacheAdditional(recipe) - recipe.name = recipeName - gridRecipes[recipeName] = recipe - saveGridRecipes() - end - crafting.addJsonTypeHandler("minecraft:crafting_shaped", jsonTypeHandler) - crafting.addJsonTypeHandler("minecraft:crafting_shapeless", jsonTypeHandler) - local function craftingHandler(node) - -- -- Check if the turtle's state is DONE - -- local turtle = attached_turtles[node.turtle] - -- if turtle.state == "DONE" then - -- turtle_crafting_done(turtle) - -- end end crafting.addCraftingHandler("grid", craftingHandler) - ---@class modules.grid.interface + return { start = function() loadGridRecipes() @@ -487,4 +487,4 @@ return { removeGridRecipe = removeGridRecipe, } end -} +} \ No newline at end of file diff --git a/recipes/furnace_recipes.bin b/recipes/furnace_recipes.bin deleted file mode 100644 index c7fab00..0000000 Binary files a/recipes/furnace_recipes.bin and /dev/null differ diff --git a/recipes/grid_recipes.bin b/recipes/grid_recipes.bin deleted file mode 100644 index 8325282..0000000 Binary files a/recipes/grid_recipes.bin and /dev/null differ diff --git a/recipes/item_lookup.bin b/recipes/item_lookup.bin deleted file mode 100644 index d141e60..0000000 Binary files a/recipes/item_lookup.bin and /dev/null differ diff --git a/recipes/recipes.json b/recipes/recipes.json new file mode 100644 index 0000000..aa9a094 --- /dev/null +++ b/recipes/recipes.json @@ -0,0 +1,18940 @@ +{ + "recipes": { + "furnace": [ + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_gold_ore", + "result": "minecraft:gold_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:porkchop", + "result": "minecraft:cooked_porkchop", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:emerald_ore", + "result": "minecraft:emerald", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:raw_iron", + "result": "minecraft:iron_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:clay_ball", + "result": "minecraft:brick", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:nether_gold_ore", + "result": "minecraft:gold_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:yellow_terracotta", + "result": "minecraft:yellow_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:black_terracotta", + "result": "minecraft:black_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:gold_ore", + "result": "minecraft:gold_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_iron_ore", + "result": "minecraft:iron_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:golden_pickaxe", + "result": "minecraft:gold_nugget", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:iron_pickaxe", + "result": "minecraft:iron_nugget", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:emerald_ore", + "result": "minecraft:emerald", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:green_terracotta", + "result": "minecraft:green_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:lapis_ore", + "result": "minecraft:lapis_lazuli", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_diamond_ore", + "result": "minecraft:diamond", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:pink_terracotta", + "result": "minecraft:pink_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:blue_terracotta", + "result": "minecraft:blue_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:red_terracotta", + "result": "minecraft:red_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:nether_quartz_ore", + "result": "minecraft:quartz", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:white_terracotta", + "result": "minecraft:white_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:cod", + "result": "minecraft:cooked_cod", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_redstone_ore", + "result": "minecraft:redstone", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:beef", + "result": "minecraft:cooked_beef", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:cobblestone", + "result": "minecraft:stone", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:quartz_block", + "result": "minecraft:smooth_quartz", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:polished_blackstone_bricks", + "result": "minecraft:cracked_polished_blackstone_bricks", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_coal_ore", + "result": "minecraft:coal", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:cobbled_deepslate", + "result": "minecraft:deepslate", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_redstone_ore", + "result": "minecraft:redstone", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:potato", + "result": "minecraft:baked_potato", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:gold_ore", + "result": "minecraft:gold_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:brown_terracotta", + "result": "minecraft:brown_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:wet_sponge", + "result": "minecraft:sponge", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:chicken", + "result": "minecraft:cooked_chicken", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "#minecraft:logs_that_burn", + "result": "minecraft:charcoal", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:copper_ore", + "result": "minecraft:copper_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:copper_pickaxe", + "result": "minecraft:copper_nugget", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:iron_ore", + "result": "minecraft:iron_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_iron_ore", + "result": "minecraft:iron_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_lapis_ore", + "result": "minecraft:lapis_lazuli", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:diamond_ore", + "result": "minecraft:diamond", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:redstone_ore", + "result": "minecraft:redstone", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:diamond_ore", + "result": "minecraft:diamond", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:light_gray_terracotta", + "result": "minecraft:light_gray_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:salmon", + "result": "minecraft:cooked_salmon", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:raw_iron", + "result": "minecraft:iron_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:nether_bricks", + "result": "minecraft:cracked_nether_bricks", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:gray_terracotta", + "result": "minecraft:gray_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:raw_gold", + "result": "minecraft:gold_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:mutton", + "result": "minecraft:cooked_mutton", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:iron_pickaxe", + "result": "minecraft:iron_nugget", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_emerald_ore", + "result": "minecraft:emerald", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:netherrack", + "result": "minecraft:nether_brick", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:golden_pickaxe", + "result": "minecraft:gold_nugget", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:lapis_ore", + "result": "minecraft:lapis_lazuli", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:magenta_terracotta", + "result": "minecraft:magenta_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:kelp", + "result": "minecraft:dried_kelp", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:raw_gold", + "result": "minecraft:gold_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:chorus_fruit", + "result": "minecraft:popped_chorus_fruit", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:ancient_debris", + "result": "minecraft:netherite_scrap", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_copper_ore", + "result": "minecraft:copper_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_emerald_ore", + "result": "minecraft:emerald", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "#minecraft:smelts_to_glass", + "result": "minecraft:glass", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:raw_copper", + "result": "minecraft:copper_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:resin_clump", + "result": "minecraft:resin_brick", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:copper_ore", + "result": "minecraft:copper_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:cactus", + "result": "minecraft:green_dye", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:iron_ore", + "result": "minecraft:iron_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:purple_terracotta", + "result": "minecraft:purple_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_copper_ore", + "result": "minecraft:copper_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:raw_copper", + "result": "minecraft:copper_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "#minecraft:leaves", + "result": "minecraft:leaf_litter", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_diamond_ore", + "result": "minecraft:diamond", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_coal_ore", + "result": "minecraft:coal", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:orange_terracotta", + "result": "minecraft:orange_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:copper_pickaxe", + "result": "minecraft:copper_nugget", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:sandstone", + "result": "minecraft:smooth_sandstone", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_gold_ore", + "result": "minecraft:gold_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:stone_bricks", + "result": "minecraft:cracked_stone_bricks", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:coal_ore", + "result": "minecraft:coal", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:redstone_ore", + "result": "minecraft:redstone", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:light_blue_terracotta", + "result": "minecraft:light_blue_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:cyan_terracotta", + "result": "minecraft:cyan_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:sea_pickle", + "result": "minecraft:lime_dye", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:coal_ore", + "result": "minecraft:coal", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:rabbit", + "result": "minecraft:cooked_rabbit", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_tiles", + "result": "minecraft:cracked_deepslate_tiles", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:red_sandstone", + "result": "minecraft:smooth_red_sandstone", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:clay", + "result": "minecraft:terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:ancient_debris", + "result": "minecraft:netherite_scrap", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_bricks", + "result": "minecraft:cracked_deepslate_bricks", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:nether_quartz_ore", + "result": "minecraft:quartz", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:basalt", + "result": "minecraft:smooth_basalt", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:lime_terracotta", + "result": "minecraft:lime_glazed_terracotta", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:deepslate_lapis_ore", + "result": "minecraft:lapis_lazuli", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:nether_gold_ore", + "result": "minecraft:gold_ingot", + "experience": 0.7, + "cookingtime": 200 + }, + { + "type": "minecraft:smelting", + "ingredient": "minecraft:stone", + "result": "minecraft:smooth_stone", + "experience": 0.7, + "cookingtime": 200 + } + ], + "crafting": [ + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_deepslate", + "count": 4 + }, + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": "minecraft:cobbled_deepslate" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cobbled_deepslate_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:cobbled_deepslate" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diorite_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:diorite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_oxidized_chiseled_copper", + "count": 1 + }, + "pattern": [ + " M ", + " M " + ], + "key": { + "M": "minecraft:waxed_oxidized_cut_copper_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_andesite", + "count": 4 + }, + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": "minecraft:andesite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crafter", + "count": 1 + }, + "pattern": [ + "###", + "#C#", + "RDR" + ], + "key": { + "#": "minecraft:iron_ingot", + "C": "minecraft:crafting_table", + "D": "minecraft:dropper", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:white_wool", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:string" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:red_stained_glass" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chiseled_deepslate", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:cobbled_deepslate_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:paper", + "count": 3 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:sugar_cane" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stripped_mangrove_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:stripped_mangrove_log" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:black_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:black_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cyan_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:cyan_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:magenta_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:magenta_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:white_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:white_stained_glass" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:blue_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:blue_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:beacon", + "count": 1 + }, + "pattern": [ + "GGG", + "GSG", + "OOO" + ], + "key": { + "G": "minecraft:glass", + "O": "minecraft:obsidian", + "S": "minecraft:nether_star" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chiseled_polished_blackstone", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:polished_blackstone_slab" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:orange_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:orange_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diamond_axe", + "count": 1 + }, + "pattern": [ + "XX", + "X#", + " #" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:diamond_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:glowstone", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:glowstone_dust" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spruce_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:spruce_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:orange_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:orange_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:golden_hoe", + "count": 1 + }, + "pattern": [ + "XX", + " #", + " #" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:gold_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crimson_hanging_sign", + "count": 6 + }, + "pattern": [ + "X X", + "###", + "###" + ], + "key": { + "#": "minecraft:stripped_crimson_stem", + "X": "minecraft:iron_chain" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:flower_banner_pattern", + "count": 1 + }, + "ingredients": [ + "minecraft:paper", + "minecraft:oxeye_daisy" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:candle", + "count": 1 + }, + "pattern": [ + "S", + "H" + ], + "key": { + "H": "minecraft:honeycomb", + "S": "minecraft:string" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chiseled_tuff", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:tuff_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:nether_brick_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:nether_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:black_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:black_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:pink_tulip" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_gray_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:light_gray_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oxidized_cut_copper", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:oxidized_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_shelf", + "count": 6 + }, + "pattern": [ + "###", + " ", + "###" + ], + "key": { + "#": "minecraft:stripped_bamboo_block" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:muddy_mangrove_roots", + "count": 1 + }, + "ingredients": [ + "minecraft:mud", + "minecraft:mangrove_roots" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spruce_boat", + "count": 1 + }, + "pattern": [ + "# #", + "###" + ], + "key": { + "#": "minecraft:spruce_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brick_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:deepslate_tile_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:deepslate_tiles" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_gray_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:light_gray_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jukebox", + "count": 1 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "#minecraft:planks", + "X": "minecraft:diamond" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:fire_charge", + "count": 3 + }, + "ingredients": [ + "minecraft:gunpowder", + "minecraft:blaze_powder", + [ + "minecraft:coal", + "minecraft:charcoal" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crimson_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:crimson_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lodestone", + "count": 1 + }, + "pattern": [ + "SSS", + "S#S", + "SSS" + ], + "key": { + "#": "minecraft:iron_ingot", + "S": "minecraft:chiseled_stone_bricks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:blue_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:lapis_lazuli" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:smooth_sandstone_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:smooth_sandstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:resin_brick_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:resin_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:white_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:white_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_weighted_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:gold_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_lightning_rod", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_lightning_rod", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lapis_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:lapis_lazuli" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:black_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:wither_rose" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:black_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:black_dye", + [ + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:jungle_button", + "count": 1 + }, + "ingredients": [ + "minecraft:jungle_planks" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:acacia_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:acacia_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:acacia_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:acacia_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jack_o_lantern", + "count": 1 + }, + "pattern": [ + "A", + "B" + ], + "key": { + "A": "minecraft:carved_pumpkin", + "B": "minecraft:torch" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:black_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:black_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:warped_trapdoor", + "count": 2 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:warped_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:magenta_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:magenta_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:white_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:white_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:green_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:green_wool" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pale_oak_chest_boat", + "count": 1 + }, + "ingredients": [ + "minecraft:chest", + "minecraft:pale_oak_boat" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_chiseled_copper", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_chiseled_copper", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chiseled_red_sandstone", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:red_sandstone_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cobblestone_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:cobblestone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:magenta_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:lilac" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:white_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:white_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:creaking_heart", + "count": 1 + }, + "pattern": [ + " L ", + " R ", + " L " + ], + "key": { + "L": "minecraft:pale_oak_log", + "R": "minecraft:resin_block" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:birch_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:birch_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_copper", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_copper", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cherry_fence", + "count": 3 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:cherry_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:gold_ingot", + "count": 9 + }, + "ingredients": [ + "minecraft:gold_block" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spruce_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:spruce_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:dark_oak_chest_boat", + "count": 1 + }, + "ingredients": [ + "minecraft:chest", + "minecraft:dark_oak_boat" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:melon", + "count": 1 + }, + "ingredients": [ + "minecraft:melon_slice", + "minecraft:melon_slice", + "minecraft:melon_slice", + "minecraft:melon_slice", + "minecraft:melon_slice", + "minecraft:melon_slice", + "minecraft:melon_slice", + "minecraft:melon_slice", + "minecraft:melon_slice" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:target", + "count": 1 + }, + "pattern": [ + " R ", + "RHR", + " R " + ], + "key": { + "H": "minecraft:hay_block", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:poppy" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:torch", + "count": 4 + }, + "pattern": [ + "X", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": [ + "minecraft:coal", + "minecraft:charcoal" + ] + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:resin_brick_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:resin_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:purple_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:purple_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:wooden_pickaxe", + "count": 1 + }, + "pattern": [ + "XXX", + " # ", + " # " + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:wooden_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:piston", + "count": 1 + }, + "pattern": [ + "TTT", + "#X#", + "#R#" + ], + "key": { + "#": "minecraft:cobblestone", + "R": "minecraft:redstone", + "T": "#minecraft:planks", + "X": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cyan_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:cyan_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:tide_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:prismarine", + "S": "minecraft:tide_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:detector_rail", + "count": 6 + }, + "pattern": [ + "X X", + "X#X", + "XRX" + ], + "key": { + "#": "minecraft:stone_pressure_plate", + "R": "minecraft:redstone", + "X": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pink_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:pink_petals" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cobblestone_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:cobblestone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:prismarine", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:prismarine_shard" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:stone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:white_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:bone_meal" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:beehive", + "count": 1 + }, + "pattern": [ + "PPP", + "HHH", + "PPP" + ], + "key": { + "H": "minecraft:honeycomb", + "P": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:warped_hyphae", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:warped_stem" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:mangrove_chest_boat", + "count": 1 + }, + "ingredients": [ + "minecraft:chest", + "minecraft:mangrove_boat" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_diorite_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:polished_diorite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_sandstone_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:red_sandstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brown_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:brown_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_cut_copper", + "count": 1 + }, + "ingredients": [ + "minecraft:cut_copper", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_hoe", + "count": 1 + }, + "pattern": [ + "XX", + " #", + " #" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:stone_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brown_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:brown_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:quartz_bricks", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:quartz_block" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_oak_sign", + "count": 3 + }, + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": "minecraft:dark_oak_planks", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:purple_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:purple_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:cherry_chest_boat", + "count": 1 + }, + "ingredients": [ + "minecraft:chest", + "minecraft:cherry_boat" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:tuff_bricks", + "count": 4 + }, + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": "minecraft:polished_tuff" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oak_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:acacia_trapdoor", + "count": 2 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:acacia_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cobbled_deepslate_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:cobbled_deepslate" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:fletching_table", + "count": 1 + }, + "pattern": [ + "@@", + "##", + "##" + ], + "key": { + "#": "#minecraft:planks", + "@": "minecraft:flint" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:raw_gold_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:raw_gold" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mossy_cobblestone_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:mossy_cobblestone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diamond_helmet", + "count": 1 + }, + "pattern": [ + "XXX", + "X X" + ], + "key": { + "X": "minecraft:diamond" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:field_masoned_banner_pattern", + "count": 1 + }, + "ingredients": [ + "minecraft:paper", + "minecraft:bricks" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_copper_chest", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_copper_chest", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pink_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:cactus_flower" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:tnt", + "count": 1 + }, + "pattern": [ + "X#X", + "#X#", + "X#X" + ], + "key": { + "#": [ + "minecraft:sand", + "minecraft:red_sand" + ], + "X": "minecraft:gunpowder" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:music_disc_5", + "count": 1 + }, + "ingredients": [ + "minecraft:disc_fragment_5", + "minecraft:disc_fragment_5", + "minecraft:disc_fragment_5", + "minecraft:disc_fragment_5", + "minecraft:disc_fragment_5", + "minecraft:disc_fragment_5", + "minecraft:disc_fragment_5", + "minecraft:disc_fragment_5", + "minecraft:disc_fragment_5" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:black_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:black_dye", + [ + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:raw_copper_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:raw_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brown_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:brown_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:weathered_copper_bulb", + "count": 4 + }, + "pattern": [ + " C ", + "CBC", + " R " + ], + "key": { + "B": "minecraft:blaze_rod", + "C": "minecraft:weathered_copper", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:ender_chest", + "count": 1 + }, + "pattern": [ + "###", + "#E#", + "###" + ], + "key": { + "#": "minecraft:obsidian", + "E": "minecraft:ender_eye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:warped_planks", + "count": 4 + }, + "ingredients": [ + "#minecraft:warped_stems" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_cut_copper", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:waxed_copper_block" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pink_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:pink_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:heavy_weighted_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_copper_chain", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_copper_chain", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:red_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:red_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_sandstone_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": [ + "minecraft:red_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone" + ] + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:blue_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:blue_dye", + [ + "minecraft:black_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cut_sandstone_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:cut_sandstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lectern", + "count": 1 + }, + "pattern": [ + "SSS", + " B ", + " S " + ], + "key": { + "B": "minecraft:bookshelf", + "S": "#minecraft:wooden_slabs" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pink_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:pink_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:brown_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:cocoa_beans" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:bordure_indented_banner_pattern", + "count": 1 + }, + "ingredients": [ + "minecraft:paper", + "minecraft:vine" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cake", + "count": 1 + }, + "pattern": [ + "AAA", + "BEB", + "CCC" + ], + "key": { + "A": "minecraft:milk_bucket", + "B": "minecraft:sugar", + "C": "minecraft:wheat", + "E": "#minecraft:eggs" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:end_stone_bricks", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:end_stone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oxidized_cut_copper_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:oxidized_cut_copper" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_copper_grate", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_copper_grate", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_gray_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:light_gray_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lime_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:lime_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cherry_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:cherry_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stripped_oak_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:stripped_oak_log" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_chiseled_copper", + "count": 1 + }, + "ingredients": [ + "minecraft:chiseled_copper", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:oak_chest_boat", + "count": 1 + }, + "ingredients": [ + "minecraft:chest", + "minecraft:oak_boat" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:magenta_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:magenta_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_copper_grate", + "count": 4 + }, + "pattern": [ + " M ", + "M M", + " M " + ], + "key": { + "M": "minecraft:waxed_copper_block" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:acacia_fence_gate", + "count": 1 + }, + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:acacia_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_cut_copper_stairs", + "count": 1 + }, + "ingredients": [ + "minecraft:cut_copper_stairs", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_copper_lantern", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_copper_lantern", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pink_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:pink_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:netherite_ingot", + "count": 1 + }, + "ingredients": [ + "minecraft:netherite_scrap", + "minecraft:netherite_scrap", + "minecraft:netherite_scrap", + "minecraft:netherite_scrap", + "minecraft:gold_ingot", + "minecraft:gold_ingot", + "minecraft:gold_ingot", + "minecraft:gold_ingot" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:weathered_chiseled_copper", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:weathered_cut_copper_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:black_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:black_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:green_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:green_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:melon_seeds", + "count": 1 + }, + "ingredients": [ + "minecraft:melon_slice" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crimson_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:crimson_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:raiser_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:terracotta", + "S": "minecraft:raiser_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:sandstone_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:sandstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_sword", + "count": 1 + }, + "pattern": [ + "X", + "X", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:stone_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:composter", + "count": 1 + }, + "pattern": [ + "# #", + "# #", + "###" + ], + "key": { + "#": "#minecraft:wooden_slabs" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:dandelion" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_gray_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:light_gray_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_trapdoor", + "count": 2 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:bamboo_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:magenta_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:magenta_wool" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:black_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:black_dye" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:white_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:white_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chiseled_bookshelf", + "count": 1 + }, + "pattern": [ + "###", + "XXX", + "###" + ], + "key": { + "#": "#minecraft:planks", + "X": "#minecraft:wooden_slabs" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cherry_trapdoor", + "count": 2 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:cherry_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:golden_sword", + "count": 1 + }, + "pattern": [ + "X", + "X", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:gold_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mangrove_sign", + "count": 3 + }, + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": "minecraft:mangrove_planks", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:resin_bricks", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:resin_brick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:blackstone_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:blackstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dune_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:sandstone", + "S": "minecraft:dune_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:tuff_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:tuff" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:purple_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:purple_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_granite_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:polished_granite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:tuff_brick_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:tuff_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:ladder", + "count": 3 + }, + "pattern": [ + "# #", + "###", + "# #" + ], + "key": { + "#": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:netherite_upgrade_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:netherrack", + "S": "minecraft:netherite_upgrade_smithing_template" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_ingot", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:copper_nugget" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:dark_oak_button", + "count": 1 + }, + "ingredients": [ + "minecraft:dark_oak_planks" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_blue_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:blue_dye", + "minecraft:white_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pink_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:pink_stained_glass" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mossy_stone_brick_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:mossy_stone_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:gray_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:gray_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:exposed_chiseled_copper", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:exposed_cut_copper_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:snow_block", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:snowball" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:orange_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:orange_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lever", + "count": 1 + }, + "pattern": [ + "X", + "#" + ], + "key": { + "#": "minecraft:cobblestone", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_helmet", + "count": 1 + }, + "pattern": [ + "XXX", + "X X" + ], + "key": { + "X": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:leather_horse_armor", + "count": 1 + }, + "pattern": [ + "X X", + "XXX", + "X X" + ], + "key": { + "X": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pink_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:pink_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chest", + "count": 1 + }, + "pattern": [ + "###", + "# #", + "###" + ], + "key": { + "#": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_cut_copper", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_cut_copper", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_blue_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:light_blue_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_blue_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:light_blue_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:magenta_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:magenta_dye" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_copper_chest", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_copper_chest", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_oak_fence", + "count": 3 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:pale_oak_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:brown_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:brown_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cyan_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:cyan_wool" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pink_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:pink_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jungle_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:jungle_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:gray_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:gray_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_prismarine", + "count": 1 + }, + "pattern": [ + "SSS", + "SIS", + "SSS" + ], + "key": { + "I": "minecraft:black_dye", + "S": "minecraft:prismarine_shard" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:painting", + "count": 1 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:wool" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:end_stone_brick_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:end_stone_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:wild_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:mossy_cobblestone", + "S": "minecraft:wild_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bowl", + "count": 4 + }, + "pattern": [ + "# #", + " # " + ], + "key": { + "#": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lime_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:lime_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:purpur_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": [ + "minecraft:purpur_block", + "minecraft:purpur_pillar" + ] + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:copper_ingot", + "count": 9 + }, + "ingredients": [ + "minecraft:waxed_copper_block" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_shovel", + "count": 1 + }, + "pattern": [ + "X", + "#", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:iron_tool_materials" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_copper_grate", + "count": 1 + }, + "ingredients": [ + "minecraft:copper_grate", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stripped_dark_oak_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:stripped_dark_oak_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:blue_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:blue_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:daylight_detector", + "count": 1 + }, + "pattern": [ + "GGG", + "QQQ", + "WWW" + ], + "key": { + "G": "minecraft:glass", + "Q": "minecraft:quartz", + "W": "#minecraft:wooden_slabs" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:tuff_brick_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:tuff_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stick", + "count": 4 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oak_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:oak_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brick_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_blackstone_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:polished_blackstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cut_red_sandstone", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:red_sandstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_oak_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:dark_oak_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:orange_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:orange_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:yellow_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:yellow_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:wind_charge", + "count": 4 + }, + "ingredients": [ + "minecraft:breeze_rod" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:gold_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:gold_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:blaze_powder", + "count": 2 + }, + "ingredients": [ + "minecraft:blaze_rod" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crimson_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:crimson_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:calibrated_sculk_sensor", + "count": 1 + }, + "pattern": [ + " # ", + "#X#" + ], + "key": { + "#": "minecraft:amethyst_shard", + "X": "minecraft:sculk_sensor" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cherry_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:cherry_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pale_oak_button", + "count": 1 + }, + "ingredients": [ + "minecraft:pale_oak_planks" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_copper_door", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_copper_door", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:granite_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:granite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oxidized_copper_bulb", + "count": 4 + }, + "pattern": [ + " C ", + "CBC", + " R " + ], + "key": { + "B": "minecraft:blaze_rod", + "C": "minecraft:oxidized_copper", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cherry_boat", + "count": 1 + }, + "pattern": [ + "# #", + "###" + ], + "key": { + "#": "minecraft:cherry_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:wooden_shovel", + "count": 1 + }, + "pattern": [ + "X", + "#", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:wooden_tool_materials" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:magenta_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:magenta_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:sea_lantern", + "count": 1 + }, + "pattern": [ + "SCS", + "CCC", + "SCS" + ], + "key": { + "C": "minecraft:prismarine_crystals", + "S": "minecraft:prismarine_shard" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:red_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:arrow", + "count": 4 + }, + "pattern": [ + "X", + "#", + "Y" + ], + "key": { + "#": "minecraft:stick", + "X": "minecraft:flint", + "Y": "minecraft:feather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cherry_fence_gate", + "count": 1 + }, + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:cherry_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_oak_hanging_sign", + "count": 6 + }, + "pattern": [ + "X X", + "###", + "###" + ], + "key": { + "#": "minecraft:stripped_dark_oak_log", + "X": "minecraft:iron_chain" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_ingot", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:iron_nugget" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:prismarine_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:prismarine" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_brick_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:stone_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dripstone_block", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:pointed_dripstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:orange_tulip" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:mossy_cobblestone", + "count": 1 + }, + "ingredients": [ + "minecraft:cobblestone", + "minecraft:vine" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:yellow_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:yellow_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:red_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:red_tulip" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_granite_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:polished_granite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spruce_fence_gate", + "count": 1 + }, + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:spruce_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_oxidized_cut_copper_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:waxed_oxidized_cut_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:carrot_on_a_stick", + "count": 1 + }, + "pattern": [ + "# ", + " X" + ], + "key": { + "#": "minecraft:fishing_rod", + "X": "minecraft:carrot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:weathered_cut_copper_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:weathered_cut_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:purple_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:purple_stained_glass" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:cherry_button", + "count": 1 + }, + "ingredients": [ + "minecraft:cherry_planks" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:gray_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:closed_eyeblossom" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:purple_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:purple_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:magenta_dye", + "count": 4 + }, + "ingredients": [ + "minecraft:blue_dye", + "minecraft:red_dye", + "minecraft:red_dye", + "minecraft:white_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:magenta_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:magenta_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_blue_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:light_blue_stained_glass" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_fence_gate", + "count": 1 + }, + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:bamboo_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oak_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_gray_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:light_gray_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:cornflower" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_oak_shelf", + "count": 6 + }, + "pattern": [ + "###", + " ", + "###" + ], + "key": { + "#": "minecraft:stripped_dark_oak_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mangrove_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:mangrove_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:white_tulip" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_tuff", + "count": 4 + }, + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": "minecraft:tuff" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:green_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:green_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:glass_bottle", + "count": 3 + }, + "pattern": [ + "# #", + " # " + ], + "key": { + "#": "minecraft:glass" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:orange_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:open_eyeblossom" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:yellow_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:yellow_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oxidized_chiseled_copper", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:oxidized_cut_copper_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_weathered_cut_copper_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:waxed_weathered_cut_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:green_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:green_stained_glass" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bricks", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:brick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:end_stone_brick_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:end_stone_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lime_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:lime_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_blue_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:light_blue_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_moss_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:pale_moss_block" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jungle_fence_gate", + "count": 1 + }, + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:jungle_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:acacia_sign", + "count": 3 + }, + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": "minecraft:acacia_planks", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_chest", + "count": 1 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:copper_ingot", + "X": "minecraft:chest" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:purple_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:purple_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:netherite_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:netherite_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jungle_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:jungle_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:red_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:red_dye" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:mossy_cobblestone", + "count": 1 + }, + "ingredients": [ + "minecraft:cobblestone", + "minecraft:moss_block" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:honeycomb_block", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:honeycomb" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:nether_brick_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:nether_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lime_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:lime_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_tuff_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:polished_tuff" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:compass", + "count": 1 + }, + "pattern": [ + " # ", + "#X#", + " # " + ], + "key": { + "#": "minecraft:iron_ingot", + "X": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bolt_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": [ + "minecraft:copper_block", + "minecraft:waxed_copper_block" + ], + "S": "minecraft:bolt_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_lightning_rod", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_lightning_rod", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:quartz_block", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:quartz" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:snow", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:snow_block" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:prismarine_brick_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:prismarine_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cobbled_deepslate_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:cobbled_deepslate" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:jungle_planks", + "count": 4 + }, + "ingredients": [ + "#minecraft:jungle_logs" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:yellow_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:yellow_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cartography_table", + "count": 1 + }, + "pattern": [ + "@@", + "##", + "##" + ], + "key": { + "#": "#minecraft:planks", + "@": "minecraft:paper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_oak_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:pale_oak_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:cyan_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:blue_dye", + "minecraft:green_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_nether_brick_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:red_nether_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dried_kelp_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:dried_kelp" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lantern", + "count": 1 + }, + "pattern": [ + "XXX", + "X#X", + "XXX" + ], + "key": { + "#": "minecraft:torch", + "X": "minecraft:iron_nugget" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:prismarine_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:prismarine" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:yellow_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:yellow_stained_glass" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:glow_item_frame", + "count": 1 + }, + "ingredients": [ + "minecraft:item_frame", + "minecraft:glow_ink_sac" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:smooth_red_sandstone_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:smooth_red_sandstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:dark_oak_planks", + "count": 4 + }, + "ingredients": [ + "#minecraft:dark_oak_logs" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_copper_golem_statue", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_copper_golem_statue", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:black_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:black_dye", + [ + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:smooth_stone_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:smooth_stone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mangrove_hanging_sign", + "count": 6 + }, + "pattern": [ + "X X", + "###", + "###" + ], + "key": { + "#": "minecraft:stripped_mangrove_log", + "X": "minecraft:iron_chain" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:wolf_armor", + "count": 1 + }, + "pattern": [ + "X ", + "XXX", + "X X" + ], + "key": { + "X": "minecraft:armadillo_scute" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stripped_jungle_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:stripped_jungle_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mangrove_boat", + "count": 1 + }, + "pattern": [ + "# #", + "###" + ], + "key": { + "#": "minecraft:mangrove_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:amethyst_block", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:amethyst_shard" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spyglass", + "count": 1 + }, + "pattern": [ + " # ", + " X ", + " X " + ], + "key": { + "#": "minecraft:amethyst_shard", + "X": "minecraft:copper_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brick_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:bricks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:purple_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:blue_dye", + "minecraft:red_dye" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:birch_button", + "count": 1 + }, + "ingredients": [ + "minecraft:birch_planks" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_bricks", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:stone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stick", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:bamboo" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:blue_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:blue_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:fishing_rod", + "count": 1 + }, + "pattern": [ + " #", + " #X", + "# X" + ], + "key": { + "#": "minecraft:stick", + "X": "minecraft:string" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diorite_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:diorite" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_copper", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_copper", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mangrove_fence", + "count": 3 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:mangrove_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:golden_pickaxe", + "count": 1 + }, + "pattern": [ + "XXX", + " # ", + " # " + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:gold_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:purpur_block", + "count": 4 + }, + "pattern": [ + "FF", + "FF" + ], + "key": { + "F": "minecraft:popped_chorus_fruit" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:coast_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:cobblestone", + "S": "minecraft:coast_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_copper_trapdoor", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_copper_trapdoor", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_nether_brick_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:red_nether_bricks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:red_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:red_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:nether_bricks", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:nether_brick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oak_boat", + "count": 1 + }, + "pattern": [ + "# #", + "###" + ], + "key": { + "#": "minecraft:oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pink_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:pink_wool" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:sandstone_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": [ + "minecraft:sandstone", + "minecraft:chiseled_sandstone" + ] + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cherry_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:cherry_log" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:slime_ball", + "count": 9 + }, + "ingredients": [ + "minecraft:slime_block" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_fence", + "count": 3 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:bamboo_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_oak_trapdoor", + "count": 2 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:pale_oak_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:wheat", + "count": 9 + }, + "ingredients": [ + "minecraft:hay_block" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:blue_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:blue_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crimson_hyphae", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:crimson_stem" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bucket", + "count": 1 + }, + "pattern": [ + "# #", + " # " + ], + "key": { + "#": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:shulker_box", + "count": 1 + }, + "pattern": [ + "-", + "#", + "-" + ], + "key": { + "#": "minecraft:chest", + "-": "minecraft:shulker_shell" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_oxidized_copper_bulb", + "count": 4 + }, + "pattern": [ + " C ", + "CBC", + " R " + ], + "key": { + "B": "minecraft:blaze_rod", + "C": "minecraft:waxed_oxidized_copper", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:packed_ice", + "count": 1 + }, + "ingredients": [ + "minecraft:ice", + "minecraft:ice", + "minecraft:ice", + "minecraft:ice", + "minecraft:ice", + "minecraft:ice", + "minecraft:ice", + "minecraft:ice", + "minecraft:ice" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crimson_trapdoor", + "count": 2 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:crimson_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_copper_golem_statue", + "count": 1 + }, + "ingredients": [ + "minecraft:copper_golem_statue", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:green_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:green_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:white_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:white_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:warped_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:warped_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:andesite_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:andesite" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:black_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:black_dye", + [ + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:bamboo_button", + "count": 1 + }, + "ingredients": [ + "minecraft:bamboo_planks" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:acacia_hanging_sign", + "count": 6 + }, + "pattern": [ + "X X", + "###", + "###" + ], + "key": { + "#": "minecraft:stripped_acacia_log", + "X": "minecraft:iron_chain" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:black_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:ink_sac" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:blue_ice", + "count": 1 + }, + "ingredients": [ + "minecraft:packed_ice", + "minecraft:packed_ice", + "minecraft:packed_ice", + "minecraft:packed_ice", + "minecraft:packed_ice", + "minecraft:packed_ice", + "minecraft:packed_ice", + "minecraft:packed_ice", + "minecraft:packed_ice" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_oak_boat", + "count": 1 + }, + "pattern": [ + "# #", + "###" + ], + "key": { + "#": "minecraft:dark_oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:orange_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:orange_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_pickaxe", + "count": 1 + }, + "pattern": [ + "XXX", + " # ", + " # " + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:stone_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_trapdoor", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:magma_block", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:magma_cream" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crimson_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:crimson_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_cut_copper_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:waxed_cut_copper" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_copper_trapdoor", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_copper_trapdoor", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cyan_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:cyan_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_gray_dye", + "count": 3 + }, + "ingredients": [ + "minecraft:black_dye", + "minecraft:white_dye", + "minecraft:white_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_prismarine_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:dark_prismarine" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cyan_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:cyan_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:smooth_red_sandstone_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:smooth_red_sandstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:green_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:green_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:green_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:green_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:redstone_torch", + "count": 1 + }, + "pattern": [ + "X", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:shaper_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:terracotta", + "S": "minecraft:shaper_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cherry_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:cherry_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:gray_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:gray_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cyan_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:cyan_stained_glass" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_oak_boat", + "count": 1 + }, + "pattern": [ + "# #", + "###" + ], + "key": { + "#": "minecraft:pale_oak_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_cut_copper", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_cut_copper", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:resin_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:resin_clump" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_helmet", + "count": 1 + }, + "pattern": [ + "XXX", + "X X" + ], + "key": { + "X": "minecraft:copper_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:purple_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:purple_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_nether_bricks", + "count": 1 + }, + "pattern": [ + "NW", + "WN" + ], + "key": { + "N": "minecraft:nether_brick", + "W": "minecraft:nether_wart" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_copper_grate", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_copper_grate", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_oak_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:dark_oak_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:bamboo_chest_raft", + "count": 1 + }, + "ingredients": [ + "minecraft:chest", + "minecraft:bamboo_raft" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_blue_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:light_blue_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:prismarine_brick_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:prismarine_bricks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:brown_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:brown_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jungle_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:jungle_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jungle_trapdoor", + "count": 2 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:jungle_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pink_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:pink_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_weathered_copper_grate", + "count": 4 + }, + "pattern": [ + " M ", + "M M", + " M " + ], + "key": { + "M": "minecraft:waxed_weathered_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:black_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:black_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:hopper_minecart", + "count": 1 + }, + "ingredients": [ + "minecraft:hopper", + "minecraft:minecart" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_copper_chain", + "count": 1 + }, + "ingredients": [ + "minecraft:copper_chain", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oak_fence", + "count": 3 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:oak_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:mangrove_planks", + "count": 4 + }, + "ingredients": [ + "#minecraft:mangrove_logs" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:conduit", + "count": 1 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:nautilus_shell", + "X": "minecraft:heart_of_the_sea" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_copper_golem_statue", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_copper_golem_statue", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:andesite_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:andesite" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_gray_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:light_gray_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:red_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:wooden_spear", + "count": 1 + }, + "pattern": [ + " X", + " # ", + "# " + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:wooden_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:golden_chestplate", + "count": 1 + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "key": { + "X": "minecraft:gold_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pink_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:pink_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_weathered_chiseled_copper", + "count": 1 + }, + "pattern": [ + " M ", + " M " + ], + "key": { + "M": "minecraft:waxed_weathered_cut_copper_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:respawn_anchor", + "count": 1 + }, + "pattern": [ + "OOO", + "GGG", + "OOO" + ], + "key": { + "G": "minecraft:glowstone", + "O": "minecraft:crying_obsidian" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stripped_crimson_hyphae", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:stripped_crimson_stem" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:blackstone_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:blackstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:exposed_cut_copper_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:exposed_cut_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_exposed_chiseled_copper", + "count": 1 + }, + "pattern": [ + " M ", + " M " + ], + "key": { + "M": "minecraft:waxed_exposed_cut_copper_slab" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:book", + "count": 1 + }, + "ingredients": [ + "minecraft:paper", + "minecraft:paper", + "minecraft:paper", + "minecraft:leather" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:birch_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:birch_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jungle_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:jungle_log" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:copper_ingot", + "count": 9 + }, + "ingredients": [ + "minecraft:copper_block" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:mangrove_button", + "count": 1 + }, + "ingredients": [ + "minecraft:mangrove_planks" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:wayfinder_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:terracotta", + "S": "minecraft:wayfinder_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_sandstone", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:red_sand" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cut_copper_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:cut_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:repeater", + "count": 1 + }, + "pattern": [ + "#X#", + "III" + ], + "key": { + "#": "minecraft:redstone_torch", + "I": "minecraft:stone", + "X": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:hay_block", + "count": 1 + }, + "ingredients": [ + "minecraft:wheat", + "minecraft:wheat", + "minecraft:wheat", + "minecraft:wheat", + "minecraft:wheat", + "minecraft:wheat", + "minecraft:wheat", + "minecraft:wheat", + "minecraft:wheat" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_brick_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:stone_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:tuff_brick_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:tuff_bricks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pink_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:pink_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stripped_spruce_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:stripped_spruce_log" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_blue_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:light_blue_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:black_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:black_stained_glass" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:orange_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:orange_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:golden_axe", + "count": 1 + }, + "pattern": [ + "XX", + "X#", + " #" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:gold_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lime_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:lime_wool" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_blue_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:blue_orchid" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crimson_shelf", + "count": 6 + }, + "pattern": [ + "###", + " ", + "###" + ], + "key": { + "#": "minecraft:stripped_crimson_stem" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diamond_pickaxe", + "count": 1 + }, + "pattern": [ + "XXX", + " # ", + " # " + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:diamond_tool_materials" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:emerald", + "count": 9 + }, + "ingredients": [ + "minecraft:emerald_block" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_chestplate", + "count": 1 + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "key": { + "X": "minecraft:copper_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:purple_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:purple_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:azure_bluet" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spire_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:purpur_block", + "S": "minecraft:spire_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:purple_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:purple_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_axe", + "count": 1 + }, + "pattern": [ + "XX", + "X#", + " #" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:stone_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:gray_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:gray_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jungle_hanging_sign", + "count": 6 + }, + "pattern": [ + "X X", + "###", + "###" + ], + "key": { + "#": "minecraft:stripped_jungle_log", + "X": "minecraft:iron_chain" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_shovel", + "count": 1 + }, + "pattern": [ + "X", + "#", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:stone_tool_materials" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:resin_clump", + "count": 9 + }, + "ingredients": [ + "minecraft:resin_block" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mossy_cobblestone_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:mossy_cobblestone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:red_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_lightning_rod", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_lightning_rod", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_gray_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:light_gray_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_oak_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:pale_oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brown_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:brown_wool" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:weathered_copper_grate", + "count": 4 + }, + "pattern": [ + " M ", + "M M", + " M " + ], + "key": { + "M": "minecraft:weathered_copper" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:orange_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:orange_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:armor_stand", + "count": 1 + }, + "pattern": [ + "///", + " / ", + "/_/" + ], + "key": { + "/": "minecraft:stick", + "_": "minecraft:smooth_stone_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brown_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:brown_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_blackstone_brick_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:polished_blackstone_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:minecart", + "count": 1 + }, + "pattern": [ + "# #", + "###" + ], + "key": { + "#": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oak_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_tuff_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:polished_tuff" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:magenta_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:magenta_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:recovery_compass", + "count": 1 + }, + "pattern": [ + "SSS", + "SCS", + "SSS" + ], + "key": { + "C": "minecraft:compass", + "S": "minecraft:echo_shard" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:purple_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:purple_wool" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:honey_bottle", + "count": 4 + }, + "ingredients": [ + "minecraft:honey_block", + "minecraft:glass_bottle", + "minecraft:glass_bottle", + "minecraft:glass_bottle", + "minecraft:glass_bottle" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:brown_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:brown_dye" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_copper_chain", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_copper_chain", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:activator_rail", + "count": 6 + }, + "pattern": [ + "XSX", + "X#X", + "XSX" + ], + "key": { + "#": "minecraft:redstone_torch", + "S": "minecraft:stick", + "X": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_cut_copper_slab", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_cut_copper_slab", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:leather_helmet", + "count": 1 + }, + "pattern": [ + "XXX", + "X X" + ], + "key": { + "X": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cyan_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:cyan_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:red_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diamond_shovel", + "count": 1 + }, + "pattern": [ + "X", + "#", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:diamond_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_axe", + "count": 1 + }, + "pattern": [ + "XX", + "X#", + " #" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:iron_tool_materials" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:yellow_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:wildflowers" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oxidized_copper_grate", + "count": 4 + }, + "pattern": [ + " M ", + "M M", + " M " + ], + "key": { + "M": "minecraft:oxidized_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_blackstone", + "count": 4 + }, + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": "minecraft:blackstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:iron_nugget", + "count": 9 + }, + "ingredients": [ + "minecraft:iron_ingot" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:quartz_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": [ + "minecraft:chiseled_quartz_block", + "minecraft:quartz_block", + "minecraft:quartz_pillar" + ] + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oak_fence_gate", + "count": 1 + }, + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:deepslate_tile_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:deepslate_tiles" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brush", + "count": 1 + }, + "pattern": [ + "X", + "#", + "I" + ], + "key": { + "#": "minecraft:copper_ingot", + "I": "minecraft:stick", + "X": "minecraft:feather" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_copper_door", + "count": 1 + }, + "ingredients": [ + "minecraft:copper_door", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lead", + "count": 2 + }, + "pattern": [ + "~~ ", + "~~ ", + " ~" + ], + "key": { + "~": "minecraft:string" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:cyan_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:cyan_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_blackstone_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:polished_blackstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:oxeye_daisy" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:brown_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:brown_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:red_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_exposed_cut_copper", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:waxed_exposed_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oak_sign", + "count": 3 + }, + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": "minecraft:oak_planks", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_copper_chest", + "count": 1 + }, + "ingredients": [ + "minecraft:copper_chest", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:blackstone_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:blackstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:bamboo_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_boots", + "count": 1 + }, + "pattern": [ + "X X", + "X X" + ], + "key": { + "X": "minecraft:copper_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:dried_kelp", + "count": 9 + }, + "ingredients": [ + "minecraft:dried_kelp_block" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:furnace_minecart", + "count": 1 + }, + "ingredients": [ + "minecraft:furnace", + "minecraft:minecart" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:exposed_cut_copper", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:exposed_copper" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:prismarine_bricks", + "count": 1 + }, + "ingredients": [ + "minecraft:prismarine_shard", + "minecraft:prismarine_shard", + "minecraft:prismarine_shard", + "minecraft:prismarine_shard", + "minecraft:prismarine_shard", + "minecraft:prismarine_shard", + "minecraft:prismarine_shard", + "minecraft:prismarine_shard", + "minecraft:prismarine_shard" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_oak_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:dark_oak_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lime_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:lime_stained_glass" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_brick_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:stone_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:blast_furnace", + "count": 1 + }, + "pattern": [ + "III", + "IXI", + "###" + ], + "key": { + "#": "minecraft:smooth_stone", + "I": "minecraft:iron_ingot", + "X": "minecraft:furnace" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_oxidized_copper_grate", + "count": 4 + }, + "pattern": [ + " M ", + "M M", + " M " + ], + "key": { + "M": "minecraft:waxed_oxidized_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:gray_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:gray_wool" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:note_block", + "count": 1 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "#minecraft:planks", + "X": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:redstone_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:white_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:white_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:cyan_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:cyan_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_deepslate_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:polished_deepslate" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:barrel", + "count": 1 + }, + "pattern": [ + "PSP", + "P P", + "PSP" + ], + "key": { + "P": "#minecraft:planks", + "S": "#minecraft:wooden_slabs" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:redstone_lamp", + "count": 1 + }, + "pattern": [ + " R ", + "RGR", + " R " + ], + "key": { + "G": "minecraft:glowstone", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:oak_button", + "count": 1 + }, + "ingredients": [ + "minecraft:oak_planks" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:smithing_table", + "count": 1 + }, + "pattern": [ + "@@", + "##", + "##" + ], + "key": { + "#": "#minecraft:planks", + "@": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_oak_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:pale_oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:glass" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_hoe", + "count": 1 + }, + "pattern": [ + "XX", + " #", + " #" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:copper_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:hopper", + "count": 1 + }, + "pattern": [ + "I I", + "ICI", + " I " + ], + "key": { + "C": "minecraft:chest", + "I": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:leather_chestplate", + "count": 1 + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "key": { + "X": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:copper_nugget", + "count": 9 + }, + "ingredients": [ + "minecraft:copper_ingot" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:lime_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:lime_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:wooden_hoe", + "count": 1 + }, + "pattern": [ + "XX", + " #", + " #" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:wooden_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_blue_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:light_blue_wool" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cobblestone_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:cobblestone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_chiseled_copper", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_chiseled_copper", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:observer", + "count": 1 + }, + "pattern": [ + "###", + "RRQ", + "###" + ], + "key": { + "#": "minecraft:cobblestone", + "Q": "minecraft:quartz", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mace", + "count": 1 + }, + "pattern": [ + " # ", + " I " + ], + "key": { + "#": "minecraft:heavy_core", + "I": "minecraft:breeze_rod" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brewing_stand", + "count": 1 + }, + "pattern": [ + " B ", + "###" + ], + "key": { + "#": "#minecraft:stone_crafting_materials", + "B": "minecraft:blaze_rod" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:deepslate_brick_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:deepslate_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:acacia_fence", + "count": 3 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:acacia_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:warped_fungus_on_a_stick", + "count": 1 + }, + "pattern": [ + "# ", + " X" + ], + "key": { + "#": "minecraft:fishing_rod", + "X": "minecraft:warped_fungus" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:clay", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:clay_ball" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_exposed_cut_copper_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:waxed_exposed_cut_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stripped_birch_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:stripped_birch_log" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:raw_iron", + "count": 9 + }, + "ingredients": [ + "minecraft:raw_iron_block" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:birch_planks", + "count": 4 + }, + "ingredients": [ + "#minecraft:birch_logs" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:ward_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:cobbled_deepslate", + "S": "minecraft:ward_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lime_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:lime_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:oak_planks", + "count": 4 + }, + "ingredients": [ + "#minecraft:oak_logs" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:stone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bread", + "count": 1 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:wheat" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chiseled_tuff_bricks", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:tuff_brick_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:purpur_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": [ + "minecraft:purpur_block", + "minecraft:purpur_pillar" + ] + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:bamboo_block", + "count": 1 + }, + "ingredients": [ + "minecraft:bamboo", + "minecraft:bamboo", + "minecraft:bamboo", + "minecraft:bamboo", + "minecraft:bamboo", + "minecraft:bamboo", + "minecraft:bamboo", + "minecraft:bamboo", + "minecraft:bamboo" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_cut_copper_stairs", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_cut_copper_stairs", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_bars", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:copper_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:orange_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:red_dye", + "minecraft:yellow_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_oak_fence", + "count": 3 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:dark_oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:enchanting_table", + "count": 1 + }, + "pattern": [ + " B ", + "D#D", + "###" + ], + "key": { + "#": "minecraft:obsidian", + "B": "minecraft:book", + "D": "minecraft:diamond" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:chest_minecart", + "count": 1 + }, + "ingredients": [ + "minecraft:chest", + "minecraft:minecart" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spruce_trapdoor", + "count": 2 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:spruce_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pink_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:pink_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:birch_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:birch_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:white_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:white_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:turtle_helmet", + "count": 1 + }, + "pattern": [ + "XXX", + "X X" + ], + "key": { + "X": "minecraft:turtle_scute" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diamond_hoe", + "count": 1 + }, + "pattern": [ + "XX", + " #", + " #" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:diamond_tool_materials" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_copper_grate", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_copper_grate", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:blue_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:blue_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lime_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:lime_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:acacia_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:acacia_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:flow_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:breeze_rod", + "S": "minecraft:flow_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:torchflower" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_exposed_copper_grate", + "count": 4 + }, + "pattern": [ + " M ", + "M M", + " M " + ], + "key": { + "M": "minecraft:waxed_exposed_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oak_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cut_copper_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:cut_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_deepslate_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:polished_deepslate" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crimson_fence_gate", + "count": 1 + }, + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:crimson_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:stone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chiseled_sandstone", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:sandstone_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:smoker", + "count": 1 + }, + "pattern": [ + " # ", + "#X#", + " # " + ], + "key": { + "#": "#minecraft:logs", + "X": "minecraft:furnace" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:wooden_axe", + "count": 1 + }, + "pattern": [ + "XX", + "X#", + " #" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:wooden_tool_materials" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:jungle_chest_boat", + "count": 1 + }, + "ingredients": [ + "minecraft:chest", + "minecraft:jungle_boat" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_hoe", + "count": 1 + }, + "pattern": [ + "XX", + " #", + " #" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:iron_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mossy_cobblestone_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:mossy_cobblestone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cherry_hanging_sign", + "count": 6 + }, + "pattern": [ + "X X", + "###", + "###" + ], + "key": { + "#": "minecraft:stripped_cherry_log", + "X": "minecraft:iron_chain" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_pickaxe", + "count": 1 + }, + "pattern": [ + "XXX", + " # ", + " # " + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:copper_tool_materials" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:fermented_spider_eye", + "count": 1 + }, + "ingredients": [ + "minecraft:spider_eye", + "minecraft:brown_mushroom", + "minecraft:sugar" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:birch_sign", + "count": 3 + }, + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": "minecraft:birch_planks", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_bars", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:spruce_chest_boat", + "count": 1 + }, + "ingredients": [ + "minecraft:chest", + "minecraft:spruce_boat" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_blackstone_brick_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:polished_blackstone_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:host_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:terracotta", + "S": "minecraft:host_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mangrove_shelf", + "count": 6 + }, + "pattern": [ + "###", + " ", + "###" + ], + "key": { + "#": "minecraft:stripped_mangrove_log" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:spruce_button", + "count": 1 + }, + "ingredients": [ + "minecraft:spruce_planks" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:bamboo_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:spruce_planks", + "count": 4 + }, + "ingredients": [ + "#minecraft:spruce_logs" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stone_spear", + "count": 1 + }, + "pattern": [ + " X", + " # ", + "# " + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:stone_tool_materials" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_copper_bars", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_copper_bars", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:warped_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:warped_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:rabbit_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:baked_potato", + "minecraft:cooked_rabbit", + "minecraft:bowl", + "minecraft:carrot", + "minecraft:red_mushroom" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:red_wool" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_oak_fence_gate", + "count": 1 + }, + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:dark_oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:birch_fence", + "count": 3 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:birch_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_gray_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:light_gray_wool" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_oxidized_cut_copper", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:waxed_oxidized_copper" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:magenta_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:magenta_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:crimson_planks", + "count": 4 + }, + "ingredients": [ + "#minecraft:crimson_stems" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stripped_pale_oak_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:stripped_pale_oak_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:birch_fence_gate", + "count": 1 + }, + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:birch_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pumpkin_pie", + "count": 1 + }, + "ingredients": [ + "minecraft:pumpkin", + "minecraft:sugar", + "#minecraft:eggs" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:crimson_button", + "count": 1 + }, + "ingredients": [ + "minecraft:crimson_planks" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_leggings", + "count": 1 + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "key": { + "X": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_copper_bulb", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_copper_bulb", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:weathered_cut_copper", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:weathered_copper" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:brown_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:brown_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:orange_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:orange_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:birch_chest_boat", + "count": 1 + }, + "ingredients": [ + "minecraft:chest", + "minecraft:birch_boat" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:bone_meal", + "count": 3 + }, + "ingredients": [ + "minecraft:bone" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cut_red_sandstone_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:cut_red_sandstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_spear", + "count": 1 + }, + "pattern": [ + " X", + " # ", + "# " + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:copper_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:gold_ingot", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:gold_nugget" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_cut_copper_slab", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_cut_copper_slab", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:netherite_ingot", + "count": 9 + }, + "ingredients": [ + "minecraft:netherite_block" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:white_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:white_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:orange_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:orange_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_oak_trapdoor", + "count": 2 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:dark_oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:birch_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:birch_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:yellow_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:yellow_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:cherry_planks", + "count": 4 + }, + "ingredients": [ + "#minecraft:cherry_logs" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_oak_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:pale_oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:anvil", + "count": 1 + }, + "pattern": [ + "III", + " i ", + "iii" + ], + "key": { + "I": "minecraft:iron_block", + "i": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:purple_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:purple_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:orange_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:orange_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cherry_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:cherry_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_mosaic_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:bamboo_mosaic" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mangrove_fence_gate", + "count": 1 + }, + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:mangrove_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:mossy_stone_bricks", + "count": 1 + }, + "ingredients": [ + "minecraft:stone_bricks", + "minecraft:vine" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:wooden_sword", + "count": 1 + }, + "pattern": [ + "X", + "X", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:wooden_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:nether_brick_fence", + "count": 6 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:nether_brick", + "W": "minecraft:nether_bricks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_cut_copper_slab", + "count": 1 + }, + "ingredients": [ + "minecraft:cut_copper_slab", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:leather_boots", + "count": 1 + }, + "pattern": [ + "X X", + "X X" + ], + "key": { + "X": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spruce_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:spruce_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_lantern", + "count": 1 + }, + "pattern": [ + "XXX", + "X#X", + "XXX" + ], + "key": { + "#": "minecraft:copper_torch", + "X": "minecraft:copper_nugget" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_lightning_rod", + "count": 1 + }, + "ingredients": [ + "minecraft:lightning_rod", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_blackstone_bricks", + "count": 4 + }, + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": "minecraft:polished_blackstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_cut_copper_slab", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_cut_copper_slab", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:red_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:magenta_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:purple_dye", + "minecraft:pink_dye" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_blue_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:light_blue_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_sandstone_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": [ + "minecraft:red_sandstone", + "minecraft:chiseled_red_sandstone" + ] + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_copper_door", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_copper_door", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:item_frame", + "count": 1 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:stick", + "X": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mud_brick_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:mud_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:leather_leggings", + "count": 1 + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "key": { + "X": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:skull_banner_pattern", + "count": 1 + }, + "ingredients": [ + "minecraft:paper", + "minecraft:wither_skeleton_skull" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:golden_carrot", + "count": 1 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:gold_nugget", + "X": "minecraft:carrot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_deepslate_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:polished_deepslate" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oxidized_cut_copper_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:oxidized_cut_copper" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_gray_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:oxeye_daisy" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_blue_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:light_blue_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:golden_helmet", + "count": 1 + }, + "pattern": [ + "XXX", + "X X" + ], + "key": { + "X": "minecraft:gold_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_gray_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:light_gray_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_leggings", + "count": 1 + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "key": { + "X": "minecraft:copper_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:smooth_sandstone_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:smooth_sandstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_copper_bars", + "count": 1 + }, + "ingredients": [ + "minecraft:copper_bars", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:lime_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:green_dye", + "minecraft:white_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diamond_boots", + "count": 1 + }, + "pattern": [ + "X X", + "X X" + ], + "key": { + "X": "minecraft:diamond" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:sticky_piston", + "count": 1 + }, + "pattern": [ + "S", + "P" + ], + "key": { + "P": "minecraft:piston", + "S": "minecraft:slime_ball" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:bamboo_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_oak_fence_gate", + "count": 1 + }, + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:pale_oak_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_copper_block", + "count": 1 + }, + "ingredients": [ + "minecraft:copper_block", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:warped_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:warped_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:raw_copper", + "count": 9 + }, + "ingredients": [ + "minecraft:raw_copper_block" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:emerald_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:emerald" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crafting_table", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_chiseled_copper", + "count": 1 + }, + "pattern": [ + " M ", + " M " + ], + "key": { + "M": "minecraft:waxed_cut_copper_slab" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_copper_door", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_copper_door", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_gray_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:light_gray_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_oxidized_cut_copper_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:waxed_oxidized_cut_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:quartz_pillar", + "count": 2 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:quartz_block" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:wither_rose" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:blue_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:blue_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:gold_nugget", + "count": 9 + }, + "ingredients": [ + "minecraft:gold_ingot" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:copper_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:golden_spear", + "count": 1 + }, + "pattern": [ + " X", + " # ", + "# " + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:gold_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_weathered_cut_copper", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:waxed_weathered_copper" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:cyan_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:cyan_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:black_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:black_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:lime_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:lime_dye" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:tnt_minecart", + "count": 1 + }, + "ingredients": [ + "minecraft:tnt", + "minecraft:minecart" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:yellow_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:yellow_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:golden_apple", + "count": 1 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:gold_ingot", + "X": "minecraft:apple" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:blue_orchid" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_chain", + "count": 1 + }, + "pattern": [ + "N", + "I", + "N" + ], + "key": { + "I": "minecraft:iron_ingot", + "N": "minecraft:iron_nugget" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:rail", + "count": 16 + }, + "pattern": [ + "X X", + "X#X", + "X X" + ], + "key": { + "#": "minecraft:stick", + "X": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:green_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:green_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:warped_button", + "count": 1 + }, + "ingredients": [ + "minecraft:warped_planks" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:slime_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:slime_ball" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:birch_shelf", + "count": 6 + }, + "pattern": [ + "###", + " ", + "###" + ], + "key": { + "#": "minecraft:stripped_birch_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:tuff_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:tuff" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:acacia_shelf", + "count": 6 + }, + "pattern": [ + "###", + " ", + "###" + ], + "key": { + "#": "minecraft:stripped_acacia_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_blackstone_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:polished_blackstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stripped_warped_hyphae", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:stripped_warped_stem" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:magenta_dye", + "count": 3 + }, + "ingredients": [ + "minecraft:blue_dye", + "minecraft:red_dye", + "minecraft:pink_dye" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:purple_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:purple_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:raw_iron_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:raw_iron" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_chestplate", + "count": 1 + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "key": { + "X": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:snout_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:blackstone", + "S": "minecraft:snout_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_bulb", + "count": 4 + }, + "pattern": [ + " C ", + "CBC", + " R " + ], + "key": { + "B": "minecraft:blaze_rod", + "C": "minecraft:copper_block", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:powered_rail", + "count": 6 + }, + "pattern": [ + "X X", + "X#X", + "XRX" + ], + "key": { + "#": "minecraft:stick", + "R": "minecraft:redstone", + "X": "minecraft:gold_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:writable_book", + "count": 1 + }, + "ingredients": [ + "minecraft:book", + "minecraft:ink_sac", + "minecraft:feather" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:blue_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:blue_stained_glass" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chiseled_resin_bricks", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:resin_brick_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diorite_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:diorite" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:ender_eye", + "count": 1 + }, + "ingredients": [ + "minecraft:ender_pearl", + "minecraft:blaze_powder" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:copper_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oak_trapdoor", + "count": 2 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:warped_shelf", + "count": 6 + }, + "pattern": [ + "###", + " ", + "###" + ], + "key": { + "#": "minecraft:stripped_warped_stem" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:warped_fence_gate", + "count": 1 + }, + "pattern": [ + "#W#", + "#W#" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:warped_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_hanging_sign", + "count": 6 + }, + "pattern": [ + "X X", + "###", + "###" + ], + "key": { + "#": "minecraft:stripped_bamboo_block", + "X": "minecraft:iron_chain" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_blue_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:light_blue_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:packed_mud", + "count": 1 + }, + "ingredients": [ + "minecraft:mud", + "minecraft:wheat" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:trapped_chest", + "count": 1 + }, + "ingredients": [ + "minecraft:chest", + "minecraft:tripwire_hook" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_chain", + "count": 1 + }, + "pattern": [ + "N", + "I", + "N" + ], + "key": { + "I": "minecraft:copper_ingot", + "N": "minecraft:copper_nugget" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:stone_button", + "count": 1 + }, + "ingredients": [ + "minecraft:stone" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:birch_boat", + "count": 1 + }, + "pattern": [ + "# #", + "###" + ], + "key": { + "#": "minecraft:birch_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:closed_eyeblossom" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:moss_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:moss_block" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_mosaic_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:bamboo_mosaic" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_tuff_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:polished_tuff" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:cyan_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:pitcher_plant" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_raft", + "count": 1 + }, + "pattern": [ + "# #", + "###" + ], + "key": { + "#": "minecraft:bamboo_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:red_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:red_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_gray_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:white_tulip" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:leather", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:rabbit_hide" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:blue_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:blue_dye", + [ + "minecraft:black_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jungle_sign", + "count": 3 + }, + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": "minecraft:jungle_planks", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:warped_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:warped_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:cyan_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:cyan_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:magenta_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:magenta_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:white_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:white_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:gray_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:gray_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:granite", + "count": 1 + }, + "ingredients": [ + "minecraft:diorite", + "minecraft:quartz" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diorite", + "count": 2 + }, + "pattern": [ + "CQ", + "QC" + ], + "key": { + "C": "minecraft:cobblestone", + "Q": "minecraft:quartz" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:open_eyeblossom" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:green_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:green_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:resin_brick_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:resin_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:sandstone_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": [ + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone" + ] + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:granite_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:granite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_basalt", + "count": 4 + }, + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": "minecraft:basalt" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_sword", + "count": 1 + }, + "pattern": [ + "X", + "X", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:iron_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:magenta_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:magenta_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pink_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:pink_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crimson_fence", + "count": 3 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:crimson_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_oak_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:pale_oak_log" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:green_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:green_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brown_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:brown_stained_glass" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_gray_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:gray_dye", + "minecraft:white_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_oak_sign", + "count": 3 + }, + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": "minecraft:pale_oak_planks", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:tripwire_hook", + "count": 2 + }, + "pattern": [ + "I", + "S", + "#" + ], + "key": { + "#": "#minecraft:planks", + "I": "minecraft:iron_ingot", + "S": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:comparator", + "count": 1 + }, + "pattern": [ + " # ", + "#X#", + "III" + ], + "key": { + "#": "minecraft:redstone_torch", + "I": "minecraft:stone", + "X": "minecraft:quartz" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:blue_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:cornflower" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_cut_copper_stairs", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_cut_copper_stairs", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dispenser", + "count": 1 + }, + "pattern": [ + "###", + "#X#", + "#R#" + ], + "key": { + "#": "minecraft:cobblestone", + "R": "minecraft:redstone", + "X": "minecraft:bow" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:flint_and_steel", + "count": 1 + }, + "ingredients": [ + "minecraft:iron_ingot", + "minecraft:flint" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:magenta_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:magenta_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:gray_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:gray_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pink_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:pink_tulip" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:green_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:green_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:loom", + "count": 1 + }, + "pattern": [ + "@@", + "##" + ], + "key": { + "#": "#minecraft:planks", + "@": "minecraft:string" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_oak_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:dark_oak_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_andesite_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:polished_andesite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:acacia_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:acacia_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_copper", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_copper", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_exposed_copper_bulb", + "count": 4 + }, + "pattern": [ + " C ", + "CBC", + " R " + ], + "key": { + "B": "minecraft:blaze_rod", + "C": "minecraft:waxed_exposed_copper", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:birch_hanging_sign", + "count": 6 + }, + "pattern": [ + "X X", + "###", + "###" + ], + "key": { + "#": "minecraft:stripped_birch_log", + "X": "minecraft:iron_chain" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cut_copper", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:copper_block" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:mushroom_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:bowl" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:iron_ingot", + "count": 9 + }, + "ingredients": [ + "minecraft:iron_block" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chiseled_nether_bricks", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:nether_brick_slab" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_copper_chain", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_copper_chain", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:black_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:black_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:yellow_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:dandelion" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:sugar", + "count": 1 + }, + "ingredients": [ + "minecraft:sugar_cane" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:acacia_planks", + "count": 4 + }, + "ingredients": [ + "#minecraft:acacia_logs" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_copper_trapdoor", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_copper_trapdoor", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:warped_sign", + "count": 3 + }, + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": "minecraft:warped_planks", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:eye_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:end_stone", + "S": "minecraft:eye_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:gray_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:gray_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spruce_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:spruce_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:campfire", + "count": 1 + }, + "pattern": [ + " S ", + "SCS", + "LLL" + ], + "key": { + "C": "#minecraft:coals", + "L": "#minecraft:logs", + "S": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:lapis_lazuli", + "count": 9 + }, + "ingredients": [ + "minecraft:lapis_block" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:lime_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:lime_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:coarse_dirt", + "count": 4 + }, + "pattern": [ + "DG", + "GD" + ], + "key": { + "D": "minecraft:dirt", + "G": "minecraft:gravel" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bone_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:bone_meal" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:yellow_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:yellow_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:firework_rocket", + "count": 3 + }, + "ingredients": [ + "minecraft:gunpowder", + "minecraft:paper" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bundle", + "count": 1 + }, + "pattern": [ + "-", + "#" + ], + "key": { + "#": "minecraft:leather", + "-": "minecraft:string" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cauldron", + "count": 1 + }, + "pattern": [ + "# #", + "# #", + "###" + ], + "key": { + "#": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:golden_shovel", + "count": 1 + }, + "pattern": [ + "X", + "#", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:gold_tool_materials" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_gray_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:light_gray_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:furnace", + "count": 1 + }, + "pattern": [ + "###", + "# #", + "###" + ], + "key": { + "#": "#minecraft:stone_crafting_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:grindstone", + "count": 1 + }, + "pattern": [ + "I-I", + "# #" + ], + "key": { + "#": "#minecraft:planks", + "-": "minecraft:stone_slab", + "I": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:acacia_button", + "count": 1 + }, + "ingredients": [ + "minecraft:acacia_planks" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_blue_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:light_blue_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pink_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:pink_dye" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:sugar", + "count": 3 + }, + "ingredients": [ + "minecraft:honey_bottle" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spruce_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:spruce_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mangrove_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:mangrove_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pale_oak_planks", + "count": 4 + }, + "ingredients": [ + "#minecraft:pale_oak_logs" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:purpur_pillar", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:purpur_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spruce_shelf", + "count": 6 + }, + "pattern": [ + "###", + " ", + "###" + ], + "key": { + "#": "minecraft:stripped_spruce_log" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:gray_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:gray_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:coal", + "count": 9 + }, + "ingredients": [ + "minecraft:coal_block" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_copper_bulb", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_copper_bulb", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_blue_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:light_blue_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:gray_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:gray_dye", + [ + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_blackstone_brick_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:polished_blackstone_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jungle_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:jungle_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:deepslate_tile_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:deepslate_tiles" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:end_crystal", + "count": 1 + }, + "pattern": [ + "GGG", + "GEG", + "GTG" + ], + "key": { + "E": "minecraft:ender_eye", + "G": "minecraft:glass", + "T": "minecraft:ghast_tear" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diamond_spear", + "count": 1 + }, + "pattern": [ + " X", + " # ", + "# " + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:diamond_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:birch_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:birch_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stonecutter", + "count": 1 + }, + "pattern": [ + " I ", + "###" + ], + "key": { + "#": "minecraft:stone", + "I": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_copper_bars", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_copper_bars", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:orange_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:orange_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:vex_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:cobblestone", + "S": "minecraft:vex_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_weathered_copper_bulb", + "count": 4 + }, + "pattern": [ + " C ", + "CBC", + " R " + ], + "key": { + "B": "minecraft:blaze_rod", + "C": "minecraft:waxed_weathered_copper", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spruce_fence", + "count": 3 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:spruce_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:tuff_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:tuff" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:cyan_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:cyan_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_spear", + "count": 1 + }, + "pattern": [ + " X", + " # ", + "# " + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:iron_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:purple_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:purple_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_andesite_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:polished_andesite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:honey_block", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:honey_bottle" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jungle_fence", + "count": 3 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:jungle_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cut_sandstone", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:sandstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crossbow", + "count": 1 + }, + "pattern": [ + "#&#", + "~$~", + " # " + ], + "key": { + "#": "minecraft:stick", + "$": "minecraft:tripwire_hook", + "&": "minecraft:iron_ingot", + "~": "minecraft:string" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:tinted_glass", + "count": 2 + }, + "pattern": [ + " S ", + "SGS", + " S " + ], + "key": { + "G": "minecraft:glass", + "S": "minecraft:amethyst_shard" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:crimson_sign", + "count": 3 + }, + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": "minecraft:crimson_planks", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:deepslate_tiles", + "count": 4 + }, + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": "minecraft:deepslate_bricks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:lily_of_the_valley" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_cut_copper_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:waxed_cut_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dropper", + "count": 1 + }, + "pattern": [ + "###", + "# #", + "#R#" + ], + "key": { + "#": "minecraft:cobblestone", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:flower_pot", + "count": 1 + }, + "pattern": [ + "# #", + " # " + ], + "key": { + "#": "minecraft:brick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brown_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:brown_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:lime_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:lime_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_copper_bulb", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_copper_bulb", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cherry_shelf", + "count": 6 + }, + "pattern": [ + "###", + " ", + "###" + ], + "key": { + "#": "minecraft:stripped_cherry_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:nether_brick_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:nether_bricks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:gray_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:gray_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cherry_sign", + "count": 3 + }, + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": "minecraft:cherry_planks", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:white_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:white_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:blue_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:blue_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:blue_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:blue_dye", + [ + "minecraft:black_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jungle_boat", + "count": 1 + }, + "pattern": [ + "# #", + "###" + ], + "key": { + "#": "minecraft:jungle_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:blue_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:blue_wool" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:lime_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:lime_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spectral_arrow", + "count": 2 + }, + "pattern": [ + " # ", + "#X#", + " # " + ], + "key": { + "#": "minecraft:glowstone_dust", + "X": "minecraft:arrow" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_copper_bulb", + "count": 1 + }, + "ingredients": [ + "minecraft:copper_bulb", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:white_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:white_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mangrove_trapdoor", + "count": 2 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:mangrove_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pumpkin_seeds", + "count": 4 + }, + "ingredients": [ + "minecraft:pumpkin" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_blue_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:light_blue_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:acacia_chest_boat", + "count": 1 + }, + "ingredients": [ + "minecraft:chest", + "minecraft:acacia_boat" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:bamboo_planks", + "count": 2 + }, + "ingredients": [ + "#minecraft:bamboo_blocks" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mangrove_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:mangrove_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_gray_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:light_gray_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cookie", + "count": 8 + }, + "pattern": [ + "#X#" + ], + "key": { + "#": "minecraft:wheat", + "X": "minecraft:cocoa_beans" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:map", + "count": 1 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:paper", + "X": "minecraft:compass" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:magenta_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:magenta_stained_glass" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:magenta_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:allium" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:magenta_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:magenta_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:gray_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:gray_stained_glass" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:blue_bed", + "count": 1 + }, + "ingredients": [ + "minecraft:blue_dye", + [ + "minecraft:black_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:red_bed", + "minecraft:yellow_bed", + "minecraft:white_bed" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_axe", + "count": 1 + }, + "pattern": [ + "XX", + "X#", + " #" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:copper_tool_materials" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:yellow_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:sunflower" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:deepslate_brick_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:deepslate_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diamond_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:diamond" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_copper_golem_statue", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_copper_golem_statue", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:exposed_copper_grate", + "count": 4 + }, + "pattern": [ + " M ", + "M M", + " M " + ], + "key": { + "M": "minecraft:exposed_copper" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_chiseled_copper", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_chiseled_copper", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:saddle", + "count": 1 + }, + "pattern": [ + " X ", + "X#X" + ], + "key": { + "#": "minecraft:iron_ingot", + "X": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:red_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:rose_bush" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dried_ghast", + "count": 1 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:ghast_tear", + "X": "minecraft:soul_sand" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_trapdoor", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:copper_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:orange_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:orange_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_mosaic", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:bamboo_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stripped_cherry_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:stripped_cherry_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:silence_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:cobbled_deepslate", + "S": "minecraft:silence_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:lime_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:lime_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:red_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spruce_sign", + "count": 3 + }, + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": "minecraft:spruce_planks", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mangrove_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:mangrove_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:spruce_hanging_sign", + "count": 6 + }, + "pattern": [ + "X X", + "###", + "###" + ], + "key": { + "#": "minecraft:stripped_spruce_log", + "X": "minecraft:iron_chain" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:orange_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:orange_stained_glass" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:shield", + "count": 1 + }, + "pattern": [ + "WoW", + "WWW", + " W " + ], + "key": { + "W": "#minecraft:wooden_tool_materials", + "o": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chiseled_quartz_block", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:quartz_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mud_bricks", + "count": 4 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:packed_mud" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:acacia_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:acacia_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:brown_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:brown_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:white_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:lily_of_the_valley" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_blue_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:light_blue_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_copper_chest", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_copper_chest", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:yellow_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:yellow_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mossy_stone_brick_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:mossy_stone_bricks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:polished_blackstone_button", + "count": 1 + }, + "ingredients": [ + "minecraft:polished_blackstone" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_shovel", + "count": 1 + }, + "pattern": [ + "X", + "#", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:copper_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:red_nether_brick_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:red_nether_bricks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:bone_meal", + "count": 9 + }, + "ingredients": [ + "minecraft:bone_block" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oak_shelf", + "count": 6 + }, + "pattern": [ + "###", + " ", + "###" + ], + "key": { + "#": "minecraft:stripped_oak_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:decorated_pot", + "count": 1 + }, + "pattern": [ + " # ", + "# #", + " # " + ], + "key": { + "#": "minecraft:brick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_granite", + "count": 4 + }, + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": "minecraft:granite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mangrove_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:mangrove_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_torch", + "count": 4 + }, + "pattern": [ + "C", + "X", + "#" + ], + "key": { + "#": "minecraft:stick", + "C": "minecraft:copper_nugget", + "X": [ + "minecraft:coal", + "minecraft:charcoal" + ] + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:rabbit_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:baked_potato", + "minecraft:cooked_rabbit", + "minecraft:bowl", + "minecraft:carrot", + "minecraft:brown_mushroom" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:granite_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:granite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:deepslate_brick_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:deepslate_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_grate", + "count": 4 + }, + "pattern": [ + " M ", + "M M", + " M " + ], + "key": { + "M": "minecraft:copper_block" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:andesite_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:andesite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_boots", + "count": 1 + }, + "pattern": [ + "X X", + "X X" + ], + "key": { + "X": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pink_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:pink_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:soul_campfire", + "count": 1 + }, + "pattern": [ + " S ", + "S#S", + "LLL" + ], + "key": { + "#": "#minecraft:soul_fire_base_blocks", + "L": "#minecraft:logs", + "S": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_oak_shelf", + "count": 6 + }, + "pattern": [ + "###", + " ", + "###" + ], + "key": { + "#": "minecraft:stripped_pale_oak_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:shears", + "count": 1 + }, + "pattern": [ + " #", + "# " + ], + "key": { + "#": "minecraft:iron_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:white_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:white_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:exposed_copper_bulb", + "count": 4 + }, + "pattern": [ + " C ", + "CBC", + " R " + ], + "key": { + "B": "minecraft:blaze_rod", + "C": "minecraft:exposed_copper", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:brown_concrete_powder", + "count": 8 + }, + "ingredients": [ + "minecraft:brown_dye", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:sand", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel", + "minecraft:gravel" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:red_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:beetroot" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bow", + "count": 1 + }, + "pattern": [ + " #X", + "# X", + " #X" + ], + "key": { + "#": "minecraft:stick", + "X": "minecraft:string" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:soul_torch", + "count": 4 + }, + "pattern": [ + "X", + "#", + "S" + ], + "key": { + "#": "minecraft:stick", + "S": "#minecraft:soul_fire_base_blocks", + "X": [ + "minecraft:coal", + "minecraft:charcoal" + ] + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pink_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:red_dye", + "minecraft:white_dye" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:mossy_stone_bricks", + "count": 1 + }, + "ingredients": [ + "minecraft:stone_bricks", + "minecraft:moss_block" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:orange_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:orange_tulip" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diamond_chestplate", + "count": 1 + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "key": { + "X": "minecraft:diamond" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:cyan_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:cyan_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:copper_sword", + "count": 1 + }, + "pattern": [ + "X", + "X", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:copper_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:green_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:green_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:red_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:red_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:yellow_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:yellow_wool" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:red_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:poppy" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mud_brick_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:mud_bricks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_copper_bars", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_copper_bars", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:weathered_cut_copper_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:weathered_cut_copper" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:creeper_banner_pattern", + "count": 1 + }, + "ingredients": [ + "minecraft:paper", + "minecraft:creeper_head" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chiseled_copper", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:cut_copper_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:black_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:black_wool" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:coal_block", + "count": 1 + }, + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": "minecraft:coal" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:smooth_quartz_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:smooth_quartz" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:chiseled_stone_bricks", + "count": 1 + }, + "pattern": [ + "#", + "#" + ], + "key": { + "#": "minecraft:stone_brick_slab" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:golden_boots", + "count": 1 + }, + "pattern": [ + "X X", + "X X" + ], + "key": { + "X": "minecraft:gold_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:exposed_cut_copper_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:exposed_cut_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:gray_harness", + "count": 1 + }, + "pattern": [ + "LLL", + "G#G" + ], + "key": { + "#": "minecraft:gray_wool", + "G": "minecraft:glass", + "L": "minecraft:leather" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_copper_trapdoor", + "count": 1 + }, + "ingredients": [ + "minecraft:copper_trapdoor", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:white_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:white_wool" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:mojang_banner_pattern", + "count": 1 + }, + "ingredients": [ + "minecraft:paper", + "minecraft:enchanted_golden_apple" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_gray_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:azure_bluet" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:end_stone_brick_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:end_stone_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_exposed_cut_copper_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:waxed_exposed_cut_copper" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:prismarine_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:prismarine" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:blue_stained_glass_pane", + "count": 8 + }, + "pattern": [ + "###", + "#$#", + "###" + ], + "key": { + "#": "minecraft:glass_pane", + "$": "minecraft:blue_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:golden_leggings", + "count": 1 + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "key": { + "X": "minecraft:gold_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_oak_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:dark_oak_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:yellow_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:yellow_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:soul_lantern", + "count": 1 + }, + "pattern": [ + "XXX", + "X#X", + "XXX" + ], + "key": { + "#": "minecraft:soul_torch", + "X": "minecraft:iron_nugget" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:smooth_quartz_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:smooth_quartz" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:orange_dye", + "count": 1 + }, + "ingredients": [ + "minecraft:torchflower" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mud_brick_wall", + "count": 6 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:mud_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:jungle_shelf", + "count": 6 + }, + "pattern": [ + "###", + " ", + "###" + ], + "key": { + "#": "minecraft:stripped_jungle_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:yellow_bed", + "count": 1 + }, + "pattern": [ + "###", + "XXX" + ], + "key": { + "#": "minecraft:yellow_wool", + "X": "#minecraft:planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_sign", + "count": 3 + }, + "pattern": [ + "###", + "###", + " X " + ], + "key": { + "#": "minecraft:bamboo_planks", + "X": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_weathered_cut_copper_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:waxed_weathered_cut_copper" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_cut_copper_stairs", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_cut_copper_stairs", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:beetroot_soup", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:beetroot", + "minecraft:beetroot", + "minecraft:beetroot", + "minecraft:beetroot", + "minecraft:beetroot", + "minecraft:beetroot" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:clock", + "count": 1 + }, + "pattern": [ + " # ", + "#X#", + " # " + ], + "key": { + "#": "minecraft:gold_ingot", + "X": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:birch_trapdoor", + "count": 2 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:birch_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:sandstone", + "count": 1 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:sand" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:lightning_rod", + "count": 1 + }, + "pattern": [ + "#", + "#", + "#" + ], + "key": { + "#": "minecraft:copper_ingot" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:sentry_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:cobblestone", + "S": "minecraft:sentry_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:red_wool", + "count": 1 + }, + "ingredients": [ + "minecraft:red_dye", + [ + "minecraft:black_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:cyan_wool", + "minecraft:gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:light_gray_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:orange_wool", + "minecraft:pink_wool", + "minecraft:purple_wool", + "minecraft:yellow_wool", + "minecraft:white_wool" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:yellow_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:yellow_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bamboo_door", + "count": 3 + }, + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": "minecraft:bamboo_planks" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:green_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:green_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:magma_cream", + "count": 1 + }, + "ingredients": [ + "minecraft:blaze_powder", + "minecraft:slime_ball" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_diorite", + "count": 4 + }, + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": "minecraft:diorite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:oak_hanging_sign", + "count": 6 + }, + "pattern": [ + "X X", + "###", + "###" + ], + "key": { + "#": "minecraft:stripped_oak_log", + "X": "minecraft:iron_chain" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_exposed_copper_lantern", + "count": 1 + }, + "ingredients": [ + "minecraft:exposed_copper_lantern", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:raw_gold", + "count": 9 + }, + "ingredients": [ + "minecraft:raw_gold_block" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_diorite_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:polished_diorite" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:end_rod", + "count": 4 + }, + "pattern": [ + "/", + "#" + ], + "key": { + "#": "minecraft:popped_chorus_fruit", + "/": "minecraft:blaze_rod" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_oxidized_cut_copper", + "count": 1 + }, + "ingredients": [ + "minecraft:oxidized_cut_copper", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:orange_carpet", + "count": 3 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:orange_wool" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:allium" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_copper_lantern", + "count": 1 + }, + "ingredients": [ + "minecraft:copper_lantern", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:light_gray_harness", + "count": 1 + }, + "ingredients": [ + "minecraft:light_gray_dye", + [ + "minecraft:black_harness", + "minecraft:blue_harness", + "minecraft:brown_harness", + "minecraft:cyan_harness", + "minecraft:gray_harness", + "minecraft:green_harness", + "minecraft:light_blue_harness", + "minecraft:lime_harness", + "minecraft:magenta_harness", + "minecraft:orange_harness", + "minecraft:pink_harness", + "minecraft:purple_harness", + "minecraft:red_harness", + "minecraft:yellow_harness", + "minecraft:white_harness" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:redstone", + "count": 9 + }, + "ingredients": [ + "minecraft:redstone_block" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:andesite", + "count": 2 + }, + "ingredients": [ + "minecraft:diorite", + "minecraft:cobblestone" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:waxed_copper_bulb", + "count": 4 + }, + "pattern": [ + " C ", + "CBC", + " R " + ], + "key": { + "B": "minecraft:blaze_rod", + "C": "minecraft:waxed_copper_block", + "R": "minecraft:redstone" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:light_gray_stained_glass_pane", + "count": 16 + }, + "pattern": [ + "###", + "###" + ], + "key": { + "#": "minecraft:light_gray_stained_glass" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:scaffolding", + "count": 6 + }, + "pattern": [ + "I~I", + "I I", + "I I" + ], + "key": { + "I": "minecraft:bamboo", + "~": "minecraft:string" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:polished_blackstone_pressure_plate", + "count": 1 + }, + "pattern": [ + "##" + ], + "key": { + "#": "minecraft:polished_blackstone" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:diamond", + "count": 9 + }, + "ingredients": [ + "minecraft:diamond_block" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:iron_pickaxe", + "count": 1 + }, + "pattern": [ + "XXX", + " # ", + " # " + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:iron_tool_materials" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:deepslate_bricks", + "count": 4 + }, + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": "minecraft:polished_deepslate" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:purple_candle", + "count": 1 + }, + "ingredients": [ + "minecraft:candle", + "minecraft:purple_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:rib_armor_trim_smithing_template", + "count": 2 + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "key": { + "#": "minecraft:diamond", + "C": "minecraft:netherrack", + "S": "minecraft:rib_armor_trim_smithing_template" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:pink_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:peony" + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:suspicious_stew", + "count": 1 + }, + "ingredients": [ + "minecraft:bowl", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:red_tulip" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:acacia_boat", + "count": 1 + }, + "pattern": [ + "# #", + "###" + ], + "key": { + "#": "minecraft:acacia_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diamond_leggings", + "count": 1 + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "key": { + "X": "minecraft:diamond" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:warped_hanging_sign", + "count": 6 + }, + "pattern": [ + "X X", + "###", + "###" + ], + "key": { + "#": "minecraft:stripped_warped_stem", + "X": "minecraft:iron_chain" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:dark_prismarine_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": "minecraft:dark_prismarine" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:gray_banner", + "count": 1 + }, + "pattern": [ + "###", + "###", + " | " + ], + "key": { + "#": "minecraft:gray_wool", + "|": "minecraft:stick" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:yellow_terracotta", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:terracotta", + "X": "minecraft:yellow_dye" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:pale_oak_hanging_sign", + "count": 6 + }, + "pattern": [ + "X X", + "###", + "###" + ], + "key": { + "#": "minecraft:stripped_pale_oak_log", + "X": "minecraft:iron_chain" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:glistering_melon_slice", + "count": 1 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:gold_nugget", + "X": "minecraft:melon_slice" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:gray_dye", + "count": 2 + }, + "ingredients": [ + "minecraft:black_dye", + "minecraft:white_dye" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:bookshelf", + "count": 1 + }, + "pattern": [ + "###", + "XXX", + "###" + ], + "key": { + "#": "#minecraft:planks", + "X": "minecraft:book" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:mossy_stone_brick_stairs", + "count": 4 + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": "minecraft:mossy_stone_bricks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:warped_fence", + "count": 3 + }, + "pattern": [ + "W#W", + "W#W" + ], + "key": { + "#": "minecraft:stick", + "W": "minecraft:warped_planks" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:cyan_stained_glass", + "count": 8 + }, + "pattern": [ + "###", + "#X#", + "###" + ], + "key": { + "#": "minecraft:glass", + "X": "minecraft:cyan_dye" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:waxed_weathered_copper_lantern", + "count": 1 + }, + "ingredients": [ + "minecraft:weathered_copper_lantern", + "minecraft:honeycomb" + ] + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:stripped_acacia_wood", + "count": 3 + }, + "pattern": [ + "##", + "##" + ], + "key": { + "#": "minecraft:stripped_acacia_log" + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:quartz_slab", + "count": 6 + }, + "pattern": [ + "###" + ], + "key": { + "#": [ + "minecraft:chiseled_quartz_block", + "minecraft:quartz_block", + "minecraft:quartz_pillar" + ] + } + }, + { + "type": "minecraft:crafting_shaped", + "result": { + "item": "minecraft:diamond_sword", + "count": 1 + }, + "pattern": [ + "X", + "X", + "#" + ], + "key": { + "#": "minecraft:stick", + "X": "#minecraft:diamond_tool_materials" + } + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:green_carpet", + "count": 1 + }, + "ingredients": [ + "minecraft:green_dye", + [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:cyan_carpet", + "minecraft:gray_carpet", + "minecraft:light_blue_carpet", + "minecraft:light_gray_carpet", + "minecraft:lime_carpet", + "minecraft:magenta_carpet", + "minecraft:orange_carpet", + "minecraft:pink_carpet", + "minecraft:purple_carpet", + "minecraft:red_carpet", + "minecraft:yellow_carpet", + "minecraft:white_carpet" + ] + ] + }, + { + "type": "minecraft:crafting_shapeless", + "result": { + "item": "minecraft:nether_wart_block", + "count": 1 + }, + "ingredients": [ + "minecraft:nether_wart", + "minecraft:nether_wart", + "minecraft:nether_wart", + "minecraft:nether_wart", + "minecraft:nether_wart", + "minecraft:nether_wart", + "minecraft:nether_wart", + "minecraft:nether_wart", + "minecraft:nether_wart" + ] + } + ] + }, + "itemLookup": { + "minecraft:acacia_boat": 1, + "minecraft:acacia_button": 2, + "minecraft:acacia_chest_boat": 3, + "minecraft:acacia_door": 4, + "minecraft:acacia_fence": 5, + "minecraft:acacia_fence_gate": 6, + "minecraft:acacia_hanging_sign": 7, + "minecraft:acacia_planks": 8, + "minecraft:acacia_pressure_plate": 9, + "minecraft:acacia_shelf": 10, + "minecraft:acacia_sign": 11, + "minecraft:acacia_slab": 12, + "minecraft:acacia_stairs": 13, + "minecraft:acacia_trapdoor": 14, + "minecraft:acacia_wood": 15, + "minecraft:activator_rail": 16, + "minecraft:amethyst_block": 17, + "minecraft:andesite": 18, + "minecraft:andesite_slab": 19, + "minecraft:andesite_stairs": 20, + "minecraft:andesite_wall": 21, + "minecraft:anvil": 22, + "minecraft:armor_stand": 23, + "minecraft:arrow": 24, + "minecraft:bamboo_block": 25, + "minecraft:bamboo_button": 26, + "minecraft:bamboo_chest_raft": 27, + "minecraft:bamboo_door": 28, + "minecraft:bamboo_fence": 29, + "minecraft:bamboo_fence_gate": 30, + "minecraft:bamboo_hanging_sign": 31, + "minecraft:bamboo_mosaic": 32, + "minecraft:bamboo_mosaic_slab": 33, + "minecraft:bamboo_mosaic_stairs": 34, + "minecraft:bamboo_planks": 35, + "minecraft:bamboo_pressure_plate": 36, + "minecraft:bamboo_raft": 37, + "minecraft:bamboo_shelf": 38, + "minecraft:bamboo_sign": 39, + "minecraft:bamboo_slab": 40, + "minecraft:bamboo_stairs": 41, + "minecraft:bamboo_trapdoor": 42, + "minecraft:barrel": 43, + "minecraft:beacon": 44, + "minecraft:beehive": 45, + "minecraft:beetroot_soup": 46, + "minecraft:birch_boat": 47, + "minecraft:birch_button": 48, + "minecraft:birch_chest_boat": 49, + "minecraft:birch_door": 50, + "minecraft:birch_fence": 51, + "minecraft:birch_fence_gate": 52, + "minecraft:birch_hanging_sign": 53, + "minecraft:birch_planks": 54, + "minecraft:birch_pressure_plate": 55, + "minecraft:birch_shelf": 56, + "minecraft:birch_sign": 57, + "minecraft:birch_slab": 58, + "minecraft:birch_stairs": 59, + "minecraft:birch_trapdoor": 60, + "minecraft:birch_wood": 61, + "minecraft:black_banner": 62, + "minecraft:black_bed": 63, + "minecraft:black_bundle": 64, + "minecraft:black_candle": 65, + "minecraft:black_carpet": 66, + "minecraft:black_concrete_powder": 67, + "minecraft:black_dye": 68, + "minecraft:black_harness": 69, + "minecraft:black_shulker_box": 70, + "minecraft:black_stained_glass": 71, + "minecraft:black_stained_glass_pane": 72, + "minecraft:black_terracotta": 73, + "minecraft:black_wool": 74, + "minecraft:blackstone_slab": 75, + "minecraft:blackstone_stairs": 76, + "minecraft:blackstone_wall": 77, + "minecraft:blast_furnace": 78, + "minecraft:blaze_powder": 79, + "minecraft:blue_banner": 80, + "minecraft:blue_bed": 81, + "minecraft:blue_bundle": 82, + "minecraft:blue_candle": 83, + "minecraft:blue_carpet": 84, + "minecraft:blue_concrete_powder": 85, + "minecraft:blue_dye": 86, + "minecraft:blue_harness": 87, + "minecraft:blue_ice": 88, + "minecraft:blue_shulker_box": 89, + "minecraft:blue_stained_glass": 90, + "minecraft:blue_stained_glass_pane": 91, + "minecraft:blue_terracotta": 92, + "minecraft:blue_wool": 93, + "minecraft:bolt_armor_trim_smithing_template": 94, + "minecraft:bone_block": 95, + "minecraft:bone_meal": 96, + "minecraft:book": 97, + "minecraft:bookshelf": 98, + "minecraft:bordure_indented_banner_pattern": 99, + "minecraft:bow": 100, + "minecraft:bowl": 101, + "minecraft:bread": 102, + "minecraft:brewing_stand": 103, + "minecraft:brick_slab": 104, + "minecraft:brick_stairs": 105, + "minecraft:brick_wall": 106, + "minecraft:bricks": 107, + "minecraft:brown_banner": 108, + "minecraft:brown_bed": 109, + "minecraft:brown_bundle": 110, + "minecraft:brown_candle": 111, + "minecraft:brown_carpet": 112, + "minecraft:brown_concrete_powder": 113, + "minecraft:brown_dye": 114, + "minecraft:brown_harness": 115, + "minecraft:brown_shulker_box": 116, + "minecraft:brown_stained_glass": 117, + "minecraft:brown_stained_glass_pane": 118, + "minecraft:brown_terracotta": 119, + "minecraft:brown_wool": 120, + "minecraft:brush": 121, + "minecraft:bucket": 122, + "minecraft:bundle": 123, + "minecraft:cake": 124, + "minecraft:calibrated_sculk_sensor": 125, + "minecraft:campfire": 126, + "minecraft:candle": 127, + "minecraft:carrot_on_a_stick": 128, + "minecraft:cartography_table": 129, + "minecraft:cauldron": 130, + "minecraft:cherry_boat": 131, + "minecraft:cherry_button": 132, + "minecraft:cherry_chest_boat": 133, + "minecraft:cherry_door": 134, + "minecraft:cherry_fence": 135, + "minecraft:cherry_fence_gate": 136, + "minecraft:cherry_hanging_sign": 137, + "minecraft:cherry_planks": 138, + "minecraft:cherry_pressure_plate": 139, + "minecraft:cherry_shelf": 140, + "minecraft:cherry_sign": 141, + "minecraft:cherry_slab": 142, + "minecraft:cherry_stairs": 143, + "minecraft:cherry_trapdoor": 144, + "minecraft:cherry_wood": 145, + "minecraft:chest": 146, + "minecraft:chest_minecart": 147, + "minecraft:chiseled_bookshelf": 148, + "minecraft:chiseled_copper": 149, + "minecraft:chiseled_deepslate": 150, + "minecraft:chiseled_nether_bricks": 151, + "minecraft:chiseled_polished_blackstone": 152, + "minecraft:chiseled_quartz_block": 153, + "minecraft:chiseled_red_sandstone": 154, + "minecraft:chiseled_resin_bricks": 155, + "minecraft:chiseled_sandstone": 156, + "minecraft:chiseled_stone_bricks": 157, + "minecraft:chiseled_tuff": 158, + "minecraft:chiseled_tuff_bricks": 159, + "minecraft:clay": 160, + "minecraft:clock": 161, + "minecraft:coal": 162, + "minecraft:coal_block": 163, + "minecraft:coarse_dirt": 164, + "minecraft:coast_armor_trim_smithing_template": 165, + "minecraft:cobbled_deepslate_slab": 166, + "minecraft:cobbled_deepslate_stairs": 167, + "minecraft:cobbled_deepslate_wall": 168, + "minecraft:cobblestone_slab": 169, + "minecraft:cobblestone_stairs": 170, + "minecraft:cobblestone_wall": 171, + "minecraft:comparator": 172, + "minecraft:compass": 173, + "minecraft:composter": 174, + "minecraft:conduit": 175, + "minecraft:cookie": 176, + "minecraft:copper_axe": 177, + "minecraft:copper_bars": 178, + "minecraft:copper_block": 179, + "minecraft:copper_boots": 180, + "minecraft:copper_bulb": 181, + "minecraft:copper_chain": 182, + "minecraft:copper_chest": 183, + "minecraft:copper_chestplate": 184, + "minecraft:copper_door": 185, + "minecraft:copper_grate": 186, + "minecraft:copper_helmet": 187, + "minecraft:copper_hoe": 188, + "minecraft:copper_ingot": 189, + "minecraft:copper_lantern": 190, + "minecraft:copper_leggings": 191, + "minecraft:copper_nugget": 192, + "minecraft:copper_pickaxe": 193, + "minecraft:copper_shovel": 194, + "minecraft:copper_spear": 195, + "minecraft:copper_sword": 196, + "minecraft:copper_torch": 197, + "minecraft:copper_trapdoor": 198, + "minecraft:crafter": 199, + "minecraft:crafting_table": 200, + "minecraft:creaking_heart": 201, + "minecraft:creeper_banner_pattern": 202, + "minecraft:crimson_button": 203, + "minecraft:crimson_door": 204, + "minecraft:crimson_fence": 205, + "minecraft:crimson_fence_gate": 206, + "minecraft:crimson_hanging_sign": 207, + "minecraft:crimson_hyphae": 208, + "minecraft:crimson_planks": 209, + "minecraft:crimson_pressure_plate": 210, + "minecraft:crimson_shelf": 211, + "minecraft:crimson_sign": 212, + "minecraft:crimson_slab": 213, + "minecraft:crimson_stairs": 214, + "minecraft:crimson_trapdoor": 215, + "minecraft:crossbow": 216, + "minecraft:cut_copper": 217, + "minecraft:cut_copper_slab": 218, + "minecraft:cut_copper_stairs": 219, + "minecraft:cut_red_sandstone": 220, + "minecraft:cut_red_sandstone_slab": 221, + "minecraft:cut_sandstone": 222, + "minecraft:cut_sandstone_slab": 223, + "minecraft:cyan_banner": 224, + "minecraft:cyan_bed": 225, + "minecraft:cyan_bundle": 226, + "minecraft:cyan_candle": 227, + "minecraft:cyan_carpet": 228, + "minecraft:cyan_concrete_powder": 229, + "minecraft:cyan_dye": 230, + "minecraft:cyan_harness": 231, + "minecraft:cyan_shulker_box": 232, + "minecraft:cyan_stained_glass": 233, + "minecraft:cyan_stained_glass_pane": 234, + "minecraft:cyan_terracotta": 235, + "minecraft:cyan_wool": 236, + "minecraft:dark_oak_boat": 237, + "minecraft:dark_oak_button": 238, + "minecraft:dark_oak_chest_boat": 239, + "minecraft:dark_oak_door": 240, + "minecraft:dark_oak_fence": 241, + "minecraft:dark_oak_fence_gate": 242, + "minecraft:dark_oak_hanging_sign": 243, + "minecraft:dark_oak_planks": 244, + "minecraft:dark_oak_pressure_plate": 245, + "minecraft:dark_oak_shelf": 246, + "minecraft:dark_oak_sign": 247, + "minecraft:dark_oak_slab": 248, + "minecraft:dark_oak_stairs": 249, + "minecraft:dark_oak_trapdoor": 250, + "minecraft:dark_oak_wood": 251, + "minecraft:dark_prismarine": 252, + "minecraft:dark_prismarine_slab": 253, + "minecraft:dark_prismarine_stairs": 254, + "minecraft:daylight_detector": 255, + "minecraft:decorated_pot": 256, + "minecraft:deepslate_brick_slab": 257, + "minecraft:deepslate_brick_stairs": 258, + "minecraft:deepslate_brick_wall": 259, + "minecraft:deepslate_bricks": 260, + "minecraft:deepslate_tile_slab": 261, + "minecraft:deepslate_tile_stairs": 262, + "minecraft:deepslate_tile_wall": 263, + "minecraft:deepslate_tiles": 264, + "minecraft:detector_rail": 265, + "minecraft:diamond": 266, + "minecraft:diamond_axe": 267, + "minecraft:diamond_block": 268, + "minecraft:diamond_boots": 269, + "minecraft:diamond_chestplate": 270, + "minecraft:diamond_helmet": 271, + "minecraft:diamond_hoe": 272, + "minecraft:diamond_leggings": 273, + "minecraft:diamond_pickaxe": 274, + "minecraft:diamond_shovel": 275, + "minecraft:diamond_spear": 276, + "minecraft:diamond_sword": 277, + "minecraft:diorite": 278, + "minecraft:diorite_slab": 279, + "minecraft:diorite_stairs": 280, + "minecraft:diorite_wall": 281, + "minecraft:dispenser": 282, + "minecraft:dried_ghast": 283, + "minecraft:dried_kelp": 284, + "minecraft:dried_kelp_block": 285, + "minecraft:dripstone_block": 286, + "minecraft:dropper": 287, + "minecraft:dune_armor_trim_smithing_template": 288, + "minecraft:emerald": 289, + "minecraft:emerald_block": 290, + "minecraft:enchanting_table": 291, + "minecraft:end_crystal": 292, + "minecraft:end_rod": 293, + "minecraft:end_stone_brick_slab": 294, + "minecraft:end_stone_brick_stairs": 295, + "minecraft:end_stone_brick_wall": 296, + "minecraft:end_stone_bricks": 297, + "minecraft:ender_chest": 298, + "minecraft:ender_eye": 299, + "minecraft:exposed_chiseled_copper": 300, + "minecraft:exposed_copper_bulb": 301, + "minecraft:exposed_copper_grate": 302, + "minecraft:exposed_cut_copper": 303, + "minecraft:exposed_cut_copper_slab": 304, + "minecraft:exposed_cut_copper_stairs": 305, + "minecraft:eye_armor_trim_smithing_template": 306, + "minecraft:fermented_spider_eye": 307, + "minecraft:field_masoned_banner_pattern": 308, + "minecraft:fire_charge": 309, + "minecraft:firework_rocket": 310, + "minecraft:fishing_rod": 311, + "minecraft:fletching_table": 312, + "minecraft:flint_and_steel": 313, + "minecraft:flow_armor_trim_smithing_template": 314, + "minecraft:flower_banner_pattern": 315, + "minecraft:flower_pot": 316, + "minecraft:furnace": 317, + "minecraft:furnace_minecart": 318, + "minecraft:glass_bottle": 319, + "minecraft:glass_pane": 320, + "minecraft:glistering_melon_slice": 321, + "minecraft:glow_item_frame": 322, + "minecraft:glowstone": 323, + "minecraft:gold_block": 324, + "minecraft:gold_ingot": 325, + "minecraft:gold_nugget": 326, + "minecraft:golden_apple": 327, + "minecraft:golden_axe": 328, + "minecraft:golden_boots": 329, + "minecraft:golden_carrot": 330, + "minecraft:golden_chestplate": 331, + "minecraft:golden_helmet": 332, + "minecraft:golden_hoe": 333, + "minecraft:golden_leggings": 334, + "minecraft:golden_pickaxe": 335, + "minecraft:golden_shovel": 336, + "minecraft:golden_spear": 337, + "minecraft:golden_sword": 338, + "minecraft:granite": 339, + "minecraft:granite_slab": 340, + "minecraft:granite_stairs": 341, + "minecraft:granite_wall": 342, + "minecraft:gray_banner": 343, + "minecraft:gray_bed": 344, + "minecraft:gray_bundle": 345, + "minecraft:gray_candle": 346, + "minecraft:gray_carpet": 347, + "minecraft:gray_concrete_powder": 348, + "minecraft:gray_dye": 349, + "minecraft:gray_harness": 350, + "minecraft:gray_shulker_box": 351, + "minecraft:gray_stained_glass": 352, + "minecraft:gray_stained_glass_pane": 353, + "minecraft:gray_terracotta": 354, + "minecraft:gray_wool": 355, + "minecraft:green_banner": 356, + "minecraft:green_bed": 357, + "minecraft:green_bundle": 358, + "minecraft:green_candle": 359, + "minecraft:green_carpet": 360, + "minecraft:green_concrete_powder": 361, + "minecraft:green_harness": 362, + "minecraft:green_shulker_box": 363, + "minecraft:green_stained_glass": 364, + "minecraft:green_stained_glass_pane": 365, + "minecraft:green_terracotta": 366, + "minecraft:green_wool": 367, + "minecraft:grindstone": 368, + "minecraft:hay_block": 369, + "minecraft:heavy_weighted_pressure_plate": 370, + "minecraft:honey_block": 371, + "minecraft:honey_bottle": 372, + "minecraft:honeycomb_block": 373, + "minecraft:hopper": 374, + "minecraft:hopper_minecart": 375, + "minecraft:host_armor_trim_smithing_template": 376, + "minecraft:iron_axe": 377, + "minecraft:iron_bars": 378, + "minecraft:iron_block": 379, + "minecraft:iron_boots": 380, + "minecraft:iron_chain": 381, + "minecraft:iron_chestplate": 382, + "minecraft:iron_door": 383, + "minecraft:iron_helmet": 384, + "minecraft:iron_hoe": 385, + "minecraft:iron_ingot": 386, + "minecraft:iron_leggings": 387, + "minecraft:iron_nugget": 388, + "minecraft:iron_pickaxe": 389, + "minecraft:iron_shovel": 390, + "minecraft:iron_spear": 391, + "minecraft:iron_sword": 392, + "minecraft:iron_trapdoor": 393, + "minecraft:item_frame": 394, + "minecraft:jack_o_lantern": 395, + "minecraft:jukebox": 396, + "minecraft:jungle_boat": 397, + "minecraft:jungle_button": 398, + "minecraft:jungle_chest_boat": 399, + "minecraft:jungle_door": 400, + "minecraft:jungle_fence": 401, + "minecraft:jungle_fence_gate": 402, + "minecraft:jungle_hanging_sign": 403, + "minecraft:jungle_planks": 404, + "minecraft:jungle_pressure_plate": 405, + "minecraft:jungle_shelf": 406, + "minecraft:jungle_sign": 407, + "minecraft:jungle_slab": 408, + "minecraft:jungle_stairs": 409, + "minecraft:jungle_trapdoor": 410, + "minecraft:jungle_wood": 411, + "minecraft:ladder": 412, + "minecraft:lantern": 413, + "minecraft:lapis_block": 414, + "minecraft:lapis_lazuli": 415, + "minecraft:lead": 416, + "minecraft:leather": 417, + "minecraft:leather_boots": 418, + "minecraft:leather_chestplate": 419, + "minecraft:leather_helmet": 420, + "minecraft:leather_horse_armor": 421, + "minecraft:leather_leggings": 422, + "minecraft:lectern": 423, + "minecraft:lever": 424, + "minecraft:light_blue_banner": 425, + "minecraft:light_blue_bed": 426, + "minecraft:light_blue_bundle": 427, + "minecraft:light_blue_candle": 428, + "minecraft:light_blue_carpet": 429, + "minecraft:light_blue_concrete_powder": 430, + "minecraft:light_blue_dye": 431, + "minecraft:light_blue_harness": 432, + "minecraft:light_blue_shulker_box": 433, + "minecraft:light_blue_stained_glass": 434, + "minecraft:light_blue_stained_glass_pane": 435, + "minecraft:light_blue_terracotta": 436, + "minecraft:light_blue_wool": 437, + "minecraft:light_gray_banner": 438, + "minecraft:light_gray_bed": 439, + "minecraft:light_gray_bundle": 440, + "minecraft:light_gray_candle": 441, + "minecraft:light_gray_carpet": 442, + "minecraft:light_gray_concrete_powder": 443, + "minecraft:light_gray_dye": 444, + "minecraft:light_gray_harness": 445, + "minecraft:light_gray_shulker_box": 446, + "minecraft:light_gray_stained_glass": 447, + "minecraft:light_gray_stained_glass_pane": 448, + "minecraft:light_gray_terracotta": 449, + "minecraft:light_gray_wool": 450, + "minecraft:light_weighted_pressure_plate": 451, + "minecraft:lightning_rod": 452, + "minecraft:lime_banner": 453, + "minecraft:lime_bed": 454, + "minecraft:lime_bundle": 455, + "minecraft:lime_candle": 456, + "minecraft:lime_carpet": 457, + "minecraft:lime_concrete_powder": 458, + "minecraft:lime_dye": 459, + "minecraft:lime_harness": 460, + "minecraft:lime_shulker_box": 461, + "minecraft:lime_stained_glass": 462, + "minecraft:lime_stained_glass_pane": 463, + "minecraft:lime_terracotta": 464, + "minecraft:lime_wool": 465, + "minecraft:lodestone": 466, + "minecraft:loom": 467, + "minecraft:mace": 468, + "minecraft:magenta_banner": 469, + "minecraft:magenta_bed": 470, + "minecraft:magenta_bundle": 471, + "minecraft:magenta_candle": 472, + "minecraft:magenta_carpet": 473, + "minecraft:magenta_concrete_powder": 474, + "minecraft:magenta_dye": 475, + "minecraft:magenta_harness": 476, + "minecraft:magenta_shulker_box": 477, + "minecraft:magenta_stained_glass": 478, + "minecraft:magenta_stained_glass_pane": 479, + "minecraft:magenta_terracotta": 480, + "minecraft:magenta_wool": 481, + "minecraft:magma_block": 482, + "minecraft:magma_cream": 483, + "minecraft:mangrove_boat": 484, + "minecraft:mangrove_button": 485, + "minecraft:mangrove_chest_boat": 486, + "minecraft:mangrove_door": 487, + "minecraft:mangrove_fence": 488, + "minecraft:mangrove_fence_gate": 489, + "minecraft:mangrove_hanging_sign": 490, + "minecraft:mangrove_planks": 491, + "minecraft:mangrove_pressure_plate": 492, + "minecraft:mangrove_shelf": 493, + "minecraft:mangrove_sign": 494, + "minecraft:mangrove_slab": 495, + "minecraft:mangrove_stairs": 496, + "minecraft:mangrove_trapdoor": 497, + "minecraft:mangrove_wood": 498, + "minecraft:map": 499, + "minecraft:melon": 500, + "minecraft:melon_seeds": 501, + "minecraft:minecart": 502, + "minecraft:mojang_banner_pattern": 503, + "minecraft:moss_carpet": 504, + "minecraft:mossy_cobblestone": 505, + "minecraft:mossy_cobblestone_slab": 506, + "minecraft:mossy_cobblestone_stairs": 507, + "minecraft:mossy_cobblestone_wall": 508, + "minecraft:mossy_stone_brick_slab": 509, + "minecraft:mossy_stone_brick_stairs": 510, + "minecraft:mossy_stone_brick_wall": 511, + "minecraft:mossy_stone_bricks": 512, + "minecraft:mud_brick_slab": 513, + "minecraft:mud_brick_stairs": 514, + "minecraft:mud_brick_wall": 515, + "minecraft:mud_bricks": 516, + "minecraft:muddy_mangrove_roots": 517, + "minecraft:mushroom_stew": 518, + "minecraft:music_disc_5": 519, + "minecraft:nether_brick_fence": 520, + "minecraft:nether_brick_slab": 521, + "minecraft:nether_brick_stairs": 522, + "minecraft:nether_brick_wall": 523, + "minecraft:nether_bricks": 524, + "minecraft:nether_wart_block": 525, + "minecraft:netherite_block": 526, + "minecraft:netherite_ingot": 527, + "minecraft:netherite_upgrade_smithing_template": 528, + "minecraft:note_block": 529, + "minecraft:oak_boat": 530, + "minecraft:oak_button": 531, + "minecraft:oak_chest_boat": 532, + "minecraft:oak_door": 533, + "minecraft:oak_fence": 534, + "minecraft:oak_fence_gate": 535, + "minecraft:oak_hanging_sign": 536, + "minecraft:oak_planks": 537, + "minecraft:oak_pressure_plate": 538, + "minecraft:oak_shelf": 539, + "minecraft:oak_sign": 540, + "minecraft:oak_slab": 541, + "minecraft:oak_stairs": 542, + "minecraft:oak_trapdoor": 543, + "minecraft:oak_wood": 544, + "minecraft:observer": 545, + "minecraft:orange_banner": 546, + "minecraft:orange_bed": 547, + "minecraft:orange_bundle": 548, + "minecraft:orange_candle": 549, + "minecraft:orange_carpet": 550, + "minecraft:orange_concrete_powder": 551, + "minecraft:orange_dye": 552, + "minecraft:orange_harness": 553, + "minecraft:orange_shulker_box": 554, + "minecraft:orange_stained_glass": 555, + "minecraft:orange_stained_glass_pane": 556, + "minecraft:orange_terracotta": 557, + "minecraft:orange_wool": 558, + "minecraft:oxidized_chiseled_copper": 559, + "minecraft:oxidized_copper_bulb": 560, + "minecraft:oxidized_copper_grate": 561, + "minecraft:oxidized_cut_copper": 562, + "minecraft:oxidized_cut_copper_slab": 563, + "minecraft:oxidized_cut_copper_stairs": 564, + "minecraft:packed_ice": 565, + "minecraft:packed_mud": 566, + "minecraft:painting": 567, + "minecraft:pale_moss_carpet": 568, + "minecraft:pale_oak_boat": 569, + "minecraft:pale_oak_button": 570, + "minecraft:pale_oak_chest_boat": 571, + "minecraft:pale_oak_door": 572, + "minecraft:pale_oak_fence": 573, + "minecraft:pale_oak_fence_gate": 574, + "minecraft:pale_oak_hanging_sign": 575, + "minecraft:pale_oak_planks": 576, + "minecraft:pale_oak_pressure_plate": 577, + "minecraft:pale_oak_shelf": 578, + "minecraft:pale_oak_sign": 579, + "minecraft:pale_oak_slab": 580, + "minecraft:pale_oak_stairs": 581, + "minecraft:pale_oak_trapdoor": 582, + "minecraft:pale_oak_wood": 583, + "minecraft:paper": 584, + "minecraft:pink_banner": 585, + "minecraft:pink_bed": 586, + "minecraft:pink_bundle": 587, + "minecraft:pink_candle": 588, + "minecraft:pink_carpet": 589, + "minecraft:pink_concrete_powder": 590, + "minecraft:pink_dye": 591, + "minecraft:pink_harness": 592, + "minecraft:pink_shulker_box": 593, + "minecraft:pink_stained_glass": 594, + "minecraft:pink_stained_glass_pane": 595, + "minecraft:pink_terracotta": 596, + "minecraft:pink_wool": 597, + "minecraft:piston": 598, + "minecraft:polished_andesite": 599, + "minecraft:polished_andesite_slab": 600, + "minecraft:polished_andesite_stairs": 601, + "minecraft:polished_basalt": 602, + "minecraft:polished_blackstone": 603, + "minecraft:polished_blackstone_brick_slab": 604, + "minecraft:polished_blackstone_brick_stairs": 605, + "minecraft:polished_blackstone_brick_wall": 606, + "minecraft:polished_blackstone_bricks": 607, + "minecraft:polished_blackstone_button": 608, + "minecraft:polished_blackstone_pressure_plate": 609, + "minecraft:polished_blackstone_slab": 610, + "minecraft:polished_blackstone_stairs": 611, + "minecraft:polished_blackstone_wall": 612, + "minecraft:polished_deepslate": 613, + "minecraft:polished_deepslate_slab": 614, + "minecraft:polished_deepslate_stairs": 615, + "minecraft:polished_deepslate_wall": 616, + "minecraft:polished_diorite": 617, + "minecraft:polished_diorite_slab": 618, + "minecraft:polished_diorite_stairs": 619, + "minecraft:polished_granite": 620, + "minecraft:polished_granite_slab": 621, + "minecraft:polished_granite_stairs": 622, + "minecraft:polished_tuff": 623, + "minecraft:polished_tuff_slab": 624, + "minecraft:polished_tuff_stairs": 625, + "minecraft:polished_tuff_wall": 626, + "minecraft:powered_rail": 627, + "minecraft:prismarine": 628, + "minecraft:prismarine_brick_slab": 629, + "minecraft:prismarine_brick_stairs": 630, + "minecraft:prismarine_bricks": 631, + "minecraft:prismarine_slab": 632, + "minecraft:prismarine_stairs": 633, + "minecraft:prismarine_wall": 634, + "minecraft:pumpkin_pie": 635, + "minecraft:pumpkin_seeds": 636, + "minecraft:purple_banner": 637, + "minecraft:purple_bed": 638, + "minecraft:purple_bundle": 639, + "minecraft:purple_candle": 640, + "minecraft:purple_carpet": 641, + "minecraft:purple_concrete_powder": 642, + "minecraft:purple_dye": 643, + "minecraft:purple_harness": 644, + "minecraft:purple_shulker_box": 645, + "minecraft:purple_stained_glass": 646, + "minecraft:purple_stained_glass_pane": 647, + "minecraft:purple_terracotta": 648, + "minecraft:purple_wool": 649, + "minecraft:purpur_block": 650, + "minecraft:purpur_pillar": 651, + "minecraft:purpur_slab": 652, + "minecraft:purpur_stairs": 653, + "minecraft:quartz_block": 654, + "minecraft:quartz_bricks": 655, + "minecraft:quartz_pillar": 656, + "minecraft:quartz_slab": 657, + "minecraft:quartz_stairs": 658, + "minecraft:rabbit_stew": 659, + "minecraft:rail": 660, + "minecraft:raiser_armor_trim_smithing_template": 661, + "minecraft:raw_copper": 662, + "minecraft:raw_copper_block": 663, + "minecraft:raw_gold": 664, + "minecraft:raw_gold_block": 665, + "minecraft:raw_iron": 666, + "minecraft:raw_iron_block": 667, + "minecraft:recovery_compass": 668, + "minecraft:red_banner": 669, + "minecraft:red_bed": 670, + "minecraft:red_bundle": 671, + "minecraft:red_candle": 672, + "minecraft:red_carpet": 673, + "minecraft:red_concrete_powder": 674, + "minecraft:red_dye": 675, + "minecraft:red_harness": 676, + "minecraft:red_nether_brick_slab": 677, + "minecraft:red_nether_brick_stairs": 678, + "minecraft:red_nether_brick_wall": 679, + "minecraft:red_nether_bricks": 680, + "minecraft:red_sandstone": 681, + "minecraft:red_sandstone_slab": 682, + "minecraft:red_sandstone_stairs": 683, + "minecraft:red_sandstone_wall": 684, + "minecraft:red_shulker_box": 685, + "minecraft:red_stained_glass": 686, + "minecraft:red_stained_glass_pane": 687, + "minecraft:red_terracotta": 688, + "minecraft:red_wool": 689, + "minecraft:redstone": 690, + "minecraft:redstone_block": 691, + "minecraft:redstone_lamp": 692, + "minecraft:redstone_torch": 693, + "minecraft:repeater": 694, + "minecraft:resin_block": 695, + "minecraft:resin_brick_slab": 696, + "minecraft:resin_brick_stairs": 697, + "minecraft:resin_brick_wall": 698, + "minecraft:resin_bricks": 699, + "minecraft:resin_clump": 700, + "minecraft:respawn_anchor": 701, + "minecraft:rib_armor_trim_smithing_template": 702, + "minecraft:saddle": 703, + "minecraft:sandstone": 704, + "minecraft:sandstone_slab": 705, + "minecraft:sandstone_stairs": 706, + "minecraft:sandstone_wall": 707, + "minecraft:scaffolding": 708, + "minecraft:sea_lantern": 709, + "minecraft:sentry_armor_trim_smithing_template": 710, + "minecraft:shaper_armor_trim_smithing_template": 711, + "minecraft:shears": 712, + "minecraft:shield": 713, + "minecraft:shulker_box": 714, + "minecraft:silence_armor_trim_smithing_template": 715, + "minecraft:skull_banner_pattern": 716, + "minecraft:slime_ball": 717, + "minecraft:slime_block": 718, + "minecraft:smithing_table": 719, + "minecraft:smoker": 720, + "minecraft:smooth_quartz_slab": 721, + "minecraft:smooth_quartz_stairs": 722, + "minecraft:smooth_red_sandstone_slab": 723, + "minecraft:smooth_red_sandstone_stairs": 724, + "minecraft:smooth_sandstone_slab": 725, + "minecraft:smooth_sandstone_stairs": 726, + "minecraft:smooth_stone_slab": 727, + "minecraft:snout_armor_trim_smithing_template": 728, + "minecraft:snow": 729, + "minecraft:snow_block": 730, + "minecraft:soul_campfire": 731, + "minecraft:soul_lantern": 732, + "minecraft:soul_torch": 733, + "minecraft:spectral_arrow": 734, + "minecraft:spire_armor_trim_smithing_template": 735, + "minecraft:spruce_boat": 736, + "minecraft:spruce_button": 737, + "minecraft:spruce_chest_boat": 738, + "minecraft:spruce_door": 739, + "minecraft:spruce_fence": 740, + "minecraft:spruce_fence_gate": 741, + "minecraft:spruce_hanging_sign": 742, + "minecraft:spruce_planks": 743, + "minecraft:spruce_pressure_plate": 744, + "minecraft:spruce_shelf": 745, + "minecraft:spruce_sign": 746, + "minecraft:spruce_slab": 747, + "minecraft:spruce_stairs": 748, + "minecraft:spruce_trapdoor": 749, + "minecraft:spruce_wood": 750, + "minecraft:spyglass": 751, + "minecraft:stick": 752, + "minecraft:sticky_piston": 753, + "minecraft:stone_axe": 754, + "minecraft:stone_brick_slab": 755, + "minecraft:stone_brick_stairs": 756, + "minecraft:stone_brick_wall": 757, + "minecraft:stone_bricks": 758, + "minecraft:stone_button": 759, + "minecraft:stone_hoe": 760, + "minecraft:stone_pickaxe": 761, + "minecraft:stone_pressure_plate": 762, + "minecraft:stone_shovel": 763, + "minecraft:stone_slab": 764, + "minecraft:stone_spear": 765, + "minecraft:stone_stairs": 766, + "minecraft:stone_sword": 767, + "minecraft:stonecutter": 768, + "minecraft:stripped_acacia_wood": 769, + "minecraft:stripped_birch_wood": 770, + "minecraft:stripped_cherry_wood": 771, + "minecraft:stripped_crimson_hyphae": 772, + "minecraft:stripped_dark_oak_wood": 773, + "minecraft:stripped_jungle_wood": 774, + "minecraft:stripped_mangrove_wood": 775, + "minecraft:stripped_oak_wood": 776, + "minecraft:stripped_pale_oak_wood": 777, + "minecraft:stripped_spruce_wood": 778, + "minecraft:stripped_warped_hyphae": 779, + "minecraft:sugar": 780, + "minecraft:suspicious_stew": 781, + "minecraft:target": 782, + "minecraft:tide_armor_trim_smithing_template": 783, + "minecraft:tinted_glass": 784, + "minecraft:tnt": 785, + "minecraft:tnt_minecart": 786, + "minecraft:torch": 787, + "minecraft:trapped_chest": 788, + "minecraft:tripwire_hook": 789, + "minecraft:tuff_brick_slab": 790, + "minecraft:tuff_brick_stairs": 791, + "minecraft:tuff_brick_wall": 792, + "minecraft:tuff_bricks": 793, + "minecraft:tuff_slab": 794, + "minecraft:tuff_stairs": 795, + "minecraft:tuff_wall": 796, + "minecraft:turtle_helmet": 797, + "minecraft:vex_armor_trim_smithing_template": 798, + "minecraft:ward_armor_trim_smithing_template": 799, + "minecraft:warped_button": 800, + "minecraft:warped_door": 801, + "minecraft:warped_fence": 802, + "minecraft:warped_fence_gate": 803, + "minecraft:warped_fungus_on_a_stick": 804, + "minecraft:warped_hanging_sign": 805, + "minecraft:warped_hyphae": 806, + "minecraft:warped_planks": 807, + "minecraft:warped_pressure_plate": 808, + "minecraft:warped_shelf": 809, + "minecraft:warped_sign": 810, + "minecraft:warped_slab": 811, + "minecraft:warped_stairs": 812, + "minecraft:warped_trapdoor": 813, + "minecraft:waxed_chiseled_copper": 814, + "minecraft:waxed_copper_bars": 815, + "minecraft:waxed_copper_block": 816, + "minecraft:waxed_copper_bulb": 817, + "minecraft:waxed_copper_chain": 818, + "minecraft:waxed_copper_chest": 819, + "minecraft:waxed_copper_door": 820, + "minecraft:waxed_copper_golem_statue": 821, + "minecraft:waxed_copper_grate": 822, + "minecraft:waxed_copper_lantern": 823, + "minecraft:waxed_copper_trapdoor": 824, + "minecraft:waxed_cut_copper": 825, + "minecraft:waxed_cut_copper_slab": 826, + "minecraft:waxed_cut_copper_stairs": 827, + "minecraft:waxed_exposed_chiseled_copper": 828, + "minecraft:waxed_exposed_copper": 829, + "minecraft:waxed_exposed_copper_bars": 830, + "minecraft:waxed_exposed_copper_bulb": 831, + "minecraft:waxed_exposed_copper_chain": 832, + "minecraft:waxed_exposed_copper_chest": 833, + "minecraft:waxed_exposed_copper_door": 834, + "minecraft:waxed_exposed_copper_golem_statue": 835, + "minecraft:waxed_exposed_copper_grate": 836, + "minecraft:waxed_exposed_copper_lantern": 837, + "minecraft:waxed_exposed_copper_trapdoor": 838, + "minecraft:waxed_exposed_cut_copper": 839, + "minecraft:waxed_exposed_cut_copper_slab": 840, + "minecraft:waxed_exposed_cut_copper_stairs": 841, + "minecraft:waxed_exposed_lightning_rod": 842, + "minecraft:waxed_lightning_rod": 843, + "minecraft:waxed_oxidized_chiseled_copper": 844, + "minecraft:waxed_oxidized_copper": 845, + "minecraft:waxed_oxidized_copper_bars": 846, + "minecraft:waxed_oxidized_copper_bulb": 847, + "minecraft:waxed_oxidized_copper_chain": 848, + "minecraft:waxed_oxidized_copper_chest": 849, + "minecraft:waxed_oxidized_copper_door": 850, + "minecraft:waxed_oxidized_copper_golem_statue": 851, + "minecraft:waxed_oxidized_copper_grate": 852, + "minecraft:waxed_oxidized_copper_lantern": 853, + "minecraft:waxed_oxidized_copper_trapdoor": 854, + "minecraft:waxed_oxidized_cut_copper": 855, + "minecraft:waxed_oxidized_cut_copper_slab": 856, + "minecraft:waxed_oxidized_cut_copper_stairs": 857, + "minecraft:waxed_oxidized_lightning_rod": 858, + "minecraft:waxed_weathered_chiseled_copper": 859, + "minecraft:waxed_weathered_copper": 860, + "minecraft:waxed_weathered_copper_bars": 861, + "minecraft:waxed_weathered_copper_bulb": 862, + "minecraft:waxed_weathered_copper_chain": 863, + "minecraft:waxed_weathered_copper_chest": 864, + "minecraft:waxed_weathered_copper_door": 865, + "minecraft:waxed_weathered_copper_golem_statue": 866, + "minecraft:waxed_weathered_copper_grate": 867, + "minecraft:waxed_weathered_copper_lantern": 868, + "minecraft:waxed_weathered_copper_trapdoor": 869, + "minecraft:waxed_weathered_cut_copper": 870, + "minecraft:waxed_weathered_cut_copper_slab": 871, + "minecraft:waxed_weathered_cut_copper_stairs": 872, + "minecraft:waxed_weathered_lightning_rod": 873, + "minecraft:wayfinder_armor_trim_smithing_template": 874, + "minecraft:weathered_chiseled_copper": 875, + "minecraft:weathered_copper_bulb": 876, + "minecraft:weathered_copper_grate": 877, + "minecraft:weathered_cut_copper": 878, + "minecraft:weathered_cut_copper_slab": 879, + "minecraft:weathered_cut_copper_stairs": 880, + "minecraft:wheat": 881, + "minecraft:white_banner": 882, + "minecraft:white_bed": 883, + "minecraft:white_bundle": 884, + "minecraft:white_candle": 885, + "minecraft:white_carpet": 886, + "minecraft:white_concrete_powder": 887, + "minecraft:white_dye": 888, + "minecraft:white_harness": 889, + "minecraft:white_shulker_box": 890, + "minecraft:white_stained_glass": 891, + "minecraft:white_stained_glass_pane": 892, + "minecraft:white_terracotta": 893, + "minecraft:white_wool": 894, + "minecraft:wild_armor_trim_smithing_template": 895, + "minecraft:wind_charge": 896, + "minecraft:wolf_armor": 897, + "minecraft:wooden_axe": 898, + "minecraft:wooden_hoe": 899, + "minecraft:wooden_pickaxe": 900, + "minecraft:wooden_shovel": 901, + "minecraft:wooden_spear": 902, + "minecraft:wooden_sword": 903, + "minecraft:writable_book": 904, + "minecraft:yellow_banner": 905, + "minecraft:yellow_bed": 906, + "minecraft:yellow_bundle": 907, + "minecraft:yellow_candle": 908, + "minecraft:yellow_carpet": 909, + "minecraft:yellow_concrete_powder": 910, + "minecraft:yellow_dye": 911, + "minecraft:yellow_harness": 912, + "minecraft:yellow_shulker_box": 913, + "minecraft:yellow_stained_glass": 914, + "minecraft:yellow_stained_glass_pane": 915, + "minecraft:yellow_terracotta": 916, + "minecraft:yellow_wool": 917 + }, + "aliases": { + "#minecraft:doors": [ + "minecraft:waxed_exposed_copper_door", + "minecraft:warped_door", + "minecraft:mangrove_door", + "minecraft:acacia_door", + "minecraft:spruce_door", + "minecraft:dark_oak_door", + "minecraft:crimson_door", + "minecraft:waxed_copper_door", + "minecraft:oak_door", + "minecraft:exposed_copper_door", + "minecraft:waxed_oxidized_copper_door", + "minecraft:pale_oak_door", + "minecraft:copper_door", + "minecraft:birch_door", + "minecraft:weathered_copper_door", + "minecraft:iron_door", + "minecraft:bamboo_door", + "minecraft:cherry_door", + "minecraft:oxidized_copper_door", + "minecraft:waxed_weathered_copper_door", + "minecraft:jungle_door" + ], + "#minecraft:smelts_to_glass": [ + "minecraft:red_sand", + "minecraft:sand" + ], + "#minecraft:flowers": [ + "minecraft:sunflower", + "minecraft:lilac", + "minecraft:cherry_leaves", + "minecraft:wither_rose", + "minecraft:cactus_flower", + "minecraft:mangrove_propagule", + "minecraft:oxeye_daisy", + "minecraft:closed_eyeblossom", + "minecraft:open_eyeblossom", + "minecraft:allium", + "minecraft:spore_blossom", + "minecraft:lily_of_the_valley", + "minecraft:pink_petals", + "minecraft:dandelion", + "minecraft:peony", + "minecraft:azure_bluet", + "minecraft:blue_orchid", + "minecraft:poppy", + "minecraft:white_tulip", + "minecraft:rose_bush", + "minecraft:pink_tulip", + "minecraft:flowering_azalea", + "minecraft:wildflowers", + "minecraft:chorus_flower", + "minecraft:flowering_azalea_leaves", + "minecraft:red_tulip", + "minecraft:cornflower", + "minecraft:torchflower", + "minecraft:orange_tulip", + "minecraft:pitcher_plant" + ], + "#minecraft:small_flowers": [ + "minecraft:closed_eyeblossom", + "minecraft:open_eyeblossom", + "minecraft:white_tulip", + "minecraft:dandelion", + "minecraft:pink_tulip", + "minecraft:allium", + "minecraft:wither_rose", + "minecraft:red_tulip", + "minecraft:cornflower", + "minecraft:azure_bluet", + "minecraft:lily_of_the_valley", + "minecraft:blue_orchid", + "minecraft:orange_tulip", + "minecraft:torchflower", + "minecraft:oxeye_daisy", + "minecraft:poppy" + ], + "#minecraft:bamboo_blocks": [ + "minecraft:stripped_bamboo_block", + "minecraft:bamboo_block" + ], + "#minecraft:fishes": [ + "minecraft:tropical_fish", + "minecraft:cod", + "minecraft:cooked_cod", + "minecraft:cooked_salmon", + "minecraft:salmon", + "minecraft:pufferfish" + ], + "#minecraft:cherry_logs": [ + "minecraft:stripped_cherry_log", + "minecraft:stripped_cherry_wood", + "minecraft:cherry_wood", + "minecraft:cherry_log" + ], + "#minecraft:bookshelf_books": [ + "minecraft:book", + "minecraft:written_book", + "minecraft:enchanted_book", + "minecraft:writable_book", + "minecraft:knowledge_book" + ], + "#minecraft:panda_food": [ + "minecraft:bamboo" + ], + "#minecraft:copper_tool_materials": [ + "minecraft:copper_ingot" + ], + "#minecraft:candles": [ + "minecraft:gray_candle", + "minecraft:pink_candle", + "minecraft:cyan_candle", + "minecraft:light_gray_candle", + "minecraft:light_blue_candle", + "minecraft:blue_candle", + "minecraft:red_candle", + "minecraft:black_candle", + "minecraft:white_candle", + "minecraft:lime_candle", + "minecraft:yellow_candle", + "minecraft:magenta_candle", + "minecraft:purple_candle", + "minecraft:orange_candle", + "minecraft:candle", + "minecraft:brown_candle", + "minecraft:green_candle" + ], + "#minecraft:bundles": [ + "minecraft:orange_bundle", + "minecraft:green_bundle", + "minecraft:red_bundle", + "minecraft:purple_bundle", + "minecraft:black_bundle", + "minecraft:light_gray_bundle", + "minecraft:bundle", + "minecraft:cyan_bundle", + "minecraft:gray_bundle", + "minecraft:yellow_bundle", + "minecraft:white_bundle", + "minecraft:pink_bundle", + "minecraft:magenta_bundle", + "minecraft:brown_bundle", + "minecraft:blue_bundle", + "minecraft:lime_bundle", + "minecraft:light_blue_bundle" + ], + "#minecraft:shovels": [ + "minecraft:wooden_shovel", + "minecraft:diamond_shovel", + "minecraft:copper_shovel", + "minecraft:netherite_shovel", + "minecraft:stone_shovel", + "minecraft:iron_shovel", + "minecraft:golden_shovel" + ], + "#minecraft:stairs": [ + "minecraft:tuff_brick_stairs", + "minecraft:spruce_stairs", + "minecraft:dark_oak_stairs", + "minecraft:stone_stairs", + "minecraft:cut_copper_stairs", + "minecraft:blackstone_stairs", + "minecraft:oak_stairs", + "minecraft:warped_stairs", + "minecraft:smooth_red_sandstone_stairs", + "minecraft:end_stone_brick_stairs", + "minecraft:polished_andesite_stairs", + "minecraft:bamboo_mosaic_stairs", + "minecraft:purpur_stairs", + "minecraft:mossy_stone_brick_stairs", + "minecraft:mossy_cobblestone_stairs", + "minecraft:deepslate_brick_stairs", + "minecraft:polished_blackstone_brick_stairs", + "minecraft:cobbled_deepslate_stairs", + "minecraft:mud_brick_stairs", + "minecraft:birch_stairs", + "minecraft:acacia_stairs", + "minecraft:tuff_stairs", + "minecraft:prismarine_stairs", + "minecraft:mangrove_stairs", + "minecraft:prismarine_brick_stairs", + "minecraft:smooth_quartz_stairs", + "minecraft:cobblestone_stairs", + "minecraft:resin_brick_stairs", + "minecraft:red_nether_brick_stairs", + "minecraft:polished_blackstone_stairs", + "minecraft:weathered_cut_copper_stairs", + "minecraft:smooth_sandstone_stairs", + "minecraft:waxed_exposed_cut_copper_stairs", + "minecraft:sandstone_stairs", + "minecraft:deepslate_tile_stairs", + "minecraft:waxed_oxidized_cut_copper_stairs", + "minecraft:quartz_stairs", + "minecraft:polished_tuff_stairs", + "minecraft:andesite_stairs", + "minecraft:waxed_cut_copper_stairs", + "minecraft:crimson_stairs", + "minecraft:polished_granite_stairs", + "minecraft:dark_prismarine_stairs", + "minecraft:diorite_stairs", + "minecraft:red_sandstone_stairs", + "minecraft:polished_deepslate_stairs", + "minecraft:jungle_stairs", + "minecraft:bamboo_stairs", + "minecraft:exposed_cut_copper_stairs", + "minecraft:granite_stairs", + "minecraft:brick_stairs", + "minecraft:cherry_stairs", + "minecraft:waxed_weathered_cut_copper_stairs", + "minecraft:nether_brick_stairs", + "minecraft:pale_oak_stairs", + "minecraft:stone_brick_stairs", + "minecraft:polished_diorite_stairs", + "minecraft:oxidized_cut_copper_stairs" + ], + "#minecraft:hanging_signs": [ + "minecraft:spruce_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:pale_oak_hanging_sign", + "minecraft:birch_hanging_sign", + "minecraft:crimson_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:acacia_hanging_sign", + "minecraft:mangrove_hanging_sign", + "minecraft:warped_hanging_sign", + "minecraft:bamboo_hanging_sign", + "minecraft:cherry_hanging_sign", + "minecraft:dark_oak_hanging_sign" + ], + "#minecraft:wooden_buttons": [ + "minecraft:mangrove_button", + "minecraft:crimson_button", + "minecraft:cherry_button", + "minecraft:spruce_button", + "minecraft:dark_oak_button", + "minecraft:bamboo_button", + "minecraft:jungle_button", + "minecraft:birch_button", + "minecraft:acacia_button", + "minecraft:pale_oak_button", + "minecraft:warped_button", + "minecraft:oak_button" + ], + "#minecraft:trim_materials": [ + "minecraft:iron_ingot", + "minecraft:copper_ingot", + "minecraft:netherite_ingot", + "minecraft:lapis_lazuli", + "minecraft:quartz", + "minecraft:redstone", + "minecraft:amethyst_shard", + "minecraft:gold_ingot", + "minecraft:resin_brick", + "minecraft:emerald", + "minecraft:diamond" + ], + "#minecraft:zombie_horse_food": [ + "minecraft:red_mushroom" + ], + "#minecraft:pickaxes": [ + "minecraft:wooden_pickaxe", + "minecraft:golden_pickaxe", + "minecraft:copper_pickaxe", + "minecraft:netherite_pickaxe", + "minecraft:stone_pickaxe", + "minecraft:iron_pickaxe", + "minecraft:diamond_pickaxe" + ], + "#minecraft:wooden_stairs": [ + "minecraft:spruce_stairs", + "minecraft:dark_oak_stairs", + "minecraft:jungle_stairs", + "minecraft:bamboo_stairs", + "minecraft:mangrove_stairs", + "minecraft:oak_stairs", + "minecraft:cherry_stairs", + "minecraft:warped_stairs", + "minecraft:pale_oak_stairs", + "minecraft:crimson_stairs", + "minecraft:birch_stairs", + "minecraft:acacia_stairs" + ], + "#minecraft:oak_logs": [ + "minecraft:oak_wood", + "minecraft:oak_log", + "minecraft:stripped_oak_log", + "minecraft:stripped_oak_wood" + ], + "#minecraft:eggs": [ + "minecraft:egg", + "minecraft:brown_egg", + "minecraft:blue_egg" + ], + "#minecraft:sniffer_food": [ + "minecraft:torchflower_seeds" + ], + "#minecraft:camel_husk_food": [ + "minecraft:rabbit_foot" + ], + "#minecraft:skeleton_preferred_weapons": [ + "minecraft:bow" + ], + "#minecraft:head_armor": [ + "#minecraft:head_armor" + ], + "#minecraft:non_flammable_wood": [ + "minecraft:warped_slab", + "minecraft:warped_planks", + "minecraft:warped_stairs", + "minecraft:crimson_sign", + "minecraft:warped_fence_gate", + "minecraft:warped_door", + "minecraft:warped_stem", + "minecraft:crimson_hyphae", + "minecraft:crimson_fence_gate", + "minecraft:warped_pressure_plate", + "minecraft:crimson_door", + "minecraft:warped_sign", + "minecraft:warped_shelf", + "minecraft:crimson_shelf", + "minecraft:crimson_fence", + "minecraft:stripped_warped_stem", + "minecraft:warped_fence", + "minecraft:crimson_hanging_sign", + "minecraft:warped_hanging_sign", + "minecraft:warped_trapdoor", + "minecraft:stripped_warped_hyphae", + "minecraft:warped_button", + "minecraft:crimson_stairs", + "minecraft:crimson_planks", + "minecraft:crimson_button", + "minecraft:crimson_pressure_plate", + "minecraft:stripped_crimson_hyphae", + "minecraft:crimson_slab", + "minecraft:crimson_stem", + "minecraft:warped_hyphae", + "minecraft:crimson_trapdoor", + "minecraft:stripped_crimson_stem" + ], + "#minecraft:swords": [ + "minecraft:wooden_sword", + "minecraft:diamond_sword", + "minecraft:golden_sword", + "minecraft:copper_sword", + "minecraft:netherite_sword", + "minecraft:stone_sword", + "minecraft:iron_sword" + ], + "#minecraft:stone_tool_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "#minecraft:wooden_pressure_plates": [ + "minecraft:pale_oak_pressure_plate", + "minecraft:crimson_pressure_plate", + "minecraft:cherry_pressure_plate", + "minecraft:mangrove_pressure_plate", + "minecraft:warped_pressure_plate", + "minecraft:bamboo_pressure_plate", + "minecraft:jungle_pressure_plate", + "minecraft:dark_oak_pressure_plate", + "minecraft:oak_pressure_plate", + "minecraft:acacia_pressure_plate", + "minecraft:spruce_pressure_plate", + "minecraft:birch_pressure_plate" + ], + "#minecraft:shearable_from_copper_golem": [ + "minecraft:poppy" + ], + "#minecraft:boats": [ + "minecraft:pale_oak_chest_boat", + "minecraft:cherry_boat", + "minecraft:mangrove_chest_boat", + "minecraft:mangrove_boat", + "minecraft:birch_chest_boat", + "minecraft:acacia_boat", + "minecraft:pale_oak_boat", + "minecraft:cherry_chest_boat", + "minecraft:oak_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:bamboo_raft", + "minecraft:birch_boat", + "minecraft:bamboo_chest_raft", + "minecraft:dark_oak_boat", + "minecraft:spruce_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:jungle_boat", + "minecraft:oak_boat" + ], + "#minecraft:frog_food": [ + "minecraft:slime_ball" + ], + "#minecraft:nautilus_food": [ + "minecraft:cod", + "minecraft:cod_bucket", + "minecraft:cooked_cod", + "minecraft:cooked_salmon", + "minecraft:salmon", + "minecraft:tropical_fish_bucket", + "minecraft:pufferfish_bucket", + "minecraft:pufferfish", + "minecraft:tropical_fish", + "minecraft:salmon_bucket" + ], + "#minecraft:brewing_fuel": [ + "minecraft:blaze_powder" + ], + "#minecraft:villager_picks_up": [ + "minecraft:wheat_seeds", + "minecraft:beetroot_seeds", + "minecraft:carrot", + "minecraft:bread", + "minecraft:pitcher_pod", + "minecraft:torchflower_seeds", + "minecraft:wheat", + "minecraft:beetroot", + "minecraft:potato" + ], + "#minecraft:lanterns": [ + "minecraft:oxidized_copper_lantern", + "minecraft:weathered_copper_lantern", + "minecraft:waxed_oxidized_copper_lantern", + "minecraft:lantern", + "minecraft:waxed_weathered_copper_lantern", + "minecraft:waxed_copper_lantern", + "minecraft:waxed_exposed_copper_lantern", + "minecraft:soul_lantern", + "minecraft:exposed_copper_lantern", + "minecraft:copper_lantern" + ], + "#minecraft:wool_carpets": [ + "minecraft:purple_carpet", + "minecraft:green_carpet", + "minecraft:light_blue_carpet", + "minecraft:brown_carpet", + "minecraft:orange_carpet", + "minecraft:cyan_carpet", + "minecraft:white_carpet", + "minecraft:pink_carpet", + "minecraft:magenta_carpet", + "minecraft:yellow_carpet", + "minecraft:lime_carpet", + "minecraft:light_gray_carpet", + "minecraft:gray_carpet", + "minecraft:blue_carpet", + "minecraft:black_carpet", + "minecraft:red_carpet" + ], + "#minecraft:repairs_leather_armor": [ + "minecraft:leather" + ], + "#minecraft:wooden_trapdoors": [ + "minecraft:dark_oak_trapdoor", + "minecraft:acacia_trapdoor", + "minecraft:oak_trapdoor", + "minecraft:spruce_trapdoor", + "minecraft:bamboo_trapdoor", + "minecraft:birch_trapdoor", + "minecraft:crimson_trapdoor", + "minecraft:mangrove_trapdoor", + "minecraft:pale_oak_trapdoor", + "minecraft:warped_trapdoor", + "minecraft:jungle_trapdoor", + "minecraft:cherry_trapdoor" + ], + "#minecraft:dark_oak_logs": [ + "minecraft:stripped_dark_oak_log", + "minecraft:stripped_dark_oak_wood", + "minecraft:dark_oak_wood", + "minecraft:dark_oak_log" + ], + "#minecraft:piglin_preferred_weapons": [ + "minecraft:crossbow", + "minecraft:golden_spear" + ], + "#minecraft:spruce_logs": [ + "minecraft:spruce_log", + "minecraft:stripped_spruce_log", + "minecraft:stripped_spruce_wood", + "minecraft:spruce_wood" + ], + "#minecraft:rails": [ + "minecraft:rail", + "minecraft:activator_rail", + "minecraft:detector_rail", + "minecraft:powered_rail" + ], + "#minecraft:nautilus_bucket_food": [ + "minecraft:pufferfish_bucket", + "minecraft:cod_bucket", + "minecraft:tropical_fish_bucket", + "minecraft:salmon_bucket" + ], + "#minecraft:fox_food": [ + "minecraft:glow_berries", + "minecraft:sweet_berries" + ], + "#minecraft:crimson_stems": [ + "minecraft:stripped_crimson_stem", + "minecraft:crimson_hyphae", + "minecraft:crimson_stem", + "minecraft:stripped_crimson_hyphae" + ], + "#minecraft:llama_food": [ + "minecraft:hay_block", + "minecraft:wheat" + ], + "#minecraft:harnesses": [ + "minecraft:blue_harness", + "minecraft:purple_harness", + "minecraft:orange_harness", + "minecraft:white_harness", + "minecraft:brown_harness", + "minecraft:pink_harness", + "minecraft:red_harness", + "minecraft:light_blue_harness", + "minecraft:light_gray_harness", + "minecraft:green_harness", + "minecraft:magenta_harness", + "minecraft:black_harness", + "minecraft:gray_harness", + "minecraft:cyan_harness", + "minecraft:lime_harness", + "minecraft:yellow_harness" + ], + "#minecraft:lapis_ores": [ + "minecraft:deepslate_lapis_ore", + "minecraft:lapis_ore" + ], + "#minecraft:stone_crafting_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "#minecraft:signs": [ + "minecraft:dark_oak_sign", + "minecraft:cherry_sign", + "minecraft:birch_sign", + "minecraft:acacia_sign", + "minecraft:spruce_sign", + "minecraft:crimson_sign", + "minecraft:warped_sign", + "minecraft:bamboo_sign", + "minecraft:oak_sign", + "minecraft:jungle_sign", + "minecraft:mangrove_sign", + "minecraft:pale_oak_sign" + ], + "#minecraft:decorated_pot_sherds": [ + "minecraft:burn_pottery_sherd", + "minecraft:archer_pottery_sherd", + "minecraft:explorer_pottery_sherd", + "minecraft:guster_pottery_sherd", + "minecraft:danger_pottery_sherd", + "minecraft:skull_pottery_sherd", + "minecraft:heartbreak_pottery_sherd", + "minecraft:mourner_pottery_sherd", + "minecraft:scrape_pottery_sherd", + "minecraft:snort_pottery_sherd", + "minecraft:plenty_pottery_sherd", + "minecraft:miner_pottery_sherd", + "minecraft:howl_pottery_sherd", + "minecraft:blade_pottery_sherd", + "minecraft:shelter_pottery_sherd", + "minecraft:prize_pottery_sherd", + "minecraft:angler_pottery_sherd", + "minecraft:heart_pottery_sherd", + "minecraft:friend_pottery_sherd", + "minecraft:arms_up_pottery_sherd", + "minecraft:flow_pottery_sherd", + "minecraft:brewer_pottery_sherd", + "minecraft:sheaf_pottery_sherd" + ], + "#minecraft:stone_bricks": [ + "minecraft:mossy_stone_bricks", + "minecraft:chiseled_stone_bricks", + "minecraft:stone_bricks", + "minecraft:cracked_stone_bricks" + ], + "#minecraft:book_cloning_target": [ + "minecraft:writable_book" + ], + "#minecraft:strider_food": [ + "minecraft:warped_fungus" + ], + "#minecraft:axolotl_food": [ + "minecraft:tropical_fish_bucket" + ], + "#minecraft:copper": [ + "minecraft:waxed_copper_block", + "minecraft:weathered_copper", + "minecraft:exposed_copper", + "minecraft:copper_block", + "minecraft:waxed_oxidized_copper", + "minecraft:waxed_weathered_copper", + "minecraft:oxidized_copper", + "minecraft:waxed_exposed_copper" + ], + "#minecraft:arrows": [ + "minecraft:spectral_arrow", + "minecraft:tipped_arrow", + "minecraft:arrow" + ], + "#minecraft:happy_ghast_food": [ + "minecraft:snowball" + ], + "#minecraft:cow_food": [ + "minecraft:wheat" + ], + "#minecraft:copper_chests": [ + "minecraft:waxed_oxidized_copper_chest", + "minecraft:waxed_weathered_copper_chest", + "minecraft:copper_chest", + "minecraft:weathered_copper_chest", + "minecraft:exposed_copper_chest", + "minecraft:oxidized_copper_chest", + "minecraft:waxed_copper_chest", + "minecraft:waxed_exposed_copper_chest" + ], + "#minecraft:pale_oak_logs": [ + "minecraft:stripped_pale_oak_wood", + "minecraft:pale_oak_wood", + "minecraft:pale_oak_log", + "minecraft:stripped_pale_oak_log" + ], + "#minecraft:piglin_repellents": [ + "minecraft:soul_lantern", + "minecraft:soul_torch", + "minecraft:soul_campfire" + ], + "#minecraft:nautilus_taming_items": [ + "minecraft:pufferfish_bucket", + "minecraft:pufferfish" + ], + "#minecraft:parrot_poisonous_food": [ + "minecraft:cookie" + ], + "#minecraft:gold_ores": [ + "minecraft:deepslate_gold_ore", + "minecraft:gold_ore", + "minecraft:nether_gold_ore" + ], + "#minecraft:soul_fire_base_blocks": [ + "minecraft:soul_soil", + "minecraft:soul_sand" + ], + "#minecraft:camel_food": [ + "minecraft:cactus" + ], + "#minecraft:trapdoors": [ + "minecraft:acacia_trapdoor", + "minecraft:iron_trapdoor", + "minecraft:waxed_oxidized_copper_trapdoor", + "minecraft:spruce_trapdoor", + "minecraft:mangrove_trapdoor", + "minecraft:birch_trapdoor", + "minecraft:cherry_trapdoor", + "minecraft:waxed_exposed_copper_trapdoor", + "minecraft:dark_oak_trapdoor", + "minecraft:weathered_copper_trapdoor", + "minecraft:oxidized_copper_trapdoor", + "minecraft:waxed_weathered_copper_trapdoor", + "minecraft:pale_oak_trapdoor", + "minecraft:warped_trapdoor", + "minecraft:exposed_copper_trapdoor", + "minecraft:oak_trapdoor", + "minecraft:copper_trapdoor", + "minecraft:bamboo_trapdoor", + "minecraft:crimson_trapdoor", + "minecraft:jungle_trapdoor", + "minecraft:waxed_copper_trapdoor" + ], + "#minecraft:dirt": [ + "minecraft:rooted_dirt", + "minecraft:moss_block", + "minecraft:muddy_mangrove_roots", + "minecraft:mud", + "minecraft:coarse_dirt", + "minecraft:podzol", + "minecraft:dirt", + "minecraft:mycelium", + "minecraft:pale_moss_block", + "minecraft:grass_block" + ], + "#minecraft:turtle_food": [ + "minecraft:seagrass" + ], + "#minecraft:iron_tool_materials": [ + "minecraft:iron_ingot" + ], + "#minecraft:ignored_by_piglin_babies": [ + "minecraft:leather" + ], + "#minecraft:mangrove_logs": [ + "minecraft:stripped_mangrove_log", + "minecraft:stripped_mangrove_wood", + "minecraft:mangrove_wood", + "minecraft:mangrove_log" + ], + "#minecraft:bars": [ + "minecraft:waxed_copper_bars", + "minecraft:exposed_copper_bars", + "minecraft:iron_bars", + "minecraft:copper_bars", + "minecraft:waxed_weathered_copper_bars", + "minecraft:oxidized_copper_bars", + "minecraft:weathered_copper_bars", + "minecraft:waxed_exposed_copper_bars", + "minecraft:waxed_oxidized_copper_bars" + ], + "#minecraft:durability": [ + "minecraft:golden_axe", + "minecraft:diamond_chestplate", + "minecraft:brush", + "minecraft:stone_hoe", + "minecraft:golden_hoe", + "minecraft:golden_leggings", + "minecraft:netherite_leggings", + "minecraft:chainmail_chestplate", + "minecraft:copper_shovel", + "minecraft:copper_chestplate", + "minecraft:netherite_pickaxe", + "minecraft:elytra", + "minecraft:stone_pickaxe", + "minecraft:stone_spear", + "minecraft:diamond_boots", + "minecraft:iron_hoe", + "minecraft:golden_shovel", + "minecraft:diamond_pickaxe", + "minecraft:wooden_sword", + "minecraft:wooden_pickaxe", + "minecraft:iron_axe", + "minecraft:iron_boots", + "minecraft:wooden_shovel", + "minecraft:fishing_rod", + "minecraft:chainmail_leggings", + "minecraft:netherite_hoe", + "minecraft:trident", + "minecraft:iron_chestplate", + "minecraft:iron_sword", + "minecraft:wooden_hoe", + "#minecraft:head_armor", + "minecraft:netherite_sword", + "minecraft:stone_sword", + "minecraft:warped_fungus_on_a_stick", + "minecraft:netherite_spear", + "minecraft:crossbow", + "minecraft:mace", + "minecraft:flint_and_steel", + "minecraft:iron_leggings", + "minecraft:netherite_axe", + "minecraft:diamond_spear", + "minecraft:golden_sword", + "minecraft:stone_axe", + "minecraft:netherite_boots", + "minecraft:golden_pickaxe", + "minecraft:copper_boots", + "minecraft:diamond_shovel", + "minecraft:netherite_chestplate", + "minecraft:copper_hoe", + "minecraft:netherite_shovel", + "minecraft:copper_pickaxe", + "minecraft:diamond_hoe", + "minecraft:leather_boots", + "minecraft:golden_chestplate", + "minecraft:bow", + "minecraft:copper_spear", + "minecraft:stone_shovel", + "minecraft:shield", + "minecraft:wooden_axe", + "minecraft:golden_boots", + "minecraft:carrot_on_a_stick", + "minecraft:diamond_axe", + "minecraft:chainmail_boots", + "minecraft:diamond_sword", + "minecraft:shears", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:copper_axe", + "minecraft:golden_spear", + "minecraft:diamond_leggings", + "minecraft:copper_leggings", + "minecraft:iron_shovel", + "minecraft:iron_pickaxe", + "minecraft:copper_sword", + "minecraft:wooden_spear", + "minecraft:iron_spear" + ], + "#minecraft:lunge": [ + "minecraft:diamond_spear", + "minecraft:golden_spear", + "minecraft:copper_spear", + "minecraft:stone_spear", + "minecraft:netherite_spear", + "minecraft:wooden_spear", + "minecraft:iron_spear" + ], + "#minecraft:equippable": [ + "minecraft:diamond_chestplate", + "minecraft:golden_leggings", + "minecraft:netherite_leggings", + "minecraft:chainmail_chestplate", + "minecraft:creeper_head", + "minecraft:copper_chestplate", + "minecraft:elytra", + "minecraft:zombie_head", + "minecraft:diamond_boots", + "minecraft:dragon_head", + "minecraft:iron_boots", + "minecraft:chainmail_leggings", + "minecraft:iron_chestplate", + "#minecraft:head_armor", + "minecraft:player_head", + "minecraft:iron_leggings", + "minecraft:carved_pumpkin", + "minecraft:netherite_boots", + "minecraft:copper_boots", + "minecraft:netherite_chestplate", + "minecraft:leather_boots", + "minecraft:golden_chestplate", + "minecraft:golden_boots", + "minecraft:wither_skeleton_skull", + "minecraft:chainmail_boots", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:diamond_leggings", + "minecraft:copper_leggings", + "minecraft:skeleton_skull", + "minecraft:piglin_head" + ], + "#minecraft:sharp_weapon": [ + "minecraft:diamond_axe", + "#minecraft:enchantable/melee_weapon", + "minecraft:netherite_axe", + "minecraft:iron_axe", + "minecraft:golden_axe", + "minecraft:stone_axe", + "minecraft:copper_axe", + "minecraft:wooden_axe" + ], + "#minecraft:weapon": [ + "#minecraft:enchantable/sharp_weapon", + "minecraft:mace" + ], + "#minecraft:trident": [ + "minecraft:trident" + ], + "#minecraft:chest_armor": [ + "minecraft:diamond_chestplate", + "minecraft:leather_chestplate", + "minecraft:netherite_chestplate", + "minecraft:chainmail_chestplate", + "minecraft:iron_chestplate", + "minecraft:copper_chestplate", + "minecraft:golden_chestplate" + ], + "#minecraft:armor": [ + "#minecraft:enchantable/chest_armor", + "#minecraft:enchantable/foot_armor", + "#minecraft:enchantable/head_armor", + "#minecraft:enchantable/leg_armor" + ], + "#minecraft:mace": [ + "minecraft:mace" + ], + "#minecraft:vanishing": [ + "minecraft:carved_pumpkin", + "minecraft:dragon_head", + "#minecraft:enchantable/durability", + "minecraft:creeper_head", + "minecraft:skeleton_skull", + "minecraft:piglin_head", + "minecraft:zombie_head", + "minecraft:wither_skeleton_skull", + "minecraft:player_head", + "minecraft:compass" + ], + "#minecraft:sweeping": [ + "minecraft:wooden_sword", + "minecraft:diamond_sword", + "minecraft:golden_sword", + "minecraft:iron_sword", + "minecraft:netherite_sword", + "minecraft:stone_sword", + "minecraft:copper_sword" + ], + "#minecraft:crossbow": [ + "minecraft:crossbow" + ], + "#minecraft:fire_aspect": [ + "#minecraft:enchantable/melee_weapon", + "minecraft:mace" + ], + "#minecraft:fishing": [ + "minecraft:fishing_rod" + ], + "#minecraft:bow": [ + "minecraft:bow" + ], + "#minecraft:foot_armor": [ + "minecraft:chainmail_boots", + "minecraft:iron_boots", + "minecraft:netherite_boots", + "minecraft:copper_boots", + "minecraft:leather_boots", + "minecraft:diamond_boots", + "minecraft:golden_boots" + ], + "#minecraft:mining_loot": [ + "minecraft:golden_axe", + "minecraft:stone_hoe", + "minecraft:golden_hoe", + "minecraft:copper_shovel", + "minecraft:netherite_pickaxe", + "minecraft:stone_pickaxe", + "minecraft:iron_hoe", + "minecraft:golden_shovel", + "minecraft:diamond_pickaxe", + "minecraft:wooden_pickaxe", + "minecraft:iron_axe", + "minecraft:wooden_shovel", + "minecraft:netherite_hoe", + "minecraft:wooden_hoe", + "minecraft:netherite_axe", + "minecraft:stone_axe", + "minecraft:golden_pickaxe", + "minecraft:diamond_shovel", + "minecraft:copper_hoe", + "minecraft:netherite_shovel", + "minecraft:copper_pickaxe", + "minecraft:diamond_hoe", + "minecraft:stone_shovel", + "minecraft:wooden_axe", + "minecraft:diamond_axe", + "minecraft:copper_axe", + "minecraft:iron_shovel", + "minecraft:iron_pickaxe" + ], + "#minecraft:melee_weapon": [ + "minecraft:wooden_sword", + "minecraft:diamond_sword", + "minecraft:diamond_spear", + "minecraft:golden_sword", + "minecraft:netherite_spear", + "minecraft:golden_spear", + "minecraft:copper_spear", + "minecraft:copper_sword", + "minecraft:netherite_sword", + "minecraft:stone_sword", + "minecraft:iron_sword", + "minecraft:wooden_spear", + "minecraft:iron_spear", + "minecraft:stone_spear" + ], + "#minecraft:mining": [ + "minecraft:golden_axe", + "minecraft:stone_hoe", + "minecraft:golden_hoe", + "minecraft:copper_shovel", + "minecraft:netherite_pickaxe", + "minecraft:stone_pickaxe", + "minecraft:iron_hoe", + "minecraft:golden_shovel", + "minecraft:diamond_pickaxe", + "minecraft:wooden_pickaxe", + "minecraft:iron_axe", + "minecraft:wooden_shovel", + "minecraft:netherite_hoe", + "minecraft:wooden_hoe", + "minecraft:netherite_axe", + "minecraft:stone_axe", + "minecraft:golden_pickaxe", + "minecraft:diamond_shovel", + "minecraft:copper_hoe", + "minecraft:netherite_shovel", + "minecraft:copper_pickaxe", + "minecraft:diamond_hoe", + "minecraft:stone_shovel", + "minecraft:wooden_axe", + "minecraft:diamond_axe", + "minecraft:shears", + "minecraft:copper_axe", + "minecraft:iron_shovel", + "minecraft:iron_pickaxe" + ], + "#minecraft:leg_armor": [ + "minecraft:iron_leggings", + "minecraft:golden_leggings", + "minecraft:netherite_leggings", + "minecraft:chainmail_leggings", + "minecraft:leather_leggings", + "minecraft:diamond_leggings", + "minecraft:copper_leggings" + ], + "#minecraft:drowned_preferred_weapons": [ + "minecraft:trident" + ], + "#minecraft:axes": [ + "minecraft:diamond_axe", + "minecraft:golden_axe", + "minecraft:netherite_axe", + "minecraft:iron_axe", + "minecraft:stone_axe", + "minecraft:copper_axe", + "minecraft:wooden_axe" + ], + "#minecraft:ocelot_food": [ + "minecraft:cod", + "minecraft:salmon" + ], + "#minecraft:fences": [ + "minecraft:warped_fence", + "minecraft:cherry_fence", + "minecraft:spruce_fence", + "minecraft:oak_fence", + "minecraft:jungle_fence", + "minecraft:dark_oak_fence", + "minecraft:mangrove_fence", + "minecraft:bamboo_fence", + "minecraft:nether_brick_fence", + "minecraft:acacia_fence", + "minecraft:pale_oak_fence", + "minecraft:crimson_fence", + "minecraft:birch_fence" + ], + "#minecraft:iron_ores": [ + "minecraft:iron_ore", + "minecraft:deepslate_iron_ore" + ], + "#minecraft:furnace_minecart_fuel": [ + "minecraft:charcoal", + "minecraft:coal" + ], + "#minecraft:beds": [ + "minecraft:white_bed", + "minecraft:brown_bed", + "minecraft:orange_bed", + "minecraft:black_bed", + "minecraft:red_bed", + "minecraft:lime_bed", + "minecraft:pink_bed", + "minecraft:blue_bed", + "minecraft:light_gray_bed", + "minecraft:cyan_bed", + "minecraft:light_blue_bed", + "minecraft:purple_bed", + "minecraft:yellow_bed", + "minecraft:green_bed", + "minecraft:gray_bed", + "minecraft:magenta_bed" + ], + "#minecraft:horse_food": [ + "minecraft:sugar", + "minecraft:carrot", + "minecraft:apple", + "minecraft:enchanted_golden_apple", + "minecraft:golden_apple", + "minecraft:wheat", + "minecraft:golden_carrot", + "minecraft:hay_block" + ], + "#minecraft:wooden_slabs": [ + "minecraft:warped_slab", + "minecraft:cherry_slab", + "minecraft:oak_slab", + "minecraft:acacia_slab", + "minecraft:crimson_slab", + "minecraft:pale_oak_slab", + "minecraft:bamboo_slab", + "minecraft:mangrove_slab", + "minecraft:birch_slab", + "minecraft:dark_oak_slab", + "minecraft:jungle_slab", + "minecraft:spruce_slab" + ], + "#minecraft:birch_logs": [ + "minecraft:stripped_birch_log", + "minecraft:birch_wood", + "minecraft:stripped_birch_wood", + "minecraft:birch_log" + ], + "#minecraft:repairs_gold_armor": [ + "minecraft:gold_ingot" + ], + "#minecraft:coals": [ + "minecraft:charcoal", + "minecraft:coal" + ], + "#minecraft:goat_food": [ + "minecraft:wheat" + ], + "#minecraft:creeper_igniters": [ + "minecraft:fire_charge", + "minecraft:flint_and_steel" + ], + "#minecraft:lectern_books": [ + "minecraft:written_book", + "minecraft:writable_book" + ], + "#minecraft:armadillo_food": [ + "minecraft:spider_eye" + ], + "#minecraft:completes_find_tree_tutorial": [ + "minecraft:stripped_spruce_wood", + "minecraft:stripped_acacia_wood", + "minecraft:dark_oak_leaves", + "minecraft:spruce_log", + "minecraft:cherry_leaves", + "minecraft:stripped_acacia_log", + "minecraft:stripped_jungle_wood", + "minecraft:mangrove_wood", + "minecraft:warped_stem", + "minecraft:pale_oak_wood", + "minecraft:birch_leaves", + "minecraft:stripped_dark_oak_log", + "minecraft:spruce_wood", + "minecraft:crimson_hyphae", + "minecraft:pale_oak_log", + "minecraft:acacia_wood", + "minecraft:jungle_leaves", + "minecraft:nether_wart_block", + "minecraft:warped_wart_block", + "minecraft:oak_leaves", + "minecraft:cherry_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_dark_oak_wood", + "minecraft:birch_log", + "minecraft:mangrove_leaves", + "minecraft:acacia_log", + "minecraft:stripped_oak_log", + "minecraft:stripped_warped_stem", + "minecraft:dark_oak_wood", + "minecraft:pale_oak_leaves", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_cherry_log", + "minecraft:azalea_leaves", + "minecraft:stripped_pale_oak_wood", + "minecraft:oak_log", + "minecraft:acacia_leaves", + "minecraft:stripped_mangrove_log", + "minecraft:birch_wood", + "minecraft:stripped_pale_oak_log", + "minecraft:stripped_warped_hyphae", + "minecraft:oak_wood", + "minecraft:jungle_wood", + "minecraft:stripped_oak_wood", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_crimson_hyphae", + "minecraft:dark_oak_log", + "minecraft:stripped_spruce_log", + "minecraft:jungle_log", + "minecraft:crimson_stem", + "minecraft:flowering_azalea_leaves", + "minecraft:stripped_birch_wood", + "minecraft:warped_hyphae", + "minecraft:spruce_leaves", + "minecraft:stripped_crimson_stem", + "minecraft:cherry_wood", + "minecraft:stripped_birch_log" + ], + "#minecraft:walls": [ + "minecraft:tuff_brick_wall", + "minecraft:prismarine_wall", + "minecraft:cobbled_deepslate_wall", + "minecraft:tuff_wall", + "minecraft:mossy_stone_brick_wall", + "minecraft:diorite_wall", + "minecraft:andesite_wall", + "minecraft:polished_deepslate_wall", + "minecraft:red_sandstone_wall", + "minecraft:mossy_cobblestone_wall", + "minecraft:blackstone_wall", + "minecraft:mud_brick_wall", + "minecraft:stone_brick_wall", + "minecraft:resin_brick_wall", + "minecraft:polished_tuff_wall", + "minecraft:nether_brick_wall", + "minecraft:polished_blackstone_brick_wall", + "minecraft:cobblestone_wall", + "minecraft:red_nether_brick_wall", + "minecraft:deepslate_tile_wall", + "minecraft:polished_blackstone_wall", + "minecraft:brick_wall", + "minecraft:granite_wall", + "minecraft:end_stone_brick_wall", + "minecraft:deepslate_brick_wall", + "minecraft:sandstone_wall" + ], + "#minecraft:warped_stems": [ + "minecraft:stripped_warped_hyphae", + "minecraft:warped_hyphae", + "minecraft:warped_stem", + "minecraft:stripped_warped_stem" + ], + "#minecraft:noteblock_top_instruments": [ + "minecraft:dragon_head", + "minecraft:creeper_head", + "minecraft:skeleton_skull", + "minecraft:piglin_head", + "minecraft:zombie_head", + "minecraft:wither_skeleton_skull", + "minecraft:player_head" + ], + "#minecraft:shulker_boxes": [ + "minecraft:brown_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box", + "minecraft:red_shulker_box", + "minecraft:green_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:blue_shulker_box" + ], + "#minecraft:logs_that_burn": [ + "minecraft:stripped_spruce_wood", + "minecraft:stripped_acacia_wood", + "minecraft:spruce_log", + "minecraft:stripped_acacia_log", + "minecraft:stripped_jungle_wood", + "minecraft:mangrove_wood", + "minecraft:pale_oak_wood", + "minecraft:stripped_dark_oak_log", + "minecraft:spruce_wood", + "minecraft:pale_oak_log", + "minecraft:acacia_wood", + "minecraft:cherry_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_dark_oak_wood", + "minecraft:birch_log", + "minecraft:acacia_log", + "minecraft:stripped_oak_log", + "minecraft:dark_oak_wood", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_cherry_log", + "minecraft:stripped_pale_oak_wood", + "minecraft:oak_log", + "minecraft:stripped_mangrove_log", + "minecraft:birch_wood", + "minecraft:stripped_pale_oak_log", + "minecraft:oak_wood", + "minecraft:jungle_wood", + "minecraft:stripped_oak_wood", + "minecraft:stripped_cherry_wood", + "minecraft:dark_oak_log", + "minecraft:stripped_spruce_log", + "minecraft:jungle_log", + "minecraft:stripped_birch_wood", + "minecraft:cherry_wood", + "minecraft:stripped_birch_log" + ], + "#minecraft:cat_food": [ + "minecraft:cod", + "minecraft:salmon" + ], + "#minecraft:chicken_food": [ + "minecraft:wheat_seeds", + "minecraft:beetroot_seeds", + "minecraft:pumpkin_seeds", + "minecraft:pitcher_pod", + "minecraft:torchflower_seeds", + "minecraft:melon_seeds" + ], + "#minecraft:meat": [ + "minecraft:cooked_mutton", + "minecraft:cooked_porkchop", + "minecraft:rotten_flesh", + "minecraft:porkchop", + "minecraft:cooked_beef", + "minecraft:chicken", + "minecraft:cooked_chicken", + "minecraft:cooked_rabbit", + "minecraft:beef", + "minecraft:rabbit", + "minecraft:mutton" + ], + "#minecraft:sand": [ + "minecraft:red_sand", + "minecraft:sand", + "minecraft:suspicious_sand" + ], + "#minecraft:strider_tempt_items": [ + "minecraft:warped_fungus", + "minecraft:warped_fungus_on_a_stick" + ], + "#minecraft:llama_tempt_items": [ + "minecraft:hay_block" + ], + "#minecraft:chest_boats": [ + "minecraft:dark_oak_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:birch_chest_boat", + "minecraft:pale_oak_chest_boat", + "minecraft:cherry_chest_boat", + "minecraft:bamboo_chest_raft", + "minecraft:oak_chest_boat" + ], + "#minecraft:slabs": [ + "minecraft:warped_slab", + "minecraft:cut_copper_slab", + "minecraft:oxidized_cut_copper_slab", + "minecraft:end_stone_brick_slab", + "minecraft:mud_brick_slab", + "minecraft:quartz_slab", + "minecraft:deepslate_brick_slab", + "minecraft:sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:resin_brick_slab", + "minecraft:tuff_slab", + "minecraft:mangrove_slab", + "minecraft:bamboo_mosaic_slab", + "minecraft:cobbled_deepslate_slab", + "minecraft:cobblestone_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:diorite_slab", + "minecraft:stone_brick_slab", + "minecraft:andesite_slab", + "minecraft:polished_deepslate_slab", + "minecraft:polished_blackstone_slab", + "minecraft:tuff_brick_slab", + "minecraft:acacia_slab", + "minecraft:nether_brick_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:prismarine_slab", + "minecraft:dark_oak_slab", + "minecraft:polished_blackstone_brick_slab", + "minecraft:cherry_slab", + "minecraft:cut_sandstone_slab", + "minecraft:polished_tuff_slab", + "minecraft:polished_diorite_slab", + "minecraft:pale_oak_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:waxed_exposed_cut_copper_slab", + "minecraft:deepslate_tile_slab", + "minecraft:brick_slab", + "minecraft:blackstone_slab", + "minecraft:oak_slab", + "minecraft:waxed_weathered_cut_copper_slab", + "minecraft:weathered_cut_copper_slab", + "minecraft:dark_prismarine_slab", + "minecraft:smooth_stone_slab", + "minecraft:exposed_cut_copper_slab", + "minecraft:crimson_slab", + "minecraft:red_sandstone_slab", + "minecraft:polished_granite_slab", + "minecraft:stone_slab", + "minecraft:cut_red_sandstone_slab", + "minecraft:waxed_oxidized_cut_copper_slab", + "minecraft:bamboo_slab", + "minecraft:prismarine_brick_slab", + "minecraft:birch_slab", + "minecraft:petrified_oak_slab", + "minecraft:smooth_quartz_slab", + "minecraft:waxed_cut_copper_slab", + "minecraft:granite_slab", + "minecraft:purpur_slab", + "minecraft:jungle_slab", + "minecraft:spruce_slab" + ], + "#minecraft:compasses": [ + "minecraft:recovery_compass", + "minecraft:compass" + ], + "#minecraft:netherite_tool_materials": [ + "minecraft:netherite_ingot" + ], + "#minecraft:anvil": [ + "minecraft:anvil", + "minecraft:chipped_anvil", + "minecraft:damaged_anvil" + ], + "#minecraft:coal_ores": [ + "minecraft:deepslate_coal_ore", + "minecraft:coal_ore" + ], + "#minecraft:logs": [ + "minecraft:stripped_spruce_wood", + "minecraft:stripped_acacia_wood", + "minecraft:stripped_birch_log", + "minecraft:spruce_log", + "minecraft:stripped_acacia_log", + "minecraft:stripped_jungle_wood", + "minecraft:mangrove_wood", + "minecraft:warped_stem", + "minecraft:stripped_dark_oak_log", + "minecraft:spruce_wood", + "minecraft:pale_oak_log", + "minecraft:acacia_wood", + "minecraft:crimson_hyphae", + "minecraft:cherry_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_dark_oak_wood", + "minecraft:birch_log", + "minecraft:acacia_log", + "minecraft:stripped_oak_log", + "minecraft:dark_oak_wood", + "minecraft:stripped_warped_stem", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_cherry_log", + "minecraft:stripped_pale_oak_wood", + "minecraft:oak_log", + "minecraft:stripped_mangrove_log", + "minecraft:birch_wood", + "minecraft:stripped_pale_oak_log", + "minecraft:oak_wood", + "minecraft:jungle_wood", + "minecraft:stripped_warped_hyphae", + "minecraft:stripped_oak_wood", + "minecraft:stripped_cherry_wood", + "minecraft:dark_oak_log", + "minecraft:stripped_spruce_log", + "minecraft:stripped_crimson_hyphae", + "minecraft:jungle_log", + "minecraft:crimson_stem", + "minecraft:stripped_birch_wood", + "minecraft:warped_hyphae", + "minecraft:stripped_crimson_stem", + "minecraft:cherry_wood", + "minecraft:pale_oak_wood" + ], + "#minecraft:decorated_pot_ingredients": [ + "minecraft:burn_pottery_sherd", + "minecraft:archer_pottery_sherd", + "minecraft:explorer_pottery_sherd", + "minecraft:guster_pottery_sherd", + "minecraft:danger_pottery_sherd", + "minecraft:brick", + "minecraft:skull_pottery_sherd", + "minecraft:heartbreak_pottery_sherd", + "minecraft:mourner_pottery_sherd", + "minecraft:scrape_pottery_sherd", + "minecraft:snort_pottery_sherd", + "minecraft:miner_pottery_sherd", + "minecraft:plenty_pottery_sherd", + "minecraft:howl_pottery_sherd", + "minecraft:blade_pottery_sherd", + "minecraft:shelter_pottery_sherd", + "minecraft:prize_pottery_sherd", + "minecraft:angler_pottery_sherd", + "minecraft:heart_pottery_sherd", + "minecraft:friend_pottery_sherd", + "minecraft:arms_up_pottery_sherd", + "minecraft:flow_pottery_sherd", + "minecraft:brewer_pottery_sherd", + "minecraft:sheaf_pottery_sherd" + ], + "#minecraft:wooden_tool_materials": [ + "minecraft:pale_oak_planks", + "minecraft:bamboo_planks", + "minecraft:acacia_planks", + "minecraft:mangrove_planks", + "minecraft:dark_oak_planks", + "minecraft:oak_planks", + "minecraft:warped_planks", + "minecraft:jungle_planks", + "minecraft:spruce_planks", + "minecraft:cherry_planks", + "minecraft:crimson_planks", + "minecraft:birch_planks" + ], + "#minecraft:copper_ores": [ + "minecraft:deepslate_copper_ore", + "minecraft:copper_ore" + ], + "#minecraft:wooden_fences": [ + "minecraft:warped_fence", + "minecraft:cherry_fence", + "minecraft:spruce_fence", + "minecraft:oak_fence", + "minecraft:jungle_fence", + "minecraft:dark_oak_fence", + "minecraft:mangrove_fence", + "minecraft:bamboo_fence", + "minecraft:acacia_fence", + "minecraft:pale_oak_fence", + "minecraft:crimson_fence", + "minecraft:birch_fence" + ], + "#minecraft:wither_skeleton_disliked_weapons": [ + "minecraft:bow", + "minecraft:crossbow" + ], + "#minecraft:rabbit_food": [ + "minecraft:golden_carrot", + "minecraft:carrot", + "minecraft:dandelion" + ], + "#minecraft:diamond_tool_materials": [ + "minecraft:diamond" + ], + "#minecraft:parrot_food": [ + "minecraft:wheat_seeds", + "minecraft:beetroot_seeds", + "minecraft:pumpkin_seeds", + "minecraft:pitcher_pod", + "minecraft:torchflower_seeds", + "minecraft:melon_seeds" + ], + "#minecraft:chains": [ + "minecraft:waxed_exposed_copper_chain", + "minecraft:waxed_weathered_copper_chain", + "minecraft:copper_chain", + "minecraft:oxidized_copper_chain", + "minecraft:weathered_copper_chain", + "minecraft:waxed_copper_chain", + "minecraft:iron_chain", + "minecraft:waxed_oxidized_copper_chain", + "minecraft:exposed_copper_chain" + ], + "#minecraft:stone_buttons": [ + "minecraft:polished_blackstone_button", + "minecraft:stone_button" + ], + "#minecraft:pillager_preferred_weapons": [ + "minecraft:crossbow" + ], + "#minecraft:happy_ghast_tempt_items": [ + "minecraft:blue_harness", + "minecraft:purple_harness", + "minecraft:orange_harness", + "minecraft:brown_harness", + "minecraft:pink_harness", + "minecraft:red_harness", + "minecraft:light_blue_harness", + "minecraft:snowball", + "minecraft:yellow_harness", + "minecraft:light_gray_harness", + "minecraft:green_harness", + "minecraft:magenta_harness", + "minecraft:black_harness", + "minecraft:gray_harness", + "minecraft:cyan_harness", + "minecraft:lime_harness", + "minecraft:white_harness" + ], + "#minecraft:fence_gates": [ + "minecraft:spruce_fence_gate", + "minecraft:birch_fence_gate", + "minecraft:crimson_fence_gate", + "minecraft:cherry_fence_gate", + "minecraft:mangrove_fence_gate", + "minecraft:acacia_fence_gate", + "minecraft:bamboo_fence_gate", + "minecraft:jungle_fence_gate", + "minecraft:dark_oak_fence_gate", + "minecraft:warped_fence_gate", + "minecraft:oak_fence_gate", + "minecraft:pale_oak_fence_gate" + ], + "#minecraft:wool": [ + "minecraft:brown_wool", + "minecraft:green_wool", + "minecraft:pink_wool", + "minecraft:white_wool", + "minecraft:red_wool", + "minecraft:orange_wool", + "minecraft:lime_wool", + "minecraft:light_blue_wool", + "minecraft:black_wool", + "minecraft:magenta_wool", + "minecraft:yellow_wool", + "minecraft:gray_wool", + "minecraft:light_gray_wool", + "minecraft:purple_wool", + "minecraft:blue_wool", + "minecraft:cyan_wool" + ], + "#minecraft:duplicates_allays": [ + "minecraft:amethyst_shard" + ], + "#minecraft:breaks_decorated_pots": [ + "minecraft:golden_axe", + "minecraft:stone_hoe", + "minecraft:golden_hoe", + "minecraft:copper_shovel", + "minecraft:netherite_pickaxe", + "minecraft:stone_pickaxe", + "minecraft:iron_hoe", + "minecraft:golden_shovel", + "minecraft:diamond_pickaxe", + "minecraft:wooden_sword", + "minecraft:wooden_pickaxe", + "minecraft:iron_axe", + "minecraft:wooden_shovel", + "minecraft:netherite_hoe", + "minecraft:trident", + "minecraft:wooden_hoe", + "minecraft:netherite_sword", + "minecraft:stone_sword", + "minecraft:mace", + "minecraft:netherite_axe", + "minecraft:golden_sword", + "minecraft:stone_axe", + "minecraft:golden_pickaxe", + "minecraft:diamond_shovel", + "minecraft:copper_hoe", + "minecraft:netherite_shovel", + "minecraft:copper_pickaxe", + "minecraft:diamond_hoe", + "minecraft:stone_shovel", + "minecraft:wooden_axe", + "minecraft:diamond_axe", + "minecraft:diamond_sword", + "minecraft:copper_axe", + "minecraft:iron_shovel", + "minecraft:copper_sword", + "minecraft:iron_pickaxe", + "minecraft:iron_sword" + ], + "#minecraft:saplings": [ + "minecraft:azalea", + "minecraft:acacia_sapling", + "minecraft:flowering_azalea", + "minecraft:dark_oak_sapling", + "minecraft:pale_oak_sapling", + "minecraft:mangrove_propagule", + "minecraft:spruce_sapling", + "minecraft:jungle_sapling", + "minecraft:cherry_sapling", + "minecraft:birch_sapling", + "minecraft:oak_sapling" + ], + "#minecraft:trimmable_armor": [ + "minecraft:diamond_chestplate", + "minecraft:golden_leggings", + "minecraft:netherite_leggings", + "minecraft:chainmail_chestplate", + "minecraft:copper_chestplate", + "minecraft:diamond_boots", + "minecraft:iron_boots", + "minecraft:chainmail_leggings", + "minecraft:iron_chestplate", + "#minecraft:head_armor", + "minecraft:iron_leggings", + "minecraft:netherite_boots", + "minecraft:copper_boots", + "minecraft:netherite_chestplate", + "minecraft:leather_boots", + "minecraft:golden_chestplate", + "minecraft:golden_boots", + "minecraft:chainmail_boots", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:diamond_leggings", + "minecraft:copper_leggings" + ], + "#minecraft:repairs_netherite_armor": [ + "minecraft:netherite_ingot" + ], + "#minecraft:cluster_max_harvestables": [ + "minecraft:wooden_pickaxe", + "minecraft:golden_pickaxe", + "minecraft:copper_pickaxe", + "minecraft:netherite_pickaxe", + "minecraft:stone_pickaxe", + "minecraft:iron_pickaxe", + "minecraft:diamond_pickaxe" + ], + "#minecraft:pig_food": [ + "minecraft:beetroot", + "minecraft:carrot", + "minecraft:potato" + ], + "#minecraft:villager_plantable_seeds": [ + "minecraft:wheat_seeds", + "minecraft:beetroot_seeds", + "minecraft:carrot", + "minecraft:pitcher_pod", + "minecraft:torchflower_seeds", + "minecraft:potato" + ], + "#minecraft:gold_tool_materials": [ + "minecraft:gold_ingot" + ], + "#minecraft:leaves": [ + "minecraft:mangrove_leaves", + "minecraft:dark_oak_leaves", + "minecraft:jungle_leaves", + "minecraft:pale_oak_leaves", + "minecraft:cherry_leaves", + "minecraft:oak_leaves", + "minecraft:azalea_leaves", + "minecraft:flowering_azalea_leaves", + "minecraft:acacia_leaves", + "minecraft:spruce_leaves", + "minecraft:birch_leaves" + ], + "#minecraft:diamond_ores": [ + "minecraft:diamond_ore", + "minecraft:deepslate_diamond_ore" + ], + "#minecraft:wart_blocks": [ + "minecraft:nether_wart_block", + "minecraft:warped_wart_block" + ], + "#minecraft:piglin_safe_armor": [ + "minecraft:golden_boots", + "minecraft:golden_chestplate", + "minecraft:golden_helmet", + "minecraft:golden_leggings" + ], + "#minecraft:copper_golem_statues": [ + "minecraft:weathered_copper_golem_statue", + "minecraft:waxed_exposed_copper_golem_statue", + "minecraft:oxidized_copper_golem_statue", + "minecraft:waxed_oxidized_copper_golem_statue", + "minecraft:exposed_copper_golem_statue", + "minecraft:waxed_weathered_copper_golem_statue", + "minecraft:waxed_copper_golem_statue", + "minecraft:copper_golem_statue" + ], + "#minecraft:repairs_chain_armor": [ + "minecraft:iron_ingot" + ], + "#minecraft:hoglin_food": [ + "minecraft:crimson_fungus" + ], + "#minecraft:creeper_drop_music_discs": [ + "minecraft:music_disc_stal", + "minecraft:music_disc_mall", + "minecraft:music_disc_cat", + "minecraft:music_disc_chirp", + "minecraft:music_disc_13", + "minecraft:music_disc_ward", + "minecraft:music_disc_strad", + "minecraft:music_disc_blocks", + "minecraft:music_disc_11", + "minecraft:music_disc_mellohi", + "minecraft:music_disc_wait", + "minecraft:music_disc_far" + ], + "#minecraft:dyeable": [ + "minecraft:leather_helmet", + "minecraft:leather_horse_armor", + "minecraft:leather_chestplate", + "minecraft:wolf_armor", + "minecraft:leather_leggings", + "minecraft:leather_boots" + ], + "#minecraft:planks": [ + "minecraft:pale_oak_planks", + "minecraft:bamboo_planks", + "minecraft:acacia_planks", + "minecraft:mangrove_planks", + "minecraft:dark_oak_planks", + "minecraft:oak_planks", + "minecraft:warped_planks", + "minecraft:jungle_planks", + "minecraft:spruce_planks", + "minecraft:cherry_planks", + "minecraft:crimson_planks", + "minecraft:birch_planks" + ], + "#minecraft:sheep_food": [ + "minecraft:wheat" + ], + "#minecraft:wolf_food": [ + "minecraft:cooked_mutton", + "minecraft:cooked_porkchop", + "minecraft:rotten_flesh", + "minecraft:porkchop", + "minecraft:cooked_beef", + "minecraft:cod", + "minecraft:cooked_cod", + "minecraft:cooked_salmon", + "minecraft:salmon", + "minecraft:chicken", + "minecraft:cooked_chicken", + "minecraft:cooked_rabbit", + "minecraft:rabbit_stew", + "minecraft:pufferfish", + "minecraft:beef", + "minecraft:tropical_fish", + "minecraft:rabbit", + "minecraft:mutton" + ], + "#minecraft:horse_tempt_items": [ + "minecraft:golden_carrot", + "minecraft:enchanted_golden_apple", + "minecraft:golden_apple" + ], + "#minecraft:piglin_food": [ + "minecraft:cooked_porkchop", + "minecraft:porkchop" + ], + "#minecraft:freeze_immune_wearables": [ + "minecraft:leather_helmet", + "minecraft:leather_horse_armor", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots" + ], + "#minecraft:emerald_ores": [ + "minecraft:deepslate_emerald_ore", + "minecraft:emerald_ore" + ], + "#minecraft:repairs_diamond_armor": [ + "minecraft:diamond" + ], + "#minecraft:piglin_loved": [ + "minecraft:golden_axe", + "minecraft:golden_hoe", + "minecraft:golden_leggings", + "minecraft:golden_apple", + "minecraft:raw_gold_block", + "minecraft:golden_nautilus_armor", + "minecraft:golden_shovel", + "minecraft:deepslate_gold_ore", + "minecraft:enchanted_golden_apple", + "minecraft:gold_block", + "minecraft:golden_sword", + "minecraft:golden_pickaxe", + "minecraft:bell", + "minecraft:golden_chestplate", + "minecraft:gold_ingot", + "minecraft:golden_helmet", + "minecraft:golden_boots", + "minecraft:golden_horse_armor", + "minecraft:nether_gold_ore", + "minecraft:raw_gold", + "minecraft:glistering_melon_slice", + "minecraft:golden_spear", + "minecraft:clock", + "minecraft:gilded_blackstone", + "minecraft:golden_carrot", + "minecraft:gold_ore", + "minecraft:light_weighted_pressure_plate" + ], + "#minecraft:banners": [ + "minecraft:lime_banner", + "minecraft:green_banner", + "minecraft:yellow_banner", + "minecraft:pink_banner", + "minecraft:red_banner", + "minecraft:orange_banner", + "minecraft:blue_banner", + "minecraft:light_gray_banner", + "minecraft:brown_banner", + "minecraft:black_banner", + "minecraft:gray_banner", + "minecraft:light_blue_banner", + "minecraft:cyan_banner", + "minecraft:purple_banner", + "minecraft:magenta_banner", + "minecraft:white_banner" + ], + "#minecraft:dampens_vibrations": [ + "minecraft:green_carpet", + "minecraft:magenta_carpet", + "minecraft:lime_carpet", + "minecraft:light_gray_carpet", + "minecraft:gray_carpet", + "minecraft:gray_wool", + "minecraft:red_wool", + "minecraft:brown_carpet", + "minecraft:pink_wool", + "minecraft:orange_carpet", + "minecraft:cyan_carpet", + "minecraft:pink_carpet", + "minecraft:light_blue_wool", + "minecraft:yellow_carpet", + "minecraft:black_carpet", + "minecraft:light_gray_wool", + "minecraft:black_wool", + "minecraft:cyan_wool", + "minecraft:purple_carpet", + "minecraft:orange_wool", + "minecraft:white_carpet", + "minecraft:blue_carpet", + "minecraft:yellow_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:green_wool", + "minecraft:light_blue_carpet", + "minecraft:white_wool", + "minecraft:lime_wool", + "minecraft:magenta_wool", + "minecraft:purple_wool", + "minecraft:red_carpet" + ], + "#minecraft:lightning_rods": [ + "minecraft:exposed_lightning_rod", + "minecraft:waxed_weathered_lightning_rod", + "minecraft:lightning_rod", + "minecraft:weathered_lightning_rod", + "minecraft:oxidized_lightning_rod", + "minecraft:waxed_lightning_rod", + "minecraft:waxed_exposed_lightning_rod", + "minecraft:waxed_oxidized_lightning_rod" + ], + "#minecraft:terracotta": [ + "minecraft:light_gray_terracotta", + "minecraft:terracotta", + "minecraft:white_terracotta", + "minecraft:light_blue_terracotta", + "minecraft:gray_terracotta", + "minecraft:magenta_terracotta", + "minecraft:cyan_terracotta", + "minecraft:orange_terracotta", + "minecraft:blue_terracotta", + "minecraft:purple_terracotta", + "minecraft:brown_terracotta", + "minecraft:black_terracotta", + "minecraft:pink_terracotta", + "minecraft:lime_terracotta", + "minecraft:green_terracotta", + "minecraft:red_terracotta", + "minecraft:yellow_terracotta" + ], + "#minecraft:bee_food": [ + "minecraft:sunflower", + "minecraft:lilac", + "minecraft:cherry_leaves", + "minecraft:wither_rose", + "minecraft:cactus_flower", + "minecraft:mangrove_propagule", + "minecraft:oxeye_daisy", + "minecraft:open_eyeblossom", + "minecraft:allium", + "minecraft:spore_blossom", + "minecraft:lily_of_the_valley", + "minecraft:pink_petals", + "minecraft:dandelion", + "minecraft:peony", + "minecraft:azure_bluet", + "minecraft:blue_orchid", + "minecraft:poppy", + "minecraft:white_tulip", + "minecraft:rose_bush", + "minecraft:pink_tulip", + "minecraft:flowering_azalea", + "minecraft:wildflowers", + "minecraft:chorus_flower", + "minecraft:flowering_azalea_leaves", + "minecraft:red_tulip", + "minecraft:cornflower", + "minecraft:torchflower", + "minecraft:orange_tulip", + "minecraft:pitcher_plant" + ], + "#minecraft:repairs_wolf_armor": [ + "minecraft:armadillo_scute" + ], + "#minecraft:redstone_ores": [ + "minecraft:redstone_ore", + "minecraft:deepslate_redstone_ore" + ], + "#minecraft:repairs_turtle_helmet": [ + "minecraft:turtle_scute" + ], + "#minecraft:buttons": [ + "minecraft:mangrove_button", + "minecraft:crimson_button", + "minecraft:cherry_button", + "minecraft:spruce_button", + "minecraft:dark_oak_button", + "minecraft:polished_blackstone_button", + "minecraft:bamboo_button", + "minecraft:jungle_button", + "minecraft:birch_button", + "minecraft:stone_button", + "minecraft:acacia_button", + "minecraft:pale_oak_button", + "minecraft:warped_button", + "minecraft:oak_button" + ], + "#minecraft:beacon_payment_items": [ + "minecraft:iron_ingot", + "minecraft:netherite_ingot", + "minecraft:gold_ingot", + "minecraft:emerald", + "minecraft:diamond" + ], + "#minecraft:repairs_iron_armor": [ + "minecraft:iron_ingot" + ], + "#minecraft:spears": [ + "minecraft:diamond_spear", + "minecraft:golden_spear", + "minecraft:copper_spear", + "minecraft:stone_spear", + "minecraft:netherite_spear", + "minecraft:wooden_spear", + "minecraft:iron_spear" + ], + "#minecraft:repairs_copper_armor": [ + "minecraft:copper_ingot" + ], + "#minecraft:wooden_doors": [ + "minecraft:acacia_door", + "minecraft:spruce_door", + "minecraft:dark_oak_door", + "minecraft:crimson_door", + "minecraft:pale_oak_door", + "minecraft:bamboo_door", + "minecraft:cherry_door", + "minecraft:warped_door", + "minecraft:mangrove_door", + "minecraft:oak_door", + "minecraft:birch_door", + "minecraft:jungle_door" + ], + "#minecraft:jungle_logs": [ + "minecraft:jungle_wood", + "minecraft:jungle_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_jungle_wood" + ], + "#minecraft:map_invisibility_equipment": [ + "minecraft:carved_pumpkin" + ], + "#minecraft:gaze_disguise_equipment": [ + "minecraft:carved_pumpkin" + ], + "#minecraft:panda_eats_from_ground": [ + "minecraft:cake", + "minecraft:bamboo" + ], + "#minecraft:skulls": [ + "minecraft:dragon_head", + "minecraft:creeper_head", + "minecraft:skeleton_skull", + "minecraft:piglin_head", + "minecraft:zombie_head", + "minecraft:wither_skeleton_skull", + "minecraft:player_head" + ], + "#minecraft:hoes": [ + "minecraft:stone_hoe", + "minecraft:golden_hoe", + "minecraft:copper_hoe", + "minecraft:netherite_hoe", + "minecraft:diamond_hoe", + "minecraft:wooden_hoe", + "minecraft:iron_hoe" + ], + "#minecraft:wooden_shelves": [ + "minecraft:mangrove_shelf", + "minecraft:oak_shelf", + "minecraft:warped_shelf", + "minecraft:bamboo_shelf", + "minecraft:cherry_shelf", + "minecraft:jungle_shelf", + "minecraft:birch_shelf", + "minecraft:spruce_shelf", + "minecraft:pale_oak_shelf", + "minecraft:crimson_shelf", + "minecraft:dark_oak_shelf", + "minecraft:acacia_shelf" + ], + "#minecraft:acacia_logs": [ + "minecraft:acacia_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_log", + "minecraft:stripped_acacia_wood" + ] + } +} \ No newline at end of file