From efad2069c7ab05e80f96ae44447fac07cf5066ed Mon Sep 17 00:00:00 2001 From: Robbie Gordon <99526923+ASAOddball1@users.noreply.github.com> Date: Sat, 7 Mar 2026 17:15:28 -0800 Subject: [PATCH] initial commit Functioning build --- MLCE Converter.py | 388 +++++++++ Purple tex.png | Bin 0 -> 125 bytes armour_boots.png | Bin 0 -> 157 bytes armour_chest.png | Bin 0 -> 162 bytes armour_head.png | Bin 0 -> 163 bytes armour_leg.png | Bin 0 -> 155 bytes brown thing 2.png | Bin 0 -> 175 bytes brown thing 3.png | Bin 0 -> 187 bytes brown thing.png | Bin 0 -> 164 bytes firetex.png | Bin 0 -> 173 bytes inventory_overlay.png | Bin 0 -> 146 bytes items.json | 1406 ++++++++++++++++++++++++++++++ items.png | Bin 0 -> 21970 bytes lava_flow.png | Bin 0 -> 287 bytes quiver.png | Bin 0 -> 258 bytes ruby.png | Bin 0 -> 536 bytes spawn egg particle.png | Bin 0 -> 334 bytes terrain.json | 1868 ++++++++++++++++++++++++++++++++++++++++ 18 files changed, 3662 insertions(+) create mode 100644 MLCE Converter.py create mode 100644 Purple tex.png create mode 100644 armour_boots.png create mode 100644 armour_chest.png create mode 100644 armour_head.png create mode 100644 armour_leg.png create mode 100644 brown thing 2.png create mode 100644 brown thing 3.png create mode 100644 brown thing.png create mode 100644 firetex.png create mode 100644 inventory_overlay.png create mode 100644 items.json create mode 100644 items.png create mode 100644 lava_flow.png create mode 100644 quiver.png create mode 100644 ruby.png create mode 100644 spawn egg particle.png create mode 100644 terrain.json diff --git a/MLCE Converter.py b/MLCE Converter.py new file mode 100644 index 0000000..ef2619f --- /dev/null +++ b/MLCE Converter.py @@ -0,0 +1,388 @@ +import tkinter as tk +from tkinter import ttk, filedialog, messagebox +import json +import os +from pathlib import Path +from PIL import Image, ImageTk + +# ── THEME ────────────────────────────────────────────────────────────────── +BG_DARK = "#2D2D30" +BG_PANEL = "#1E1E1E" +FG_MAIN = "#FFFFFF" +FG_GRAY = "#808080" +ACCENT = "#007ACC" +BTN_GREEN = "#3C8527" +BTN_RES = "#4A4A4F" +BTN_RES_ON= "#CC7A00" + +# Base canvas sizes in 16x tile units (width_tiles, height_tiles) +# Multiply by tile_px at build time to get pixel size +CANVAS_TILES = { + "terrain": (16, 32), + "items": (16, 16), + "particles": (8, 8), +} + +_preview_img = None + +projects = { + "terrain": {"json_path": "", "layout": [], "final_map": {}}, + "items": {"json_path": "", "layout": [], "final_map": {}}, + "particles": {"json_path": "", "layout": [], "final_map": {}}, +} +source_dir = {"v": ""} +current_scale = {"v": 1} # 1=16x 2=32x 4=64x + +TAB_ORDER = ["terrain", "items", "particles"] + +# ── ROOT ─────────────────────────────────────────────────────────────────── +root = tk.Tk() +root.title("Texture Manager v5.5") +root.geometry("1000x800") +root.minsize(800, 600) +root.configure(bg=BG_DARK) + +# ── TTK STYLES ───────────────────────────────────────────────────────────── +style = ttk.Style() +style.theme_use("default") +style.configure("Dark.Treeview", + background=BG_PANEL, foreground=FG_MAIN, + fieldbackground=BG_PANEL, rowheight=22, + font=("Segoe UI", 9)) +style.configure("Dark.Treeview.Heading", + background="#3C3C3C", foreground=FG_MAIN, + font=("Segoe UI", 9, "bold"), relief="flat") +style.map("Dark.Treeview", + background=[("selected", ACCENT)], + foreground=[("selected", FG_MAIN)]) +style.configure("Dark.TNotebook", + background=BG_DARK, borderwidth=0, tabmargins=0) +style.configure("Dark.TNotebook.Tab", + background="#3C3C3C", foreground=FG_GRAY, + padding=[18, 7], font=("Segoe UI", 9, "bold")) +style.map("Dark.TNotebook.Tab", + background=[("selected", ACCENT)], + foreground=[("selected", FG_MAIN)]) + +# ═══════════════════════════════════════════════════════════════════════════ +# TOP BAR +# ═══════════════════════════════════════════════════════════════════════════ +top_bar = tk.Frame(root, bg=BG_PANEL, height=46) +top_bar.pack(side="top", fill="x") +top_bar.pack_propagate(False) + +def pick_library(): + d = filedialog.askdirectory(title="Select Texture Library Folder") + if d: + source_dir["v"] = d + btn_lib.config(text=f"Library: {Path(d).name}") + +btn_lib = tk.Button(top_bar, text="1. SELECT LIBRARY", + bg="#3C3C3C", fg=FG_MAIN, + activebackground="#505050", activeforeground=FG_MAIN, + relief="flat", font=("Segoe UI", 9, "bold"), + command=pick_library) +btn_lib.pack(side="left", padx=(8, 6), pady=7, ipady=5, ipadx=10) + +json_btns = {} +for ptype in TAB_ORDER: + def make_json_cmd(pt): + def cmd(): + f = filedialog.askopenfilename( + title=f"Select {pt.upper()} JSON", + filetypes=[("JSON Files", "*.json")]) + if f: + with open(f, "r", encoding="utf-8") as fh: + projects[pt]["layout"] = json.load(fh) + projects[pt]["json_path"] = f + projects[pt]["final_map"] = {} + json_btns[pt].config( + text=f"{pt.upper()} JSON: {Path(f).name}", + fg="#90EE90") + refresh_list(pt) + return cmd + b = tk.Button(top_bar, + text=f"{ptype.upper()} JSON: ---", + bg="#3C3C3C", fg=FG_GRAY, + activebackground="#505050", activeforeground=FG_MAIN, + relief="flat", font=("Segoe UI", 9), + command=make_json_cmd(ptype)) + b.pack(side="left", padx=4, pady=7, ipady=5, ipadx=8) + json_btns[ptype] = b + +tk.Frame(top_bar, bg="#555555", width=2).pack( + side="left", fill="y", pady=8, padx=6) + +res_btns = {} + +def set_resolution(scale): + current_scale["v"] = scale + labels = {1: "16x", 2: "32x", 4: "64x"} + for s, btn in res_btns.items(): + if s == scale: + btn.config(bg=BTN_RES_ON, fg=FG_MAIN, relief="sunken") + else: + btn.config(bg=BTN_RES, fg=FG_GRAY, relief="flat") + root.title(f"Texture Manager v5.5 [{labels[scale]}]") + +for scale, label in [(1, "16x"), (2, "32x"), (4, "64x")]: + def make_res_cmd(s): + return lambda: set_resolution(s) + b = tk.Button(top_bar, text=label, + bg=BTN_RES, fg=FG_GRAY, + activebackground="#666666", activeforeground=FG_MAIN, + relief="flat", font=("Segoe UI", 9, "bold"), width=4, + command=make_res_cmd(scale)) + b.pack(side="left", padx=2, pady=7, ipady=5) + res_btns[scale] = b + +set_resolution(1) + +# ═══════════════════════════════════════════════════════════════════════════ +# LOAD TILE +# Crops to a square first frame (handles animated strips of any height), +# then resizes to exactly tile_px × tile_px using nearest neighbour. +# ═══════════════════════════════════════════════════════════════════════════ +def load_tile(fpath, tile_px): + img = Image.open(fpath).convert("RGBA") + w, h = img.size + + # Determine the native tile size: smallest of w and h + # (animated strips are always taller than wide) + native = min(w, h) + + # Crop to first frame (top-left native×native square) + if w != native or h != native: + img = img.crop((0, 0, native, native)) + + # Scale to target tile size + if img.size != (tile_px, tile_px): + img = img.resize((tile_px, tile_px), Image.NEAREST) + + return img + + +# ═══════════════════════════════════════════════════════════════════════════ +# NOTEBOOK TABS +# ═══════════════════════════════════════════════════════════════════════════ +notebook = ttk.Notebook(root, style="Dark.TNotebook") +notebook.pack(side="top", fill="both", expand=True, padx=10, pady=(6, 0)) + +trees = {} +previews = {} + +for ptype in TAB_ORDER: + tab = tk.Frame(notebook, bg=BG_DARK) + notebook.add(tab, text=f" {ptype.upper()} ") + + sv = tk.StringVar() + se = tk.Entry(tab, textvariable=sv, + bg=BG_PANEL, fg=FG_MAIN, insertbackground=FG_MAIN, + relief="flat", font=("Segoe UI", 10)) + se.pack(side="top", fill="x", padx=0, pady=(0, 4), ipady=4) + projects[ptype]["search_var"] = sv + sv.trace_add("write", lambda *_, pt=ptype: refresh_list(pt)) + + pane = tk.PanedWindow(tab, orient=tk.HORIZONTAL, + bg=BG_DARK, sashwidth=5, sashrelief="flat") + pane.pack(fill="both", expand=True) + + lf = tk.Frame(pane, bg=BG_PANEL) + pane.add(lf, width=620, minsize=300) + + tree = ttk.Treeview(lf, columns=("block", "source"), + show="headings", style="Dark.Treeview", + selectmode="browse") + tree.heading("block", text="BLOCK TYPE") + tree.heading("source", text="SOURCE FILE") + tree.column("block", width=250, anchor="w") + tree.column("source", width=350, anchor="w") + vsb = ttk.Scrollbar(lf, orient="vertical", command=tree.yview) + tree.configure(yscrollcommand=vsb.set) + vsb.pack(side="right", fill="y") + tree.pack(side="left", fill="both", expand=True) + trees[ptype] = tree + + rf = tk.Frame(pane, bg=BG_DARK) + pane.add(rf, minsize=200) + + pc = tk.Canvas(rf, bg="black", highlightthickness=0) + pc.place(x=10, y=10, relwidth=1.0, width=-20, height=310) + previews[ptype] = pc + + def make_auto(pt): + def do_auto(): + if not source_dir["v"]: + messagebox.showwarning("No Library", + "Please select a library folder first.") + return + png_files = {} + for r, _, files in os.walk(source_dir["v"]): + for f in files: + if f.lower().endswith(".png"): + base = Path(f).stem + if base not in png_files: + png_files[base] = os.path.join(r, f) + matched = 0 + for i, obj in enumerate(projects[pt]["layout"]): + name = obj.get("Name") or obj.get("n", "") + if name in png_files: + projects[pt]["final_map"][i] = png_files[name] + matched += 1 + refresh_list(pt) + messagebox.showinfo("Auto-Sync Complete", + f"Matched {matched} of {len(projects[pt]['layout'])} entries.") + return do_auto + + tk.Button(rf, text="AUTO-SYNC FROM LIBRARY", + bg=ACCENT, fg=FG_MAIN, + activebackground="#005FA3", activeforeground=FG_MAIN, + relief="flat", font=("Segoe UI", 10, "bold"), + command=make_auto(ptype)).place( + x=10, y=328, relwidth=1.0, width=-20, height=52) + + def make_sel(pt): + def on_sel(event): + global _preview_img + sel = trees[pt].selection() + if not sel: + return + idx = int(sel[0]) + previews[pt].delete("all") + if idx not in projects[pt]["final_map"]: + return + try: + img = load_tile(projects[pt]["final_map"][idx], 16) + cw = previews[pt].winfo_width() or 310 + ch = previews[pt].winfo_height() or 310 + sc = max(1, min(cw // img.width, ch // img.height)) + img = img.resize( + (img.width * sc, img.height * sc), Image.NEAREST) + _preview_img = ImageTk.PhotoImage(img) + ox = (cw - img.width) // 2 + oy = (ch - img.height) // 2 + previews[pt].create_image(ox, oy, anchor="nw", + image=_preview_img) + except Exception: + pass + return on_sel + + tree.bind("<>", make_sel(ptype)) + + def make_dbl(pt): + def on_dbl(event): + sel = trees[pt].selection() + if not sel: + return + idx = int(sel[0]) + path = filedialog.askopenfilename( + title="Select PNG", + filetypes=[("PNG Files", "*.png")]) + if path: + projects[pt]["final_map"][idx] = path + refresh_list(pt) + trees[pt].selection_set(str(idx)) + return on_dbl + + tree.bind("", make_dbl(ptype)) + +# ═══════════════════════════════════════════════════════════════════════════ +# REFRESH LIST +# ═══════════════════════════════════════════════════════════════════════════ +def refresh_list(ptype=None): + if ptype is None: + ptype = TAB_ORDER[notebook.index(notebook.select())] + tree = trees[ptype] + proj = projects[ptype] + filt = proj["search_var"].get().lower() + tree.delete(*tree.get_children()) + for i, obj in enumerate(proj["layout"]): + display = (obj.get("DisplayName") or + obj.get("n") or + obj.get("Name", "")) + if filt and filt not in display.lower(): + continue + fname = (os.path.basename(proj["final_map"][i]) + if i in proj["final_map"] else "---") + iid = tree.insert("", "end", iid=str(i), values=(display, fname)) + if fname == "---": + tree.item(iid, tags=("gray",)) + tree.tag_configure("gray", foreground=FG_GRAY) + +notebook.bind("<>", lambda *_: refresh_list()) + +# ═══════════════════════════════════════════════════════════════════════════ +# BUILD +# ═══════════════════════════════════════════════════════════════════════════ +def do_build(): + ptype = TAB_ORDER[notebook.index(notebook.select())] + proj = projects[ptype] + scale = current_scale["v"] + tile_px = 16 * scale # e.g. 32 for 32x + + if not proj["json_path"]: + messagebox.showwarning("No JSON", + f"Please load a {ptype.upper()} JSON first.") + return + + cols, rows = CANVAS_TILES[ptype] + cw = cols * tile_px # canvas width in pixels + ch = rows * tile_px # canvas height in pixels + + canvas_img = Image.new("RGBA", (cw, ch), (0, 0, 0, 0)) + + placed = 0 + errors = 0 + for k, fpath in proj["final_map"].items(): + if not os.path.exists(fpath): + continue + try: + tile = load_tile(fpath, tile_px) + obj = proj["layout"][k] + + # Convert JSON coord (always 16x pixel space) → grid slot → output pixel + json_x = int(obj.get("X", obj.get("x", 0))) + json_y = int(obj.get("Y", obj.get("y", 0))) + col = json_x // 16 # which grid column (0-based) + row = json_y // 16 # which grid row (0-based) + px = col * tile_px # output pixel X + py = row * tile_px # output pixel Y + + # Use tile as its own alpha mask so transparent edges + # never overwrite adjacent tiles + canvas_img.paste(tile, (px, py), tile) + placed += 1 + except Exception as e: + errors += 1 + + out_dir = os.path.dirname(proj["json_path"]) + json_base = Path(proj["json_path"]).stem + out_path = os.path.join(out_dir, f"{json_base}.png") + canvas_img.save(out_path) + + if ptype == "terrain": + canvas_img.resize((cw // 2, ch // 2), Image.NEAREST).save( + os.path.join(out_dir, "terrainMipMapLevel2.png")) + canvas_img.resize((cw // 4, ch // 4), Image.NEAREST).save( + os.path.join(out_dir, "terrainMipMapLevel3.png")) + + res_label = {1: "16x", 2: "32x", 4: "64x"}[scale] + msg = (f"Resolution: {res_label}\n" + f"Canvas: {cw}×{ch}\n" + f"Tiles placed: {placed}") + if errors: + msg += f"\nErrors skipped: {errors}" + messagebox.showinfo("Build Complete", f"{msg}\n\nSaved to:\n{out_path}") + +# ── BOTTOM BUILD BAR ─────────────────────────────────────────────────────── +bottom = tk.Frame(root, bg=BG_DARK, height=70) +bottom.pack(side="bottom", fill="x", padx=10, pady=(0, 8)) +bottom.pack_propagate(False) + +tk.Button(bottom, text="BUILD ASSETS", + bg=BTN_GREEN, fg=FG_MAIN, + activebackground="#2E6B1A", activeforeground=FG_MAIN, + relief="flat", font=("Segoe UI", 12, "bold"), + command=do_build).pack(fill="both", expand=True) + +root.mainloop() diff --git a/Purple tex.png b/Purple tex.png new file mode 100644 index 0000000000000000000000000000000000000000..106b500ef5f0458900ec21c19f9aec2c9e60c115 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;V{wqX6XVU3I`u#fXMsm#F#`j) zFbFd;%$g$s6l4qV331J~ufJCR|Mm^3zd#WIPZ!6KiaE(C2?=ZR733Hh0{`(d+3U=l Q1(aj(boFyt=akR{0P5i#K>z>% literal 0 HcmV?d00001 diff --git a/armour_boots.png b/armour_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d036e90e94018ef8a7fbf9d79f4d13089fded6 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;V{wqX6XVU3I`u#fXMsm#F#`j) zFbFd;%$g$s6l4qV32_C|k_t-SN?gi-ET)nmzhH*{(G!)n0(nZFE{-7;bCOdM5?U1Y uskkW`i!51k0z>8;Gx6e!sOb};o3H_QeW9cl9`!d^Afhss(sVf1NAU?y85}Sb4q9e026H{ ANdN!< literal 0 HcmV?d00001 diff --git a/armour_leg.png b/armour_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..ce679588436aa0c492ae053de2b48d7e5d1277e3 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;V{wqX6XVU3I`u#fXMsm#F#`j) zFbFd;%$g$s6l4qV32_C|k_t-SN?gi-ET)nmzhH*{(G!)n0(lCaE{-7;bCOdM5}wqb s(D=aI#d2D*^~?r^of>Wnyx7;M1& literal 0 HcmV?d00001 diff --git a/brown thing 2.png b/brown thing 2.png new file mode 100644 index 0000000000000000000000000000000000000000..ab9d4a29576fd43a7ca5036854ee2a276185fad9 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF$Bv1Ofu7$MOnSqpaJb|90>Sr;Dw>C$F)*x-<`CQ$KG6}Vhr!d; K&t;ucLK6Vv+Ayd9 literal 0 HcmV?d00001 diff --git a/brown thing 3.png b/brown thing 3.png new file mode 100644 index 0000000000000000000000000000000000000000..21bca820ec3f4c1ca3afc16950bf0d1a1093de5e GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFJb&-djgYZ!mpb%?GkY6yve;|;#pawF{#M8ww zq+(8TN&}PIDnk~#Q}$2(|Cm4V;se9;&h4jddV0?N|7N&C<4$5q$e-^Gjh+wX<=!$R Xt>!H}J5wbEsGq^p)z4*}Q$iB}>r*-R literal 0 HcmV?d00001 diff --git a/brown thing.png b/brown thing.png new file mode 100644 index 0000000000000000000000000000000000000000..2333b9f868b2388c10fdfac872ebd7d77ea81b4b GIT binary patch literal 164 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 S?*Un@z-0qd{jv+rk^cocIPqBk literal 0 HcmV?d00001 diff --git a/lava_flow.png b/lava_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..afaa92e67b4766a475ada2e8418887913e017cd3 GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!7ZLHjv*HQrIT*+9#P<7xtscG@q*VJog7Jr zE6&zNc-=_-bEqzDv3dV-H*@LFI!XW57xs zj^V;I`-Zrn#jjGicNI$nwX~VpJG?PJ)vB1=RF&EIJN4u*-K$f}1B^a>JRp9LX~B*y d_MbWavPu@3c3)kvbq>(|44$rjF6*2UngFJqA+A7L$Jq42g9pcs9SczxGnL@8x3@nQV>-`M%T`8U%Dc@+fhxF4 zg8YIR{=-0Br$`u3G~Lt1F{ENna!Lb}o5G|22fpwh5%}>V{^xsUgXWv>4_dmh9s94- z$HSlBDDiF=|GyjtqZ!?j=iahurIi>bOwnL4is+JTIpz3lM>DI0gyn0y29}1NU;GM; p0?iv`lCGb5&l=$UaGNs&L*xP(L4J-6IzTHKJYD@<);T3K0RSInSm^)& literal 0 HcmV?d00001 diff --git a/ruby.png b/ruby.png new file mode 100644 index 0000000000000000000000000000000000000000..f9567505ecc9b33469150ed766f4236f91d9a372 GIT binary patch literal 536 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6XVU3I`u#fXMsm#F#`j) zFbFd;%$g$s6ucVX6XFV_^%z*coW1mR%U*Q`DXf}yZUZZ7)3AoMy}(QI3lk1^Zw&2a^~kn^v;Q>PGA(-#U|UuCiMOM)#J?a z$5|APGs$-{2u|b_4QJr0W)(Opu78|CW;=sq3;|#LJ417@x+;fa< zJsCJNnRqYx#-FnEoXRA2PC~PvK`0g|Wn!1k#2duGbz6HCwtf5dlP6EE zU%&p`xpSvapKfbwyLa#2zJ2>@Yil1pdQ?+WbLh~a6)RTc=jWG}mgeQgMLHxfZy?Q=ro{@9eD-$rU9*H@O1TaS?83{1OPH3 BlcN9t literal 0 HcmV?d00001 diff --git a/terrain.json b/terrain.json new file mode 100644 index 0000000..0376794 --- /dev/null +++ b/terrain.json @@ -0,0 +1,1868 @@ +[ + { + "Name": "grass_block_top", + "DisplayName": "Grass Top", + "X": 0, + "Y": 0 + }, + { + "Name": "stone", + "DisplayName": "Stone", + "X": 16, + "Y": 0 + }, + { + "Name": "dirt", + "DisplayName": "Dirt", + "X": 32, + "Y": 0 + }, + { + "Name": "grass_block_side", + "DisplayName": "Grass Block Side", + "X": 48, + "Y": 0 + }, + { + "Name": "oak_planks", + "DisplayName": "Oak Planks", + "X": 64, + "Y": 0 + }, + { + "Name": "stone_slab_side", + "DisplayName": "Stone Slab Side", + "X": 80, + "Y": 0 + }, + { + "Name": "stone_slab_top", + "DisplayName": "Stone Slab Top", + "X": 96, + "Y": 0 + }, + { + "Name": "bricks", + "DisplayName": "Bricks", + "X": 112, + "Y": 0 + }, + { + "Name": "tnt_side", + "DisplayName": "TNT Side", + "X": 128, + "Y": 0 + }, + { + "Name": "tnt_top", + "DisplayName": "TNT Top", + "X": 144, + "Y": 0 + }, + { + "Name": "tnt_bottom", + "DisplayName": "TNT Bottom", + "X": 160, + "Y": 0 + }, + { + "Name": "cobweb", + "DisplayName": "Cobweb", + "X": 176, + "Y": 0 + }, + { + "Name": "poppy", + "DisplayName": "Poppy", + "X": 192, + "Y": 0 + }, + { + "Name": "dandelion", + "DisplayName": "Dandelion", + "X": 208, + "Y": 0 + }, + { + "Name": "water_still", + "DisplayName": "Water Still", + "X": 224, + "Y": 0 + }, + { + "Name": "oak_sapling", + "DisplayName": "Oak Sapling", + "X": 240, + "Y": 0 + }, + { + "Name": "cobblestone", + "DisplayName": "Cobblestone", + "X": 0, + "Y": 16 + }, + { + "Name": "bedrock", + "DisplayName": "Bedrock", + "X": 16, + "Y": 16 + }, + { + "Name": "sand", + "DisplayName": "Sand", + "X": 32, + "Y": 16 + }, + { + "Name": "gravel", + "DisplayName": "Gravel", + "X": 48, + "Y": 16 + }, + { + "Name": "oak_log", + "DisplayName": "Oak Log", + "X": 64, + "Y": 16 + }, + { + "Name": "oak_log_top", + "DisplayName": "Oak Log Top", + "X": 80, + "Y": 16 + }, + { + "Name": "iron_block", + "DisplayName": "Iron Block", + "X": 96, + "Y": 16 + }, + { + "Name": "gold_block", + "DisplayName": "Gold Block", + "X": 112, + "Y": 16 + }, + { + "Name": "diamond_block", + "DisplayName": "Diamond Block", + "X": 128, + "Y": 16 + }, + { + "Name": "emerald_block", + "DisplayName": "Emerald Block", + "X": 144, + "Y": 16 + }, + { + "Name": "redstone_block", + "DisplayName": "Redstone Block", + "X": 160, + "Y": 16 + }, + { + "Name": "dropper_front", + "DisplayName": "Dropper Front", + "X": 176, + "Y": 16 + }, + { + "Name": "red_mushroom", + "DisplayName": "Red Mushroom", + "X": 192, + "Y": 16 + }, + { + "Name": "brown_mushroom", + "DisplayName": "Brown Mushroom", + "X": 208, + "Y": 16 + }, + { + "Name": "jungle_sapling", + "DisplayName": "Jungle Sapling", + "X": 224, + "Y": 16 + }, + { + "Name": "fire_layer_0", + "DisplayName": "FireTex1", + "X": 240, + "Y": 16 + }, + { + "Name": "gold_ore", + "DisplayName": "Gold Ore", + "X": 0, + "Y": 32 + }, + { + "Name": "iron_ore", + "DisplayName": "Iron Ore", + "X": 16, + "Y": 32 + }, + { + "Name": "coal_ore", + "DisplayName": "Coal Ore", + "X": 32, + "Y": 32 + }, + { + "Name": "bookshelf", + "DisplayName": "Bookshelf", + "X": 48, + "Y": 32 + }, + { + "Name": "mossy_cobblestone", + "DisplayName": "Mossy Cobblestone", + "X": 64, + "Y": 32 + }, + { + "Name": "obsidian", + "DisplayName": "Obsidian", + "X": 80, + "Y": 32 + }, + { + "Name": "grass_block_side_overlay", + "DisplayName": "Grass Side Layer", + "X": 96, + "Y": 32 + }, + { + "Name": "short_grass", + "DisplayName": "Tall Grass", + "X": 112, + "Y": 32 + }, + { + "Name": "dispenser_front_vertical", + "DisplayName": "Dispenser Top", + "X": 128, + "Y": 32 + }, + { + "Name": "dropper_front_vertical", + "DisplayName": "Dropper Top", + "X": 144, + "Y": 32 + }, + { + "Name": "beacon", + "DisplayName": "Beacon", + "X": 160, + "Y": 32 + }, + { + "Name": "crafting_table_top", + "DisplayName": "Crafting Table Top", + "X": 176, + "Y": 32 + }, + { + "Name": "furnace_front", + "DisplayName": "Furnace Front Off", + "X": 192, + "Y": 32 + }, + { + "Name": "furnace_side", + "DisplayName": "Furnace Side", + "X": 208, + "Y": 32 + }, + { + "Name": "dispenser_front_horizontal", + "DisplayName": "Dispenser Front", + "X": 224, + "Y": 32 + }, + { + "Name": "fire_layer_1", + "DisplayName": "FireTex2", + "X": 240, + "Y": 32 + }, + { + "Name": "sponge", + "DisplayName": "Sponge", + "X": 0, + "Y": 48 + }, + { + "Name": "glass", + "DisplayName": "Glass", + "X": 16, + "Y": 48 + }, + { + "Name": "diamond_ore", + "DisplayName": "Diamond Ore", + "X": 32, + "Y": 48 + }, + { + "Name": "redstone_ore", + "DisplayName": "Redstone Ore", + "X": 48, + "Y": 48 + }, + { + "Name": "oak_leaves", + "DisplayName": "Oak Leaves", + "X": 64, + "Y": 48 + }, + { + "Name": "oak_leaves_opaque", + "DisplayName": "Oak Leaves Opaque", + "X": 80, + "Y": 48 + }, + { + "Name": "stone_bricks", + "DisplayName": "Stone Bricks", + "X": 96, + "Y": 48 + }, + { + "Name": "dead_bush", + "DisplayName": "Dead Bush", + "X": 112, + "Y": 48 + }, + { + "Name": "fern", + "DisplayName": "Fern", + "X": 128, + "Y": 48 + }, + { + "Name": "daylight_detector_top", + "DisplayName": "Daylight Sensor Top", + "X": 144, + "Y": 48 + }, + { + "Name": "daylight_detector_inverted_top", + "DisplayName": "Daylight Sensor Bottom", + "X": 160, + "Y": 48 + }, + { + "Name": "crafting_table_side", + "DisplayName": "Crafting Table Side", + "X": 176, + "Y": 48 + }, + { + "Name": "crafting_table_front", + "DisplayName": "Crafting Table Front", + "X": 192, + "Y": 48 + }, + { + "Name": "furnace_front_on", + "DisplayName": "Furnace Front On", + "X": 208, + "Y": 48 + }, + { + "Name": "furnace_top", + "DisplayName": "Furnace Top", + "X": 224, + "Y": 48 + }, + { + "Name": "spruce_sapling", + "DisplayName": "Spruce Sapling", + "X": 240, + "Y": 48 + }, + { + "Name": "white_wool", + "DisplayName": "White Wool", + "X": 0, + "Y": 64 + }, + { + "Name": "spawner", + "DisplayName": "Monster Spawner", + "X": 16, + "Y": 64 + }, + { + "Name": "snow", + "DisplayName": "Snow", + "X": 32, + "Y": 64 + }, + { + "Name": "ice", + "DisplayName": "Ice", + "X": 48, + "Y": 64 + }, + { + "Name": "grass_block_snow", + "DisplayName": "Snowy Grass Side", + "X": 64, + "Y": 64 + }, + { + "Name": "cactus_top", + "DisplayName": "Cactus Top", + "X": 80, + "Y": 64 + }, + { + "Name": "cactus_side", + "DisplayName": "Cactus Side", + "X": 96, + "Y": 64 + }, + { + "Name": "cactus_bottom", + "DisplayName": "Cactus Bottom", + "X": 112, + "Y": 64 + }, + { + "Name": "clay", + "DisplayName": "Clay", + "X": 128, + "Y": 64 + }, + { + "Name": "sugar_cane", + "DisplayName": "Sugar Cane", + "X": 144, + "Y": 64 + }, + { + "Name": "jukebox_side", + "DisplayName": "Jukebox Side", + "X": 160, + "Y": 64 + }, + { + "Name": "jukebox_top", + "DisplayName": "Jukebox Top", + "X": 176, + "Y": 64 + }, + { + "Name": "lily_pad", + "DisplayName": "Lily Pad", + "X": 192, + "Y": 64 + }, + { + "Name": "mycelium_side", + "DisplayName": "Mycelium Side", + "X": 208, + "Y": 64 + }, + { + "Name": "mycelium_top", + "DisplayName": "Mycelium Top", + "X": 224, + "Y": 64 + }, + { + "Name": "birch_sapling", + "DisplayName": "Birch Sapling", + "X": 240, + "Y": 64 + }, + { + "Name": "torch", + "DisplayName": "Torch", + "X": 0, + "Y": 80 + }, + { + "Name": "oak_door_top", + "DisplayName": "Oak Door Top", + "X": 16, + "Y": 80 + }, + { + "Name": "iron_door_top", + "DisplayName": "Iron Door Top", + "X": 32, + "Y": 80 + }, + { + "Name": "ladder", + "DisplayName": "Ladder", + "X": 48, + "Y": 80 + }, + { + "Name": "oak_trapdoor", + "DisplayName": "Oak Trapdoor", + "X": 64, + "Y": 80 + }, + { + "Name": "iron_bars", + "DisplayName": "Iron Bars", + "X": 80, + "Y": 80 + }, + { + "Name": "farmland_moist", + "DisplayName": "Farmland Wet", + "X": 96, + "Y": 80 + }, + { + "Name": "farmland", + "DisplayName": "Farmland Dry", + "X": 112, + "Y": 80 + }, + { + "Name": "wheat_stage0", + "DisplayName": "Wheat Stage 0", + "X": 128, + "Y": 80 + }, + { + "Name": "wheat_stage1", + "DisplayName": "Wheat Stage 1", + "X": 144, + "Y": 80 + }, + { + "Name": "wheat_stage2", + "DisplayName": "Wheat Stage 2", + "X": 160, + "Y": 80 + }, + { + "Name": "wheat_stage3", + "DisplayName": "Wheat Stage 3", + "X": 176, + "Y": 80 + }, + { + "Name": "wheat_stage4", + "DisplayName": "Wheat Stage 4", + "X": 192, + "Y": 80 + }, + { + "Name": "wheat_stage5", + "DisplayName": "Wheat Stage 5", + "X": 208, + "Y": 80 + }, + { + "Name": "wheat_stage6", + "DisplayName": "Wheat Stage 6", + "X": 224, + "Y": 80 + }, + { + "Name": "wheat_stage7", + "DisplayName": "Wheat Stage 7", + "X": 240, + "Y": 80 + }, + { + "Name": "lever", + "DisplayName": "Lever", + "X": 0, + "Y": 96 + }, + { + "Name": "oak_door_bottom", + "DisplayName": "Oak Door Bottom", + "X": 16, + "Y": 96 + }, + { + "Name": "iron_door_bottom", + "DisplayName": "Iron Door Bottom", + "X": 32, + "Y": 96 + }, + { + "Name": "redstone_torch", + "DisplayName": "Redstone Torch On", + "X": 48, + "Y": 96 + }, + { + "Name": "mossy_stone_bricks", + "DisplayName": "Mossy Stone Bricks", + "X": 64, + "Y": 96 + }, + { + "Name": "cracked_stone_bricks", + "DisplayName": "Cracked Stone Bricks", + "X": 80, + "Y": 96 + }, + { + "Name": "pumpkin_top", + "DisplayName": "Pumpkin Top", + "X": 96, + "Y": 96 + }, + { + "Name": "netherrack", + "DisplayName": "Netherrack", + "X": 112, + "Y": 96 + }, + { + "Name": "soul_sand", + "DisplayName": "Soul Sand", + "X": 128, + "Y": 96 + }, + { + "Name": "glowstone", + "DisplayName": "Glowstone", + "X": 144, + "Y": 96 + }, + { + "Name": "piston_top_sticky", + "DisplayName": "Sticky Piston Front", + "X": 160, + "Y": 96 + }, + { + "Name": "piston_top", + "DisplayName": "Piston Front", + "X": 176, + "Y": 96 + }, + { + "Name": "piston_side", + "DisplayName": "Piston Side", + "X": 192, + "Y": 96 + }, + { + "Name": "piston_bottom", + "DisplayName": "Piston Bottom", + "X": 208, + "Y": 96 + }, + { + "Name": "piston_inner", + "DisplayName": "Piston Inner", + "X": 224, + "Y": 96 + }, + { + "Name": "pumpkin_stem", + "DisplayName": "Pumpkin Stem", + "X": 240, + "Y": 96 + }, + { + "Name": "rail_corner", + "DisplayName": "Curved Rail", + "X": 0, + "Y": 112 + }, + { + "Name": "black_wool", + "DisplayName": "Black Wool", + "X": 16, + "Y": 112 + }, + { + "Name": "gray_wool", + "DisplayName": "Dark Gray Wool", + "X": 32, + "Y": 112 + }, + { + "Name": "redstone_torch_off", + "DisplayName": "Redstone Torch Off", + "X": 48, + "Y": 112 + }, + { + "Name": "spruce_log", + "DisplayName": "Spruce Log", + "X": 64, + "Y": 112 + }, + { + "Name": "birch_log", + "DisplayName": "Birch Log", + "X": 80, + "Y": 112 + }, + { + "Name": "pumpkin_side", + "DisplayName": "Pumpkin Side", + "X": 96, + "Y": 112 + }, + { + "Name": "carved_pumpkin", + "DisplayName": "Carved Pumpkin", + "X": 112, + "Y": 112 + }, + { + "Name": "jack_o_lantern", + "DisplayName": "Jack o Lantern", + "X": 128, + "Y": 112 + }, + { + "Name": "cake_top", + "DisplayName": "Cake Top", + "X": 144, + "Y": 112 + }, + { + "Name": "cake_side", + "DisplayName": "Cake Side", + "X": 160, + "Y": 112 + }, + { + "Name": "cake_side_inner", + "DisplayName": "Cake Eaten Side", + "X": 176, + "Y": 112 + }, + { + "Name": "cake_bottom", + "DisplayName": "Cake Bottom", + "X": 192, + "Y": 112 + }, + { + "Name": "red_mushroom_block", + "DisplayName": "Red Mushroom Block", + "X": 208, + "Y": 112 + }, + { + "Name": "brown_mushroom_block", + "DisplayName": "Brown Mushroom Block", + "X": 224, + "Y": 112 + }, + { + "Name": "attached_pumpkin_stem", + "DisplayName": "Pumpkin Stem Connected", + "X": 240, + "Y": 112 + }, + { + "Name": "rail", + "DisplayName": "Rail", + "X": 0, + "Y": 128 + }, + { + "Name": "red_wool", + "DisplayName": "Red Wool", + "X": 16, + "Y": 128 + }, + { + "Name": "pink_wool", + "DisplayName": "Pink Wool", + "X": 32, + "Y": 128 + }, + { + "Name": "repeater", + "DisplayName": "Repeater Off", + "X": 48, + "Y": 128 + }, + { + "Name": "spruce_leaves", + "DisplayName": "Spruce Leaves", + "X": 64, + "Y": 128 + }, + { + "Name": "spruce_leaves_opaque", + "DisplayName": "Spruce Leaves Opaque", + "X": 80, + "Y": 128 + }, + { + "Name": "bed_foot_top", + "DisplayName": "Bed Foot Top", + "X": 96, + "Y": 128 + }, + { + "Name": "bed_head_top", + "DisplayName": "Bed Head Top", + "X": 112, + "Y": 128 + }, + { + "Name": "melon_side", + "DisplayName": "Watermelon Side", + "X": 128, + "Y": 128 + }, + { + "Name": "melon_top", + "DisplayName": "Watermelon Top", + "X": 144, + "Y": 128 + }, + { + "Name": "cauldron_top", + "DisplayName": "Cauldron Top", + "X": 160, + "Y": 128 + }, + { + "Name": "cauldron_bottom", + "DisplayName": "Cauldron Bottom", + "X": 176, + "Y": 128 + }, + { + "Name": "purple_texture", + "DisplayName": "Purple Texture", + "X": 192, + "Y": 128 + }, + { + "Name": "mushroom_stem", + "DisplayName": "Mushroom Stem", + "X": 208, + "Y": 128 + }, + { + "Name": "mushroom_block_inside", + "DisplayName": "Mushroom Block Inside", + "X": 224, + "Y": 128 + }, + { + "Name": "vine", + "DisplayName": "Vine", + "X": 240, + "Y": 128 + }, + { + "Name": "lapis_block", + "DisplayName": "Lapis Block", + "X": 0, + "Y": 144 + }, + { + "Name": "green_wool", + "DisplayName": "Green Wool", + "X": 16, + "Y": 144 + }, + { + "Name": "lime_wool", + "DisplayName": "Lime Wool", + "X": 32, + "Y": 144 + }, + { + "Name": "repeater_on", + "DisplayName": "Repeater On", + "X": 48, + "Y": 144 + }, + { + "Name": "glass_pane_top", + "DisplayName": "Glass Pane Top", + "X": 64, + "Y": 144 + }, + { + "Name": "bed_foot_end", + "DisplayName": "Bed Front Foot", + "X": 80, + "Y": 144 + }, + { + "Name": "bed_foot_side", + "DisplayName": "Bed Side Foot", + "X": 96, + "Y": 144 + }, + { + "Name": "bed_head_side", + "DisplayName": "Bed Side Head", + "X": 112, + "Y": 144 + }, + { + "Name": "bed_head_end", + "DisplayName": "Bed Front Head", + "X": 128, + "Y": 144 + }, + { + "Name": "jungle_log", + "DisplayName": "Jungle Log", + "X": 144, + "Y": 144 + }, + { + "Name": "cauldron_side", + "DisplayName": "Cauldron Side", + "X": 160, + "Y": 144 + }, + { + "Name": "cauldron_feet", + "DisplayName": "Cauldron Feet", + "X": 176, + "Y": 144 + }, + { + "Name": "brewing_stand_base", + "DisplayName": "Brewing Stand Base", + "X": 192, + "Y": 144 + }, + { + "Name": "brewing_stand", + "DisplayName": "Brewing Stand", + "X": 208, + "Y": 144 + }, + { + "Name": "end_portal_frame_top", + "DisplayName": "End Portal Frame Top", + "X": 224, + "Y": 144 + }, + { + "Name": "end_portal_frame_side", + "DisplayName": "End Portal Frame Side", + "X": 240, + "Y": 144 + }, + { + "Name": "lapis_ore", + "DisplayName": "Lapis Ore", + "X": 0, + "Y": 160 + }, + { + "Name": "brown_wool", + "DisplayName": "Brown Wool", + "X": 16, + "Y": 160 + }, + { + "Name": "yellow_wool", + "DisplayName": "Yellow Wool", + "X": 32, + "Y": 160 + }, + { + "Name": "powered_rail", + "DisplayName": "Powered Rail Off", + "X": 48, + "Y": 160 + }, + { + "Name": "redstone_dust_dot", + "DisplayName": "Redstone Cross", + "X": 64, + "Y": 160 + }, + { + "Name": "redstone_dust_line0", + "DisplayName": "Redstone Straight", + "X": 80, + "Y": 160 + }, + { + "Name": "enchanting_table_top", + "DisplayName": "Enchanting Table Top", + "X": 96, + "Y": 160 + }, + { + "Name": "dragon_egg", + "DisplayName": "Dragon Egg", + "X": 112, + "Y": 160 + }, + { + "Name": "cocoa_stage2", + "DisplayName": "Cocoa Stage 2", + "X": 128, + "Y": 160 + }, + { + "Name": "cocoa_stage1", + "DisplayName": "Cocoa Stage 1", + "X": 144, + "Y": 160 + }, + { + "Name": "cocoa_stage0", + "DisplayName": "Cocoa Stage 0", + "X": 160, + "Y": 160 + }, + { + "Name": "emerald_ore", + "DisplayName": "Emerald Ore", + "X": 176, + "Y": 160 + }, + { + "Name": "tripwire_hook", + "DisplayName": "Tripwire Hook", + "X": 192, + "Y": 160 + }, + { + "Name": "tripwire", + "DisplayName": "Tripwire", + "X": 208, + "Y": 160 + }, + { + "Name": "end_portal_frame_eye", + "DisplayName": "End Portal Eye", + "X": 224, + "Y": 160 + }, + { + "Name": "end_stone", + "DisplayName": "End Stone", + "X": 240, + "Y": 160 + }, + { + "Name": "sandstone_top", + "DisplayName": "Sandstone Top", + "X": 0, + "Y": 176 + }, + { + "Name": "blue_wool", + "DisplayName": "Blue Wool", + "X": 16, + "Y": 176 + }, + { + "Name": "light_blue_wool", + "DisplayName": "Light Blue Wool", + "X": 32, + "Y": 176 + }, + { + "Name": "powered_rail_on", + "DisplayName": "Powered Rail On", + "X": 48, + "Y": 176 + }, + { + "Name": "enchanting_table_side", + "DisplayName": "Enchanting Table Side", + "X": 96, + "Y": 176 + }, + { + "Name": "enchanting_table_bottom", + "DisplayName": "Enchanting Table Bottom", + "X": 112, + "Y": 176 + }, + { + "Name": "command_block", + "DisplayName": "Command Block", + "X": 128, + "Y": 176 + }, + { + "Name": "item_frame", + "DisplayName": "Item Frame", + "X": 144, + "Y": 176 + }, + { + "Name": "flower_pot", + "DisplayName": "Flower Pot", + "X": 160, + "Y": 176 + }, + { + "Name": "comparator", + "DisplayName": "Comparator Off", + "X": 176, + "Y": 176 + }, + { + "Name": "comparator_on", + "DisplayName": "Comparator On", + "X": 192, + "Y": 176 + }, + { + "Name": "activator_rail", + "DisplayName": "Activator Rail Off", + "X": 208, + "Y": 176 + }, + { + "Name": "activator_rail_on", + "DisplayName": "Activator Rail On", + "X": 224, + "Y": 176 + }, + { + "Name": "nether_quartz_ore", + "DisplayName": "Quartz Ore", + "X": 240, + "Y": 176 + }, + { + "Name": "sandstone", + "DisplayName": "Sandstone Side", + "X": 0, + "Y": 192 + }, + { + "Name": "purple_wool", + "DisplayName": "Purple Wool", + "X": 16, + "Y": 192 + }, + { + "Name": "magenta_wool", + "DisplayName": "Magenta Wool", + "X": 32, + "Y": 192 + }, + { + "Name": "detector_rail", + "DisplayName": "Detector Rail", + "X": 48, + "Y": 192 + }, + { + "Name": "jungle_leaves", + "DisplayName": "Jungle Leaves", + "X": 64, + "Y": 192 + }, + { + "Name": "jungle_leaves_opaque", + "DisplayName": "Jungle Leaves Opaque", + "X": 80, + "Y": 192 + }, + { + "Name": "spruce_planks", + "DisplayName": "Spruce Planks", + "X": 96, + "Y": 192 + }, + { + "Name": "jungle_planks", + "DisplayName": "Jungle Planks", + "X": 112, + "Y": 192 + }, + { + "Name": "carrots_stage0", + "DisplayName": "Carrot Stage 0", + "X": 128, + "Y": 192 + }, + { + "Name": "carrots_stage1", + "DisplayName": "Carrot Stage 1", + "X": 144, + "Y": 192 + }, + { + "Name": "carrots_stage2", + "DisplayName": "Carrot Stage 2", + "X": 160, + "Y": 192 + }, + { + "Name": "carrots_stage3", + "DisplayName": "Carrot Stage 3", + "X": 176, + "Y": 192 + }, + { + "Name": "water_flow", + "DisplayName": "Water Flow", + "X": 208, + "Y": 192 + }, + { + "Name": "water_flow_1", + "DisplayName": "Water Flow 1", + "X": 224, + "Y": 192 + }, + { + "Name": "water_flow_2", + "DisplayName": "Water Flow 2", + "X": 240, + "Y": 192 + }, + { + "Name": "sandstone_bottom", + "DisplayName": "Sandstone Bottom", + "X": 0, + "Y": 208 + }, + { + "Name": "cyan_wool", + "DisplayName": "Cyan Wool", + "X": 16, + "Y": 208 + }, + { + "Name": "orange_wool", + "DisplayName": "Orange Wool", + "X": 32, + "Y": 208 + }, + { + "Name": "redstone_lamp", + "DisplayName": "Redstone Lamp Off", + "X": 48, + "Y": 208 + }, + { + "Name": "redstone_lamp_on", + "DisplayName": "Redstone Lamp On", + "X": 64, + "Y": 208 + }, + { + "Name": "chiseled_stone_bricks", + "DisplayName": "Chiseled Stone Bricks", + "X": 80, + "Y": 208 + }, + { + "Name": "birch_planks", + "DisplayName": "Birch Planks", + "X": 96, + "Y": 208 + }, + { + "Name": "anvil", + "DisplayName": "Anvil Bottom", + "X": 112, + "Y": 208 + }, + { + "Name": "chipped_anvil_top", + "DisplayName": "Damaged Anvil Top", + "X": 128, + "Y": 208 + }, + { + "Name": "chiseled_quartz_block_top", + "DisplayName": "Chiseled Quartz Top", + "X": 144, + "Y": 208 + }, + { + "Name": "quartz_pillar_top", + "DisplayName": "Pillar Quartz Top", + "X": 160, + "Y": 208 + }, + { + "Name": "quartz_block_top", + "DisplayName": "Quartz Block Top", + "X": 176, + "Y": 208 + }, + { + "Name": "hopper_outside", + "DisplayName": "Hopper Side", + "X": 192, + "Y": 208 + }, + { + "Name": "detector_rail_on", + "DisplayName": "Detector Rail On", + "X": 208, + "Y": 208 + }, + { + "Name": "water_flow_3", + "DisplayName": "Water Flow 3", + "X": 224, + "Y": 208 + }, + { + "Name": "water_flow_4", + "DisplayName": "Water Flow 4", + "X": 240, + "Y": 208 + }, + { + "Name": "nether_bricks", + "DisplayName": "Nether Brick", + "X": 0, + "Y": 224 + }, + { + "Name": "light_gray_wool", + "DisplayName": "Light Gray Wool", + "X": 16, + "Y": 224 + }, + { + "Name": "nether_wart_stage0", + "DisplayName": "Nether Wart Stage 0", + "X": 32, + "Y": 224 + }, + { + "Name": "nether_wart_stage1", + "DisplayName": "Nether Wart Stage 1", + "X": 48, + "Y": 224 + }, + { + "Name": "nether_wart_stage2", + "DisplayName": "Nether Wart Stage 2", + "X": 64, + "Y": 224 + }, + { + "Name": "chiseled_sandstone", + "DisplayName": "Chiseled Sandstone", + "X": 80, + "Y": 224 + }, + { + "Name": "smooth_sandstone", + "DisplayName": "Smooth Sandstone", + "X": 96, + "Y": 224 + }, + { + "Name": "anvil_top", + "DisplayName": "Anvil Top", + "X": 112, + "Y": 224 + }, + { + "Name": "damaged_anvil_top", + "DisplayName": "Heavily Damaged Anvil Top", + "X": 128, + "Y": 224 + }, + { + "Name": "chiseled_quartz_block", + "DisplayName": "Chiseled Quartz Side", + "X": 144, + "Y": 224 + }, + { + "Name": "quartz_pillar", + "DisplayName": "Pillar Quartz Side", + "X": 160, + "Y": 224 + }, + { + "Name": "quartz_block_side", + "DisplayName": "Quartz Block Side", + "X": 176, + "Y": 224 + }, + { + "Name": "hopper_inside", + "DisplayName": "Hopper Inside", + "X": 192, + "Y": 224 + }, + { + "Name": "lava_still", + "DisplayName": "Lava Still", + "X": 208, + "Y": 224 + }, + { + "Name": "lava_flow", + "DisplayName": "Lava Flow 0", + "X": 224, + "Y": 224 + }, + { + "Name": "lava_flow_1", + "DisplayName": "Lava Flow 1", + "X": 240, + "Y": 224 + }, + { + "Name": "destroy_stage_0", + "DisplayName": "Block Break 0", + "X": 0, + "Y": 240 + }, + { + "Name": "destroy_stage_1", + "DisplayName": "Block Break 1", + "X": 16, + "Y": 240 + }, + { + "Name": "destroy_stage_2", + "DisplayName": "Block Break 2", + "X": 32, + "Y": 240 + }, + { + "Name": "destroy_stage_3", + "DisplayName": "Block Break 3", + "X": 48, + "Y": 240 + }, + { + "Name": "destroy_stage_4", + "DisplayName": "Block Break 4", + "X": 64, + "Y": 240 + }, + { + "Name": "destroy_stage_5", + "DisplayName": "Block Break 5", + "X": 80, + "Y": 240 + }, + { + "Name": "destroy_stage_6", + "DisplayName": "Block Break 6", + "X": 96, + "Y": 240 + }, + { + "Name": "destroy_stage_7", + "DisplayName": "Block Break 7", + "X": 112, + "Y": 240 + }, + { + "Name": "destroy_stage_8", + "DisplayName": "Block Break 8", + "X": 128, + "Y": 240 + }, + { + "Name": "destroy_stage_9", + "DisplayName": "Block Break 9", + "X": 144, + "Y": 240 + }, + { + "Name": "hay_block_side", + "DisplayName": "Hay Bale Side", + "X": 160, + "Y": 240 + }, + { + "Name": "quartz_block_bottom", + "DisplayName": "Quartz Block Bottom", + "X": 176, + "Y": 240 + }, + { + "Name": "hopper_top", + "DisplayName": "Hopper Top", + "X": 192, + "Y": 240 + }, + { + "Name": "hay_block_top", + "DisplayName": "Hay Bale Top", + "X": 208, + "Y": 240 + }, + { + "Name": "lava_flow_2", + "DisplayName": "Lava Flow 2", + "X": 224, + "Y": 240 + }, + { + "Name": "lava_flow_3", + "DisplayName": "Lava Flow 3", + "X": 240, + "Y": 240 + }, + { + "Name": "coal_block", + "DisplayName": "Coal Block", + "X": 0, + "Y": 256 + }, + { + "Name": "terracotta", + "DisplayName": "Hardened Clay", + "X": 16, + "Y": 256 + }, + { + "Name": "note_block", + "DisplayName": "Note Block", + "X": 32, + "Y": 256 + }, + { + "Name": "potatoes_stage0", + "DisplayName": "Potato Stage 0", + "X": 144, + "Y": 256 + }, + { + "Name": "potatoes_stage1", + "DisplayName": "Potato Stage 1", + "X": 160, + "Y": 256 + }, + { + "Name": "potatoes_stage2", + "DisplayName": "Potato Stage 2", + "X": 176, + "Y": 256 + }, + { + "Name": "potatoes_stage3", + "DisplayName": "Potato Stage 3", + "X": 192, + "Y": 256 + }, + { + "Name": "spruce_log_top", + "DisplayName": "Spruce Log Top", + "X": 208, + "Y": 256 + }, + { + "Name": "jungle_log_top", + "DisplayName": "Jungle Log Top", + "X": 224, + "Y": 256 + }, + { + "Name": "birch_log_top", + "DisplayName": "Birch Log Top", + "X": 240, + "Y": 256 + }, + { + "Name": "black_terracotta", + "DisplayName": "Black Hardened Clay", + "X": 0, + "Y": 272 + }, + { + "Name": "blue_terracotta", + "DisplayName": "Blue Hardened Clay", + "X": 16, + "Y": 272 + }, + { + "Name": "brown_terracotta", + "DisplayName": "Brown Hardened Clay", + "X": 32, + "Y": 272 + }, + { + "Name": "cyan_terracotta", + "DisplayName": "Cyan Hardened Clay", + "X": 48, + "Y": 272 + }, + { + "Name": "gray_terracotta", + "DisplayName": "Dark Grey Hardened Clay", + "X": 64, + "Y": 272 + }, + { + "Name": "green_terracotta", + "DisplayName": "Green Hardened Clay", + "X": 80, + "Y": 272 + }, + { + "Name": "light_blue_terracotta", + "DisplayName": "Light Blue Hardened Clay", + "X": 96, + "Y": 272 + }, + { + "Name": "lime_terracotta", + "DisplayName": "Lime Hardened Clay", + "X": 112, + "Y": 272 + }, + { + "Name": "magenta_terracotta", + "DisplayName": "Magenta Hardened Clay", + "X": 128, + "Y": 272 + }, + { + "Name": "orange_terracotta", + "DisplayName": "Orange Hardened Clay", + "X": 144, + "Y": 272 + }, + { + "Name": "pink_terracotta", + "DisplayName": "Pink Hardened Clay", + "X": 160, + "Y": 272 + }, + { + "Name": "purple_terracotta", + "DisplayName": "Purple Hardened Clay", + "X": 176, + "Y": 272 + }, + { + "Name": "red_terracotta", + "DisplayName": "Red Hardened Clay", + "X": 192, + "Y": 272 + }, + { + "Name": "light_gray_terracotta", + "DisplayName": "Light Grey Hardened Clay", + "X": 208, + "Y": 272 + }, + { + "Name": "white_terracotta", + "DisplayName": "White Hardened Clay", + "X": 224, + "Y": 272 + }, + { + "Name": "yellow_terracotta", + "DisplayName": "Yellow Hardened Clay", + "X": 240, + "Y": 272 + }, + { + "Name": "black_stained_glass", + "DisplayName": "Black Glass", + "X": 0, + "Y": 288 + }, + { + "Name": "blue_stained_glass", + "DisplayName": "Blue Glass", + "X": 16, + "Y": 288 + }, + { + "Name": "brown_stained_glass", + "DisplayName": "Brown Glass", + "X": 32, + "Y": 288 + }, + { + "Name": "cyan_stained_glass", + "DisplayName": "Cyan Glass", + "X": 48, + "Y": 288 + }, + { + "Name": "gray_stained_glass", + "DisplayName": "Dark Grey Glass", + "X": 64, + "Y": 288 + }, + { + "Name": "green_stained_glass", + "DisplayName": "Green Glass", + "X": 80, + "Y": 288 + }, + { + "Name": "light_blue_stained_glass", + "DisplayName": "Light Blue Glass", + "X": 96, + "Y": 288 + }, + { + "Name": "lime_stained_glass", + "DisplayName": "Lime Glass", + "X": 112, + "Y": 288 + }, + { + "Name": "magenta_stained_glass", + "DisplayName": "Magenta Glass", + "X": 128, + "Y": 288 + }, + { + "Name": "orange_stained_glass", + "DisplayName": "Orange Glass", + "X": 144, + "Y": 288 + }, + { + "Name": "pink_stained_glass", + "DisplayName": "Pink Glass", + "X": 160, + "Y": 288 + }, + { + "Name": "purple_stained_glass", + "DisplayName": "Purple Glass", + "X": 176, + "Y": 288 + }, + { + "Name": "red_stained_glass", + "DisplayName": "Red Glass", + "X": 192, + "Y": 288 + }, + { + "Name": "light_gray_stained_glass", + "DisplayName": "Light Grey Glass", + "X": 208, + "Y": 288 + }, + { + "Name": "white_stained_glass", + "DisplayName": "White Glass", + "X": 224, + "Y": 288 + }, + { + "Name": "yellow_stained_glass", + "DisplayName": "Yellow Glass", + "X": 240, + "Y": 288 + }, + { + "Name": "black_stained_glass_pane_top", + "DisplayName": "Black Glass Pane Top", + "X": 0, + "Y": 304 + }, + { + "Name": "blue_stained_glass_pane_top", + "DisplayName": "Blue Glass Pane Top", + "X": 16, + "Y": 304 + }, + { + "Name": "brown_stained_glass_pane_top", + "DisplayName": "Brown Glass Pane Top", + "X": 32, + "Y": 304 + }, + { + "Name": "cyan_stained_glass_pane_top", + "DisplayName": "Cyan Glass Pane Top", + "X": 48, + "Y": 304 + }, + { + "Name": "gray_stained_glass_pane_top", + "DisplayName": "Dark Grey Glass Pane Top", + "X": 64, + "Y": 304 + }, + { + "Name": "green_stained_glass_pane_top", + "DisplayName": "Green Glass Pane Top", + "X": 80, + "Y": 304 + }, + { + "Name": "light_blue_stained_glass_pane_top", + "DisplayName": "Light Blue Glass Pane Top", + "X": 96, + "Y": 304 + }, + { + "Name": "lime_stained_glass_pane_top", + "DisplayName": "Lime Glass Pane Top", + "X": 112, + "Y": 304 + }, + { + "Name": "magenta_stained_glass_pane_top", + "DisplayName": "Magenta Glass Pane Top", + "X": 128, + "Y": 304 + }, + { + "Name": "orange_stained_glass_pane_top", + "DisplayName": "Orange Glass Pane Top", + "X": 144, + "Y": 304 + }, + { + "Name": "pink_stained_glass_pane_top", + "DisplayName": "Pink Glass Pane Top", + "X": 160, + "Y": 304 + }, + { + "Name": "purple_stained_glass_pane_top", + "DisplayName": "Purple Glass Pane Top", + "X": 176, + "Y": 304 + }, + { + "Name": "red_stained_glass_pane_top", + "DisplayName": "Red Glass Pane Top", + "X": 192, + "Y": 304 + }, + { + "Name": "light_gray_stained_glass_pane_top", + "DisplayName": "Light Grey Glass Pane Top", + "X": 208, + "Y": 304 + }, + { + "Name": "white_stained_glass_pane_top", + "DisplayName": "White Glass Pane Top", + "X": 224, + "Y": 304 + }, + { + "Name": "yellow_stained_glass_pane_top", + "DisplayName": "Yellow Glass Pane Top", + "X": 240, + "Y": 304 + } +] \ No newline at end of file