From c280157d06bf35f5b3b9c1b4deb85bd61f76d2aa Mon Sep 17 00:00:00 2001 From: misieur Date: Thu, 11 Jun 2026 23:09:59 +0200 Subject: [PATCH 01/20] Enhance multithreading and add num_threads option --- java/rust/src/lib.rs | 13 +- .../main/java/dev/misieur/packobf/Native.java | 4 +- .../java/dev/misieur/packobf/PackOBF.java | 3 +- .../dev/misieur/packobf/options/Options.java | 4 +- .../packobf/progress/OptimizingProgress.java | 33 ++ .../misieur/packobf/progress/Progress.java | 7 +- packobf/src/file_parser.rs | 8 +- packobf/src/lib.rs | 284 +++++++++++------- packobf/src/options.rs | 5 + packobf_cli/src/main.rs | 51 +++- packobf_gui/src/main.rs | 9 + 11 files changed, 294 insertions(+), 127 deletions(-) create mode 100644 java/src/main/java/dev/misieur/packobf/progress/OptimizingProgress.java diff --git a/java/rust/src/lib.rs b/java/rust/src/lib.rs index 60625b9..023ee15 100644 --- a/java/rust/src/lib.rs +++ b/java/rust/src/lib.rs @@ -59,6 +59,10 @@ pub extern "system" fn Java_dev_misieur_packobf_Native_optimizeZip<'caller>( corrupt_png_files: env .get_field(&options, jni_str!("corruptPngFiles"), jni_sig!("Z"))? .z()?, + num_threads: Some( + env.get_field(&options, jni_str!("numThreads"), jni_sig!("I"))? + .i()? as usize, + ), } }; @@ -119,12 +123,17 @@ pub extern "system" fn Java_dev_misieur_packobf_Native_optimizeZip<'caller>( total: t, } => (1, c as i32, t as i32, None), Progress::Parsing { current: s } => (2, 0, 0, Some(s)), - Progress::Building { + Progress::Optimizing { current: s, index: i, total: t, } => (3, i as i32, t as i32, Some(s)), - Progress::Done => (4, 0, 0, None), + Progress::Building { + current: s, + index: i, + total: t, + } => (4, i as i32, t as i32, Some(s)), + Progress::Done => (5, 0, 0, None), }; let _ = env.with_local_frame(16, |env| { diff --git a/java/src/main/java/dev/misieur/packobf/Native.java b/java/src/main/java/dev/misieur/packobf/Native.java index adc421b..2d8479a 100644 --- a/java/src/main/java/dev/misieur/packobf/Native.java +++ b/java/src/main/java/dev/misieur/packobf/Native.java @@ -14,12 +14,13 @@ private Native() { static class Options { - public Options(int compression, int shaderCompression, boolean renameFiles, boolean blockUnzipping, boolean corruptPngFiles) { + public Options(int compression, int shaderCompression, boolean renameFiles, boolean blockUnzipping, boolean corruptPngFiles, int numThreads) { this.compression = compression; this.shaderCompression = shaderCompression; this.renameFiles = renameFiles; this.blockUnzipping = blockUnzipping; this.corruptPngFiles = corruptPngFiles; + this.numThreads = numThreads; } public int compression; @@ -27,6 +28,7 @@ public Options(int compression, int shaderCompression, boolean renameFiles, bool public boolean renameFiles; public boolean blockUnzipping; public boolean corruptPngFiles; + public int numThreads; } interface LogCallback { diff --git a/java/src/main/java/dev/misieur/packobf/PackOBF.java b/java/src/main/java/dev/misieur/packobf/PackOBF.java index 1aebf9b..cee4a19 100644 --- a/java/src/main/java/dev/misieur/packobf/PackOBF.java +++ b/java/src/main/java/dev/misieur/packobf/PackOBF.java @@ -42,7 +42,8 @@ public static byte[] optimizeZip( options.shaderCompression().value, options.renameFiles(), options.blockUnzipping(), - options.corruptPngFiles() + options.corruptPngFiles(), + options.numThreads() != null ? options.numThreads() : 0 ), (level, message) -> logCallback.onLog(switch (level) { case 0 -> LogLevel.INFO; diff --git a/java/src/main/java/dev/misieur/packobf/options/Options.java b/java/src/main/java/dev/misieur/packobf/options/Options.java index e01c400..fbab4b3 100644 --- a/java/src/main/java/dev/misieur/packobf/options/Options.java +++ b/java/src/main/java/dev/misieur/packobf/options/Options.java @@ -1,6 +1,8 @@ package dev.misieur.packobf.options; -public record Options(Compression compression, ShaderCompression shaderCompression, boolean renameFiles, boolean blockUnzipping, boolean corruptPngFiles) { +import dev.misieur.packobf.annotations.Nullable; + +public record Options(Compression compression, ShaderCompression shaderCompression, boolean renameFiles, boolean blockUnzipping, boolean corruptPngFiles, @Nullable Integer numThreads) { public static Options simplest() { return new Options( Compression.SIMPLEST, diff --git a/java/src/main/java/dev/misieur/packobf/progress/OptimizingProgress.java b/java/src/main/java/dev/misieur/packobf/progress/OptimizingProgress.java new file mode 100644 index 0000000..224c5d2 --- /dev/null +++ b/java/src/main/java/dev/misieur/packobf/progress/OptimizingProgress.java @@ -0,0 +1,33 @@ +package dev.misieur.packobf.progress; + +public final class OptimizingProgress extends Progress { + /** + * The total number of files to optimize + */ + private final int total; + /** + * The current file that PackOBF started to optimize + */ + private final Current current; + + public OptimizingProgress(int total, Current current) { + this.total = total; + this.current = current; + } + + public int total() { + return total; + } + + public Current current() { + return current; + } + + @Override + public State state() { + return State.OPTIMIZING; + } + + public record Current(String name, int index) { + } +} diff --git a/java/src/main/java/dev/misieur/packobf/progress/Progress.java b/java/src/main/java/dev/misieur/packobf/progress/Progress.java index 369fbeb..a394751 100644 --- a/java/src/main/java/dev/misieur/packobf/progress/Progress.java +++ b/java/src/main/java/dev/misieur/packobf/progress/Progress.java @@ -1,6 +1,6 @@ package dev.misieur.packobf.progress; -public abstract sealed class Progress permits BuildingProgress, DoneProgress, IdleProgress, ParsingProgress, ReadingZipProgress { +public abstract sealed class Progress permits IdleProgress, ReadingZipProgress, ParsingProgress, OptimizingProgress, BuildingProgress, DoneProgress { private State state; public abstract State state(); @@ -9,8 +9,9 @@ public enum State { IDLE(0), READING_ZIP(1), PARSING(2), - BUILDING(3), - DONE(4); + OPTIMIZING(3), + BUILDING(4), + DONE(5); private final int value; diff --git a/packobf/src/file_parser.rs b/packobf/src/file_parser.rs index d1b6c19..0865651 100644 --- a/packobf/src/file_parser.rs +++ b/packobf/src/file_parser.rs @@ -16,6 +16,7 @@ use crate::{get_type, parse_path, LogMessage, Progress}; use rayon::iter::{IntoParallelRefMutIterator, ParallelIterator}; use std::str::FromStr; use std::sync::Arc; +use rayon::ThreadPool; use tokio::sync::mpsc::UnboundedSender; use tokio::sync::watch::Sender; use crate::resource_pack::files::unknowntexture::UnknownTexture; @@ -25,9 +26,12 @@ pub fn parse_resource_pack_files( entries: &mut Vec<(String, Vec)>, progress: Sender, pack: Arc, + thread_pool: &ThreadPool ) { - entries.par_iter_mut().for_each(move |(name, content)| { - parse_resource_pack_file(logger, &progress, &pack, name, content); + thread_pool.install(|| { + entries.par_iter_mut().for_each(move |(name, content)| { + parse_resource_pack_file(logger, &progress, &pack, name, content); + }); }); } diff --git a/packobf/src/lib.rs b/packobf/src/lib.rs index 61c1156..89d948d 100644 --- a/packobf/src/lib.rs +++ b/packobf/src/lib.rs @@ -13,7 +13,7 @@ pub mod utils; use crate::cache::Cache; use crate::optimized_zip_writer::OptimizedZipWriter; -use crate::options::Options; +use crate::options::{Options, ShaderCompression}; use crate::resource_pack::files::atlas::Atlas; use crate::resource_pack::files::blockstate::Blockstate; use crate::resource_pack::files::font::Font; @@ -25,19 +25,21 @@ use crate::resource_pack::files::shader::Shader; use crate::resource_pack::files::sound::Sound; use crate::resource_pack::files::sound_definitions::SoundDefinitions; use crate::resource_pack::files::texture::Texture; +use crate::resource_pack::files::unknowntexture::UnknownTexture; use crate::resource_pack::identifier::Identifier; use crate::resource_pack::mapping; use crate::resource_pack::mapping::{IdUsageCounter, Mapping}; use crate::resource_pack::pack::ResourcePack; use crate::LogLevel::Info; use rayon::prelude::*; -use std::io::{Cursor, Error, Read}; +use rayon::{ThreadPool, ThreadPoolBuilder}; +use std::error::Error; +use std::io::{Cursor, Read}; use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::Arc; use tokio::sync::mpsc::UnboundedSender; use tokio::sync::watch::Sender; use zip::ZipArchive; -use crate::resource_pack::files::unknowntexture::UnknownTexture; pub fn process_zip( input_bytes: Vec, @@ -45,7 +47,7 @@ pub fn process_zip( progress: Sender, logger: &UnboundedSender, cache_file: &Option, -) -> zip::result::ZipResult> { +) -> Result, Box> { let _ = progress.send(Progress::Idle); #[cfg(feature = "profiling")] profiler::profiler::PROFILER.store(Arc::new(profiler::profiler::Profiler::new())); @@ -80,11 +82,16 @@ pub fn process_zip( let id_usage_counter = IdUsageCounter::default(); mapping::set_id_usage_counter(id_usage_counter); + let pool = ThreadPoolBuilder::new() + .num_threads(options.num_threads.unwrap_or(0)) + .build()?; + file_parser::parse_resource_pack_files( logger, &mut entries, progress.clone(), Arc::clone(&pack), + &pool, ); usage_checker::check_usage(logger, &pack); @@ -95,7 +102,7 @@ pub fn process_zip( } mapping::set_mappings(mapping); - let mut items = collect_files(pack); + let mut items = collect_files(pack, &pool); let total = items.len(); let mut output = Cursor::new(Vec::new()); @@ -123,18 +130,71 @@ pub fn process_zip( None }; - items.par_iter_mut().for_each(|(name, item)| { - match add_item_to_archive( - options, &progress, logger, total, &writer, &counter, &cache, name, item, - ) { - Ok(_) => {} - Err(e) => { - let _ = logger.send(LogMessage { - level: LogLevel::Error, - message: format!("Failed to add item to archive: {}", e), - }); + pool.install(|| { + let total_to_optimize = AtomicUsize::new(0); + let to_optimize: Vec<_> = items + .par_iter_mut() + .filter(|(_, item)| match item { + ResourcePackItem::Texture(_) => { + total_to_optimize.fetch_add(1, Ordering::Relaxed); + true + } + ResourcePackItem::UnknownTexture(_) => { + total_to_optimize.fetch_add(1, Ordering::Relaxed); + true + } + ResourcePackItem::Shader(_) => { + if options.shader_compression != ShaderCompression::None { + total_to_optimize.fetch_add(1, Ordering::Relaxed); + true + } else { + false + } + } + ResourcePackItem::Sound(_) => { + total_to_optimize.fetch_add(1, Ordering::Relaxed); + true + } + _ => false, + }) + .collect(); + + let total_to_optimize = to_optimize.len(); + to_optimize.into_par_iter().for_each(|(name, item)| { + let _ = progress.send(Progress::Optimizing { + current: name.to_string(), + index: counter.fetch_add(1, Ordering::Relaxed), + total: total_to_optimize, + }); + match item { + ResourcePackItem::Texture(x) => { + x.unknown_texture.optimize(options, logger, &cache); + } + ResourcePackItem::UnknownTexture(x) => { + x.optimize(options, logger, &cache); + } + ResourcePackItem::Shader(x) => { + x.optimize(options, logger); + } + ResourcePackItem::Sound(x) => { + x.optimize(logger, &cache); + } + _ => {} } - } + }); + items.par_iter_mut().for_each(|(name, item)| { + match add_item_to_archive( + options, &progress, logger, total, &writer, &counter, &cache, name, item, + ) { + Ok(_) => {} + Err(e) => { + let _ = logger.send(LogMessage { + level: LogLevel::Error, + message: format!("Failed to add item to archive: {}", e), + }); + } + } + }); }); writer.finish()?; @@ -161,7 +221,7 @@ fn add_item_to_archive( cache: &Option, name: &mut String, item: &mut ResourcePackItem, -) -> Result<(), Error> { +) -> Result<(), Box> { let _ = progress.send(Progress::Building { current: name.to_string(), index: counter.fetch_add(1, Ordering::Relaxed), @@ -185,10 +245,12 @@ fn add_item_to_archive( } } match item { - ResourcePackItem::Texture(o) => { - o.optimize(options, logger, cache); - writer.add_file(name.as_str(), o.unknown_texture.bytes.as_slice(), options, cache) - } + ResourcePackItem::Texture(o) => writer.add_file( + name.as_str(), + o.unknown_texture.bytes.as_slice(), + options, + cache, + ), ResourcePackItem::Shader(o) => { o.optimize(options, logger); writer.add_file(name.as_str(), o.content.as_bytes(), options, cache) @@ -215,7 +277,6 @@ fn add_item_to_archive( writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) } ResourcePackItem::Sound(o) => { - o.optimize(logger, cache); writer.add_file(name.as_str(), o.bytes.as_slice(), options, cache) } ResourcePackItem::SoundDefinitions(o) => { @@ -225,99 +286,103 @@ fn add_item_to_archive( writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) } ResourcePackItem::UnknownTexture(o) => { - o.optimize(options, logger, cache); writer.add_file(name.as_str(), o.bytes.as_slice(), options, cache) } }?; Ok(()) } -fn collect_files(pack: Arc) -> Vec<(String, ResourcePackItem)> { +fn collect_files( + pack: Arc, + thread_pool: &ThreadPool, +) -> Vec<(String, ResourcePackItem)> { profile_scope!("collect_files"); - let texture_iter = pack.textures.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::Texture(kv.value().clone()), - ) - }); - let unknown_texture_iter = pack.unknown_textures.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::UnknownTexture(kv.value().clone()), - ) - }); - let shader_iter = pack.shaders.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::Shader(kv.value().clone()), - ) - }); - let model_iter = pack.models.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::Model(kv.value().clone()), - ) - }); - let json_iter = pack - .json_files - .par_iter() - .map(|kv| (kv.key().clone(), ResourcePackItem::Json(kv.value().clone()))); - let unknown_iter = pack.unknown_files.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::Unknown(kv.value().clone()), - ) - }); - let blockstate_iter = pack.blockstates.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::BlockStateDefinition(kv.value().clone()), - ) - }); - let font_iter = pack.fonts.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::FontDefinition(kv.value().clone()), - ) - }); - let item_iter = pack.items.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::ItemDefinition(kv.value().clone()), - ) - }); - let sound_iter = pack.sounds.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::Sound(kv.value().clone()), - ) - }); - let sound_definitions_iter = pack.sound_definitions.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::SoundDefinitions(kv.value().clone()), - ) - }); - let atlas_iter = pack.atlases.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::Atlas(kv.value().clone()), - ) - }); + thread_pool.install(|| { + let texture_iter = pack.textures.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::Texture(kv.value().clone()), + ) + }); + let unknown_texture_iter = pack.unknown_textures.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::UnknownTexture(kv.value().clone()), + ) + }); + let shader_iter = pack.shaders.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::Shader(kv.value().clone()), + ) + }); + let model_iter = pack.models.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::Model(kv.value().clone()), + ) + }); + let json_iter = pack + .json_files + .par_iter() + .map(|kv| (kv.key().clone(), ResourcePackItem::Json(kv.value().clone()))); + let unknown_iter = pack.unknown_files.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::Unknown(kv.value().clone()), + ) + }); + let blockstate_iter = pack.blockstates.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::BlockStateDefinition(kv.value().clone()), + ) + }); + let font_iter = pack.fonts.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::FontDefinition(kv.value().clone()), + ) + }); + let item_iter = pack.items.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::ItemDefinition(kv.value().clone()), + ) + }); + let sound_iter = pack.sounds.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::Sound(kv.value().clone()), + ) + }); + let sound_definitions_iter = pack.sound_definitions.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::SoundDefinitions(kv.value().clone()), + ) + }); + let atlas_iter = pack.atlases.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::Atlas(kv.value().clone()), + ) + }); - texture_iter - .chain(unknown_texture_iter) - .chain(shader_iter) - .chain(model_iter) - .chain(json_iter) - .chain(unknown_iter) - .chain(blockstate_iter) - .chain(font_iter) - .chain(item_iter) - .chain(sound_iter) - .chain(sound_definitions_iter) - .chain(atlas_iter) - .collect() + texture_iter + .chain(unknown_texture_iter) + .chain(shader_iter) + .chain(model_iter) + .chain(json_iter) + .chain(unknown_iter) + .chain(blockstate_iter) + .chain(font_iter) + .chain(item_iter) + .chain(sound_iter) + .chain(sound_definitions_iter) + .chain(atlas_iter) + .collect() + }) } #[derive(Clone, Debug)] @@ -330,6 +395,11 @@ pub enum Progress { Parsing { current: String, }, + Optimizing { + current: String, + index: usize, + total: usize, + }, Building { current: String, index: usize, diff --git a/packobf/src/options.rs b/packobf/src/options.rs index f5687cc..ea61f99 100644 --- a/packobf/src/options.rs +++ b/packobf/src/options.rs @@ -15,6 +15,8 @@ pub struct Options { pub block_unzipping: bool, #[arg(long)] pub corrupt_png_files: bool, + #[arg(long)] + pub num_threads: Option, } #[derive(ValueEnum, Clone, Debug)] @@ -32,6 +34,7 @@ impl Options { rename_files: false, block_unzipping: false, corrupt_png_files: false, + num_threads: None, } } @@ -42,6 +45,7 @@ impl Options { rename_files: false, block_unzipping: false, corrupt_png_files: false, + num_threads: None, } } @@ -52,6 +56,7 @@ impl Options { rename_files: true, block_unzipping: true, corrupt_png_files: true, + num_threads: None, } } diff --git a/packobf_cli/src/main.rs b/packobf_cli/src/main.rs index fc66dd9..ee8e0a7 100644 --- a/packobf_cli/src/main.rs +++ b/packobf_cli/src/main.rs @@ -32,6 +32,7 @@ struct Args { static LOOKING_GLASS: Emoji<'_, '_> = Emoji("🔍 ", ""); static TRUCK: Emoji<'_, '_> = Emoji("🚚 ", ""); static CLIP: Emoji<'_, '_> = Emoji("🔗 ", ""); +static OPTIMIZING: Emoji<'_, '_> = Emoji("🚀 ", ""); static BUILDING: Emoji<'_, '_> = Emoji("⚒️ ", ""); static SPARKLE: Emoji<'_, '_> = Emoji("✨ ", ":-)"); static CHECK: Emoji<'_, '_> = Emoji("✅ ", "OK "); @@ -77,7 +78,7 @@ pub async fn run_progress_loop( let global_started = Instant::now(); let mut stage_started = Instant::now(); let mut current_pb: Option = None; - // 0: Idle, 1: Reading, 2: Parsing, 4: Building + // 1: Idle, 2: Reading, 3: Parsing, 4: Optimizing, 5: Building let mut current_stage: u8 = 0; let clear_current = |pb: &mut Option| { @@ -136,7 +137,7 @@ pub async fn run_progress_loop( if current_stage != 1 { println!( "{} {} Initializing...", - style("[1/4]").bold().dim(), + style("[1/5]").bold().dim(), LOOKING_GLASS ); current_stage = 1; @@ -150,7 +151,7 @@ pub async fn run_progress_loop( clear_current(&mut current_pb); println!( "{} {} Reading archive...", - style("[2/4]").bold().dim(), + style("[2/5]").bold().dim(), TRUCK ); current_stage = 2; @@ -160,7 +161,7 @@ pub async fn run_progress_loop( let pb = current_pb.get_or_insert_with(|| { let p = ProgressBar::new(total as u64); p.set_style(bar_style.clone()); - p.set_prefix("[2/4]"); + p.set_prefix("[2/5]"); p }); if pb.position() < current as u64 { @@ -176,12 +177,12 @@ pub async fn run_progress_loop( clear_current(&mut current_pb); println!( "{} {} Parsing resource files...", - style("[3/4]").bold().dim(), + style("[3/5]").bold().dim(), CLIP ); let pb = ProgressBar::new_spinner(); pb.set_style(spinner_style.clone()); - pb.set_prefix("[3/4]"); + pb.set_prefix("[3/5]"); current_pb = Some(pb); current_stage = 3; stage_started = Instant::now(); @@ -193,7 +194,7 @@ pub async fn run_progress_loop( } } - Progress::Building { + Progress::Optimizing { current, index, total, @@ -201,20 +202,50 @@ pub async fn run_progress_loop( if current_stage != 4 { print_finished_stage(&mut current_pb, "Parsing Complete", stage_started); + clear_current(&mut current_pb); + println!( + "{} {} Optimizing resource pack...", + style("[4/5]").bold().dim(), + OPTIMIZING + ); + current_stage = 4; + stage_started = Instant::now(); + } + + let pb = current_pb.get_or_insert_with(|| { + let p = ProgressBar::new(total as u64); + p.set_style(bar_style.clone()); + p.set_prefix("[4/5]"); + p + }); + if pb.position() < index as u64 { + pb.set_position(index as u64); + } + pb.set_message(format!("File: {}", current)); + } + + Progress::Building { + current, + index, + total, + } => { + if current_stage != 5 { + print_finished_stage(&mut current_pb, "Optimizing Complete", stage_started); + clear_current(&mut current_pb); println!( "{} {} Building resource pack...", - style("[4/4]").bold().dim(), + style("[5/5]").bold().dim(), BUILDING ); - current_stage = 4; + current_stage = 5; stage_started = Instant::now(); } let pb = current_pb.get_or_insert_with(|| { let p = ProgressBar::new(total as u64); p.set_style(bar_style.clone()); - p.set_prefix("[4/4]"); + p.set_prefix("[5/5]"); p }); if pb.position() < index as u64 { diff --git a/packobf_gui/src/main.rs b/packobf_gui/src/main.rs index 6a6ddb0..d4729e0 100644 --- a/packobf_gui/src/main.rs +++ b/packobf_gui/src/main.rs @@ -521,6 +521,7 @@ async fn run_packobf(path: String, cache: Option, state: Arc, state: Arc { + format!("Optimizing ({}/{}) {}", index, total, current) + } + Progress::Building { current, index, From d97d0737e048998374a987e0b653fdc8f8b3e55a Mon Sep 17 00:00:00 2001 From: misieur Date: Mon, 15 Jun 2026 22:35:30 +0200 Subject: [PATCH 02/20] Fix errors --- .../main/java/dev/misieur/packobf/options/Options.java | 9 ++++++--- packobf_gui/src/cxxqt_object.rs | 2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/java/src/main/java/dev/misieur/packobf/options/Options.java b/java/src/main/java/dev/misieur/packobf/options/Options.java index fbab4b3..8d7ddf1 100644 --- a/java/src/main/java/dev/misieur/packobf/options/Options.java +++ b/java/src/main/java/dev/misieur/packobf/options/Options.java @@ -9,7 +9,8 @@ public static Options simplest() { ShaderCompression.NONE, false, false, - false + false, + null ); } @@ -19,7 +20,8 @@ public static Options normal() { ShaderCompression.NONE, false, false, - false + false, + null ); } @@ -30,7 +32,8 @@ public static Options max() { ShaderCompression.MINIFY_AND_OBFUSCATE, true, true, - true + true, + null ); } } diff --git a/packobf_gui/src/cxxqt_object.rs b/packobf_gui/src/cxxqt_object.rs index 3d798d0..471c53e 100644 --- a/packobf_gui/src/cxxqt_object.rs +++ b/packobf_gui/src/cxxqt_object.rs @@ -203,6 +203,7 @@ impl qobject::AppController { rename_files: *self.rename_files(), block_unzipping: *self.block_unzipping(), corrupt_png_files: *self.corrupt_png_files(), + num_threads: None, }; let qt_thread = self.qt_thread(); @@ -241,6 +242,7 @@ impl qobject::AppController { Progress::Idle => "Idle".to_string(), Progress::ReadingZip { current, total } => format!("Reading ZIP ({}/{})", current, total), Progress::Parsing { current } => format!("Parsing {}", current), + Progress::Optimizing { current, index, total } => format!("Optimizing ({}/{}) {}", index, total, current), Progress::Building { current, index, total } => format!("Building ({}/{}) {}", index, total, current), Progress::Done => "Done".to_string(), }; From d02a904681bb286292668eb1fbd05b4828c0c89b Mon Sep 17 00:00:00 2001 From: misieur Date: Fri, 31 Jul 2026 11:03:57 +0200 Subject: [PATCH 03/20] Optimize PNG handling: add dynamic Zopfli presets for Normal/Best compression, refactor compression options, introduce Ultra preset, and enhance cache versioning. --- java/rust/src/lib.rs | 9 +- packobf/src/cache.rs | 55 ++---- packobf/src/file_parser.rs | 6 +- packobf/src/lib.rs | 129 +++++++++---- packobf/src/optimized_zip_writer.rs | 132 +++++++++---- packobf/src/options.rs | 167 +++++++++++++++-- packobf/src/profiler.rs | 20 +- .../src/resource_pack/files/unknowntexture.rs | 176 ++++++++++++++++-- packobf_cli/Cargo.toml | 1 + packobf_cli/src/main.rs | 2 +- packobf_gui/src/cxxqt_object.rs | 7 +- 11 files changed, 551 insertions(+), 153 deletions(-) diff --git a/java/rust/src/lib.rs b/java/rust/src/lib.rs index 023ee15..1abd0df 100644 --- a/java/rust/src/lib.rs +++ b/java/rust/src/lib.rs @@ -30,7 +30,7 @@ pub extern "system" fn Java_dev_misieur_packobf_Native_optimizeZip<'caller>( }; let options = if options.is_null() { - Options::simplest() + Options::fastest() } else { let comp_val = env .get_field(&options, jni_str!("compression"), jni_sig!("I"))? @@ -41,9 +41,10 @@ pub extern "system" fn Java_dev_misieur_packobf_Native_optimizeZip<'caller>( Options { compression: match comp_val { - 0 => Compression::Simplest, - 1 => Compression::Normal, - _ => Compression::Max, + 0 => Compression::Fastest, + 1 => Compression::Fast, + 2 => Compression::Normal, + _ => Compression::Best, }, shader_compression: match shader_comp_val { 0 => ShaderCompression::None, diff --git a/packobf/src/cache.rs b/packobf/src/cache.rs index 5192f57..c9935b1 100644 --- a/packobf/src/cache.rs +++ b/packobf/src/cache.rs @@ -6,12 +6,10 @@ use std::io::{BufReader, BufWriter, Read, Write}; use crate::profile_scope; -const MAGIC_NUMBER: [u8; 8] = *b"PACKOBF1"; -pub const VERSION: u16 = 1; +const MAGIC_NUMBER: [u8; 10] = *b"PACKOBF001"; // Increase version number each time compression is changed (hex number) pub struct CachedItem { pub compression: Compression, - pub version: u16, pub data: Vec, } @@ -19,16 +17,20 @@ pub struct CachedItem { #[derive(Debug, Clone, Copy)] pub enum Compression { Fastest = 0, - Normal = 1, - Best = 2, + Fast = 1, + Normal = 2, + Best = 3, + Ultra = 4, } impl Compression { fn from_u8(value: u8) -> Self { match value { 0 => Compression::Fastest, - 2 => Compression::Best, - _ => Compression::Normal, + 1 => Compression::Fast, + 2 => Compression::Normal, + 3 => Compression::Best, + _ => Compression::Ultra, } } } @@ -85,9 +87,6 @@ impl Cache { // Write Compression (1 byte) writer.write_all(&[item.compression as u8])?; - // Write Version (2 bytes) - writer.write_all(&item.version.to_le_bytes())?; - // Write Data Length (u64) and Data writer.write_all(&(item.data.len() as u64).to_le_bytes())?; writer.write_all(&item.data)?; @@ -101,25 +100,19 @@ impl Cache { profile_scope!("load_from_file::cache"); let file = File::open(path); if let Err(e) = file { - return if e.kind() == io::ErrorKind::NotFound { - Ok(Cache { - items: DashMap::new(), - }) - } else { - Err(e) - }; + return Err(e) } let file = file?; let mut reader = BufReader::new(file); let items = DashMap::new(); - let mut magic = [0u8; 8]; + let mut magic = [0u8; 10]; reader.read_exact(&mut magic)?; if magic != MAGIC_NUMBER { return Err(io::Error::new( io::ErrorKind::InvalidData, - "Not a valid cache file: Magic number mismatch", + "Not a valid cache file: Magic number mismatch (may be from a different version of packobf)", )); } @@ -143,11 +136,6 @@ impl Cache { reader.read_exact(&mut comp_byte)?; let compression = Compression::from_u8(comp_byte[0]); - // Read Version - let mut ver_bytes = [0u8; 2]; - reader.read_exact(&mut ver_bytes)?; - let version = u16::from_le_bytes(ver_bytes); - // Read Data Length and then the Data let mut data_len_bytes = [0u8; 8]; reader.read_exact(&mut data_len_bytes)?; @@ -156,16 +144,13 @@ impl Cache { let mut data = vec![0u8; data_len]; reader.read_exact(&mut data)?; - if version == VERSION { - items.insert( - CachedItemKey { hash, item_type }, - CachedItem { - compression, - version, - data, - }, - ); - } + items.insert( + CachedItemKey { hash, item_type }, + CachedItem { + compression, + data, + }, + ); } Ok(Cache { items }) @@ -198,7 +183,6 @@ impl Cache { CachedItemKey { hash, item_type }, CachedItem { compression: Compression::from_u8(compression), - version: VERSION, data: data.into(), }, ); @@ -218,7 +202,6 @@ impl Cache { }, CachedItem { compression: Compression::from_u8(compression), - version: VERSION, data: data.into(), }, ); diff --git a/packobf/src/file_parser.rs b/packobf/src/file_parser.rs index 0865651..1bfac68 100644 --- a/packobf/src/file_parser.rs +++ b/packobf/src/file_parser.rs @@ -46,14 +46,14 @@ fn parse_resource_pack_file( current: name.to_string(), }); #[cfg(feature = "profiling")] - let _ = crate::profiler::profiler::ScopeTimer::new( + let _ = crate::profiler::ScopeTimer::new( if name.ends_with(".json") || name.ends_with(".mcmeta") { "parse_resource_pack_files::json" - } else if name.ends_with(".png") && crate::get_type(&name) == Some("textures") { + } else if name.ends_with(".png") && get_type(&name) == Some("textures") { "parse_resource_pack_files::texture" } else if name.ends_with(".vsh") || name.ends_with(".fsh") || name.ends_with(".glsl") { "parse_resource_pack_files::shader" - } else if name.ends_with(".ogg") && crate::get_type(&name) == Some("sounds") { + } else if name.ends_with(".ogg") && get_type(&name) == Some("sounds") { "parse_resource_pack_files::sound" } else { "parse_resource_pack_files::unknown" diff --git a/packobf/src/lib.rs b/packobf/src/lib.rs index 89d948d..068bbcb 100644 --- a/packobf/src/lib.rs +++ b/packobf/src/lib.rs @@ -30,7 +30,8 @@ use crate::resource_pack::identifier::Identifier; use crate::resource_pack::mapping; use crate::resource_pack::mapping::{IdUsageCounter, Mapping}; use crate::resource_pack::pack::ResourcePack; -use crate::LogLevel::Info; +use crate::LogLevel::{Info, Warning}; +use dashmap::DashMap; use rayon::prelude::*; use rayon::{ThreadPool, ThreadPoolBuilder}; use std::error::Error; @@ -50,7 +51,7 @@ pub fn process_zip( ) -> Result, Box> { let _ = progress.send(Progress::Idle); #[cfg(feature = "profiling")] - profiler::profiler::PROFILER.store(Arc::new(profiler::profiler::Profiler::new())); + profiler::PROFILER.store(Arc::new(profiler::Profiler::new())); let progress_clone = progress.clone(); let reader = Cursor::new(&input_bytes); @@ -107,11 +108,15 @@ pub fn process_zip( let total = items.len(); let mut output = Cursor::new(Vec::new()); let writer = OptimizedZipWriter::new(&mut output); - let counter = AtomicUsize::new(0); if options.block_unzipping { // Add this file first to make tools crash before they can read the data - writer.add_file("assets\0", Vec::new().as_slice(), options, &None)?; + writer.add_file( + "assets\0", + Vec::new().as_slice(), + options, + &None, + )?; // `\0` (null) is universally disallowed inside filenames, but Minecraft doesn't care } @@ -120,11 +125,24 @@ pub fn process_zip( level: Info, message: format!("Loading cache from {}", cache), }); - let cache = Cache::load_from_file(cache)?; - let _ = logger.send(LogMessage { - level: Info, - message: format!("Cache loaded: {} items", cache.items.len()), - }); + let cache = match Cache::load_from_file(cache) { + Ok(cache) => { + let _ = logger.send(LogMessage { + level: Info, + message: format!("Cache loaded: {} items", cache.items.len()), + }); + cache + } + Err(e) => { + let _ = logger.send(LogMessage { + level: Warning, + message: format!("Invalid cache file, creating a new one. Error: {}", e), + }); + Cache { + items: DashMap::new(), + } + } + }; Some(cache) } else { None @@ -160,6 +178,7 @@ pub fn process_zip( .collect(); let total_to_optimize = to_optimize.len(); + let counter = AtomicUsize::new(0); to_optimize.into_par_iter().for_each(|(name, item)| { let _ = progress.send(Progress::Optimizing { current: name.to_string(), @@ -182,6 +201,8 @@ pub fn process_zip( _ => {} } }); + + let counter = AtomicUsize::new(0); items.par_iter_mut().for_each(|(name, item)| { match add_item_to_archive( options, &progress, logger, total, &writer, &counter, &cache, name, item, @@ -206,7 +227,7 @@ pub fn process_zip( let _ = progress.send(Progress::Done); #[cfg(feature = "profiling")] - profiler::profiler::PROFILER.load().print(); + profiler::PROFILER.load().print(); Ok(output.into_inner()) } @@ -253,7 +274,12 @@ fn add_item_to_archive( ), ResourcePackItem::Shader(o) => { o.optimize(options, logger); - writer.add_file(name.as_str(), o.content.as_bytes(), options, cache) + writer.add_file( + name.as_str(), + o.content.as_bytes(), + options, + cache, + ) } ResourcePackItem::Json(o) => writer.add_file( name.as_str(), @@ -261,33 +287,60 @@ fn add_item_to_archive( options, cache, ), - ResourcePackItem::Model(o) => { - writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) - } - ResourcePackItem::Unknown(o) => { - writer.add_file(name.as_str(), o.bytes.as_slice(), options, cache) - } - ResourcePackItem::BlockStateDefinition(o) => { - writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) - } - ResourcePackItem::FontDefinition(o) => { - writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) - } - ResourcePackItem::ItemDefinition(o) => { - writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) - } - ResourcePackItem::Sound(o) => { - writer.add_file(name.as_str(), o.bytes.as_slice(), options, cache) - } - ResourcePackItem::SoundDefinitions(o) => { - writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) - } - ResourcePackItem::Atlas(o) => { - writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) - } - ResourcePackItem::UnknownTexture(o) => { - writer.add_file(name.as_str(), o.bytes.as_slice(), options, cache) - } + ResourcePackItem::Model(o) => writer.add_file( + name.as_str(), + o.to_string().as_bytes(), + options, + cache, + ), + ResourcePackItem::Unknown(o) => writer.add_file( + name.as_str(), + o.bytes.as_slice(), + options, + cache, + ), + ResourcePackItem::BlockStateDefinition(o) => writer.add_file( + name.as_str(), + o.to_string().as_bytes(), + options, + cache, + ), + ResourcePackItem::FontDefinition(o) => writer.add_file( + name.as_str(), + o.to_string().as_bytes(), + options, + cache, + ), + ResourcePackItem::ItemDefinition(o) => writer.add_file( + name.as_str(), + o.to_string().as_bytes(), + options, + cache, + ), + ResourcePackItem::Sound(o) => writer.add_file( + name.as_str(), + o.bytes.as_slice(), + options, + cache, + ), + ResourcePackItem::SoundDefinitions(o) => writer.add_file( + name.as_str(), + o.to_string().as_bytes(), + options, + cache, + ), + ResourcePackItem::Atlas(o) => writer.add_file( + name.as_str(), + o.to_string().as_bytes(), + options, + cache, + ), + ResourcePackItem::UnknownTexture(o) => writer.add_file( + name.as_str(), + o.bytes.as_slice(), + options, + cache, + ), }?; Ok(()) } diff --git a/packobf/src/optimized_zip_writer.rs b/packobf/src/optimized_zip_writer.rs index 2f304e5..f5b5c9e 100644 --- a/packobf/src/optimized_zip_writer.rs +++ b/packobf/src/optimized_zip_writer.rs @@ -1,28 +1,25 @@ use crate::cache::{Cache, ItemType}; -pub(crate) use crate::options::ZOPFLI_OPTIONS; -use crate::options::{Compression, Options}; +use crate::options::{analyze_and_get_zopfli_config_best, analyze_and_get_zopfli_config_normal, Compression, Options, PreCheckResult, ULTRA_ZOPFLI_OPTIONS}; use crate::profile_scope; use byteorder::{LittleEndian, WriteBytesExt}; -use crc32fast::Hasher as Crc32Hasher; use dashmap::DashMap; use libdeflater::CompressionLvl; use sha2::{Digest, Sha256}; use std::io::{self, Error, Seek, Write}; use std::sync::{Arc, Mutex}; +use crate::options::PreCheckResult::{CompressWithZopfli, Skip}; #[derive(Clone, Debug)] pub struct CachedFileData { pub header_offset: u32, - pub crc32: u32, + pub compression_method: u16, pub compressed_size: u32, - pub uncompressed_size: u32, } struct CentralDirectoryEntry { filename: String, - crc32: u32, + compression_method: u16, compressed_size: u32, - uncompressed_size: u32, header_offset: u32, } @@ -65,16 +62,20 @@ impl OptimizedZipWriter { return self.record_entry(&mut inner, filename, cached_data); } - - // Calculate CRC32 (Required for Central Directory) - let mut crc32_hasher = Crc32Hasher::new(); - crc32_hasher.update(data); - let crc32 = crc32_hasher.finalize(); let uncompressed_size = data.len() as u32; // Compress the data using DEFLATE - let compressed_data: Vec = Self::compress(data, options, &hash, cache)?; - let compressed_size = compressed_data.len() as u32; + let compressed_data = Self::compress(data, options, &hash, cache)?; + let mut compressed_size = compressed_data.len() as u32; + let using_store = compressed_size == 0; // Skip compression if it's larger when compressed + if using_store { + compressed_size = uncompressed_size; + } + let compression_method = if using_store { + 0 // Store + } else { + 8 // Deflate + }; let mut inner = self.inner.lock().unwrap_or_else(|e| e.into_inner()); @@ -90,9 +91,9 @@ impl OptimizedZipWriter { // Write the Minimized Local File Header (LFH) // We zero out the metadata, filename length, and omit the filename string to save space. inner.writer.write_u32::(0x04034b50)?; // LFH Signature - inner.writer.write_u16::(10)?; // Version needed to extract (1.0) + inner.writer.write_u16::(0)?; // Version needed to extract (Zeroed) inner.writer.write_u16::(0)?; // General purpose bit flag - inner.writer.write_u16::(8)?; // Compression method (8 = Deflate) + inner.writer.write_u16::(0)?; // Compression method (Zeroed) inner.writer.write_u32::(0)?; // Last mod file time and date (Zeroed) inner.writer.write_u32::(0)?; // CRC-32 (Zeroed) inner.writer.write_u32::(0)?; // Compressed size (Zeroed) @@ -101,22 +102,24 @@ impl OptimizedZipWriter { inner.writer.write_u16::(0)?; // Extra field length (Zeroed) // Write the actual compressed payload - inner.writer.write_all(&compressed_data)?; + if using_store { + inner.writer.write_all(data)?; // When using Store + } else { + inner.writer.write_all(&compressed_data)?; // When using Deflate + } let new_cache = CachedFileData { header_offset, - crc32, - compressed_size, - uncompressed_size, + compression_method, + compressed_size }; // Insert into the hashmap so future identical files point here self.content_cache.insert(hash, new_cache.clone()); inner.cd_entries.push(CentralDirectoryEntry { filename: filename.to_string(), - crc32: new_cache.crc32, + compression_method: new_cache.compression_method, compressed_size: new_cache.compressed_size, - uncompressed_size: new_cache.uncompressed_size, header_offset: new_cache.header_offset, }); @@ -140,14 +143,19 @@ impl OptimizedZipWriter { return Ok(bytes); } } + let input_size = data.len(); Ok(match options.compression { - Compression::Simplest => { + Compression::Fastest => { let mut compressor = libdeflater::Compressor::default(); let mut out = vec![0u8; compressor.deflate_compress_bound(data.len())]; let size = compressor .deflate_compress(data, &mut out) .map_err(|_| Error::other("Compression failed"))?; out.truncate(size); + let out_size = out.len(); + if out_size > input_size { + out = vec![]; + } if let Some(cache) = cache { cache.add_item_hash( hash, @@ -158,31 +166,86 @@ impl OptimizedZipWriter { } out } - Compression::Normal => { + Compression::Fast => { let mut compressor = libdeflater::Compressor::new(CompressionLvl::best()); let mut out = vec![0u8; compressor.deflate_compress_bound(data.len())]; let size = compressor .deflate_compress(data, &mut out) .map_err(|_| Error::other("Compression failed"))?; out.truncate(size); + let out_size = out.len(); + if out_size > input_size { + out = vec![]; + } if let Some(cache) = cache { cache.add_item_hash( hash, &*out, - crate::cache::Compression::Normal as u8, + crate::cache::Compression::Fast as u8, ItemType::Generic, ) } out } - Compression::Max => { + Compression::Normal => { + let pre_check_result = analyze_and_get_zopfli_config_normal(&data); + Self::compress_with_pre_check(data, hash, cache, input_size, pre_check_result)? + } + Compression::Best => { + let pre_check_result = analyze_and_get_zopfli_config_best(&data); + Self::compress_with_pre_check(data, hash, cache, input_size, pre_check_result)? + } + Compression::Ultra => { let mut encoder = zopfli::DeflateEncoder::new( - ZOPFLI_OPTIONS.to_owned(), + ULTRA_ZOPFLI_OPTIONS.to_owned(), zopfli::BlockType::Dynamic, Vec::new(), ); encoder.write_all(data)?; - let out = encoder.finish()?; + let mut out = encoder.finish()?; + let out_size = out.len(); + if out_size > input_size { + out = vec![]; + } + if let Some(cache) = cache { + cache.add_item_hash( + hash, + &*out, + crate::cache::Compression::Ultra as u8, + ItemType::Generic, + ) + } + out + } + }) + } + + fn compress_with_pre_check(data: &[u8], hash: &[u8; 32], cache: &Option, input_size: usize, pre_check_result: PreCheckResult) -> Result, Error> { + Ok(match pre_check_result { + CompressWithZopfli(options) => { + let mut encoder = zopfli::DeflateEncoder::new( + options, + zopfli::BlockType::Dynamic, + Vec::new(), + ); + encoder.write_all(data)?; + let mut out = encoder.finish()?; + let out_size = out.len(); + if out_size > input_size { + out = vec![]; + } + if let Some(cache) = cache { + cache.add_item_hash( + hash, + &*out, + crate::cache::Compression::Best as u8, + ItemType::Generic, + ) + } + out + } + Skip => { + let out = vec![]; if let Some(cache) = cache { cache.add_item_hash( hash, @@ -204,9 +267,8 @@ impl OptimizedZipWriter { ) -> io::Result<()> { inner.cd_entries.push(CentralDirectoryEntry { filename: filename.to_string(), - crc32: data.crc32, + compression_method: data.compression_method, compressed_size: data.compressed_size, - uncompressed_size: data.uncompressed_size, header_offset: data.header_offset, }); Ok(()) @@ -229,14 +291,14 @@ impl OptimizedZipWriter { let filename_bytes = entry.filename.as_bytes(); writer.write_u32::(0x02014b50)?; // CD Signature - writer.write_u16::(10)?; // Version made by - writer.write_u16::(10)?; // Version needed to extract + writer.write_u16::(0)?; // Version made by + writer.write_u16::(0)?; // Version needed to extract writer.write_u16::(0)?; // General purpose bit flag - writer.write_u16::(8)?; // Compression method (8 = Deflate) + writer.write_u16::(entry.compression_method)?; // Compression method writer.write_u32::(0)?; // Last mod file time and date - writer.write_u32::(entry.crc32)?; // Actual CRC-32 + writer.write_u32::(0)?; // Actual CRC-32 writer.write_u32::(entry.compressed_size)?; // Actual Compressed size - writer.write_u32::(entry.uncompressed_size)?; // Actual Uncompressed size + writer.write_u32::(0)?; // Actual Uncompressed size writer.write_u16::(filename_bytes.len() as u16)?; // File name length writer.write_u16::(0)?; // Extra field length writer.write_u16::(0)?; // File comment length diff --git a/packobf/src/options.rs b/packobf/src/options.rs index ea61f99..400473f 100644 --- a/packobf/src/options.rs +++ b/packobf/src/options.rs @@ -1,6 +1,7 @@ use once_cell::sync::Lazy; use std::num::NonZeroU64; use clap::{Parser, ValueEnum}; +use libdeflater::{CompressionLvl, Compressor}; #[derive(Parser, Clone, Debug)] #[group(id = "options")] @@ -21,15 +22,27 @@ pub struct Options { #[derive(ValueEnum, Clone, Debug)] pub enum Preset { - Simplest, + Fastest, + Fast, Normal, - Max, + Best, } impl Options { - pub fn simplest() -> Self { + pub fn fastest() -> Self { Self { - compression: Compression::Simplest, + compression: Compression::Fastest, + shader_compression: ShaderCompression::None, + rename_files: false, + block_unzipping: false, + corrupt_png_files: false, + num_threads: None, + } + } + + pub fn fast() -> Self { + Self { + compression: Compression::Fast, shader_compression: ShaderCompression::None, rename_files: false, block_unzipping: false, @@ -49,9 +62,9 @@ impl Options { } } - pub fn max() -> Self { + pub fn best() -> Self { Self { - compression: Compression::Max, + compression: Compression::Best, shader_compression: ShaderCompression::MinifyAndObfuscate, rename_files: true, block_unzipping: true, @@ -62,9 +75,10 @@ impl Options { pub fn from_preset(preset: Preset) -> Self { match preset { - Preset::Simplest => Self::simplest(), + Preset::Fastest => Self::fastest(), + Preset::Fast => Self::fast(), Preset::Normal => Self::normal(), - Preset::Max => Self::max(), + Preset::Best => Self::best(), } } } @@ -72,9 +86,11 @@ impl Options { #[repr(u8)] #[derive(ValueEnum, Clone, Debug)] pub enum Compression { - Simplest = 0, - Normal = 1, - Max = 2, + Fastest = 0, + Fast = 1, + Normal = 2, + Best = 3, + Ultra = 4, } #[repr(u8)] @@ -89,6 +105,131 @@ pub enum ShaderCompression { #[allow(clippy::unwrap_used)] pub static ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { iteration_count: NonZeroU64::new(25).unwrap(), - iterations_without_improvement: NonZeroU64::new(7).unwrap(), - maximum_block_splits: 50, + iterations_without_improvement: NonZeroU64::new(3).unwrap(), + maximum_block_splits: 15, +}); + +#[allow(clippy::unwrap_used)] +pub static FASTEST_ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { + iteration_count: NonZeroU64::new(3).unwrap(), + iterations_without_improvement: NonZeroU64::new(1).unwrap(), + maximum_block_splits: 2, +}); + +#[allow(clippy::unwrap_used)] +pub static FAST_ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { + iteration_count: NonZeroU64::new(5).unwrap(), + iterations_without_improvement: NonZeroU64::new(2).unwrap(), + maximum_block_splits: 5, +}); + +#[allow(clippy::unwrap_used)] +pub static NORMAL_ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { + iteration_count: NonZeroU64::new(12).unwrap(), + iterations_without_improvement: NonZeroU64::new(2).unwrap(), + maximum_block_splits: 10, +}); + +#[allow(clippy::unwrap_used)] +pub static SLOW_ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { + iteration_count: NonZeroU64::new(20).unwrap(), + iterations_without_improvement: NonZeroU64::new(3).unwrap(), + maximum_block_splits: 15, +}); + +#[allow(clippy::unwrap_used)] +pub static SLOWEST_ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { + iteration_count: NonZeroU64::new(25).unwrap(), + iterations_without_improvement: NonZeroU64::new(3).unwrap(), + maximum_block_splits: 15, +}); + +#[allow(clippy::unwrap_used)] +pub static ULTRA_ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { + iteration_count: NonZeroU64::new(40).unwrap(), + iterations_without_improvement: NonZeroU64::new(40).unwrap(), + maximum_block_splits: 25, }); + +pub enum PreCheckResult { + /// Skip Zopfli entirely + Skip, + /// Use Zopfli with dynamically assigned options + CompressWithZopfli(zopfli::Options), +} + +/// Pre-checks data compressibility using libdeflater (Level 9) +/// and dynamically calculates the Zopfli config for 'normal' preset. +pub fn analyze_and_get_zopfli_config_normal(data: &[u8]) -> PreCheckResult { + let (original_size, savings_ratio) = match analyze(data) { + Ok(value) => value, + Err(value) => return value, + }; + + // Less than 1% savings + if savings_ratio < 0.01 { + return PreCheckResult::Skip; // Don't waste CPU time on Zopfli + } + + // 1% to 8% savings + if savings_ratio < 0.08 { + return PreCheckResult::CompressWithZopfli(FASTEST_ZOPFLI_OPTIONS.to_owned()); + } + + // > 8% savings + PreCheckResult::CompressWithZopfli(match original_size { + 0..=51_200 => SLOW_ZOPFLI_OPTIONS.to_owned(), + + 51_201..=512_000 => NORMAL_ZOPFLI_OPTIONS.to_owned(), + + _ => FAST_ZOPFLI_OPTIONS.to_owned(), + }) +} + +/// Pre-checks data compressibility using libdeflater (Level 9) +/// and dynamically calculates the Zopfli config for 'best' preset. +pub fn analyze_and_get_zopfli_config_best(data: &[u8]) -> PreCheckResult { + let (original_size, savings_ratio) = match analyze(data) { + Ok(value) => value, + Err(value) => return value, + }; + + // Less than 1% savings + if savings_ratio < 0.01 { + return PreCheckResult::Skip; // Don't waste CPU time on Zopfli + } + + // 1% to 8% savings + if savings_ratio < 0.08 { + return PreCheckResult::CompressWithZopfli(FAST_ZOPFLI_OPTIONS.to_owned()); + } + + // > 8% savings + PreCheckResult::CompressWithZopfli(match original_size { + 0..=51_200 => SLOWEST_ZOPFLI_OPTIONS.to_owned(), + + 51_201..=512_000 => SLOW_ZOPFLI_OPTIONS.to_owned(), + + _ => NORMAL_ZOPFLI_OPTIONS.to_owned(), + }) +} + +fn analyze(data: &[u8]) -> Result<(usize, f64), PreCheckResult> { + let original_size = data.len(); + if original_size == 0 { + return Err(PreCheckResult::Skip); + } + + let mut compressor = Compressor::new(CompressionLvl::new(9).unwrap()); + let max_buf_len = compressor.deflate_compress_bound(original_size); + let mut compressed_buf = vec![0u8; max_buf_len]; + + let fast_compressed_size = match compressor.deflate_compress(data, &mut compressed_buf) { + Ok(sz) => sz, + Err(_) => return Err(PreCheckResult::Skip), + }; + + let bytes_saved = original_size.saturating_sub(fast_compressed_size); + let savings_ratio = bytes_saved as f64 / original_size as f64; + Ok((original_size, savings_ratio)) +} diff --git a/packobf/src/profiler.rs b/packobf/src/profiler.rs index 4003549..33a0fa8 100644 --- a/packobf/src/profiler.rs +++ b/packobf/src/profiler.rs @@ -15,6 +15,8 @@ pub static PROFILER: LazyLock> = LazyLock::new(|| ArcSwap::fro #[cfg(feature = "profiling")] pub struct Stat { pub total_ns: AtomicU64, + pub min_ns: AtomicU64, + pub max_ns: AtomicU64, pub calls: AtomicU64, } @@ -36,10 +38,14 @@ impl Profiler { let entry = self.stats.entry(name).or_insert_with(|| Stat { total_ns: AtomicU64::new(0), + min_ns: AtomicU64::new(nanos), + max_ns: AtomicU64::new(nanos), calls: AtomicU64::new(0), }); entry.total_ns.fetch_add(nanos, Ordering::Relaxed); + entry.min_ns.fetch_min(nanos, Ordering::Relaxed); + entry.max_ns.fetch_max(nanos, Ordering::Relaxed); entry.calls.fetch_add(1, Ordering::Relaxed); } @@ -49,9 +55,11 @@ impl Profiler { .iter() .map(|e| { let total = e.total_ns.load(Ordering::Relaxed); + let min = e.min_ns.load(Ordering::Relaxed); + let max = e.max_ns.load(Ordering::Relaxed); let calls = e.calls.load(Ordering::Relaxed); - (*e.key(), total, calls, total as f64 / calls.max(1) as f64) + (*e.key(), total, calls, total as f64 / calls.max(1) as f64, min, max) }) .collect::>(); @@ -59,13 +67,15 @@ impl Profiler { println!("==== PROFILING ===="); - for (name, total, calls, avg) in entries { + for (name, total, calls, avg, min, max) in entries { println!( - "{:<40} total={:>10.2}ms calls={:>8.2} avg={:>10.2}µs", + "{:<40} total={:>10.2}ms calls={:>8.2} avg={:>10.5}ms min={:>10.5}ms max={:>10.5}ms", name, total as f64 / 1_000_000.0, calls, - avg / 1_000.0 + avg / 1_000_000.0, + min as f64 / 1_000_000.0, + max as f64 / 1_000_000.0, ); } } @@ -98,6 +108,6 @@ impl Drop for ScopeTimer { macro_rules! profile_scope { ($name:expr) => { #[cfg(feature = "profiling")] - let _profiler_scope = $crate::profiler::profiler::ScopeTimer::new($name); + let _profiler_scope = $crate::profiler::ScopeTimer::new($name); }; } diff --git a/packobf/src/resource_pack/files/unknowntexture.rs b/packobf/src/resource_pack/files/unknowntexture.rs index 316c5a2..79755ab 100644 --- a/packobf/src/resource_pack/files/unknowntexture.rs +++ b/packobf/src/resource_pack/files/unknowntexture.rs @@ -1,3 +1,4 @@ +use std::num::NonZeroU64; use std::time::Duration; use once_cell::sync::Lazy; use oxipng::{indexset, optimize_from_memory, Deflater, FilterStrategy, StripChunks}; @@ -14,6 +15,74 @@ pub struct UnknownTexture { pub bytes: Vec, } +/// Decodes PNG dimensions and estimates uncompressed IDAT size instantly from raw headers. +fn get_raw_uncompressed_size(bytes: &[u8]) -> Option { + if bytes.len() < 26 { + return None; + } + if bytes[0..8] != [137, 80, 78, 71, 13, 10, 26, 10] { + return None; + } + if &bytes[12..16] != b"IHDR" { + return None; + } + + let width = u32::from_be_bytes(bytes[16..20].try_into().ok()?) as usize; + let height = u32::from_be_bytes(bytes[20..24].try_into().ok()?) as usize; + let bit_depth = bytes[24] as usize; + let color_type = bytes[25]; + + let channels = match color_type { + 0 => 1, // Grayscale + 2 => 3, // RGB + 3 => 1, // Palette (indexed) + 4 => 2, // Grayscale + Alpha + 6 => 4, // RGBA + _ => 4, // Fallback + }; + + let bits_per_pixel = channels * bit_depth; + let row_bytes = (width * bits_per_pixel).div_ceil(8) + 1; + Some(row_bytes * height) +} + +/// Formula generated using a script +fn get_zopfli_options_normal(raw_size: usize) -> oxipng::ZopfliOptions { + let (iterations, without_improvement, splits) = if raw_size < 10_000 { + (10, 6, 1) + } else if raw_size < 100_000 { + (9, 3, 1) + } else if raw_size < 1_000_000 { + (9, 2, 1) + } else { + (9, 1, 2) + }; + + oxipng::ZopfliOptions { + iteration_count: NonZeroU64::new(iterations).unwrap(), + iterations_without_improvement: NonZeroU64::new(without_improvement).unwrap(), + maximum_block_splits: splits, + } +} + +fn get_zopfli_options_best(raw_size: usize) -> oxipng::ZopfliOptions { + let (iterations, without_improvement, splits) = if raw_size < 10_000 { + (10, 6, 1) + } else if raw_size < 100_000 { + (16, 6, 1) + } else if raw_size < 1_000_000 { + (20, 6, 2) + } else { + (22, 7, 2) + }; + + oxipng::ZopfliOptions { + iteration_count: NonZeroU64::new(iterations).unwrap(), + iterations_without_improvement: NonZeroU64::new(without_improvement).unwrap(), + maximum_block_splits: splits, + } +} + impl UnknownTexture { pub fn new(path: impl Into, bytes: Vec) -> Self { Self { @@ -71,12 +140,28 @@ impl UnknownTexture { return bytes; } } + let oxipng_options = match options.compression { - Compression::Simplest => &DEFAULT_OPTIONS, - Compression::Normal => &NORMAL_OPTIONS, - Compression::Max => &MAX_OPTIONS, + Compression::Fastest => FASTEST_OPTIONS.clone(), + Compression::Fast => FAST_OPTIONS.clone(), + Compression::Normal => { + let mut opts = NORMAL_OPTIONS.clone(); + let raw_size = get_raw_uncompressed_size(bytes).unwrap_or(bytes.len()); + opts.deflater = Deflater::Zopfli(get_zopfli_options_normal(raw_size)); + opts + } + Compression::Best => { + let mut opts = BEST_OPTIONS.clone(); + let raw_size = get_raw_uncompressed_size(bytes).unwrap_or(bytes.len()); + opts.deflater = Deflater::Zopfli(get_zopfli_options_best(raw_size)); + opts + } + Compression::Ultra => { + ULTRA_OPTIONS.clone() + } }; - match optimize_from_memory(bytes, oxipng_options) { + + match optimize_from_memory(bytes, &oxipng_options) { Ok(value) => { if let Some(cache) = cache { cache.add_item( @@ -102,7 +187,7 @@ impl UnknownTexture { level: Info, message: format!("Image '{}' was recovered successfully.", path), }); - match optimize_from_memory(value.as_slice(), oxipng_options) { + match optimize_from_memory(value.as_slice(), &oxipng_options) { Ok(value) => { if let Some(cache) = cache { cache.add_item( @@ -140,14 +225,10 @@ impl UnknownTexture { } } } - } -/** -Currently, only the `deflater` option changes, but some other options could be modified based on the compression wanted. -*/ -// -static DEFAULT_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { +// +static FASTEST_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { fix_errors: true, force: false, filters: indexset! { @@ -175,6 +256,39 @@ static DEFAULT_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { scale_16: false, strip: StripChunks::All, deflater: Deflater::Libdeflater { compression: 6 }, // 6: default compression level + fast_evaluation: true, + timeout: Some(Duration::from_secs(3)), + max_decompressed_size: None, +}); + +static FAST_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { + fix_errors: true, + force: false, + filters: indexset! { + FilterStrategy::NONE, + FilterStrategy::SUB, + FilterStrategy::UP, + FilterStrategy::AVERAGE, + FilterStrategy::PAETH, + FilterStrategy::MinSum, + FilterStrategy::Entropy, + FilterStrategy::Bigrams, + FilterStrategy::BigEnt, + FilterStrategy::Brute { + num_lines: 8, + level: 12, + }, + }, + interlace: Some(false), + optimize_alpha: true, + bit_depth_reduction: true, + color_type_reduction: true, + palette_reduction: true, + grayscale_reduction: true, + idat_recoding: true, + scale_16: false, + strip: StripChunks::All, + deflater: Deflater::Libdeflater { compression: 12 }, // 12: max compression level for libdeflater fast_evaluation: false, timeout: Some(Duration::from_secs(3)), max_decompressed_size: None, @@ -207,13 +321,46 @@ static NORMAL_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { idat_recoding: true, scale_16: false, strip: StripChunks::All, - deflater: Deflater::Libdeflater { compression: 12 }, // 12: max compression level for libdeflater + deflater: Deflater::Zopfli(options::NORMAL_ZOPFLI_OPTIONS.to_owned()), fast_evaluation: false, timeout: Some(Duration::from_secs(3)), max_decompressed_size: None, }); -static MAX_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { +static BEST_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { + fix_errors: true, + force: false, + filters: indexset! { + FilterStrategy::NONE, + FilterStrategy::SUB, + FilterStrategy::UP, + FilterStrategy::AVERAGE, + FilterStrategy::PAETH, + FilterStrategy::MinSum, + FilterStrategy::Entropy, + FilterStrategy::Bigrams, + FilterStrategy::BigEnt, + FilterStrategy::Brute { + num_lines: 8, + level: 12, + }, + }, + interlace: Some(false), + optimize_alpha: true, + bit_depth_reduction: true, + color_type_reduction: true, + palette_reduction: true, + grayscale_reduction: true, + idat_recoding: true, + scale_16: false, + strip: StripChunks::All, + deflater: Deflater::Zopfli(options::SLOW_ZOPFLI_OPTIONS.to_owned()), + fast_evaluation: false, + timeout: None, + max_decompressed_size: None, +}); + +static ULTRA_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { fix_errors: true, force: false, filters: indexset! { @@ -240,10 +387,9 @@ static MAX_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { idat_recoding: true, scale_16: false, strip: StripChunks::All, - deflater: Deflater::Zopfli(options::ZOPFLI_OPTIONS.to_owned()), // zopfli: best compression + deflater: Deflater::Zopfli(options::ULTRA_ZOPFLI_OPTIONS.to_owned()), fast_evaluation: false, timeout: Some(Duration::from_secs(3)), max_decompressed_size: None, }); // - diff --git a/packobf_cli/Cargo.toml b/packobf_cli/Cargo.toml index 86bcced..31290b4 100644 --- a/packobf_cli/Cargo.toml +++ b/packobf_cli/Cargo.toml @@ -3,6 +3,7 @@ name = "packobf_cli" version = "0.2.1" edition = "2024" license = "MIT" +default-run = "packobf_cli" [dependencies] packobf = { path = "../packobf" } diff --git a/packobf_cli/src/main.rs b/packobf_cli/src/main.rs index ee8e0a7..04cd183 100644 --- a/packobf_cli/src/main.rs +++ b/packobf_cli/src/main.rs @@ -60,7 +60,7 @@ async fn main() { DecimalBytes(bytes.len() as u64), DecimalBytes(input_size as u64), DecimalBytes(bytes.len().abs_diff(input_size) as u64), - 100.0 - ratio * 100.0, + (100.0 - ratio * 100.0).abs(), if bytes.len() < input_size { "smaller" } else { diff --git a/packobf_gui/src/cxxqt_object.rs b/packobf_gui/src/cxxqt_object.rs index 471c53e..aec1dcd 100644 --- a/packobf_gui/src/cxxqt_object.rs +++ b/packobf_gui/src/cxxqt_object.rs @@ -191,9 +191,10 @@ impl qobject::AppController { let options = Options { compression: match self.compression() { - 0 => Compression::Simplest, - 1 => Compression::Normal, - _ => Compression::Max, + 0 => Compression::Fastest, + 1 => Compression::Fast, + 2 => Compression::Normal, + _ => Compression::Best, }, shader_compression: match self.shader_compression() { 0 => ShaderCompression::None, From 725faada8812a039846db1363bb29e0c644a20a1 Mon Sep 17 00:00:00 2001 From: misieur Date: Fri, 31 Jul 2026 11:11:25 +0200 Subject: [PATCH 04/20] Clean up code --- packobf/src/lib.rs | 2 +- packobf/src/optimized_zip_writer.rs | 4 +- packobf/src/options.rs | 1 + packobf/src/renamer.rs | 4 +- packobf/src/resource_pack/files/texture.rs | 4 +- .../src/resource_pack/files/unknowntexture.rs | 79 +------------------ packobf/src/shader_minifier/minifier.rs | 11 +-- 7 files changed, 16 insertions(+), 89 deletions(-) diff --git a/packobf/src/lib.rs b/packobf/src/lib.rs index 068bbcb..bf5a45b 100644 --- a/packobf/src/lib.rs +++ b/packobf/src/lib.rs @@ -498,7 +498,7 @@ fn parse_path(path: &str) -> (String, Identifier) { let overlay = if path.starts_with("assets/") { "".to_string() } else { - parts.next().unwrap().to_string() + parts.next().unwrap_or("").to_string() }; parts.next(); // skip assets diff --git a/packobf/src/optimized_zip_writer.rs b/packobf/src/optimized_zip_writer.rs index f5b5c9e..20369f2 100644 --- a/packobf/src/optimized_zip_writer.rs +++ b/packobf/src/optimized_zip_writer.rs @@ -188,11 +188,11 @@ impl OptimizedZipWriter { out } Compression::Normal => { - let pre_check_result = analyze_and_get_zopfli_config_normal(&data); + let pre_check_result = analyze_and_get_zopfli_config_normal(data); Self::compress_with_pre_check(data, hash, cache, input_size, pre_check_result)? } Compression::Best => { - let pre_check_result = analyze_and_get_zopfli_config_best(&data); + let pre_check_result = analyze_and_get_zopfli_config_best(data); Self::compress_with_pre_check(data, hash, cache, input_size, pre_check_result)? } Compression::Ultra => { diff --git a/packobf/src/options.rs b/packobf/src/options.rs index 400473f..6d1cd2b 100644 --- a/packobf/src/options.rs +++ b/packobf/src/options.rs @@ -220,6 +220,7 @@ fn analyze(data: &[u8]) -> Result<(usize, f64), PreCheckResult> { return Err(PreCheckResult::Skip); } + #[allow(clippy::unwrap_used)] let mut compressor = Compressor::new(CompressionLvl::new(9).unwrap()); let max_buf_len = compressor.deflate_compress_bound(original_size); let mut compressed_buf = vec![0u8; max_buf_len]; diff --git a/packobf/src/renamer.rs b/packobf/src/renamer.rs index 65e3b8d..6c2f27d 100644 --- a/packobf/src/renamer.rs +++ b/packobf/src/renamer.rs @@ -239,7 +239,7 @@ fn rebuild_atlas(pack: &ResourcePack) { atlas.sources.retain(|source| !matches!(source, Source::Directory { .. } | Source::Single { .. })); match atlas.atlas_type { AtlasType::Blocks => { - if atlas.overlay == "" { + if atlas.overlay.is_empty() { block_atlas_exists = true; } atlas.sources.push(Source::Directory { @@ -248,7 +248,7 @@ fn rebuild_atlas(pack: &ResourcePack) { }); } AtlasType::Items => { - if atlas.overlay == "" { + if atlas.overlay.is_empty() { item_atlas_exists = true; } atlas.sources.push(Source::Directory { diff --git a/packobf/src/resource_pack/files/texture.rs b/packobf/src/resource_pack/files/texture.rs index 29d2d52..cb84e04 100644 --- a/packobf/src/resource_pack/files/texture.rs +++ b/packobf/src/resource_pack/files/texture.rs @@ -31,8 +31,8 @@ impl Texture { ); let unknown_texture = UnknownTexture::new(path, bytes); Self { - overlay: overlay.into(), - identifier: identifier.into(), + overlay, + identifier, unknown_texture, } } diff --git a/packobf/src/resource_pack/files/unknowntexture.rs b/packobf/src/resource_pack/files/unknowntexture.rs index 79755ab..df87201 100644 --- a/packobf/src/resource_pack/files/unknowntexture.rs +++ b/packobf/src/resource_pack/files/unknowntexture.rs @@ -1,4 +1,3 @@ -use std::num::NonZeroU64; use std::time::Duration; use once_cell::sync::Lazy; use oxipng::{indexset, optimize_from_memory, Deflater, FilterStrategy, StripChunks}; @@ -15,74 +14,6 @@ pub struct UnknownTexture { pub bytes: Vec, } -/// Decodes PNG dimensions and estimates uncompressed IDAT size instantly from raw headers. -fn get_raw_uncompressed_size(bytes: &[u8]) -> Option { - if bytes.len() < 26 { - return None; - } - if bytes[0..8] != [137, 80, 78, 71, 13, 10, 26, 10] { - return None; - } - if &bytes[12..16] != b"IHDR" { - return None; - } - - let width = u32::from_be_bytes(bytes[16..20].try_into().ok()?) as usize; - let height = u32::from_be_bytes(bytes[20..24].try_into().ok()?) as usize; - let bit_depth = bytes[24] as usize; - let color_type = bytes[25]; - - let channels = match color_type { - 0 => 1, // Grayscale - 2 => 3, // RGB - 3 => 1, // Palette (indexed) - 4 => 2, // Grayscale + Alpha - 6 => 4, // RGBA - _ => 4, // Fallback - }; - - let bits_per_pixel = channels * bit_depth; - let row_bytes = (width * bits_per_pixel).div_ceil(8) + 1; - Some(row_bytes * height) -} - -/// Formula generated using a script -fn get_zopfli_options_normal(raw_size: usize) -> oxipng::ZopfliOptions { - let (iterations, without_improvement, splits) = if raw_size < 10_000 { - (10, 6, 1) - } else if raw_size < 100_000 { - (9, 3, 1) - } else if raw_size < 1_000_000 { - (9, 2, 1) - } else { - (9, 1, 2) - }; - - oxipng::ZopfliOptions { - iteration_count: NonZeroU64::new(iterations).unwrap(), - iterations_without_improvement: NonZeroU64::new(without_improvement).unwrap(), - maximum_block_splits: splits, - } -} - -fn get_zopfli_options_best(raw_size: usize) -> oxipng::ZopfliOptions { - let (iterations, without_improvement, splits) = if raw_size < 10_000 { - (10, 6, 1) - } else if raw_size < 100_000 { - (16, 6, 1) - } else if raw_size < 1_000_000 { - (20, 6, 2) - } else { - (22, 7, 2) - }; - - oxipng::ZopfliOptions { - iteration_count: NonZeroU64::new(iterations).unwrap(), - iterations_without_improvement: NonZeroU64::new(without_improvement).unwrap(), - maximum_block_splits: splits, - } -} - impl UnknownTexture { pub fn new(path: impl Into, bytes: Vec) -> Self { Self { @@ -145,16 +76,10 @@ impl UnknownTexture { Compression::Fastest => FASTEST_OPTIONS.clone(), Compression::Fast => FAST_OPTIONS.clone(), Compression::Normal => { - let mut opts = NORMAL_OPTIONS.clone(); - let raw_size = get_raw_uncompressed_size(bytes).unwrap_or(bytes.len()); - opts.deflater = Deflater::Zopfli(get_zopfli_options_normal(raw_size)); - opts + NORMAL_OPTIONS.clone() } Compression::Best => { - let mut opts = BEST_OPTIONS.clone(); - let raw_size = get_raw_uncompressed_size(bytes).unwrap_or(bytes.len()); - opts.deflater = Deflater::Zopfli(get_zopfli_options_best(raw_size)); - opts + BEST_OPTIONS.clone() } Compression::Ultra => { ULTRA_OPTIONS.clone() diff --git a/packobf/src/shader_minifier/minifier.rs b/packobf/src/shader_minifier/minifier.rs index 06cf928..6eed1f4 100644 --- a/packobf/src/shader_minifier/minifier.rs +++ b/packobf/src/shader_minifier/minifier.rs @@ -238,11 +238,12 @@ impl VisitorMut for Minifier { false }; if !has_forbidden_qualifier { - let name = list.head.name.clone().unwrap().0.to_string(); - - if !name.starts_with("gl_") { - if let Some(short) = self.local_mapping.get(&name) { - list.head.name = Some(IdentifierData::from(short.as_str()).into()); + if let Some(identifier) = list.head.name.clone() { + let name = identifier.0.to_string(); + if !name.starts_with("gl_") { + if let Some(short) = self.local_mapping.get(&name) { + list.head.name = Some(IdentifierData::from(short.as_str()).into()); + } } } From d94324bf4baa736fcb53c13474db51453c4b463d Mon Sep 17 00:00:00 2001 From: misieur Date: Fri, 31 Jul 2026 11:13:23 +0200 Subject: [PATCH 05/20] Update .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 8d73cb7..e1c0e17 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ target # keep your zip files! **/*.zip + +packobf_gui/.qmlls.ini From deaecb65839b68710e4868e52ae9db53c20789e1 Mon Sep 17 00:00:00 2001 From: misieur Date: Fri, 31 Jul 2026 21:57:22 +0200 Subject: [PATCH 06/20] Rewrite IDAT with Zopfli for PNG files when using Normal/Best presets --- Cargo.lock | 703 ++++++++---------- packobf/Cargo.toml | 5 +- packobf/src/cache.rs | 28 +- packobf/src/lib.rs | 2 +- packobf/src/optimized_zip_writer.rs | 37 +- packobf/src/options.rs | 90 ++- packobf/src/png/crc.rs | 4 +- packobf/src/png/mod.rs | 3 +- packobf/src/png/recoverer.rs | 2 +- packobf/src/png/zopfli_png_idat_rewriter.rs | 204 +++++ packobf/src/renamer.rs | 10 +- packobf/src/resource_pack/files/sound.rs | 2 +- .../src/resource_pack/files/unknowntexture.rs | 104 ++- packobf/src/shader_minifier/minifier.rs | 2 +- packobf/src/usage_checker.rs | 2 +- 15 files changed, 654 insertions(+), 544 deletions(-) create mode 100644 packobf/src/png/zopfli_png_idat_rewriter.rs diff --git a/Cargo.lock b/Cargo.lock index e5134ca..2928743 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,9 +10,9 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aes" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138" +checksum = "f8eb277bec05f56a0e0591f155a484cbd0f4f07ff2905051a48c72f004f7ed58" dependencies = [ "cipher", "cpubits", @@ -113,9 +113,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arbitrary" @@ -145,9 +145,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" dependencies = [ "rustversion", ] @@ -160,14 +160,14 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "as-slice" @@ -208,7 +208,7 @@ dependencies = [ "num-traits", "pastey", "rayon", - "thiserror 2.0.18", + "thiserror 2.0.19", "v_frame", "y4m", ] @@ -259,9 +259,9 @@ checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "bitstream-io" @@ -274,9 +274,9 @@ dependencies = [ [[package]] name = "bitvec" -version = "1.0.1" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837" dependencies = [ "funty", "radium", @@ -295,9 +295,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", "zeroize", @@ -305,9 +305,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" +checksum = "a88b7ea17d208c4193f2c1e6de3c35fe71f98c96982d5ced308bdcc749ff6e1f" dependencies = [ "bytes", "cfg_aliases", @@ -327,9 +327,9 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" [[package]] name = "byteorder" @@ -345,9 +345,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "bzip2" @@ -360,9 +360,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.63" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" dependencies = [ "find-msvc-tools", "jobserver", @@ -378,15 +378,15 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "js-sys", @@ -416,9 +416,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "301b56658598e48f3648647ac6fc887be7e7108eddfa4e9b63fcf3ec58c0cadf" dependencies = [ "clap_builder", "clap_derive", @@ -426,9 +426,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "94a65403d1a1bd28f7dc68eb8506e8874808ee5eecb59298de588e2e1407a078" dependencies = [ "anstream", "anstyle", @@ -439,14 +439,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.1" +version = "4.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -515,9 +515,9 @@ dependencies = [ [[package]] name = "console" -version = "0.16.3" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87" +checksum = "4fe5f465a4f6fee88fad41b85d990f84c835335e85b5d9e6e63e0d06d28cba7c" dependencies = [ "encode_unicode", "libc", @@ -596,9 +596,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -606,18 +606,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] name = "crunchy" @@ -655,24 +655,24 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.194" +version = "1.0.198" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747d8437319e3a2f43d93b341c137927ca70c0f5dabeea7a005a73665e247c7e" +checksum = "6fe442a792c7c736eea18b32a7f8a3b63cf8aafabda6760042dc2fdeda456291" dependencies = [ "cc", "cxx-build", "cxxbridge-cmd", "cxxbridge-flags", "cxxbridge-macro", - "foldhash 0.2.0", + "foldhash", "link-cplusplus", ] [[package]] name = "cxx-build" -version = "1.0.194" +version = "1.0.198" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0f4697d190a142477b16aef7da8a99bfdc41e7e8b1687583c0d23a79c7afc1e" +checksum = "e3184a94384c663718698311a78a51ac00c484c10b4eeac06fb0a068c5f64fa2" dependencies = [ "cc", "codespan-reporting 0.13.1", @@ -680,20 +680,20 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 3.0.3", ] [[package]] name = "cxx-gen" -version = "0.7.194" +version = "0.7.198" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035b6c61a944483e8a4b2ad4fb8b13830d63491bd004943716ad16d85dcc64bc" +checksum = "fb0f24fd8cafa20f043e24372ca5d8273ab1fdce055ee977b989f82c1bcd89b5" dependencies = [ "codespan-reporting 0.13.1", "indexmap", "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -739,7 +739,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -773,39 +773,39 @@ dependencies = [ "cxx-qt-gen", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "cxxbridge-cmd" -version = "1.0.194" +version = "1.0.198" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0956799fa8678d4c50eed028f2de1c0552ae183c76e976cf7ca8c4e36a7c328" +checksum = "0148d8fd1199329ddf1d157a5e134e51ceff37c6a7ddd38615c399d81cb05d8d" dependencies = [ "clap", "codespan-reporting 0.13.1", "indexmap", "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "cxxbridge-flags" -version = "1.0.194" +version = "1.0.198" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23384a836ab4f0ad98ace7e3955ad2de39de42378ab487dc28d3990392cb283a" +checksum = "52850339faed2eaadd24e286dc1d8268cc6f8a7bd9524d713adc9099566b4c89" [[package]] name = "cxxbridge-macro" -version = "1.0.194" +version = "1.0.198" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6acc6b5822b9526adfb4fc377b67128fdd60aac757cc4a741a6278603f763cf" +checksum = "2c77c856545d886c9bd5215409ebb63b925e262135248b50c79e5a5f194ee47c" dependencies = [ "indexmap", "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -829,7 +829,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.119", ] [[package]] @@ -840,7 +840,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -869,9 +869,6 @@ name = "deranged" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" -dependencies = [ - "powerfmt", -] [[package]] name = "derive_more" @@ -892,7 +889,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 2.0.119", "unicode-xid", ] @@ -912,7 +909,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "block-buffer 0.12.0", + "block-buffer 0.12.1", "const-oid", "crypto-common 0.2.2", "ctutils", @@ -931,20 +928,20 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "either" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" [[package]] name = "ena" @@ -963,18 +960,19 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "env_filter" -version = "1.0.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" +checksum = "900d271a03799a1ee8d1ca9b19893b48ca674a9284fefcfb85f05e74ed314217" dependencies = [ "log", + "regex", ] [[package]] name = "env_logger" -version = "0.11.10" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" +checksum = "de671bd27a75a797dc9ae289ba1e77276e75e2026408aab65185384e2d5cd3f6" dependencies = [ "anstream", "anstyle", @@ -999,7 +997,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1026,14 +1024,16 @@ checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "exr" -version = "1.74.0" +version = "1.74.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" +checksum = "711fe42c9964295e01ee3fba3f9fe0e1d24b98886950d68efe81b1c76e21adf3" dependencies = [ "bit_field", "half", "lebe", "miniz_oxide", + "num-complex", + "pulp", "rayon-core", "smallvec", "zune-inflate", @@ -1041,9 +1041,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "fax" @@ -1089,12 +1089,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foldhash" version = "0.2.0" @@ -1118,21 +1112,21 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" dependencies = [ "futures-core", "futures-task", @@ -1185,16 +1179,14 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi 6.0.0", - "wasip2", - "wasip3", "wasm-bindgen", ] @@ -1210,9 +1202,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "glsl-lang" @@ -1225,7 +1217,7 @@ dependencies = [ "lalrpop-util", "lang-util", "once_cell", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -1237,7 +1229,7 @@ dependencies = [ "glsl-lang-types", "lalrpop-util", "lang-util", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -1250,7 +1242,7 @@ dependencies = [ "lang-util", "string_cache", "string_cache_codegen", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -1259,7 +1251,7 @@ version = "0.8.1" source = "git+https://github.com/LostEngine/patched-libraries?branch=alixinne%2Fglsl-lang#71c58558796b74b62c3997924aba712c7dfeb5c8" dependencies = [ "lang-util", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -1279,15 +1271,6 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash 0.1.5", -] - [[package]] name = "hashbrown" version = "0.17.1" @@ -1317,9 +1300,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" dependencies = [ "bytes", "itoa", @@ -1327,9 +1310,9 @@ dependencies = [ [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" dependencies = [ "typenum", ] @@ -1440,12 +1423,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -1521,9 +1498,9 @@ dependencies = [ [[package]] name = "imgref" -version = "1.12.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2" +checksum = "89194689a993ab15268672e99e7b0e19da2da3268ac682e8f02d29d4d1434cd7" [[package]] name = "indexmap" @@ -1534,15 +1511,13 @@ dependencies = [ "equivalent", "hashbrown 0.17.1", "rayon", - "serde", - "serde_core", ] [[package]] name = "indicatif" -version = "0.18.4" +version = "0.18.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25470f23803092da7d239834776d653104d551bc4d7eacaf31e6837854b8e9eb" +checksum = "9433806cd6b4ec1aba79c021c7e4c58fb4c3b9977c085062e611ac929998fb0c" dependencies = [ "console", "portable-atomic", @@ -1577,7 +1552,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1613,7 +1588,7 @@ dependencies = [ "jni-sys", "log", "simd_cesu8", - "thiserror 2.0.18", + "thiserror 2.0.19", "walkdir", "windows-link", ] @@ -1628,7 +1603,7 @@ dependencies = [ "quote", "rustc_version", "simd_cesu8", - "syn", + "syn 2.0.119", ] [[package]] @@ -1647,28 +1622,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.99" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -1736,15 +1710,9 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "lebe" version = "0.5.3" @@ -1759,9 +1727,9 @@ checksum = "34b357333733e8260735ba5894eb928c02ecc69c78715f01a8019e7fa7f2db4c" [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libdeflate-sys" @@ -1783,14 +1751,20 @@ dependencies = [ [[package]] name = "libfuzzer-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" +checksum = "a9fd2f41a1cba099f79a0b6b6c35656cf7c03351a7bae8ff0f28f25270f929d2" dependencies = [ "arbitrary", "cc", ] +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "line-span" version = "0.1.5" @@ -1829,9 +1803,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.30" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "loop9" @@ -1844,9 +1818,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.16.3" +version = "0.16.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9ceaec84b54518262de7cf06b8b43e83c808349960f1610b21b0bfc9640f20" +checksum = "ca93e534d1142d1d0dcca6d25fe302508a5dfb40b302802904577725ea0b695b" dependencies = [ "sha2", ] @@ -1863,9 +1837,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "miniz_oxide" @@ -1879,9 +1853,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "wasi", @@ -1930,14 +1904,24 @@ checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" dependencies = [ "num-integer", "num-traits", ] +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "bytemuck", + "num-traits", +] + [[package]] name = "num-conv" version = "0.2.2" @@ -1952,7 +1936,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2092,7 +2076,7 @@ dependencies = [ "ouroboros", "rand_xoshiro", "slice-group-by", - "thiserror 2.0.18", + "thiserror 2.0.19", "tinyvec", "vorbis_bitpack", ] @@ -2118,7 +2102,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2150,6 +2134,7 @@ dependencies = [ "clap", "crc32fast", "dashmap", + "flate2", "glsl-lang", "image 0.25.10", "libdeflater", @@ -2291,7 +2276,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared 0.11.3", - "rand 0.8.6", + "rand 0.8.7", ] [[package]] @@ -2314,7 +2299,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2368,9 +2353,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" [[package]] name = "potential_utf" @@ -2408,21 +2393,11 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -2435,7 +2410,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "version_check", "yansi", ] @@ -2456,14 +2431,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4488a4a36b9a4ba6b9334a32a39971f77c1436ec82c38707bce707699cc3bbcb" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] +[[package]] +name = "pulp" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046aa45b989642ec2e4717c8e72d677b13edd831a4d3b6cf37d9a3e54912496a" +dependencies = [ + "bytemuck", + "cfg-if", + "libm", + "num-complex", + "paste", + "pulp-wasm-simd-flag", + "raw-cpuid", + "reborrow", + "version_check", +] + +[[package]] +name = "pulp-wasm-simd-flag" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8f70e07b9c3962945a74e59ca1c511bba65b6419468acc217c457d93f3c740" + [[package]] name = "pxfm" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" [[package]] name = "qoi" @@ -2495,9 +2493,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -2522,18 +2520,18 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" dependencies = [ "rand_core 0.6.4", ] [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha", "rand_core 0.9.5", @@ -2600,10 +2598,10 @@ dependencies = [ "num-traits", "paste", "profiling", - "rand 0.9.4", + "rand 0.9.5", "rand_chacha", "simd_helpers", - "thiserror 2.0.18", + "thiserror 2.0.19", "v_frame", "wasm-bindgen", ] @@ -2623,6 +2621,15 @@ dependencies = [ "rgb", ] +[[package]] +name = "raw-cpuid" +version = "11.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" +dependencies = [ + "bitflags", +] + [[package]] name = "rayon" version = "1.12.0" @@ -2643,6 +2650,12 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "reborrow" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" + [[package]] name = "redox_syscall" version = "0.5.18" @@ -2654,9 +2667,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -2666,9 +2679,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" dependencies = [ "aho-corasick", "memchr", @@ -2677,9 +2690,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rgb" @@ -2701,9 +2714,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -2729,9 +2742,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "same-file" @@ -2762,9 +2775,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -2772,29 +2785,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -2853,15 +2866,15 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" [[package]] name = "simd_cesu8" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" dependencies = [ "rustc_version", "simdutf8", @@ -2902,9 +2915,9 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "smol_str" @@ -2918,9 +2931,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -2994,14 +3007,25 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", @@ -3016,7 +3040,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3070,11 +3094,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" dependencies = [ - "thiserror-impl 2.0.18", + "thiserror-impl 2.0.19", ] [[package]] @@ -3085,18 +3109,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -3115,9 +3139,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.47" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "3e1d5e639ff6bab73cb6885cc7e7b1de96c3f32c68ec55f3952614bec1092244" dependencies = [ "deranged", "js-sys", @@ -3129,9 +3153,9 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "tinystr" @@ -3145,9 +3169,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" dependencies = [ "tinyvec_macros", ] @@ -3160,9 +3184,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", @@ -3177,13 +3201,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -3206,9 +3230,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" @@ -3260,9 +3284,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.2" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" dependencies = [ "js-sys", "wasm-bindgen", @@ -3309,27 +3333,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -3340,9 +3355,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3350,60 +3365,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.119", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "web-time" version = "1.1.0" @@ -3450,7 +3431,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3461,7 +3442,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3571,100 +3552,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck 0.5.0", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck 0.5.0", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "writeable" version = "0.6.3" @@ -3728,28 +3621,28 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3769,15 +3662,15 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zerotrie" @@ -3809,7 +3702,7 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3824,7 +3717,7 @@ dependencies = [ "crc32fast", "deflate64", "flate2", - "getrandom 0.4.2", + "getrandom 0.4.3", "hmac", "indexmap", "lzma-rust2", @@ -3841,15 +3734,15 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.3" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" +checksum = "b142a20ec14a91d5bc708c1dc21b080c550113d8aa77afa29635673a65dd02c5" [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zopfli" diff --git a/packobf/Cargo.toml b/packobf/Cargo.toml index 37f9378..8e3b8e1 100644 --- a/packobf/Cargo.toml +++ b/packobf/Cargo.toml @@ -9,9 +9,9 @@ zip = "8.5.1" serde_json = "1.0.149" serde = { version = "1.0.228", features = ["derive"] } once_cell = "1.21.4" -oxipng = { version = "10.1.0", features = ["zopfli"] } +oxipng = { version = "10.1.1", features = ["zopfli"] } dashmap = { version = "6.1.0", features = ["rayon"] } -tokio = { version = "1.52.1", features = ["full"] } +tokio = { version = "1.53.1", features = ["full"] } glsl-lang = "0.8.1" smol_str = "0.3.6" byteorder = "1.5.0" @@ -29,6 +29,7 @@ clap = { version = "4.6.1", features = ["derive"] } strum = "0.28.0" strum_macros = "0.28.0" arc-swap = "1" +flate2 = { version = "1", default-features = false, features = ["rust_backend"] } [build-dependencies] phf_codegen = "0.13.1" diff --git a/packobf/src/cache.rs b/packobf/src/cache.rs index c9935b1..817b877 100644 --- a/packobf/src/cache.rs +++ b/packobf/src/cache.rs @@ -3,7 +3,7 @@ use sha2::{Digest, Sha256}; use std::fs::File; use std::io; use std::io::{BufReader, BufWriter, Read, Write}; - +use crate::options::Compression; use crate::profile_scope; const MAGIC_NUMBER: [u8; 10] = *b"PACKOBF001"; // Increase version number each time compression is changed (hex number) @@ -13,28 +13,6 @@ pub struct CachedItem { pub data: Vec, } -#[repr(u8)] -#[derive(Debug, Clone, Copy)] -pub enum Compression { - Fastest = 0, - Fast = 1, - Normal = 2, - Best = 3, - Ultra = 4, -} - -impl Compression { - fn from_u8(value: u8) -> Self { - match value { - 0 => Compression::Fastest, - 1 => Compression::Fast, - 2 => Compression::Normal, - 3 => Compression::Best, - _ => Compression::Ultra, - } - } -} - #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct CachedItemKey { hash: [u8; 32], @@ -65,7 +43,7 @@ pub struct Cache { impl Cache { pub fn save_to_file(&self, path: &str) -> io::Result<()> { - profile_scope!("save_to_file::cache"); + profile_scope!(std::any::type_name_of_val(&Cache::save_to_file)); let file = File::create(path)?; let mut writer = BufWriter::new(file); @@ -97,7 +75,7 @@ impl Cache { } pub fn load_from_file(path: &str) -> io::Result { - profile_scope!("load_from_file::cache"); + profile_scope!(std::any::type_name_of_val(&Cache::load_from_file)); let file = File::open(path); if let Err(e) = file { return Err(e) diff --git a/packobf/src/lib.rs b/packobf/src/lib.rs index bf5a45b..88873f9 100644 --- a/packobf/src/lib.rs +++ b/packobf/src/lib.rs @@ -349,7 +349,7 @@ fn collect_files( pack: Arc, thread_pool: &ThreadPool, ) -> Vec<(String, ResourcePackItem)> { - profile_scope!("collect_files"); + profile_scope!(std::any::type_name_of_val(&collect_files)); thread_pool.install(|| { let texture_iter = pack.textures.par_iter().map(|kv| { ( diff --git a/packobf/src/optimized_zip_writer.rs b/packobf/src/optimized_zip_writer.rs index 20369f2..2d8c78b 100644 --- a/packobf/src/optimized_zip_writer.rs +++ b/packobf/src/optimized_zip_writer.rs @@ -51,7 +51,7 @@ impl OptimizedZipWriter { options: &Options, cache: &Option, ) -> io::Result<()> { - profile_scope!("add_file::zip"); + profile_scope!(std::any::type_name_of_val(&OptimizedZipWriter::::add_file)); let mut sha256 = Sha256::new(); sha256.update(data); let hash: [u8; 32] = sha256.finalize().into(); @@ -160,7 +160,7 @@ impl OptimizedZipWriter { cache.add_item_hash( hash, &*out, - crate::cache::Compression::Fastest as u8, + Compression::Fastest as u8, ItemType::Generic, ) } @@ -181,7 +181,7 @@ impl OptimizedZipWriter { cache.add_item_hash( hash, &*out, - crate::cache::Compression::Fast as u8, + Compression::Fast as u8, ItemType::Generic, ) } @@ -211,7 +211,7 @@ impl OptimizedZipWriter { cache.add_item_hash( hash, &*out, - crate::cache::Compression::Ultra as u8, + Compression::Ultra as u8, ItemType::Generic, ) } @@ -238,24 +238,45 @@ impl OptimizedZipWriter { cache.add_item_hash( hash, &*out, - crate::cache::Compression::Best as u8, + Compression::Best as u8, ItemType::Generic, ) } out } + PreCheckResult::LibDeflater => { + let mut compressor = libdeflater::Compressor::new(CompressionLvl::best()); + let mut out = vec![0u8; compressor.deflate_compress_bound(data.len())]; + let size = compressor + .deflate_compress(data, &mut out) + .map_err(|_| Error::other("Compression failed"))?; + out.truncate(size); + let out_size = out.len(); + if out_size > input_size { + out = vec![]; + } + if let Some(cache) = cache { + cache.add_item_hash( + hash, + &*out, + Compression::Fast as u8, + ItemType::Generic, + ) + } + out + }, Skip => { let out = vec![]; if let Some(cache) = cache { cache.add_item_hash( hash, &*out, - crate::cache::Compression::Best as u8, + Compression::Best as u8, ItemType::Generic, ) } out - } + }, }) } @@ -277,7 +298,7 @@ impl OptimizedZipWriter { /// Writes the Central Directory and End of Central Directory (EOCD) records. /// This finalizes the ZIP file, making it valid for CD-parsing tools. pub fn finish(&self) -> io::Result<()> { - profile_scope!("finish::zip"); + profile_scope!(std::any::type_name_of_val(&OptimizedZipWriter::::finish)); let mut inner_guard = self.inner.lock().unwrap_or_else(|e| e.into_inner()); let Inner { ref mut writer, diff --git a/packobf/src/options.rs b/packobf/src/options.rs index 6d1cd2b..afa7870 100644 --- a/packobf/src/options.rs +++ b/packobf/src/options.rs @@ -84,7 +84,7 @@ impl Options { } #[repr(u8)] -#[derive(ValueEnum, Clone, Debug)] +#[derive(ValueEnum, Clone, Debug, Copy)] pub enum Compression { Fastest = 0, Fast = 1, @@ -93,6 +93,18 @@ pub enum Compression { Ultra = 4, } +impl Compression { + pub fn from_u8(value: u8) -> Self { + match value { + 0 => Compression::Fastest, + 1 => Compression::Fast, + 2 => Compression::Normal, + 3 => Compression::Best, + _ => Compression::Ultra, + } + } +} + #[repr(u8)] #[derive(ValueEnum, Clone, Debug)] #[derive(PartialEq)] @@ -156,6 +168,8 @@ pub enum PreCheckResult { Skip, /// Use Zopfli with dynamically assigned options CompressWithZopfli(zopfli::Options), + /// Use Libdeflater Level 12 + LibDeflater, } /// Pre-checks data compressibility using libdeflater (Level 9) @@ -166,24 +180,7 @@ pub fn analyze_and_get_zopfli_config_normal(data: &[u8]) -> PreCheckResult { Err(value) => return value, }; - // Less than 1% savings - if savings_ratio < 0.01 { - return PreCheckResult::Skip; // Don't waste CPU time on Zopfli - } - - // 1% to 8% savings - if savings_ratio < 0.08 { - return PreCheckResult::CompressWithZopfli(FASTEST_ZOPFLI_OPTIONS.to_owned()); - } - - // > 8% savings - PreCheckResult::CompressWithZopfli(match original_size { - 0..=51_200 => SLOW_ZOPFLI_OPTIONS.to_owned(), - - 51_201..=512_000 => NORMAL_ZOPFLI_OPTIONS.to_owned(), - - _ => FAST_ZOPFLI_OPTIONS.to_owned(), - }) + get_normal_precheck_result(savings_ratio, original_size) } /// Pre-checks data compressibility using libdeflater (Level 9) @@ -194,6 +191,31 @@ pub fn analyze_and_get_zopfli_config_best(data: &[u8]) -> PreCheckResult { Err(value) => return value, }; + get_best_pre_check_result(savings_ratio, original_size) +} + +fn analyze(data: &[u8]) -> Result<(usize, f64), PreCheckResult> { + let original_size = data.len(); + if original_size == 0 { + return Err(PreCheckResult::Skip); + } + + #[allow(clippy::unwrap_used)] + let mut compressor = Compressor::new(CompressionLvl::new(9).unwrap()); + let max_buf_len = compressor.deflate_compress_bound(original_size); + let mut compressed_buf = vec![0u8; max_buf_len]; + + let fast_compressed_size = match compressor.deflate_compress(data, &mut compressed_buf) { + Ok(sz) => sz, + Err(_) => return Err(PreCheckResult::Skip), + }; + + let bytes_saved = original_size.saturating_sub(fast_compressed_size); + let savings_ratio = bytes_saved as f64 / original_size as f64; + Ok((original_size, savings_ratio)) +} + +pub fn get_best_pre_check_result(savings_ratio: f64, original_size: usize) -> PreCheckResult { // Less than 1% savings if savings_ratio < 0.01 { return PreCheckResult::Skip; // Don't waste CPU time on Zopfli @@ -214,23 +236,23 @@ pub fn analyze_and_get_zopfli_config_best(data: &[u8]) -> PreCheckResult { }) } -fn analyze(data: &[u8]) -> Result<(usize, f64), PreCheckResult> { - let original_size = data.len(); - if original_size == 0 { - return Err(PreCheckResult::Skip); +pub fn get_normal_precheck_result(savings_ratio: f64, original_size: usize) -> PreCheckResult { + // Less than 1% savings + if savings_ratio < 0.01 { + return PreCheckResult::Skip; // Don't waste CPU time on Zopfli } - #[allow(clippy::unwrap_used)] - let mut compressor = Compressor::new(CompressionLvl::new(9).unwrap()); - let max_buf_len = compressor.deflate_compress_bound(original_size); - let mut compressed_buf = vec![0u8; max_buf_len]; + // 1% to 8% savings + if savings_ratio < 0.08 { + return PreCheckResult::LibDeflater; + } - let fast_compressed_size = match compressor.deflate_compress(data, &mut compressed_buf) { - Ok(sz) => sz, - Err(_) => return Err(PreCheckResult::Skip), - }; + // > 8% savings + PreCheckResult::CompressWithZopfli(match original_size { + 0..=51_200 => NORMAL_ZOPFLI_OPTIONS.to_owned(), - let bytes_saved = original_size.saturating_sub(fast_compressed_size); - let savings_ratio = bytes_saved as f64 / original_size as f64; - Ok((original_size, savings_ratio)) + 51_201..=512_000 => FAST_ZOPFLI_OPTIONS.to_owned(), + + _ => FASTEST_ZOPFLI_OPTIONS.to_owned(), + }) } diff --git a/packobf/src/png/crc.rs b/packobf/src/png/crc.rs index 2c04133..6bfae55 100644 --- a/packobf/src/png/crc.rs +++ b/packobf/src/png/crc.rs @@ -1,9 +1,11 @@ use crate::profile_scope; +/// [PNG Specification, version 3.0](https://www.w3.org/TR/png-3/) + /// This function modifies the PNG CRCs to make them invalid and removes the IEND CRC. /// Doing this will break most PNG file readers, but Minecraft doesn't care about CRC. pub fn modify_png_crcs(input: &[u8]) -> Result, &'static str> { - profile_scope!("modify_png_crcs"); + profile_scope!(std::any::type_name_of_val(&modify_png_crcs)); const PNG_SIGNATURE: [u8; 8] = [137, 80, 78, 71, 13, 10, 26, 10]; if input.len() < 8 || input[0..8] != PNG_SIGNATURE { diff --git a/packobf/src/png/mod.rs b/packobf/src/png/mod.rs index 0d338f6..3f971ec 100644 --- a/packobf/src/png/mod.rs +++ b/packobf/src/png/mod.rs @@ -1,2 +1,3 @@ pub mod crc; -pub mod recoverer; \ No newline at end of file +pub mod recoverer; +pub mod zopfli_png_idat_rewriter; \ No newline at end of file diff --git a/packobf/src/png/recoverer.rs b/packobf/src/png/recoverer.rs index ccc7506..9df9cfa 100644 --- a/packobf/src/png/recoverer.rs +++ b/packobf/src/png/recoverer.rs @@ -4,7 +4,7 @@ use image::{ExtendedColorType, ImageEncoder}; use crate::profile_scope; pub fn recover_png(input: &[u8]) -> Result, String> { - profile_scope!("recover_png"); + profile_scope!(std::any::type_name_of_val(&recover_png)); unsafe { let mut width: i32 = 0; let mut height: i32 = 0; diff --git a/packobf/src/png/zopfli_png_idat_rewriter.rs b/packobf/src/png/zopfli_png_idat_rewriter.rs new file mode 100644 index 0000000..7719e9e --- /dev/null +++ b/packobf/src/png/zopfli_png_idat_rewriter.rs @@ -0,0 +1,204 @@ +use crate::options::{Compression, PreCheckResult}; +use crate::{options, profile_scope, LogLevel, LogMessage}; +use byteorder::{BigEndian, WriteBytesExt}; +use libdeflater::{crc32, CompressionLvl}; +use std::io::{Error, Write, Read}; +use tokio::sync::mpsc::UnboundedSender; +use zopfli::{Options, ZlibEncoder}; +use flate2::read::DeflateDecoder; + +/// [PNG Specification, version 3.0](https://www.w3.org/TR/png-3/) + +/// Re-compresses deflate idat using zopfli with dynamic options +/// See [options::analyze](crate::options::analyze). +/// The input is only meant to be generated by oxipng as it does +/// not fully support the format but what oxipng generates. +pub fn rewrite_idat_with_zopfli( + input: &[u8], + compression: &Compression, + logger: &UnboundedSender, +) -> Vec { + profile_scope!(std::any::type_name_of_val(&rewrite_idat_with_zopfli)); + const PNG_SIGNATURE: [u8; 8] = [137, 80, 78, 71, 13, 10, 26, 10]; + + if input.len() < 8 || input[0..8] != PNG_SIGNATURE { + return input.into(); + } + + let mut output = Vec::with_capacity(input.len()); + output.extend_from_slice(&PNG_SIGNATURE); + + let mut offset = 8; + + while offset < input.len() { + if offset + 8 > input.len() { + return input.into(); + } + + let length = u32::from_be_bytes([ + input[offset], + input[offset + 1], + input[offset + 2], + input[offset + 3], + ]) as usize; + + let chunk_type = &input[offset + 4..offset + 8]; + + let chunk_end = offset + 8 + length; + let crc_end = chunk_end + 4; + if crc_end > input.len() { + return input.into(); + } + + if chunk_type == b"IDAT" { + let chunk_start = offset + 8; + // See [zlib data format](https://en.wikipedia.org/wiki/Zlib#Data_format). + // DICTID is not supported here, but it should never be used. + let data = &input[ + chunk_start + 2 // removes the zlib header + .. + chunk_end - 4 // removes the zlib checksum + ]; + let mut decoder = DeflateDecoder::new(data); + + let mut original_data = Vec::new(); + match decoder.read_to_end(&mut original_data) { + Ok(original_size) => { + let data_size = data.len(); + let bytes_saved = original_size.saturating_sub(data_size); + let savings_ratio = bytes_saved as f64 / original_size as f64; + + match compression { + Compression::Normal => { + let result = + options::get_normal_precheck_result(savings_ratio, original_size); + compress_data_and_write_idat(input, logger, &mut output, original_data.as_slice(), offset, crc_end, data_size, result); + } + Compression::Best => { + let result = + options::get_best_pre_check_result(savings_ratio, original_size); + compress_data_and_write_idat(input, logger, &mut output, original_data.as_slice(), offset, crc_end, data_size, result); + } + compression => { + let _ = logger.send(LogMessage { + level: LogLevel::Error, + message: format!( + "{} called with {:?}", + std::any::type_name_of_val(&rewrite_idat_with_zopfli), + compression + ), + }); + return input.into(); + } + } + } + Err(e) => { + let _ = logger.send(LogMessage { + level: LogLevel::Error, + message: format!("Failed to decompress PNG IDAT data: {:?}", e), + }); + return input.into(); + } + } + } else { + output.extend_from_slice(&input[offset..crc_end]); + } + + offset = crc_end; + } + + output +} + +fn compress_data_and_write_idat(input: &[u8], logger: &UnboundedSender, mut output: &mut Vec, original_data: &[u8], offset: usize, crc_end: usize, data_size: usize, result: PreCheckResult) { + let out = match result { + PreCheckResult::CompressWithZopfli(options) => { + match compress(original_data, options) { + Ok(out) => out, + Err(e) => { + let _ = logger.send(LogMessage { + level: LogLevel::Error, + message: format!( + "Failed to compress PNG data with zopfli: {:?}", + e + ), + }); + output.extend_from_slice(&input[offset..crc_end]); + return; + } + } + }, + PreCheckResult::LibDeflater => { + let mut compressor = libdeflater::Compressor::new(CompressionLvl::best()); + let mut out = vec![0u8; compressor.zlib_compress_bound(data_size)]; + let size = match compressor + .zlib_compress(original_data, &mut out) { + Ok(out) => out, + Err(e) => { + let _ = logger.send(LogMessage { + level: LogLevel::Error, + message: format!( + "Failed to compress PNG data with libdeflate: {:?}", + e + ), + }); + output.extend_from_slice(&input[offset..crc_end]); + return; + } + }; + out.truncate(size); + out + } + PreCheckResult::Skip => { + output.extend_from_slice(&input[offset..crc_end]); + return; + }, + }; + let out_size = out.len(); + if out_size > data_size + 6 + // Add 6 bytes for header and checksum + { + output.extend_from_slice(&input[offset..crc_end]); + return; + } + match write_idat(&mut output, out_size, out) { + Ok(_) => {} + Err(e) => { + let _ = logger.send(LogMessage { + level: LogLevel::Error, + message: format!( + "Failed to write PNG IDAT: {:?}", + e + ), + }); + output.extend_from_slice(&input[offset..crc_end]); + } + } +} + +fn write_idat(output: &mut Vec, out_size: usize, data: Vec) -> std::io::Result<()> { + output.write_u32::(out_size as u32)?; + output.extend_from_slice(b"IDAT"); + output.extend_from_slice(data.as_slice()); + output.write_u32::(crc32(&output[output.len() - out_size - b"IDAT".len()..]))?; + Ok(()) +} + +fn compress(original_data: &[u8], options: Options) -> Result, Error> { + let mut encoder = ZlibEncoder::new(options, zopfli::BlockType::Dynamic, Vec::new())?; + encoder.write_all(original_data)?; + let out = encoder.finish()?; + Ok(out) +} + +#[macro_export] +macro_rules! compress { + ($options:expr) => {{}}; +} + +#[macro_export] +macro_rules! stop { + ($output:expr, $input:expr, $offset:expr) => {{ + input + }}; +} diff --git a/packobf/src/renamer.rs b/packobf/src/renamer.rs index 6c2f27d..a2f2c10 100644 --- a/packobf/src/renamer.rs +++ b/packobf/src/renamer.rs @@ -18,7 +18,7 @@ pub fn rename_files( pack: &ResourcePack, mapping: &mut Mapping, ) { - profile_scope!("rename_files"); + profile_scope!(std::any::type_name_of_val(&rename_files)); let id_counter = &mapping::get_id_usage_counter(); rayon::scope(|s| { s.spawn(|_| rename_overlays(pack, &mut mapping.overlay_mappings)); @@ -29,7 +29,7 @@ pub fn rename_files( } fn rename_overlays(pack: &ResourcePack, mapping: &mut HashMap) { - profile_scope!("rename_files::overlays"); + profile_scope!(std::any::type_name_of_val(&rename_overlays)); let mut count = 0; if let Some(mut mcmeta) = pack.json_files.get_mut("pack.mcmeta") { if let Some(entries) = mcmeta @@ -58,7 +58,7 @@ fn rename_sounds( mapping: &mut HashMap, id_counter: &mapping::IdUsageCounter, ) { - profile_scope!("rename_files::sounds"); + profile_scope!(std::any::type_name_of_val(&rename_sounds)); let mut sounds: Vec<(String, Sound)> = pack .sounds .iter() @@ -106,7 +106,7 @@ fn rename_textures( mapping: &mut HashMap, id_counter: &mapping::IdUsageCounter, ) { - profile_scope!("rename_files::textures"); + profile_scope!(std::any::type_name_of_val(&rename_textures)); let mut textures: Vec<(String, Texture)> = pack .textures .iter() @@ -288,7 +288,7 @@ fn rename_models( mapping: &mut HashMap, id_counter: &mapping::IdUsageCounter, ) { - profile_scope!("rename_files::models"); + profile_scope!(std::any::type_name_of_val(&rename_models)); let mut models: Vec<(String, Model)> = pack .models .iter() diff --git a/packobf/src/resource_pack/files/sound.rs b/packobf/src/resource_pack/files/sound.rs index cbc03cd..104b999 100644 --- a/packobf/src/resource_pack/files/sound.rs +++ b/packobf/src/resource_pack/files/sound.rs @@ -34,7 +34,7 @@ impl Sound { logger: &tokio::sync::mpsc::UnboundedSender, cache: &Option, ) { - profile_scope!("optimize::sound"); + profile_scope!(std::any::type_name_of_val(&Sound::optimize)); if let Some(cache) = cache { let mut sha256 = Sha256::new(); sha256.update(self.bytes.as_slice()); diff --git a/packobf/src/resource_pack/files/unknowntexture.rs b/packobf/src/resource_pack/files/unknowntexture.rs index df87201..9dacacd 100644 --- a/packobf/src/resource_pack/files/unknowntexture.rs +++ b/packobf/src/resource_pack/files/unknowntexture.rs @@ -1,12 +1,15 @@ -use std::time::Duration; -use once_cell::sync::Lazy; -use oxipng::{indexset, optimize_from_memory, Deflater, FilterStrategy, StripChunks}; -use sha2::{Digest, Sha256}; use crate::cache::{Cache, ItemType}; -use crate::LogLevel::{Info, Warning}; -use crate::{options, profile_scope, LogMessage}; -use crate::options::{Compression, Options}; +use crate::options::{Compression, Options, ULTRA_ZOPFLI_OPTIONS}; use crate::png::{crc, recoverer}; +use crate::LogLevel::{Info, Warning}; +use crate::{profile_scope, LogMessage}; +use once_cell::sync::Lazy; +use oxipng::{indexset, optimize_from_memory, Deflater, FilterStrategy, PngError, StripChunks}; +use sha2::{Digest, Sha256}; +use std::borrow::ToOwned; +use std::time::Duration; +use tokio::sync::mpsc::UnboundedSender; +use crate::png::zopfli_png_idat_rewriter::rewrite_idat_with_zopfli; #[derive(Clone, Debug)] pub struct UnknownTexture { @@ -28,7 +31,8 @@ impl UnknownTexture { logger: &tokio::sync::mpsc::UnboundedSender, cache: &Option, ) { - self.bytes = Self::cache_or_optimize(&self.bytes, options, logger, cache, self.path.as_str()); + self.bytes = + Self::cache_or_optimize(&self.bytes, options, logger, cache, self.path.as_str()); if options.corrupt_png_files { match crc::modify_png_crcs(&self.bytes) { Ok(bytes) => { @@ -37,7 +41,11 @@ impl UnknownTexture { Err(e) => { let _ = logger.send(LogMessage { level: Warning, - message: format!("Could not corrupt image '{}'. Error: {}", self.path.as_str(), e), + message: format!( + "Could not corrupt image '{}'. Error: {}", + self.path.as_str(), + e + ), }); } } @@ -47,11 +55,11 @@ impl UnknownTexture { fn cache_or_optimize( bytes: &[u8], options: &Options, - logger: &tokio::sync::mpsc::UnboundedSender, + logger: &UnboundedSender, cache: &Option, path: &str, ) -> Vec { - profile_scope!("cache_or_optimize::texture"); + profile_scope!(std::any::type_name_of_val(&Self::cache_or_optimize)); if let Some(cache) = cache { let mut sha256 = Sha256::new(); sha256.update(bytes); @@ -75,19 +83,19 @@ impl UnknownTexture { let oxipng_options = match options.compression { Compression::Fastest => FASTEST_OPTIONS.clone(), Compression::Fast => FAST_OPTIONS.clone(), - Compression::Normal => { - NORMAL_OPTIONS.clone() - } - Compression::Best => { - BEST_OPTIONS.clone() - } - Compression::Ultra => { - ULTRA_OPTIONS.clone() - } + Compression::Normal => ANALYZE_OPTIONS.clone(), + Compression::Best => ANALYZE_OPTIONS.clone(), + Compression::Ultra => ULTRA_OPTIONS.clone(), }; - match optimize_from_memory(bytes, &oxipng_options) { + match optimize(bytes, &oxipng_options, &options.compression, logger) { Ok(value) => { + match options.compression { + Compression::Normal | Compression::Best => { + + } + _ => {} + } if let Some(cache) = cache { cache.add_item( bytes, @@ -112,7 +120,7 @@ impl UnknownTexture { level: Info, message: format!("Image '{}' was recovered successfully.", path), }); - match optimize_from_memory(value.as_slice(), &oxipng_options) { + match optimize(value.as_slice(), &oxipng_options, &options.compression, logger) { Ok(value) => { if let Some(cache) = cache { cache.add_item( @@ -152,6 +160,17 @@ impl UnknownTexture { } } +fn optimize(data: &[u8], opts: &oxipng::Options, compression: &Compression, logger: &UnboundedSender) -> Result, PngError> { + let mut data = optimize_from_memory(data, &opts)?; + match compression { + Compression::Normal | Compression::Best => { + data = rewrite_idat_with_zopfli(data.as_slice(), compression, logger); + } + _ => {} + } + Ok(data) +} + // static FASTEST_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { fix_errors: true, @@ -219,7 +238,9 @@ static FAST_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { max_decompressed_size: None, }); -static NORMAL_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { +/// Libdeflater (Level 9) is used to determine which zopfli options are going to be used. +/// See [options::analyze](crate::options::analyze). +static ANALYZE_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { fix_errors: true, force: false, filters: indexset! { @@ -246,45 +267,12 @@ static NORMAL_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { idat_recoding: true, scale_16: false, strip: StripChunks::All, - deflater: Deflater::Zopfli(options::NORMAL_ZOPFLI_OPTIONS.to_owned()), + deflater: Deflater::Libdeflater { compression: 9 }, fast_evaluation: false, timeout: Some(Duration::from_secs(3)), max_decompressed_size: None, }); -static BEST_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { - fix_errors: true, - force: false, - filters: indexset! { - FilterStrategy::NONE, - FilterStrategy::SUB, - FilterStrategy::UP, - FilterStrategy::AVERAGE, - FilterStrategy::PAETH, - FilterStrategy::MinSum, - FilterStrategy::Entropy, - FilterStrategy::Bigrams, - FilterStrategy::BigEnt, - FilterStrategy::Brute { - num_lines: 8, - level: 12, - }, - }, - interlace: Some(false), - optimize_alpha: true, - bit_depth_reduction: true, - color_type_reduction: true, - palette_reduction: true, - grayscale_reduction: true, - idat_recoding: true, - scale_16: false, - strip: StripChunks::All, - deflater: Deflater::Zopfli(options::SLOW_ZOPFLI_OPTIONS.to_owned()), - fast_evaluation: false, - timeout: None, - max_decompressed_size: None, -}); - static ULTRA_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { fix_errors: true, force: false, @@ -312,7 +300,7 @@ static ULTRA_OPTIONS: Lazy = Lazy::new(|| oxipng::Options { idat_recoding: true, scale_16: false, strip: StripChunks::All, - deflater: Deflater::Zopfli(options::ULTRA_ZOPFLI_OPTIONS.to_owned()), + deflater: Deflater::Zopfli(ULTRA_ZOPFLI_OPTIONS.to_owned()), fast_evaluation: false, timeout: Some(Duration::from_secs(3)), max_decompressed_size: None, diff --git a/packobf/src/shader_minifier/minifier.rs b/packobf/src/shader_minifier/minifier.rs index 6eed1f4..56ff7bb 100644 --- a/packobf/src/shader_minifier/minifier.rs +++ b/packobf/src/shader_minifier/minifier.rs @@ -55,7 +55,7 @@ impl Minifier { source: &str, rename: bool, ) -> Result> { - profile_scope!("minify_shader"); + profile_scope!(std::any::type_name_of_val(&Minifier::minify)); let mut ast = TranslationUnit::parse(source).map_err(|e| format!("GLSL Parse Error: {}", e))?; diff --git a/packobf/src/usage_checker.rs b/packobf/src/usage_checker.rs index 4e51586..e3e5143 100644 --- a/packobf/src/usage_checker.rs +++ b/packobf/src/usage_checker.rs @@ -9,7 +9,7 @@ use std::sync::atomic::AtomicUsize; use tokio::sync::mpsc::UnboundedSender; pub fn check_usage(logger: &UnboundedSender, pack: &ResourcePack) { - profile_scope!("check_usage"); + profile_scope!(std::any::type_name_of_val(&check_usage)); let counter = mapping::get_id_usage_counter(); rayon::scope(|s| { From 7cfef66830ca21241a03d65080a40ac9d1eab47f Mon Sep 17 00:00:00 2001 From: misieur Date: Fri, 31 Jul 2026 22:03:23 +0200 Subject: [PATCH 07/20] [ci skip] Add TODO --- packobf/src/png/zopfli_png_idat_rewriter.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/packobf/src/png/zopfli_png_idat_rewriter.rs b/packobf/src/png/zopfli_png_idat_rewriter.rs index 7719e9e..f63abe9 100644 --- a/packobf/src/png/zopfli_png_idat_rewriter.rs +++ b/packobf/src/png/zopfli_png_idat_rewriter.rs @@ -59,6 +59,7 @@ pub fn rewrite_idat_with_zopfli( .. chunk_end - 4 // removes the zlib checksum ]; + // TODO: Use IHDR to calculate the decompressed size so we don't need flat2 anymore and we can use libdeflate let mut decoder = DeflateDecoder::new(data); let mut original_data = Vec::new(); From 7e6dc90692815e9a5b38ba293c83acda8c829aeb Mon Sep 17 00:00:00 2001 From: misieur Date: Tue, 18 Aug 2026 17:12:52 +0200 Subject: [PATCH 08/20] Add missing Ultra compression level to cxxqt_object.rs --- packobf_gui/src/cxxqt_object.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packobf_gui/src/cxxqt_object.rs b/packobf_gui/src/cxxqt_object.rs index aec1dcd..adb835e 100644 --- a/packobf_gui/src/cxxqt_object.rs +++ b/packobf_gui/src/cxxqt_object.rs @@ -194,7 +194,8 @@ impl qobject::AppController { 0 => Compression::Fastest, 1 => Compression::Fast, 2 => Compression::Normal, - _ => Compression::Best, + 3 => Compression::Best, + _ => Compression::Ultra, }, shader_compression: match self.shader_compression() { 0 => ShaderCompression::None, From e451432ed1d9000e12d32b3261504effac98a5dd Mon Sep 17 00:00:00 2001 From: misieur Date: Tue, 18 Aug 2026 17:28:51 +0200 Subject: [PATCH 09/20] Update Qt to the latest LTS version --- .github/workflows/build.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ad1074a..6e0a0c3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -129,13 +129,13 @@ jobs: - name: Rust Cache uses: Swatinem/rust-cache@v2 with: - prefix-key: "v1-rust-qt-6.8.3-${{ matrix.os }}-${{ matrix.target }}" + prefix-key: "v1-rust-qt-6.8.8-${{ matrix.os }}-${{ matrix.target }}" - name: Install Qt if: matrix.gui != '' uses: jurplel/install-qt-action@v4 with: - version: '6.8.3' + version: '6.8.8' arch: ${{ matrix.qt-arch }} - name: Install cross (linux-x86_64-musl and linux-aarch64) @@ -223,14 +223,14 @@ jobs: chmod +x linuxdeployqt-continuous-x86_64.AppImage # Cleanup Qt installation - rm -rf ../Qt/6.8.3/gcc_64/plugins/printsupport - rm -rf ../Qt/6.8.3/gcc_64/plugins/sqldrivers - rm -rf ../Qt/6.8.3/gcc_64/plugins/help - rm -rf ../Qt/6.8.3/gcc_64/plugins/designer - rm -rf ../Qt/6.8.3/gcc_64/plugins/qmltooling - rm -rf ../Qt/6.8.3/gcc_64/plugins/qmlls - rm -rf ../Qt/6.8.3/gcc_64/plugins/qmllint - rm -rf ../Qt/6.8.3/gcc_64/plugins/platformthemes/libqgtk3.so + rm -rf ../Qt/6.8.8/gcc_64/plugins/printsupport + rm -rf ../Qt/6.8.8/gcc_64/plugins/sqldrivers + rm -rf ../Qt/6.8.8/gcc_64/plugins/help + rm -rf ../Qt/6.8.8/gcc_64/plugins/designer + rm -rf ../Qt/6.8.8/gcc_64/plugins/qmltooling + rm -rf ../Qt/6.8.8/gcc_64/plugins/qmlls + rm -rf ../Qt/6.8.8/gcc_64/plugins/qmllint + rm -rf ../Qt/6.8.8/gcc_64/plugins/platformthemes/libqgtk3.so cat < dist/packobf_gui.desktop [Desktop Entry] From 843ce7e1a2b0df73ebfc920f627e4f78a43032bc Mon Sep 17 00:00:00 2001 From: misieur Date: Tue, 18 Aug 2026 17:37:07 +0200 Subject: [PATCH 10/20] Downgrade Qt to the latest LTS version available --- .github/workflows/build.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6e0a0c3..6901bfb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -129,13 +129,13 @@ jobs: - name: Rust Cache uses: Swatinem/rust-cache@v2 with: - prefix-key: "v1-rust-qt-6.8.8-${{ matrix.os }}-${{ matrix.target }}" + prefix-key: "v1-rust-qt-6.8.4-${{ matrix.os }}-${{ matrix.target }}" - name: Install Qt if: matrix.gui != '' uses: jurplel/install-qt-action@v4 with: - version: '6.8.8' + version: '6.8.4' arch: ${{ matrix.qt-arch }} - name: Install cross (linux-x86_64-musl and linux-aarch64) @@ -223,14 +223,14 @@ jobs: chmod +x linuxdeployqt-continuous-x86_64.AppImage # Cleanup Qt installation - rm -rf ../Qt/6.8.8/gcc_64/plugins/printsupport - rm -rf ../Qt/6.8.8/gcc_64/plugins/sqldrivers - rm -rf ../Qt/6.8.8/gcc_64/plugins/help - rm -rf ../Qt/6.8.8/gcc_64/plugins/designer - rm -rf ../Qt/6.8.8/gcc_64/plugins/qmltooling - rm -rf ../Qt/6.8.8/gcc_64/plugins/qmlls - rm -rf ../Qt/6.8.8/gcc_64/plugins/qmllint - rm -rf ../Qt/6.8.8/gcc_64/plugins/platformthemes/libqgtk3.so + rm -rf ../Qt/6.8.4/gcc_64/plugins/printsupport + rm -rf ../Qt/6.8.4/gcc_64/plugins/sqldrivers + rm -rf ../Qt/6.8.4/gcc_64/plugins/help + rm -rf ../Qt/6.8.4/gcc_64/plugins/designer + rm -rf ../Qt/6.8.4/gcc_64/plugins/qmltooling + rm -rf ../Qt/6.8.4/gcc_64/plugins/qmlls + rm -rf ../Qt/6.8.4/gcc_64/plugins/qmllint + rm -rf ../Qt/6.8.4/gcc_64/plugins/platformthemes/libqgtk3.so cat < dist/packobf_gui.desktop [Desktop Entry] From 01cfc4475521d51b0f6aa486a57a0afbd64f181a Mon Sep 17 00:00:00 2001 From: misieur Date: Tue, 18 Aug 2026 17:39:34 +0200 Subject: [PATCH 11/20] Update Qt to 6.11.2 --- .github/workflows/build.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6901bfb..b48763c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -129,13 +129,13 @@ jobs: - name: Rust Cache uses: Swatinem/rust-cache@v2 with: - prefix-key: "v1-rust-qt-6.8.4-${{ matrix.os }}-${{ matrix.target }}" + prefix-key: "v1-rust-qt-6.11.2-${{ matrix.os }}-${{ matrix.target }}" - name: Install Qt if: matrix.gui != '' uses: jurplel/install-qt-action@v4 with: - version: '6.8.4' + version: '6.11.2' arch: ${{ matrix.qt-arch }} - name: Install cross (linux-x86_64-musl and linux-aarch64) @@ -223,14 +223,14 @@ jobs: chmod +x linuxdeployqt-continuous-x86_64.AppImage # Cleanup Qt installation - rm -rf ../Qt/6.8.4/gcc_64/plugins/printsupport - rm -rf ../Qt/6.8.4/gcc_64/plugins/sqldrivers - rm -rf ../Qt/6.8.4/gcc_64/plugins/help - rm -rf ../Qt/6.8.4/gcc_64/plugins/designer - rm -rf ../Qt/6.8.4/gcc_64/plugins/qmltooling - rm -rf ../Qt/6.8.4/gcc_64/plugins/qmlls - rm -rf ../Qt/6.8.4/gcc_64/plugins/qmllint - rm -rf ../Qt/6.8.4/gcc_64/plugins/platformthemes/libqgtk3.so + rm -rf ../Qt/6.11.2/gcc_64/plugins/printsupport + rm -rf ../Qt/6.11.2/gcc_64/plugins/sqldrivers + rm -rf ../Qt/6.11.2/gcc_64/plugins/help + rm -rf ../Qt/6.11.2/gcc_64/plugins/designer + rm -rf ../Qt/6.11.2/gcc_64/plugins/qmltooling + rm -rf ../Qt/6.11.2/gcc_64/plugins/qmlls + rm -rf ../Qt/6.11.2/gcc_64/plugins/qmllint + rm -rf ../Qt/6.11.2/gcc_64/plugins/platformthemes/libqgtk3.so cat < dist/packobf_gui.desktop [Desktop Entry] From ece180ad85a97e0b56eeef4e4cf111940b46df33 Mon Sep 17 00:00:00 2001 From: misieur Date: Tue, 18 Aug 2026 17:56:38 +0200 Subject: [PATCH 12/20] Different Qt versions for each target --- .github/workflows/build.yml | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b48763c..77455c8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -62,6 +62,7 @@ jobs: gui: packobf_gui java-lib: librust.so qt-arch: linux_gcc_64 + qt-version: 6.8.3 # Linux x64 MUSL - os: ubuntu-latest @@ -71,6 +72,7 @@ jobs: gui: "" java-lib: librust.so qt-arch: "" + qt-version: "" # Linux ARM64 - os: ubuntu-22.04 # using an older version of Ubuntu for linuxdeployqt @@ -80,6 +82,7 @@ jobs: gui: "" java-lib: librust.so qt-arch: "" + qt-version: "" # macOS Intel - os: macos-latest @@ -89,6 +92,7 @@ jobs: gui: packobf_gui java-lib: librust.dylib qt-arch: clang_64 + qt-version: 6.11.2 # macOS Apple Silicon - os: macos-latest @@ -98,6 +102,7 @@ jobs: gui: packobf_gui java-lib: librust.dylib qt-arch: clang_64 + qt-version: 6.11.2 # Windows x64 - os: windows-latest @@ -107,6 +112,7 @@ jobs: gui: packobf_gui.exe java-lib: rust.dll qt-arch: win64_msvc2022_64 + qt-version: 6.8.3 # Windows ARM64 - os: windows-latest @@ -116,6 +122,7 @@ jobs: gui: "" java-lib: rust.dll qt-arch: "" + qt-version: "" steps: - name: Checkout sources uses: actions/checkout@v4 @@ -129,13 +136,13 @@ jobs: - name: Rust Cache uses: Swatinem/rust-cache@v2 with: - prefix-key: "v1-rust-qt-6.11.2-${{ matrix.os }}-${{ matrix.target }}" + prefix-key: "v1-rust-qt-${{ matrix.qt-version }}-${{ matrix.os }}-${{ matrix.target }}" - name: Install Qt if: matrix.gui != '' uses: jurplel/install-qt-action@v4 with: - version: '6.11.2' + version: ${{ matrix.qt-version }} arch: ${{ matrix.qt-arch }} - name: Install cross (linux-x86_64-musl and linux-aarch64) @@ -223,14 +230,14 @@ jobs: chmod +x linuxdeployqt-continuous-x86_64.AppImage # Cleanup Qt installation - rm -rf ../Qt/6.11.2/gcc_64/plugins/printsupport - rm -rf ../Qt/6.11.2/gcc_64/plugins/sqldrivers - rm -rf ../Qt/6.11.2/gcc_64/plugins/help - rm -rf ../Qt/6.11.2/gcc_64/plugins/designer - rm -rf ../Qt/6.11.2/gcc_64/plugins/qmltooling - rm -rf ../Qt/6.11.2/gcc_64/plugins/qmlls - rm -rf ../Qt/6.11.2/gcc_64/plugins/qmllint - rm -rf ../Qt/6.11.2/gcc_64/plugins/platformthemes/libqgtk3.so + rm -rf ../Qt/${{ matrix.qt-version }}/gcc_64/plugins/printsupport + rm -rf ../Qt/${{ matrix.qt-version }}/gcc_64/plugins/sqldrivers + rm -rf ../Qt/${{ matrix.qt-version }}/gcc_64/plugins/help + rm -rf ../Qt/${{ matrix.qt-version }}/gcc_64/plugins/designer + rm -rf ../Qt/${{ matrix.qt-version }}/gcc_64/plugins/qmltooling + rm -rf ../Qt/${{ matrix.qt-version }}/gcc_64/plugins/qmlls + rm -rf ../Qt/${{ matrix.qt-version }}/gcc_64/plugins/qmllint + rm -rf ../Qt/${{ matrix.qt-version }}/gcc_64/plugins/platformthemes/libqgtk3.so cat < dist/packobf_gui.desktop [Desktop Entry] From 9213e10012b4295aaf664b7da7b22bb18d378536 Mon Sep 17 00:00:00 2001 From: misieur Date: Tue, 18 Aug 2026 20:56:47 +0200 Subject: [PATCH 13/20] Clean code --- packobf/src/file_parser.rs | 97 ++++++++----------------- packobf/src/lib.rs | 145 +++++++++++++++++-------------------- packobf/src/options.rs | 72 +++++++----------- 3 files changed, 126 insertions(+), 188 deletions(-) diff --git a/packobf/src/file_parser.rs b/packobf/src/file_parser.rs index 1bfac68..78d92ca 100644 --- a/packobf/src/file_parser.rs +++ b/packobf/src/file_parser.rs @@ -72,14 +72,7 @@ fn parse_resource_pack_file( pack.model(value); } Err(e) => { - let _ = logger.send(LogMessage { - level: Error, - message: format!("Could not parse '{}'. This is most likely not a packobf issue but a json file that is malformed. Treating it as an unknown file. Error: {}", name, e), - }); - pack.unknown_file(ResourcePackFile::new( - name.to_owned(), - content.to_owned(), - )); + handle_parse_error(logger, pack, name, content, e); } } } @@ -94,14 +87,7 @@ fn parse_resource_pack_file( pack.blockstate(value); } Err(e) => { - let _ = logger.send(LogMessage { - level: Error, - message: format!("Could not parse '{}'. This is most likely not a packobf issue but a json file that is malformed. Treating it as an unknown file. Error: {}", name, e), - }); - pack.unknown_file(ResourcePackFile::new( - name.to_owned(), - content.to_owned(), - )); + handle_parse_error(logger, pack, name, content, e); } } } @@ -117,14 +103,7 @@ fn parse_resource_pack_file( pack.item(value); } Err(e) => { - let _ = logger.send(LogMessage { - level: Error, - message: format!("Could not parse '{}'. This is most likely not a packobf issue but a json file that is malformed. Treating it as an unknown file. Error: {}", name, e), - }); - pack.unknown_file(ResourcePackFile::new( - name.to_owned(), - content.to_owned(), - )); + handle_parse_error(logger, pack, name, content, e); } } } @@ -140,14 +119,7 @@ fn parse_resource_pack_file( pack.font(value); } Err(e) => { - let _ = logger.send(LogMessage { - level: Error, - message: format!("Could not parse '{}'. This is most likely not a packobf issue but a json file that is malformed. Treating it as an unknown file. Error: {}", name, e), - }); - pack.unknown_file(ResourcePackFile::new( - name.to_owned(), - content.to_owned(), - )); + handle_parse_error(logger, pack, name, content, e); } } } @@ -164,14 +136,7 @@ fn parse_resource_pack_file( pack.atlas(value); } Err(e) => { - let _ = logger.send(LogMessage { - level: Error, - message: format!("Could not parse '{}'. This is most likely not a packobf issue but a json file that is malformed. Treating it as an unknown file. Error: {}", name, e), - }); - pack.unknown_file(ResourcePackFile::new( - name.to_owned(), - content.to_owned(), - )); + handle_parse_error(logger, pack, name, content, e); } }, Err(_) => { @@ -198,14 +163,7 @@ fn parse_resource_pack_file( pack.sound_definitions(value); } Err(e) => { - let _ = logger.send(LogMessage { - level: Error, - message: format!("Could not parse '{}'. This is most likely not a packobf issue but a json file that is malformed. Treating it as an unknown file. Error: {}", name, e), - }); - pack.unknown_file(ResourcePackFile::new( - name.to_owned(), - content.to_owned(), - )); + handle_parse_error(logger, pack, name, content, e); } } } else { @@ -244,34 +202,43 @@ fn json_file(logger: &UnboundedSender, pack: &Arc, nam pack.json_file(Json::new(name.to_owned(), value)); } Err(e) => { - let _ = logger.send(LogMessage { - level: Error, - message: format!("Could not parse '{}'. This is most likely not a packobf issue but a json file that is malformed. Treating it as an unknown file. Error: {}", name, e), - }); - pack.unknown_file(ResourcePackFile::new( - name.to_owned(), - content.to_owned(), - )); + handle_parse_error(logger, pack, name, content, e); } } } -fn parse_utf8_or_unknown_file( +fn parse_utf8_or_unknown_file<'a>( logger: &UnboundedSender, pack: &Arc, - name: &mut String, - content: &mut Vec, -) -> Option { - Some(match String::from_utf8(content.to_owned()) { - Ok(s) => s, + name: &str, + content: &'a [u8], +) -> Option<&'a str> { + match std::str::from_utf8(content) { + Ok(s) => Some(s), Err(e) => { let _ = logger.send(LogMessage { level: Error, message: format!("Invalid UTF-8 in '{}': {}", name, e), }); - pack.unknown_file(ResourcePackFile::new(name.to_owned(), content.to_owned())); - return None; + None } - }) + } +} + +fn handle_parse_error( + logger: &UnboundedSender, + pack: &Arc, + name: &str, + content: &[u8], + error: impl std::fmt::Display, +) { + let _ = logger.send(LogMessage { + level: Error, + message: format!( + "Could not parse '{}'. This is most likely not a packobf issue but a json file that is malformed. Treating it as an unknown file. Error: {}", + name, error + ), + }); + pack.unknown_file(ResourcePackFile::new(name.to_owned(), content.to_owned())); } diff --git a/packobf/src/lib.rs b/packobf/src/lib.rs index 88873f9..f14f4b9 100644 --- a/packobf/src/lib.rs +++ b/packobf/src/lib.rs @@ -351,89 +351,76 @@ fn collect_files( ) -> Vec<(String, ResourcePackItem)> { profile_scope!(std::any::type_name_of_val(&collect_files)); thread_pool.install(|| { - let texture_iter = pack.textures.par_iter().map(|kv| { + pack.textures.par_iter().map(|kv| { ( kv.key().clone(), ResourcePackItem::Texture(kv.value().clone()), ) - }); - let unknown_texture_iter = pack.unknown_textures.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::UnknownTexture(kv.value().clone()), - ) - }); - let shader_iter = pack.shaders.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::Shader(kv.value().clone()), - ) - }); - let model_iter = pack.models.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::Model(kv.value().clone()), - ) - }); - let json_iter = pack - .json_files - .par_iter() - .map(|kv| (kv.key().clone(), ResourcePackItem::Json(kv.value().clone()))); - let unknown_iter = pack.unknown_files.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::Unknown(kv.value().clone()), - ) - }); - let blockstate_iter = pack.blockstates.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::BlockStateDefinition(kv.value().clone()), - ) - }); - let font_iter = pack.fonts.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::FontDefinition(kv.value().clone()), - ) - }); - let item_iter = pack.items.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::ItemDefinition(kv.value().clone()), - ) - }); - let sound_iter = pack.sounds.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::Sound(kv.value().clone()), - ) - }); - let sound_definitions_iter = pack.sound_definitions.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::SoundDefinitions(kv.value().clone()), - ) - }); - let atlas_iter = pack.atlases.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::Atlas(kv.value().clone()), - ) - }); - - texture_iter - .chain(unknown_texture_iter) - .chain(shader_iter) - .chain(model_iter) - .chain(json_iter) - .chain(unknown_iter) - .chain(blockstate_iter) - .chain(font_iter) - .chain(item_iter) - .chain(sound_iter) - .chain(sound_definitions_iter) - .chain(atlas_iter) + }) + .chain(pack.unknown_textures.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::UnknownTexture(kv.value().clone()), + ) + })) + .chain(pack.shaders.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::Shader(kv.value().clone()), + ) + })) + .chain(pack.models.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::Model(kv.value().clone()), + ) + })) + .chain(pack + .json_files + .par_iter() + .map(|kv| (kv.key().clone(), ResourcePackItem::Json(kv.value().clone())))) + .chain(pack.unknown_files.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::Unknown(kv.value().clone()), + ) + })) + .chain(pack.blockstates.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::BlockStateDefinition(kv.value().clone()), + ) + })) + .chain(pack.fonts.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::FontDefinition(kv.value().clone()), + ) + })) + .chain(pack.items.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::ItemDefinition(kv.value().clone()), + ) + })) + .chain(pack.sounds.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::Sound(kv.value().clone()), + ) + })) + .chain(pack.sound_definitions.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::SoundDefinitions(kv.value().clone()), + ) + })) + .chain(pack.atlases.par_iter().map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::Atlas(kv.value().clone()), + ) + })) .collect() }) } diff --git a/packobf/src/options.rs b/packobf/src/options.rs index afa7870..760089d 100644 --- a/packobf/src/options.rs +++ b/packobf/src/options.rs @@ -100,68 +100,52 @@ impl Compression { 1 => Compression::Fast, 2 => Compression::Normal, 3 => Compression::Best, - _ => Compression::Ultra, + 4 => Compression::Ultra, + _ => Compression::Normal, } } } #[repr(u8)] -#[derive(ValueEnum, Clone, Debug)] -#[derive(PartialEq)] +#[derive(ValueEnum, Clone, Debug, PartialEq)] pub enum ShaderCompression { None = 0, Minify = 1, MinifyAndObfuscate = 2, } -#[allow(clippy::unwrap_used)] -pub static ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { - iteration_count: NonZeroU64::new(25).unwrap(), - iterations_without_improvement: NonZeroU64::new(3).unwrap(), - maximum_block_splits: 15, -}); +pub static ZOPFLI_OPTIONS: Lazy = Lazy::new(|| create_zopfli_options(25, 3, 15)); -#[allow(clippy::unwrap_used)] -pub static FASTEST_ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { - iteration_count: NonZeroU64::new(3).unwrap(), - iterations_without_improvement: NonZeroU64::new(1).unwrap(), - maximum_block_splits: 2, -}); +pub static FASTEST_ZOPFLI_OPTIONS: Lazy = + Lazy::new(|| create_zopfli_options(3, 1, 2)); -#[allow(clippy::unwrap_used)] -pub static FAST_ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { - iteration_count: NonZeroU64::new(5).unwrap(), - iterations_without_improvement: NonZeroU64::new(2).unwrap(), - maximum_block_splits: 5, -}); +pub static FAST_ZOPFLI_OPTIONS: Lazy = + Lazy::new(|| create_zopfli_options(5, 2, 5)); -#[allow(clippy::unwrap_used)] -pub static NORMAL_ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { - iteration_count: NonZeroU64::new(12).unwrap(), - iterations_without_improvement: NonZeroU64::new(2).unwrap(), - maximum_block_splits: 10, -}); +pub static NORMAL_ZOPFLI_OPTIONS: Lazy = + Lazy::new(|| create_zopfli_options(12, 2, 10)); -#[allow(clippy::unwrap_used)] -pub static SLOW_ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { - iteration_count: NonZeroU64::new(20).unwrap(), - iterations_without_improvement: NonZeroU64::new(3).unwrap(), - maximum_block_splits: 15, -}); +pub static SLOW_ZOPFLI_OPTIONS: Lazy = + Lazy::new(|| create_zopfli_options(20, 3, 15)); -#[allow(clippy::unwrap_used)] -pub static SLOWEST_ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { - iteration_count: NonZeroU64::new(25).unwrap(), - iterations_without_improvement: NonZeroU64::new(3).unwrap(), - maximum_block_splits: 15, -}); +pub static SLOWEST_ZOPFLI_OPTIONS: Lazy = + Lazy::new(|| create_zopfli_options(25, 3, 15)); + +pub static ULTRA_ZOPFLI_OPTIONS: Lazy = + Lazy::new(|| create_zopfli_options(40, 40, 25)); #[allow(clippy::unwrap_used)] -pub static ULTRA_ZOPFLI_OPTIONS: Lazy = Lazy::new(|| zopfli::Options { - iteration_count: NonZeroU64::new(40).unwrap(), - iterations_without_improvement: NonZeroU64::new(40).unwrap(), - maximum_block_splits: 25, -}); +fn create_zopfli_options( + iteration_count: u64, + iterations_without_improvement: u64, + maximum_block_splits: u16, +) -> zopfli::Options { + zopfli::Options { + iteration_count: NonZeroU64::new(iteration_count).unwrap(), + iterations_without_improvement: NonZeroU64::new(iterations_without_improvement).unwrap(), + maximum_block_splits, + } +} pub enum PreCheckResult { /// Skip Zopfli entirely From 0ced067d7e60001fe9996dbee7c38970d4b0035a Mon Sep 17 00:00:00 2001 From: misieur Date: Tue, 18 Aug 2026 21:06:16 +0200 Subject: [PATCH 14/20] Clean code --- packobf/build.rs | 2 +- packobf/src/cache.rs | 19 +-- packobf/src/lib.rs | 163 +++++++-------------- packobf/src/minecraft/mod.rs | 2 +- packobf/src/png/mod.rs | 2 +- packobf/src/resource_pack/files/font.rs | 2 +- packobf/src/resource_pack/files/json.rs | 2 +- packobf/src/resource_pack/files/texture.rs | 1 - packobf/src/resource_pack/mapping.rs | 12 +- packobf/src/resource_pack/pack.rs | 2 +- packobf/src/shader_minifier/mod.rs | 2 +- packobf/src/utils.rs | 2 +- 12 files changed, 72 insertions(+), 139 deletions(-) diff --git a/packobf/build.rs b/packobf/build.rs index 2db3ba4..6193b0b 100644 --- a/packobf/build.rs +++ b/packobf/build.rs @@ -68,4 +68,4 @@ fn main() { "{};", builder.build() ).unwrap(); -} \ No newline at end of file +} diff --git a/packobf/src/cache.rs b/packobf/src/cache.rs index 817b877..778c22a 100644 --- a/packobf/src/cache.rs +++ b/packobf/src/cache.rs @@ -1,10 +1,10 @@ +use crate::options::Compression; +use crate::profile_scope; use dashmap::DashMap; use sha2::{Digest, Sha256}; use std::fs::File; use std::io; use std::io::{BufReader, BufWriter, Read, Write}; -use crate::options::Compression; -use crate::profile_scope; const MAGIC_NUMBER: [u8; 10] = *b"PACKOBF001"; // Increase version number each time compression is changed (hex number) @@ -76,11 +76,7 @@ impl Cache { pub fn load_from_file(path: &str) -> io::Result { profile_scope!(std::any::type_name_of_val(&Cache::load_from_file)); - let file = File::open(path); - if let Err(e) = file { - return Err(e) - } - let file = file?; + let file = File::open(path)?; let mut reader = BufReader::new(file); let items = DashMap::new(); @@ -117,17 +113,16 @@ impl Cache { // Read Data Length and then the Data let mut data_len_bytes = [0u8; 8]; reader.read_exact(&mut data_len_bytes)?; - let data_len = u64::from_le_bytes(data_len_bytes) as usize; + let data_len = usize::try_from(u64::from_le_bytes(data_len_bytes)).map_err(|_| { + io::Error::new(io::ErrorKind::InvalidData, "Cache entry is too large") + })?; let mut data = vec![0u8; data_len]; reader.read_exact(&mut data)?; items.insert( CachedItemKey { hash, item_type }, - CachedItem { - compression, - data, - }, + CachedItem { compression, data }, ); } diff --git a/packobf/src/lib.rs b/packobf/src/lib.rs index f14f4b9..0b57e14 100644 --- a/packobf/src/lib.rs +++ b/packobf/src/lib.rs @@ -111,12 +111,7 @@ pub fn process_zip( if options.block_unzipping { // Add this file first to make tools crash before they can read the data - writer.add_file( - "assets\0", - Vec::new().as_slice(), - options, - &None, - )?; + writer.add_file("assets\0", Vec::new().as_slice(), options, &None)?; // `\0` (null) is universally disallowed inside filenames, but Minecraft doesn't care } @@ -149,30 +144,14 @@ pub fn process_zip( }; pool.install(|| { - let total_to_optimize = AtomicUsize::new(0); let to_optimize: Vec<_> = items .par_iter_mut() .filter(|(_, item)| match item { - ResourcePackItem::Texture(_) => { - total_to_optimize.fetch_add(1, Ordering::Relaxed); - true - } - ResourcePackItem::UnknownTexture(_) => { - total_to_optimize.fetch_add(1, Ordering::Relaxed); - true - } + ResourcePackItem::Texture(_) | ResourcePackItem::UnknownTexture(_) => true, ResourcePackItem::Shader(_) => { - if options.shader_compression != ShaderCompression::None { - total_to_optimize.fetch_add(1, Ordering::Relaxed); - true - } else { - false - } - } - ResourcePackItem::Sound(_) => { - total_to_optimize.fetch_add(1, Ordering::Relaxed); - true + options.shader_compression != ShaderCompression::None } + ResourcePackItem::Sound(_) => true, _ => false, }) .collect(); @@ -220,9 +199,8 @@ pub fn process_zip( writer.finish()?; - if let Some(cache) = cache { - #[allow(clippy::expect_used)] // Should never happen - let _ = cache.save_to_file(cache_file.clone().expect("cache_file is None").as_str()); + if let (Some(cache), Some(cache_path)) = (cache, cache_file.as_deref()) { + let _ = cache.save_to_file(cache_path); } let _ = progress.send(Progress::Done); @@ -242,27 +220,17 @@ fn add_item_to_archive( cache: &Option, name: &mut String, item: &mut ResourcePackItem, -) -> Result<(), Box> { +) -> Result<(), Box> { let _ = progress.send(Progress::Building { current: name.to_string(), index: counter.fetch_add(1, Ordering::Relaxed), total, }); if !name.starts_with("assets/") { - let mut parts = name.split('/'); - let overlay = match parts.next() { - Some(overlay) => overlay.to_string(), - None => { - let _ = logger.send(LogMessage { - level: LogLevel::Error, - message: format!("Invalid file path: {}", name), - }); - return Ok(()); + if let Some((overlay, rest)) = name.split_once('/') { + if let Some(value) = mapping::get_mappings().overlay_mappings.get(overlay) { + *name = format!("{value}/{rest}"); } - }; - if let Some(value) = mapping::get_mappings().overlay_mappings.get(&overlay) { - let rest = parts.collect::>().join("/"); - *name = format!("{}/{}", value, rest); } } match item { @@ -274,12 +242,7 @@ fn add_item_to_archive( ), ResourcePackItem::Shader(o) => { o.optimize(options, logger); - writer.add_file( - name.as_str(), - o.content.as_bytes(), - options, - cache, - ) + writer.add_file(name.as_str(), o.content.as_bytes(), options, cache) } ResourcePackItem::Json(o) => writer.add_file( name.as_str(), @@ -287,60 +250,33 @@ fn add_item_to_archive( options, cache, ), - ResourcePackItem::Model(o) => writer.add_file( - name.as_str(), - o.to_string().as_bytes(), - options, - cache, - ), - ResourcePackItem::Unknown(o) => writer.add_file( - name.as_str(), - o.bytes.as_slice(), - options, - cache, - ), - ResourcePackItem::BlockStateDefinition(o) => writer.add_file( - name.as_str(), - o.to_string().as_bytes(), - options, - cache, - ), - ResourcePackItem::FontDefinition(o) => writer.add_file( - name.as_str(), - o.to_string().as_bytes(), - options, - cache, - ), - ResourcePackItem::ItemDefinition(o) => writer.add_file( - name.as_str(), - o.to_string().as_bytes(), - options, - cache, - ), - ResourcePackItem::Sound(o) => writer.add_file( - name.as_str(), - o.bytes.as_slice(), - options, - cache, - ), - ResourcePackItem::SoundDefinitions(o) => writer.add_file( - name.as_str(), - o.to_string().as_bytes(), - options, - cache, - ), - ResourcePackItem::Atlas(o) => writer.add_file( - name.as_str(), - o.to_string().as_bytes(), - options, - cache, - ), - ResourcePackItem::UnknownTexture(o) => writer.add_file( - name.as_str(), - o.bytes.as_slice(), - options, - cache, - ), + ResourcePackItem::Model(o) => { + writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) + } + ResourcePackItem::Unknown(o) => { + writer.add_file(name.as_str(), o.bytes.as_slice(), options, cache) + } + ResourcePackItem::BlockStateDefinition(o) => { + writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) + } + ResourcePackItem::FontDefinition(o) => { + writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) + } + ResourcePackItem::ItemDefinition(o) => { + writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) + } + ResourcePackItem::Sound(o) => { + writer.add_file(name.as_str(), o.bytes.as_slice(), options, cache) + } + ResourcePackItem::SoundDefinitions(o) => { + writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) + } + ResourcePackItem::Atlas(o) => { + writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) + } + ResourcePackItem::UnknownTexture(o) => { + writer.add_file(name.as_str(), o.bytes.as_slice(), options, cache) + } }?; Ok(()) } @@ -351,12 +287,14 @@ fn collect_files( ) -> Vec<(String, ResourcePackItem)> { profile_scope!(std::any::type_name_of_val(&collect_files)); thread_pool.install(|| { - pack.textures.par_iter().map(|kv| { - ( - kv.key().clone(), - ResourcePackItem::Texture(kv.value().clone()), - ) - }) + pack.textures + .par_iter() + .map(|kv| { + ( + kv.key().clone(), + ResourcePackItem::Texture(kv.value().clone()), + ) + }) .chain(pack.unknown_textures.par_iter().map(|kv| { ( kv.key().clone(), @@ -375,10 +313,11 @@ fn collect_files( ResourcePackItem::Model(kv.value().clone()), ) })) - .chain(pack - .json_files - .par_iter() - .map(|kv| (kv.key().clone(), ResourcePackItem::Json(kv.value().clone())))) + .chain( + pack.json_files + .par_iter() + .map(|kv| (kv.key().clone(), ResourcePackItem::Json(kv.value().clone()))), + ) .chain(pack.unknown_files.par_iter().map(|kv| { ( kv.key().clone(), diff --git a/packobf/src/minecraft/mod.rs b/packobf/src/minecraft/mod.rs index 4e019d2..5940114 100644 --- a/packobf/src/minecraft/mod.rs +++ b/packobf/src/minecraft/mod.rs @@ -1 +1 @@ -pub mod builtin_files; \ No newline at end of file +pub mod builtin_files; diff --git a/packobf/src/png/mod.rs b/packobf/src/png/mod.rs index 3f971ec..015732b 100644 --- a/packobf/src/png/mod.rs +++ b/packobf/src/png/mod.rs @@ -1,3 +1,3 @@ pub mod crc; pub mod recoverer; -pub mod zopfli_png_idat_rewriter; \ No newline at end of file +pub mod zopfli_png_idat_rewriter; diff --git a/packobf/src/resource_pack/files/font.rs b/packobf/src/resource_pack/files/font.rs index e45d18b..6533943 100644 --- a/packobf/src/resource_pack/files/font.rs +++ b/packobf/src/resource_pack/files/font.rs @@ -122,4 +122,4 @@ impl Font { let prefix = if self.overlay.is_empty() { "".to_string() } else { format!("{}/", self.overlay) }; format!("{}assets/{}/font/{}.json", prefix, self.identifier.namespace, self.identifier.path) } -} \ No newline at end of file +} diff --git a/packobf/src/resource_pack/files/json.rs b/packobf/src/resource_pack/files/json.rs index 89a4577..528a60b 100644 --- a/packobf/src/resource_pack/files/json.rs +++ b/packobf/src/resource_pack/files/json.rs @@ -11,4 +11,4 @@ impl Json { content, } } -} \ No newline at end of file +} diff --git a/packobf/src/resource_pack/files/texture.rs b/packobf/src/resource_pack/files/texture.rs index cb84e04..e3f9c0d 100644 --- a/packobf/src/resource_pack/files/texture.rs +++ b/packobf/src/resource_pack/files/texture.rs @@ -50,4 +50,3 @@ impl Texture { self.unknown_texture.path.clone() } } - diff --git a/packobf/src/resource_pack/mapping.rs b/packobf/src/resource_pack/mapping.rs index 1f4fe7a..6672dd1 100644 --- a/packobf/src/resource_pack/mapping.rs +++ b/packobf/src/resource_pack/mapping.rs @@ -27,18 +27,18 @@ impl Mapping { pub fn apply_mapping(&self, id: &str, category: IdCategory) -> String { match category { IdCategory::Model => { - if let Some(mapped) = &self.model_mappings.get(id) { - return mapped.to_string(); + if let Some(mapped) = self.model_mappings.get(id) { + return mapped.clone(); } } IdCategory::Texture => { - if let Some(mapped) = &self.texture_mappings.get(id) { - return mapped.to_string(); + if let Some(mapped) = self.texture_mappings.get(id) { + return mapped.clone(); } } IdCategory::Sound => { - if let Some(mapped) = &self.sound_mappings.get(id) { - return mapped.to_string(); + if let Some(mapped) = self.sound_mappings.get(id) { + return mapped.clone(); } } } diff --git a/packobf/src/resource_pack/pack.rs b/packobf/src/resource_pack/pack.rs index 40a9ee2..44c3477 100644 --- a/packobf/src/resource_pack/pack.rs +++ b/packobf/src/resource_pack/pack.rs @@ -76,4 +76,4 @@ impl ResourcePack { pub fn atlas(&self, atlas: Atlas) { self.atlases.insert(atlas.path(), atlas); } -} \ No newline at end of file +} diff --git a/packobf/src/shader_minifier/mod.rs b/packobf/src/shader_minifier/mod.rs index 2a95697..38e4e5f 100644 --- a/packobf/src/shader_minifier/mod.rs +++ b/packobf/src/shader_minifier/mod.rs @@ -1 +1 @@ -pub mod minifier; \ No newline at end of file +pub mod minifier; diff --git a/packobf/src/utils.rs b/packobf/src/utils.rs index b7c1441..7691082 100644 --- a/packobf/src/utils.rs +++ b/packobf/src/utils.rs @@ -21,4 +21,4 @@ pub fn clean_json_numbers(v: &mut Value) { } _ => {} } -} \ No newline at end of file +} From 74cfaaff5a363d6db195a923f37cf0d2bac79709 Mon Sep 17 00:00:00 2001 From: misieur Date: Wed, 19 Aug 2026 14:23:27 +0200 Subject: [PATCH 15/20] Add target_version option to only include files for a specific Minecraft version (currently only overlays) --- java/rust/src/lib.rs | 11 +- packobf/src/file_parser.rs | 16 +- packobf/src/lib.rs | 22 +- packobf/src/options.rs | 21 ++ packobf/src/overlay_remover.rs | 210 ++++++++++++++++++ packobf/src/resource_pack/files/mod.rs | 1 + .../src/resource_pack/files/pack_mcmeta.rs | 80 +++++++ packobf/src/resource_pack/pack.rs | 15 +- 8 files changed, 362 insertions(+), 14 deletions(-) create mode 100644 packobf/src/overlay_remover.rs create mode 100644 packobf/src/resource_pack/files/pack_mcmeta.rs diff --git a/java/rust/src/lib.rs b/java/rust/src/lib.rs index 1abd0df..5412a92 100644 --- a/java/rust/src/lib.rs +++ b/java/rust/src/lib.rs @@ -40,16 +40,12 @@ pub extern "system" fn Java_dev_misieur_packobf_Native_optimizeZip<'caller>( .i()?; Options { - compression: match comp_val { - 0 => Compression::Fastest, - 1 => Compression::Fast, - 2 => Compression::Normal, - _ => Compression::Best, - }, + compression: Compression::from_u8(comp_val.try_into().unwrap_or(0)), shader_compression: match shader_comp_val { 0 => ShaderCompression::None, 1 => ShaderCompression::Minify, - _ => ShaderCompression::MinifyAndObfuscate, + 2 => ShaderCompression::MinifyAndObfuscate, + _ => ShaderCompression::None }, rename_files: env .get_field(&options, jni_str!("renameFiles"), jni_sig!("Z"))? @@ -64,6 +60,7 @@ pub extern "system" fn Java_dev_misieur_packobf_Native_optimizeZip<'caller>( env.get_field(&options, jni_str!("numThreads"), jni_sig!("I"))? .i()? as usize, ), + target_version: None // TODO: add support for this } }; diff --git a/packobf/src/file_parser.rs b/packobf/src/file_parser.rs index 78d92ca..286eace 100644 --- a/packobf/src/file_parser.rs +++ b/packobf/src/file_parser.rs @@ -19,6 +19,7 @@ use std::sync::Arc; use rayon::ThreadPool; use tokio::sync::mpsc::UnboundedSender; use tokio::sync::watch::Sender; +use crate::resource_pack::files::pack_mcmeta::PackMcmeta; use crate::resource_pack::files::unknowntexture::UnknownTexture; pub fn parse_resource_pack_files( @@ -59,7 +60,20 @@ fn parse_resource_pack_file( "parse_resource_pack_files::unknown" }, ); - if name.ends_with(".json") { + if name == "pack.mcmeta" { + let json_str = match parse_utf8_or_unknown_file(logger, pack, name, content) { + Some(value) => value, + None => return, + }; + match PackMcmeta::from_json(json_str) { + Ok(value) => { + pack.pack_mcmeta(value); + } + Err(e) => { + handle_parse_error(logger, pack, name, content, e); + } + } + } else if name.ends_with(".json") { match get_type(name) { Some("models") => { let (overlay, identifier) = parse_path(name); diff --git a/packobf/src/lib.rs b/packobf/src/lib.rs index 0b57e14..1162b7e 100644 --- a/packobf/src/lib.rs +++ b/packobf/src/lib.rs @@ -10,6 +10,7 @@ pub mod resource_pack; pub mod shader_minifier; pub mod usage_checker; pub mod utils; +pub mod overlay_remover; use crate::cache::Cache; use crate::optimized_zip_writer::OptimizedZipWriter; @@ -41,6 +42,7 @@ use std::sync::Arc; use tokio::sync::mpsc::UnboundedSender; use tokio::sync::watch::Sender; use zip::ZipArchive; +use crate::resource_pack::files::pack_mcmeta::PackMcmeta; pub fn process_zip( input_bytes: Vec, @@ -95,6 +97,10 @@ pub fn process_zip( &pool, ); + if let Some(target_version) = options.target_version { + overlay_remover::remove_overlays(logger, &pack, target_version, &pool); + } + usage_checker::check_usage(logger, &pack); let mut mapping = Mapping::default(); @@ -277,6 +283,9 @@ fn add_item_to_archive( ResourcePackItem::UnknownTexture(o) => { writer.add_file(name.as_str(), o.bytes.as_slice(), options, cache) } + ResourcePackItem::PackMcmeta(o) => { + writer.add_file(name.as_str(), o.to_string().as_bytes(), options, cache) + } }?; Ok(()) } @@ -287,7 +296,8 @@ fn collect_files( ) -> Vec<(String, ResourcePackItem)> { profile_scope!(std::any::type_name_of_val(&collect_files)); thread_pool.install(|| { - pack.textures + let mut files: Vec<_> = pack + .textures .par_iter() .map(|kv| { ( @@ -360,7 +370,14 @@ fn collect_files( ResourcePackItem::Atlas(kv.value().clone()), ) })) - .collect() + .collect(); + if let Some(mcmeta) = pack.pack_mcmeta.lock().unwrap().clone() { + files.push(( + mcmeta.path().to_owned(), + ResourcePackItem::PackMcmeta(mcmeta), + )); + } + files }) } @@ -401,6 +418,7 @@ enum ResourcePackItem { Sound(Sound), SoundDefinitions(SoundDefinitions), Atlas(Atlas), + PackMcmeta(PackMcmeta), } fn get_type(path: &str) -> Option<&str> { diff --git a/packobf/src/options.rs b/packobf/src/options.rs index 760089d..3c10bec 100644 --- a/packobf/src/options.rs +++ b/packobf/src/options.rs @@ -18,6 +18,8 @@ pub struct Options { pub corrupt_png_files: bool, #[arg(long)] pub num_threads: Option, + #[arg(long)] + pub target_version: Option, } #[derive(ValueEnum, Clone, Debug)] @@ -37,6 +39,7 @@ impl Options { block_unzipping: false, corrupt_png_files: false, num_threads: None, + target_version: None, } } @@ -48,6 +51,7 @@ impl Options { block_unzipping: false, corrupt_png_files: false, num_threads: None, + target_version: None, } } @@ -59,6 +63,7 @@ impl Options { block_unzipping: false, corrupt_png_files: false, num_threads: None, + target_version: None, } } @@ -70,6 +75,7 @@ impl Options { block_unzipping: true, corrupt_png_files: true, num_threads: None, + target_version: None, } } @@ -114,6 +120,21 @@ pub enum ShaderCompression { MinifyAndObfuscate = 2, } +#[repr(u8)] +#[derive(ValueEnum, Clone, Debug, Copy, PartialEq, Eq, PartialOrd, Ord)] +pub enum MinecraftVersion { + V1_21_1 = 34, + V1_21_2 = 42, + V1_21_4 = 46, + V1_21_5 = 55, + V1_21_6 = 63, + V1_21_7 = 64, + V1_21_9 = 69, + V1_21_11 = 75, + V26_1 = 84, + V26_2 = 88, +} + pub static ZOPFLI_OPTIONS: Lazy = Lazy::new(|| create_zopfli_options(25, 3, 15)); pub static FASTEST_ZOPFLI_OPTIONS: Lazy = diff --git a/packobf/src/overlay_remover.rs b/packobf/src/overlay_remover.rs new file mode 100644 index 0000000..2030bd0 --- /dev/null +++ b/packobf/src/overlay_remover.rs @@ -0,0 +1,210 @@ +use std::collections::HashSet; +use std::sync::atomic::{AtomicUsize, Ordering}; +use dashmap::DashMap; +use rayon::ThreadPool; +use tokio::sync::mpsc::UnboundedSender; + +use crate::options::MinecraftVersion; +use crate::resource_pack::files::pack_mcmeta::{FormatRange, OverlayEntry, PackVersion}; +use crate::resource_pack::pack::ResourcePack; +use crate::{LogLevel, LogMessage}; + +pub fn remove_overlays( + logger: &UnboundedSender, + pack: &ResourcePack, + minecraft_version: MinecraftVersion, + thread_pool: &ThreadPool +) { + let entries = { + let mut mcmeta = pack.pack_mcmeta.lock().unwrap(); + let Some(mcmeta) = mcmeta.as_mut() else { + return; + }; + let entries = mcmeta + .overlays + .as_ref() + .and_then(|overlays| overlays.entries.clone()) + .unwrap_or_default(); + + // Remove all overlays from the pack + mcmeta.overlays = None; + entries + }; + + if entries.is_empty() { + return; + } + + let all: HashSet = entries + .iter() + .map(|entry| entry.directory.clone()) + .collect(); + let active: Vec = entries + .iter() + .filter(|entry| entry_matches(entry, minecraft_version as i32)) + .map(|entry| entry.directory.clone()) + .collect(); + + #[allow(unused_mut)] + let mut changed = AtomicUsize::new(0); + macro_rules! resolve_typed { + ($map:expr) => { + changed.fetch_add( + resolve_map( + $map, + &all, + &active, + |value| value.overlay.clone(), + |value| { + value.overlay.clear(); + value.path() + }, + ), + Ordering::Relaxed + ); + }; + } + + macro_rules! resolve_path { + ($map:expr) => { + changed.fetch_add( + resolve_map( + $map, + &all, + &active, + |value| overlay_from_path(&value.path, &all), + |value| { + value.path = strip_overlay(&value.path).to_owned(); + value.path.clone() + }, + ), + Ordering::Relaxed + ); + }; + } + + thread_pool.install(|| { + rayon::scope(|s| { + s.spawn(|_| { + resolve_typed!(&pack.models); + }); + s.spawn(|_| { + resolve_typed!(&pack.textures); + }); + s.spawn(|_| { + resolve_typed!(&pack.blockstates); + }); + s.spawn(|_| { + resolve_typed!(&pack.fonts); + }); + s.spawn(|_| { + resolve_typed!(&pack.items); + }); + s.spawn(|_| { + resolve_typed!(&pack.sounds); + }); + s.spawn(|_| { + resolve_typed!(&pack.sound_definitions); + }); + s.spawn(|_| { + resolve_typed!(&pack.atlases); + }); + s.spawn(|_| { + resolve_path!(&pack.json_files); + }); + s.spawn(|_| { + resolve_path!(&pack.shaders); + }); + s.spawn(|_| { + resolve_path!(&pack.unknown_textures); + }); + s.spawn(|_| { + resolve_path!(&pack.unknown_files); + }); + }); + }); + + let changed = changed.load(Ordering::Relaxed); + let _ = logger.send(LogMessage { + level: LogLevel::Info, + message: format!( + "Removed resource pack overlays for pack format {} ({} files changed)", + minecraft_version as i32, changed + ), + }); +} + +fn resolve_map( + map: &DashMap, + declared: &HashSet, + active: &[String], + overlay: impl Fn(&T) -> String, + promote: impl Fn(&mut T) -> String, +) -> usize { + let entries: Vec<(String, T, String)> = map + .iter() + .map(|item| { + let value = item.value().clone(); + (item.key().clone(), value.clone(), overlay(&value)) + }) + .filter(|(_, _, directory)| declared.contains(directory)) + .collect(); + + for (key, _, _) in &entries { + map.remove(key); + } + + for directory in active { + for (_, mut value, entry_overlay) in entries.iter().cloned() { + if &entry_overlay == directory { + let path = promote(&mut value); + map.insert(path, value); + } + } + } + + entries.len() +} + +fn overlay_from_path(path: &str, declared: &HashSet) -> String { + declared + .iter() + .find(|directory| path.starts_with(&format!("{directory}/"))) + .cloned() + .unwrap_or_default() +} + +fn strip_overlay(path: &str) -> &str { + path.split_once('/').map_or(path, |(_, rest)| rest) +} + +fn version(version: &PackVersion) -> (i32, i32) { + match version { + PackVersion::Integer(major) => (*major, 0), + PackVersion::Decimal([major, minor]) => (*major, *minor), + } +} + +fn entry_matches(entry: &OverlayEntry, target_major: i32) -> bool { + let target = (target_major, 0); + if let Some(formats) = &entry.formats { + return match formats { + FormatRange::Int(exact) => target == (*exact, 0), + FormatRange::List([min, max]) => (*min, 0) <= target && target <= (*max, 0), + FormatRange::Object { + min_inclusive, + max_inclusive, + .. + } => version(min_inclusive) <= target && target <= version(max_inclusive), + }; + } + + entry + .min_format + .as_ref() + .is_none_or(|min| version(min) <= target) + && entry + .max_format + .as_ref() + .is_none_or(|max| target <= version(max)) +} diff --git a/packobf/src/resource_pack/files/mod.rs b/packobf/src/resource_pack/files/mod.rs index 1b8c572..59df804 100644 --- a/packobf/src/resource_pack/files/mod.rs +++ b/packobf/src/resource_pack/files/mod.rs @@ -10,3 +10,4 @@ pub mod sound; pub mod sound_definitions; pub mod atlas; pub mod unknowntexture; +pub mod pack_mcmeta; diff --git a/packobf/src/resource_pack/files/pack_mcmeta.rs b/packobf/src/resource_pack/files/pack_mcmeta.rs new file mode 100644 index 0000000..ceab574 --- /dev/null +++ b/packobf/src/resource_pack/files/pack_mcmeta.rs @@ -0,0 +1,80 @@ +use crate::utils::clean_json_numbers; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct PackMcmeta { + #[serde(skip_serializing_if = "Option::is_none")] + pub overlays: Option, + #[serde(flatten)] + extra: serde_json::Value, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Overlay { + #[serde(skip_serializing_if = "Option::is_none")] + pub entries: Option>, + #[serde(flatten)] + extra: serde_json::Value, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct OverlayEntry { + pub directory: String, + + #[serde(skip_serializing_if = "Option::is_none")] + pub min_format: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub max_format: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub formats: Option, + + #[serde(flatten)] + extra: serde_json::Value, +} + +// Versions are now decimal numbers, we can use either integer or two integers +// for the number before the decimal point and the number after the decimal point. +#[derive(Clone, Debug, Serialize, Deserialize)] +#[serde(untagged)] +pub enum PackVersion { + Integer(i32), + Decimal([i32; 2]), +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +#[serde(untagged)] +pub enum FormatRange { + Int(i32), + List([i32; 2]), + Object { + min_inclusive: PackVersion, + max_inclusive: PackVersion, + + #[serde(flatten)] + extra: serde_json::Value, + }, +} + +impl std::fmt::Display for PackMcmeta { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut val = serde_json::to_value(self).map_err(|_| std::fmt::Error)?; + clean_json_numbers(&mut val); + write!( + f, + "{}", + serde_json::to_string(&val).map_err(|_| std::fmt::Error)? + ) + } +} + +impl PackMcmeta { + pub fn from_json(json: &str) -> Result { + serde_json::from_str(json) + } + + pub fn path(&self) -> &'static str { + "pack.mcmeta" + } +} diff --git a/packobf/src/resource_pack/pack.rs b/packobf/src/resource_pack/pack.rs index 44c3477..a91c550 100644 --- a/packobf/src/resource_pack/pack.rs +++ b/packobf/src/resource_pack/pack.rs @@ -1,19 +1,22 @@ -use crate::resource_pack::files::model::Model; -use crate::resource_pack::files::resource_pack_file::ResourcePackFile; -use crate::resource_pack::files::texture::Texture; -use dashmap::DashMap; use crate::resource_pack::files::atlas::Atlas; use crate::resource_pack::files::blockstate::Blockstate; use crate::resource_pack::files::font::Font; use crate::resource_pack::files::item::Item; use crate::resource_pack::files::json::Json; +use crate::resource_pack::files::model::Model; +use crate::resource_pack::files::pack_mcmeta::PackMcmeta; +use crate::resource_pack::files::resource_pack_file::ResourcePackFile; use crate::resource_pack::files::shader::Shader; use crate::resource_pack::files::sound::Sound; use crate::resource_pack::files::sound_definitions::SoundDefinitions; +use crate::resource_pack::files::texture::Texture; use crate::resource_pack::files::unknowntexture::UnknownTexture; +use dashmap::DashMap; +use std::sync::{Arc, Mutex}; #[derive(Clone, Debug, Default)] pub struct ResourcePack { + pub pack_mcmeta: Arc>>, pub models: DashMap, pub json_files: DashMap, pub textures: DashMap, @@ -29,6 +32,10 @@ pub struct ResourcePack { } impl ResourcePack { + pub fn pack_mcmeta(&self, pack_mcmeta: PackMcmeta) { + self.pack_mcmeta.lock().unwrap().replace(pack_mcmeta); + } + pub fn model(&self, model: Model) { self.models.insert(model.path(), model); } From d0a0e18f9f62bbd4b62de06ef343ec4e317455bd Mon Sep 17 00:00:00 2001 From: misieur Date: Wed, 19 Aug 2026 14:37:46 +0200 Subject: [PATCH 16/20] Fix cxxqt_object.rs --- packobf_gui/src/cxxqt_object.rs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/packobf_gui/src/cxxqt_object.rs b/packobf_gui/src/cxxqt_object.rs index adb835e..a5fd306 100644 --- a/packobf_gui/src/cxxqt_object.rs +++ b/packobf_gui/src/cxxqt_object.rs @@ -190,13 +190,7 @@ impl qobject::AppController { let cache_opt = if cache_path.is_empty() { None } else { Some(cache_path) }; let options = Options { - compression: match self.compression() { - 0 => Compression::Fastest, - 1 => Compression::Fast, - 2 => Compression::Normal, - 3 => Compression::Best, - _ => Compression::Ultra, - }, + compression: Compression::from_u8(self.compression.try_into().unwrap_or(0)), shader_compression: match self.shader_compression() { 0 => ShaderCompression::None, 1 => ShaderCompression::Minify, @@ -205,7 +199,8 @@ impl qobject::AppController { rename_files: *self.rename_files(), block_unzipping: *self.block_unzipping(), corrupt_png_files: *self.corrupt_png_files(), - num_threads: None, + num_threads: None, // TODO: Implement this + target_version: None // TODO: Implement this }; let qt_thread = self.qt_thread(); From 666c30994f647b04f69e851e934329f714c57ab7 Mon Sep 17 00:00:00 2001 From: misieur Date: Wed, 19 Aug 2026 16:10:51 +0200 Subject: [PATCH 17/20] Disable/Enable fields in JSON files based on the version --- packobf/src/lib.rs | 7 ++ packobf/src/options.rs | 16 +--- packobf/src/overlay_remover.rs | 2 +- packobf/src/resource_pack/files/blockstate.rs | 6 +- packobf/src/resource_pack/files/font.rs | 11 ++- packobf/src/resource_pack/files/item.rs | 82 +++++++++++++------ packobf/src/resource_pack/files/model.rs | 25 ++++-- .../src/resource_pack/files/unknowntexture.rs | 6 +- packobf/src/version.rs | 76 +++++++++++++++++ 9 files changed, 179 insertions(+), 52 deletions(-) create mode 100644 packobf/src/version.rs diff --git a/packobf/src/lib.rs b/packobf/src/lib.rs index 1162b7e..31c1d5b 100644 --- a/packobf/src/lib.rs +++ b/packobf/src/lib.rs @@ -11,6 +11,7 @@ pub mod shader_minifier; pub mod usage_checker; pub mod utils; pub mod overlay_remover; +pub mod version; use crate::cache::Cache; use crate::optimized_zip_writer::OptimizedZipWriter; @@ -98,7 +99,13 @@ pub fn process_zip( ); if let Some(target_version) = options.target_version { + version::set_target_version(target_version as u8); overlay_remover::remove_overlays(logger, &pack, target_version, &pool); + if version::is_older_than_1_21_4(&()) { + pack.items.clear(); // Added in 1.21.4 + } + } else { + version::set_target_version(0); } usage_checker::check_usage(logger, &pack); diff --git a/packobf/src/options.rs b/packobf/src/options.rs index 3c10bec..8a938a3 100644 --- a/packobf/src/options.rs +++ b/packobf/src/options.rs @@ -2,6 +2,7 @@ use once_cell::sync::Lazy; use std::num::NonZeroU64; use clap::{Parser, ValueEnum}; use libdeflater::{CompressionLvl, Compressor}; +use crate::version::MinecraftVersion; #[derive(Parser, Clone, Debug)] #[group(id = "options")] @@ -120,21 +121,6 @@ pub enum ShaderCompression { MinifyAndObfuscate = 2, } -#[repr(u8)] -#[derive(ValueEnum, Clone, Debug, Copy, PartialEq, Eq, PartialOrd, Ord)] -pub enum MinecraftVersion { - V1_21_1 = 34, - V1_21_2 = 42, - V1_21_4 = 46, - V1_21_5 = 55, - V1_21_6 = 63, - V1_21_7 = 64, - V1_21_9 = 69, - V1_21_11 = 75, - V26_1 = 84, - V26_2 = 88, -} - pub static ZOPFLI_OPTIONS: Lazy = Lazy::new(|| create_zopfli_options(25, 3, 15)); pub static FASTEST_ZOPFLI_OPTIONS: Lazy = diff --git a/packobf/src/overlay_remover.rs b/packobf/src/overlay_remover.rs index 2030bd0..0927e09 100644 --- a/packobf/src/overlay_remover.rs +++ b/packobf/src/overlay_remover.rs @@ -4,10 +4,10 @@ use dashmap::DashMap; use rayon::ThreadPool; use tokio::sync::mpsc::UnboundedSender; -use crate::options::MinecraftVersion; use crate::resource_pack::files::pack_mcmeta::{FormatRange, OverlayEntry, PackVersion}; use crate::resource_pack::pack::ResourcePack; use crate::{LogLevel, LogMessage}; +use crate::version::MinecraftVersion; pub fn remove_overlays( logger: &UnboundedSender, diff --git a/packobf/src/resource_pack/files/blockstate.rs b/packobf/src/resource_pack/files/blockstate.rs index 557515a..f7bc9fd 100644 --- a/packobf/src/resource_pack/files/blockstate.rs +++ b/packobf/src/resource_pack/files/blockstate.rs @@ -2,6 +2,7 @@ use crate::resource_pack::identifier::{Identifier, ModelId}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use crate::utils::clean_json_numbers; +use crate::version; #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Blockstate { @@ -33,7 +34,7 @@ pub struct BlockModel { pub x: i32, #[serde(default, skip_serializing_if = "is_zero")] pub y: i32, - #[serde(default, skip_serializing_if = "is_zero")] + #[serde(default, skip_serializing_if = "is_zero_or_older_than_1_21_11")] pub z: i32, #[serde(default, skip_serializing_if = "std::ops::Not::not")] @@ -85,6 +86,9 @@ fn default_weight() -> i32 { fn is_default_weight(v: &i32) -> bool { *v == 1 } +fn is_zero_or_older_than_1_21_11(v: &i32) -> bool { + *v == 0 || version::is_older_than_1_21_11(&()) +} impl Blockstate { pub fn from_json( diff --git a/packobf/src/resource_pack/files/font.rs b/packobf/src/resource_pack/files/font.rs index 6533943..e10a94d 100644 --- a/packobf/src/resource_pack/files/font.rs +++ b/packobf/src/resource_pack/files/font.rs @@ -2,6 +2,7 @@ use crate::resource_pack::identifier::{Identifier, TextureIdWithExt}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use crate::utils::clean_json_numbers; +use crate::version; #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Font { @@ -53,9 +54,9 @@ pub enum FontProvider { #[serde(rename = "unihex")] Unihex { hex_file: String, - #[serde(default, skip_serializing_if = "Vec::is_empty")] + #[serde(default, skip_serializing_if = "is_empty_or_older_than_26_1")] size_overrides: Vec, - #[serde(skip_serializing_if = "Option::is_none")] + #[serde(skip_serializing_if = "is_none_or_older_than_26_1")] filter: Option, }, @@ -102,6 +103,12 @@ fn default_ascent() -> i32 { 7 } fn default_height() -> i32 { 8 } fn default_size() -> f32 { 11.0 } fn default_oversample() -> f32 { 1.5 } +pub fn is_none_or_older_than_26_1(value: &Option) -> bool { + value.is_none() || version::is_older_than_26_1(&()) +} +pub fn is_empty_or_older_than_26_1(value: &[T]) -> bool { + value.is_empty() || version::is_older_than_26_1(&()) +} impl Font { diff --git a/packobf/src/resource_pack/files/item.rs b/packobf/src/resource_pack/files/item.rs index d8cb0f5..2a87adc 100644 --- a/packobf/src/resource_pack/files/item.rs +++ b/packobf/src/resource_pack/files/item.rs @@ -1,7 +1,10 @@ use crate::resource_pack::identifier::{Identifier, ModelId}; use crate::utils::clean_json_numbers; +use crate::version; use serde::{Deserialize, Serialize}; +/// https://github.com/SpyglassMC/vanilla-mcdoc/blob/main/java/assets/item_definition.mcdoc + #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Item { #[serde(skip)] @@ -11,9 +14,12 @@ pub struct Item { #[serde(default = "default_true", skip_serializing_if = "is_true")] pub hand_animation_on_swap: bool, - #[serde(default, skip_serializing_if = "std::ops::Not::not")] + #[serde(default, skip_serializing_if = "is_false_or_older_than_1_21_6")] pub oversized_in_gui: bool, - #[serde(default = "default_one", skip_serializing_if = "is_one")] + #[serde( + default = "default_one", + skip_serializing_if = "is_one_or_older_than_1_21_11" + )] pub swap_animation_scale: f32, pub model: Model, } @@ -26,13 +32,13 @@ pub enum Model { model: ModelId, #[serde(default, skip_serializing_if = "Vec::is_empty")] tints: Vec, - #[serde(skip_serializing_if = "Option::is_none", flatten)] + #[serde(skip_serializing_if = "is_none_or_older_than_26_1", flatten)] transformation: Option, }, #[serde(rename = "composite", alias = "minecraft:composite")] Composite { models: Vec, - #[serde(skip_serializing_if = "Option::is_none", flatten)] + #[serde(skip_serializing_if = "is_none_or_older_than_26_1", flatten)] transformation: Option, }, #[serde(rename = "condition", alias = "minecraft:condition")] @@ -40,7 +46,7 @@ pub enum Model { property: String, on_true: Box, on_false: Box, - #[serde(skip_serializing_if = "Option::is_none", flatten)] + #[serde(skip_serializing_if = "is_none_or_older_than_26_1", flatten)] transformation: Option, #[serde(flatten)] extra: serde_json::Value, @@ -51,7 +57,7 @@ pub enum Model { cases: Vec, #[serde(skip_serializing_if = "Option::is_none")] fallback: Option>, - #[serde(skip_serializing_if = "Option::is_none", flatten)] + #[serde(skip_serializing_if = "is_none_or_older_than_26_1", flatten)] transformation: Option, #[serde(flatten)] extra: serde_json::Value, @@ -64,7 +70,7 @@ pub enum Model { entries: Vec, #[serde(skip_serializing_if = "Option::is_none")] fallback: Option>, - #[serde(skip_serializing_if = "Option::is_none", flatten)] + #[serde(skip_serializing_if = "is_none_or_older_than_26_1", flatten)] transformation: Option, #[serde(flatten)] extra: serde_json::Value, @@ -73,7 +79,7 @@ pub enum Model { Special { base: ModelId, model: SpecialModelData, - #[serde(skip_serializing_if = "Option::is_none", flatten)] + #[serde(skip_serializing_if = "is_none_or_older_than_26_1", flatten)] transformation: Option, }, #[serde(rename = "empty", alias = "minecraft:empty")] @@ -104,9 +110,7 @@ pub struct FullTransformation { #[derive(Clone, Debug, Serialize, Deserialize)] pub enum Quaternion { List { quaternion: [f32; 4] }, - Object { - quaternion: FullQuaternion - }, + Object { quaternion: FullQuaternion }, } #[derive(Clone, Debug, Serialize, Deserialize)] @@ -157,21 +161,30 @@ pub enum TintSource { pub enum SpecialModelData { #[serde(rename = "banner", alias = "minecraft:banner")] Banner { - #[serde(default = "default_ground")] + #[serde( + default = "default_ground", + skip_serializing_if = "version::is_older_than_26_1" + )] attachment: String, color: String, }, #[serde(rename = "bed", alias = "minecraft:bed")] - Bed { part: String, texture: Identifier }, // bed atlas + Bed { + #[serde(skip_serializing_if = "version::is_not_between_26_1_and_26_2")] + part: String, + #[serde(skip_serializing_if = "version::is_newer_than_26_1")] + texture: Identifier + }, + // bed atlas #[serde(rename = "bell", alias = "minecraft:bell")] Bell {}, #[serde(rename = "book", alias = "minecraft:book")] Book { - #[serde(default)] + #[serde(default, skip_serializing_if = "version::is_older_than_26_1")] open_angle: f32, - #[serde(default)] + #[serde(default, skip_serializing_if = "version::is_older_than_26_1")] page1: f32, - #[serde(default)] + #[serde(default, skip_serializing_if = "version::is_older_than_26_1")] page2: f32, }, #[serde(rename = "conduit", alias = "minecraft:conduit")] @@ -179,7 +192,7 @@ pub enum SpecialModelData { #[serde(rename = "chest", alias = "minecraft:chest")] Chest { texture: Identifier, // chest atlas - #[serde(default = "default_single")] + #[serde(default = "default_single", skip_serializing_if = "version::is_older_than_26_1")] chest_type: String, #[serde(default)] openness: f32, @@ -195,7 +208,10 @@ pub enum SpecialModelData { #[serde(rename = "decorated_pot", alias = "minecraft:decorated_pot")] DecoratedPot {}, #[serde(rename = "end_cube", alias = "minecraft:end_cube")] - EndCube { effect: String }, + EndCube { + #[serde(skip_serializing_if = "version::is_older_than_26_1")] + effect: String + }, #[serde(rename = "head", alias = "minecraft:head")] Head { kind: String, // without textures/entity/ prefix and .png suffix @@ -213,23 +229,25 @@ pub enum SpecialModelData { texture: String, #[serde(default)] openness: f32, + #[serde(skip_serializing_if = "is_none_or_newer_than_26_1")] + orientation: Option, }, #[serde(rename = "standing_sign", alias = "minecraft:standing_sign")] StandingSign { - #[serde(default = "default_ground")] + #[serde(default = "default_ground", skip_serializing_if = "version::is_not_between_26_1_and_26_2")] attachment: String, - #[serde(skip_serializing_if = "Option::is_none")] + #[serde(skip_serializing_if = "is_none_or_newer_than_26_1")] wood_type: Option, - #[serde(skip_serializing_if = "Option::is_none")] + #[serde(skip_serializing_if = "is_none_or_newer_than_26_1")] texture: Option, // signs atlas }, #[serde(rename = "hanging_sign", alias = "minecraft:hanging_sign")] HangingSign { - #[serde(default = "default_ceiling_middle")] + #[serde(default = "default_ceiling_middle", skip_serializing_if = "version::is_not_between_26_1_and_26_2")] attachment: String, - #[serde(skip_serializing_if = "Option::is_none")] + #[serde(skip_serializing_if = "is_none_or_newer_than_26_1")] wood_type: Option, - #[serde(skip_serializing_if = "Option::is_none")] + #[serde(skip_serializing_if = "is_none_or_newer_than_26_1")] texture: Option, // signs atlas }, #[serde(rename = "trident", alias = "minecraft:trident")] @@ -260,6 +278,22 @@ fn default_single() -> String { "single".to_string() } +pub fn is_false_or_older_than_1_21_6(value: &bool) -> bool { + !*value || version::is_older_than_1_21_4(&()) +} + +pub fn is_one_or_older_than_1_21_11(f: &f32) -> bool { + (*f - 1.0).abs() < f32::EPSILON || version::is_older_than_1_21_11(&()) +} + +pub fn is_none_or_older_than_26_1(value: &Option) -> bool { + value.is_none() || version::is_older_than_26_1(&()) +} + +pub fn is_none_or_newer_than_26_1(value: &Option) -> bool { + value.is_none() || version::is_newer_than_26_1(&()) +} + impl std::fmt::Display for Item { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let mut val = serde_json::to_value(self).map_err(|_| std::fmt::Error)?; diff --git a/packobf/src/resource_pack/files/model.rs b/packobf/src/resource_pack/files/model.rs index d13e657..42a6f80 100644 --- a/packobf/src/resource_pack/files/model.rs +++ b/packobf/src/resource_pack/files/model.rs @@ -1,5 +1,6 @@ use crate::resource_pack::identifier::{Identifier, ModelId, TextureId}; use crate::utils::clean_json_numbers; +use crate::version; use serde::{Deserialize, Serialize}; use std::collections::HashMap; @@ -23,7 +24,7 @@ pub struct Model { pub elements: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub overrides: Option>, - #[serde(skip_serializing_if = "Option::is_none")] + #[serde(skip_serializing_if = "is_none_or_newer_than_26_1")] pub gui_light: Option, } @@ -58,7 +59,11 @@ impl std::fmt::Display for Model { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let mut val = serde_json::to_value(self).map_err(|_| std::fmt::Error)?; clean_json_numbers(&mut val); - write!(f, "{}", serde_json::to_string(&val).map_err(|_| std::fmt::Error)?) + write!( + f, + "{}", + serde_json::to_string(&val).map_err(|_| std::fmt::Error)? + ) } } @@ -97,9 +102,6 @@ pub struct Element { #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Rotation { - #[serde(skip_serializing_if = "Option::is_none")] - pub origin: Option<[f32; 3]>, - #[serde(skip_serializing_if = "Option::is_none")] pub x: Option, @@ -115,7 +117,10 @@ pub struct Rotation { #[serde(skip_serializing_if = "Option::is_none")] pub angle: Option, - #[serde(skip_serializing_if = "Option::is_none")] + #[serde(skip_serializing_if = "is_none_or_older_than_1_21_11")] + pub origin: Option<[f32; 3]>, + + #[serde(skip_serializing_if = "is_none_or_older_than_1_21_11")] pub rescale: Option, } @@ -142,3 +147,11 @@ pub struct Override { pub predicate: Option>, pub model: String, } + +pub fn is_none_or_newer_than_26_1(value: &Option) -> bool { + value.is_none() || version::is_newer_than_26_1(&()) +} + +pub fn is_none_or_older_than_1_21_11(value: &Option) -> bool { + value.is_none() || version::is_older_than_1_21_11(&()) +} diff --git a/packobf/src/resource_pack/files/unknowntexture.rs b/packobf/src/resource_pack/files/unknowntexture.rs index 9dacacd..a3cbf4a 100644 --- a/packobf/src/resource_pack/files/unknowntexture.rs +++ b/packobf/src/resource_pack/files/unknowntexture.rs @@ -67,7 +67,7 @@ impl UnknownTexture { if let Some(bytes) = cache .with_item(&hash, ItemType::Image, |it| { - (it.compression as u8 >= options.compression.clone() as u8) + (it.compression as u8 >= options.compression as u8) .then(|| it.data.clone()) }) .flatten() @@ -100,7 +100,7 @@ impl UnknownTexture { cache.add_item( bytes, &*value, - options.compression.clone() as u8, + options.compression as u8, ItemType::Image, ) } @@ -126,7 +126,7 @@ impl UnknownTexture { cache.add_item( bytes, &*value, - options.compression.clone() as u8, + options.compression as u8, ItemType::Image, ) } diff --git a/packobf/src/version.rs b/packobf/src/version.rs new file mode 100644 index 0000000..dd8e62e --- /dev/null +++ b/packobf/src/version.rs @@ -0,0 +1,76 @@ +use std::sync::atomic::{AtomicU8, Ordering}; +use std::sync::LazyLock; +use clap::ValueEnum; + +#[repr(u8)] +#[derive(ValueEnum, Clone, Debug, Copy, PartialEq, Eq, PartialOrd, Ord)] +pub enum MinecraftVersion { + V1_21_1 = 34, + V1_21_2 = 42, + V1_21_4 = 46, + V1_21_5 = 55, + V1_21_6 = 63, + V1_21_7 = 64, + V1_21_9 = 69, + V1_21_11 = 75, + V26_1 = 84, + V26_2 = 88, +} + +pub static TARGET_VERSION: LazyLock = + LazyLock::new(|| AtomicU8::new(0)); + +pub fn set_target_version(version: u8) { + TARGET_VERSION.store(version, Ordering::Relaxed); +} + +pub fn get_version() -> u8 { + TARGET_VERSION.load(Ordering::Relaxed) +} + +macro_rules! version_check { + ($name:ident, $version:ident, <) => { + pub fn $name(arg: T) -> bool { + // zero check required as if no version is set, it will be 0, which will always be less than any version + let version = get_version(); + version != 0 && version < MinecraftVersion::$version as u8 + } + }; + ($name:ident, $version:ident, >) => { + pub fn $name(arg: T) -> bool { + get_version() > MinecraftVersion::$version as u8 // zero check isn't needed in this case + } + }; + ($name:ident, $version1:ident, $version2:ident, <>) => { + pub fn $name(arg: T) -> bool { + let version = get_version(); + version != 0 + && version < MinecraftVersion::$version1 as u8 + && version > MinecraftVersion::$version2 as u8 + } + }; +} + +version_check!(is_older_than_1_21_1, V1_21_1, <); +version_check!(is_older_than_1_21_2, V1_21_2, <); +version_check!(is_older_than_1_21_4, V1_21_4, <); +version_check!(is_older_than_1_21_5, V1_21_5, <); +version_check!(is_older_than_1_21_6, V1_21_6, <); +version_check!(is_older_than_1_21_7, V1_21_7, <); +version_check!(is_older_than_1_21_9, V1_21_9, <); +version_check!(is_older_than_1_21_11, V1_21_11, <); +version_check!(is_older_than_26_1, V26_1, <); +version_check!(is_older_than_26_2, V26_2, <); + +version_check!(is_newer_than_1_21_1, V1_21_1, >); +version_check!(is_newer_than_1_21_2, V1_21_2, >); +version_check!(is_newer_than_1_21_4, V1_21_4, >); +version_check!(is_newer_than_1_21_5, V1_21_5, >); +version_check!(is_newer_than_1_21_6, V1_21_6, >); +version_check!(is_newer_than_1_21_7, V1_21_7, >); +version_check!(is_newer_than_1_21_9, V1_21_9, >); +version_check!(is_newer_than_1_21_11, V1_21_11, >); +version_check!(is_newer_than_26_1, V26_1, >); +version_check!(is_newer_than_26_2, V26_2, >); + +version_check!(is_not_between_26_1_and_26_2, V26_1, V26_2, <>); From 35ca19add260189d1fb677b6409734df9ad14e2f Mon Sep 17 00:00:00 2001 From: misieur Date: Wed, 19 Aug 2026 17:15:16 +0200 Subject: [PATCH 18/20] Make Minecraft data be for versions 1.21.1, 1.21.2, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.9, 1.21.11, 26.1 and 26.2 --- packobf/src/minecraft/README.md | 13 + packobf/src/minecraft/builtin_files.rs | 13 - packobf/src/minecraft/models.txt | 1799 ++++- packobf/src/minecraft/sounds.txt | 9300 ++++++++++++------------ packobf/src/minecraft/textures.txt | 1667 +++-- 5 files changed, 7437 insertions(+), 5355 deletions(-) create mode 100644 packobf/src/minecraft/README.md diff --git a/packobf/src/minecraft/README.md b/packobf/src/minecraft/README.md new file mode 100644 index 0000000..5fd98d2 --- /dev/null +++ b/packobf/src/minecraft/README.md @@ -0,0 +1,13 @@ +This folder contains all the assets' paths from `models`, `sounds` and `textures` +folder that have existed in 1.21.1, 1.21.2, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.9, 1.21.11, 26.1 and 26.2. + +To build these files, you first need to download an asset folder (from [mcasset](https://github.com/InventivetalentDev/minecraft-assets)) +then you can use this command to create a file in one asset folder: +```bash +find . -type f ! -name "_*" ! -name "*.txt" | sed 's|^\./||' | sort > files.txt +``` + +To combine multiple asset lists from different versions, use: +```bash +cat version1.txt version2.txt | sort -u > merged.txt +``` diff --git a/packobf/src/minecraft/builtin_files.rs b/packobf/src/minecraft/builtin_files.rs index 22e1587..7fcd721 100644 --- a/packobf/src/minecraft/builtin_files.rs +++ b/packobf/src/minecraft/builtin_files.rs @@ -2,19 +2,6 @@ use strum_macros::{Display, EnumString}; include!(concat!(env!("OUT_DIR"), "/codegen.rs")); -/** -To build these files from the latest version of Minecraft, first download the folder you want from https://mcasset.cloud/ (recommended) -Then execute the following command in this folder: -```bash -find . -type f -name "*.ext" > files.txt && sed -i 's|^\./||' files.txt && sort files.txt -``` -**replace "*.ext" with the correct extension (e.g. ".png" for textures)** - -Then copy the `files.txt` file into the right file in this folder. (e.g. `minecraft/textures.txt`) - -*mcasset.cloud may generate JSON files named _list.json or _all.json. You will have to remove them manually if using `-name "*.json"`.* -*/ -// Minecraft 26.1 pub fn is_in_models(input: &str) -> bool { MODELS.contains(input) } diff --git a/packobf/src/minecraft/models.txt b/packobf/src/minecraft/models.txt index e5fcf95..ae96dd5 100644 --- a/packobf/src/minecraft/models.txt +++ b/packobf/src/minecraft/models.txt @@ -1,5 +1,5 @@ -block/acacia_button block/acacia_button_inventory +block/acacia_button block/acacia_button_pressed block/acacia_door_bottom_left block/acacia_door_bottom_left_open @@ -16,30 +16,44 @@ block/acacia_fence_gate_wall_open block/acacia_fence_inventory block/acacia_fence_post block/acacia_fence_side +block/acacia_hanging_sign_attached_rot_0 +block/acacia_hanging_sign_attached_rot_1 +block/acacia_hanging_sign_attached_rot_2 +block/acacia_hanging_sign_attached_rot_3 block/acacia_hanging_sign +block/acacia_hanging_sign_rot_0 +block/acacia_hanging_sign_rot_1 +block/acacia_hanging_sign_rot_2 +block/acacia_hanging_sign_rot_3 block/acacia_leaves -block/acacia_log block/acacia_log_horizontal +block/acacia_log block/acacia_planks -block/acacia_pressure_plate block/acacia_pressure_plate_down +block/acacia_pressure_plate block/acacia_sapling -block/acacia_shelf block/acacia_shelf_center block/acacia_shelf_inventory +block/acacia_shelf block/acacia_shelf_left block/acacia_shelf_right block/acacia_shelf_unconnected block/acacia_shelf_unpowered block/acacia_sign +block/acacia_sign_rot_0 +block/acacia_sign_rot_1 +block/acacia_sign_rot_2 +block/acacia_sign_rot_3 block/acacia_slab block/acacia_slab_top -block/acacia_stairs block/acacia_stairs_inner +block/acacia_stairs block/acacia_stairs_outer block/acacia_trapdoor_bottom block/acacia_trapdoor_open block/acacia_trapdoor_top +block/acacia_wall_hanging_sign +block/acacia_wall_sign block/acacia_wood block/activator_rail block/activator_rail_on @@ -55,8 +69,8 @@ block/ancient_debris block/andesite block/andesite_slab block/andesite_slab_top -block/andesite_stairs block/andesite_stairs_inner +block/andesite_stairs block/andesite_stairs_outer block/andesite_wall_inventory block/andesite_wall_post @@ -80,8 +94,8 @@ block/bamboo_block block/bamboo_block_x block/bamboo_block_y block/bamboo_block_z -block/bamboo_button block/bamboo_button_inventory +block/bamboo_button block/bamboo_button_pressed block/bamboo_door_bottom_left block/bamboo_door_bottom_left_open @@ -101,35 +115,49 @@ block/bamboo_fence_side_east block/bamboo_fence_side_north block/bamboo_fence_side_south block/bamboo_fence_side_west +block/bamboo_hanging_sign_attached_rot_0 +block/bamboo_hanging_sign_attached_rot_1 +block/bamboo_hanging_sign_attached_rot_2 +block/bamboo_hanging_sign_attached_rot_3 block/bamboo_hanging_sign +block/bamboo_hanging_sign_rot_0 +block/bamboo_hanging_sign_rot_1 +block/bamboo_hanging_sign_rot_2 +block/bamboo_hanging_sign_rot_3 block/bamboo_large_leaves block/bamboo_mosaic block/bamboo_mosaic_slab block/bamboo_mosaic_slab_top -block/bamboo_mosaic_stairs block/bamboo_mosaic_stairs_inner +block/bamboo_mosaic_stairs block/bamboo_mosaic_stairs_outer block/bamboo_planks -block/bamboo_pressure_plate block/bamboo_pressure_plate_down +block/bamboo_pressure_plate block/bamboo_sapling -block/bamboo_shelf block/bamboo_shelf_center block/bamboo_shelf_inventory +block/bamboo_shelf block/bamboo_shelf_left block/bamboo_shelf_right block/bamboo_shelf_unconnected block/bamboo_shelf_unpowered block/bamboo_sign +block/bamboo_sign_rot_0 +block/bamboo_sign_rot_1 +block/bamboo_sign_rot_2 +block/bamboo_sign_rot_3 block/bamboo_slab block/bamboo_slab_top block/bamboo_small_leaves -block/bamboo_stairs block/bamboo_stairs_inner +block/bamboo_stairs block/bamboo_stairs_outer block/bamboo_trapdoor_bottom block/bamboo_trapdoor_open block/bamboo_trapdoor_top +block/bamboo_wall_hanging_sign +block/bamboo_wall_sign block/banner block/barrel block/barrel_open @@ -139,10 +167,12 @@ block/beacon block/bed block/bedrock block/bedrock_mirrored -block/bee_nest_empty -block/bee_nest_honey block/beehive_empty block/beehive_honey +block/beehive +block/bee_nest_empty +block/bee_nest_honey +block/bee_nest block/beetroots_stage0 block/beetroots_stage1 block/beetroots_stage2 @@ -151,12 +181,12 @@ block/bell_between_walls block/bell_ceiling block/bell_floor block/bell_wall -block/big_dripleaf block/big_dripleaf_full_tilt +block/big_dripleaf block/big_dripleaf_partial_tilt block/big_dripleaf_stem -block/birch_button block/birch_button_inventory +block/birch_button block/birch_button_pressed block/birch_door_bottom_left block/birch_door_bottom_left_open @@ -173,31 +203,47 @@ block/birch_fence_gate_wall_open block/birch_fence_inventory block/birch_fence_post block/birch_fence_side +block/birch_hanging_sign_attached_rot_0 +block/birch_hanging_sign_attached_rot_1 +block/birch_hanging_sign_attached_rot_2 +block/birch_hanging_sign_attached_rot_3 block/birch_hanging_sign +block/birch_hanging_sign_rot_0 +block/birch_hanging_sign_rot_1 +block/birch_hanging_sign_rot_2 +block/birch_hanging_sign_rot_3 block/birch_leaves -block/birch_log block/birch_log_horizontal +block/birch_log block/birch_planks -block/birch_pressure_plate block/birch_pressure_plate_down +block/birch_pressure_plate block/birch_sapling -block/birch_shelf block/birch_shelf_center block/birch_shelf_inventory +block/birch_shelf block/birch_shelf_left block/birch_shelf_right block/birch_shelf_unconnected block/birch_shelf_unpowered block/birch_sign +block/birch_sign_rot_0 +block/birch_sign_rot_1 +block/birch_sign_rot_2 +block/birch_sign_rot_3 block/birch_slab block/birch_slab_top -block/birch_stairs block/birch_stairs_inner +block/birch_stairs block/birch_stairs_outer block/birch_trapdoor_bottom block/birch_trapdoor_open block/birch_trapdoor_top +block/birch_wall_hanging_sign +block/birch_wall_sign block/birch_wood +block/black_bed_foot +block/black_bed_head block/black_candle_cake block/black_candle_cake_lit block/black_candle_four_candles @@ -214,26 +260,28 @@ block/black_concrete_powder block/black_glazed_terracotta block/black_shulker_box block/black_stained_glass -block/black_stained_glass_pane_noside block/black_stained_glass_pane_noside_alt +block/black_stained_glass_pane_noside block/black_stained_glass_pane_post -block/black_stained_glass_pane_side block/black_stained_glass_pane_side_alt -block/black_terracotta -block/black_wool +block/black_stained_glass_pane_side block/blackstone block/blackstone_slab block/blackstone_slab_top -block/blackstone_stairs block/blackstone_stairs_inner +block/blackstone_stairs block/blackstone_stairs_outer block/blackstone_wall_inventory block/blackstone_wall_post block/blackstone_wall_side block/blackstone_wall_side_tall +block/black_terracotta +block/black_wool block/blast_furnace block/blast_furnace_on block/block +block/blue_bed_foot +block/blue_bed_head block/blue_candle_cake block/blue_candle_cake_lit block/blue_candle_four_candles @@ -252,36 +300,38 @@ block/blue_ice block/blue_orchid block/blue_shulker_box block/blue_stained_glass -block/blue_stained_glass_pane_noside block/blue_stained_glass_pane_noside_alt +block/blue_stained_glass_pane_noside block/blue_stained_glass_pane_post -block/blue_stained_glass_pane_side block/blue_stained_glass_pane_side_alt +block/blue_stained_glass_pane_side block/blue_terracotta block/blue_wool block/bone_block block/bookshelf -block/brain_coral block/brain_coral_block block/brain_coral_fan +block/brain_coral block/brain_coral_wall_fan -block/brewing_stand block/brewing_stand_bottle0 block/brewing_stand_bottle1 block/brewing_stand_bottle2 block/brewing_stand_empty0 block/brewing_stand_empty1 block/brewing_stand_empty2 +block/brewing_stand +block/bricks block/brick_slab block/brick_slab_top -block/brick_stairs block/brick_stairs_inner +block/brick_stairs block/brick_stairs_outer block/brick_wall_inventory block/brick_wall_post block/brick_wall_side block/brick_wall_side_tall -block/bricks +block/brown_bed_foot +block/brown_bed_head block/brown_candle_cake block/brown_candle_cake_lit block/brown_candle_four_candles @@ -296,29 +346,29 @@ block/brown_carpet block/brown_concrete block/brown_concrete_powder block/brown_glazed_terracotta -block/brown_mushroom -block/brown_mushroom_block block/brown_mushroom_block_inventory +block/brown_mushroom_block +block/brown_mushroom block/brown_shulker_box block/brown_stained_glass -block/brown_stained_glass_pane_noside block/brown_stained_glass_pane_noside_alt +block/brown_stained_glass_pane_noside block/brown_stained_glass_pane_post -block/brown_stained_glass_pane_side block/brown_stained_glass_pane_side_alt +block/brown_stained_glass_pane_side block/brown_terracotta block/brown_wool -block/bubble_coral block/bubble_coral_block block/bubble_coral_fan +block/bubble_coral block/bubble_coral_wall_fan block/budding_amethyst block/bush -block/button block/button_inventory +block/button block/button_pressed -block/cactus block/cactus_flower +block/cactus block/cake block/cake_slice1 block/cake_slice2 @@ -327,9 +377,9 @@ block/cake_slice4 block/cake_slice5 block/cake_slice6 block/calcite -block/calibrated_sculk_sensor block/calibrated_sculk_sensor_active block/calibrated_sculk_sensor_inactive +block/calibrated_sculk_sensor block/campfire block/campfire_off block/candle_cake @@ -354,10 +404,11 @@ block/cave_vines block/cave_vines_lit block/cave_vines_plant block/cave_vines_plant_lit -block/chain_command_block block/chain_command_block_conditional -block/cherry_button +block/chain_command_block +block/chain block/cherry_button_inventory +block/cherry_button block/cherry_button_pressed block/cherry_door_bottom_left block/cherry_door_bottom_left_open @@ -374,36 +425,49 @@ block/cherry_fence_gate_wall_open block/cherry_fence_inventory block/cherry_fence_post block/cherry_fence_side +block/cherry_hanging_sign_attached_rot_0 +block/cherry_hanging_sign_attached_rot_1 +block/cherry_hanging_sign_attached_rot_2 +block/cherry_hanging_sign_attached_rot_3 block/cherry_hanging_sign +block/cherry_hanging_sign_rot_0 +block/cherry_hanging_sign_rot_1 +block/cherry_hanging_sign_rot_2 +block/cherry_hanging_sign_rot_3 block/cherry_leaves block/cherry_log block/cherry_log_x block/cherry_log_y block/cherry_log_z block/cherry_planks -block/cherry_pressure_plate block/cherry_pressure_plate_down +block/cherry_pressure_plate block/cherry_sapling -block/cherry_shelf block/cherry_shelf_center block/cherry_shelf_inventory +block/cherry_shelf block/cherry_shelf_left block/cherry_shelf_right block/cherry_shelf_unconnected block/cherry_shelf_unpowered block/cherry_sign +block/cherry_sign_rot_0 +block/cherry_sign_rot_1 +block/cherry_sign_rot_2 +block/cherry_sign_rot_3 block/cherry_slab block/cherry_slab_top -block/cherry_stairs block/cherry_stairs_inner +block/cherry_stairs block/cherry_stairs_outer block/cherry_trapdoor_bottom block/cherry_trapdoor_open block/cherry_trapdoor_top +block/cherry_wall_hanging_sign +block/cherry_wall_sign block/cherry_wood block/chest block/chipped_anvil -block/chiseled_bookshelf block/chiseled_bookshelf_empty_slot_bottom_left block/chiseled_bookshelf_empty_slot_bottom_mid block/chiseled_bookshelf_empty_slot_bottom_right @@ -411,12 +475,14 @@ block/chiseled_bookshelf_empty_slot_top_left block/chiseled_bookshelf_empty_slot_top_mid block/chiseled_bookshelf_empty_slot_top_right block/chiseled_bookshelf_inventory +block/chiseled_bookshelf block/chiseled_bookshelf_occupied_slot_bottom_left block/chiseled_bookshelf_occupied_slot_bottom_mid block/chiseled_bookshelf_occupied_slot_bottom_right block/chiseled_bookshelf_occupied_slot_top_left block/chiseled_bookshelf_occupied_slot_top_mid block/chiseled_bookshelf_occupied_slot_top_right +block/chiseled_cinnabar block/chiseled_copper block/chiseled_deepslate block/chiseled_nether_bricks @@ -426,16 +492,37 @@ block/chiseled_red_sandstone block/chiseled_resin_bricks block/chiseled_sandstone block/chiseled_stone_bricks -block/chiseled_tuff +block/chiseled_sulfur block/chiseled_tuff_bricks -block/chorus_flower +block/chiseled_tuff block/chorus_flower_dead +block/chorus_flower block/chorus_plant -block/chorus_plant_noside block/chorus_plant_noside1 block/chorus_plant_noside2 block/chorus_plant_noside3 +block/chorus_plant_noside block/chorus_plant_side +block/cinnabar_bricks +block/cinnabar_brick_slab +block/cinnabar_brick_slab_top +block/cinnabar_brick_stairs_inner +block/cinnabar_brick_stairs +block/cinnabar_brick_stairs_outer +block/cinnabar_brick_wall_inventory +block/cinnabar_brick_wall_post +block/cinnabar_brick_wall_side +block/cinnabar_brick_wall_side_tall +block/cinnabar +block/cinnabar_slab +block/cinnabar_slab_top +block/cinnabar_stairs_inner +block/cinnabar_stairs +block/cinnabar_stairs_outer +block/cinnabar_wall_inventory +block/cinnabar_wall_post +block/cinnabar_wall_side +block/cinnabar_wall_side_tall block/clay block/closed_eyeblossom block/coal_block @@ -444,8 +531,8 @@ block/coarse_dirt block/cobbled_deepslate block/cobbled_deepslate_slab block/cobbled_deepslate_slab_top -block/cobbled_deepslate_stairs block/cobbled_deepslate_stairs_inner +block/cobbled_deepslate_stairs block/cobbled_deepslate_stairs_outer block/cobbled_deepslate_wall_inventory block/cobbled_deepslate_wall_post @@ -454,8 +541,8 @@ block/cobbled_deepslate_wall_side_tall block/cobblestone block/cobblestone_slab block/cobblestone_slab_top -block/cobblestone_stairs block/cobblestone_stairs_inner +block/cobblestone_stairs block/cobblestone_stairs_outer block/cobblestone_wall_inventory block/cobblestone_wall_post @@ -465,13 +552,12 @@ block/cobweb block/cocoa_stage0 block/cocoa_stage1 block/cocoa_stage2 -block/command_block block/command_block_conditional +block/command_block block/comparator block/comparator_on block/comparator_on_subtract block/comparator_subtract -block/composter block/composter_contents1 block/composter_contents2 block/composter_contents3 @@ -480,13 +566,14 @@ block/composter_contents5 block/composter_contents6 block/composter_contents7 block/composter_contents_ready +block/composter block/conduit -block/copper_bars_cap block/copper_bars_cap_alt -block/copper_bars_post +block/copper_bars_cap block/copper_bars_post_ends -block/copper_bars_side +block/copper_bars_post block/copper_bars_side_alt +block/copper_bars_side block/copper_block block/copper_bulb block/copper_bulb_lit @@ -504,8 +591,8 @@ block/copper_door_top_right block/copper_door_top_right_open block/copper_golem_statue block/copper_grate -block/copper_lantern block/copper_lantern_hanging +block/copper_lantern block/copper_ore block/copper_torch block/copper_trapdoor_bottom @@ -520,19 +607,21 @@ block/cracked_deepslate_tiles block/cracked_nether_bricks block/cracked_polished_blackstone_bricks block/cracked_stone_bricks -block/crafter block/crafter_crafting block/crafter_crafting_triggered +block/crafter block/crafter_triggered block/crafting_table -block/creaking_heart -block/creaking_heart_awake +block/creaking_heart_active_horizontal +block/creaking_heart_active block/creaking_heart_awake_horizontal -block/creaking_heart_dormant +block/creaking_heart_awake block/creaking_heart_dormant_horizontal +block/creaking_heart_dormant block/creaking_heart_horizontal -block/crimson_button +block/creaking_heart block/crimson_button_inventory +block/crimson_button block/crimson_button_pressed block/crimson_door_bottom_left block/crimson_door_bottom_left_open @@ -550,50 +639,64 @@ block/crimson_fence_inventory block/crimson_fence_post block/crimson_fence_side block/crimson_fungus +block/crimson_hanging_sign_attached_rot_0 +block/crimson_hanging_sign_attached_rot_1 +block/crimson_hanging_sign_attached_rot_2 +block/crimson_hanging_sign_attached_rot_3 block/crimson_hanging_sign +block/crimson_hanging_sign_rot_0 +block/crimson_hanging_sign_rot_1 +block/crimson_hanging_sign_rot_2 +block/crimson_hanging_sign_rot_3 block/crimson_hyphae block/crimson_nylium block/crimson_planks -block/crimson_pressure_plate block/crimson_pressure_plate_down +block/crimson_pressure_plate block/crimson_roots -block/crimson_shelf block/crimson_shelf_center block/crimson_shelf_inventory +block/crimson_shelf block/crimson_shelf_left block/crimson_shelf_right block/crimson_shelf_unconnected block/crimson_shelf_unpowered block/crimson_sign +block/crimson_sign_rot_0 +block/crimson_sign_rot_1 +block/crimson_sign_rot_2 +block/crimson_sign_rot_3 block/crimson_slab block/crimson_slab_top -block/crimson_stairs block/crimson_stairs_inner +block/crimson_stairs block/crimson_stairs_outer block/crimson_stem block/crimson_trapdoor_bottom block/crimson_trapdoor_open block/crimson_trapdoor_top +block/crimson_wall_hanging_sign +block/crimson_wall_sign block/crop -block/cross block/cross_emissive +block/cross block/crying_obsidian -block/cube -block/cube_all block/cube_all_inner_faces -block/cube_bottom_top +block/cube_all block/cube_bottom_top_inner_faces -block/cube_column +block/cube_bottom_top block/cube_column_horizontal +block/cube_column block/cube_column_mirrored block/cube_column_uv_locked_x block/cube_column_uv_locked_y block/cube_column_uv_locked_z block/cube_directional -block/cube_mirrored +block/cube block/cube_mirrored_all -block/cube_north_west_mirrored +block/cube_mirrored block/cube_north_west_mirrored_all +block/cube_north_west_mirrored block/cube_top block/custom_fence_inventory block/custom_fence_post @@ -604,8 +707,8 @@ block/custom_fence_side_west block/cut_copper block/cut_copper_slab block/cut_copper_slab_top -block/cut_copper_stairs block/cut_copper_stairs_inner +block/cut_copper_stairs block/cut_copper_stairs_outer block/cut_red_sandstone block/cut_red_sandstone_slab @@ -613,6 +716,8 @@ block/cut_red_sandstone_slab_top block/cut_sandstone block/cut_sandstone_slab block/cut_sandstone_slab_top +block/cyan_bed_foot +block/cyan_bed_head block/cyan_candle_cake block/cyan_candle_cake_lit block/cyan_candle_four_candles @@ -629,17 +734,17 @@ block/cyan_concrete_powder block/cyan_glazed_terracotta block/cyan_shulker_box block/cyan_stained_glass -block/cyan_stained_glass_pane_noside block/cyan_stained_glass_pane_noside_alt +block/cyan_stained_glass_pane_noside block/cyan_stained_glass_pane_post -block/cyan_stained_glass_pane_side block/cyan_stained_glass_pane_side_alt +block/cyan_stained_glass_pane_side block/cyan_terracotta block/cyan_wool block/damaged_anvil block/dandelion -block/dark_oak_button block/dark_oak_button_inventory +block/dark_oak_button block/dark_oak_button_pressed block/dark_oak_door_bottom_left block/dark_oak_door_bottom_left_open @@ -656,92 +761,106 @@ block/dark_oak_fence_gate_wall_open block/dark_oak_fence_inventory block/dark_oak_fence_post block/dark_oak_fence_side +block/dark_oak_hanging_sign_attached_rot_0 +block/dark_oak_hanging_sign_attached_rot_1 +block/dark_oak_hanging_sign_attached_rot_2 +block/dark_oak_hanging_sign_attached_rot_3 block/dark_oak_hanging_sign +block/dark_oak_hanging_sign_rot_0 +block/dark_oak_hanging_sign_rot_1 +block/dark_oak_hanging_sign_rot_2 +block/dark_oak_hanging_sign_rot_3 block/dark_oak_leaves -block/dark_oak_log block/dark_oak_log_horizontal +block/dark_oak_log block/dark_oak_planks -block/dark_oak_pressure_plate block/dark_oak_pressure_plate_down +block/dark_oak_pressure_plate block/dark_oak_sapling -block/dark_oak_shelf block/dark_oak_shelf_center block/dark_oak_shelf_inventory +block/dark_oak_shelf block/dark_oak_shelf_left block/dark_oak_shelf_right block/dark_oak_shelf_unconnected block/dark_oak_shelf_unpowered block/dark_oak_sign +block/dark_oak_sign_rot_0 +block/dark_oak_sign_rot_1 +block/dark_oak_sign_rot_2 +block/dark_oak_sign_rot_3 block/dark_oak_slab block/dark_oak_slab_top -block/dark_oak_stairs block/dark_oak_stairs_inner +block/dark_oak_stairs block/dark_oak_stairs_outer block/dark_oak_trapdoor_bottom block/dark_oak_trapdoor_open block/dark_oak_trapdoor_top +block/dark_oak_wall_hanging_sign +block/dark_oak_wall_sign block/dark_oak_wood block/dark_prismarine block/dark_prismarine_slab block/dark_prismarine_slab_top -block/dark_prismarine_stairs block/dark_prismarine_stairs_inner +block/dark_prismarine_stairs block/dark_prismarine_stairs_outer -block/daylight_detector block/daylight_detector_inverted -block/dead_brain_coral +block/daylight_detector block/dead_brain_coral_block block/dead_brain_coral_fan +block/dead_brain_coral block/dead_brain_coral_wall_fan -block/dead_bubble_coral block/dead_bubble_coral_block block/dead_bubble_coral_fan +block/dead_bubble_coral block/dead_bubble_coral_wall_fan block/dead_bush -block/dead_fire_coral block/dead_fire_coral_block block/dead_fire_coral_fan +block/dead_fire_coral block/dead_fire_coral_wall_fan -block/dead_horn_coral block/dead_horn_coral_block block/dead_horn_coral_fan +block/dead_horn_coral block/dead_horn_coral_wall_fan block/dead_sea_pickle -block/dead_tube_coral block/dead_tube_coral_block block/dead_tube_coral_fan +block/dead_tube_coral block/dead_tube_coral_wall_fan block/decorated_pot -block/deepslate +block/deepslate_bricks block/deepslate_brick_slab block/deepslate_brick_slab_top -block/deepslate_brick_stairs block/deepslate_brick_stairs_inner +block/deepslate_brick_stairs block/deepslate_brick_stairs_outer block/deepslate_brick_wall_inventory block/deepslate_brick_wall_post block/deepslate_brick_wall_side block/deepslate_brick_wall_side_tall -block/deepslate_bricks block/deepslate_coal_ore block/deepslate_copper_ore block/deepslate_diamond_ore block/deepslate_emerald_ore block/deepslate_gold_ore block/deepslate_iron_ore +block/deepslate block/deepslate_lapis_ore block/deepslate_mirrored block/deepslate_redstone_ore +block/deepslate_tiles block/deepslate_tile_slab block/deepslate_tile_slab_top -block/deepslate_tile_stairs block/deepslate_tile_stairs_inner +block/deepslate_tile_stairs block/deepslate_tile_stairs_outer block/deepslate_tile_wall_inventory block/deepslate_tile_wall_post block/deepslate_tile_wall_side block/deepslate_tile_wall_side_tall -block/deepslate_tiles block/detector_rail block/detector_rail_on block/detector_rail_on_raised_ne @@ -753,8 +872,8 @@ block/diamond_ore block/diorite block/diorite_slab block/diorite_slab_top -block/diorite_stairs block/diorite_stairs_inner +block/diorite_stairs block/diorite_stairs_outer block/diorite_wall_inventory block/diorite_wall_post @@ -773,11 +892,11 @@ block/door_top_left_open block/door_top_right block/door_top_right_open block/dragon_egg -block/dried_ghast block/dried_ghast_hydration_0 block/dried_ghast_hydration_1 block/dried_ghast_hydration_2 block/dried_ghast_hydration_3 +block/dried_ghast block/dried_kelp_block block/dripstone_block block/dropper @@ -785,31 +904,30 @@ block/dropper_vertical block/emerald_block block/emerald_ore block/enchanting_table +block/ender_chest block/end_gateway -block/end_portal -block/end_portal_frame block/end_portal_frame_filled +block/end_portal_frame +block/end_portal block/end_rod -block/end_stone +block/end_stone_bricks block/end_stone_brick_slab block/end_stone_brick_slab_top -block/end_stone_brick_stairs block/end_stone_brick_stairs_inner +block/end_stone_brick_stairs block/end_stone_brick_stairs_outer block/end_stone_brick_wall_inventory block/end_stone_brick_wall_post block/end_stone_brick_wall_side block/end_stone_brick_wall_side_tall -block/end_stone_bricks -block/ender_chest +block/end_stone block/exposed_chiseled_copper -block/exposed_copper -block/exposed_copper_bars_cap block/exposed_copper_bars_cap_alt -block/exposed_copper_bars_post +block/exposed_copper_bars_cap block/exposed_copper_bars_post_ends -block/exposed_copper_bars_side +block/exposed_copper_bars_post block/exposed_copper_bars_side_alt +block/exposed_copper_bars_side block/exposed_copper_bulb block/exposed_copper_bulb_lit block/exposed_copper_bulb_lit_powered @@ -826,16 +944,17 @@ block/exposed_copper_door_top_right block/exposed_copper_door_top_right_open block/exposed_copper_golem_statue block/exposed_copper_grate -block/exposed_copper_lantern +block/exposed_copper block/exposed_copper_lantern_hanging +block/exposed_copper_lantern block/exposed_copper_trapdoor_bottom block/exposed_copper_trapdoor_open block/exposed_copper_trapdoor_top block/exposed_cut_copper block/exposed_cut_copper_slab block/exposed_cut_copper_slab_top -block/exposed_cut_copper_stairs block/exposed_cut_copper_stairs_inner +block/exposed_cut_copper_stairs block/exposed_cut_copper_stairs_outer block/exposed_lightning_rod block/farmland @@ -844,12 +963,13 @@ block/fence_inventory block/fence_post block/fence_side block/fern -block/fire_coral block/fire_coral_block block/fire_coral_fan +block/fire_coral block/fire_coral_wall_fan block/fire_floor0 block/fire_floor1 +block/firefly_bush block/fire_side0 block/fire_side1 block/fire_side_alt0 @@ -858,17 +978,16 @@ block/fire_up0 block/fire_up1 block/fire_up_alt0 block/fire_up_alt1 -block/firefly_bush block/fletching_table -block/flower_pot -block/flower_pot_cross -block/flower_pot_cross_emissive block/flowerbed_1 block/flowerbed_2 block/flowerbed_3 block/flowerbed_4 block/flowering_azalea block/flowering_azalea_leaves +block/flower_pot_cross_emissive +block/flower_pot_cross +block/flower_pot block/four_dead_sea_pickles block/four_sea_pickles block/four_slightly_cracked_turtle_eggs @@ -883,23 +1002,23 @@ block/furnace block/furnace_on block/gilded_blackstone block/glass -block/glass_pane_noside block/glass_pane_noside_alt +block/glass_pane_noside block/glass_pane_post -block/glass_pane_side block/glass_pane_side_alt +block/glass_pane_side block/glow_item_frame block/glow_item_frame_map block/glow_lichen block/glowstone block/gold_block -block/gold_ore block/golden_dandelion +block/gold_ore block/granite block/granite_slab block/granite_slab_top -block/granite_stairs block/granite_stairs_inner +block/granite_stairs block/granite_stairs_outer block/granite_wall_inventory block/granite_wall_post @@ -908,6 +1027,8 @@ block/granite_wall_side_tall block/grass_block block/grass_block_snow block/gravel +block/gray_bed_foot +block/gray_bed_head block/gray_candle_cake block/gray_candle_cake_lit block/gray_candle_four_candles @@ -924,13 +1045,15 @@ block/gray_concrete_powder block/gray_glazed_terracotta block/gray_shulker_box block/gray_stained_glass -block/gray_stained_glass_pane_noside block/gray_stained_glass_pane_noside_alt +block/gray_stained_glass_pane_noside block/gray_stained_glass_pane_post -block/gray_stained_glass_pane_side block/gray_stained_glass_pane_side_alt +block/gray_stained_glass_pane_side block/gray_terracotta block/gray_wool +block/green_bed_foot +block/green_bed_head block/green_candle_cake block/green_candle_cake_lit block/green_candle_four_candles @@ -947,36 +1070,36 @@ block/green_concrete_powder block/green_glazed_terracotta block/green_shulker_box block/green_stained_glass -block/green_stained_glass_pane_noside block/green_stained_glass_pane_noside_alt +block/green_stained_glass_pane_noside block/green_stained_glass_pane_post -block/green_stained_glass_pane_side block/green_stained_glass_pane_side_alt +block/green_stained_glass_pane_side block/green_terracotta block/green_wool block/grindstone block/hanging_roots -block/hay_block block/hay_block_horizontal +block/hay_block block/heavy_core -block/heavy_weighted_pressure_plate block/heavy_weighted_pressure_plate_down +block/heavy_weighted_pressure_plate block/honey_block block/honeycomb_block block/hopper block/hopper_side -block/horn_coral block/horn_coral_block block/horn_coral_fan +block/horn_coral block/horn_coral_wall_fan block/ice block/inner_stairs -block/iron_bars_cap block/iron_bars_cap_alt -block/iron_bars_post +block/iron_bars_cap block/iron_bars_post_ends -block/iron_bars_side +block/iron_bars_post block/iron_bars_side_alt +block/iron_bars_side block/iron_block block/iron_chain block/iron_door_bottom_left @@ -996,8 +1119,8 @@ block/item_frame_map block/jack_o_lantern block/jigsaw block/jukebox -block/jungle_button block/jungle_button_inventory +block/jungle_button block/jungle_button_pressed block/jungle_door_bottom_left block/jungle_door_bottom_left_open @@ -1014,43 +1137,57 @@ block/jungle_fence_gate_wall_open block/jungle_fence_inventory block/jungle_fence_post block/jungle_fence_side +block/jungle_hanging_sign_attached_rot_0 +block/jungle_hanging_sign_attached_rot_1 +block/jungle_hanging_sign_attached_rot_2 +block/jungle_hanging_sign_attached_rot_3 block/jungle_hanging_sign +block/jungle_hanging_sign_rot_0 +block/jungle_hanging_sign_rot_1 +block/jungle_hanging_sign_rot_2 +block/jungle_hanging_sign_rot_3 block/jungle_leaves -block/jungle_log block/jungle_log_horizontal +block/jungle_log block/jungle_planks -block/jungle_pressure_plate block/jungle_pressure_plate_down +block/jungle_pressure_plate block/jungle_sapling -block/jungle_shelf block/jungle_shelf_center block/jungle_shelf_inventory +block/jungle_shelf block/jungle_shelf_left block/jungle_shelf_right block/jungle_shelf_unconnected block/jungle_shelf_unpowered block/jungle_sign +block/jungle_sign_rot_0 +block/jungle_sign_rot_1 +block/jungle_sign_rot_2 +block/jungle_sign_rot_3 block/jungle_slab block/jungle_slab_top -block/jungle_stairs block/jungle_stairs_inner +block/jungle_stairs block/jungle_stairs_outer block/jungle_trapdoor_bottom block/jungle_trapdoor_open block/jungle_trapdoor_top +block/jungle_wall_hanging_sign +block/jungle_wall_sign block/jungle_wood block/kelp block/kelp_plant block/ladder -block/lantern block/lantern_hanging +block/lantern block/lapis_block block/lapis_ore block/large_amethyst_bud block/large_fern_bottom block/large_fern_top -block/lava block/lava_cauldron +block/lava block/leaf_litter_1 block/leaf_litter_2 block/leaf_litter_3 @@ -1075,6 +1212,8 @@ block/light_12 block/light_13 block/light_14 block/light_15 +block/light_blue_bed_foot +block/light_blue_bed_head block/light_blue_candle_cake block/light_blue_candle_cake_lit block/light_blue_candle_four_candles @@ -1091,13 +1230,15 @@ block/light_blue_concrete_powder block/light_blue_glazed_terracotta block/light_blue_shulker_box block/light_blue_stained_glass -block/light_blue_stained_glass_pane_noside block/light_blue_stained_glass_pane_noside_alt +block/light_blue_stained_glass_pane_noside block/light_blue_stained_glass_pane_post -block/light_blue_stained_glass_pane_side block/light_blue_stained_glass_pane_side_alt +block/light_blue_stained_glass_pane_side block/light_blue_terracotta block/light_blue_wool +block/light_gray_bed_foot +block/light_gray_bed_head block/light_gray_candle_cake block/light_gray_candle_cake_lit block/light_gray_candle_four_candles @@ -1114,21 +1255,23 @@ block/light_gray_concrete_powder block/light_gray_glazed_terracotta block/light_gray_shulker_box block/light_gray_stained_glass -block/light_gray_stained_glass_pane_noside block/light_gray_stained_glass_pane_noside_alt +block/light_gray_stained_glass_pane_noside block/light_gray_stained_glass_pane_post -block/light_gray_stained_glass_pane_side block/light_gray_stained_glass_pane_side_alt +block/light_gray_stained_glass_pane_side block/light_gray_terracotta block/light_gray_wool -block/light_weighted_pressure_plate -block/light_weighted_pressure_plate_down block/lightning_rod block/lightning_rod_on +block/light_weighted_pressure_plate_down +block/light_weighted_pressure_plate block/lilac_bottom block/lilac_top block/lily_of_the_valley block/lily_pad +block/lime_bed_foot +block/lime_bed_head block/lime_candle_cake block/lime_candle_cake_lit block/lime_candle_four_candles @@ -1145,15 +1288,17 @@ block/lime_concrete_powder block/lime_glazed_terracotta block/lime_shulker_box block/lime_stained_glass -block/lime_stained_glass_pane_noside block/lime_stained_glass_pane_noside_alt +block/lime_stained_glass_pane_noside block/lime_stained_glass_pane_post -block/lime_stained_glass_pane_side block/lime_stained_glass_pane_side_alt +block/lime_stained_glass_pane_side block/lime_terracotta block/lime_wool block/lodestone block/loom +block/magenta_bed_foot +block/magenta_bed_head block/magenta_candle_cake block/magenta_candle_cake_lit block/magenta_candle_four_candles @@ -1170,16 +1315,16 @@ block/magenta_concrete_powder block/magenta_glazed_terracotta block/magenta_shulker_box block/magenta_stained_glass -block/magenta_stained_glass_pane_noside block/magenta_stained_glass_pane_noside_alt +block/magenta_stained_glass_pane_noside block/magenta_stained_glass_pane_post -block/magenta_stained_glass_pane_side block/magenta_stained_glass_pane_side_alt +block/magenta_stained_glass_pane_side block/magenta_terracotta block/magenta_wool block/magma_block -block/mangrove_button block/mangrove_button_inventory +block/mangrove_button block/mangrove_button_pressed block/mangrove_door_bottom_left block/mangrove_door_bottom_left_open @@ -1196,36 +1341,50 @@ block/mangrove_fence_gate_wall_open block/mangrove_fence_inventory block/mangrove_fence_post block/mangrove_fence_side +block/mangrove_hanging_sign_attached_rot_0 +block/mangrove_hanging_sign_attached_rot_1 +block/mangrove_hanging_sign_attached_rot_2 +block/mangrove_hanging_sign_attached_rot_3 block/mangrove_hanging_sign +block/mangrove_hanging_sign_rot_0 +block/mangrove_hanging_sign_rot_1 +block/mangrove_hanging_sign_rot_2 +block/mangrove_hanging_sign_rot_3 block/mangrove_leaves -block/mangrove_log block/mangrove_log_horizontal +block/mangrove_log block/mangrove_planks -block/mangrove_pressure_plate block/mangrove_pressure_plate_down -block/mangrove_propagule +block/mangrove_pressure_plate block/mangrove_propagule_hanging_0 block/mangrove_propagule_hanging_1 block/mangrove_propagule_hanging_2 block/mangrove_propagule_hanging_3 block/mangrove_propagule_hanging_4 +block/mangrove_propagule block/mangrove_roots -block/mangrove_shelf block/mangrove_shelf_center block/mangrove_shelf_inventory +block/mangrove_shelf block/mangrove_shelf_left block/mangrove_shelf_right block/mangrove_shelf_unconnected block/mangrove_shelf_unpowered block/mangrove_sign +block/mangrove_sign_rot_0 +block/mangrove_sign_rot_1 +block/mangrove_sign_rot_2 +block/mangrove_sign_rot_3 block/mangrove_slab block/mangrove_slab_top -block/mangrove_stairs block/mangrove_stairs_inner +block/mangrove_stairs block/mangrove_stairs_outer block/mangrove_trapdoor_bottom block/mangrove_trapdoor_open block/mangrove_trapdoor_top +block/mangrove_wall_hanging_sign +block/mangrove_wall_sign block/mangrove_wood block/medium_amethyst_bud block/melon @@ -1243,68 +1402,68 @@ block/mossy_carpet_side block/mossy_cobblestone block/mossy_cobblestone_slab block/mossy_cobblestone_slab_top -block/mossy_cobblestone_stairs block/mossy_cobblestone_stairs_inner +block/mossy_cobblestone_stairs block/mossy_cobblestone_stairs_outer block/mossy_cobblestone_wall_inventory block/mossy_cobblestone_wall_post block/mossy_cobblestone_wall_side block/mossy_cobblestone_wall_side_tall +block/mossy_stone_bricks block/mossy_stone_brick_slab block/mossy_stone_brick_slab_top -block/mossy_stone_brick_stairs block/mossy_stone_brick_stairs_inner +block/mossy_stone_brick_stairs block/mossy_stone_brick_stairs_outer block/mossy_stone_brick_wall_inventory block/mossy_stone_brick_wall_post block/mossy_stone_brick_wall_side block/mossy_stone_brick_wall_side_tall -block/mossy_stone_bricks block/moving_piston -block/mud +block/mud_bricks block/mud_brick_slab block/mud_brick_slab_top -block/mud_brick_stairs +block/mud_bricks_north_west_mirrored block/mud_brick_stairs_inner +block/mud_brick_stairs block/mud_brick_stairs_outer block/mud_brick_wall_inventory block/mud_brick_wall_post block/mud_brick_wall_side block/mud_brick_wall_side_tall -block/mud_bricks -block/mud_bricks_north_west_mirrored block/muddy_mangrove_roots +block/mud block/mushroom_block_inside -block/mushroom_stem block/mushroom_stem_inventory +block/mushroom_stem block/mycelium block/nether_brick_fence_inventory block/nether_brick_fence_post block/nether_brick_fence_side +block/nether_bricks block/nether_brick_slab block/nether_brick_slab_top -block/nether_brick_stairs block/nether_brick_stairs_inner +block/nether_brick_stairs block/nether_brick_stairs_outer block/nether_brick_wall_inventory block/nether_brick_wall_post block/nether_brick_wall_side block/nether_brick_wall_side_tall -block/nether_bricks block/nether_gold_ore +block/netherite_block block/nether_portal_ew block/nether_portal_ns block/nether_quartz_ore +block/netherrack block/nether_sprouts block/nether_wart_block block/nether_wart_stage0 block/nether_wart_stage1 block/nether_wart_stage2 -block/netherite_block -block/netherrack block/note_block -block/oak_button block/oak_button_inventory +block/oak_button block/oak_button_pressed block/oak_door_bottom_left block/oak_door_bottom_left_open @@ -1321,37 +1480,53 @@ block/oak_fence_gate_wall_open block/oak_fence_inventory block/oak_fence_post block/oak_fence_side +block/oak_hanging_sign_attached_rot_0 +block/oak_hanging_sign_attached_rot_1 +block/oak_hanging_sign_attached_rot_2 +block/oak_hanging_sign_attached_rot_3 block/oak_hanging_sign +block/oak_hanging_sign_rot_0 +block/oak_hanging_sign_rot_1 +block/oak_hanging_sign_rot_2 +block/oak_hanging_sign_rot_3 block/oak_leaves -block/oak_log block/oak_log_horizontal +block/oak_log block/oak_planks -block/oak_pressure_plate block/oak_pressure_plate_down +block/oak_pressure_plate block/oak_sapling -block/oak_shelf block/oak_shelf_center block/oak_shelf_inventory +block/oak_shelf block/oak_shelf_left block/oak_shelf_right block/oak_shelf_unconnected block/oak_shelf_unpowered block/oak_sign +block/oak_sign_rot_0 +block/oak_sign_rot_1 +block/oak_sign_rot_2 +block/oak_sign_rot_3 block/oak_slab block/oak_slab_top -block/oak_stairs block/oak_stairs_inner +block/oak_stairs block/oak_stairs_outer block/oak_trapdoor_bottom block/oak_trapdoor_open block/oak_trapdoor_top +block/oak_wall_hanging_sign +block/oak_wall_sign block/oak_wood block/observer block/observer_on block/obsidian -block/ochre_froglight block/ochre_froglight_horizontal +block/ochre_froglight block/open_eyeblossom +block/orange_bed_foot +block/orange_bed_head block/orange_candle_cake block/orange_candle_cake_lit block/orange_candle_four_candles @@ -1368,11 +1543,11 @@ block/orange_concrete_powder block/orange_glazed_terracotta block/orange_shulker_box block/orange_stained_glass -block/orange_stained_glass_pane_noside block/orange_stained_glass_pane_noside_alt +block/orange_stained_glass_pane_noside block/orange_stained_glass_pane_post -block/orange_stained_glass_pane_side block/orange_stained_glass_pane_side_alt +block/orange_stained_glass_pane_side block/orange_terracotta block/orange_tulip block/orange_wool @@ -1382,13 +1557,12 @@ block/orientable_with_bottom block/outer_stairs block/oxeye_daisy block/oxidized_chiseled_copper -block/oxidized_copper -block/oxidized_copper_bars_cap block/oxidized_copper_bars_cap_alt -block/oxidized_copper_bars_post +block/oxidized_copper_bars_cap block/oxidized_copper_bars_post_ends -block/oxidized_copper_bars_side +block/oxidized_copper_bars_post block/oxidized_copper_bars_side_alt +block/oxidized_copper_bars_side block/oxidized_copper_bulb block/oxidized_copper_bulb_lit block/oxidized_copper_bulb_lit_powered @@ -1405,16 +1579,17 @@ block/oxidized_copper_door_top_right block/oxidized_copper_door_top_right_open block/oxidized_copper_golem_statue block/oxidized_copper_grate -block/oxidized_copper_lantern +block/oxidized_copper block/oxidized_copper_lantern_hanging +block/oxidized_copper_lantern block/oxidized_copper_trapdoor_bottom block/oxidized_copper_trapdoor_open block/oxidized_copper_trapdoor_top block/oxidized_cut_copper block/oxidized_cut_copper_slab block/oxidized_cut_copper_slab_top -block/oxidized_cut_copper_stairs block/oxidized_cut_copper_stairs_inner +block/oxidized_cut_copper_stairs block/oxidized_cut_copper_stairs_outer block/oxidized_lightning_rod block/packed_ice @@ -1425,8 +1600,8 @@ block/pale_moss_block block/pale_moss_carpet block/pale_moss_carpet_side_small block/pale_moss_carpet_side_tall -block/pale_oak_button block/pale_oak_button_inventory +block/pale_oak_button block/pale_oak_button_pressed block/pale_oak_door_bottom_left block/pale_oak_door_bottom_left_open @@ -1443,37 +1618,53 @@ block/pale_oak_fence_gate_wall_open block/pale_oak_fence_inventory block/pale_oak_fence_post block/pale_oak_fence_side +block/pale_oak_hanging_sign_attached_rot_0 +block/pale_oak_hanging_sign_attached_rot_1 +block/pale_oak_hanging_sign_attached_rot_2 +block/pale_oak_hanging_sign_attached_rot_3 block/pale_oak_hanging_sign +block/pale_oak_hanging_sign_rot_0 +block/pale_oak_hanging_sign_rot_1 +block/pale_oak_hanging_sign_rot_2 +block/pale_oak_hanging_sign_rot_3 block/pale_oak_leaves -block/pale_oak_log block/pale_oak_log_horizontal +block/pale_oak_log block/pale_oak_planks -block/pale_oak_pressure_plate block/pale_oak_pressure_plate_down +block/pale_oak_pressure_plate block/pale_oak_sapling -block/pale_oak_shelf block/pale_oak_shelf_center block/pale_oak_shelf_inventory +block/pale_oak_shelf block/pale_oak_shelf_left block/pale_oak_shelf_right block/pale_oak_shelf_unconnected block/pale_oak_shelf_unpowered block/pale_oak_sign +block/pale_oak_sign_rot_0 +block/pale_oak_sign_rot_1 +block/pale_oak_sign_rot_2 +block/pale_oak_sign_rot_3 block/pale_oak_slab block/pale_oak_slab_top -block/pale_oak_stairs block/pale_oak_stairs_inner +block/pale_oak_stairs block/pale_oak_stairs_outer block/pale_oak_trapdoor_bottom block/pale_oak_trapdoor_open block/pale_oak_trapdoor_top +block/pale_oak_wall_hanging_sign +block/pale_oak_wall_sign block/pale_oak_wood -block/pearlescent_froglight block/pearlescent_froglight_horizontal +block/pearlescent_froglight block/peony_bottom block/peony_top block/petrified_oak_slab block/petrified_oak_slab_top +block/pink_bed_foot +block/pink_bed_head block/pink_candle_cake block/pink_candle_cake_lit block/pink_candle_four_candles @@ -1494,15 +1685,14 @@ block/pink_petals_3 block/pink_petals_4 block/pink_shulker_box block/pink_stained_glass -block/pink_stained_glass_pane_noside block/pink_stained_glass_pane_noside_alt +block/pink_stained_glass_pane_noside block/pink_stained_glass_pane_post -block/pink_stained_glass_pane_side block/pink_stained_glass_pane_side_alt +block/pink_stained_glass_pane_side block/pink_terracotta block/pink_tulip block/pink_wool -block/piston block/piston_base block/piston_extended block/piston_head @@ -1510,6 +1700,7 @@ block/piston_head_short block/piston_head_short_sticky block/piston_head_sticky block/piston_inventory +block/piston block/pitcher_crop_bottom_stage_0 block/pitcher_crop_bottom_stage_1 block/pitcher_crop_bottom_stage_2 @@ -1523,12 +1714,12 @@ block/pitcher_crop_top_stage_4 block/pitcher_plant_bottom block/pitcher_plant_top block/podzol -block/pointed_dripstone block/pointed_dripstone_down_base block/pointed_dripstone_down_frustum block/pointed_dripstone_down_middle block/pointed_dripstone_down_tip block/pointed_dripstone_down_tip_merge +block/pointed_dripstone block/pointed_dripstone_up_base block/pointed_dripstone_up_frustum block/pointed_dripstone_up_middle @@ -1537,40 +1728,50 @@ block/pointed_dripstone_up_tip_merge block/polished_andesite block/polished_andesite_slab block/polished_andesite_slab_top -block/polished_andesite_stairs block/polished_andesite_stairs_inner +block/polished_andesite_stairs block/polished_andesite_stairs_outer block/polished_basalt -block/polished_blackstone +block/polished_blackstone_bricks block/polished_blackstone_brick_slab block/polished_blackstone_brick_slab_top -block/polished_blackstone_brick_stairs block/polished_blackstone_brick_stairs_inner +block/polished_blackstone_brick_stairs block/polished_blackstone_brick_stairs_outer block/polished_blackstone_brick_wall_inventory block/polished_blackstone_brick_wall_post block/polished_blackstone_brick_wall_side block/polished_blackstone_brick_wall_side_tall -block/polished_blackstone_bricks -block/polished_blackstone_button block/polished_blackstone_button_inventory +block/polished_blackstone_button block/polished_blackstone_button_pressed -block/polished_blackstone_pressure_plate +block/polished_blackstone block/polished_blackstone_pressure_plate_down +block/polished_blackstone_pressure_plate block/polished_blackstone_slab block/polished_blackstone_slab_top -block/polished_blackstone_stairs block/polished_blackstone_stairs_inner +block/polished_blackstone_stairs block/polished_blackstone_stairs_outer block/polished_blackstone_wall_inventory block/polished_blackstone_wall_post block/polished_blackstone_wall_side block/polished_blackstone_wall_side_tall +block/polished_cinnabar +block/polished_cinnabar_slab +block/polished_cinnabar_slab_top +block/polished_cinnabar_stairs_inner +block/polished_cinnabar_stairs +block/polished_cinnabar_stairs_outer +block/polished_cinnabar_wall_inventory +block/polished_cinnabar_wall_post +block/polished_cinnabar_wall_side +block/polished_cinnabar_wall_side_tall block/polished_deepslate block/polished_deepslate_slab block/polished_deepslate_slab_top -block/polished_deepslate_stairs block/polished_deepslate_stairs_inner +block/polished_deepslate_stairs block/polished_deepslate_stairs_outer block/polished_deepslate_wall_inventory block/polished_deepslate_wall_post @@ -1579,20 +1780,30 @@ block/polished_deepslate_wall_side_tall block/polished_diorite block/polished_diorite_slab block/polished_diorite_slab_top -block/polished_diorite_stairs block/polished_diorite_stairs_inner +block/polished_diorite_stairs block/polished_diorite_stairs_outer block/polished_granite block/polished_granite_slab block/polished_granite_slab_top -block/polished_granite_stairs block/polished_granite_stairs_inner +block/polished_granite_stairs block/polished_granite_stairs_outer +block/polished_sulfur +block/polished_sulfur_slab +block/polished_sulfur_slab_top +block/polished_sulfur_stairs_inner +block/polished_sulfur_stairs +block/polished_sulfur_stairs_outer +block/polished_sulfur_wall_inventory +block/polished_sulfur_wall_post +block/polished_sulfur_wall_side +block/polished_sulfur_wall_side_tall block/polished_tuff block/polished_tuff_slab block/polished_tuff_slab_top -block/polished_tuff_stairs block/polished_tuff_stairs_inner +block/polished_tuff_stairs block/polished_tuff_stairs_outer block/polished_tuff_wall_inventory block/polished_tuff_wall_post @@ -1603,6 +1814,7 @@ block/potatoes_stage0 block/potatoes_stage1 block/potatoes_stage2 block/potatoes_stage3 +block/potent_sulfur block/potted_acacia_sapling block/potted_allium block/potted_azalea_bush @@ -1641,10 +1853,10 @@ block/potted_warped_fungus block/potted_warped_roots block/potted_white_tulip block/potted_wither_rose -block/powder_snow block/powder_snow_cauldron_full block/powder_snow_cauldron_level1 block/powder_snow_cauldron_level2 +block/powder_snow block/powered_rail block/powered_rail_on block/powered_rail_on_raised_ne @@ -1653,17 +1865,17 @@ block/powered_rail_raised_ne block/powered_rail_raised_sw block/pressure_plate_down block/pressure_plate_up -block/prismarine +block/prismarine_bricks block/prismarine_brick_slab block/prismarine_brick_slab_top -block/prismarine_brick_stairs block/prismarine_brick_stairs_inner +block/prismarine_brick_stairs block/prismarine_brick_stairs_outer -block/prismarine_bricks +block/prismarine block/prismarine_slab block/prismarine_slab_top -block/prismarine_stairs block/prismarine_stairs_inner +block/prismarine_stairs block/prismarine_stairs_outer block/prismarine_wall_inventory block/prismarine_wall_post @@ -1678,6 +1890,8 @@ block/pumpkin_stem_stage4 block/pumpkin_stem_stage5 block/pumpkin_stem_stage6 block/pumpkin_stem_stage7 +block/purple_bed_foot +block/purple_bed_head block/purple_candle_cake block/purple_candle_cake_lit block/purple_candle_four_candles @@ -1694,39 +1908,41 @@ block/purple_concrete_powder block/purple_glazed_terracotta block/purple_shulker_box block/purple_stained_glass -block/purple_stained_glass_pane_noside block/purple_stained_glass_pane_noside_alt +block/purple_stained_glass_pane_noside block/purple_stained_glass_pane_post -block/purple_stained_glass_pane_side block/purple_stained_glass_pane_side_alt +block/purple_stained_glass_pane_side block/purple_terracotta block/purple_wool block/purpur_block -block/purpur_pillar block/purpur_pillar_horizontal +block/purpur_pillar block/purpur_slab block/purpur_slab_top -block/purpur_stairs block/purpur_stairs_inner +block/purpur_stairs block/purpur_stairs_outer block/quartz_block block/quartz_bricks -block/quartz_pillar block/quartz_pillar_horizontal +block/quartz_pillar block/quartz_slab block/quartz_slab_top -block/quartz_stairs block/quartz_stairs_inner +block/quartz_stairs block/quartz_stairs_outer -block/rail block/rail_corner block/rail_curved block/rail_flat +block/rail block/rail_raised_ne block/rail_raised_sw block/raw_copper_block block/raw_gold_block block/raw_iron_block +block/red_bed_foot +block/red_bed_head block/red_candle_cake block/red_candle_cake_lit block/red_candle_four_candles @@ -1741,25 +1957,25 @@ block/red_carpet block/red_concrete block/red_concrete_powder block/red_glazed_terracotta -block/red_mushroom -block/red_mushroom_block block/red_mushroom_block_inventory +block/red_mushroom_block +block/red_mushroom +block/red_nether_bricks block/red_nether_brick_slab block/red_nether_brick_slab_top -block/red_nether_brick_stairs block/red_nether_brick_stairs_inner +block/red_nether_brick_stairs block/red_nether_brick_stairs_outer block/red_nether_brick_wall_inventory block/red_nether_brick_wall_post block/red_nether_brick_wall_side block/red_nether_brick_wall_side_tall -block/red_nether_bricks block/red_sand block/red_sandstone block/red_sandstone_slab block/red_sandstone_slab_top -block/red_sandstone_stairs block/red_sandstone_stairs_inner +block/red_sandstone_stairs block/red_sandstone_stairs_outer block/red_sandstone_wall_inventory block/red_sandstone_wall_post @@ -1767,22 +1983,19 @@ block/red_sandstone_wall_side block/red_sandstone_wall_side_tall block/red_shulker_box block/red_stained_glass -block/red_stained_glass_pane_noside block/red_stained_glass_pane_noside_alt +block/red_stained_glass_pane_noside block/red_stained_glass_pane_post -block/red_stained_glass_pane_side block/red_stained_glass_pane_side_alt -block/red_terracotta -block/red_tulip -block/red_wool +block/red_stained_glass_pane_side block/redstone_block block/redstone_dust_dot -block/redstone_dust_side block/redstone_dust_side0 block/redstone_dust_side1 -block/redstone_dust_side_alt block/redstone_dust_side_alt0 block/redstone_dust_side_alt1 +block/redstone_dust_side_alt +block/redstone_dust_side block/redstone_dust_up block/redstone_lamp block/redstone_lamp_on @@ -1791,6 +2004,9 @@ block/redstone_torch block/redstone_torch_off block/redstone_wall_torch block/redstone_wall_torch_off +block/red_terracotta +block/red_tulip +block/red_wool block/reinforced_deepslate block/repeater_1tick block/repeater_1tick_locked @@ -1808,19 +2024,19 @@ block/repeater_4tick block/repeater_4tick_locked block/repeater_4tick_on block/repeater_4tick_on_locked -block/repeating_command_block block/repeating_command_block_conditional +block/repeating_command_block block/resin_block +block/resin_bricks block/resin_brick_slab block/resin_brick_slab_top -block/resin_brick_stairs block/resin_brick_stairs_inner +block/resin_brick_stairs block/resin_brick_stairs_outer block/resin_brick_wall_inventory block/resin_brick_wall_post block/resin_brick_wall_side block/resin_brick_wall_side_tall -block/resin_bricks block/resin_clump block/respawn_anchor_0 block/respawn_anchor_1 @@ -1834,8 +2050,8 @@ block/sand block/sandstone block/sandstone_slab block/sandstone_slab_top -block/sandstone_stairs block/sandstone_stairs_inner +block/sandstone_stairs block/sandstone_stairs_outer block/sandstone_wall_inventory block/sandstone_wall_post @@ -1843,19 +2059,19 @@ block/sandstone_wall_side block/sandstone_wall_side_tall block/scaffolding_stable block/scaffolding_unstable -block/sculk -block/sculk_catalyst block/sculk_catalyst_bloom +block/sculk_catalyst +block/sculk block/sculk_mirrored -block/sculk_sensor block/sculk_sensor_active block/sculk_sensor_inactive -block/sculk_shrieker +block/sculk_sensor block/sculk_shrieker_can_summon +block/sculk_shrieker block/sculk_vein +block/seagrass block/sea_lantern block/sea_pickle -block/seagrass block/short_dry_grass block/short_grass block/shroomlight @@ -1875,24 +2091,24 @@ block/smooth_basalt block/smooth_quartz block/smooth_quartz_slab block/smooth_quartz_slab_top -block/smooth_quartz_stairs block/smooth_quartz_stairs_inner +block/smooth_quartz_stairs block/smooth_quartz_stairs_outer block/smooth_red_sandstone block/smooth_red_sandstone_slab block/smooth_red_sandstone_slab_top -block/smooth_red_sandstone_stairs block/smooth_red_sandstone_stairs_inner +block/smooth_red_sandstone_stairs block/smooth_red_sandstone_stairs_outer block/smooth_sandstone block/smooth_sandstone_slab block/smooth_sandstone_slab_top -block/smooth_sandstone_stairs block/smooth_sandstone_stairs_inner +block/smooth_sandstone_stairs block/smooth_sandstone_stairs_outer block/smooth_stone -block/smooth_stone_slab block/smooth_stone_slab_double +block/smooth_stone_slab block/smooth_stone_slab_top block/sniffer_egg block/sniffer_egg_not_cracked @@ -1913,8 +2129,8 @@ block/soul_fire_side0 block/soul_fire_side1 block/soul_fire_side_alt0 block/soul_fire_side_alt1 -block/soul_lantern block/soul_lantern_hanging +block/soul_lantern block/soul_sand block/soul_soil block/soul_torch @@ -1922,8 +2138,8 @@ block/soul_wall_torch block/spawner block/sponge block/spore_blossom -block/spruce_button block/spruce_button_inventory +block/spruce_button block/spruce_button_pressed block/spruce_door_bottom_left block/spruce_door_bottom_left_open @@ -1940,30 +2156,44 @@ block/spruce_fence_gate_wall_open block/spruce_fence_inventory block/spruce_fence_post block/spruce_fence_side +block/spruce_hanging_sign_attached_rot_0 +block/spruce_hanging_sign_attached_rot_1 +block/spruce_hanging_sign_attached_rot_2 +block/spruce_hanging_sign_attached_rot_3 block/spruce_hanging_sign +block/spruce_hanging_sign_rot_0 +block/spruce_hanging_sign_rot_1 +block/spruce_hanging_sign_rot_2 +block/spruce_hanging_sign_rot_3 block/spruce_leaves -block/spruce_log block/spruce_log_horizontal +block/spruce_log block/spruce_planks -block/spruce_pressure_plate block/spruce_pressure_plate_down +block/spruce_pressure_plate block/spruce_sapling -block/spruce_shelf block/spruce_shelf_center block/spruce_shelf_inventory +block/spruce_shelf block/spruce_shelf_left block/spruce_shelf_right block/spruce_shelf_unconnected block/spruce_shelf_unpowered block/spruce_sign +block/spruce_sign_rot_0 +block/spruce_sign_rot_1 +block/spruce_sign_rot_2 +block/spruce_sign_rot_3 block/spruce_slab block/spruce_slab_top -block/spruce_stairs block/spruce_stairs_inner +block/spruce_stairs block/spruce_stairs_outer block/spruce_trapdoor_bottom block/spruce_trapdoor_open block/spruce_trapdoor_top +block/spruce_wall_hanging_sign +block/spruce_wall_sign block/spruce_wood block/stairs block/stem_fruit @@ -1975,40 +2205,40 @@ block/stem_growth4 block/stem_growth5 block/stem_growth6 block/stem_growth7 -block/sticky_piston block/sticky_piston_inventory -block/stone +block/sticky_piston +block/stone_bricks block/stone_brick_slab block/stone_brick_slab_top -block/stone_brick_stairs block/stone_brick_stairs_inner +block/stone_brick_stairs block/stone_brick_stairs_outer block/stone_brick_wall_inventory block/stone_brick_wall_post block/stone_brick_wall_side block/stone_brick_wall_side_tall -block/stone_bricks -block/stone_button block/stone_button_inventory +block/stone_button block/stone_button_pressed +block/stonecutter +block/stone block/stone_mirrored -block/stone_pressure_plate block/stone_pressure_plate_down +block/stone_pressure_plate block/stone_slab block/stone_slab_top -block/stone_stairs block/stone_stairs_inner +block/stone_stairs block/stone_stairs_outer -block/stonecutter -block/stripped_acacia_log block/stripped_acacia_log_horizontal +block/stripped_acacia_log block/stripped_acacia_wood block/stripped_bamboo_block block/stripped_bamboo_block_x block/stripped_bamboo_block_y block/stripped_bamboo_block_z -block/stripped_birch_log block/stripped_birch_log_horizontal +block/stripped_birch_log block/stripped_birch_wood block/stripped_cherry_log block/stripped_cherry_log_x @@ -2017,33 +2247,63 @@ block/stripped_cherry_log_z block/stripped_cherry_wood block/stripped_crimson_hyphae block/stripped_crimson_stem -block/stripped_dark_oak_log block/stripped_dark_oak_log_horizontal +block/stripped_dark_oak_log block/stripped_dark_oak_wood -block/stripped_jungle_log block/stripped_jungle_log_horizontal +block/stripped_jungle_log block/stripped_jungle_wood -block/stripped_mangrove_log block/stripped_mangrove_log_horizontal +block/stripped_mangrove_log block/stripped_mangrove_wood -block/stripped_oak_log block/stripped_oak_log_horizontal +block/stripped_oak_log block/stripped_oak_wood -block/stripped_pale_oak_log block/stripped_pale_oak_log_horizontal +block/stripped_pale_oak_log block/stripped_pale_oak_wood -block/stripped_spruce_log block/stripped_spruce_log_horizontal +block/stripped_spruce_log block/stripped_spruce_wood block/stripped_warped_hyphae block/stripped_warped_stem -block/structure_block block/structure_block_corner block/structure_block_data +block/structure_block block/structure_block_load block/structure_block_save block/structure_void block/sugar_cane +block/sulfur_bricks +block/sulfur_brick_slab +block/sulfur_brick_slab_top +block/sulfur_brick_stairs_inner +block/sulfur_brick_stairs +block/sulfur_brick_stairs_outer +block/sulfur_brick_wall_inventory +block/sulfur_brick_wall_post +block/sulfur_brick_wall_side +block/sulfur_brick_wall_side_tall +block/sulfur +block/sulfur_slab +block/sulfur_slab_top +block/sulfur_spike_down_base +block/sulfur_spike_down_frustum +block/sulfur_spike_down_middle +block/sulfur_spike_down_tip +block/sulfur_spike_down_tip_merge +block/sulfur_spike_up_base +block/sulfur_spike_up_frustum +block/sulfur_spike_up_middle +block/sulfur_spike_up_tip +block/sulfur_spike_up_tip_merge +block/sulfur_stairs_inner +block/sulfur_stairs +block/sulfur_stairs_outer +block/sulfur_wall_inventory +block/sulfur_wall_post +block/sulfur_wall_side +block/sulfur_wall_side_tall block/sunflower_bottom block/sunflower_top block/suspicious_gravel_0 @@ -2065,13 +2325,20 @@ block/tall_seagrass_bottom block/tall_seagrass_top block/target block/template_anvil +block/template_attached_hanging_sign_rot_0 +block/template_attached_hanging_sign_rot_1 +block/template_attached_hanging_sign_rot_2 +block/template_attached_hanging_sign_rot_3 block/template_azalea -block/template_bars_cap block/template_bars_cap_alt -block/template_bars_post +block/template_bars_cap block/template_bars_post_ends -block/template_bars_side +block/template_bars_post block/template_bars_side_alt +block/template_bars_side +block/template_bed_foot +block/template_bed_head +block/template_bed block/template_cake_with_candle block/template_campfire block/template_candle @@ -2098,19 +2365,23 @@ block/template_fence_gate_open block/template_fence_gate_wall block/template_fence_gate_wall_open block/template_fire_floor -block/template_fire_side block/template_fire_side_alt -block/template_fire_up +block/template_fire_side block/template_fire_up_alt +block/template_fire_up block/template_four_candles block/template_four_turtle_eggs -block/template_glass_pane_noside block/template_glass_pane_noside_alt +block/template_glass_pane_noside block/template_glass_pane_post -block/template_glass_pane_side block/template_glass_pane_side_alt +block/template_glass_pane_side block/template_glazed_terracotta block/template_hanging_lantern +block/template_hanging_sign_rot_0 +block/template_hanging_sign_rot_1 +block/template_hanging_sign_rot_2 +block/template_hanging_sign_rot_3 block/template_item_frame block/template_item_frame_map block/template_lantern @@ -2122,9 +2393,9 @@ block/template_lightning_rod block/template_orientable_trapdoor_bottom block/template_orientable_trapdoor_open block/template_orientable_trapdoor_top -block/template_piston block/template_piston_head block/template_piston_head_short +block/template_piston block/template_potted_azalea_bush block/template_rail_raised_ne block/template_rail_raised_sw @@ -2139,6 +2410,10 @@ block/template_shelf_left block/template_shelf_right block/template_shelf_unconnected block/template_shelf_unpowered +block/template_sign_rot_0 +block/template_sign_rot_1 +block/template_sign_rot_2 +block/template_sign_rot_3 block/template_single_face block/template_three_candles block/template_three_turtle_eggs @@ -2153,9 +2428,11 @@ block/template_turtle_egg block/template_two_candles block/template_two_turtle_eggs block/template_vault +block/template_wall_hanging_sign block/template_wall_post block/template_wall_side block/template_wall_side_tall +block/template_wall_sign block/terracotta block/test_block_accept block/test_block_fail @@ -2172,50 +2449,50 @@ block/tinted_cross block/tinted_flower_pot_cross block/tinted_glass block/tnt -block/torch -block/torchflower block/torchflower_crop_stage0 block/torchflower_crop_stage1 +block/torchflower +block/torch block/trapped_chest -block/trial_spawner block/trial_spawner_active block/trial_spawner_active_ominous block/trial_spawner_ejecting_reward block/trial_spawner_ejecting_reward_ominous block/trial_spawner_inactive_ominous -block/tripwire_attached_n +block/trial_spawner block/tripwire_attached_ne -block/tripwire_attached_ns +block/tripwire_attached_n block/tripwire_attached_nse block/tripwire_attached_nsew -block/tripwire_hook +block/tripwire_attached_ns block/tripwire_hook_attached block/tripwire_hook_attached_on +block/tripwire_hook block/tripwire_hook_on -block/tripwire_n block/tripwire_ne -block/tripwire_ns +block/tripwire_n block/tripwire_nse block/tripwire_nsew -block/tube_coral +block/tripwire_ns block/tube_coral_block block/tube_coral_fan +block/tube_coral block/tube_coral_wall_fan -block/tuff +block/tuff_bricks block/tuff_brick_slab block/tuff_brick_slab_top -block/tuff_brick_stairs block/tuff_brick_stairs_inner +block/tuff_brick_stairs block/tuff_brick_stairs_outer block/tuff_brick_wall_inventory block/tuff_brick_wall_post block/tuff_brick_wall_side block/tuff_brick_wall_side_tall -block/tuff_bricks +block/tuff block/tuff_slab block/tuff_slab_top -block/tuff_stairs block/tuff_stairs_inner +block/tuff_stairs block/tuff_stairs_outer block/tuff_wall_inventory block/tuff_wall_post @@ -2229,22 +2506,22 @@ block/two_sea_pickles block/two_slightly_cracked_turtle_eggs block/two_turtle_eggs block/two_very_cracked_turtle_eggs -block/vault block/vault_active block/vault_active_ominous block/vault_ejecting_reward block/vault_ejecting_reward_ominous +block/vault block/vault_ominous block/vault_unlocking block/vault_unlocking_ominous -block/verdant_froglight block/verdant_froglight_horizontal +block/verdant_froglight block/very_cracked_turtle_egg block/vine block/wall_inventory block/wall_torch -block/warped_button block/warped_button_inventory +block/warped_button block/warped_button_pressed block/warped_door_bottom_left block/warped_door_bottom_left_open @@ -2262,43 +2539,56 @@ block/warped_fence_inventory block/warped_fence_post block/warped_fence_side block/warped_fungus +block/warped_hanging_sign_attached_rot_0 +block/warped_hanging_sign_attached_rot_1 +block/warped_hanging_sign_attached_rot_2 +block/warped_hanging_sign_attached_rot_3 block/warped_hanging_sign +block/warped_hanging_sign_rot_0 +block/warped_hanging_sign_rot_1 +block/warped_hanging_sign_rot_2 +block/warped_hanging_sign_rot_3 block/warped_hyphae block/warped_nylium block/warped_planks -block/warped_pressure_plate block/warped_pressure_plate_down +block/warped_pressure_plate block/warped_roots -block/warped_shelf block/warped_shelf_center block/warped_shelf_inventory +block/warped_shelf block/warped_shelf_left block/warped_shelf_right block/warped_shelf_unconnected block/warped_shelf_unpowered block/warped_sign +block/warped_sign_rot_0 +block/warped_sign_rot_1 +block/warped_sign_rot_2 +block/warped_sign_rot_3 block/warped_slab block/warped_slab_top -block/warped_stairs block/warped_stairs_inner +block/warped_stairs block/warped_stairs_outer block/warped_stem block/warped_trapdoor_bottom block/warped_trapdoor_open block/warped_trapdoor_top +block/warped_wall_hanging_sign +block/warped_wall_sign block/warped_wart_block -block/water block/water_cauldron_full block/water_cauldron_level1 block/water_cauldron_level2 +block/water block/weathered_chiseled_copper -block/weathered_copper -block/weathered_copper_bars_cap block/weathered_copper_bars_cap_alt -block/weathered_copper_bars_post +block/weathered_copper_bars_cap block/weathered_copper_bars_post_ends -block/weathered_copper_bars_side +block/weathered_copper_bars_post block/weathered_copper_bars_side_alt +block/weathered_copper_bars_side block/weathered_copper_bulb block/weathered_copper_bulb_lit block/weathered_copper_bulb_lit_powered @@ -2315,16 +2605,17 @@ block/weathered_copper_door_top_right block/weathered_copper_door_top_right_open block/weathered_copper_golem_statue block/weathered_copper_grate -block/weathered_copper_lantern +block/weathered_copper block/weathered_copper_lantern_hanging +block/weathered_copper_lantern block/weathered_copper_trapdoor_bottom block/weathered_copper_trapdoor_open block/weathered_copper_trapdoor_top block/weathered_cut_copper block/weathered_cut_copper_slab block/weathered_cut_copper_slab_top -block/weathered_cut_copper_stairs block/weathered_cut_copper_stairs_inner +block/weathered_cut_copper_stairs block/weathered_cut_copper_stairs_outer block/weathered_lightning_rod block/weeping_vines @@ -2338,6 +2629,8 @@ block/wheat_stage4 block/wheat_stage5 block/wheat_stage6 block/wheat_stage7 +block/white_bed_foot +block/white_bed_head block/white_candle_cake block/white_candle_cake_lit block/white_candle_four_candles @@ -2354,11 +2647,11 @@ block/white_concrete_powder block/white_glazed_terracotta block/white_shulker_box block/white_stained_glass -block/white_stained_glass_pane_noside block/white_stained_glass_pane_noside_alt +block/white_stained_glass_pane_noside block/white_stained_glass_pane_post -block/white_stained_glass_pane_side block/white_stained_glass_pane_side_alt +block/white_stained_glass_pane_side block/white_terracotta block/white_tulip block/white_wool @@ -2367,6 +2660,8 @@ block/wildflowers_2 block/wildflowers_3 block/wildflowers_4 block/wither_rose +block/yellow_bed_foot +block/yellow_bed_head block/yellow_candle_cake block/yellow_candle_cake_lit block/yellow_candle_four_candles @@ -2383,27 +2678,71 @@ block/yellow_concrete_powder block/yellow_glazed_terracotta block/yellow_shulker_box block/yellow_stained_glass -block/yellow_stained_glass_pane_noside block/yellow_stained_glass_pane_noside_alt +block/yellow_stained_glass_pane_noside block/yellow_stained_glass_pane_post -block/yellow_stained_glass_pane_side block/yellow_stained_glass_pane_side_alt +block/yellow_stained_glass_pane_side block/yellow_terracotta block/yellow_wool +equipment/armadillo_scute +equipment/black_carpet +equipment/blue_carpet +equipment/brown_carpet +equipment/chainmail +equipment/cyan_carpet +equipment/diamond +equipment/elytra +equipment/gold +equipment/gray_carpet +equipment/green_carpet +equipment/iron +equipment/leather +equipment/light_blue_carpet +equipment/light_gray_carpet +equipment/lime_carpet +equipment/magenta_carpet +equipment/netherite +equipment/orange_carpet +equipment/pink_carpet +equipment/purple_carpet +equipment/red_carpet +equipment/trader_llama +equipment/turtle_scute +equipment/white_carpet +equipment/yellow_carpet item/acacia_boat +item/acacia_button item/acacia_chest_boat item/acacia_door +item/acacia_fence_gate +item/acacia_fence item/acacia_hanging_sign +item/acacia_leaves +item/acacia_log +item/acacia_planks +item/acacia_pressure_plate item/acacia_sapling item/acacia_sign +item/acacia_slab +item/acacia_stairs +item/acacia_trapdoor +item/acacia_wood item/activator_rail item/air item/allay_spawn_egg item/allium +item/amethyst_block item/amethyst_bud item/amethyst_cluster item/amethyst_shard +item/ancient_debris +item/andesite +item/andesite_slab +item/andesite_stairs +item/andesite_wall item/angler_pottery_sherd +item/anvil item/apple item/archer_pottery_sherd item/armadillo_scute @@ -2413,149 +2752,233 @@ item/arms_up_pottery_sherd item/arrow item/axolotl_bucket item/axolotl_spawn_egg +item/azalea +item/azalea_leaves item/azure_bluet item/baked_potato -item/bamboo +item/bamboo_block +item/bamboo_button item/bamboo_chest_raft item/bamboo_door +item/bamboo_fence_gate +item/bamboo_fence item/bamboo_hanging_sign +item/bamboo +item/bamboo_mosaic +item/bamboo_mosaic_slab +item/bamboo_mosaic_stairs +item/bamboo_planks +item/bamboo_pressure_plate item/bamboo_raft item/bamboo_sign +item/bamboo_slab +item/bamboo_stairs +item/bamboo_trapdoor +item/barrel item/barrier +item/basalt item/bat_spawn_egg -item/bee_spawn_egg +item/beacon +item/bedrock item/beef +item/beehive_empty +item/beehive_honey +item/beehive +item/bee_nest_empty +item/bee_nest_honey +item/bee_nest +item/bee_spawn_egg item/beetroot item/beetroot_seeds item/beetroot_soup item/bell item/big_dripleaf item/birch_boat +item/birch_button item/birch_chest_boat item/birch_door +item/birch_fence_gate +item/birch_fence item/birch_hanging_sign +item/birch_leaves +item/birch_log +item/birch_planks +item/birch_pressure_plate item/birch_sapling item/birch_sign +item/birch_slab +item/birch_stairs +item/birch_trapdoor +item/birch_wood +item/black_banner item/black_bed item/black_bundle item/black_bundle_open_back item/black_bundle_open_front item/black_candle +item/black_carpet +item/black_concrete +item/black_concrete_powder item/black_dye +item/black_glazed_terracotta item/black_harness item/black_shulker_box +item/black_stained_glass item/black_stained_glass_pane +item/blackstone +item/blackstone_slab +item/blackstone_stairs +item/blackstone_wall +item/black_terracotta +item/black_wool item/blade_pottery_sherd +item/blast_furnace item/blaze_powder item/blaze_rod item/blaze_spawn_egg +item/blue_banner item/blue_bed item/blue_bundle item/blue_bundle_open_back item/blue_bundle_open_front item/blue_candle +item/blue_carpet +item/blue_concrete +item/blue_concrete_powder item/blue_dye item/blue_egg +item/blue_glazed_terracotta item/blue_harness +item/blue_ice item/blue_orchid item/blue_shulker_box +item/blue_stained_glass item/blue_stained_glass_pane +item/blue_terracotta +item/blue_wool item/bogged_spawn_egg item/bolt_armor_trim_smithing_template +item/bone_block item/bone item/bone_meal item/book +item/bookshelf item/bordure_indented_banner_pattern item/bow +item/bowl item/bow_pulling_0 item/bow_pulling_1 item/bow_pulling_2 -item/bowl -item/brain_coral +item/brain_coral_block item/brain_coral_fan +item/brain_coral item/bread item/breeze_rod item/breeze_spawn_egg item/brewer_pottery_sherd item/brewing_stand item/brick +item/bricks +item/brick_slab +item/brick_stairs +item/brick_wall +item/broken_elytra +item/brown_banner item/brown_bed item/brown_bundle item/brown_bundle_open_back item/brown_bundle_open_front item/brown_candle +item/brown_carpet +item/brown_concrete +item/brown_concrete_powder item/brown_dye item/brown_egg +item/brown_glazed_terracotta item/brown_harness +item/brown_mushroom_block item/brown_mushroom item/brown_shulker_box +item/brown_stained_glass item/brown_stained_glass_pane -item/brush +item/brown_terracotta +item/brown_wool item/brush_brushing_0 item/brush_brushing_1 item/brush_brushing_2 -item/bubble_coral +item/brush +item/bubble_coral_block item/bubble_coral_fan +item/bubble_coral item/bucket +item/budding_amethyst +item/bundle_filled item/bundle item/bundle_open_back item/bundle_open_front item/burn_pottery_sherd item/bush item/cactus_flower +item/cactus item/cake +item/calcite +item/calibrated_sculk_sensor item/camel_husk_spawn_egg item/camel_spawn_egg item/campfire item/candle item/carrot item/carrot_on_a_stick +item/cartography_table +item/carved_pumpkin item/cat_spawn_egg item/cauldron item/cave_spider_spawn_egg -item/chainmail_boots +item/chain_command_block +item/chain item/chainmail_boots_amethyst_trim item/chainmail_boots_copper_trim item/chainmail_boots_diamond_trim item/chainmail_boots_emerald_trim item/chainmail_boots_gold_trim item/chainmail_boots_iron_trim +item/chainmail_boots item/chainmail_boots_lapis_trim item/chainmail_boots_netherite_trim item/chainmail_boots_quartz_trim item/chainmail_boots_redstone_trim item/chainmail_boots_resin_trim -item/chainmail_chestplate item/chainmail_chestplate_amethyst_trim item/chainmail_chestplate_copper_trim item/chainmail_chestplate_diamond_trim item/chainmail_chestplate_emerald_trim item/chainmail_chestplate_gold_trim item/chainmail_chestplate_iron_trim +item/chainmail_chestplate item/chainmail_chestplate_lapis_trim item/chainmail_chestplate_netherite_trim item/chainmail_chestplate_quartz_trim item/chainmail_chestplate_redstone_trim item/chainmail_chestplate_resin_trim -item/chainmail_helmet item/chainmail_helmet_amethyst_trim item/chainmail_helmet_copper_trim item/chainmail_helmet_diamond_trim item/chainmail_helmet_emerald_trim item/chainmail_helmet_gold_trim item/chainmail_helmet_iron_trim +item/chainmail_helmet item/chainmail_helmet_lapis_trim item/chainmail_helmet_netherite_trim item/chainmail_helmet_quartz_trim item/chainmail_helmet_redstone_trim item/chainmail_helmet_resin_trim -item/chainmail_leggings item/chainmail_leggings_amethyst_trim item/chainmail_leggings_copper_trim item/chainmail_leggings_diamond_trim item/chainmail_leggings_emerald_trim item/chainmail_leggings_gold_trim item/chainmail_leggings_iron_trim +item/chainmail_leggings item/chainmail_leggings_lapis_trim item/chainmail_leggings_netherite_trim item/chainmail_leggings_quartz_trim @@ -2563,17 +2986,43 @@ item/chainmail_leggings_redstone_trim item/chainmail_leggings_resin_trim item/charcoal item/cherry_boat +item/cherry_button item/cherry_chest_boat item/cherry_door +item/cherry_fence_gate +item/cherry_fence item/cherry_hanging_sign +item/cherry_leaves +item/cherry_log +item/cherry_planks +item/cherry_pressure_plate item/cherry_sapling item/cherry_sign +item/cherry_slab +item/cherry_stairs +item/cherry_trapdoor +item/cherry_wood item/chest item/chest_minecart item/chicken item/chicken_spawn_egg +item/chipped_anvil +item/chiseled_bookshelf +item/chiseled_copper +item/chiseled_deepslate +item/chiseled_nether_bricks +item/chiseled_polished_blackstone +item/chiseled_quartz_block +item/chiseled_red_sandstone +item/chiseled_sandstone +item/chiseled_stone_bricks +item/chiseled_tuff_bricks +item/chiseled_tuff +item/chorus_flower item/chorus_fruit +item/chorus_plant item/clay_ball +item/clay item/clock_00 item/clock_01 item/clock_02 @@ -2638,14 +3087,27 @@ item/clock_60 item/clock_61 item/clock_62 item/clock_63 +item/clock item/closed_eyeblossom +item/coal_block item/coal +item/coal_ore +item/coarse_dirt item/coast_armor_trim_smithing_template +item/cobbled_deepslate +item/cobbled_deepslate_slab +item/cobbled_deepslate_stairs +item/cobbled_deepslate_wall +item/cobblestone +item/cobblestone_slab +item/cobblestone_stairs +item/cobblestone_wall item/cobweb item/cocoa_beans -item/cod item/cod_bucket +item/cod item/cod_spawn_egg +item/command_block item/command_block_minecart item/comparator item/compass_00 @@ -2680,6 +3142,8 @@ item/compass_28 item/compass_29 item/compass_30 item/compass_31 +item/compass +item/composter item/conduit item/cooked_beef item/cooked_chicken @@ -2691,27 +3155,29 @@ item/cooked_salmon item/cookie item/copper_axe item/copper_bars -item/copper_boots +item/copper_block item/copper_boots_amethyst_trim item/copper_boots_copper_trim item/copper_boots_diamond_trim item/copper_boots_emerald_trim item/copper_boots_gold_trim item/copper_boots_iron_trim +item/copper_boots item/copper_boots_lapis_trim item/copper_boots_netherite_trim item/copper_boots_quartz_trim item/copper_boots_redstone_trim item/copper_boots_resin_trim +item/copper_bulb item/copper_chain item/copper_chest -item/copper_chestplate item/copper_chestplate_amethyst_trim item/copper_chestplate_copper_trim item/copper_chestplate_diamond_trim item/copper_chestplate_emerald_trim item/copper_chestplate_gold_trim item/copper_chestplate_iron_trim +item/copper_chestplate item/copper_chestplate_lapis_trim item/copper_chestplate_netherite_trim item/copper_chestplate_quartz_trim @@ -2719,13 +3185,14 @@ item/copper_chestplate_redstone_trim item/copper_chestplate_resin_trim item/copper_door item/copper_golem_spawn_egg -item/copper_helmet +item/copper_grate item/copper_helmet_amethyst_trim item/copper_helmet_copper_trim item/copper_helmet_diamond_trim item/copper_helmet_emerald_trim item/copper_helmet_gold_trim item/copper_helmet_iron_trim +item/copper_helmet item/copper_helmet_lapis_trim item/copper_helmet_netherite_trim item/copper_helmet_quartz_trim @@ -2735,13 +3202,13 @@ item/copper_hoe item/copper_horse_armor item/copper_ingot item/copper_lantern -item/copper_leggings item/copper_leggings_amethyst_trim item/copper_leggings_copper_trim item/copper_leggings_diamond_trim item/copper_leggings_emerald_trim item/copper_leggings_gold_trim item/copper_leggings_iron_trim +item/copper_leggings item/copper_leggings_lapis_trim item/copper_leggings_netherite_trim item/copper_leggings_quartz_trim @@ -2749,92 +3216,171 @@ item/copper_leggings_redstone_trim item/copper_leggings_resin_trim item/copper_nautilus_armor item/copper_nugget +item/copper_ore item/copper_pickaxe item/copper_shovel -item/copper_spear item/copper_spear_in_hand +item/copper_spear item/copper_sword item/copper_torch +item/copper_trapdoor item/cornflower item/cow_spawn_egg +item/cracked_deepslate_bricks +item/cracked_deepslate_tiles +item/cracked_nether_bricks +item/cracked_polished_blackstone_bricks +item/cracked_stone_bricks +item/crafter +item/crafting_table +item/creaking_heart item/creaking_spawn_egg item/creeper_banner_pattern +item/creeper_head item/creeper_spawn_egg +item/crimson_button item/crimson_door +item/crimson_fence_gate +item/crimson_fence item/crimson_fungus item/crimson_hanging_sign +item/crimson_hyphae +item/crimson_nylium +item/crimson_planks +item/crimson_pressure_plate item/crimson_roots item/crimson_sign -item/crossbow +item/crimson_slab +item/crimson_stairs +item/crimson_stem +item/crimson_trapdoor item/crossbow_arrow item/crossbow_firework +item/crossbow item/crossbow_pulling_0 item/crossbow_pulling_1 item/crossbow_pulling_2 +item/crying_obsidian +item/cut_copper +item/cut_copper_slab +item/cut_copper_stairs +item/cut_red_sandstone +item/cut_red_sandstone_slab +item/cut_sandstone +item/cut_sandstone_slab +item/cyan_banner item/cyan_bed item/cyan_bundle item/cyan_bundle_open_back item/cyan_bundle_open_front item/cyan_candle +item/cyan_carpet +item/cyan_concrete +item/cyan_concrete_powder item/cyan_dye +item/cyan_glazed_terracotta item/cyan_harness item/cyan_shulker_box +item/cyan_stained_glass item/cyan_stained_glass_pane +item/cyan_terracotta +item/cyan_wool +item/damaged_anvil item/dandelion item/danger_pottery_sherd item/dark_oak_boat +item/dark_oak_button item/dark_oak_chest_boat item/dark_oak_door +item/dark_oak_fence_gate +item/dark_oak_fence item/dark_oak_hanging_sign +item/dark_oak_leaves +item/dark_oak_log +item/dark_oak_planks +item/dark_oak_pressure_plate item/dark_oak_sapling item/dark_oak_sign -item/dead_brain_coral +item/dark_oak_slab +item/dark_oak_stairs +item/dark_oak_trapdoor +item/dark_oak_wood +item/dark_prismarine +item/dark_prismarine_slab +item/dark_prismarine_stairs +item/daylight_detector +item/dead_brain_coral_block item/dead_brain_coral_fan -item/dead_bubble_coral +item/dead_brain_coral +item/dead_bubble_coral_block item/dead_bubble_coral_fan +item/dead_bubble_coral item/dead_bush -item/dead_fire_coral +item/dead_fire_coral_block item/dead_fire_coral_fan -item/dead_horn_coral +item/dead_fire_coral +item/dead_horn_coral_block item/dead_horn_coral_fan -item/dead_tube_coral +item/dead_horn_coral +item/dead_tube_coral_block item/dead_tube_coral_fan +item/dead_tube_coral item/debug_stick item/decorated_pot +item/deepslate_bricks +item/deepslate_brick_slab +item/deepslate_brick_stairs +item/deepslate_brick_wall +item/deepslate_coal_ore +item/deepslate_copper_ore +item/deepslate_diamond_ore +item/deepslate_emerald_ore +item/deepslate_gold_ore +item/deepslate_iron_ore +item/deepslate +item/deepslate_lapis_ore +item/deepslate_redstone_ore +item/deepslate_tiles +item/deepslate_tile_slab +item/deepslate_tile_stairs +item/deepslate_tile_wall item/detector_rail -item/diamond item/diamond_axe -item/diamond_boots +item/diamond_block item/diamond_boots_amethyst_trim item/diamond_boots_copper_trim +item/diamond_boots_diamond_darker_trim item/diamond_boots_diamond_trim item/diamond_boots_emerald_trim item/diamond_boots_gold_trim item/diamond_boots_iron_trim +item/diamond_boots item/diamond_boots_lapis_trim item/diamond_boots_netherite_trim item/diamond_boots_quartz_trim item/diamond_boots_redstone_trim item/diamond_boots_resin_trim -item/diamond_chestplate item/diamond_chestplate_amethyst_trim item/diamond_chestplate_copper_trim +item/diamond_chestplate_diamond_darker_trim item/diamond_chestplate_diamond_trim item/diamond_chestplate_emerald_trim item/diamond_chestplate_gold_trim item/diamond_chestplate_iron_trim +item/diamond_chestplate item/diamond_chestplate_lapis_trim item/diamond_chestplate_netherite_trim item/diamond_chestplate_quartz_trim item/diamond_chestplate_redstone_trim item/diamond_chestplate_resin_trim -item/diamond_helmet item/diamond_helmet_amethyst_trim item/diamond_helmet_copper_trim +item/diamond_helmet_diamond_darker_trim item/diamond_helmet_diamond_trim item/diamond_helmet_emerald_trim item/diamond_helmet_gold_trim item/diamond_helmet_iron_trim +item/diamond_helmet item/diamond_helmet_lapis_trim item/diamond_helmet_netherite_trim item/diamond_helmet_quartz_trim @@ -2842,85 +3388,125 @@ item/diamond_helmet_redstone_trim item/diamond_helmet_resin_trim item/diamond_hoe item/diamond_horse_armor -item/diamond_leggings +item/diamond item/diamond_leggings_amethyst_trim item/diamond_leggings_copper_trim +item/diamond_leggings_diamond_darker_trim item/diamond_leggings_diamond_trim item/diamond_leggings_emerald_trim item/diamond_leggings_gold_trim item/diamond_leggings_iron_trim +item/diamond_leggings item/diamond_leggings_lapis_trim item/diamond_leggings_netherite_trim item/diamond_leggings_quartz_trim item/diamond_leggings_redstone_trim item/diamond_leggings_resin_trim item/diamond_nautilus_armor +item/diamond_ore item/diamond_pickaxe item/diamond_shovel -item/diamond_spear item/diamond_spear_in_hand +item/diamond_spear item/diamond_sword +item/diorite +item/diorite_slab +item/diorite_stairs +item/diorite_wall +item/dirt +item/dirt_path item/disc_fragment_5 +item/dispenser item/dolphin_spawn_egg item/donkey_spawn_egg item/dragon_breath +item/dragon_egg item/dragon_head +item/dried_kelp_block item/dried_kelp +item/dripstone_block +item/dropper item/drowned_spawn_egg item/dune_armor_trim_smithing_template item/echo_shard item/egg item/elder_guardian_spawn_egg -item/elytra item/elytra_broken +item/elytra +item/emerald_block item/emerald +item/emerald_ore item/enchanted_book item/enchanted_golden_apple +item/enchanting_table item/end_crystal item/ender_chest item/ender_dragon_spawn_egg item/ender_eye -item/ender_pearl item/enderman_spawn_egg item/endermite_spawn_egg +item/ender_pearl +item/end_portal_frame +item/end_rod +item/end_stone_bricks +item/end_stone_brick_slab +item/end_stone_brick_stairs +item/end_stone_brick_wall +item/end_stone item/evoker_spawn_egg item/experience_bottle item/explorer_pottery_sherd +item/exposed_chiseled_copper item/exposed_copper_bars +item/exposed_copper_bulb item/exposed_copper_chain item/exposed_copper_chest item/exposed_copper_door +item/exposed_copper_grate +item/exposed_copper item/exposed_copper_lantern +item/exposed_copper_trapdoor +item/exposed_cut_copper +item/exposed_cut_copper_slab +item/exposed_cut_copper_stairs item/eye_armor_trim_smithing_template +item/farmland item/feather item/fermented_spider_eye item/fern item/field_masoned_banner_pattern item/filled_map item/fire_charge -item/fire_coral +item/fire_coral_block item/fire_coral_fan +item/fire_coral item/firefly_bush item/firework_rocket item/firework_star -item/fishing_rod item/fishing_rod_cast -item/flint +item/fishing_rod +item/fletching_table item/flint_and_steel +item/flint item/flow_armor_trim_smithing_template item/flow_banner_pattern -item/flow_pottery_sherd item/flower_banner_pattern +item/flowering_azalea +item/flowering_azalea_leaves item/flower_pot +item/flow_pottery_sherd item/fox_spawn_egg item/friend_pottery_sherd item/frog_spawn_egg item/frogspawn +item/furnace item/furnace_minecart item/generated item/ghast_spawn_egg item/ghast_tear +item/gilded_blackstone item/glass_bottle +item/glass item/glass_pane item/glistering_melon_slice item/globe_banner_pattern @@ -2930,45 +3516,48 @@ item/glow_item_frame item/glow_lichen item/glow_squid_spawn_egg item/glowstone_dust +item/glowstone item/goat_horn item/goat_spawn_egg -item/gold_ingot -item/gold_nugget +item/gold_block item/golden_apple item/golden_axe -item/golden_boots item/golden_boots_amethyst_trim item/golden_boots_copper_trim item/golden_boots_diamond_trim item/golden_boots_emerald_trim +item/golden_boots_gold_darker_trim item/golden_boots_gold_trim item/golden_boots_iron_trim +item/golden_boots item/golden_boots_lapis_trim item/golden_boots_netherite_trim item/golden_boots_quartz_trim item/golden_boots_redstone_trim item/golden_boots_resin_trim item/golden_carrot -item/golden_chestplate item/golden_chestplate_amethyst_trim item/golden_chestplate_copper_trim item/golden_chestplate_diamond_trim item/golden_chestplate_emerald_trim +item/golden_chestplate_gold_darker_trim item/golden_chestplate_gold_trim item/golden_chestplate_iron_trim +item/golden_chestplate item/golden_chestplate_lapis_trim item/golden_chestplate_netherite_trim item/golden_chestplate_quartz_trim item/golden_chestplate_redstone_trim item/golden_chestplate_resin_trim item/golden_dandelion -item/golden_helmet item/golden_helmet_amethyst_trim item/golden_helmet_copper_trim item/golden_helmet_diamond_trim item/golden_helmet_emerald_trim +item/golden_helmet_gold_darker_trim item/golden_helmet_gold_trim item/golden_helmet_iron_trim +item/golden_helmet item/golden_helmet_lapis_trim item/golden_helmet_netherite_trim item/golden_helmet_quartz_trim @@ -2976,13 +3565,14 @@ item/golden_helmet_redstone_trim item/golden_helmet_resin_trim item/golden_hoe item/golden_horse_armor -item/golden_leggings item/golden_leggings_amethyst_trim item/golden_leggings_copper_trim item/golden_leggings_diamond_trim item/golden_leggings_emerald_trim +item/golden_leggings_gold_darker_trim item/golden_leggings_gold_trim item/golden_leggings_iron_trim +item/golden_leggings item/golden_leggings_lapis_trim item/golden_leggings_netherite_trim item/golden_leggings_quartz_trim @@ -2991,27 +3581,53 @@ item/golden_leggings_resin_trim item/golden_nautilus_armor item/golden_pickaxe item/golden_shovel -item/golden_spear item/golden_spear_in_hand +item/golden_spear item/golden_sword +item/gold_ingot +item/gold_nugget +item/gold_ore +item/granite +item/granite_slab +item/granite_stairs +item/granite_wall +item/grass_block +item/gravel +item/gray_banner item/gray_bed item/gray_bundle item/gray_bundle_open_back item/gray_bundle_open_front item/gray_candle +item/gray_carpet +item/gray_concrete +item/gray_concrete_powder item/gray_dye +item/gray_glazed_terracotta item/gray_harness item/gray_shulker_box +item/gray_stained_glass item/gray_stained_glass_pane +item/gray_terracotta +item/gray_wool +item/green_banner item/green_bed item/green_bundle item/green_bundle_open_back item/green_bundle_open_front item/green_candle +item/green_carpet +item/green_concrete +item/green_concrete_powder item/green_dye +item/green_glazed_terracotta item/green_harness item/green_shulker_box +item/green_stained_glass item/green_stained_glass_pane +item/green_terracotta +item/green_wool +item/grindstone item/guardian_spawn_egg item/gunpowder item/guster_banner_pattern @@ -3021,43 +3637,60 @@ item/handheld_mace item/handheld_rod item/hanging_roots item/happy_ghast_spawn_egg +item/hay_block +item/heartbreak_pottery_sherd item/heart_of_the_sea item/heart_pottery_sherd -item/heartbreak_pottery_sherd +item/heavy_core +item/heavy_weighted_pressure_plate item/hoglin_spawn_egg +item/honey_block item/honey_bottle +item/honeycomb_block item/honeycomb item/hopper item/hopper_minecart -item/horn_coral +item/horn_coral_block item/horn_coral_fan +item/horn_coral item/horse_spawn_egg item/host_armor_trim_smithing_template item/howl_pottery_sherd item/husk_spawn_egg +item/ice +item/infested_chiseled_stone_bricks +item/infested_cobblestone +item/infested_cracked_stone_bricks +item/infested_deepslate +item/infested_mossy_stone_bricks +item/infested_stone_bricks +item/infested_stone item/ink_sac item/iron_axe item/iron_bars -item/iron_boots +item/iron_block item/iron_boots_amethyst_trim item/iron_boots_copper_trim item/iron_boots_diamond_trim item/iron_boots_emerald_trim item/iron_boots_gold_trim +item/iron_boots_iron_darker_trim item/iron_boots_iron_trim +item/iron_boots item/iron_boots_lapis_trim item/iron_boots_netherite_trim item/iron_boots_quartz_trim item/iron_boots_redstone_trim item/iron_boots_resin_trim item/iron_chain -item/iron_chestplate item/iron_chestplate_amethyst_trim item/iron_chestplate_copper_trim item/iron_chestplate_diamond_trim item/iron_chestplate_emerald_trim item/iron_chestplate_gold_trim +item/iron_chestplate_iron_darker_trim item/iron_chestplate_iron_trim +item/iron_chestplate item/iron_chestplate_lapis_trim item/iron_chestplate_netherite_trim item/iron_chestplate_quartz_trim @@ -3065,13 +3698,14 @@ item/iron_chestplate_redstone_trim item/iron_chestplate_resin_trim item/iron_door item/iron_golem_spawn_egg -item/iron_helmet item/iron_helmet_amethyst_trim item/iron_helmet_copper_trim item/iron_helmet_diamond_trim item/iron_helmet_emerald_trim item/iron_helmet_gold_trim +item/iron_helmet_iron_darker_trim item/iron_helmet_iron_trim +item/iron_helmet item/iron_helmet_lapis_trim item/iron_helmet_netherite_trim item/iron_helmet_quartz_trim @@ -3080,13 +3714,14 @@ item/iron_helmet_resin_trim item/iron_hoe item/iron_horse_armor item/iron_ingot -item/iron_leggings item/iron_leggings_amethyst_trim item/iron_leggings_copper_trim item/iron_leggings_diamond_trim item/iron_leggings_emerald_trim item/iron_leggings_gold_trim +item/iron_leggings_iron_darker_trim item/iron_leggings_iron_trim +item/iron_leggings item/iron_leggings_lapis_trim item/iron_leggings_netherite_trim item/iron_leggings_quartz_trim @@ -3094,80 +3729,98 @@ item/iron_leggings_redstone_trim item/iron_leggings_resin_trim item/iron_nautilus_armor item/iron_nugget +item/iron_ore item/iron_pickaxe item/iron_shovel -item/iron_spear item/iron_spear_in_hand +item/iron_spear item/iron_sword +item/iron_trapdoor item/item_frame +item/jack_o_lantern +item/jigsaw +item/jukebox item/jungle_boat +item/jungle_button item/jungle_chest_boat item/jungle_door +item/jungle_fence_gate +item/jungle_fence item/jungle_hanging_sign +item/jungle_leaves +item/jungle_log +item/jungle_planks +item/jungle_pressure_plate item/jungle_sapling item/jungle_sign +item/jungle_slab +item/jungle_stairs +item/jungle_trapdoor +item/jungle_wood item/kelp item/knowledge_book item/ladder item/lantern +item/lapis_block item/lapis_lazuli +item/lapis_ore item/large_amethyst_bud item/large_fern item/lava_bucket item/lead item/leaf_litter -item/leather -item/leather_boots item/leather_boots_amethyst_trim item/leather_boots_copper_trim item/leather_boots_diamond_trim item/leather_boots_emerald_trim item/leather_boots_gold_trim item/leather_boots_iron_trim +item/leather_boots item/leather_boots_lapis_trim item/leather_boots_netherite_trim item/leather_boots_quartz_trim item/leather_boots_redstone_trim item/leather_boots_resin_trim -item/leather_chestplate item/leather_chestplate_amethyst_trim item/leather_chestplate_copper_trim item/leather_chestplate_diamond_trim item/leather_chestplate_emerald_trim item/leather_chestplate_gold_trim item/leather_chestplate_iron_trim +item/leather_chestplate item/leather_chestplate_lapis_trim item/leather_chestplate_netherite_trim item/leather_chestplate_quartz_trim item/leather_chestplate_redstone_trim item/leather_chestplate_resin_trim -item/leather_helmet item/leather_helmet_amethyst_trim item/leather_helmet_copper_trim item/leather_helmet_diamond_trim item/leather_helmet_emerald_trim item/leather_helmet_gold_trim item/leather_helmet_iron_trim +item/leather_helmet item/leather_helmet_lapis_trim item/leather_helmet_netherite_trim item/leather_helmet_quartz_trim item/leather_helmet_redstone_trim item/leather_helmet_resin_trim item/leather_horse_armor -item/leather_leggings +item/leather item/leather_leggings_amethyst_trim item/leather_leggings_copper_trim item/leather_leggings_diamond_trim item/leather_leggings_emerald_trim item/leather_leggings_gold_trim item/leather_leggings_iron_trim +item/leather_leggings item/leather_leggings_lapis_trim item/leather_leggings_netherite_trim item/leather_leggings_quartz_trim item/leather_leggings_redstone_trim item/leather_leggings_resin_trim +item/lectern item/lever -item/light item/light_00 item/light_01 item/light_02 @@ -3184,58 +3837,109 @@ item/light_12 item/light_13 item/light_14 item/light_15 +item/light_blue_banner item/light_blue_bed item/light_blue_bundle item/light_blue_bundle_open_back item/light_blue_bundle_open_front item/light_blue_candle +item/light_blue_carpet +item/light_blue_concrete +item/light_blue_concrete_powder item/light_blue_dye +item/light_blue_glazed_terracotta item/light_blue_harness item/light_blue_shulker_box +item/light_blue_stained_glass item/light_blue_stained_glass_pane +item/light_blue_terracotta +item/light_blue_wool +item/light_gray_banner item/light_gray_bed item/light_gray_bundle item/light_gray_bundle_open_back item/light_gray_bundle_open_front item/light_gray_candle +item/light_gray_carpet +item/light_gray_concrete +item/light_gray_concrete_powder item/light_gray_dye +item/light_gray_glazed_terracotta item/light_gray_harness item/light_gray_shulker_box +item/light_gray_stained_glass item/light_gray_stained_glass_pane +item/light_gray_terracotta +item/light_gray_wool +item/light +item/lightning_rod +item/light_weighted_pressure_plate item/lilac item/lily_of_the_valley item/lily_pad +item/lime_banner item/lime_bed item/lime_bundle item/lime_bundle_open_back item/lime_bundle_open_front item/lime_candle +item/lime_carpet +item/lime_concrete +item/lime_concrete_powder item/lime_dye +item/lime_glazed_terracotta item/lime_harness item/lime_shulker_box +item/lime_stained_glass item/lime_stained_glass_pane +item/lime_terracotta +item/lime_wool item/lingering_potion item/llama_spawn_egg +item/lodestone +item/loom item/mace +item/magenta_banner item/magenta_bed item/magenta_bundle item/magenta_bundle_open_back item/magenta_bundle_open_front item/magenta_candle +item/magenta_carpet +item/magenta_concrete +item/magenta_concrete_powder item/magenta_dye +item/magenta_glazed_terracotta item/magenta_harness item/magenta_shulker_box +item/magenta_stained_glass item/magenta_stained_glass_pane +item/magenta_terracotta +item/magenta_wool +item/magma_block item/magma_cream item/magma_cube_spawn_egg item/mangrove_boat +item/mangrove_button item/mangrove_chest_boat item/mangrove_door +item/mangrove_fence_gate +item/mangrove_fence item/mangrove_hanging_sign +item/mangrove_leaves +item/mangrove_log +item/mangrove_planks +item/mangrove_pressure_plate item/mangrove_propagule +item/mangrove_roots item/mangrove_sign +item/mangrove_slab +item/mangrove_stairs +item/mangrove_trapdoor +item/mangrove_wood item/map item/medium_amethyst_bud +item/melon item/melon_seeds item/melon_slice item/milk_bucket @@ -3243,13 +3947,31 @@ item/minecart item/miner_pottery_sherd item/mojang_banner_pattern item/mooshroom_spawn_egg +item/moss_block +item/moss_carpet +item/mossy_cobblestone +item/mossy_cobblestone_slab +item/mossy_cobblestone_stairs +item/mossy_cobblestone_wall +item/mossy_stone_bricks +item/mossy_stone_brick_slab +item/mossy_stone_brick_stairs +item/mossy_stone_brick_wall item/mourner_pottery_sherd +item/mud_bricks +item/mud_brick_slab +item/mud_brick_stairs +item/mud_brick_wall +item/muddy_mangrove_roots +item/mud item/mule_spawn_egg +item/mushroom_stem item/mushroom_stew item/music_disc_11 item/music_disc_13 item/music_disc_5 item/music_disc_blocks +item/music_disc_bounce item/music_disc_cat item/music_disc_chirp item/music_disc_creator @@ -3268,46 +3990,54 @@ item/music_disc_tears item/music_disc_wait item/music_disc_ward item/mutton +item/mycelium item/name_tag item/nautilus_shell item/nautilus_spawn_egg +item/nether_brick_fence item/nether_brick -item/nether_sprouts -item/nether_star -item/nether_wart +item/nether_bricks +item/nether_brick_slab +item/nether_brick_stairs +item/nether_brick_wall +item/nether_gold_ore item/netherite_axe -item/netherite_boots +item/netherite_block item/netherite_boots_amethyst_trim item/netherite_boots_copper_trim item/netherite_boots_diamond_trim item/netherite_boots_emerald_trim item/netherite_boots_gold_trim item/netherite_boots_iron_trim +item/netherite_boots item/netherite_boots_lapis_trim +item/netherite_boots_netherite_darker_trim item/netherite_boots_netherite_trim item/netherite_boots_quartz_trim item/netherite_boots_redstone_trim item/netherite_boots_resin_trim -item/netherite_chestplate item/netherite_chestplate_amethyst_trim item/netherite_chestplate_copper_trim item/netherite_chestplate_diamond_trim item/netherite_chestplate_emerald_trim item/netherite_chestplate_gold_trim item/netherite_chestplate_iron_trim +item/netherite_chestplate item/netherite_chestplate_lapis_trim +item/netherite_chestplate_netherite_darker_trim item/netherite_chestplate_netherite_trim item/netherite_chestplate_quartz_trim item/netherite_chestplate_redstone_trim item/netherite_chestplate_resin_trim -item/netherite_helmet item/netherite_helmet_amethyst_trim item/netherite_helmet_copper_trim item/netherite_helmet_diamond_trim item/netherite_helmet_emerald_trim item/netherite_helmet_gold_trim item/netherite_helmet_iron_trim +item/netherite_helmet item/netherite_helmet_lapis_trim +item/netherite_helmet_netherite_darker_trim item/netherite_helmet_netherite_trim item/netherite_helmet_quartz_trim item/netherite_helmet_redstone_trim @@ -3315,14 +4045,15 @@ item/netherite_helmet_resin_trim item/netherite_hoe item/netherite_horse_armor item/netherite_ingot -item/netherite_leggings item/netherite_leggings_amethyst_trim item/netherite_leggings_copper_trim item/netherite_leggings_diamond_trim item/netherite_leggings_emerald_trim item/netherite_leggings_gold_trim item/netherite_leggings_iron_trim +item/netherite_leggings item/netherite_leggings_lapis_trim +item/netherite_leggings_netherite_darker_trim item/netherite_leggings_netherite_trim item/netherite_leggings_quartz_trim item/netherite_leggings_redstone_trim @@ -3331,73 +4062,167 @@ item/netherite_nautilus_armor item/netherite_pickaxe item/netherite_scrap item/netherite_shovel -item/netherite_spear item/netherite_spear_in_hand +item/netherite_spear item/netherite_sword item/netherite_upgrade_smithing_template +item/nether_quartz_ore +item/netherrack +item/nether_sprouts +item/nether_star +item/nether_wart_block +item/nether_wart +item/note_block item/oak_boat +item/oak_button item/oak_chest_boat item/oak_door +item/oak_fence_gate +item/oak_fence item/oak_hanging_sign +item/oak_leaves +item/oak_log +item/oak_planks +item/oak_pressure_plate item/oak_sapling item/oak_sign +item/oak_slab +item/oak_stairs +item/oak_trapdoor +item/oak_wood +item/observer +item/obsidian item/ocelot_spawn_egg +item/ochre_froglight item/ominous_bottle item/ominous_trial_key item/open_eyeblossom +item/orange_banner item/orange_bed item/orange_bundle item/orange_bundle_open_back item/orange_bundle_open_front item/orange_candle +item/orange_carpet +item/orange_concrete +item/orange_concrete_powder item/orange_dye +item/orange_glazed_terracotta item/orange_harness item/orange_shulker_box +item/orange_stained_glass item/orange_stained_glass_pane +item/orange_terracotta item/orange_tulip +item/orange_wool item/oxeye_daisy +item/oxidized_chiseled_copper item/oxidized_copper_bars +item/oxidized_copper_bulb item/oxidized_copper_chain item/oxidized_copper_chest item/oxidized_copper_door +item/oxidized_copper_grate +item/oxidized_copper item/oxidized_copper_lantern +item/oxidized_copper_trapdoor +item/oxidized_cut_copper +item/oxidized_cut_copper_slab +item/oxidized_cut_copper_stairs +item/packed_ice +item/packed_mud item/painting item/pale_hanging_moss +item/pale_moss_block +item/pale_moss_carpet item/pale_oak_boat +item/pale_oak_button item/pale_oak_chest_boat item/pale_oak_door +item/pale_oak_fence_gate +item/pale_oak_fence item/pale_oak_hanging_sign +item/pale_oak_leaves +item/pale_oak_log +item/pale_oak_planks +item/pale_oak_pressure_plate item/pale_oak_sapling item/pale_oak_sign +item/pale_oak_slab +item/pale_oak_stairs +item/pale_oak_trapdoor +item/pale_oak_wood item/panda_spawn_egg item/paper item/parched_spawn_egg item/parrot_spawn_egg +item/pearlescent_froglight item/peony +item/petrified_oak_slab item/phantom_membrane item/phantom_spawn_egg -item/pig_spawn_egg item/piglin_banner_pattern item/piglin_brute_spawn_egg +item/piglin_head item/piglin_spawn_egg +item/pig_spawn_egg item/pillager_spawn_egg +item/pink_banner item/pink_bed item/pink_bundle item/pink_bundle_open_back item/pink_bundle_open_front item/pink_candle +item/pink_carpet +item/pink_concrete +item/pink_concrete_powder item/pink_dye +item/pink_glazed_terracotta item/pink_harness item/pink_petals item/pink_shulker_box +item/pink_stained_glass item/pink_stained_glass_pane +item/pink_terracotta item/pink_tulip +item/pink_wool +item/piston item/pitcher_plant item/pitcher_pod +item/player_head item/plenty_pottery_sherd +item/podzol item/pointed_dripstone item/poisonous_potato item/polar_bear_spawn_egg +item/polished_andesite +item/polished_andesite_slab +item/polished_andesite_stairs +item/polished_basalt +item/polished_blackstone_bricks +item/polished_blackstone_brick_slab +item/polished_blackstone_brick_stairs +item/polished_blackstone_brick_wall +item/polished_blackstone_button +item/polished_blackstone +item/polished_blackstone_pressure_plate +item/polished_blackstone_slab +item/polished_blackstone_stairs +item/polished_blackstone_wall +item/polished_deepslate +item/polished_deepslate_slab +item/polished_deepslate_stairs +item/polished_deepslate_wall +item/polished_diorite +item/polished_diorite_slab +item/polished_diorite_stairs +item/polished_granite +item/polished_granite_slab +item/polished_granite_stairs +item/polished_tuff +item/polished_tuff_slab +item/polished_tuff_stairs +item/polished_tuff_wall item/popped_chorus_fruit item/poppy item/porkchop @@ -3405,34 +4230,62 @@ item/potato item/potion item/powder_snow_bucket item/powered_rail +item/prismarine_bricks +item/prismarine_brick_slab +item/prismarine_brick_stairs item/prismarine_crystals +item/prismarine item/prismarine_shard +item/prismarine_slab +item/prismarine_stairs +item/prismarine_wall item/prize_pottery_sherd -item/pufferfish item/pufferfish_bucket +item/pufferfish item/pufferfish_spawn_egg +item/pumpkin item/pumpkin_pie item/pumpkin_seeds +item/purple_banner item/purple_bed item/purple_bundle item/purple_bundle_open_back item/purple_bundle_open_front item/purple_candle +item/purple_carpet +item/purple_concrete +item/purple_concrete_powder item/purple_dye +item/purple_glazed_terracotta item/purple_harness item/purple_shulker_box +item/purple_stained_glass item/purple_stained_glass_pane +item/purple_terracotta +item/purple_wool +item/purpur_block +item/purpur_pillar +item/purpur_slab +item/purpur_stairs +item/quartz_block +item/quartz_bricks item/quartz -item/rabbit +item/quartz_pillar +item/quartz_slab +item/quartz_stairs item/rabbit_foot item/rabbit_hide +item/rabbit item/rabbit_spawn_egg item/rabbit_stew item/rail item/raiser_armor_trim_smithing_template item/ravager_spawn_egg +item/raw_copper_block item/raw_copper +item/raw_gold_block item/raw_gold +item/raw_iron_block item/raw_iron item/recovery_compass_00 item/recovery_compass_01 @@ -3466,101 +4319,214 @@ item/recovery_compass_28 item/recovery_compass_29 item/recovery_compass_30 item/recovery_compass_31 +item/recovery_compass +item/red_banner item/red_bed item/red_bundle item/red_bundle_open_back item/red_bundle_open_front item/red_candle +item/red_carpet +item/red_concrete +item/red_concrete_powder item/red_dye +item/red_glazed_terracotta item/red_harness +item/red_mushroom_block item/red_mushroom +item/red_nether_bricks +item/red_nether_brick_slab +item/red_nether_brick_stairs +item/red_nether_brick_wall +item/red_sand +item/red_sandstone +item/red_sandstone_slab +item/red_sandstone_stairs +item/red_sandstone_wall item/red_shulker_box +item/red_stained_glass item/red_stained_glass_pane -item/red_tulip +item/redstone_block item/redstone +item/redstone_lamp +item/redstone_ore item/redstone_torch +item/red_terracotta +item/red_tulip +item/red_wool +item/reinforced_deepslate item/repeater +item/repeating_command_block item/resin_brick item/resin_clump +item/respawn_anchor item/rib_armor_trim_smithing_template +item/rooted_dirt item/rose_bush item/rotten_flesh item/saddle -item/salmon item/salmon_bucket +item/salmon item/salmon_spawn_egg +item/sand +item/sandstone +item/sandstone_slab +item/sandstone_stairs +item/sandstone_wall +item/scaffolding item/scrape_pottery_sherd +item/sculk_catalyst +item/sculk +item/sculk_sensor +item/sculk_shrieker item/sculk_vein -item/sea_pickle item/seagrass +item/sea_lantern +item/sea_pickle item/sentry_armor_trim_smithing_template item/shaper_armor_trim_smithing_template item/sheaf_pottery_sherd item/shears item/sheep_spawn_egg item/shelter_pottery_sherd -item/shield item/shield_blocking +item/shield item/short_dry_grass item/short_grass +item/shroomlight item/shulker_box item/shulker_shell item/shulker_spawn_egg item/silence_armor_trim_smithing_template item/silverfish_spawn_egg item/skeleton_horse_spawn_egg +item/skeleton_skull item/skeleton_spawn_egg item/skull_banner_pattern item/skull_pottery_sherd item/slime_ball +item/slime_block item/slime_spawn_egg item/small_amethyst_bud item/small_dripleaf +item/smithing_table +item/smoker +item/smooth_basalt +item/smooth_quartz +item/smooth_quartz_slab +item/smooth_quartz_stairs +item/smooth_red_sandstone +item/smooth_red_sandstone_slab +item/smooth_red_sandstone_stairs +item/smooth_sandstone +item/smooth_sandstone_slab +item/smooth_sandstone_stairs +item/smooth_stone +item/smooth_stone_slab item/sniffer_egg item/sniffer_spawn_egg item/snort_pottery_sherd item/snout_armor_trim_smithing_template -item/snow_golem_spawn_egg item/snowball +item/snow_block +item/snow_golem_spawn_egg +item/snow item/soul_campfire item/soul_lantern +item/soul_sand +item/soul_soil item/soul_torch +item/spawner item/spear_in_hand item/spectral_arrow item/spider_eye item/spider_spawn_egg item/spire_armor_trim_smithing_template item/splash_potion +item/sponge +item/spore_blossom item/spruce_boat +item/spruce_button item/spruce_chest_boat item/spruce_door +item/spruce_fence_gate +item/spruce_fence item/spruce_hanging_sign +item/spruce_leaves +item/spruce_log +item/spruce_planks +item/spruce_pressure_plate item/spruce_sapling item/spruce_sign -item/spyglass +item/spruce_slab +item/spruce_stairs +item/spruce_trapdoor +item/spruce_wood item/spyglass_in_hand +item/spyglass item/squid_spawn_egg item/stick +item/sticky_piston item/stone_axe +item/stone_bricks +item/stone_brick_slab +item/stone_brick_stairs +item/stone_brick_wall +item/stone_button +item/stonecutter item/stone_hoe +item/stone item/stone_pickaxe +item/stone_pressure_plate item/stone_shovel -item/stone_spear +item/stone_slab item/stone_spear_in_hand +item/stone_spear +item/stone_stairs item/stone_sword item/stray_spawn_egg item/strider_spawn_egg item/string +item/stripped_acacia_log +item/stripped_acacia_wood +item/stripped_bamboo_block +item/stripped_birch_log +item/stripped_birch_wood +item/stripped_cherry_log +item/stripped_cherry_wood +item/stripped_crimson_hyphae +item/stripped_crimson_stem +item/stripped_dark_oak_log +item/stripped_dark_oak_wood +item/stripped_jungle_log +item/stripped_jungle_wood +item/stripped_mangrove_log +item/stripped_mangrove_wood +item/stripped_oak_log +item/stripped_oak_wood +item/stripped_pale_oak_log +item/stripped_pale_oak_wood +item/stripped_spruce_log +item/stripped_spruce_wood +item/stripped_warped_hyphae +item/stripped_warped_stem +item/structure_block item/structure_void -item/sugar item/sugar_cane +item/sugar +item/sulfur_cube_bucket +item/sulfur_cube_spawn_egg +item/sulfur_spike item/sunflower +item/suspicious_gravel +item/suspicious_sand item/suspicious_stew item/sweet_berries item/tadpole_bucket item/tadpole_spawn_egg item/tall_dry_grass item/tall_grass +item/target item/template_banner item/template_bed item/template_bundle_open_back @@ -3570,34 +4536,48 @@ item/template_copper_golem_statue item/template_music_disc item/template_shulker_box item/template_skull +item/template_spawn_egg +item/terracotta item/tide_armor_trim_smithing_template +item/tinted_glass item/tipped_arrow +item/tnt item/tnt_minecart item/tooting_goat_horn -item/torch item/torchflower item/torchflower_seeds +item/torch item/totem_of_undying item/trader_llama_spawn_egg item/trapped_chest item/trial_key -item/trident +item/trial_spawner item/trident_in_hand +item/trident item/trident_throwing item/tripwire_hook -item/tropical_fish item/tropical_fish_bucket +item/tropical_fish item/tropical_fish_spawn_egg -item/tube_coral +item/tube_coral_block item/tube_coral_fan +item/tube_coral +item/tuff_bricks +item/tuff_brick_slab +item/tuff_brick_stairs +item/tuff_brick_wall +item/tuff +item/tuff_slab +item/tuff_stairs +item/tuff_wall item/turtle_egg -item/turtle_helmet item/turtle_helmet_amethyst_trim item/turtle_helmet_copper_trim item/turtle_helmet_diamond_trim item/turtle_helmet_emerald_trim item/turtle_helmet_gold_trim item/turtle_helmet_iron_trim +item/turtle_helmet item/turtle_helmet_lapis_trim item/turtle_helmet_netherite_trim item/turtle_helmet_quartz_trim @@ -3606,6 +4586,8 @@ item/turtle_helmet_resin_trim item/turtle_scute item/turtle_spawn_egg item/twisting_vines +item/vault +item/verdant_froglight item/vex_armor_trim_smithing_template item/vex_spawn_egg item/villager_spawn_egg @@ -3614,61 +4596,136 @@ item/vine item/wandering_trader_spawn_egg item/ward_armor_trim_smithing_template item/warden_spawn_egg +item/warped_button item/warped_door +item/warped_fence_gate +item/warped_fence item/warped_fungus item/warped_fungus_on_a_stick item/warped_hanging_sign +item/warped_hyphae +item/warped_nylium +item/warped_planks +item/warped_pressure_plate item/warped_roots item/warped_sign +item/warped_slab +item/warped_stairs +item/warped_stem +item/warped_trapdoor +item/warped_wart_block item/water_bucket +item/waxed_chiseled_copper +item/waxed_copper_block +item/waxed_copper_bulb +item/waxed_copper_door +item/waxed_copper_grate +item/waxed_copper_trapdoor +item/waxed_cut_copper +item/waxed_cut_copper_slab +item/waxed_cut_copper_stairs +item/waxed_exposed_chiseled_copper +item/waxed_exposed_copper_bulb +item/waxed_exposed_copper_door +item/waxed_exposed_copper_grate +item/waxed_exposed_copper +item/waxed_exposed_copper_trapdoor +item/waxed_exposed_cut_copper +item/waxed_exposed_cut_copper_slab +item/waxed_exposed_cut_copper_stairs +item/waxed_oxidized_chiseled_copper +item/waxed_oxidized_copper_bulb +item/waxed_oxidized_copper_door +item/waxed_oxidized_copper_grate +item/waxed_oxidized_copper +item/waxed_oxidized_copper_trapdoor +item/waxed_oxidized_cut_copper +item/waxed_oxidized_cut_copper_slab +item/waxed_oxidized_cut_copper_stairs +item/waxed_weathered_chiseled_copper +item/waxed_weathered_copper_bulb +item/waxed_weathered_copper_door +item/waxed_weathered_copper_grate +item/waxed_weathered_copper +item/waxed_weathered_copper_trapdoor +item/waxed_weathered_cut_copper +item/waxed_weathered_cut_copper_slab +item/waxed_weathered_cut_copper_stairs item/wayfinder_armor_trim_smithing_template +item/weathered_chiseled_copper item/weathered_copper_bars +item/weathered_copper_bulb item/weathered_copper_chain item/weathered_copper_chest item/weathered_copper_door +item/weathered_copper_grate +item/weathered_copper item/weathered_copper_lantern +item/weathered_copper_trapdoor +item/weathered_cut_copper +item/weathered_cut_copper_slab +item/weathered_cut_copper_stairs item/weeping_vines +item/wet_sponge item/wheat item/wheat_seeds +item/white_banner item/white_bed item/white_bundle item/white_bundle_open_back item/white_bundle_open_front item/white_candle +item/white_carpet +item/white_concrete +item/white_concrete_powder item/white_dye +item/white_glazed_terracotta item/white_harness item/white_shulker_box +item/white_stained_glass item/white_stained_glass_pane +item/white_terracotta item/white_tulip +item/white_wool item/wild_armor_trim_smithing_template item/wildflowers item/wind_charge item/witch_spawn_egg item/wither_rose +item/wither_skeleton_skull item/wither_skeleton_spawn_egg item/wither_spawn_egg -item/wolf_armor item/wolf_armor_dyed +item/wolf_armor item/wolf_spawn_egg item/wooden_axe item/wooden_hoe item/wooden_pickaxe item/wooden_shovel -item/wooden_spear item/wooden_spear_in_hand +item/wooden_spear item/wooden_sword item/writable_book item/written_book +item/yellow_banner item/yellow_bed item/yellow_bundle item/yellow_bundle_open_back item/yellow_bundle_open_front item/yellow_candle +item/yellow_carpet +item/yellow_concrete +item/yellow_concrete_powder item/yellow_dye +item/yellow_glazed_terracotta item/yellow_harness item/yellow_shulker_box +item/yellow_stained_glass item/yellow_stained_glass_pane +item/yellow_terracotta +item/yellow_wool item/zoglin_spawn_egg +item/zombie_head item/zombie_horse_spawn_egg item/zombie_nautilus_spawn_egg item/zombie_spawn_egg diff --git a/packobf/src/minecraft/sounds.txt b/packobf/src/minecraft/sounds.txt index fc3266d..0b41777 100644 --- a/packobf/src/minecraft/sounds.txt +++ b/packobf/src/minecraft/sounds.txt @@ -1,4079 +1,932 @@ -damage/hit1 -damage/fallbig -damage/hit2 -damage/hit3 -damage/fallsmall -item/honeycomb/wax_on1 -item/honeycomb/wax_on3 -item/honeycomb/wax_on2 -item/spyglass/use -item/spyglass/stop -item/bonemeal/bonemeal1 -item/bonemeal/bonemeal4 -item/bonemeal/bonemeal3 -item/bonemeal/bonemeal2 -item/bonemeal/bonemeal5 -item/trident/pierce1 -item/trident/ground_impact1 -item/trident/return2 -item/trident/ground_impact3 -item/trident/throw2 -item/trident/return1 -item/trident/ground_impact2 -item/trident/pierce3 -item/trident/riptide2 -item/trident/riptide3 -item/trident/riptide1 -item/trident/ground_impact4 -item/trident/thunder2 -item/trident/pierce2 -item/trident/throw1 -item/trident/return3 -item/trident/thunder1 -item/bottle/drink_honey3 -item/bottle/fill3 -item/bottle/fill_dragonbreath2 -item/bottle/empty1 -item/bottle/fill1 -item/bottle/empty2 -item/bottle/fill4 -item/bottle/fill2 -item/bottle/fill_dragonbreath1 -item/bottle/drink_honey1 -item/bottle/drink_honey2 -item/bundle/remove_one3 -item/bundle/insert1 -item/bundle/remove_one2 -item/bundle/drop_contents1 -item/bundle/insert3 -item/bundle/drop_contents3 -item/bundle/insert_fail -item/bundle/remove_one1 -item/bundle/insert2 -item/bundle/drop_contents2 -item/brush/brushing_gravel_complete1 -item/brush/brush_sand_complete1 -item/brush/brush_sand_complete4 -item/brush/brushing_gravel_complete4 -item/brush/brush_sand_complete3 -item/brush/brushing_sand4 -item/brush/brushing_gravel3 -item/brush/brushing_generic4 -item/brush/brushing_gravel4 -item/brush/brushing_generic2 -item/brush/brushing_gravel1 -item/brush/brushing_gravel2 -item/brush/brushing_gravel_complete2 -item/brush/brushing_generic3 -item/brush/brush_sand_complete5 -item/brush/brushing_generic1 -item/brush/brush_sand_complete2 -item/brush/brushing_sand3 -item/brush/brushing_sand2 -item/brush/brushing_sand1 -item/brush/brushing_gravel_complete3 -item/axe/wax_off3 -item/axe/strip1 -item/axe/strip3 -item/axe/wax_off2 -item/axe/strip4 -item/axe/scrape3 -item/axe/scrape1 -item/axe/scrape2 -item/axe/strip2 -item/axe/wax_off1 -item/hoe/till1 -item/hoe/till4 -item/hoe/till2 -item/hoe/till3 -item/shovel/flatten4 -item/shovel/flatten1 -item/shovel/flatten3 -item/shovel/flatten2 -item/dye/dye -item/plant/netherwart4 -item/plant/netherwart5 -item/plant/netherwart6 -item/plant/crop5 -item/plant/netherwart1 -item/plant/netherwart3 -item/plant/crop3 -item/plant/crop2 -item/plant/crop6 -item/plant/crop4 -item/plant/crop1 -item/plant/netherwart2 -item/goat_horn/call4 -item/goat_horn/call1 -item/goat_horn/call5 -item/goat_horn/call6 -item/goat_horn/call0 -item/goat_horn/call2 -item/goat_horn/call7 -item/goat_horn/call3 -item/totem/use_totem -item/mace/smash_ground3 -item/mace/smash_air3 -item/mace/smash_air1 -item/mace/smash_ground4 -item/mace/smash_ground1 -item/mace/smash_ground2 -item/mace/smash_air2 -item/mace/smash_ground_heavy -item/bucket/fill_axolotl1 -item/bucket/fill_powder_snow2 -item/bucket/fill3 -item/bucket/fill_powder_snow1 -item/bucket/empty_fish1 -item/bucket/fill_axolotl3 -item/bucket/empty3 -item/bucket/empty1 -item/bucket/fill_lava3 -item/bucket/fill_fish1 -item/bucket/fill1 -item/bucket/fill_fish3 -item/bucket/empty_lava2 -item/bucket/empty2 -item/bucket/empty_fish3 -item/bucket/empty_lava3 -item/bucket/fill2 -item/bucket/empty_powder_snow2 -item/bucket/fill_fish2 -item/bucket/empty_fish2 -item/bucket/empty_lava1 -item/bucket/fill_lava2 -item/bucket/fill_axolotl2 -item/bucket/empty_powder_snow1 -item/bucket/fill_lava1 -item/golden_dandelion/use -item/golden_dandelion/unuse -item/crossbow/loading_start -item/crossbow/loading_middle3 -item/crossbow/loading_middle4 -item/crossbow/loading_middle2 -item/crossbow/loading_end -item/crossbow/loading_middle1 -item/crossbow/shoot3 -item/crossbow/quick_charge/quick1_1 -item/crossbow/quick_charge/quick3_1 -item/crossbow/quick_charge/quick2_3 -item/crossbow/quick_charge/quick2_2 -item/crossbow/quick_charge/quick1_2 -item/crossbow/quick_charge/quick3_3 -item/crossbow/quick_charge/quick3_2 -item/crossbow/quick_charge/quick1_3 -item/crossbow/quick_charge/quick2_1 -item/crossbow/shoot2 -item/crossbow/shoot1 -item/shield/block1 -item/shield/block5 -item/shield/block2 -item/shield/block3 -item/shield/block4 -item/ink_sac/ink_sac3 -item/ink_sac/ink_sac2 -item/ink_sac/ink_sac1 -item/elytra/elytra_loop -item/ominous_bottle/dispose -item/sweet_berries/pick_from_bush1 -item/sweet_berries/pick_from_bush2 -item/book/open_flip3 -item/book/close_put1 -item/book/close_put2 -item/book/open_flip2 -item/book/open_flip1 -item/armor/equip_chain2 -item/armor/equip_copper1 -item/armor/equip_iron5 -item/armor/equip_copper2 -item/armor/equip_iron6 -item/armor/equip_gold5 -item/armor/equip_gold2 -item/armor/repair_wolf1 -item/armor/equip_generic2 -item/armor/crack_wolf3 -item/armor/crack_wolf4 -item/armor/crack_wolf2 -item/armor/equip_leather1 -item/armor/equip_leather5 -item/armor/equip_leather3 -item/armor/repair_wolf2 -item/armor/equip_gold6 -item/armor/repair_wolf4 -item/armor/unequip_wolf2 -item/armor/crack_wolf1 -item/armor/equip_chain3 -item/armor/equip_wolf1 -item/armor/equip_diamond4 -item/armor/equip_leather2 -item/armor/equip_chain1 -item/armor/equip_iron2 -item/armor/equip_diamond5 -item/armor/break_wolf -item/armor/equip_diamond1 -item/armor/equip_chain6 -item/armor/equip_generic4 -item/armor/equip_generic3 -item/armor/equip_chain4 -item/armor/equip_copper6 -item/armor/equip_iron3 -item/armor/equip_leather4 -item/armor/equip_gold4 -item/armor/damage_wolf1 -item/armor/equip_diamond6 -item/armor/damage_wolf3 -item/armor/repair_wolf3 -item/armor/equip_wolf2 -item/armor/equip_iron4 -item/armor/equip_chain5 -item/armor/equip_copper3 -item/armor/equip_copper5 -item/armor/equip_leather6 -item/armor/equip_copper4 -item/armor/equip_iron1 -item/armor/equip_generic1 -item/armor/equip_netherite3 -item/armor/equip_generic5 -item/armor/equip_netherite1 -item/armor/equip_generic6 -item/armor/equip_gold3 -item/armor/equip_diamond2 -item/armor/unequip_wolf1 -item/armor/equip_netherite4 -item/armor/damage_wolf4 -item/armor/damage_wolf2 -item/armor/equip_gold1 -item/armor/equip_diamond3 -item/armor/equip_netherite2 -item/spear/use -item/spear/hit1 -item/spear/attack3 -item/spear/attack2 -item/spear/hit2 -item/spear/lunge2 -item/spear/hit3 -item/spear/lunge1 -item/spear/wood/use -item/spear/wood/hit1 -item/spear/wood/attack3 -item/spear/wood/attack2 -item/spear/wood/hit2 -item/spear/wood/hit3 -item/spear/wood/attack1 -item/spear/lunge3 -item/spear/attack1 -entity/itemframe/add_item4 -entity/itemframe/break1 -entity/itemframe/rotate_item2 -entity/itemframe/rotate_item3 -entity/itemframe/add_item1 -entity/itemframe/break2 -entity/itemframe/place2 -entity/itemframe/remove_item2 -entity/itemframe/break3 -entity/itemframe/add_item2 -entity/itemframe/remove_item3 -entity/itemframe/add_item3 -entity/itemframe/place4 -entity/itemframe/place3 -entity/itemframe/remove_item4 -entity/itemframe/remove_item1 -entity/itemframe/rotate_item1 -entity/itemframe/place1 -entity/itemframe/rotate_item4 -entity/boat/paddle_water1 -entity/boat/paddle_land6 -entity/boat/paddle_water8 -entity/boat/paddle_water7 -entity/boat/paddle_land2 -entity/boat/paddle_water2 -entity/boat/paddle_water5 -entity/boat/paddle_water3 -entity/boat/paddle_land5 -entity/boat/paddle_land1 -entity/boat/paddle_land3 -entity/boat/paddle_water4 -entity/boat/paddle_water6 -entity/boat/paddle_land4 -entity/endereye/dead1 -entity/endereye/endereye_launch1 -entity/endereye/endereye_launch2 -entity/endereye/dead2 -entity/witch/hurt2 -entity/witch/throw2 -entity/witch/ambient4 -entity/witch/death2 -entity/witch/ambient2 -entity/witch/hurt1 -entity/witch/drink4 -entity/witch/ambient3 -entity/witch/death1 -entity/witch/drink1 -entity/witch/drink2 -entity/witch/death3 -entity/witch/ambient5 -entity/witch/celebrate -entity/witch/ambient1 -entity/witch/drink3 -entity/witch/hurt3 -entity/witch/throw1 -entity/witch/throw3 -entity/painting/break1 -entity/painting/break2 -entity/painting/place2 -entity/painting/break3 -entity/painting/place4 -entity/painting/place3 -entity/painting/place1 -entity/leashknot/unleash1 -entity/leashknot/leash3 -entity/leashknot/leash1 -entity/leashknot/unleash2 -entity/leashknot/leash2 -entity/leashknot/unleash3 -entity/leashknot/break -entity/player/hurt/freeze_hurt4 -entity/player/hurt/fire_hurt3 -entity/player/hurt/drown1 -entity/player/hurt/berrybush_hurt1 -entity/player/hurt/berrybush_hurt2 -entity/player/hurt/fire_hurt1 -entity/player/hurt/drown3 -entity/player/hurt/freeze_hurt3 -entity/player/hurt/drown2 -entity/player/hurt/freeze_hurt2 -entity/player/hurt/freeze_hurt5 -entity/player/hurt/drown4 -entity/player/hurt/freeze_hurt1 -entity/player/hurt/fire_hurt2 -entity/player/attack/weak2 -entity/player/attack/weak4 -entity/player/attack/sweep3 -entity/player/attack/strong4 -entity/player/attack/sweep1 -entity/player/attack/strong3 -entity/player/attack/weak3 -entity/player/attack/knockback2 -entity/player/attack/strong2 -entity/player/attack/crit1 -entity/player/attack/sweep4 -entity/player/attack/strong6 -entity/player/attack/sweep6 -entity/player/attack/crit3 -entity/player/attack/strong1 -entity/player/attack/knockback3 -entity/player/attack/knockback1 -entity/player/attack/sweep2 -entity/player/attack/sweep7 -entity/player/attack/crit2 -entity/player/attack/sweep5 -entity/player/attack/strong5 -entity/player/attack/knockback4 -entity/player/attack/weak1 -entity/shulker/open5 -entity/shulker/hurt2 -entity/shulker/ambient4 -entity/shulker/close5 -entity/shulker/open4 -entity/shulker/shoot4 -entity/shulker/hurt_closed5 -entity/shulker/hurt_closed1 -entity/shulker/death2 -entity/shulker/ambient2 -entity/shulker/hurt1 -entity/shulker/ambient3 -entity/shulker/shoot3 -entity/shulker/open3 -entity/shulker/open2 -entity/shulker/close2 -entity/shulker/open1 -entity/shulker/close1 -entity/shulker/death1 -entity/shulker/close3 -entity/shulker/hurt_closed4 -entity/shulker/ambient6 -entity/shulker/death3 -entity/shulker/ambient5 -entity/shulker/shoot2 -entity/shulker/ambient7 -entity/shulker/ambient1 -entity/shulker/close4 -entity/shulker/hurt_closed2 -entity/shulker/hurt3 -entity/shulker/shoot1 -entity/shulker/hurt4 -entity/shulker/hurt_closed3 -entity/shulker/death4 -entity/fish/hurt2 -entity/fish/swim2 -entity/fish/flop1 -entity/fish/swim7 -entity/fish/swim4 -entity/fish/flop4 -entity/fish/hurt1 -entity/fish/swim3 -entity/fish/swim5 -entity/fish/swim6 -entity/fish/hurt3 -entity/fish/swim1 -entity/fish/flop3 -entity/fish/hurt4 -entity/fish/flop2 -entity/snowman/hurt2 -entity/snowman/death2 -entity/snowman/hurt1 -entity/snowman/death1 -entity/snowman/death3 -entity/snowman/hurt3 -entity/armorstand/break1 -entity/armorstand/hit1 -entity/armorstand/hit4 -entity/armorstand/break2 -entity/armorstand/break3 -entity/armorstand/break4 -entity/armorstand/hit2 -entity/armorstand/hit3 -entity/wind_charge/wind_burst1 -entity/wind_charge/wind_burst2 -entity/wind_charge/wind_burst3 -entity/shulker_bullet/hit1 -entity/shulker_bullet/hit4 -entity/shulker_bullet/hit2 -entity/shulker_bullet/hit3 -entity/cow/milk2 -entity/cow/milk1 -entity/cow/milk3 -entity/bobber/retrieve3 -entity/bobber/retrieve1 -entity/bobber/retrieve2 -entity/bobber/castfast -records/strad -records/tears -records/mall -records/wait -records/ward -records/creator_music_box -records/far -records/lava_chicken -records/13 -records/mellohi -records/relic -records/precipice -records/cat -records/stal -records/11 -records/5 -records/otherside -records/blocks -records/chirp -records/creator -records/pigstep -minecart/base -minecart/inside -minecart/inside_underwater3 -minecart/inside_underwater2 -minecart/inside_underwater1 -note/pling -note/banjo -note/bit -note/harp2 -note/bass -note/trumpet_oxidized -note/iron_xylophone -note/bassattack -note/bell -note/harp -note/didgeridoo -note/trumpet_weathered -note/snare -note/bd -note/hat -note/cow_bell -note/trumpet_exposed -note/trumpet -note/xylobone -note/icechime -note/flute -note/guitar -event/mob_effects/raid_omen -event/mob_effects/trial_omen -event/mob_effects/bad_omen -event/raid/raidhorn_01 -event/raid/raidhorn_04 -event/raid/raidhorn_03 -event/raid/raidhorn_02 -ui/cartography_table/drawmap3 -ui/cartography_table/drawmap2 -ui/cartography_table/drawmap1 -ui/toast/out -ui/toast/in -ui/toast/challenge_complete -ui/stonecutter/cut1 -ui/stonecutter/cut2 -ui/hud/hud_bubble -ui/loom/select_pattern5 -ui/loom/select_pattern4 -ui/loom/select_pattern2 -ui/loom/take_result2 -ui/loom/select_pattern1 -ui/loom/select_pattern3 -ui/loom/take_result1 -fire/ignite -fire/fire -liquid/heavy_splash -liquid/swim17 -liquid/swim15 -liquid/swim13 -liquid/swim9 -liquid/swim12 -liquid/swim2 -liquid/swim7 -liquid/swim18 -liquid/splash -liquid/swim16 -liquid/swim4 -liquid/splash2 -liquid/water -liquid/swim10 -liquid/lava -liquid/lavapop -liquid/swim3 -liquid/swim14 -liquid/swim8 -liquid/swim5 -liquid/swim6 -liquid/swim1 -liquid/swim11 -mob/creaking/creaking_freeze3 -mob/creaking/creaking_idle2 -mob/creaking/creaking_sway1 -mob/creaking/creaking_idle3 -mob/creaking/creaking_idle1 -mob/creaking/creaking_death -mob/creaking/creaking_attack2 -mob/creaking/creaking_unfreeze1 -mob/creaking/creaking_step4 -mob/creaking/creaking_freeze1 -mob/creaking/creaking_attack4 -mob/creaking/creaking_twitch -mob/creaking/creaking_step3 -mob/creaking/creaking_idle4 -mob/creaking/creaking_sway2 -mob/creaking/creaking_spawn -mob/creaking/creaking_idle5 -mob/creaking/creaking_idle6 -mob/creaking/creaking_step5 -mob/creaking/creaking_step2 -mob/creaking/creaking_sway3 -mob/creaking/creaking_attack3 -mob/creaking/creaking_freeze4 -mob/creaking/creaking_step1 -mob/creaking/creaking_activate -mob/creaking/creaking_freeze2 -mob/creaking/creaking_unfreeze3 -mob/creaking/creaking_unfreeze2 -mob/creaking/creaking_deactivate -mob/creaking/creaking_sway4 -mob/creaking/parrot_imitate_creaking -mob/creaking/creaking_attack1 -mob/wandering_trader/idle3 -mob/wandering_trader/no2 -mob/wandering_trader/yes3 -mob/wandering_trader/hurt2 -mob/wandering_trader/idle4 -mob/wandering_trader/no1 -mob/wandering_trader/appeared2 -mob/wandering_trader/drink_milk5 -mob/wandering_trader/haggle2 -mob/wandering_trader/idle2 -mob/wandering_trader/death -mob/wandering_trader/yes2 -mob/wandering_trader/drink_milk2 -mob/wandering_trader/drink_milk4 -mob/wandering_trader/drink_potion -mob/wandering_trader/reappeared1 -mob/wandering_trader/no5 -mob/wandering_trader/idle1 -mob/wandering_trader/hurt1 -mob/wandering_trader/appeared1 -mob/wandering_trader/reappeared2 -mob/wandering_trader/yes1 -mob/wandering_trader/no4 -mob/wandering_trader/drink_milk3 -mob/wandering_trader/idle5 -mob/wandering_trader/hurt3 -mob/wandering_trader/disappeared2 -mob/wandering_trader/yes4 -mob/wandering_trader/drink_milk1 -mob/wandering_trader/haggle1 -mob/wandering_trader/disappeared1 -mob/wandering_trader/hurt4 -mob/wandering_trader/haggle3 -mob/wandering_trader/no3 -mob/ravager/idle3 -mob/ravager/bite2 -mob/ravager/roar1 -mob/ravager/step4 -mob/ravager/bite1 -mob/ravager/hurt2 -mob/ravager/idle4 -mob/ravager/stun3 -mob/ravager/idle2 -mob/ravager/roar4 -mob/ravager/death2 -mob/ravager/roar2 -mob/ravager/celebrate1 -mob/ravager/idle1 -mob/ravager/hurt1 -mob/ravager/step5 -mob/ravager/stun1 -mob/ravager/celebrate2 -mob/ravager/bite3 -mob/ravager/step1 -mob/ravager/death1 -mob/ravager/idle6 -mob/ravager/death3 -mob/ravager/step2 -mob/ravager/step3 -mob/ravager/idle7 -mob/ravager/idle8 -mob/ravager/roar3 -mob/ravager/idle5 -mob/ravager/hurt3 -mob/ravager/stun2 -mob/ravager/hurt4 -mob/drowned/idle3 -mob/drowned/convert2 -mob/drowned/step4 -mob/drowned/hurt2 -mob/drowned/idle4 -mob/drowned/idle2 -mob/drowned/death2 -mob/drowned/idle1 -mob/drowned/hurt1 -mob/drowned/step5 -mob/drowned/step1 -mob/drowned/death1 -mob/drowned/convert1 -mob/drowned/step2 -mob/drowned/step3 -mob/drowned/water/idle3 -mob/drowned/water/hurt2 -mob/drowned/water/idle4 -mob/drowned/water/idle2 -mob/drowned/water/death2 -mob/drowned/water/idle1 -mob/drowned/water/hurt1 -mob/drowned/water/death1 -mob/drowned/water/hurt3 -mob/drowned/idle5 -mob/drowned/convert3 -mob/drowned/hurt3 -mob/phantom/flap1 -mob/phantom/swoop3 -mob/phantom/swoop1 -mob/phantom/idle3 -mob/phantom/bite2 -mob/phantom/swoop4 -mob/phantom/bite1 -mob/phantom/hurt2 -mob/phantom/idle4 -mob/phantom/flap6 -mob/phantom/idle2 -mob/phantom/swoop2 -mob/phantom/death2 -mob/phantom/flap4 -mob/phantom/flap2 -mob/phantom/idle1 -mob/phantom/hurt1 -mob/phantom/death1 -mob/phantom/flap3 -mob/phantom/death3 -mob/phantom/idle5 -mob/phantom/hurt3 -mob/phantom/flap5 -mob/evocation_illager/prepare_attack1 -mob/evocation_illager/idle3 -mob/evocation_illager/cast1 -mob/evocation_illager/hurt2 -mob/evocation_illager/idle4 -mob/evocation_illager/idle2 -mob/evocation_illager/death2 -mob/evocation_illager/idle1 -mob/evocation_illager/prepare_wololo -mob/evocation_illager/hurt1 -mob/evocation_illager/prepare_attack2 -mob/evocation_illager/prepare_summon -mob/evocation_illager/death1 -mob/evocation_illager/celebrate -mob/evocation_illager/fangs -mob/evocation_illager/cast2 -mob/armadillo/land3 -mob/armadillo/land4 -mob/armadillo/step4 -mob/armadillo/hurt5 -mob/armadillo/scute_drop1 -mob/armadillo/brush_armadillo1 -mob/armadillo/peek -mob/armadillo/hurt2 -mob/armadillo/ambient4 -mob/armadillo/unroll_start -mob/armadillo/roll1 -mob/armadillo/death2 -mob/armadillo/eat2 -mob/armadillo/roll2 -mob/armadillo/ambient2 -mob/armadillo/land2 -mob/armadillo/brush_armadillo2 -mob/armadillo/eat1 -mob/armadillo/hurt_reduced1 -mob/armadillo/eat3 -mob/armadillo/hurt_reduced3 -mob/armadillo/hurt1 -mob/armadillo/step5 -mob/armadillo/ambient3 -mob/armadillo/scute_drop2 -mob/armadillo/step1 -mob/armadillo/land1 -mob/armadillo/death1 -mob/armadillo/ambient6 -mob/armadillo/death3 -mob/armadillo/hurt_reduced4 -mob/armadillo/ambient5 -mob/armadillo/step2 -mob/armadillo/step3 -mob/armadillo/ambient7 -mob/armadillo/ambient1 -mob/armadillo/unroll_finish1 -mob/armadillo/roll4 -mob/armadillo/roll3 -mob/armadillo/unroll_finish2 -mob/armadillo/hurt3 -mob/armadillo/ambient8 -mob/armadillo/hurt_reduced2 -mob/armadillo/hurt4 -mob/armadillo/death4 -mob/piglin/converted2 -mob/piglin/celebrate3 -mob/piglin/idle3 -mob/piglin/jealous5 -mob/piglin/angry1 -mob/piglin/step4 -mob/piglin/angry3 -mob/piglin/angry2 -mob/piglin/retreat3 -mob/piglin/hurt2 -mob/piglin/idle4 -mob/piglin/retreat1 -mob/piglin/jealous4 -mob/piglin/admire1 -mob/piglin/idle2 -mob/piglin/jealous3 -mob/piglin/death2 -mob/piglin/celebrate1 -mob/piglin/jealous1 -mob/piglin/jealous2 -mob/piglin/idle1 -mob/piglin/hurt1 -mob/piglin/step5 -mob/piglin/celebrate2 -mob/piglin/celebrate4 -mob/piglin/angry4 -mob/piglin/converted1 -mob/piglin/step1 -mob/piglin/death1 -mob/piglin/death3 -mob/piglin/step2 -mob/piglin/step3 -mob/piglin/idle5 -mob/piglin/hurt3 -mob/piglin/retreat4 -mob/piglin/admire2 -mob/piglin/retreat2 -mob/piglin/death4 -mob/strider/idle3 -mob/strider/step4 -mob/strider/retreat3 -mob/strider/hurt2 -mob/strider/idle4 -mob/strider/retreat1 -mob/strider/step_lava2 -mob/strider/step_lava3 -mob/strider/step_lava4 -mob/strider/happy4 -mob/strider/idle2 -mob/strider/death2 -mob/strider/eat2 -mob/strider/eat1 -mob/strider/eat3 -mob/strider/happy3 -mob/strider/retreat5 -mob/strider/idle1 -mob/strider/hurt1 -mob/strider/step5 -mob/strider/step_lava6 -mob/strider/happy2 -mob/strider/step1 -mob/strider/death1 -mob/strider/happy1 -mob/strider/step_lava5 -mob/strider/idle6 -mob/strider/step_lava1 -mob/strider/death3 -mob/strider/step2 -mob/strider/step3 -mob/strider/idle5 -mob/strider/hurt3 -mob/strider/retreat4 -mob/strider/retreat2 -mob/strider/happy5 -mob/strider/hurt4 -mob/strider/death4 -mob/polarbear/idle3 -mob/polarbear/step4 -mob/polarbear/hurt2 -mob/polarbear/idle4 -mob/polarbear/idle2 -mob/polarbear/death2 -mob/polarbear/idle1 -mob/polarbear/hurt1 -mob/polarbear/warning1 -mob/polarbear/step1 -mob/polarbear/death1 -mob/polarbear/death3 -mob/polarbear/step2 -mob/polarbear/step3 -mob/polarbear/warning3 -mob/polarbear/hurt3 -mob/polarbear/hurt4 -mob/polarbear/warning2 -mob/bat/idle3 -mob/bat/hurt2 -mob/bat/idle4 -mob/bat/loop -mob/bat/idle2 -mob/bat/death -mob/bat/idle1 -mob/bat/hurt1 -mob/bat/takeoff -mob/bat/hurt3 -mob/bat/hurt4 -mob/magmacube/big1 -mob/magmacube/jump2 -mob/magmacube/big4 -mob/magmacube/small4 -mob/magmacube/small1 -mob/magmacube/jump1 -mob/magmacube/small5 -mob/magmacube/jump4 -mob/magmacube/small3 -mob/magmacube/jump3 -mob/magmacube/big3 -mob/magmacube/big2 -mob/magmacube/small2 -mob/mooshroom/convert2 -mob/mooshroom/milk2 -mob/mooshroom/eat2 -mob/mooshroom/milk1 -mob/mooshroom/eat1 -mob/mooshroom/eat3 -mob/mooshroom/convert1 -mob/mooshroom/eat4 -mob/mooshroom/milk3 -mob/pillager/celebrate3 -mob/pillager/idle3 -mob/pillager/hurt2 -mob/pillager/idle4 -mob/pillager/idle2 -mob/pillager/death2 -mob/pillager/celebrate1 -mob/pillager/horn_celebrate -mob/pillager/idle1 -mob/pillager/hurt1 -mob/pillager/celebrate2 -mob/pillager/celebrate4 -mob/pillager/death1 -mob/pillager/hurt3 -mob/parrot/fly3 -mob/parrot/idle3 -mob/parrot/step4 -mob/parrot/hurt2 -mob/parrot/idle4 -mob/parrot/fly6 -mob/parrot/idle2 -mob/parrot/death2 -mob/parrot/eat2 -mob/parrot/eat1 -mob/parrot/eat3 -mob/parrot/fly5 -mob/parrot/idle1 -mob/parrot/hurt1 -mob/parrot/step5 -mob/parrot/fly7 -mob/parrot/step1 -mob/parrot/death1 -mob/parrot/idle6 -mob/parrot/death3 -mob/parrot/fly2 -mob/parrot/step2 -mob/parrot/step3 -mob/parrot/fly1 -mob/parrot/idle5 -mob/parrot/fly8 -mob/parrot/death4 -mob/parrot/fly4 -mob/breeze/shoot -mob/breeze/idle_air1 -mob/breeze/charge1 -mob/breeze/slide4 -mob/breeze/idle3 -mob/breeze/charge2 -mob/breeze/jump2 -mob/breeze/deflect1 -mob/breeze/hurt2 -mob/breeze/idle4 -mob/breeze/slide1 -mob/breeze/idle2 -mob/breeze/death2 -mob/breeze/land2 -mob/breeze/wind_burst1 -mob/breeze/slide3 -mob/breeze/deflect2 -mob/breeze/inhale2 -mob/breeze/idle_air4 -mob/breeze/jump1 -mob/breeze/idle1 -mob/breeze/hurt1 -mob/breeze/whirl -mob/breeze/charge3 -mob/breeze/slide2 -mob/breeze/deflect3 -mob/breeze/wind_burst2 -mob/breeze/idle_air3 -mob/breeze/land1 -mob/breeze/death1 -mob/breeze/wind_burst3 -mob/breeze/inhale1 -mob/breeze/hurt3 -mob/breeze/idle_air2 -mob/horse/jump -mob/horse/idle3 -mob/horse/baby_horse/land -mob/horse/baby_horse/step4 -mob/horse/baby_horse/hurt2 -mob/horse/baby_horse/ambient4 -mob/horse/baby_horse/death -mob/horse/baby_horse/eat2 -mob/horse/baby_horse/ambient2 -mob/horse/baby_horse/eat5 -mob/horse/baby_horse/eat1 -mob/horse/baby_horse/eat3 -mob/horse/baby_horse/hurt1 -mob/horse/baby_horse/step5 -mob/horse/baby_horse/ambient3 -mob/horse/baby_horse/step6 -mob/horse/baby_horse/step1 -mob/horse/baby_horse/ambient6 -mob/horse/baby_horse/ambient5 -mob/horse/baby_horse/step2 -mob/horse/baby_horse/step3 -mob/horse/baby_horse/ambient7 -mob/horse/baby_horse/ambient1 -mob/horse/baby_horse/eat4 -mob/horse/baby_horse/hurt3 -mob/horse/baby_horse/angry -mob/horse/baby_horse/ambient8 -mob/horse/gallop3 -mob/horse/angry1 -mob/horse/wood2 -mob/horse/gallop1 -mob/horse/land -mob/horse/soft6 -mob/horse/wood4 -mob/horse/breathe2 -mob/horse/saddle_unequip -mob/horse/hit1 -mob/horse/hit4 -mob/horse/breathe1 -mob/horse/idle2 -mob/horse/soft3 -mob/horse/soft1 -mob/horse/death -mob/horse/eat2 -mob/horse/eat5 -mob/horse/eat1 -mob/horse/gallop4 -mob/horse/eat3 -mob/horse/armor_unequip -mob/horse/hit2 -mob/horse/wood1 -mob/horse/zombie/idle3 -mob/horse/zombie/hit1 -mob/horse/zombie/hit4 -mob/horse/zombie/idle2 -mob/horse/zombie/death -mob/horse/zombie/hit2 -mob/horse/zombie/idle1 -mob/horse/zombie/hit3 -mob/horse/zombie/angry -mob/horse/idle1 -mob/horse/wood5 -mob/horse/soft5 -mob/horse/gallop2 -mob/horse/hit3 -mob/horse/skeleton/idle3 -mob/horse/skeleton/hit1 -mob/horse/skeleton/hit4 -mob/horse/skeleton/idle2 -mob/horse/skeleton/death -mob/horse/skeleton/hit2 -mob/horse/skeleton/idle1 -mob/horse/skeleton/hit3 -mob/horse/skeleton/water/jump -mob/horse/skeleton/water/idle3 -mob/horse/skeleton/water/gallop3 -mob/horse/skeleton/water/gallop1 -mob/horse/skeleton/water/soft6 -mob/horse/skeleton/water/idle4 -mob/horse/skeleton/water/idle2 -mob/horse/skeleton/water/soft3 -mob/horse/skeleton/water/soft1 -mob/horse/skeleton/water/gallop4 -mob/horse/skeleton/water/idle1 -mob/horse/skeleton/water/soft5 -mob/horse/skeleton/water/gallop2 -mob/horse/skeleton/water/soft4 -mob/horse/skeleton/water/idle5 -mob/horse/skeleton/water/soft2 -mob/horse/leather -mob/horse/breathe3 -mob/horse/wood6 -mob/horse/soft4 -mob/horse/donkey/idle3 -mob/horse/donkey/angry1 -mob/horse/donkey/angry2 -mob/horse/donkey/hit1 -mob/horse/donkey/idle2 -mob/horse/donkey/death -mob/horse/donkey/hit2 -mob/horse/donkey/idle1 -mob/horse/donkey/hit3 -mob/horse/armor -mob/horse/eat4 -mob/horse/soft2 -mob/horse/wood3 -mob/fox/aggro3 -mob/fox/sleep2 -mob/fox/idle3 -mob/fox/bite2 -mob/fox/spit1 -mob/fox/bite1 -mob/fox/sleep1 -mob/fox/sniff1 -mob/fox/hurt2 -mob/fox/idle4 -mob/fox/sleep5 -mob/fox/spit3 -mob/fox/aggro6 -mob/fox/screech1 -mob/fox/idle2 -mob/fox/aggro4 -mob/fox/death2 -mob/fox/eat2 -mob/fox/eat1 -mob/fox/eat3 -mob/fox/sleep3 -mob/fox/sleep4 -mob/fox/aggro7 -mob/fox/idle1 -mob/fox/hurt1 -mob/fox/spit2 -mob/fox/sniff4 -mob/fox/sniff3 -mob/fox/bite3 -mob/fox/screech3 -mob/fox/death1 -mob/fox/screech4 -mob/fox/idle6 -mob/fox/screech2 -mob/fox/aggro1 -mob/fox/idle5 -mob/fox/hurt3 -mob/fox/aggro5 -mob/fox/hurt4 -mob/fox/sniff2 -mob/fox/aggro2 -mob/illusion_illager/idle3 -mob/illusion_illager/mirror_move2 -mob/illusion_illager/hurt2 -mob/illusion_illager/idle4 -mob/illusion_illager/idle2 -mob/illusion_illager/death2 -mob/illusion_illager/prepare_blind -mob/illusion_illager/idle1 -mob/illusion_illager/hurt1 -mob/illusion_illager/death1 -mob/illusion_illager/prepare_mirror -mob/illusion_illager/mirror_move1 -mob/illusion_illager/hurt3 -mob/endermen/idle3 -mob/endermen/stare -mob/endermen/scream4 -mob/endermen/portal -mob/endermen/idle4 -mob/endermen/scream3 -mob/endermen/hit1 -mob/endermen/hit4 -mob/endermen/idle2 -mob/endermen/portal2 -mob/endermen/death -mob/endermen/scream1 -mob/endermen/hit2 -mob/endermen/idle1 -mob/endermen/hit3 -mob/endermen/scream2 -mob/endermen/idle5 -mob/stray/idle3 -mob/stray/convert2 -mob/stray/step4 -mob/stray/hurt2 -mob/stray/idle4 -mob/stray/idle2 -mob/stray/death2 -mob/stray/idle1 -mob/stray/hurt1 -mob/stray/step1 -mob/stray/death1 -mob/stray/convert1 -mob/stray/step2 -mob/stray/step3 -mob/stray/convert3 -mob/stray/hurt3 -mob/stray/hurt4 -mob/vindication_illager/idle3 -mob/vindication_illager/hurt2 -mob/vindication_illager/idle4 -mob/vindication_illager/idle2 -mob/vindication_illager/death2 -mob/vindication_illager/celebrate1 -mob/vindication_illager/idle1 -mob/vindication_illager/hurt1 -mob/vindication_illager/celebrate2 -mob/vindication_illager/death1 -mob/vindication_illager/idle5 -mob/vindication_illager/hurt3 -mob/wither_skeleton/idle3 -mob/wither_skeleton/step4 -mob/wither_skeleton/hurt2 -mob/wither_skeleton/idle2 -mob/wither_skeleton/death2 -mob/wither_skeleton/idle1 -mob/wither_skeleton/hurt1 -mob/wither_skeleton/step1 -mob/wither_skeleton/death1 -mob/wither_skeleton/step2 -mob/wither_skeleton/step3 -mob/wither_skeleton/hurt3 -mob/wither_skeleton/hurt4 -mob/turtle/walk5 -mob/turtle/idle3 -mob/turtle/hurt5 -mob/turtle/walk3 -mob/turtle/walk2 -mob/turtle/hurt2 -mob/turtle/egg/egg_crack3 -mob/turtle/egg/jump_egg2 -mob/turtle/egg/drop_egg1 -mob/turtle/egg/jump_egg4 -mob/turtle/egg/drop_egg2 -mob/turtle/egg/jump_egg1 -mob/turtle/egg/egg_crack1 -mob/turtle/egg/egg_break2 -mob/turtle/egg/egg_crack4 -mob/turtle/egg/egg_crack2 -mob/turtle/egg/egg_break1 -mob/turtle/egg/egg_crack5 -mob/turtle/egg/jump_egg3 -mob/turtle/walk4 -mob/turtle/walk1 -mob/turtle/idle2 -mob/turtle/death2 -mob/turtle/idle1 -mob/turtle/hurt1 -mob/turtle/swim/swim2 -mob/turtle/swim/swim4 -mob/turtle/swim/swim3 -mob/turtle/swim/swim5 -mob/turtle/swim/swim1 -mob/turtle/death1 -mob/turtle/baby/shamble1 -mob/turtle/baby/hurt2 -mob/turtle/baby/egg_hatched3 -mob/turtle/baby/shamble4 -mob/turtle/baby/egg_hatched2 -mob/turtle/baby/shamble3 -mob/turtle/baby/shamble2 -mob/turtle/baby/death2 -mob/turtle/baby/hurt1 -mob/turtle/baby/death1 -mob/turtle/baby/egg_hatched1 -mob/turtle/death3 -mob/turtle/armor -mob/turtle/hurt3 -mob/turtle/hurt4 -mob/zombie_nautilus/ambient_land6 -mob/zombie_nautilus/ambient_land4 -mob/zombie_nautilus/dash_ready3 -mob/zombie_nautilus/dash_ready2 -mob/zombie_nautilus/hurt2 -mob/zombie_nautilus/ambient4 -mob/zombie_nautilus/ambient_land1 -mob/zombie_nautilus/dash_ready1 -mob/zombie_nautilus/dash_ready_land2 -mob/zombie_nautilus/death_land -mob/zombie_nautilus/death -mob/zombie_nautilus/eat2 -mob/zombie_nautilus/ambient2 -mob/zombie_nautilus/eat1 -mob/zombie_nautilus/dash_land4 -mob/zombie_nautilus/dash_ready_land3 -mob/zombie_nautilus/hurt_land4 -mob/zombie_nautilus/hurt_land1 -mob/zombie_nautilus/hurt1 -mob/zombie_nautilus/ambient_land3 -mob/zombie_nautilus/dash_ready_land1 -mob/zombie_nautilus/ambient_land2 -mob/zombie_nautilus/ambient3 -mob/zombie_nautilus/dash_land3 -mob/zombie_nautilus/dash_land2 -mob/zombie_nautilus/hurt_land3 -mob/zombie_nautilus/ambient_land5 -mob/zombie_nautilus/ambient5 -mob/zombie_nautilus/ambient1 -mob/zombie_nautilus/hurt3 -mob/zombie_nautilus/hurt_land2 -mob/zombie_nautilus/dash_land1 -mob/zombie_nautilus/dash_ready_land4 -mob/zombie_nautilus/hurt4 -mob/bee/loop3 -mob/bee/aggressive3 -mob/bee/hurt2 -mob/bee/pollinate4 -mob/bee/loop4 -mob/bee/death2 -mob/bee/hurt1 -mob/bee/loop1 -mob/bee/aggressive1 -mob/bee/pollinate1 -mob/bee/sting -mob/bee/pollinate2 -mob/bee/death1 -mob/bee/pollinate3 -mob/bee/aggressive2 -mob/bee/loop5 -mob/bee/hurt3 -mob/bee/loop2 -mob/parched/step4 -mob/parched/hurt2 -mob/parched/ambient4 -mob/parched/death -mob/parched/ambient2 -mob/parched/hurt1 -mob/parched/ambient3 -mob/parched/step1 -mob/parched/step2 -mob/parched/step3 -mob/parched/ambient1 -mob/parched/hurt3 -mob/parched/hurt4 -mob/wither/shoot -mob/wither/spawn -mob/wither/idle3 -mob/wither/hurt2 -mob/wither/idle4 -mob/wither/idle2 -mob/wither/death -mob/wither/idle1 -mob/wither/hurt1 -mob/wither/hurt3 -mob/wither/hurt4 -mob/glow_squid/hurt2 -mob/glow_squid/ambient4 -mob/glow_squid/squirt1 -mob/glow_squid/squirt2 -mob/glow_squid/death2 -mob/glow_squid/ambient2 -mob/glow_squid/hurt1 -mob/glow_squid/squirt3 -mob/glow_squid/ambient3 -mob/glow_squid/death1 -mob/glow_squid/death3 -mob/glow_squid/ambient5 -mob/glow_squid/ambient1 -mob/glow_squid/hurt3 -mob/glow_squid/hurt4 -mob/axolotl/idle_air1 -mob/axolotl/idle3 -mob/axolotl/idle_air5 -mob/axolotl/hurt2 -mob/axolotl/idle4 -mob/axolotl/attack3 -mob/axolotl/idle2 -mob/axolotl/death2 -mob/axolotl/attack2 -mob/axolotl/idle_air4 -mob/axolotl/idle1 -mob/axolotl/hurt1 -mob/axolotl/idle_air3 -mob/axolotl/death1 -mob/axolotl/idle5 -mob/axolotl/hurt3 -mob/axolotl/attack4 -mob/axolotl/hurt4 -mob/axolotl/idle_air2 -mob/axolotl/attack1 -mob/warden/ambient_3 -mob/warden/agitated_6 -mob/warden/sonic_boom4 -mob/warden/listening_angry_2 -mob/warden/ambient_6 -mob/warden/heartbeat_2 -mob/warden/hurt_3 -mob/warden/angry_5 -mob/warden/nearby_closer_1 -mob/warden/agitated_2 -mob/warden/death_2 -mob/warden/nearby_closest_3 -mob/warden/listening_angry_4 -mob/warden/listening_angry_3 -mob/warden/ambient_7 -mob/warden/sonic_boom2 -mob/warden/listening_4 -mob/warden/listening_angry_5 -mob/warden/death_1 -mob/warden/roar_4 -mob/warden/agitated_4 -mob/warden/heartbeat_3 -mob/warden/agitated_5 -mob/warden/sniff_4 -mob/warden/agitated_3 -mob/warden/angry_6 -mob/warden/ambient_9 -mob/warden/angry_4 -mob/warden/tendril_clicks_2 -mob/warden/ambient_10 -mob/warden/roar_2 -mob/warden/ambient_11 -mob/warden/hurt_1 -mob/warden/dig -mob/warden/sonic_charge3 -mob/warden/step_1 -mob/warden/step_2 -mob/warden/tendril_clicks_4 -mob/warden/ambient_12 -mob/warden/tendril_clicks_1 -mob/warden/heartbeat_1 -mob/warden/ambient_1 -mob/warden/tendril_clicks_3 -mob/warden/roar_1 -mob/warden/step_4 -mob/warden/tendril_clicks_5 -mob/warden/angry_3 -mob/warden/nearby_closest_1 -mob/warden/sonic_boom1 -mob/warden/listening_3 -mob/warden/sniff_3 -mob/warden/hurt_2 -mob/warden/ambient_4 -mob/warden/step_3 -mob/warden/roar_3 -mob/warden/listening_1 -mob/warden/nearby_closest_2 -mob/warden/attack_impact_2 -mob/warden/hurt_4 -mob/warden/sonic_charge2 -mob/warden/listening_5 -mob/warden/sonic_charge4 -mob/warden/emerge -mob/warden/nearby_close_2 -mob/warden/attack_impact_1 -mob/warden/nearby_closer_3 -mob/warden/sniff_1 -mob/warden/nearby_close_4 -mob/warden/nearby_closer_2 -mob/warden/nearby_close_1 -mob/warden/ambient_5 -mob/warden/listening_2 -mob/warden/angry_1 -mob/warden/sonic_charge1 -mob/warden/ambient_8 -mob/warden/angry_2 -mob/warden/ambient_2 -mob/warden/nearby_close_3 -mob/warden/heartbeat_4 -mob/warden/agitated_1 -mob/warden/tendril_clicks_6 -mob/warden/roar_5 -mob/warden/listening_angry_1 -mob/warden/sniff_2 -mob/warden/sonic_boom3 -mob/zoglin/idle3 -mob/zoglin/angry1 -mob/zoglin/step4 -mob/zoglin/angry3 -mob/zoglin/angry2 -mob/zoglin/hurt2 -mob/zoglin/idle4 -mob/zoglin/idle2 -mob/zoglin/death2 -mob/zoglin/attack2 -mob/zoglin/idle1 -mob/zoglin/hurt1 -mob/zoglin/step5 -mob/zoglin/step1 -mob/zoglin/death1 -mob/zoglin/idle6 -mob/zoglin/death3 -mob/zoglin/step2 -mob/zoglin/step3 -mob/zoglin/idle5 -mob/zoglin/hurt3 -mob/zoglin/attack1 -mob/spider/step4 -mob/spider/say1 -mob/spider/say3 -mob/spider/say4 -mob/spider/death -mob/spider/step1 -mob/spider/step2 -mob/spider/step3 -mob/spider/say2 -mob/nautilus/dash4 -mob/nautilus/ambient_land6 -mob/nautilus/ambient_land4 -mob/nautilus/swim9 -mob/nautilus/dash_ready3 -mob/nautilus/dash_ready2 -mob/nautilus/dash1 -mob/nautilus/hurt2 -mob/nautilus/swim2 -mob/nautilus/ambient4 -mob/nautilus/ambient_land1 -mob/nautilus/dash_ready1 -mob/nautilus/swim7 -mob/nautilus/dash_ready_land2 -mob/nautilus/death_land -mob/nautilus/death -mob/nautilus/eat2 -mob/nautilus/ambient2 -mob/nautilus/eat1 -mob/nautilus/dash_land4 -mob/nautilus/swim4 -mob/nautilus/dash2 -mob/nautilus/dash_ready_land3 -mob/nautilus/hurt_land4 -mob/nautilus/hurt_land1 -mob/nautilus/hurt1 -mob/nautilus/ambient_land3 -mob/nautilus/dash_ready_land1 -mob/nautilus/ambient_land2 -mob/nautilus/ambient3 -mob/nautilus/dash_land3 -mob/nautilus/swim3 -mob/nautilus/dash_land2 -mob/nautilus/nautilus_saddle_underwater_equip -mob/nautilus/hurt_land3 -mob/nautilus/ambient_land5 -mob/nautilus/ambient6 -mob/nautilus/nautilus_saddle_equip -mob/nautilus/ambient_land7 -mob/nautilus/ambient5 -mob/nautilus/swim8 -mob/nautilus/ambient7 -mob/nautilus/ambient1 -mob/nautilus/dash3 -mob/nautilus/ride -mob/nautilus/swim5 -mob/nautilus/swim6 -mob/nautilus/hurt3 -mob/nautilus/swim1 -mob/nautilus/hurt_land2 -mob/nautilus/ambient8 -mob/nautilus/dash_land1 -mob/nautilus/dash_ready_land4 -mob/nautilus/hurt4 -mob/allay/idle_without_item2 -mob/allay/item_taken3 -mob/allay/item_taken2 -mob/allay/hurt2 -mob/allay/idle_with_item4 -mob/allay/item_given1 -mob/allay/idle_with_item2 -mob/allay/idle_without_item4 -mob/allay/item_given4 -mob/allay/death2 -mob/allay/idle_with_item1 -mob/allay/hurt1 -mob/allay/idle_without_item3 -mob/allay/item_taken1 -mob/allay/death1 -mob/allay/item_given3 -mob/allay/item_thrown1 -mob/allay/idle_with_item3 -mob/allay/item_given2 -mob/allay/idle_without_item1 -mob/allay/item_taken4 -mob/guardian/attack_loop -mob/guardian/guardian_idle4 -mob/guardian/elder_hit4 -mob/guardian/elder_hit2 -mob/guardian/elder_idle4 -mob/guardian/guardian_death -mob/guardian/flop1 -mob/guardian/guardian_hit4 -mob/guardian/land_idle1 -mob/guardian/land_idle2 -mob/guardian/guardian_hit1 -mob/guardian/guardian_hit2 -mob/guardian/land_hit4 -mob/guardian/elder_idle2 -mob/guardian/elder_idle1 -mob/guardian/flop4 -mob/guardian/elder_hit1 -mob/guardian/land_hit3 -mob/guardian/land_hit1 -mob/guardian/guardian_idle2 -mob/guardian/guardian_idle1 -mob/guardian/elder_hit3 -mob/guardian/land_idle4 -mob/guardian/guardian_idle3 -mob/guardian/curse -mob/guardian/guardian_hit3 -mob/guardian/land_hit2 -mob/guardian/land_idle3 -mob/guardian/land_death -mob/guardian/elder_idle3 -mob/guardian/flop3 -mob/guardian/elder_death -mob/guardian/flop2 -mob/polarbear_baby/idle3 -mob/polarbear_baby/idle4 -mob/polarbear_baby/idle2 -mob/polarbear_baby/idle1 -mob/squid/hurt2 -mob/squid/ambient4 -mob/squid/squirt1 -mob/squid/squirt2 -mob/squid/death2 -mob/squid/ambient2 -mob/squid/hurt1 -mob/squid/squirt3 -mob/squid/ambient3 -mob/squid/death1 -mob/squid/death3 -mob/squid/ambient5 -mob/squid/ambient1 -mob/squid/hurt3 -mob/squid/hurt4 -mob/zombie/unfect -mob/zombie/wood2 -mob/zombie/step4 -mob/zombie/wood4 -mob/zombie/hurt2 -mob/zombie/say1 -mob/zombie/say3 -mob/zombie/metal3 -mob/zombie/death -mob/zombie/remedy -mob/zombie/wood1 -mob/zombie/hurt1 -mob/zombie/step5 -mob/zombie/metal1 -mob/zombie/step1 -mob/zombie/metal2 -mob/zombie/step2 -mob/zombie/infect -mob/zombie/step3 -mob/zombie/say2 -mob/zombie/wood3 -mob/zombie/woodbreak -mob/happy_ghast/ambient14 -mob/happy_ghast/harness_unequip -mob/happy_ghast/hurt5 -mob/happy_ghast/hurt2 -mob/happy_ghast/ambient9 -mob/happy_ghast/ambient4 -mob/happy_ghast/ambient10 -mob/happy_ghast/death -mob/happy_ghast/ambient2 -mob/happy_ghast/ambient13 -mob/happy_ghast/ambient11 -mob/happy_ghast/hurt1 -mob/happy_ghast/ambient3 -mob/happy_ghast/goggles_down -mob/happy_ghast/ghast_ride -mob/happy_ghast/harness_equip -mob/happy_ghast/ambient6 -mob/happy_ghast/ambient5 -mob/happy_ghast/ambient12 -mob/happy_ghast/ambient7 -mob/happy_ghast/ambient1 -mob/happy_ghast/goggles_up -mob/happy_ghast/hurt3 -mob/happy_ghast/ambient8 -mob/happy_ghast/hurt4 -mob/happy_ghast/hurt6 -mob/enderdragon/wings6 -mob/enderdragon/wings1 -mob/enderdragon/growl2 -mob/enderdragon/wings2 -mob/enderdragon/hit1 -mob/enderdragon/wings5 -mob/enderdragon/hit4 -mob/enderdragon/hit2 -mob/enderdragon/growl3 -mob/enderdragon/hit3 -mob/enderdragon/growl4 -mob/enderdragon/wings3 -mob/enderdragon/growl1 -mob/enderdragon/end -mob/enderdragon/wings4 -mob/creeper/say1 -mob/creeper/say3 -mob/creeper/say4 -mob/creeper/death -mob/creeper/say2 -mob/silverfish/step4 -mob/silverfish/say1 -mob/silverfish/hit1 -mob/silverfish/kill -mob/silverfish/say3 -mob/silverfish/say4 -mob/silverfish/hit2 -mob/silverfish/hit3 -mob/silverfish/step1 -mob/silverfish/step2 -mob/silverfish/step3 -mob/silverfish/say2 -mob/wolf/grumpy/growl2 -mob/wolf/grumpy/hurt2 -mob/wolf/grumpy/bark2 -mob/wolf/grumpy/death -mob/wolf/grumpy/bark1 -mob/wolf/grumpy/panting -mob/wolf/grumpy/growl3 -mob/wolf/grumpy/hurt1 -mob/wolf/grumpy/whine -mob/wolf/grumpy/bark3 -mob/wolf/grumpy/growl1 -mob/wolf/grumpy/hurt3 -mob/wolf/step4 -mob/wolf/shake -mob/wolf/big/growl2 -mob/wolf/big/hurt2 -mob/wolf/big/bark2 -mob/wolf/big/death -mob/wolf/big/bark1 -mob/wolf/big/panting -mob/wolf/big/growl3 -mob/wolf/big/hurt1 -mob/wolf/big/whine -mob/wolf/big/bark3 -mob/wolf/big/growl1 -mob/wolf/big/hurt3 -mob/wolf/cute/growl2 -mob/wolf/cute/hurt2 -mob/wolf/cute/bark2 -mob/wolf/cute/death -mob/wolf/cute/bark1 -mob/wolf/cute/panting -mob/wolf/cute/growl3 -mob/wolf/cute/hurt1 -mob/wolf/cute/whine -mob/wolf/cute/bark3 -mob/wolf/cute/growl1 -mob/wolf/cute/hurt3 -mob/wolf/angry/growl2 -mob/wolf/angry/hurt2 -mob/wolf/angry/bark2 -mob/wolf/angry/death -mob/wolf/angry/bark1 -mob/wolf/angry/panting -mob/wolf/angry/growl3 -mob/wolf/angry/hurt1 -mob/wolf/angry/whine -mob/wolf/angry/bark3 -mob/wolf/angry/growl1 -mob/wolf/angry/hurt3 -mob/wolf/puglin/growl2 -mob/wolf/puglin/hurt2 -mob/wolf/puglin/bark2 -mob/wolf/puglin/death -mob/wolf/puglin/bark1 -mob/wolf/puglin/panting -mob/wolf/puglin/growl3 -mob/wolf/puglin/hurt1 -mob/wolf/puglin/whine -mob/wolf/puglin/bark3 -mob/wolf/puglin/growl1 -mob/wolf/puglin/hurt3 -mob/wolf/classic/growl2 -mob/wolf/classic/hurt2 -mob/wolf/classic/bark2 -mob/wolf/classic/death -mob/wolf/classic/bark1 -mob/wolf/classic/panting -mob/wolf/classic/growl3 -mob/wolf/classic/hurt1 -mob/wolf/classic/whine -mob/wolf/classic/bark3 -mob/wolf/classic/growl1 -mob/wolf/classic/hurt3 -mob/wolf/step5 -mob/wolf/step1 -mob/wolf/baby/angry1 -mob/wolf/baby/pant2 -mob/wolf/baby/step4 -mob/wolf/baby/angry3 -mob/wolf/baby/angry2 -mob/wolf/baby/pant1 -mob/wolf/baby/hurt2 -mob/wolf/baby/ambient4 -mob/wolf/baby/death -mob/wolf/baby/ambient2 -mob/wolf/baby/hurt1 -mob/wolf/baby/step5 -mob/wolf/baby/ambient3 -mob/wolf/baby/whine1 -mob/wolf/baby/angry4 -mob/wolf/baby/step1 -mob/wolf/baby/whine2 -mob/wolf/baby/pant3 -mob/wolf/baby/ambient6 -mob/wolf/baby/ambient5 -mob/wolf/baby/step2 -mob/wolf/baby/step3 -mob/wolf/baby/ambient7 -mob/wolf/baby/ambient1 -mob/wolf/baby/hurt3 -mob/wolf/baby/ambient8 -mob/wolf/step2 -mob/wolf/step3 -mob/wolf/sad/growl2 -mob/wolf/sad/hurt2 -mob/wolf/sad/bark2 -mob/wolf/sad/death -mob/wolf/sad/bark1 -mob/wolf/sad/panting -mob/wolf/sad/growl3 -mob/wolf/sad/hurt1 -mob/wolf/sad/whine -mob/wolf/sad/bark3 -mob/wolf/sad/growl1 -mob/wolf/sad/hurt3 -mob/husk/idle3 -mob/husk/convert2 -mob/husk/step4 -mob/husk/hurt2 -mob/husk/idle2 -mob/husk/death2 -mob/husk/idle1 -mob/husk/hurt1 -mob/husk/step5 -mob/husk/step1 -mob/husk/death1 -mob/husk/convert1 -mob/husk/step2 -mob/husk/step3 -mob/frog/tongue3 -mob/frog/idle3 -mob/frog/step4 -mob/frog/hurt5 -mob/frog/tongue2 -mob/frog/hurt2 -mob/frog/idle4 -mob/frog/idle2 -mob/frog/death2 -mob/frog/eat2 -mob/frog/long_jump3 -mob/frog/eat1 -mob/frog/lay_spawn2 -mob/frog/eat3 -mob/frog/lay_spawn1 -mob/frog/long_jump4 -mob/frog/idle1 -mob/frog/hurt1 -mob/frog/long_jump1 -mob/frog/step1 -mob/frog/death1 -mob/frog/tongue4 -mob/frog/idle6 -mob/frog/death3 -mob/frog/step2 -mob/frog/step3 -mob/frog/idle7 -mob/frog/idle8 -mob/frog/eat4 -mob/frog/idle5 -mob/frog/hurt3 -mob/frog/long_jump2 -mob/frog/tongue1 -mob/frog/hurt4 -mob/camel_husk/dash4 -mob/camel_husk/step_sand2 -mob/camel_husk/step_sand1 -mob/camel_husk/step4 -mob/camel_husk/sit4 -mob/camel_husk/dash1 -mob/camel_husk/hurt2 -mob/camel_husk/step_sand6 -mob/camel_husk/sit1 -mob/camel_husk/ambient4 -mob/camel_husk/stand5 -mob/camel_husk/death2 -mob/camel_husk/eat2 -mob/camel_husk/ambient2 -mob/camel_husk/stand2 -mob/camel_husk/eat5 -mob/camel_husk/eat1 -mob/camel_husk/dash_ready -mob/camel_husk/eat3 -mob/camel_husk/step_sand5 -mob/camel_husk/dash2 -mob/camel_husk/hurt1 -mob/camel_husk/step5 -mob/camel_husk/stand1 -mob/camel_husk/stand4 -mob/camel_husk/ambient3 -mob/camel_husk/step6 -mob/camel_husk/step1 -mob/camel_husk/death1 -mob/camel_husk/stand3 -mob/camel_husk/ambient6 -mob/camel_husk/dash5 -mob/camel_husk/ambient5 -mob/camel_husk/step2 -mob/camel_husk/step3 -mob/camel_husk/sit2 -mob/camel_husk/ambient7 -mob/camel_husk/ambient1 -mob/camel_husk/eat4 -mob/camel_husk/step_sand4 -mob/camel_husk/dash3 -mob/camel_husk/hurt3 -mob/camel_husk/step_sand3 -mob/camel_husk/ambient8 -mob/camel_husk/sit3 -mob/camel_husk/hurt4 -mob/camel_husk/dash6 -mob/camel/dash4 -mob/camel/step_sand2 -mob/camel/step_sand1 -mob/camel/step4 -mob/camel/sit4 -mob/camel/dash1 -mob/camel/hurt2 -mob/camel/step_sand6 -mob/camel/sit1 -mob/camel/ambient4 -mob/camel/dash_ready1 -mob/camel/stand5 -mob/camel/death2 -mob/camel/eat2 -mob/camel/ambient2 -mob/camel/stand2 -mob/camel/eat5 -mob/camel/eat1 -mob/camel/eat3 -mob/camel/step_sand5 -mob/camel/dash2 -mob/camel/hurt1 -mob/camel/step5 -mob/camel/stand1 -mob/camel/stand4 -mob/camel/ambient3 -mob/camel/step6 -mob/camel/step1 -mob/camel/death1 -mob/camel/stand3 -mob/camel/ambient6 -mob/camel/dash5 -mob/camel/ambient5 -mob/camel/step2 -mob/camel/step3 -mob/camel/sit2 -mob/camel/ambient7 -mob/camel/ambient1 -mob/camel/eat4 -mob/camel/step_sand4 -mob/camel/dash3 -mob/camel/hurt3 -mob/camel/step_sand3 -mob/camel/ambient8 -mob/camel/sit3 -mob/camel/hurt4 -mob/camel/dash6 -mob/dolphin/idle3 -mob/dolphin/jump2 -mob/dolphin/idle_water6 -mob/dolphin/idle_water10 -mob/dolphin/hurt2 -mob/dolphin/idle4 -mob/dolphin/swim2 -mob/dolphin/attack3 -mob/dolphin/idle_water1 -mob/dolphin/idle_water9 -mob/dolphin/blowhole1 -mob/dolphin/idle2 -mob/dolphin/death2 -mob/dolphin/splash1 -mob/dolphin/eat2 -mob/dolphin/eat1 -mob/dolphin/eat3 -mob/dolphin/swim4 -mob/dolphin/attack2 -mob/dolphin/jump1 -mob/dolphin/idle1 -mob/dolphin/hurt1 -mob/dolphin/splash2 -mob/dolphin/idle_water4 -mob/dolphin/play2 -mob/dolphin/idle_water5 -mob/dolphin/swim3 -mob/dolphin/jump3 -mob/dolphin/death1 -mob/dolphin/idle_water7 -mob/dolphin/blowhole2 -mob/dolphin/idle_water8 -mob/dolphin/idle6 -mob/dolphin/splash3 -mob/dolphin/idle5 -mob/dolphin/idle_water2 -mob/dolphin/hurt3 -mob/dolphin/swim1 -mob/dolphin/idle_water3 -mob/dolphin/play1 -mob/dolphin/attack1 -mob/rabbit/hop3 -mob/rabbit/idle3 -mob/rabbit/hurt2 -mob/rabbit/idle4 -mob/rabbit/attack3 -mob/rabbit/idle2 -mob/rabbit/hop4 -mob/rabbit/attack2 -mob/rabbit/hop1 -mob/rabbit/idle1 -mob/rabbit/hurt1 -mob/rabbit/hop2 -mob/rabbit/hurt3 -mob/rabbit/attack4 -mob/rabbit/bunnymurder -mob/rabbit/hurt4 -mob/rabbit/attack1 -mob/vex/charge1 -mob/vex/idle3 -mob/vex/charge2 -mob/vex/hurt2 -mob/vex/idle4 -mob/vex/idle2 -mob/vex/death2 -mob/vex/idle1 -mob/vex/hurt1 -mob/vex/charge3 -mob/vex/death1 -mob/bogged/step4 -mob/bogged/hurt2 -mob/bogged/ambient4 -mob/bogged/death -mob/bogged/ambient2 -mob/bogged/hurt1 -mob/bogged/ambient3 -mob/bogged/step1 -mob/bogged/step2 -mob/bogged/step3 -mob/bogged/ambient1 -mob/bogged/hurt3 -mob/bogged/hurt4 -mob/skeleton/step4 -mob/skeleton/hurt2 -mob/skeleton/say1 -mob/skeleton/say3 -mob/skeleton/death -mob/skeleton/hurt1 -mob/skeleton/step1 -mob/skeleton/step2 -mob/skeleton/step3 -mob/skeleton/say2 -mob/skeleton/hurt3 -mob/skeleton/hurt4 -mob/pig/step4 -mob/pig/big/ambient9 -mob/pig/big/ambient4 -mob/pig/big/hit1 -mob/pig/big/death -mob/pig/big/eat2 -mob/pig/big/ambient2 -mob/pig/big/eat1 -mob/pig/big/hit2 -mob/pig/big/ambient3 -mob/pig/big/hit3 -mob/pig/big/ambient6 -mob/pig/big/ambient5 -mob/pig/big/ambient7 -mob/pig/big/ambient1 -mob/pig/big/ambient8 -mob/pig/say1 -mob/pig/mini/hurt2 -mob/pig/mini/ambient4 -mob/pig/mini/death -mob/pig/mini/eat2 -mob/pig/mini/ambient2 -mob/pig/mini/eat1 -mob/pig/mini/hurt1 -mob/pig/mini/ambient3 -mob/pig/mini/ambient6 -mob/pig/mini/ambient5 -mob/pig/mini/ambient1 -mob/pig/mini/hurt3 -mob/pig/say3 -mob/pig/death -mob/pig/eat2 -mob/pig/eat1 -mob/pig/baby_pig/step4 -mob/pig/baby_pig/ambient4 -mob/pig/baby_pig/hit1 -mob/pig/baby_pig/death -mob/pig/baby_pig/eat2 -mob/pig/baby_pig/ambient2 -mob/pig/baby_pig/eat1 -mob/pig/baby_pig/hit2 -mob/pig/baby_pig/step5 -mob/pig/baby_pig/ambient3 -mob/pig/baby_pig/hit3 -mob/pig/baby_pig/step1 -mob/pig/baby_pig/ambient6 -mob/pig/baby_pig/ambient5 -mob/pig/baby_pig/step2 -mob/pig/baby_pig/step3 -mob/pig/baby_pig/ambient1 -mob/pig/step5 -mob/pig/step1 -mob/pig/step2 -mob/pig/step3 -mob/pig/say2 -mob/sheep/step4 -mob/sheep/shear -mob/sheep/say1 -mob/sheep/say3 -mob/sheep/step5 -mob/sheep/step1 -mob/sheep/step2 -mob/sheep/step3 -mob/sheep/say2 -mob/goat/screaming_milk3 -mob/goat/pre_ram2 -mob/goat/screaming_pre_ram4 -mob/goat/scream5 -mob/goat/idle3 -mob/goat/pre_ram3 -mob/goat/screaming_death2 -mob/goat/jump2 -mob/goat/scream4 -mob/goat/step4 -mob/goat/screaming_death3 -mob/goat/screaming_pre_ram1 -mob/goat/hurt2 -mob/goat/idle4 -mob/goat/scream3 -mob/goat/horn_break3 -mob/goat/scream8 -mob/goat/idle2 -mob/goat/death2 -mob/goat/eat2 -mob/goat/screaming_milk5 -mob/goat/eat1 -mob/goat/eat3 -mob/goat/scream1 -mob/goat/pre_ram4 -mob/goat/jump1 -mob/goat/screaming_milk2 -mob/goat/screaming_hurt3 -mob/goat/idle1 -mob/goat/hurt1 -mob/goat/scream7 -mob/goat/impact2 -mob/goat/screaming_milk1 -mob/goat/step5 -mob/goat/scream9 -mob/goat/screaming_hurt2 -mob/goat/screaming_pre_ram2 -mob/goat/screaming_pre_ram3 -mob/goat/step6 -mob/goat/screaming_death1 -mob/goat/death5 -mob/goat/step1 -mob/goat/screaming_milk4 -mob/goat/death1 -mob/goat/scream6 -mob/goat/idle6 -mob/goat/impact1 -mob/goat/death3 -mob/goat/pre_ram1 -mob/goat/step2 -mob/goat/scream2 -mob/goat/step3 -mob/goat/idle7 -mob/goat/idle8 -mob/goat/screaming_hurt1 -mob/goat/screaming_pre_ram5 -mob/goat/horn_break2 -mob/goat/horn_break4 -mob/goat/idle5 -mob/goat/hurt3 -mob/goat/horn_break1 -mob/goat/hurt4 -mob/goat/impact3 -mob/goat/death4 -mob/llama/idle3 -mob/llama/angry1 -mob/llama/spit1 -mob/llama/step4 -mob/llama/hurt2 -mob/llama/idle4 -mob/llama/idle2 -mob/llama/death2 -mob/llama/eat2 -mob/llama/eat1 -mob/llama/eat3 -mob/llama/swag -mob/llama/idle1 -mob/llama/hurt1 -mob/llama/step5 -mob/llama/spit2 -mob/llama/unequip -mob/llama/step1 -mob/llama/death1 -mob/llama/step2 -mob/llama/step3 -mob/llama/idle5 -mob/llama/hurt3 -mob/villager/idle3 -mob/villager/no2 -mob/villager/yes3 -mob/villager/no1 -mob/villager/hit1 -mob/villager/hit4 -mob/villager/haggle2 -mob/villager/idle2 -mob/villager/death -mob/villager/yes2 -mob/villager/hit2 -mob/villager/idle1 -mob/villager/yes1 -mob/villager/hit3 -mob/villager/haggle1 -mob/villager/haggle3 -mob/villager/no3 -mob/baby_nautilus/ambient_land4 -mob/baby_nautilus/hurt2 -mob/baby_nautilus/ambient4 -mob/baby_nautilus/ambient_land1 -mob/baby_nautilus/death_land -mob/baby_nautilus/death -mob/baby_nautilus/eat2 -mob/baby_nautilus/ambient2 -mob/baby_nautilus/eat1 -mob/baby_nautilus/hurt_land4 -mob/baby_nautilus/hurt_land1 -mob/baby_nautilus/hurt1 -mob/baby_nautilus/ambient_land3 -mob/baby_nautilus/ambient_land2 -mob/baby_nautilus/ambient3 -mob/baby_nautilus/hurt_land3 -mob/baby_nautilus/ambient6 -mob/baby_nautilus/ambient5 -mob/baby_nautilus/ambient1 -mob/baby_nautilus/hurt3 -mob/baby_nautilus/hurt_land2 -mob/baby_nautilus/hurt4 -mob/blaze/breathe2 -mob/blaze/hit1 -mob/blaze/hit4 -mob/blaze/breathe1 -mob/blaze/death -mob/blaze/hit2 -mob/blaze/hit3 -mob/blaze/breathe4 -mob/blaze/breathe3 -mob/zombie_villager/hurt2 -mob/zombie_villager/say1 -mob/zombie_villager/say3 -mob/zombie_villager/death -mob/zombie_villager/hurt1 -mob/zombie_villager/say2 -mob/sniffer/sniffing3 -mob/sniffer/digging_stop2 -mob/sniffer/idle3 -mob/sniffer/idle9 -mob/sniffer/step4 -mob/sniffer/searching6 -mob/sniffer/hurt2 -mob/sniffer/idle4 -mob/sniffer/happy4 -mob/sniffer/idle2 -mob/sniffer/searching1 -mob/sniffer/death2 -mob/sniffer/eat2 -mob/sniffer/sniffing1 -mob/sniffer/longdig1 -mob/sniffer/longdig2 -mob/sniffer/eat1 -mob/sniffer/scenting2 -mob/sniffer/eat3 -mob/sniffer/happy3 -mob/sniffer/idle1 -mob/sniffer/hurt1 -mob/sniffer/sniffing2 -mob/sniffer/step5 -mob/sniffer/searching3 -mob/sniffer/happy2 -mob/sniffer/step6 -mob/sniffer/scenting1 -mob/sniffer/step1 -mob/sniffer/searching4 -mob/sniffer/death1 -mob/sniffer/happy1 -mob/sniffer/idle6 -mob/sniffer/step2 -mob/sniffer/step3 -mob/sniffer/idle7 -mob/sniffer/idle8 -mob/sniffer/idle5 -mob/sniffer/searching2 -mob/sniffer/idle11 -mob/sniffer/hurt3 -mob/sniffer/digging_stop1 -mob/sniffer/happy5 -mob/sniffer/searching5 -mob/sniffer/scenting3 -mob/sniffer/idle10 -mob/cat/meow2 -mob/cat/hiss2 -mob/cat/purreow2 -mob/cat/beg2 -mob/cat/beg1 -mob/cat/purreow1 -mob/cat/hiss3 -mob/cat/royal/hurt2 -mob/cat/royal/ambient4 -mob/cat/royal/death -mob/cat/royal/ambient2 -mob/cat/royal/hurt1 -mob/cat/royal/ambient3 -mob/cat/royal/ambient6 -mob/cat/royal/ambient5 -mob/cat/royal/ambient1 -mob/cat/royal/hurt3 -mob/cat/stray/idle3 -mob/cat/stray/idle4 -mob/cat/stray/idle2 -mob/cat/stray/idle1 -mob/cat/hiss1 -mob/cat/meow1 -mob/cat/eat2 -mob/cat/meow4 -mob/cat/eat1 -mob/cat/beg3 -mob/cat/baby_cat/hurt2 -mob/cat/baby_cat/ambient4 -mob/cat/baby_cat/death -mob/cat/baby_cat/ambient2 -mob/cat/baby_cat/hurt1 -mob/cat/baby_cat/ambient3 -mob/cat/baby_cat/ambient6 -mob/cat/baby_cat/ambient5 -mob/cat/baby_cat/ambient7 -mob/cat/baby_cat/ambient1 -mob/cat/baby_cat/hurt3 -mob/cat/meow3 -mob/cat/hitt1 -mob/cat/hitt2 -mob/cat/purr1 -mob/cat/hitt3 -mob/cat/ocelot/idle3 -mob/cat/ocelot/idle4 -mob/cat/ocelot/idle2 -mob/cat/ocelot/death2 -mob/cat/ocelot/idle1 -mob/cat/ocelot/death1 -mob/cat/ocelot/death3 -mob/cat/purr2 -mob/cat/purr3 -mob/hoglin/converted2 -mob/hoglin/idle3 -mob/hoglin/idle9 -mob/hoglin/angry1 -mob/hoglin/step4 -mob/hoglin/angry3 -mob/hoglin/angry2 -mob/hoglin/retreat3 -mob/hoglin/hurt2 -mob/hoglin/idle4 -mob/hoglin/retreat1 -mob/hoglin/idle2 -mob/hoglin/death2 -mob/hoglin/attack2 -mob/hoglin/angry5 -mob/hoglin/idle1 -mob/hoglin/hurt1 -mob/hoglin/step5 -mob/hoglin/angry4 -mob/hoglin/step6 -mob/hoglin/converted1 -mob/hoglin/step1 -mob/hoglin/death1 -mob/hoglin/idle6 -mob/hoglin/death3 -mob/hoglin/step2 -mob/hoglin/step3 -mob/hoglin/idle7 -mob/hoglin/idle8 -mob/hoglin/idle5 -mob/hoglin/idle11 -mob/hoglin/angry6 -mob/hoglin/hurt3 -mob/hoglin/retreat2 -mob/hoglin/hurt4 -mob/hoglin/attack1 -mob/hoglin/idle10 -mob/cow/step4 -mob/cow/hurt2 -mob/cow/say1 -mob/cow/say3 -mob/cow/say4 -mob/cow/hurt1 -mob/cow/step1 -mob/cow/moody/ambient9 -mob/cow/moody/ambient4 -mob/cow/moody/hit1 -mob/cow/moody/hit4 -mob/cow/moody/death2 -mob/cow/moody/ambient2 -mob/cow/moody/hit2 -mob/cow/moody/ambient3 -mob/cow/moody/hit3 -mob/cow/moody/death1 -mob/cow/moody/ambient6 -mob/cow/moody/ambient5 -mob/cow/moody/ambient7 -mob/cow/moody/ambient1 -mob/cow/moody/ambient8 -mob/cow/step2 -mob/cow/step3 -mob/cow/say2 -mob/cow/hurt3 -mob/ghast/scream5 -mob/ghast/moan1 -mob/ghast/scream4 -mob/ghast/scream3 -mob/ghast/death -mob/ghast/moan6 -mob/ghast/scream1 -mob/ghast/moan3 -mob/ghast/affectionate_scream -mob/ghast/charge -mob/ghast/moan7 -mob/ghast/scream2 -mob/ghast/moan5 -mob/ghast/fireball4 -mob/ghast/moan4 -mob/ghast/moan2 -mob/piglin_brute/idle3 -mob/piglin_brute/idle9 -mob/piglin_brute/angry1 -mob/piglin_brute/step4 -mob/piglin_brute/angry3 -mob/piglin_brute/angry2 -mob/piglin_brute/hurt2 -mob/piglin_brute/idle4 -mob/piglin_brute/idle2 -mob/piglin_brute/death2 -mob/piglin_brute/angry5 -mob/piglin_brute/idle1 -mob/piglin_brute/hurt1 -mob/piglin_brute/step5 -mob/piglin_brute/angry4 -mob/piglin_brute/step1 -mob/piglin_brute/death1 -mob/piglin_brute/idle6 -mob/piglin_brute/death3 -mob/piglin_brute/step2 -mob/piglin_brute/step3 -mob/piglin_brute/idle7 -mob/piglin_brute/idle8 -mob/piglin_brute/idle5 -mob/piglin_brute/hurt3 -mob/piglin_brute/hurt4 -mob/zombified_piglin/zpigangry4 -mob/zombified_piglin/zpighurt2 -mob/zombified_piglin/zpig3 -mob/zombified_piglin/zpigangry1 -mob/zombified_piglin/zpig2 -mob/zombified_piglin/zpig4 -mob/zombified_piglin/zpig1 -mob/zombified_piglin/zpigangry2 -mob/zombified_piglin/zpighurt1 -mob/zombified_piglin/zpigangry3 -mob/zombified_piglin/zpigdeath -mob/pufferfish/sting1 -mob/pufferfish/blow_out2 -mob/pufferfish/sting2 -mob/pufferfish/blow_out1 -mob/pufferfish/hurt2 -mob/pufferfish/flop1 -mob/pufferfish/death2 -mob/pufferfish/blow_up2 -mob/pufferfish/flop4 -mob/pufferfish/hurt1 -mob/pufferfish/blow_up1 -mob/pufferfish/death1 -mob/pufferfish/flop3 -mob/pufferfish/flop2 -mob/ghastling/spawn -mob/ghastling/ghastling3 -mob/ghastling/ghastling5 -mob/ghastling/hurt5 -mob/ghastling/hurt2 -mob/ghastling/ghastling1 -mob/ghastling/death -mob/ghastling/ghastling4 -mob/ghastling/hurt1 -mob/ghastling/ghastling2 -mob/ghastling/ghastling7 -mob/ghastling/hurt3 -mob/ghastling/hurt4 -mob/ghastling/ghastling6 -mob/coppergolem/spawn -mob/coppergolem/no_item_get -mob/coppergolem/oxidized/step8 -mob/coppergolem/oxidized/step9 -mob/coppergolem/oxidized/step4 -mob/coppergolem/oxidized/hurt2 -mob/coppergolem/oxidized/spin4 -mob/coppergolem/oxidized/death -mob/coppergolem/oxidized/spin7 -mob/coppergolem/oxidized/hurt1 -mob/coppergolem/oxidized/step5 -mob/coppergolem/oxidized/spin3 -mob/coppergolem/oxidized/step7 -mob/coppergolem/oxidized/step6 -mob/coppergolem/oxidized/spin2 -mob/coppergolem/oxidized/step1 -mob/coppergolem/oxidized/spin6 -mob/coppergolem/oxidized/step2 -mob/coppergolem/oxidized/step3 -mob/coppergolem/oxidized/spin5 -mob/coppergolem/oxidized/hurt3 -mob/coppergolem/oxidized/spin1 -mob/coppergolem/oxidized/hurt4 -mob/coppergolem/item_no_drop -mob/coppergolem/no_item_no_get -mob/coppergolem/weathered/step8 -mob/coppergolem/weathered/step9 -mob/coppergolem/weathered/step4 -mob/coppergolem/weathered/hurt2 -mob/coppergolem/weathered/spin4 -mob/coppergolem/weathered/death -mob/coppergolem/weathered/spin7 -mob/coppergolem/weathered/hurt1 -mob/coppergolem/weathered/step5 -mob/coppergolem/weathered/spin3 -mob/coppergolem/weathered/step7 -mob/coppergolem/weathered/step6 -mob/coppergolem/weathered/spin2 -mob/coppergolem/weathered/step1 -mob/coppergolem/weathered/spin6 -mob/coppergolem/weathered/step2 -mob/coppergolem/weathered/step3 -mob/coppergolem/weathered/spin5 -mob/coppergolem/weathered/hurt3 -mob/coppergolem/weathered/spin1 -mob/coppergolem/weathered/hurt4 -mob/coppergolem/item_drop -mob/coppergolem/regular/step8 -mob/coppergolem/regular/step9 -mob/coppergolem/regular/step4 -mob/coppergolem/regular/hurt2 -mob/coppergolem/regular/spin4 -mob/coppergolem/regular/death -mob/coppergolem/regular/spin7 -mob/coppergolem/regular/hurt1 -mob/coppergolem/regular/step5 -mob/coppergolem/regular/spin3 -mob/coppergolem/regular/step7 -mob/coppergolem/regular/step6 -mob/coppergolem/regular/spin2 -mob/coppergolem/regular/step1 -mob/coppergolem/regular/spin6 -mob/coppergolem/regular/step2 -mob/coppergolem/regular/step3 -mob/coppergolem/regular/spin5 -mob/coppergolem/regular/hurt3 -mob/coppergolem/regular/spin1 -mob/coppergolem/regular/hurt4 -mob/slime/big1 -mob/slime/big4 -mob/slime/small4 -mob/slime/small1 -mob/slime/attack2 -mob/slime/small5 -mob/slime/small3 -mob/slime/big3 -mob/slime/big2 -mob/slime/small2 -mob/slime/attack1 -mob/tadpole/hurt2 -mob/tadpole/death2 -mob/tadpole/hurt1 -mob/tadpole/death1 -mob/tadpole/hurt3 -mob/tadpole/hurt4 -mob/irongolem/walk3 -mob/irongolem/walk2 -mob/irongolem/hit1 -mob/irongolem/hit4 -mob/irongolem/throw -mob/irongolem/walk4 -mob/irongolem/walk1 -mob/irongolem/death -mob/irongolem/repair -mob/irongolem/damage1 -mob/irongolem/hit2 -mob/irongolem/damage2 -mob/irongolem/hit3 -mob/panda/sneeze1 -mob/panda/aggressive/aggressive3 -mob/panda/aggressive/aggressive4 -mob/panda/aggressive/aggressive1 -mob/panda/aggressive/aggressive2 -mob/panda/idle3 -mob/panda/bite2 -mob/panda/eat7 -mob/panda/pant2 -mob/panda/step4 -mob/panda/hurt5 -mob/panda/bite1 -mob/panda/pant1 -mob/panda/hurt2 -mob/panda/idle4 -mob/panda/eat10 -mob/panda/sneeze2 -mob/panda/eat12 -mob/panda/idle2 -mob/panda/cant_breed4 -mob/panda/death2 -mob/panda/eat2 -mob/panda/cant_breed5 -mob/panda/eat9 -mob/panda/eat5 -mob/panda/eat1 -mob/panda/eat3 -mob/panda/cant_breed1 -mob/panda/idle1 -mob/panda/hurt1 -mob/panda/step5 -mob/panda/nosebreath1 -mob/panda/cant_breed2 -mob/panda/cant_breed3 -mob/panda/bite3 -mob/panda/step1 -mob/panda/death1 -mob/panda/nosebreath2 -mob/panda/eat6 -mob/panda/death3 -mob/panda/step2 -mob/panda/step3 -mob/panda/sneeze3 -mob/panda/eat8 -mob/panda/eat4 -mob/panda/eat11 -mob/panda/hurt3 -mob/panda/worried/worried2 -mob/panda/worried/worried5 -mob/panda/worried/worried3 -mob/panda/worried/worried6 -mob/panda/worried/worried4 -mob/panda/worried/worried1 -mob/panda/pre_sneeze -mob/panda/hurt4 -mob/panda/hurt6 -mob/panda/death4 -mob/panda/nosebreath3 -mob/chicken/hurt2 -mob/chicken/say1 -mob/chicken/say3 -mob/chicken/hurt1 -mob/chicken/step1 -mob/chicken/baby_chicken/hurt2 -mob/chicken/baby_chicken/death -mob/chicken/baby_chicken/ambient2 -mob/chicken/baby_chicken/step -mob/chicken/baby_chicken/hurt1 -mob/chicken/baby_chicken/ambient1 -mob/chicken/baby_chicken/hurt3 -mob/chicken/baby_chicken/hurt4 -mob/chicken/picky/hurt2 -mob/chicken/picky/ambient4 -mob/chicken/picky/death -mob/chicken/picky/ambient2 -mob/chicken/picky/hurt1 -mob/chicken/picky/ambient3 -mob/chicken/picky/ambient6 -mob/chicken/picky/ambient5 -mob/chicken/picky/ambient7 -mob/chicken/picky/ambient1 -mob/chicken/picky/hurt3 -mob/chicken/picky/ambient8 -mob/chicken/step2 -mob/chicken/plop -mob/chicken/say2 -step/ladder1 -step/snow3 -step/scaffold1 -step/scaffold4 -step/scaffold7 -step/scaffold5 -step/coral4 -step/stone3 -step/wood2 -step/grass1 -step/stone4 -step/gravel3 -step/wood4 -step/stone2 -step/snow1 -step/sand4 -step/grass3 -step/sand1 -step/sand5 -step/grass4 -step/wet_grass4 -step/coral3 -step/gravel1 -step/cloth4 -step/snow2 -step/coral2 -step/ladder4 -step/ladder2 -step/sand2 -step/coral5 -step/grass5 -step/wet_grass5 -step/wet_grass2 -step/coral6 -step/scaffold3 -step/wood1 -step/scaffold6 -step/ladder5 -step/coral1 -step/stone5 -step/wood5 -step/scaffold2 -step/wet_grass3 -step/cloth1 -step/gravel2 -step/grass2 -step/stone6 -step/cloth2 -step/cloth3 -step/ladder3 -step/sand3 -step/wood6 -step/gravel4 -step/stone1 -step/wet_grass1 -step/grass6 -step/snow4 -step/wood3 -step/wet_grass6 -ambient/underwater/underwater_ambience -ambient/underwater/exit2 -ambient/underwater/enter2 -ambient/underwater/enter3 -ambient/underwater/exit1 -ambient/underwater/additions/dark3 -ambient/underwater/additions/crackles1 -ambient/underwater/additions/bass_whale2 -ambient/underwater/additions/water2 -ambient/underwater/additions/crackles2 -ambient/underwater/additions/dark2 -ambient/underwater/additions/driplets2 -ambient/underwater/additions/animal1 -ambient/underwater/additions/animal2 -ambient/underwater/additions/earth_crack -ambient/underwater/additions/driplets1 -ambient/underwater/additions/bubbles2 -ambient/underwater/additions/bubbles6 -ambient/underwater/additions/bubbles1 -ambient/underwater/additions/dark1 -ambient/underwater/additions/bass_whale1 -ambient/underwater/additions/bubbles4 -ambient/underwater/additions/water1 -ambient/underwater/additions/bubbles5 -ambient/underwater/additions/dark4 -ambient/underwater/additions/bubbles3 -ambient/underwater/exit3 -ambient/underwater/enter1 -ambient/cave/cave2 -ambient/cave/cave20 -ambient/cave/cave23 -ambient/cave/cave6 -ambient/cave/cave11 -ambient/cave/cave21 -ambient/cave/cave19 -ambient/cave/cave16 -ambient/cave/cave18 -ambient/cave/cave14 -ambient/cave/cave4 -ambient/cave/cave12 -ambient/cave/cave8 -ambient/cave/cave22 -ambient/cave/cave3 -ambient/cave/cave10 -ambient/cave/cave7 -ambient/cave/cave13 -ambient/cave/cave1 -ambient/cave/cave15 -ambient/cave/cave9 -ambient/cave/cave5 -ambient/cave/cave17 -ambient/weather/end_flash7 -ambient/weather/end_flash8 -ambient/weather/rain7 -ambient/weather/end_flash1 -ambient/weather/end_flash2 -ambient/weather/rain5 -ambient/weather/end_flash4 -ambient/weather/rain2 -ambient/weather/end_flash5 -ambient/weather/thunder3 -ambient/weather/rain4 -ambient/weather/rain3 -ambient/weather/rain8 -ambient/weather/rain1 -ambient/weather/rain6 -ambient/weather/end_flash6 -ambient/weather/thunder2 -ambient/weather/end_flash3 -ambient/weather/thunder1 -ambient/nether/crimson_forest/addition2 -ambient/nether/crimson_forest/mood4 -ambient/nether/crimson_forest/voom1 -ambient/nether/crimson_forest/shroom1 -ambient/nether/crimson_forest/shine2 -ambient/nether/crimson_forest/addition3 -ambient/nether/crimson_forest/shine3 -ambient/nether/crimson_forest/shine1 -ambient/nether/crimson_forest/shroom3 -ambient/nether/crimson_forest/mood1 -ambient/nether/crimson_forest/particles2 -ambient/nether/crimson_forest/shroom2 -ambient/nether/crimson_forest/particles3 -ambient/nether/crimson_forest/ambience -ambient/nether/crimson_forest/voom2 -ambient/nether/crimson_forest/addition1 -ambient/nether/crimson_forest/mood3 -ambient/nether/crimson_forest/particles1 -ambient/nether/crimson_forest/twang1 -ambient/nether/crimson_forest/mood2 -ambient/nether/soulsand_valley/mood4 -ambient/nether/soulsand_valley/whisper5 -ambient/nether/soulsand_valley/wind3 -ambient/nether/soulsand_valley/sand1 -ambient/nether/soulsand_valley/voices4 -ambient/nether/soulsand_valley/whisper1 -ambient/nether/soulsand_valley/sand2 -ambient/nether/soulsand_valley/mood1 -ambient/nether/soulsand_valley/wind1 -ambient/nether/soulsand_valley/voices5 -ambient/nether/soulsand_valley/voices3 -ambient/nether/soulsand_valley/with1 -ambient/nether/soulsand_valley/ambience -ambient/nether/soulsand_valley/whisper6 -ambient/nether/soulsand_valley/voices2 -ambient/nether/soulsand_valley/whisper3 -ambient/nether/soulsand_valley/whisper7 -ambient/nether/soulsand_valley/sand3 -ambient/nether/soulsand_valley/mood3 -ambient/nether/soulsand_valley/whisper2 -ambient/nether/soulsand_valley/wind2 -ambient/nether/soulsand_valley/wind4 -ambient/nether/soulsand_valley/mood2 -ambient/nether/soulsand_valley/whisper4 -ambient/nether/soulsand_valley/voices1 -ambient/nether/soulsand_valley/whisper8 -ambient/nether/warped_forest/addition2 -ambient/nether/warped_forest/mood4 -ambient/nether/warped_forest/here3 -ambient/nether/warped_forest/mood7 -ambient/nether/warped_forest/addition3 -ambient/nether/warped_forest/addition6 -ambient/nether/warped_forest/enish2 -ambient/nether/warped_forest/creak5 -ambient/nether/warped_forest/addition4 -ambient/nether/warped_forest/here2 -ambient/nether/warped_forest/help2 -ambient/nether/warped_forest/creak4 -ambient/nether/warped_forest/creak1 -ambient/nether/warped_forest/mood8 -ambient/nether/warped_forest/creak2 -ambient/nether/warped_forest/mood1 -ambient/nether/warped_forest/addition5 -ambient/nether/warped_forest/mood9 -ambient/nether/warped_forest/ambience -ambient/nether/warped_forest/mood6 -ambient/nether/warped_forest/mood5 -ambient/nether/warped_forest/enish3 -ambient/nether/warped_forest/addition1 -ambient/nether/warped_forest/here1 -ambient/nether/warped_forest/mood3 -ambient/nether/warped_forest/enish1 -ambient/nether/warped_forest/mood2 -ambient/nether/warped_forest/help1 -ambient/nether/warped_forest/creak3 -ambient/nether/basalt_deltas/plode2 -ambient/nether/basalt_deltas/click1 -ambient/nether/basalt_deltas/active3 -ambient/nether/basalt_deltas/plode3 -ambient/nether/basalt_deltas/twist4 -ambient/nether/basalt_deltas/click6 -ambient/nether/basalt_deltas/basaltground4 -ambient/nether/basalt_deltas/plode1 -ambient/nether/basalt_deltas/click5 -ambient/nether/basalt_deltas/twist2 -ambient/nether/basalt_deltas/twist3 -ambient/nether/basalt_deltas/basaltground2 -ambient/nether/basalt_deltas/click8 -ambient/nether/basalt_deltas/heavy_click1 -ambient/nether/basalt_deltas/twist1 -ambient/nether/basalt_deltas/click3 -ambient/nether/basalt_deltas/ambience -ambient/nether/basalt_deltas/debris3 -ambient/nether/basalt_deltas/heavy_click2 -ambient/nether/basalt_deltas/active4 -ambient/nether/basalt_deltas/basaltground3 -ambient/nether/basalt_deltas/active2 -ambient/nether/basalt_deltas/long_debris2 -ambient/nether/basalt_deltas/long_debris1 -ambient/nether/basalt_deltas/debris1 -ambient/nether/basalt_deltas/debris2 -ambient/nether/basalt_deltas/click2 -ambient/nether/basalt_deltas/basaltground1 -ambient/nether/basalt_deltas/click4 -ambient/nether/basalt_deltas/click7 -ambient/nether/basalt_deltas/active1 -ambient/nether/nether_wastes/addition2 -ambient/nether/nether_wastes/mood4 -ambient/nether/nether_wastes/addition7 -ambient/nether/nether_wastes/ground4 -ambient/nether/nether_wastes/addition3 -ambient/nether/nether_wastes/addition6 -ambient/nether/nether_wastes/addition4 -ambient/nether/nether_wastes/dark2 -ambient/nether/nether_wastes/mood1 -ambient/nether/nether_wastes/addition5 -ambient/nether/nether_wastes/ground1 -ambient/nether/nether_wastes/ambience -ambient/nether/nether_wastes/mood5 -ambient/nether/nether_wastes/ground2 -ambient/nether/nether_wastes/addition1 -ambient/nether/nether_wastes/dark1 -ambient/nether/nether_wastes/mood3 -ambient/nether/nether_wastes/ground3 -ambient/nether/nether_wastes/addition8 -ambient/nether/nether_wastes/mood2 -music/menu/moog_city_2 -music/menu/floating_trees -music/menu/beginning_2 -music/menu/mutation -music/game/dry_hands -music/game/floating_dream -music/game/fireflies -music/game/oxygene -music/game/lilypad -music/game/broken_clocks -music/game/bromeliad -music/game/swamp/firebugs -music/game/swamp/labyrinthine -music/game/swamp/aerie -music/game/crescent_dunes -music/game/deeper -music/game/comforting_memories -music/game/komorebi -music/game/left_to_bloom -music/game/os_piano -music/game/endless -music/game/end/the_end -music/game/end/boss -music/game/end/alpha -music/game/minecraft -music/game/pokopoko -music/game/ancestry -music/game/below_and_above -music/game/wet_hands -music/game/key -music/game/an_ordinary_day -music/game/creative/aria_math -music/game/creative/taswell -music/game/creative/biome_fest -music/game/creative/blind_spots -music/game/creative/haunt_muskie -music/game/creative/dreiton -music/game/eld_unknown -music/game/stand_tall -music/game/living_mice -music/game/featherfall -music/game/clark -music/game/yakusoku -music/game/watcher -music/game/echo_in_the_wind -music/game/sweden -music/game/haggstrom -music/game/water/dragon_fish -music/game/water/axolotl -music/game/water/shuniji -music/game/infinite_amethyst -music/game/mice_on_venus -music/game/wending -music/game/nether/warmth -music/game/nether/crimson_forest/chrysopoeia -music/game/nether/soulsand_valley/so_below -music/game/nether/ballad_of_the_cats -music/game/nether/dead_voxel -music/game/nether/concrete_halls -music/game/nether/nether_wastes/rubedo -music/game/a_familiar_room -music/game/puzzlebox -music/game/subwoofer_lullaby -music/game/danny -music/game/one_more_day -random/glass2 -random/bowhit2 -random/burp -random/glass3 -random/click_stereo -random/breath -random/chestclosed -random/orb -random/glass1 -random/bowhit4 -random/click -random/splash -random/eat2 -random/wood_click -random/bowhit1 -random/successful_hit -random/fuse -random/eat1 -random/fizz -random/eat3 -random/drink -random/door_open -random/anvil_break -random/explode1 -random/explode3 -random/explode4 -random/levelup -random/break -random/bow -random/explode2 -random/pop -random/classic_hurt -random/chestopen -random/bowhit3 -random/anvil_land -random/anvil_use -random/door_close -portal/portal -portal/travel -portal/trigger -tile/piston/out -tile/piston/in -enchant/soulspeed/soulspeed13 -enchant/soulspeed/soulspeed8 -enchant/soulspeed/soulspeed1 -enchant/soulspeed/soulspeed9 -enchant/soulspeed/soulspeed2 -enchant/soulspeed/soulspeed6 -enchant/soulspeed/soulspeed3 -enchant/soulspeed/soulspeed10 -enchant/soulspeed/soulspeed12 -enchant/soulspeed/soulspeed5 -enchant/soulspeed/soulspeed7 -enchant/soulspeed/soulspeed4 -enchant/soulspeed/soulspeed11 -enchant/thorns/hit1 -enchant/thorns/hit4 -enchant/thorns/hit2 -enchant/thorns/hit3 -block/brewing_stand/brew2 -block/brewing_stand/brew1 -block/pumpkin/carve2 -block/pumpkin/carve1 -block/frogspawn/step4 -block/frogspawn/hatch2 -block/frogspawn/break1 -block/frogspawn/hatch4 -block/frogspawn/break2 -block/frogspawn/break3 -block/frogspawn/break4 -block/frogspawn/hatch3 -block/frogspawn/step5 -block/frogspawn/step6 -block/frogspawn/step1 -block/frogspawn/hatch1 -block/frogspawn/hatch5 -block/frogspawn/step2 -block/frogspawn/step3 -block/conduit/short1 -block/conduit/short6 -block/conduit/short7 -block/conduit/activate -block/conduit/attack3 -block/conduit/short5 -block/conduit/attack2 -block/conduit/deactivate -block/conduit/short2 -block/conduit/short4 -block/conduit/ambient -block/conduit/short8 -block/conduit/short3 -block/conduit/short9 -block/conduit/attack1 -block/lantern/break1 -block/lantern/break5 -block/lantern/break6 -block/lantern/break2 -block/lantern/place6 -block/lantern/place2 -block/lantern/place5 -block/lantern/break3 -block/lantern/break4 -block/lantern/place4 -block/lantern/place3 -block/lantern/place1 -block/fungus/break1 -block/fungus/break5 -block/fungus/break6 -block/fungus/break2 -block/fungus/break3 -block/fungus/break4 -block/moss/step4 -block/moss/break1 -block/moss/break5 -block/moss/break2 -block/moss/break3 -block/moss/break4 -block/moss/step5 -block/moss/step6 -block/moss/step1 -block/moss/step2 -block/moss/step3 -block/nether_bricks/step4 -block/nether_bricks/break1 -block/nether_bricks/break5 -block/nether_bricks/break6 -block/nether_bricks/break2 -block/nether_bricks/break3 -block/nether_bricks/break4 -block/nether_bricks/step5 -block/nether_bricks/step6 -block/nether_bricks/step1 -block/nether_bricks/step2 -block/nether_bricks/step3 -block/dripstone/step4 -block/dripstone/break1 -block/dripstone/break5 -block/dripstone/break2 -block/dripstone/break3 -block/dripstone/break4 -block/dripstone/step5 -block/dripstone/step6 -block/dripstone/step1 -block/dripstone/step2 -block/dripstone/step3 -block/roots/step4 -block/roots/break1 -block/roots/break5 -block/roots/break6 -block/roots/break2 -block/roots/break3 -block/roots/break4 -block/roots/step5 -block/roots/step1 -block/roots/step2 -block/roots/step3 -block/campfire/crackle3 -block/campfire/crackle2 -block/campfire/crackle1 -block/campfire/crackle6 -block/campfire/crackle4 -block/campfire/crackle5 -block/nether_wood_fence/toggle2 -block/nether_wood_fence/toggle4 -block/nether_wood_fence/toggle1 -block/nether_wood_fence/toggle3 -block/amethyst/step8 -block/amethyst/step9 -block/amethyst/resonate2 -block/amethyst/step4 -block/amethyst/resonate1 -block/amethyst/break1 -block/amethyst/step12 -block/amethyst/break2 -block/amethyst/place2 -block/amethyst/resonate3 -block/amethyst/break3 -block/amethyst/break4 -block/amethyst/step5 -block/amethyst/step7 -block/amethyst/place4 -block/amethyst/resonate4 -block/amethyst/place3 -block/amethyst/step6 -block/amethyst/step11 -block/amethyst/step1 -block/amethyst/step10 -block/amethyst/place1 -block/amethyst/step2 -block/amethyst/step3 -block/amethyst/step13 -block/amethyst/step14 -block/amethyst/shimmer -block/iron_trapdoor/open4 -block/iron_trapdoor/open3 -block/iron_trapdoor/open2 -block/iron_trapdoor/close2 -block/iron_trapdoor/open1 -block/iron_trapdoor/close1 -block/iron_trapdoor/close3 -block/iron_trapdoor/close4 -block/cherrywood_trapdoor/toggle2 -block/cherrywood_trapdoor/toggle1 -block/cherrywood_trapdoor/toggle3 -block/bamboo_wood_door/toggle2 -block/bamboo_wood_door/toggle4 -block/bamboo_wood_door/toggle1 -block/bamboo_wood_door/toggle3 -block/enderchest/close -block/enderchest/open -block/sculk_catalyst/step4 -block/sculk_catalyst/break1 -block/sculk_catalyst/break10 -block/sculk_catalyst/break5 -block/sculk_catalyst/break6 -block/sculk_catalyst/break9 -block/sculk_catalyst/break2 -block/sculk_catalyst/place2 -block/sculk_catalyst/break8 -block/sculk_catalyst/place5 -block/sculk_catalyst/break3 -block/sculk_catalyst/break4 -block/sculk_catalyst/step5 -block/sculk_catalyst/place4 -block/sculk_catalyst/place3 -block/sculk_catalyst/step6 -block/sculk_catalyst/break7 -block/sculk_catalyst/step1 -block/sculk_catalyst/place1 -block/sculk_catalyst/step2 -block/sculk_catalyst/step3 -block/sculk_sensor/sculk_clicking2 -block/sculk_sensor/break1 -block/sculk_sensor/break5 -block/sculk_sensor/break2 -block/sculk_sensor/sculk_clicking_stop2 -block/sculk_sensor/place2 -block/sculk_sensor/sculk_clicking1 -block/sculk_sensor/place5 -block/sculk_sensor/break3 -block/sculk_sensor/break4 -block/sculk_sensor/place4 -block/sculk_sensor/place3 -block/sculk_sensor/sculk_clicking6 -block/sculk_sensor/sculk_clicking_stop1 -block/sculk_sensor/sculk_clicking_stop4 -block/sculk_sensor/place1 -block/sculk_sensor/sculk_clicking4 -block/sculk_sensor/sculk_clicking3 -block/sculk_sensor/sculk_clicking_stop3 -block/sculk_sensor/sculk_clicking5 -block/sculk_sensor/sculk_clicking_stop5 -block/honeyblock/slide4 -block/honeyblock/step4 -block/honeyblock/break1 -block/honeyblock/break5 -block/honeyblock/slide1 -block/honeyblock/break2 -block/honeyblock/slide3 -block/honeyblock/break3 -block/honeyblock/break4 -block/honeyblock/step5 -block/honeyblock/slide2 -block/honeyblock/step1 -block/honeyblock/step2 -block/honeyblock/step3 -block/cake/add_candle3 -block/cake/add_candle2 -block/cake/add_candle1 -block/bone_block/step4 -block/bone_block/break1 -block/bone_block/break5 -block/bone_block/break2 -block/bone_block/break3 -block/bone_block/break4 -block/bone_block/step5 -block/bone_block/step1 -block/bone_block/step2 -block/bone_block/step3 -block/packed_mud/step4 -block/packed_mud/break1 -block/packed_mud/break5 -block/packed_mud/break6 -block/packed_mud/break2 -block/packed_mud/break3 -block/packed_mud/break4 -block/packed_mud/step5 -block/packed_mud/step6 -block/packed_mud/step1 -block/packed_mud/step2 -block/packed_mud/step3 -block/respawn_anchor/charge1 -block/respawn_anchor/set_spawn1 -block/respawn_anchor/charge2 -block/respawn_anchor/deplete1 -block/respawn_anchor/deplete2 -block/respawn_anchor/ambient2 -block/respawn_anchor/charge3 -block/respawn_anchor/ambient3 -block/respawn_anchor/set_spawn3 -block/respawn_anchor/ambient1 -block/respawn_anchor/set_spawn2 -block/furnace/fire_crackle2 -block/furnace/fire_crackle3 -block/furnace/fire_crackle5 -block/furnace/fire_crackle1 -block/furnace/fire_crackle4 -block/sculk/charge1 -block/sculk/charge2 -block/sculk/break11 -block/sculk/spread3 -block/sculk/step4 -block/sculk/break1 -block/sculk/break10 -block/sculk/break14 -block/sculk/break5 -block/sculk/break6 -block/sculk/spread2 -block/sculk/charge5 -block/sculk/break9 -block/sculk/break2 -block/sculk/place2 -block/sculk/break8 -block/sculk/spread5 -block/sculk/place5 -block/sculk/break3 -block/sculk/break4 -block/sculk/break13 -block/sculk/step5 -block/sculk/charge3 -block/sculk/place4 -block/sculk/place3 -block/sculk/step6 -block/sculk/break7 -block/sculk/break12 -block/sculk/step1 -block/sculk/spread1 -block/sculk/place1 -block/sculk/step2 -block/sculk/step3 -block/sculk/charge4 -block/sculk/spread4 -block/fletching_table/fletching_table1 -block/fletching_table/fletching_table2 -block/deepslate/step4 -block/deepslate/break1 -block/deepslate/break2 -block/deepslate/place6 -block/deepslate/place2 -block/deepslate/place5 -block/deepslate/break3 -block/deepslate/break4 -block/deepslate/step5 -block/deepslate/place4 -block/deepslate/place3 -block/deepslate/step6 -block/deepslate/step1 -block/deepslate/place1 -block/deepslate/step2 -block/deepslate/step3 -block/spawner/step4 -block/spawner/break1 -block/spawner/break2 -block/spawner/break3 -block/spawner/break4 -block/spawner/step5 -block/spawner/step1 -block/spawner/step2 -block/spawner/step3 -block/copper_statue/become_statue4 -block/copper_statue/break1 -block/copper_statue/become_statue1 -block/copper_statue/hit1 -block/copper_statue/hit4 -block/copper_statue/become_statue2 -block/copper_statue/become_statue3 -block/copper_statue/break2 -block/copper_statue/place2 -block/copper_statue/break3 -block/copper_statue/hit2 -block/copper_statue/place4 -block/copper_statue/place3 -block/copper_statue/hit3 -block/copper_statue/place1 -block/chain/step4 -block/chain/break1 -block/chain/break2 -block/chain/break3 -block/chain/break4 -block/chain/step5 -block/chain/step6 -block/chain/step1 -block/chain/step2 -block/chain/step3 -block/resin/resin_break2 -block/resin/resin_place1 -block/resin/resin_break5 -block/resin/resin_break4 -block/resin/resin_step5 -block/resin/resin_break1 -block/resin/resin_break3 -block/resin/resin_place3 -block/resin/resin_step3 -block/resin/resin_place4 -block/resin/resin_step4 -block/resin/resin_fall -block/resin/resin_place2 -block/resin/resin_step1 -block/resin/resin_step2 -block/bamboo_wood/step4 -block/bamboo_wood/break1 -block/bamboo_wood/break5 -block/bamboo_wood/break2 -block/bamboo_wood/break3 -block/bamboo_wood/break4 -block/bamboo_wood/step5 -block/bamboo_wood/step6 -block/bamboo_wood/step1 -block/bamboo_wood/step2 -block/bamboo_wood/step3 -block/fence_gate/open2 -block/fence_gate/close2 -block/fence_gate/open1 -block/fence_gate/close1 -block/stem/step4 -block/stem/break1 -block/stem/break5 -block/stem/break6 -block/stem/break2 -block/stem/break3 -block/stem/break4 -block/stem/step5 -block/stem/step6 -block/stem/step1 -block/stem/step2 -block/stem/step3 -block/vine/climb4 -block/vine/break1 -block/vine/break2 -block/vine/climb2 -block/vine/break3 -block/vine/break4 -block/vine/climb3 -block/vine/climb5 -block/vine/climb1 -block/chorus_flower/grow1 -block/chorus_flower/death2 -block/chorus_flower/grow4 -block/chorus_flower/grow2 -block/chorus_flower/death1 -block/chorus_flower/death3 -block/chorus_flower/grow3 -block/iron/step4 -block/iron/break1 -block/iron/break5 -block/iron/break6 -block/iron/break2 -block/iron/break8 -block/iron/break3 -block/iron/break4 -block/iron/break7 -block/iron/step1 -block/iron/step2 -block/iron/step3 -block/beacon/power2 -block/beacon/power1 -block/beacon/activate -block/beacon/power3 -block/beacon/deactivate -block/beacon/ambient -block/bamboo_wood_fence/toggle2 -block/bamboo_wood_fence/toggle4 -block/bamboo_wood_fence/toggle1 -block/bamboo_wood_fence/toggle3 -block/tuff/step4 -block/tuff/break1 -block/tuff/break5 -block/tuff/break2 -block/tuff/break3 -block/tuff/break4 -block/tuff/step5 -block/tuff/step6 -block/tuff/step1 -block/tuff/step2 -block/tuff/step3 -block/pointed_dripstone/drip_lava4 -block/pointed_dripstone/land3 -block/pointed_dripstone/land4 -block/pointed_dripstone/drip_water_cauldron7 -block/pointed_dripstone/drip_water13 -block/pointed_dripstone/drip_water2 -block/pointed_dripstone/drip_water11 -block/pointed_dripstone/drip_water1 -block/pointed_dripstone/drip_water14 -block/pointed_dripstone/drip_lava2 -block/pointed_dripstone/drip_water10 -block/pointed_dripstone/drip_water_cauldron6 -block/pointed_dripstone/drip_water_cauldron5 -block/pointed_dripstone/drip_water3 -block/pointed_dripstone/land5 -block/pointed_dripstone/drip_lava_cauldron1 -block/pointed_dripstone/drip_water15 -block/pointed_dripstone/drip_lava_cauldron4 -block/pointed_dripstone/drip_water_cauldron8 -block/pointed_dripstone/land2 -block/pointed_dripstone/drip_water9 -block/pointed_dripstone/drip_water8 -block/pointed_dripstone/drip_water_cauldron4 -block/pointed_dripstone/drip_lava3 -block/pointed_dripstone/drip_water_cauldron3 -block/pointed_dripstone/drip_water_cauldron1 -block/pointed_dripstone/drip_water7 -block/pointed_dripstone/drip_lava_cauldron2 -block/pointed_dripstone/drip_water_cauldron2 -block/pointed_dripstone/land1 -block/pointed_dripstone/drip_lava6 -block/pointed_dripstone/drip_water4 -block/pointed_dripstone/drip_water12 -block/pointed_dripstone/drip_lava_cauldron3 -block/pointed_dripstone/drip_lava5 -block/pointed_dripstone/drip_water5 -block/pointed_dripstone/drip_water6 -block/pointed_dripstone/drip_lava1 -block/resin_bricks/resin_brick_step1 -block/resin_bricks/resin_brick_fall -block/resin_bricks/resin_brick_step3 -block/resin_bricks/resin_brick_step5 -block/resin_bricks/resin_brick_hit4 -block/resin_bricks/resin_brick_hit5 -block/resin_bricks/resin_brick_hit3 -block/resin_bricks/resin_brick_break -block/resin_bricks/resin_brick_step2 -block/resin_bricks/resin_brick_hit2 -block/resin_bricks/resin_brick_step4 -block/resin_bricks/resin_brick_place4 -block/resin_bricks/resin_brick_place1 -block/resin_bricks/resin_brick_place5 -block/resin_bricks/resin_brick_place2 -block/resin_bricks/resin_brick_place3 -block/resin_bricks/resin_brick_hit1 -block/cherry_wood_hanging_sign/step4 -block/cherry_wood_hanging_sign/break1 -block/cherry_wood_hanging_sign/break2 -block/cherry_wood_hanging_sign/break3 -block/cherry_wood_hanging_sign/break4 -block/cherry_wood_hanging_sign/step1 -block/cherry_wood_hanging_sign/step2 -block/cherry_wood_hanging_sign/step3 -block/pale_hanging_moss/pale_hanging_moss10 -block/pale_hanging_moss/pale_hanging_moss6 -block/pale_hanging_moss/pale_hanging_moss7 -block/pale_hanging_moss/pale_hanging_moss11 -block/pale_hanging_moss/pale_hanging_moss12 -block/pale_hanging_moss/pale_hanging_moss14 -block/pale_hanging_moss/pale_hanging_moss13 -block/pale_hanging_moss/pale_hanging_moss4 -block/pale_hanging_moss/pale_hanging_moss8 -block/pale_hanging_moss/pale_hanging_moss5 -block/pale_hanging_moss/pale_hanging_moss2 -block/pale_hanging_moss/pale_hanging_moss9 -block/pale_hanging_moss/pale_hanging_moss1 -block/pale_hanging_moss/pale_hanging_moss3 -block/pale_hanging_moss/pale_hanging_moss15 -block/cherrywood_door/toggle2 -block/cherrywood_door/toggle4 -block/cherrywood_door/toggle1 -block/cherrywood_door/toggle3 -block/decorated_pot/insert_fail1 -block/decorated_pot/insert1 -block/decorated_pot/step4 -block/decorated_pot/break1 -block/decorated_pot/insert_fail4 -block/decorated_pot/insert3 -block/decorated_pot/insert_fail3 -block/decorated_pot/shatter3 -block/decorated_pot/shatter1 -block/decorated_pot/break2 -block/decorated_pot/break3 -block/decorated_pot/break4 -block/decorated_pot/step5 -block/decorated_pot/insert_fail2 -block/decorated_pot/insert_fail5 -block/decorated_pot/step1 -block/decorated_pot/shatter4 -block/decorated_pot/shatter2 -block/decorated_pot/step2 -block/decorated_pot/step3 -block/decorated_pot/insert4 -block/decorated_pot/insert2 -block/decorated_pot/shatter5 -block/netherwart/step4 -block/netherwart/break1 -block/netherwart/break5 -block/netherwart/break6 -block/netherwart/break2 -block/netherwart/break3 -block/netherwart/break4 -block/netherwart/step5 -block/netherwart/step1 -block/netherwart/step2 -block/netherwart/step3 -block/big_dripleaf/tilt_up3 -block/big_dripleaf/step4 -block/big_dripleaf/break1 -block/big_dripleaf/break5 -block/big_dripleaf/break6 -block/big_dripleaf/tilt_down1 -block/big_dripleaf/tilt_down4 -block/big_dripleaf/break2 -block/big_dripleaf/tilt_up1 -block/big_dripleaf/break3 -block/big_dripleaf/break4 -block/big_dripleaf/step5 -block/big_dripleaf/tilt_up2 -block/big_dripleaf/tilt_down5 -block/big_dripleaf/step6 -block/big_dripleaf/tilt_down3 -block/big_dripleaf/step1 -block/big_dripleaf/tilt_down2 -block/big_dripleaf/tilt_up4 -block/big_dripleaf/step2 -block/big_dripleaf/step3 -block/cherrywood_fence_gate/toggle2 -block/cherrywood_fence_gate/toggle1 -block/cherrywood_fence_gate/toggle3 -block/chiseled_bookshelf/insert1 -block/chiseled_bookshelf/step4 -block/chiseled_bookshelf/break1 -block/chiseled_bookshelf/insert3 -block/chiseled_bookshelf/break5 -block/chiseled_bookshelf/break6 -block/chiseled_bookshelf/break2 -block/chiseled_bookshelf/pickup3 -block/chiseled_bookshelf/pickup_enchanted1 -block/chiseled_bookshelf/break3 -block/chiseled_bookshelf/break4 -block/chiseled_bookshelf/insert_enchanted3 -block/chiseled_bookshelf/step5 -block/chiseled_bookshelf/pickup2 -block/chiseled_bookshelf/insert_enchanted1 -block/chiseled_bookshelf/step1 -block/chiseled_bookshelf/pickup1 -block/chiseled_bookshelf/step2 -block/chiseled_bookshelf/pickup_enchanted2 -block/chiseled_bookshelf/step3 -block/chiseled_bookshelf/insert4 -block/chiseled_bookshelf/insert_enchanted2 -block/chiseled_bookshelf/insert2 -block/chiseled_bookshelf/pickup_enchanted3 -block/chiseled_bookshelf/insert_enchanted4 -block/waterlily/place2 -block/waterlily/place4 -block/waterlily/place3 -block/waterlily/place1 -block/basalt/step4 -block/basalt/break1 -block/basalt/break5 -block/basalt/break2 -block/basalt/break3 -block/basalt/break4 -block/basalt/step5 -block/basalt/step6 -block/basalt/step1 -block/basalt/step2 -block/basalt/step3 -block/leaf_litter/step4 -block/leaf_litter/break1 -block/leaf_litter/break5 -block/leaf_litter/break2 -block/leaf_litter/place2 -block/leaf_litter/place5 -block/leaf_litter/break3 -block/leaf_litter/break4 -block/leaf_litter/step5 -block/leaf_litter/place4 -block/leaf_litter/place3 -block/leaf_litter/step6 -block/leaf_litter/step1 -block/leaf_litter/place1 -block/leaf_litter/step2 -block/leaf_litter/step3 -block/azalea_leaves/step4 +ambient/cave/cave10 +ambient/cave/cave11 +ambient/cave/cave12 +ambient/cave/cave13 +ambient/cave/cave14 +ambient/cave/cave15 +ambient/cave/cave16 +ambient/cave/cave17 +ambient/cave/cave18 +ambient/cave/cave19 +ambient/cave/cave1 +ambient/cave/cave20 +ambient/cave/cave21 +ambient/cave/cave22 +ambient/cave/cave23 +ambient/cave/cave2 +ambient/cave/cave3 +ambient/cave/cave4 +ambient/cave/cave5 +ambient/cave/cave6 +ambient/cave/cave7 +ambient/cave/cave8 +ambient/cave/cave9 +ambient/nether/basalt_deltas/active1 +ambient/nether/basalt_deltas/active2 +ambient/nether/basalt_deltas/active3 +ambient/nether/basalt_deltas/active4 +ambient/nether/basalt_deltas/ambience +ambient/nether/basalt_deltas/basaltground1 +ambient/nether/basalt_deltas/basaltground2 +ambient/nether/basalt_deltas/basaltground3 +ambient/nether/basalt_deltas/basaltground4 +ambient/nether/basalt_deltas/click1 +ambient/nether/basalt_deltas/click2 +ambient/nether/basalt_deltas/click3 +ambient/nether/basalt_deltas/click4 +ambient/nether/basalt_deltas/click5 +ambient/nether/basalt_deltas/click6 +ambient/nether/basalt_deltas/click7 +ambient/nether/basalt_deltas/click8 +ambient/nether/basalt_deltas/debris1 +ambient/nether/basalt_deltas/debris2 +ambient/nether/basalt_deltas/debris3 +ambient/nether/basalt_deltas/heavy_click1 +ambient/nether/basalt_deltas/heavy_click2 +ambient/nether/basalt_deltas/long_debris1 +ambient/nether/basalt_deltas/long_debris2 +ambient/nether/basalt_deltas/plode1 +ambient/nether/basalt_deltas/plode2 +ambient/nether/basalt_deltas/plode3 +ambient/nether/basalt_deltas/twist1 +ambient/nether/basalt_deltas/twist2 +ambient/nether/basalt_deltas/twist3 +ambient/nether/basalt_deltas/twist4 +ambient/nether/crimson_forest/addition1 +ambient/nether/crimson_forest/addition2 +ambient/nether/crimson_forest/addition3 +ambient/nether/crimson_forest/ambience +ambient/nether/crimson_forest/mood1 +ambient/nether/crimson_forest/mood2 +ambient/nether/crimson_forest/mood3 +ambient/nether/crimson_forest/mood4 +ambient/nether/crimson_forest/particles1 +ambient/nether/crimson_forest/particles2 +ambient/nether/crimson_forest/particles3 +ambient/nether/crimson_forest/shine1 +ambient/nether/crimson_forest/shine2 +ambient/nether/crimson_forest/shine3 +ambient/nether/crimson_forest/shroom1 +ambient/nether/crimson_forest/shroom2 +ambient/nether/crimson_forest/shroom3 +ambient/nether/crimson_forest/twang1 +ambient/nether/crimson_forest/voom1 +ambient/nether/crimson_forest/voom2 +ambient/nether/nether_wastes/addition1 +ambient/nether/nether_wastes/addition2 +ambient/nether/nether_wastes/addition3 +ambient/nether/nether_wastes/addition4 +ambient/nether/nether_wastes/addition5 +ambient/nether/nether_wastes/addition6 +ambient/nether/nether_wastes/addition7 +ambient/nether/nether_wastes/addition8 +ambient/nether/nether_wastes/ambience +ambient/nether/nether_wastes/dark1 +ambient/nether/nether_wastes/dark2 +ambient/nether/nether_wastes/ground1 +ambient/nether/nether_wastes/ground2 +ambient/nether/nether_wastes/ground3 +ambient/nether/nether_wastes/ground4 +ambient/nether/nether_wastes/mood1 +ambient/nether/nether_wastes/mood2 +ambient/nether/nether_wastes/mood3 +ambient/nether/nether_wastes/mood4 +ambient/nether/nether_wastes/mood5 +ambient/nether/soulsand_valley/ambience +ambient/nether/soulsand_valley/mood1 +ambient/nether/soulsand_valley/mood2 +ambient/nether/soulsand_valley/mood3 +ambient/nether/soulsand_valley/mood4 +ambient/nether/soulsand_valley/sand1 +ambient/nether/soulsand_valley/sand2 +ambient/nether/soulsand_valley/sand3 +ambient/nether/soulsand_valley/voices1 +ambient/nether/soulsand_valley/voices2 +ambient/nether/soulsand_valley/voices3 +ambient/nether/soulsand_valley/voices4 +ambient/nether/soulsand_valley/voices5 +ambient/nether/soulsand_valley/whisper1 +ambient/nether/soulsand_valley/whisper2 +ambient/nether/soulsand_valley/whisper3 +ambient/nether/soulsand_valley/whisper4 +ambient/nether/soulsand_valley/whisper5 +ambient/nether/soulsand_valley/whisper6 +ambient/nether/soulsand_valley/whisper7 +ambient/nether/soulsand_valley/whisper8 +ambient/nether/soulsand_valley/wind1 +ambient/nether/soulsand_valley/wind2 +ambient/nether/soulsand_valley/wind3 +ambient/nether/soulsand_valley/wind4 +ambient/nether/soulsand_valley/with1 +ambient/nether/warped_forest/addition1 +ambient/nether/warped_forest/addition2 +ambient/nether/warped_forest/addition3 +ambient/nether/warped_forest/addition4 +ambient/nether/warped_forest/addition5 +ambient/nether/warped_forest/addition6 +ambient/nether/warped_forest/ambience +ambient/nether/warped_forest/creak1 +ambient/nether/warped_forest/creak2 +ambient/nether/warped_forest/creak3 +ambient/nether/warped_forest/creak4 +ambient/nether/warped_forest/creak5 +ambient/nether/warped_forest/enish1 +ambient/nether/warped_forest/enish2 +ambient/nether/warped_forest/enish3 +ambient/nether/warped_forest/help1 +ambient/nether/warped_forest/help2 +ambient/nether/warped_forest/here1 +ambient/nether/warped_forest/here2 +ambient/nether/warped_forest/here3 +ambient/nether/warped_forest/mood1 +ambient/nether/warped_forest/mood2 +ambient/nether/warped_forest/mood3 +ambient/nether/warped_forest/mood4 +ambient/nether/warped_forest/mood5 +ambient/nether/warped_forest/mood6 +ambient/nether/warped_forest/mood7 +ambient/nether/warped_forest/mood8 +ambient/nether/warped_forest/mood9 +ambient/underwater/additions/animal1 +ambient/underwater/additions/animal2 +ambient/underwater/additions/bass_whale1 +ambient/underwater/additions/bass_whale2 +ambient/underwater/additions/bubbles1 +ambient/underwater/additions/bubbles2 +ambient/underwater/additions/bubbles3 +ambient/underwater/additions/bubbles4 +ambient/underwater/additions/bubbles5 +ambient/underwater/additions/bubbles6 +ambient/underwater/additions/crackles1 +ambient/underwater/additions/crackles2 +ambient/underwater/additions/dark1 +ambient/underwater/additions/dark2 +ambient/underwater/additions/dark3 +ambient/underwater/additions/dark4 +ambient/underwater/additions/driplets1 +ambient/underwater/additions/driplets2 +ambient/underwater/additions/earth_crack +ambient/underwater/additions/water1 +ambient/underwater/additions/water2 +ambient/underwater/enter1 +ambient/underwater/enter2 +ambient/underwater/enter3 +ambient/underwater/exit1 +ambient/underwater/exit2 +ambient/underwater/exit3 +ambient/underwater/underwater_ambience +ambient/weather/end_flash1 +ambient/weather/end_flash2 +ambient/weather/end_flash3 +ambient/weather/end_flash4 +ambient/weather/end_flash5 +ambient/weather/end_flash6 +ambient/weather/end_flash7 +ambient/weather/end_flash8 +ambient/weather/rain1 +ambient/weather/rain2 +ambient/weather/rain3 +ambient/weather/rain4 +ambient/weather/rain5 +ambient/weather/rain6 +ambient/weather/rain7 +ambient/weather/rain8 +ambient/weather/thunder1 +ambient/weather/thunder2 +ambient/weather/thunder3 +block/amethyst/break1 +block/amethyst/break2 +block/amethyst/break3 +block/amethyst/break4 +block/amethyst_cluster/break1 +block/amethyst_cluster/break2 +block/amethyst_cluster/break3 +block/amethyst_cluster/break4 +block/amethyst_cluster/place1 +block/amethyst_cluster/place2 +block/amethyst_cluster/place3 +block/amethyst_cluster/place4 +block/amethyst/place1 +block/amethyst/place2 +block/amethyst/place3 +block/amethyst/place4 +block/amethyst/resonate1 +block/amethyst/resonate2 +block/amethyst/resonate3 +block/amethyst/resonate4 +block/amethyst/shimmer +block/amethyst/step10 +block/amethyst/step11 +block/amethyst/step12 +block/amethyst/step13 +block/amethyst/step14 +block/amethyst/step1 +block/amethyst/step2 +block/amethyst/step3 +block/amethyst/step4 +block/amethyst/step5 +block/amethyst/step6 +block/amethyst/step7 +block/amethyst/step8 +block/amethyst/step9 +block/ancient_debris/break1 +block/ancient_debris/break2 +block/ancient_debris/break3 +block/ancient_debris/break4 +block/ancient_debris/break5 +block/azalea/break1 +block/azalea/break2 +block/azalea/break3 +block/azalea/break4 +block/azalea/break5 +block/azalea/break6 block/azalea_leaves/break1 -block/azalea_leaves/break5 -block/azalea_leaves/break6 block/azalea_leaves/break2 block/azalea_leaves/break3 block/azalea_leaves/break4 -block/azalea_leaves/step5 +block/azalea_leaves/break5 +block/azalea_leaves/break6 block/azalea_leaves/break7 block/azalea_leaves/step1 block/azalea_leaves/step2 block/azalea_leaves/step3 -block/azalea/step4 -block/azalea/break1 -block/azalea/break5 -block/azalea/break6 -block/azalea/break2 -block/azalea/break3 -block/azalea/break4 -block/azalea/step5 -block/azalea/step6 +block/azalea_leaves/step4 +block/azalea_leaves/step5 block/azalea/step1 block/azalea/step2 block/azalea/step3 -block/crafter/craft -block/crafter/fail -block/blastfurnace/blastfurnace5 -block/blastfurnace/blastfurnace2 -block/blastfurnace/blastfurnace4 +block/azalea/step4 +block/azalea/step5 +block/azalea/step6 +block/bamboo/place1 +block/bamboo/place2 +block/bamboo/place3 +block/bamboo/place4 +block/bamboo/place5 +block/bamboo/place6 +block/bamboo/sapling_hit1 +block/bamboo/sapling_hit2 +block/bamboo/sapling_hit3 +block/bamboo/sapling_hit4 +block/bamboo/sapling_hit5 +block/bamboo/sapling_place1 +block/bamboo/sapling_place2 +block/bamboo/sapling_place3 +block/bamboo/sapling_place4 +block/bamboo/sapling_place5 +block/bamboo/sapling_place6 +block/bamboo/step1 +block/bamboo/step2 +block/bamboo/step3 +block/bamboo/step4 +block/bamboo/step5 +block/bamboo/step6 +block/bamboo_wood/break1 +block/bamboo_wood/break2 +block/bamboo_wood/break3 +block/bamboo_wood/break4 +block/bamboo_wood/break5 +block/bamboo_wood_button/bamboo_wood_button +block/bamboo_wood_door/toggle1 +block/bamboo_wood_door/toggle2 +block/bamboo_wood_door/toggle3 +block/bamboo_wood_door/toggle4 +block/bamboo_wood_fence/toggle1 +block/bamboo_wood_fence/toggle2 +block/bamboo_wood_fence/toggle3 +block/bamboo_wood_fence/toggle4 +block/bamboo_wood_hanging_sign/break1 +block/bamboo_wood_hanging_sign/break2 +block/bamboo_wood_hanging_sign/break3 +block/bamboo_wood_hanging_sign/break4 +block/bamboo_wood_hanging_sign/step1 +block/bamboo_wood_hanging_sign/step2 +block/bamboo_wood_hanging_sign/step3 +block/bamboo_wood_hanging_sign/step4 +block/bamboo_wood/step1 +block/bamboo_wood/step2 +block/bamboo_wood/step3 +block/bamboo_wood/step4 +block/bamboo_wood/step5 +block/bamboo_wood/step6 +block/bamboo_wood_trapdoor/toggle1 +block/bamboo_wood_trapdoor/toggle2 +block/bamboo_wood_trapdoor/toggle3 +block/bamboo_wood_trapdoor/toggle4 +block/barrel/close +block/barrel/open1 +block/barrel/open2 +block/basalt/break1 +block/basalt/break2 +block/basalt/break3 +block/basalt/break4 +block/basalt/break5 +block/basalt/step1 +block/basalt/step2 +block/basalt/step3 +block/basalt/step4 +block/basalt/step5 +block/basalt/step6 +block/beacon/activate +block/beacon/ambient +block/beacon/deactivate +block/beacon/power1 +block/beacon/power2 +block/beacon/power3 +block/beehive/drip1 +block/beehive/drip2 +block/beehive/drip3 +block/beehive/drip4 +block/beehive/drip5 +block/beehive/drip6 +block/beehive/enter +block/beehive/exit +block/beehive/shear +block/beehive/work1 +block/beehive/work2 +block/beehive/work3 +block/beehive/work4 +block/bell/bell_use01 +block/bell/bell_use02 +block/bell/resonate +block/big_dripleaf/break1 +block/big_dripleaf/break2 +block/big_dripleaf/break3 +block/big_dripleaf/break4 +block/big_dripleaf/break5 +block/big_dripleaf/break6 +block/big_dripleaf/step1 +block/big_dripleaf/step2 +block/big_dripleaf/step3 +block/big_dripleaf/step4 +block/big_dripleaf/step5 +block/big_dripleaf/step6 +block/big_dripleaf/tilt_down1 +block/big_dripleaf/tilt_down2 +block/big_dripleaf/tilt_down3 +block/big_dripleaf/tilt_down4 +block/big_dripleaf/tilt_down5 +block/big_dripleaf/tilt_up1 +block/big_dripleaf/tilt_up2 +block/big_dripleaf/tilt_up3 +block/big_dripleaf/tilt_up4 block/blastfurnace/blastfurnace1 +block/blastfurnace/blastfurnace2 block/blastfurnace/blastfurnace3 -block/hanging_roots/step4 -block/hanging_roots/break1 -block/hanging_roots/break2 -block/hanging_roots/break3 -block/hanging_roots/break4 -block/hanging_roots/step5 -block/hanging_roots/step6 -block/hanging_roots/step1 -block/hanging_roots/step2 -block/hanging_roots/step3 -block/nether_wood_button/nether_wood_button -block/calcite/step4 +block/blastfurnace/blastfurnace4 +block/blastfurnace/blastfurnace5 +block/bone_block/break1 +block/bone_block/break2 +block/bone_block/break3 +block/bone_block/break4 +block/bone_block/break5 +block/bone_block/step1 +block/bone_block/step2 +block/bone_block/step3 +block/bone_block/step4 +block/bone_block/step5 +block/brewing_stand/brew1 +block/brewing_stand/brew2 +block/bubble_column/bubble1 +block/bubble_column/bubble2 +block/bubble_column/bubble3 +block/bubble_column/upwards_ambient1 +block/bubble_column/upwards_ambient2 +block/bubble_column/upwards_ambient3 +block/bubble_column/upwards_ambient4 +block/bubble_column/upwards_ambient5 +block/bubble_column/upwards_inside +block/bubble_column/whirlpool_ambient1 +block/bubble_column/whirlpool_ambient2 +block/bubble_column/whirlpool_ambient3 +block/bubble_column/whirlpool_ambient4 +block/bubble_column/whirlpool_ambient5 +block/bubble_column/whirlpool_inside +block/cactus_flower/break1 +block/cactus_flower/break2 +block/cactus_flower/break3 +block/cactus_flower/break4 +block/cactus_flower/break5 +block/cactus_flower/place1 +block/cactus_flower/place2 +block/cactus_flower/place3 +block/cactus_flower/place4 +block/cake/add_candle1 +block/cake/add_candle2 +block/cake/add_candle3 block/calcite/break1 block/calcite/break2 -block/calcite/place2 block/calcite/break3 block/calcite/break4 -block/calcite/step5 -block/calcite/place4 +block/calcite/place1 +block/calcite/place2 block/calcite/place3 -block/calcite/step6 +block/calcite/place4 block/calcite/step1 -block/calcite/place1 block/calcite/step2 block/calcite/step3 -block/suspicious_sand/step4 -block/suspicious_sand/break1 -block/suspicious_sand/break5 -block/suspicious_sand/break6 -block/suspicious_sand/break2 -block/suspicious_sand/place2 -block/suspicious_sand/place5 -block/suspicious_sand/break3 -block/suspicious_sand/break4 -block/suspicious_sand/step5 -block/suspicious_sand/place4 -block/suspicious_sand/place3 -block/suspicious_sand/step1 -block/suspicious_sand/place1 -block/suspicious_sand/step2 -block/suspicious_sand/step3 -block/nether_wood_trapdoor/toggle2 -block/nether_wood_trapdoor/toggle4 -block/nether_wood_trapdoor/toggle1 -block/nether_wood_trapdoor/toggle3 -block/amethyst_cluster/break1 -block/amethyst_cluster/break2 -block/amethyst_cluster/place2 -block/amethyst_cluster/break3 -block/amethyst_cluster/break4 -block/amethyst_cluster/place4 -block/amethyst_cluster/place3 -block/amethyst_cluster/place1 -block/netherrack/step4 -block/netherrack/break1 -block/netherrack/break5 -block/netherrack/break6 -block/netherrack/break2 -block/netherrack/break3 -block/netherrack/break4 -block/netherrack/step5 -block/netherrack/step6 -block/netherrack/step1 -block/netherrack/step2 -block/netherrack/step3 -block/spore_blossom/step4 -block/spore_blossom/break1 -block/spore_blossom/break5 -block/spore_blossom/break2 -block/spore_blossom/break3 -block/spore_blossom/break4 -block/spore_blossom/step5 -block/spore_blossom/step6 -block/spore_blossom/step1 -block/spore_blossom/step2 -block/spore_blossom/step3 -block/smoker/smoker2 -block/smoker/smoker3 -block/smoker/smoker4 -block/smoker/smoker1 -block/smoker/smoker5 -block/sweet_berry_bush/break1 -block/sweet_berry_bush/break2 -block/sweet_berry_bush/place6 -block/sweet_berry_bush/place2 -block/sweet_berry_bush/place5 -block/sweet_berry_bush/break3 -block/sweet_berry_bush/break4 -block/sweet_berry_bush/place4 -block/sweet_berry_bush/place3 -block/sweet_berry_bush/place1 -block/mangrove_roots/step4 -block/mangrove_roots/break1 -block/mangrove_roots/break5 -block/mangrove_roots/break6 -block/mangrove_roots/break2 -block/mangrove_roots/break3 -block/mangrove_roots/break4 -block/mangrove_roots/step5 -block/mangrove_roots/step6 -block/mangrove_roots/step1 -block/mangrove_roots/step2 -block/mangrove_roots/step3 -block/deepslate_bricks/step4 -block/deepslate_bricks/place6 -block/deepslate_bricks/place2 -block/deepslate_bricks/place5 -block/deepslate_bricks/step5 -block/deepslate_bricks/place4 -block/deepslate_bricks/place3 -block/deepslate_bricks/step1 -block/deepslate_bricks/place1 -block/deepslate_bricks/step2 -block/deepslate_bricks/step3 -block/dry_grass/wind5 -block/dry_grass/wind3 -block/dry_grass/wind9 -block/dry_grass/wind1 -block/dry_grass/wind11 -block/dry_grass/wind10 -block/dry_grass/wind8 -block/dry_grass/wind7 -block/dry_grass/wind12 -block/dry_grass/wind6 -block/dry_grass/wind2 -block/dry_grass/wind4 -block/wooden_trapdoor/open5 -block/wooden_trapdoor/open4 -block/wooden_trapdoor/open3 -block/wooden_trapdoor/open2 -block/wooden_trapdoor/close2 -block/wooden_trapdoor/open1 -block/wooden_trapdoor/close1 -block/wooden_trapdoor/close3 -block/bamboo_wood_hanging_sign/step4 -block/bamboo_wood_hanging_sign/break1 -block/bamboo_wood_hanging_sign/break2 -block/bamboo_wood_hanging_sign/break3 -block/bamboo_wood_hanging_sign/break4 -block/bamboo_wood_hanging_sign/step1 -block/bamboo_wood_hanging_sign/step2 -block/bamboo_wood_hanging_sign/step3 -block/composter/fill_success1 -block/composter/ready1 -block/composter/fill3 -block/composter/fill_success3 -block/composter/empty3 -block/composter/empty1 -block/composter/ready3 -block/composter/fill1 -block/composter/fill_success2 -block/composter/empty2 -block/composter/fill_success4 -block/composter/fill4 -block/composter/fill2 -block/composter/ready4 -block/composter/ready2 -block/ancient_debris/break1 -block/ancient_debris/break5 -block/ancient_debris/break2 -block/ancient_debris/break3 -block/ancient_debris/break4 -block/wooden_door/open2 -block/wooden_door/close2 -block/wooden_door/open1 -block/wooden_door/close1 -block/wooden_door/close3 -block/sponge/step4 -block/sponge/absorb3 -block/sponge/break1 -block/sponge/break2 -block/sponge/break3 -block/sponge/break4 -block/sponge/step5 -block/sponge/step6 -block/sponge/step1 -block/sponge/wet_sponge/step4 -block/sponge/wet_sponge/break1 -block/sponge/wet_sponge/break2 -block/sponge/wet_sponge/break3 -block/sponge/wet_sponge/break4 -block/sponge/wet_sponge/step1 -block/sponge/wet_sponge/step2 -block/sponge/wet_sponge/step3 -block/sponge/absorb2 -block/sponge/step2 -block/sponge/step3 -block/sponge/absorb1 -block/cherry_leaves/step4 +block/calcite/step4 +block/calcite/step5 +block/calcite/step6 +block/campfire/crackle1 +block/campfire/crackle2 +block/campfire/crackle3 +block/campfire/crackle4 +block/campfire/crackle5 +block/campfire/crackle6 +block/candle/ambient1 +block/candle/ambient2 +block/candle/ambient3 +block/candle/ambient4 +block/candle/ambient5 +block/candle/ambient6 +block/candle/ambient7 +block/candle/ambient8 +block/candle/ambient9 +block/candle/break1 +block/candle/break2 +block/candle/break3 +block/candle/break4 +block/candle/break5 +block/candle/extinguish1 +block/candle/extinguish2 +block/candle/extinguish3 +block/candle/step1 +block/candle/step2 +block/candle/step3 +block/candle/step4 +block/candle/step5 +block/cauldron/dye1 +block/cauldron/dye2 +block/cauldron/dye3 +block/cave_vines/break1 +block/cave_vines/break2 +block/cave_vines/break3 +block/cave_vines/break4 +block/cave_vines/break5 +block/chain/break1 +block/chain/break2 +block/chain/break3 +block/chain/break4 +block/chain/step1 +block/chain/step2 +block/chain/step3 +block/chain/step4 +block/chain/step5 +block/chain/step6 block/cherry_leaves/break1 -block/cherry_leaves/break5 block/cherry_leaves/break2 block/cherry_leaves/break3 block/cherry_leaves/break4 -block/cherry_leaves/step5 +block/cherry_leaves/break5 block/cherry_leaves/step1 block/cherry_leaves/step2 block/cherry_leaves/step3 -block/froglight/step4 -block/froglight/break1 -block/froglight/break2 -block/froglight/break3 -block/froglight/break4 -block/froglight/step5 -block/froglight/step6 -block/froglight/step1 -block/froglight/step2 -block/froglight/step3 -block/nether_ore/step4 -block/nether_ore/break1 -block/nether_ore/break2 -block/nether_ore/break3 -block/nether_ore/break4 -block/nether_ore/step5 -block/nether_ore/step1 -block/nether_ore/step2 -block/nether_ore/step3 -block/eyeblossom/eyeblossom_idle5 -block/eyeblossom/eyeblossom_close3 -block/eyeblossom/eyeblossom_open3 -block/eyeblossom/eyeblossom_close2 -block/eyeblossom/eyeblossom_open4 -block/eyeblossom/eyeblossom_idle2 -block/eyeblossom/eyeblossom_open2 -block/eyeblossom/eyeblossom_idle3 -block/eyeblossom/eyeblossom_idle1 -block/eyeblossom/eyeblossom_idle6 -block/eyeblossom/eyeblossom_close_long -block/eyeblossom/eyeblossom_open1 -block/eyeblossom/eyeblossom_close1 -block/eyeblossom/eyeblossom_open_long -block/eyeblossom/eyeblossom_idle4 -block/cherry_wood/step4 +block/cherry_leaves/step4 +block/cherry_leaves/step5 block/cherry_wood/break1 -block/cherry_wood/break5 block/cherry_wood/break2 block/cherry_wood/break3 block/cherry_wood/break4 -block/cherry_wood/step5 -block/cherry_wood/step6 +block/cherry_wood/break5 +block/cherrywood_button/cherrywood_click +block/cherrywood_door/toggle1 +block/cherrywood_door/toggle2 +block/cherrywood_door/toggle3 +block/cherrywood_door/toggle4 +block/cherrywood_fence_gate/toggle1 +block/cherrywood_fence_gate/toggle2 +block/cherrywood_fence_gate/toggle3 +block/cherry_wood_hanging_sign/break1 +block/cherry_wood_hanging_sign/break2 +block/cherry_wood_hanging_sign/break3 +block/cherry_wood_hanging_sign/break4 +block/cherry_wood_hanging_sign/step1 +block/cherry_wood_hanging_sign/step2 +block/cherry_wood_hanging_sign/step3 +block/cherry_wood_hanging_sign/step4 block/cherry_wood/step1 block/cherry_wood/step2 block/cherry_wood/step3 -block/suspicious_gravel/step4 -block/suspicious_gravel/break1 -block/suspicious_gravel/break5 -block/suspicious_gravel/break6 -block/suspicious_gravel/break2 -block/suspicious_gravel/place2 -block/suspicious_gravel/break3 -block/suspicious_gravel/break4 -block/suspicious_gravel/place4 -block/suspicious_gravel/place3 -block/suspicious_gravel/step1 -block/suspicious_gravel/place1 -block/suspicious_gravel/step2 -block/suspicious_gravel/step3 -block/tuff_bricks/step4 -block/tuff_bricks/place2 -block/tuff_bricks/place5 -block/tuff_bricks/step5 -block/tuff_bricks/place4 -block/tuff_bricks/place3 -block/tuff_bricks/step6 -block/tuff_bricks/step1 -block/tuff_bricks/place1 -block/tuff_bricks/step2 -block/tuff_bricks/step3 -block/mud_bricks/step4 -block/mud_bricks/break1 -block/mud_bricks/break5 -block/mud_bricks/break6 -block/mud_bricks/break2 -block/mud_bricks/break3 -block/mud_bricks/break4 -block/mud_bricks/step5 -block/mud_bricks/step6 -block/mud_bricks/step1 -block/mud_bricks/step2 -block/mud_bricks/step3 -block/grindstone/grindstone1 -block/grindstone/grindstone3 -block/grindstone/grindstone2 -block/end_portal/eyeplace3 -block/end_portal/endportal -block/end_portal/eyeplace2 -block/end_portal/eyeplace1 -block/copper/step4 +block/cherry_wood/step4 +block/cherry_wood/step5 +block/cherry_wood/step6 +block/cherrywood_trapdoor/toggle1 +block/cherrywood_trapdoor/toggle2 +block/cherrywood_trapdoor/toggle3 +block/chest/close1 +block/chest/close2 +block/chest/close3 +block/chest/close_locked +block/chest/open_locked +block/chest/open +block/chiseled_bookshelf/break1 +block/chiseled_bookshelf/break2 +block/chiseled_bookshelf/break3 +block/chiseled_bookshelf/break4 +block/chiseled_bookshelf/break5 +block/chiseled_bookshelf/break6 +block/chiseled_bookshelf/insert1 +block/chiseled_bookshelf/insert2 +block/chiseled_bookshelf/insert3 +block/chiseled_bookshelf/insert4 +block/chiseled_bookshelf/insert_enchanted1 +block/chiseled_bookshelf/insert_enchanted2 +block/chiseled_bookshelf/insert_enchanted3 +block/chiseled_bookshelf/insert_enchanted4 +block/chiseled_bookshelf/pickup1 +block/chiseled_bookshelf/pickup2 +block/chiseled_bookshelf/pickup3 +block/chiseled_bookshelf/pickup_enchanted1 +block/chiseled_bookshelf/pickup_enchanted2 +block/chiseled_bookshelf/pickup_enchanted3 +block/chiseled_bookshelf/step1 +block/chiseled_bookshelf/step2 +block/chiseled_bookshelf/step3 +block/chiseled_bookshelf/step4 +block/chiseled_bookshelf/step5 +block/chorus_flower/death1 +block/chorus_flower/death2 +block/chorus_flower/death3 +block/chorus_flower/grow1 +block/chorus_flower/grow2 +block/chorus_flower/grow3 +block/chorus_flower/grow4 +block/cinnabar/break1 +block/cinnabar/break2 +block/cinnabar/break3 +block/cinnabar/break4 +block/cinnabar/break5 +block/cinnabar/break6 +block/cinnabar/break7 +block/cinnabar/hit1 +block/cinnabar/hit2 +block/cinnabar/hit3 +block/cinnabar/hit4 +block/cinnabar/hit5 +block/cinnabar/hit6 +block/cinnabar/hit7 +block/cinnabar/place1 +block/cinnabar/place2 +block/cinnabar/place3 +block/cinnabar/place4 +block/cinnabar/place5 +block/cinnabar/place6 +block/cinnabar/place7 +block/cinnabar/step1 +block/cinnabar/step2 +block/cinnabar/step3 +block/cinnabar/step4 +block/cinnabar/step5 +block/cinnabar/step6 +block/cinnabar/step7 +block/cobweb/break1 +block/cobweb/break2 +block/cobweb/break3 +block/cobweb/break4 +block/cobweb/break5 +block/cobweb/break6 +block/cobweb/step1 +block/cobweb/step2 +block/cobweb/step3 +block/cobweb/step4 +block/cobweb/step5 +block/cobweb/step6 +block/composter/empty1 +block/composter/empty2 +block/composter/empty3 +block/composter/fill1 +block/composter/fill2 +block/composter/fill3 +block/composter/fill4 +block/composter/fill_success1 +block/composter/fill_success2 +block/composter/fill_success3 +block/composter/fill_success4 +block/composter/ready1 +block/composter/ready2 +block/composter/ready3 +block/composter/ready4 +block/conduit/activate +block/conduit/ambient +block/conduit/attack1 +block/conduit/attack2 +block/conduit/attack3 +block/conduit/deactivate +block/conduit/short1 +block/conduit/short2 +block/conduit/short3 +block/conduit/short4 +block/conduit/short5 +block/conduit/short6 +block/conduit/short7 +block/conduit/short8 +block/conduit/short9 block/copper/break1 block/copper/break2 block/copper/break3 block/copper/break4 -block/copper/step5 -block/copper/step6 +block/copper_bulb/break1 +block/copper_bulb/break2 +block/copper_bulb/break3 +block/copper_bulb/break4 +block/copper_bulb/place1 +block/copper_bulb/place2 +block/copper_bulb/place3 +block/copper_bulb/place4 +block/copper_bulb/step1 +block/copper_bulb/step2 +block/copper_bulb/step3 +block/copper_bulb/step4 +block/copper_bulb/step5 +block/copper_bulb/step6 +block/copper_bulb/toggle +block/copper_chest/copper_chest_close1 +block/copper_chest/copper_chest_close2 +block/copper_chest/copper_chest_close3 +block/copper_chest/copper_chest_open1 +block/copper_chest/copper_chest_open2 +block/copper_chest/copper_chest_open3 +block/copper_chest/copper_chest_oxidized_close1 +block/copper_chest/copper_chest_oxidized_close2 +block/copper_chest/copper_chest_oxidized_close3 +block/copper_chest/copper_chest_oxidized_open1 +block/copper_chest/copper_chest_oxidized_open2 +block/copper_chest/copper_chest_oxidized_open3 +block/copper_chest/copper_chest_weathered_close1 +block/copper_chest/copper_chest_weathered_close2 +block/copper_chest/copper_chest_weathered_close3 +block/copper_chest/copper_chest_weathered_open1 +block/copper_chest/copper_chest_weathered_open2 +block/copper_chest/copper_chest_weathered_open3 +block/copper_door/toggle1 +block/copper_door/toggle2 +block/copper_door/toggle3 +block/copper_grate/break1 +block/copper_grate/break2 +block/copper_grate/break3 +block/copper_grate/break4 +block/copper_grate/step1 +block/copper_grate/step2 +block/copper_grate/step3 +block/copper_grate/step4 +block/copper_grate/step5 +block/copper_grate/step6 +block/copper_statue/become_statue1 +block/copper_statue/become_statue2 +block/copper_statue/become_statue3 +block/copper_statue/become_statue4 +block/copper_statue/break1 +block/copper_statue/break2 +block/copper_statue/break3 +block/copper_statue/hit1 +block/copper_statue/hit2 +block/copper_statue/hit3 +block/copper_statue/hit4 +block/copper_statue/place1 +block/copper_statue/place2 +block/copper_statue/place3 +block/copper_statue/place4 block/copper/step1 block/copper/step2 block/copper/step3 -block/bamboo_wood_button/bamboo_wood_button -block/barrel/close -block/barrel/open2 -block/barrel/open1 -block/copper_trapdoor/toggle2 -block/copper_trapdoor/toggle4 +block/copper/step4 +block/copper/step5 +block/copper/step6 block/copper_trapdoor/toggle1 +block/copper_trapdoor/toggle2 block/copper_trapdoor/toggle3 -block/candle/step4 -block/candle/break1 -block/candle/break5 -block/candle/extinguish2 -block/candle/ambient9 -block/candle/ambient4 -block/candle/break2 -block/candle/ambient2 -block/candle/break3 -block/candle/break4 -block/candle/step5 -block/candle/ambient3 -block/candle/step1 -block/candle/ambient6 -block/candle/extinguish3 -block/candle/ambient5 -block/candle/step2 -block/candle/step3 -block/candle/ambient7 -block/candle/ambient1 -block/candle/ambient8 -block/candle/extinguish1 -block/sand/sand15 -block/sand/sand10 -block/sand/sand6 -block/sand/sand19 -block/sand/sand20 -block/sand/sand4 -block/sand/sand1 -block/sand/sand5 -block/sand/sand11 -block/sand/sand8 -block/sand/sand16 -block/sand/sand2 -block/sand/sand12 -block/sand/sand14 -block/sand/sand13 -block/sand/sand9 -block/sand/sand3 -block/sand/sand21 -block/sand/sand7 -block/sand/sand18 -block/sand/sand17 -block/bamboo_wood_trapdoor/toggle2 -block/bamboo_wood_trapdoor/toggle4 -block/bamboo_wood_trapdoor/toggle1 -block/bamboo_wood_trapdoor/toggle3 -block/muddy_mangrove_roots/step4 -block/muddy_mangrove_roots/break1 -block/muddy_mangrove_roots/break5 -block/muddy_mangrove_roots/break6 -block/muddy_mangrove_roots/break2 -block/muddy_mangrove_roots/break3 -block/muddy_mangrove_roots/break4 -block/muddy_mangrove_roots/step5 -block/muddy_mangrove_roots/step6 -block/muddy_mangrove_roots/step1 -block/muddy_mangrove_roots/step2 -block/muddy_mangrove_roots/step3 -block/nether_wood_door/toggle2 -block/nether_wood_door/toggle4 -block/nether_wood_door/toggle1 -block/nether_wood_door/toggle3 -block/deadbush/sandblock_version/movingsand2 -block/deadbush/sandblock_version/crickets +block/copper_trapdoor/toggle4 +block/crafter/craft +block/crafter/fail +block/creaking_heart/break/creaking_heart_break +block/creaking_heart/fall/creaking_heart_fall +block/creaking_heart/hit/creaking_heart_hit1 +block/creaking_heart/hit/creaking_heart_hit2 +block/creaking_heart/hit/creaking_heart_hit3 +block/creaking_heart/hit/creaking_heart_hit4 +block/creaking_heart/hit/creaking_heart_hit5 +block/creaking_heart/hurt/trail1 +block/creaking_heart/hurt/trail2 +block/creaking_heart/hurt/trail3 +block/creaking_heart/hurt/trail4 +block/creaking_heart/hurt/trail5 +block/creaking_heart/hurt/trail6 +block/creaking_heart/hurt/trail7 +block/creaking_heart/idle/creaking_heart_idle1 +block/creaking_heart/idle/creaking_heart_idle2 +block/creaking_heart/idle/creaking_heart_idle3 +block/creaking_heart/idle/creaking_heart_idle4 +block/creaking_heart/place/creaking_heart_place1 +block/creaking_heart/place/creaking_heart_place2 +block/creaking_heart/place/creaking_heart_place3 +block/creaking_heart/place/creaking_heart_place4 +block/creaking_heart/place/wood1 +block/creaking_heart/place/wood2 +block/creaking_heart/place/wood3 +block/creaking_heart/place/wood4 +block/creaking_heart/spawnmob/creaking_heart_spawnmob +block/creaking_heart/step/creaking_heart_step1 +block/creaking_heart/step/creaking_heart_step2 +block/creaking_heart/step/creaking_heart_step3 +block/creaking_heart/step/creaking_heart_step4 +block/creaking_heart/step/creaking_heart_step5 +block/creaking_heart/step/creaking_heart_step6 +block/deadbush/sandblock_version/bushrustle1 block/deadbush/sandblock_version/bushrustle2 -block/deadbush/sandblock_version/insect1 -block/deadbush/sandblock_version/leaves -block/deadbush/sandblock_version/howlingwind1 -block/deadbush/sandblock_version/movingsand3 block/deadbush/sandblock_version/bushrustle3 block/deadbush/sandblock_version/creakysand1 +block/deadbush/sandblock_version/crickets +block/deadbush/sandblock_version/howlingwind1 +block/deadbush/sandblock_version/insect1 +block/deadbush/sandblock_version/leaves block/deadbush/sandblock_version/movingsand1 -block/deadbush/sandblock_version/bushrustle1 -block/dried_ghast/ambient_water2 -block/dried_ghast/step4 -block/dried_ghast/ambient4 +block/deadbush/sandblock_version/movingsand2 +block/deadbush/sandblock_version/movingsand3 +block/decorated_pot/break1 +block/decorated_pot/break2 +block/decorated_pot/break3 +block/decorated_pot/break4 +block/decorated_pot/insert1 +block/decorated_pot/insert2 +block/decorated_pot/insert3 +block/decorated_pot/insert4 +block/decorated_pot/insert_fail1 +block/decorated_pot/insert_fail2 +block/decorated_pot/insert_fail3 +block/decorated_pot/insert_fail4 +block/decorated_pot/insert_fail5 +block/decorated_pot/shatter1 +block/decorated_pot/shatter2 +block/decorated_pot/shatter3 +block/decorated_pot/shatter4 +block/decorated_pot/shatter5 +block/decorated_pot/step1 +block/decorated_pot/step2 +block/decorated_pot/step3 +block/decorated_pot/step4 +block/decorated_pot/step5 +block/deepslate/break1 +block/deepslate/break2 +block/deepslate/break3 +block/deepslate/break4 +block/deepslate_bricks/place1 +block/deepslate_bricks/place2 +block/deepslate_bricks/place3 +block/deepslate_bricks/place4 +block/deepslate_bricks/place5 +block/deepslate_bricks/place6 +block/deepslate_bricks/step1 +block/deepslate_bricks/step2 +block/deepslate_bricks/step3 +block/deepslate_bricks/step4 +block/deepslate_bricks/step5 +block/deepslate/place1 +block/deepslate/place2 +block/deepslate/place3 +block/deepslate/place4 +block/deepslate/place5 +block/deepslate/place6 +block/deepslate/step1 +block/deepslate/step2 +block/deepslate/step3 +block/deepslate/step4 +block/deepslate/step5 +block/deepslate/step6 +block/dried_ghast/ambient1 block/dried_ghast/ambient2 -block/dried_ghast/place6 -block/dried_ghast/place2 -block/dried_ghast/place5 -block/dried_ghast/ambient_water1 -block/dried_ghast/step5 -block/dried_ghast/transition block/dried_ghast/ambient3 -block/dried_ghast/place4 +block/dried_ghast/ambient4 +block/dried_ghast/ambient_water1 +block/dried_ghast/ambient_water2 +block/dried_ghast/break +block/dried_ghast/place1 +block/dried_ghast/place2 block/dried_ghast/place3 -block/dried_ghast/step6 +block/dried_ghast/place4 +block/dried_ghast/place5 +block/dried_ghast/place6 block/dried_ghast/placeinwater block/dried_ghast/step1 -block/dried_ghast/place1 -block/dried_ghast/break block/dried_ghast/step2 block/dried_ghast/step3 -block/dried_ghast/ambient1 -block/copper_door/toggle2 -block/copper_door/toggle1 -block/copper_door/toggle3 -block/hanging_sign/step4 +block/dried_ghast/step4 +block/dried_ghast/step5 +block/dried_ghast/step6 +block/dried_ghast/transition +block/dripstone/break1 +block/dripstone/break2 +block/dripstone/break3 +block/dripstone/break4 +block/dripstone/break5 +block/dripstone/step1 +block/dripstone/step2 +block/dripstone/step3 +block/dripstone/step4 +block/dripstone/step5 +block/dripstone/step6 +block/dry_grass/wind10 +block/dry_grass/wind11 +block/dry_grass/wind12 +block/dry_grass/wind1 +block/dry_grass/wind2 +block/dry_grass/wind3 +block/dry_grass/wind4 +block/dry_grass/wind5 +block/dry_grass/wind6 +block/dry_grass/wind7 +block/dry_grass/wind8 +block/dry_grass/wind9 +block/enchantment_table/enchant1 +block/enchantment_table/enchant2 +block/enchantment_table/enchant3 +block/enderchest/close +block/enderchest/open +block/end_portal/endportal +block/end_portal/eyeplace1 +block/end_portal/eyeplace2 +block/end_portal/eyeplace3 +block/eyeblossom/eyeblossom_close1 +block/eyeblossom/eyeblossom_close2 +block/eyeblossom/eyeblossom_close3 +block/eyeblossom/eyeblossom_close_long +block/eyeblossom/eyeblossom_idle1 +block/eyeblossom/eyeblossom_idle2 +block/eyeblossom/eyeblossom_idle3 +block/eyeblossom/eyeblossom_idle4 +block/eyeblossom/eyeblossom_idle5 +block/eyeblossom/eyeblossom_idle6 +block/eyeblossom/eyeblossom_open1 +block/eyeblossom/eyeblossom_open2 +block/eyeblossom/eyeblossom_open3 +block/eyeblossom/eyeblossom_open4 +block/eyeblossom/eyeblossom_open_long +block/fence_gate/close1 +block/fence_gate/close2 +block/fence_gate/open1 +block/fence_gate/open2 +block/firefly_bush/firefly_bush10 +block/firefly_bush/firefly_bush11 +block/firefly_bush/firefly_bush1 +block/firefly_bush/firefly_bush2 +block/firefly_bush/firefly_bush3 +block/firefly_bush/firefly_bush4 +block/firefly_bush/firefly_bush5 +block/firefly_bush/firefly_bush6 +block/firefly_bush/firefly_bush7 +block/firefly_bush/firefly_bush8 +block/firefly_bush/firefly_bush9 +block/fletching_table/fletching_table1 +block/fletching_table/fletching_table2 +block/froglight/break1 +block/froglight/break2 +block/froglight/break3 +block/froglight/break4 +block/froglight/step1 +block/froglight/step2 +block/froglight/step3 +block/froglight/step4 +block/froglight/step5 +block/froglight/step6 +block/frogspawn/break1 +block/frogspawn/break2 +block/frogspawn/break3 +block/frogspawn/break4 +block/frogspawn/hatch1 +block/frogspawn/hatch2 +block/frogspawn/hatch3 +block/frogspawn/hatch4 +block/frogspawn/hatch5 +block/frogspawn/step1 +block/frogspawn/step2 +block/frogspawn/step3 +block/frogspawn/step4 +block/frogspawn/step5 +block/frogspawn/step6 +block/fungus/break1 +block/fungus/break2 +block/fungus/break3 +block/fungus/break4 +block/fungus/break5 +block/fungus/break6 +block/furnace/fire_crackle1 +block/furnace/fire_crackle2 +block/furnace/fire_crackle3 +block/furnace/fire_crackle4 +block/furnace/fire_crackle5 +block/grindstone/grindstone1 +block/grindstone/grindstone2 +block/grindstone/grindstone3 +block/hanging_roots/break1 +block/hanging_roots/break2 +block/hanging_roots/break3 +block/hanging_roots/break4 +block/hanging_roots/step1 +block/hanging_roots/step2 +block/hanging_roots/step3 +block/hanging_roots/step4 +block/hanging_roots/step5 +block/hanging_roots/step6 block/hanging_sign/break1 block/hanging_sign/break2 block/hanging_sign/break3 @@ -4081,484 +934,4033 @@ block/hanging_sign/break4 block/hanging_sign/step1 block/hanging_sign/step2 block/hanging_sign/step3 -block/enchantment_table/enchant2 -block/enchantment_table/enchant1 -block/enchantment_table/enchant3 -block/bell/bell_use01 -block/bell/resonate -block/bell/bell_use02 -block/trial_spawner/ambient_ominous5 -block/trial_spawner/spawn_item_begin1 -block/trial_spawner/step4 -block/trial_spawner/break1 -block/trial_spawner/spawn4 -block/trial_spawner/spawn_item2 -block/trial_spawner/spawn_item3 -block/trial_spawner/spawn_item_begin2 -block/trial_spawner/ambient4 -block/trial_spawner/open_shutter -block/trial_spawner/ominous_activate -block/trial_spawner/break2 -block/trial_spawner/ambient2 -block/trial_spawner/spawn1 -block/trial_spawner/place2 -block/trial_spawner/break3 -block/trial_spawner/detect_player1 -block/trial_spawner/ambient_ominous2 -block/trial_spawner/step5 -block/trial_spawner/ambient_ominous4 -block/trial_spawner/ambient3 -block/trial_spawner/close_shutter -block/trial_spawner/about_to_spawn_item -block/trial_spawner/place3 -block/trial_spawner/ambient_ominous3 -block/trial_spawner/detect_player2 -block/trial_spawner/step1 -block/trial_spawner/spawn3 -block/trial_spawner/spawn_item1 -block/trial_spawner/place1 -block/trial_spawner/ambient5 -block/trial_spawner/step2 -block/trial_spawner/step3 -block/trial_spawner/eject_item1 -block/trial_spawner/ambient_ominous1 -block/trial_spawner/ambient1 -block/trial_spawner/spawn2 -block/trial_spawner/detect_player3 -block/trial_spawner/spawn_item_begin3 -block/copper_grate/step4 -block/copper_grate/break1 -block/copper_grate/break2 -block/copper_grate/break3 -block/copper_grate/break4 -block/copper_grate/step5 -block/copper_grate/step6 -block/copper_grate/step1 -block/copper_grate/step2 -block/copper_grate/step3 -block/bamboo/sapling_place6 -block/bamboo/sapling_place2 -block/bamboo/step4 -block/bamboo/sapling_hit1 -block/bamboo/sapling_place1 -block/bamboo/sapling_hit5 -block/bamboo/sapling_hit2 -block/bamboo/sapling_place3 -block/bamboo/sapling_place4 -block/bamboo/place6 -block/bamboo/place2 -block/bamboo/place5 -block/bamboo/step5 -block/bamboo/place4 -block/bamboo/place3 -block/bamboo/step6 -block/bamboo/sapling_hit4 -block/bamboo/step1 -block/bamboo/place1 -block/bamboo/sapling_hit3 -block/bamboo/step2 -block/bamboo/step3 -block/bamboo/sapling_place5 -block/creaking_heart/spawnmob/creaking_heart_spawnmob -block/creaking_heart/hurt/trail2 -block/creaking_heart/hurt/trail7 -block/creaking_heart/hurt/trail1 -block/creaking_heart/hurt/trail6 -block/creaking_heart/hurt/trail4 -block/creaking_heart/hurt/trail3 -block/creaking_heart/hurt/trail5 -block/creaking_heart/break/creaking_heart_break -block/creaking_heart/step/creaking_heart_step5 -block/creaking_heart/step/creaking_heart_step4 -block/creaking_heart/step/creaking_heart_step6 -block/creaking_heart/step/creaking_heart_step1 -block/creaking_heart/step/creaking_heart_step2 -block/creaking_heart/step/creaking_heart_step3 -block/creaking_heart/place/creaking_heart_place1 -block/creaking_heart/place/creaking_heart_place3 -block/creaking_heart/place/creaking_heart_place2 -block/creaking_heart/place/creaking_heart_place4 -block/creaking_heart/fall/creaking_heart_fall -block/creaking_heart/hit/creaking_heart_hit5 -block/creaking_heart/hit/creaking_heart_hit4 -block/creaking_heart/hit/creaking_heart_hit1 -block/creaking_heart/hit/creaking_heart_hit3 -block/creaking_heart/hit/creaking_heart_hit2 -block/creaking_heart/idle/creaking_heart_idle1 -block/creaking_heart/idle/creaking_heart_idle2 -block/creaking_heart/idle/creaking_heart_idle3 -block/creaking_heart/idle/creaking_heart_idle4 -block/rooted_dirt/step4 +block/hanging_sign/step4 +block/heavy_core/break1 +block/heavy_core/break2 +block/heavy_core/break3 +block/heavy_core/break4 +block/heavy_core/step1 +block/heavy_core/step2 +block/heavy_core/step3 +block/heavy_core/step4 +block/honeyblock/break1 +block/honeyblock/break2 +block/honeyblock/break3 +block/honeyblock/break4 +block/honeyblock/break5 +block/honeyblock/slide1 +block/honeyblock/slide2 +block/honeyblock/slide3 +block/honeyblock/slide4 +block/honeyblock/step1 +block/honeyblock/step2 +block/honeyblock/step3 +block/honeyblock/step4 +block/honeyblock/step5 +block/iron/break1 +block/iron/break2 +block/iron/break3 +block/iron/break4 +block/iron/break5 +block/iron/break6 +block/iron/break7 +block/iron/break8 +block/iron_door/close1 +block/iron_door/close2 +block/iron_door/close3 +block/iron_door/close4 +block/iron_door/open1 +block/iron_door/open2 +block/iron_door/open3 +block/iron_door/open4 +block/iron/step1 +block/iron/step2 +block/iron/step3 +block/iron/step4 +block/iron_trapdoor/close1 +block/iron_trapdoor/close2 +block/iron_trapdoor/close3 +block/iron_trapdoor/close4 +block/iron_trapdoor/open1 +block/iron_trapdoor/open2 +block/iron_trapdoor/open3 +block/iron_trapdoor/open4 +block/lantern/break1 +block/lantern/break2 +block/lantern/break3 +block/lantern/break4 +block/lantern/break5 +block/lantern/break6 +block/lantern/place1 +block/lantern/place2 +block/lantern/place3 +block/lantern/place4 +block/lantern/place5 +block/lantern/place6 +block/leaf_litter/break1 +block/leaf_litter/break2 +block/leaf_litter/break3 +block/leaf_litter/break4 +block/leaf_litter/break5 +block/leaf_litter/place1 +block/leaf_litter/place2 +block/leaf_litter/place3 +block/leaf_litter/place4 +block/leaf_litter/place5 +block/leaf_litter/step1 +block/leaf_litter/step2 +block/leaf_litter/step3 +block/leaf_litter/step4 +block/leaf_litter/step5 +block/leaf_litter/step6 +block/lodestone/lock1 +block/lodestone/lock2 +block/lodestone/place1 +block/lodestone/place2 +block/lodestone/place3 +block/lodestone/place4 +block/mangrove_roots/break1 +block/mangrove_roots/break2 +block/mangrove_roots/break3 +block/mangrove_roots/break4 +block/mangrove_roots/break5 +block/mangrove_roots/break6 +block/mangrove_roots/step1 +block/mangrove_roots/step2 +block/mangrove_roots/step3 +block/mangrove_roots/step4 +block/mangrove_roots/step5 +block/mangrove_roots/step6 +block/moss/break1 +block/moss/break2 +block/moss/break3 +block/moss/break4 +block/moss/break5 +block/moss/step1 +block/moss/step2 +block/moss/step3 +block/moss/step4 +block/moss/step5 +block/moss/step6 +block/mud/break1 +block/mud/break2 +block/mud/break3 +block/mud/break4 +block/mud/break5 +block/mud/break6 +block/mud_bricks/break1 +block/mud_bricks/break2 +block/mud_bricks/break3 +block/mud_bricks/break4 +block/mud_bricks/break5 +block/mud_bricks/break6 +block/mud_bricks/step1 +block/mud_bricks/step2 +block/mud_bricks/step3 +block/mud_bricks/step4 +block/mud_bricks/step5 +block/mud_bricks/step6 +block/muddy_mangrove_roots/break1 +block/muddy_mangrove_roots/break2 +block/muddy_mangrove_roots/break3 +block/muddy_mangrove_roots/break4 +block/muddy_mangrove_roots/break5 +block/muddy_mangrove_roots/break6 +block/muddy_mangrove_roots/step1 +block/muddy_mangrove_roots/step2 +block/muddy_mangrove_roots/step3 +block/muddy_mangrove_roots/step4 +block/muddy_mangrove_roots/step5 +block/muddy_mangrove_roots/step6 +block/mud/step1 +block/mud/step2 +block/mud/step3 +block/mud/step4 +block/mud/step5 +block/mud/step6 +block/nether_bricks/break1 +block/nether_bricks/break2 +block/nether_bricks/break3 +block/nether_bricks/break4 +block/nether_bricks/break5 +block/nether_bricks/break6 +block/nether_bricks/step1 +block/nether_bricks/step2 +block/nether_bricks/step3 +block/nether_bricks/step4 +block/nether_bricks/step5 +block/nether_bricks/step6 +block/netherite/break1 +block/netherite/break2 +block/netherite/break3 +block/netherite/break4 +block/netherite/step1 +block/netherite/step2 +block/netherite/step3 +block/netherite/step4 +block/netherite/step5 +block/netherite/step6 +block/nether_ore/break1 +block/nether_ore/break2 +block/nether_ore/break3 +block/nether_ore/break4 +block/nether_ore/step1 +block/nether_ore/step2 +block/nether_ore/step3 +block/nether_ore/step4 +block/nether_ore/step5 +block/netherrack/break1 +block/netherrack/break2 +block/netherrack/break3 +block/netherrack/break4 +block/netherrack/break5 +block/netherrack/break6 +block/netherrack/step1 +block/netherrack/step2 +block/netherrack/step3 +block/netherrack/step4 +block/netherrack/step5 +block/netherrack/step6 +block/nether_sprouts/break1 +block/nether_sprouts/break2 +block/nether_sprouts/break3 +block/nether_sprouts/break4 +block/nether_sprouts/step1 +block/nether_sprouts/step2 +block/nether_sprouts/step3 +block/nether_sprouts/step4 +block/nether_sprouts/step5 +block/netherwart/break1 +block/netherwart/break2 +block/netherwart/break3 +block/netherwart/break4 +block/netherwart/break5 +block/netherwart/break6 +block/netherwart/step1 +block/netherwart/step2 +block/netherwart/step3 +block/netherwart/step4 +block/netherwart/step5 +block/nether_wood/break1 +block/nether_wood/break2 +block/nether_wood/break3 +block/nether_wood/break4 +block/nether_wood_button/nether_wood_button +block/nether_wood_door/toggle1 +block/nether_wood_door/toggle2 +block/nether_wood_door/toggle3 +block/nether_wood_door/toggle4 +block/nether_wood_fence/toggle1 +block/nether_wood_fence/toggle2 +block/nether_wood_fence/toggle3 +block/nether_wood_fence/toggle4 +block/nether_wood_hanging_sign/break1 +block/nether_wood_hanging_sign/break2 +block/nether_wood_hanging_sign/break3 +block/nether_wood_hanging_sign/break4 +block/nether_wood_hanging_sign/step1 +block/nether_wood_hanging_sign/step2 +block/nether_wood_hanging_sign/step3 +block/nether_wood_hanging_sign/step4 +block/nether_wood/step1 +block/nether_wood/step2 +block/nether_wood/step3 +block/nether_wood/step4 +block/nether_wood/step5 +block/nether_wood_trapdoor/toggle1 +block/nether_wood_trapdoor/toggle2 +block/nether_wood_trapdoor/toggle3 +block/nether_wood_trapdoor/toggle4 +block/nylium/break1 +block/nylium/break2 +block/nylium/break3 +block/nylium/break4 +block/nylium/break5 +block/nylium/break6 +block/nylium/step1 +block/nylium/step2 +block/nylium/step3 +block/nylium/step4 +block/nylium/step5 +block/nylium/step6 +block/packed_mud/break1 +block/packed_mud/break2 +block/packed_mud/break3 +block/packed_mud/break4 +block/packed_mud/break5 +block/packed_mud/break6 +block/packed_mud/step1 +block/packed_mud/step2 +block/packed_mud/step3 +block/packed_mud/step4 +block/packed_mud/step5 +block/packed_mud/step6 +block/pale_hanging_moss/pale_hanging_moss10 +block/pale_hanging_moss/pale_hanging_moss11 +block/pale_hanging_moss/pale_hanging_moss12 +block/pale_hanging_moss/pale_hanging_moss13 +block/pale_hanging_moss/pale_hanging_moss14 +block/pale_hanging_moss/pale_hanging_moss15 +block/pale_hanging_moss/pale_hanging_moss1 +block/pale_hanging_moss/pale_hanging_moss2 +block/pale_hanging_moss/pale_hanging_moss3 +block/pale_hanging_moss/pale_hanging_moss4 +block/pale_hanging_moss/pale_hanging_moss5 +block/pale_hanging_moss/pale_hanging_moss6 +block/pale_hanging_moss/pale_hanging_moss7 +block/pale_hanging_moss/pale_hanging_moss8 +block/pale_hanging_moss/pale_hanging_moss9 +block/pointed_dripstone/drip_lava1 +block/pointed_dripstone/drip_lava2 +block/pointed_dripstone/drip_lava3 +block/pointed_dripstone/drip_lava4 +block/pointed_dripstone/drip_lava5 +block/pointed_dripstone/drip_lava6 +block/pointed_dripstone/drip_lava_cauldron1 +block/pointed_dripstone/drip_lava_cauldron2 +block/pointed_dripstone/drip_lava_cauldron3 +block/pointed_dripstone/drip_lava_cauldron4 +block/pointed_dripstone/drip_water10 +block/pointed_dripstone/drip_water11 +block/pointed_dripstone/drip_water12 +block/pointed_dripstone/drip_water13 +block/pointed_dripstone/drip_water14 +block/pointed_dripstone/drip_water15 +block/pointed_dripstone/drip_water1 +block/pointed_dripstone/drip_water2 +block/pointed_dripstone/drip_water3 +block/pointed_dripstone/drip_water4 +block/pointed_dripstone/drip_water5 +block/pointed_dripstone/drip_water6 +block/pointed_dripstone/drip_water7 +block/pointed_dripstone/drip_water8 +block/pointed_dripstone/drip_water9 +block/pointed_dripstone/drip_water_cauldron1 +block/pointed_dripstone/drip_water_cauldron2 +block/pointed_dripstone/drip_water_cauldron3 +block/pointed_dripstone/drip_water_cauldron4 +block/pointed_dripstone/drip_water_cauldron5 +block/pointed_dripstone/drip_water_cauldron6 +block/pointed_dripstone/drip_water_cauldron7 +block/pointed_dripstone/drip_water_cauldron8 +block/pointed_dripstone/land1 +block/pointed_dripstone/land2 +block/pointed_dripstone/land3 +block/pointed_dripstone/land4 +block/pointed_dripstone/land5 +block/potent_sulfur/break1 +block/potent_sulfur/break2 +block/potent_sulfur/break3 +block/potent_sulfur/break4 +block/potent_sulfur/break5 +block/potent_sulfur/break6 +block/potent_sulfur/break7 +block/potent_sulfur/geyser_continuous/eruption1 +block/potent_sulfur/geyser_continuous/eruption2 +block/potent_sulfur/geyser_continuous/eruption3 +block/potent_sulfur/geyser_continuous/eruption4 +block/potent_sulfur/geyser_continuous/eruption5 +block/potent_sulfur/geyser_continuous/eruption6 +block/potent_sulfur/geyser_continuous/eruption_active1 +block/potent_sulfur/geyser_continuous/eruption_active2 +block/potent_sulfur/geyser_continuous/eruption_active3 +block/potent_sulfur/geyser_continuous/eruption_active4 +block/potent_sulfur/geyser_continuous/eruption_active5 +block/potent_sulfur/geyser_continuous/eruption_active6 +block/potent_sulfur/geyser_continuous/eruption_active7 +block/potent_sulfur/hit1 +block/potent_sulfur/hit2 +block/potent_sulfur/hit3 +block/potent_sulfur/hit4 +block/potent_sulfur/hit5 +block/potent_sulfur/hit6 +block/potent_sulfur/hit7 +block/potent_sulfur/noxious_gas/ambient10 +block/potent_sulfur/noxious_gas/ambient11 +block/potent_sulfur/noxious_gas/ambient12 +block/potent_sulfur/noxious_gas/ambient13 +block/potent_sulfur/noxious_gas/ambient14 +block/potent_sulfur/noxious_gas/ambient1 +block/potent_sulfur/noxious_gas/ambient2 +block/potent_sulfur/noxious_gas/ambient3 +block/potent_sulfur/noxious_gas/ambient4 +block/potent_sulfur/noxious_gas/ambient5 +block/potent_sulfur/noxious_gas/ambient6 +block/potent_sulfur/noxious_gas/ambient7 +block/potent_sulfur/noxious_gas/ambient8 +block/potent_sulfur/noxious_gas/ambient9 +block/potent_sulfur/place1 +block/potent_sulfur/place2 +block/potent_sulfur/place3 +block/potent_sulfur/place4 +block/potent_sulfur/place5 +block/potent_sulfur/place6 +block/potent_sulfur/place7 +block/potent_sulfur/place8 +block/potent_sulfur/step1 +block/potent_sulfur/step2 +block/potent_sulfur/step3 +block/potent_sulfur/step4 +block/potent_sulfur/step5 +block/potent_sulfur/step6 +block/potent_sulfur/step7 +block/potent_sulfur/sulfur_spring/eruption1 +block/potent_sulfur/sulfur_spring/eruption2 +block/potent_sulfur/sulfur_spring/eruption3 +block/potent_sulfur/sulfur_spring/eruption4 +block/potent_sulfur/sulfur_spring/eruption5 +block/potent_sulfur/sulfur_spring/eruption6 +block/potent_sulfur/sulfur_spring/eruption7 +block/potent_sulfur/sulfur_spring/eruption8 +block/potent_sulfur/sulfur_spring/eruption_active1 +block/potent_sulfur/sulfur_spring/eruption_active2 +block/potent_sulfur/sulfur_spring/eruption_active3 +block/potent_sulfur/sulfur_spring/eruption_active4 +block/potent_sulfur/sulfur_spring/eruption_active5 +block/potent_sulfur/sulfur_spring/eruption_active6 +block/potent_sulfur/sulfur_spring/eruption_active7 +block/potent_sulfur/sulfur_spring/eruption_active8 +block/powder_snow/break1 +block/powder_snow/break2 +block/powder_snow/break3 +block/powder_snow/break4 +block/powder_snow/break5 +block/powder_snow/break6 +block/powder_snow/break7 +block/powder_snow/step10 +block/powder_snow/step1 +block/powder_snow/step2 +block/powder_snow/step3 +block/powder_snow/step4 +block/powder_snow/step5 +block/powder_snow/step6 +block/powder_snow/step7 +block/powder_snow/step8 +block/powder_snow/step9 +block/pumpkin/carve1 +block/pumpkin/carve2 +block/resin_bricks/resin_brick_break +block/resin_bricks/resin_brick_fall +block/resin_bricks/resin_brick_hit1 +block/resin_bricks/resin_brick_hit2 +block/resin_bricks/resin_brick_hit3 +block/resin_bricks/resin_brick_hit4 +block/resin_bricks/resin_brick_hit5 +block/resin_bricks/resin_brick_place1 +block/resin_bricks/resin_brick_place2 +block/resin_bricks/resin_brick_place3 +block/resin_bricks/resin_brick_place4 +block/resin_bricks/resin_brick_place5 +block/resin_bricks/resin_brick_step1 +block/resin_bricks/resin_brick_step2 +block/resin_bricks/resin_brick_step3 +block/resin_bricks/resin_brick_step4 +block/resin_bricks/resin_brick_step5 +block/resin/resin_break1 +block/resin/resin_break2 +block/resin/resin_break3 +block/resin/resin_break4 +block/resin/resin_break5 +block/resin/resin_fall +block/resin/resin_place1 +block/resin/resin_place2 +block/resin/resin_place3 +block/resin/resin_place4 +block/resin/resin_step1 +block/resin/resin_step2 +block/resin/resin_step3 +block/resin/resin_step4 +block/resin/resin_step5 +block/respawn_anchor/ambient1 +block/respawn_anchor/ambient2 +block/respawn_anchor/ambient3 +block/respawn_anchor/charge1 +block/respawn_anchor/charge2 +block/respawn_anchor/charge3 +block/respawn_anchor/deplete1 +block/respawn_anchor/deplete2 +block/respawn_anchor/set_spawn1 +block/respawn_anchor/set_spawn2 +block/respawn_anchor/set_spawn3 block/rooted_dirt/break1 block/rooted_dirt/break2 block/rooted_dirt/break3 block/rooted_dirt/break4 -block/rooted_dirt/step5 -block/rooted_dirt/step6 block/rooted_dirt/step1 block/rooted_dirt/step2 block/rooted_dirt/step3 -block/copper_bulb/step4 -block/copper_bulb/break1 -block/copper_bulb/break2 -block/copper_bulb/toggle -block/copper_bulb/place2 -block/copper_bulb/break3 -block/copper_bulb/break4 -block/copper_bulb/step5 -block/copper_bulb/place4 -block/copper_bulb/place3 -block/copper_bulb/step6 -block/copper_bulb/step1 -block/copper_bulb/place1 -block/copper_bulb/step2 -block/copper_bulb/step3 -block/shroomlight/step4 +block/rooted_dirt/step4 +block/rooted_dirt/step5 +block/rooted_dirt/step6 +block/roots/break1 +block/roots/break2 +block/roots/break3 +block/roots/break4 +block/roots/break5 +block/roots/break6 +block/roots/step1 +block/roots/step2 +block/roots/step3 +block/roots/step4 +block/roots/step5 +block/sand/sand10 +block/sand/sand11 +block/sand/sand12 +block/sand/sand13 +block/sand/sand14 +block/sand/sand15 +block/sand/sand16 +block/sand/sand17 +block/sand/sand18 +block/sand/sand19 +block/sand/sand1 +block/sand/sand20 +block/sand/sand21 +block/sand/sand2 +block/sand/sand3 +block/sand/sand4 +block/sand/sand5 +block/sand/sand6 +block/sand/sand7 +block/sand/sand8 +block/sand/sand9 +block/sand/wind10 +block/sand/wind11 +block/sand/wind12 +block/sand/wind1 +block/sand/wind2 +block/sand/wind3 +block/sand/wind4 +block/sand/wind5 +block/sand/wind6 +block/sand/wind7 +block/sand/wind8 +block/sand/wind9 +block/scaffold/place1 +block/scaffold/place2 +block/scaffold/place3 +block/scaffold/place4 +block/sculk/break10 +block/sculk/break11 +block/sculk/break12 +block/sculk/break13 +block/sculk/break14 +block/sculk/break1 +block/sculk/break2 +block/sculk/break3 +block/sculk/break4 +block/sculk/break5 +block/sculk/break6 +block/sculk/break7 +block/sculk/break8 +block/sculk/break9 +block/sculk_catalyst/break10 +block/sculk_catalyst/break1 +block/sculk_catalyst/break2 +block/sculk_catalyst/break3 +block/sculk_catalyst/break4 +block/sculk_catalyst/break5 +block/sculk_catalyst/break6 +block/sculk_catalyst/break7 +block/sculk_catalyst/break8 +block/sculk_catalyst/break9 +block/sculk_catalyst/place1 +block/sculk_catalyst/place2 +block/sculk_catalyst/place3 +block/sculk_catalyst/place4 +block/sculk_catalyst/place5 +block/sculk_catalyst/step1 +block/sculk_catalyst/step2 +block/sculk_catalyst/step3 +block/sculk_catalyst/step4 +block/sculk_catalyst/step5 +block/sculk_catalyst/step6 +block/sculk/charge1 +block/sculk/charge2 +block/sculk/charge3 +block/sculk/charge4 +block/sculk/charge5 +block/sculk/place1 +block/sculk/place2 +block/sculk/place3 +block/sculk/place4 +block/sculk/place5 +block/sculk_sensor/break1 +block/sculk_sensor/break2 +block/sculk_sensor/break3 +block/sculk_sensor/break4 +block/sculk_sensor/break5 +block/sculk_sensor/place1 +block/sculk_sensor/place2 +block/sculk_sensor/place3 +block/sculk_sensor/place4 +block/sculk_sensor/place5 +block/sculk_sensor/sculk_clicking1 +block/sculk_sensor/sculk_clicking2 +block/sculk_sensor/sculk_clicking3 +block/sculk_sensor/sculk_clicking4 +block/sculk_sensor/sculk_clicking5 +block/sculk_sensor/sculk_clicking6 +block/sculk_sensor/sculk_clicking_stop1 +block/sculk_sensor/sculk_clicking_stop2 +block/sculk_sensor/sculk_clicking_stop3 +block/sculk_sensor/sculk_clicking_stop4 +block/sculk_sensor/sculk_clicking_stop5 +block/sculk_shrieker/break1 +block/sculk_shrieker/break2 +block/sculk_shrieker/break3 +block/sculk_shrieker/break4 +block/sculk_shrieker/break5 +block/sculk_shrieker/break6 +block/sculk_shrieker/place1 +block/sculk_shrieker/place2 +block/sculk_shrieker/place3 +block/sculk_shrieker/place4 +block/sculk_shrieker/place5 +block/sculk_shrieker/shriek1 +block/sculk_shrieker/shriek2 +block/sculk_shrieker/shriek3 +block/sculk_shrieker/shriek4 +block/sculk_shrieker/shriek5 +block/sculk/spread1 +block/sculk/spread2 +block/sculk/spread3 +block/sculk/spread4 +block/sculk/spread5 +block/sculk/step1 +block/sculk/step2 +block/sculk/step3 +block/sculk/step4 +block/sculk/step5 +block/sculk/step6 +block/sculk_vein/break1 +block/sculk_vein/break2 +block/sculk_vein/break3 +block/sculk_vein/break4 +block/sculk_vein/break5 +block/shelf/activate1 +block/shelf/activate2 +block/shelf/activate3 +block/shelf/deactivate1 +block/shelf/deactivate2 +block/shelf/deactivate3 +block/shelf/multi_swap1 +block/shelf/multi_swap2 +block/shelf/multi_swap3 +block/shelf/place_item1 +block/shelf/place_item2 +block/shelf/place_item3 +block/shelf/place_item4 +block/shelf/single_swap1 +block/shelf/single_swap2 +block/shelf/single_swap3 +block/shelf/single_swap4 block/shroomlight/break1 -block/shroomlight/break5 block/shroomlight/break2 block/shroomlight/break3 block/shroomlight/break4 -block/shroomlight/step5 -block/shroomlight/step6 +block/shroomlight/break5 block/shroomlight/step1 block/shroomlight/step2 block/shroomlight/step3 -block/beehive/work4 -block/beehive/enter -block/beehive/shear -block/beehive/drip4 -block/beehive/work2 -block/beehive/drip2 -block/beehive/exit -block/beehive/drip3 -block/beehive/work3 -block/beehive/drip5 -block/beehive/drip1 -block/beehive/drip6 -block/beehive/work1 -block/nether_wood/step4 -block/nether_wood/break1 -block/nether_wood/break2 -block/nether_wood/break3 -block/nether_wood/break4 -block/nether_wood/step5 -block/nether_wood/step1 -block/nether_wood/step2 -block/nether_wood/step3 -block/smithing_table/smithing_table3 -block/smithing_table/smithing_table1 -block/smithing_table/smithing_table2 -block/sculk_vein/break1 -block/sculk_vein/break5 -block/sculk_vein/break2 -block/sculk_vein/break3 -block/sculk_vein/break4 -block/iron_door/open4 -block/iron_door/open3 -block/iron_door/open2 -block/iron_door/close2 -block/iron_door/open1 -block/iron_door/close1 -block/iron_door/close3 -block/iron_door/close4 -block/soul_sand/step4 +block/shroomlight/step4 +block/shroomlight/step5 +block/shroomlight/step6 +block/shulker_box/close +block/shulker_box/open +block/sign/waxed_interact_fail1 +block/sign/waxed_interact_fail2 +block/sign/waxed_interact_fail3 +block/smithing_table/smithing_table1 +block/smithing_table/smithing_table2 +block/smithing_table/smithing_table3 +block/smoker/smoker1 +block/smoker/smoker2 +block/smoker/smoker3 +block/smoker/smoker4 +block/smoker/smoker5 block/soul_sand/break1 -block/soul_sand/break5 -block/soul_sand/break6 -block/soul_sand/break9 block/soul_sand/break2 -block/soul_sand/break8 block/soul_sand/break3 block/soul_sand/break4 -block/soul_sand/step5 +block/soul_sand/break5 +block/soul_sand/break6 block/soul_sand/break7 +block/soul_sand/break8 +block/soul_sand/break9 block/soul_sand/step1 block/soul_sand/step2 block/soul_sand/step3 -block/mud/step4 -block/mud/break1 -block/mud/break5 -block/mud/break6 -block/mud/break2 -block/mud/break3 -block/mud/break4 -block/mud/step5 -block/mud/step6 -block/mud/step1 -block/mud/step2 -block/mud/step3 -block/heavy_core/step4 -block/heavy_core/break1 -block/heavy_core/break2 -block/heavy_core/break3 -block/heavy_core/break4 -block/heavy_core/step1 -block/heavy_core/step2 -block/heavy_core/step3 -block/cobweb/step4 -block/cobweb/break1 -block/cobweb/break5 -block/cobweb/break6 -block/cobweb/break2 -block/cobweb/break3 -block/cobweb/break4 -block/cobweb/step5 -block/cobweb/step6 -block/cobweb/step1 -block/cobweb/step2 -block/cobweb/step3 -block/nylium/step4 -block/nylium/break1 -block/nylium/break5 -block/nylium/break6 -block/nylium/break2 -block/nylium/break3 -block/nylium/break4 -block/nylium/step5 -block/nylium/step6 -block/nylium/step1 -block/nylium/step2 -block/nylium/step3 -block/chest/open_locked -block/chest/close_locked -block/chest/open -block/chest/close2 -block/chest/close1 -block/chest/close3 -block/cherrywood_button/cherrywood_click -block/bubble_column/whirlpool_ambient3 -block/bubble_column/upwards_ambient2 -block/bubble_column/bubble3 -block/bubble_column/whirlpool_ambient4 -block/bubble_column/upwards_inside -block/bubble_column/bubble1 -block/bubble_column/whirlpool_inside -block/bubble_column/whirlpool_ambient1 -block/bubble_column/whirlpool_ambient5 -block/bubble_column/bubble2 -block/bubble_column/upwards_ambient3 -block/bubble_column/upwards_ambient1 -block/bubble_column/upwards_ambient4 -block/bubble_column/whirlpool_ambient2 -block/bubble_column/upwards_ambient5 -block/powder_snow/step8 -block/powder_snow/step9 -block/powder_snow/step4 -block/powder_snow/break1 -block/powder_snow/break5 -block/powder_snow/break6 -block/powder_snow/break2 -block/powder_snow/break3 -block/powder_snow/break4 -block/powder_snow/step5 -block/powder_snow/step7 -block/powder_snow/step6 -block/powder_snow/break7 -block/powder_snow/step1 -block/powder_snow/step10 -block/powder_snow/step2 -block/powder_snow/step3 -block/soul_soil/step4 +block/soul_sand/step4 +block/soul_sand/step5 block/soul_soil/break1 -block/soul_soil/break5 -block/soul_soil/break6 block/soul_soil/break2 block/soul_soil/break3 block/soul_soil/break4 -block/soul_soil/step5 +block/soul_soil/break5 +block/soul_soil/break6 block/soul_soil/step1 block/soul_soil/step2 block/soul_soil/step3 -block/netherite/step4 -block/netherite/break1 -block/netherite/break2 -block/netherite/break3 -block/netherite/break4 -block/netherite/step5 -block/netherite/step6 -block/netherite/step1 -block/netherite/step2 -block/netherite/step3 -block/scaffold/place2 -block/scaffold/place4 -block/scaffold/place3 -block/scaffold/place1 -block/nether_sprouts/step4 -block/nether_sprouts/break1 -block/nether_sprouts/break2 -block/nether_sprouts/break3 -block/nether_sprouts/break4 -block/nether_sprouts/step5 -block/nether_sprouts/step1 -block/nether_sprouts/step2 -block/nether_sprouts/step3 -block/shulker_box/close -block/shulker_box/open -block/sign/waxed_interact_fail2 -block/sign/waxed_interact_fail1 -block/sign/waxed_interact_fail3 -block/vault/step8 -block/vault/step4 -block/vault/break1 +block/soul_soil/step4 +block/soul_soil/step5 +block/spawner/break1 +block/spawner/break2 +block/spawner/break3 +block/spawner/break4 +block/spawner/step1 +block/spawner/step2 +block/spawner/step3 +block/spawner/step4 +block/spawner/step5 +block/sponge/absorb1 +block/sponge/absorb2 +block/sponge/absorb3 +block/sponge/break1 +block/sponge/break2 +block/sponge/break3 +block/sponge/break4 +block/sponge/step1 +block/sponge/step2 +block/sponge/step3 +block/sponge/step4 +block/sponge/step5 +block/sponge/step6 +block/sponge/wet_sponge/break1 +block/sponge/wet_sponge/break2 +block/sponge/wet_sponge/break3 +block/sponge/wet_sponge/break4 +block/sponge/wet_sponge/step1 +block/sponge/wet_sponge/step2 +block/sponge/wet_sponge/step3 +block/sponge/wet_sponge/step4 +block/spore_blossom/break1 +block/spore_blossom/break2 +block/spore_blossom/break3 +block/spore_blossom/break4 +block/spore_blossom/break5 +block/spore_blossom/step1 +block/spore_blossom/step2 +block/spore_blossom/step3 +block/spore_blossom/step4 +block/spore_blossom/step5 +block/spore_blossom/step6 +block/stem/break1 +block/stem/break2 +block/stem/break3 +block/stem/break4 +block/stem/break5 +block/stem/break6 +block/stem/step1 +block/stem/step2 +block/stem/step3 +block/stem/step4 +block/stem/step5 +block/stem/step6 +block/sulfur/break1 +block/sulfur/break2 +block/sulfur/break3 +block/sulfur/break4 +block/sulfur/break5 +block/sulfur/break6 +block/sulfur/break7 +block/sulfur/hit1 +block/sulfur/hit2 +block/sulfur/hit3 +block/sulfur/hit4 +block/sulfur/hit5 +block/sulfur/hit6 +block/sulfur/hit7 +block/sulfur/place1 +block/sulfur/place2 +block/sulfur/place3 +block/sulfur/place4 +block/sulfur/place5 +block/sulfur/place6 +block/sulfur/place7 +block/sulfur/place8 +block/sulfur_spike/land1 +block/sulfur_spike/land2 +block/sulfur_spike/land3 +block/sulfur_spike/land4 +block/sulfur_spike/land5 +block/sulfur_spike/land6 +block/sulfur_spike/land7 +block/sulfur/step1 +block/sulfur/step2 +block/sulfur/step3 +block/sulfur/step4 +block/sulfur/step5 +block/sulfur/step6 +block/sulfur/step7 +block/suspicious_gravel/break1 +block/suspicious_gravel/break2 +block/suspicious_gravel/break3 +block/suspicious_gravel/break4 +block/suspicious_gravel/break5 +block/suspicious_gravel/break6 +block/suspicious_gravel/place1 +block/suspicious_gravel/place2 +block/suspicious_gravel/place3 +block/suspicious_gravel/place4 +block/suspicious_gravel/step1 +block/suspicious_gravel/step2 +block/suspicious_gravel/step3 +block/suspicious_gravel/step4 +block/suspicious_sand/break1 +block/suspicious_sand/break2 +block/suspicious_sand/break3 +block/suspicious_sand/break4 +block/suspicious_sand/break5 +block/suspicious_sand/break6 +block/suspicious_sand/place1 +block/suspicious_sand/place2 +block/suspicious_sand/place3 +block/suspicious_sand/place4 +block/suspicious_sand/place5 +block/suspicious_sand/step1 +block/suspicious_sand/step2 +block/suspicious_sand/step3 +block/suspicious_sand/step4 +block/suspicious_sand/step5 +block/sweet_berry_bush/break1 +block/sweet_berry_bush/break2 +block/sweet_berry_bush/break3 +block/sweet_berry_bush/break4 +block/sweet_berry_bush/place1 +block/sweet_berry_bush/place2 +block/sweet_berry_bush/place3 +block/sweet_berry_bush/place4 +block/sweet_berry_bush/place5 +block/sweet_berry_bush/place6 +block/trial_spawner/about_to_spawn_item +block/trial_spawner/ambient1 +block/trial_spawner/ambient2 +block/trial_spawner/ambient3 +block/trial_spawner/ambient4 +block/trial_spawner/ambient5 +block/trial_spawner/ambient_ominous1 +block/trial_spawner/ambient_ominous2 +block/trial_spawner/ambient_ominous3 +block/trial_spawner/ambient_ominous4 +block/trial_spawner/ambient_ominous5 +block/trial_spawner/break1 +block/trial_spawner/break2 +block/trial_spawner/break3 +block/trial_spawner/close_shutter +block/trial_spawner/detect_player1 +block/trial_spawner/detect_player2 +block/trial_spawner/detect_player3 +block/trial_spawner/eject_item1 +block/trial_spawner/ominous_activate +block/trial_spawner/open_shutter +block/trial_spawner/place1 +block/trial_spawner/place2 +block/trial_spawner/place3 +block/trial_spawner/spawn1 +block/trial_spawner/spawn2 +block/trial_spawner/spawn3 +block/trial_spawner/spawn4 +block/trial_spawner/spawn_item1 +block/trial_spawner/spawn_item2 +block/trial_spawner/spawn_item3 +block/trial_spawner/spawn_item_begin1 +block/trial_spawner/spawn_item_begin2 +block/trial_spawner/spawn_item_begin3 +block/trial_spawner/step1 +block/trial_spawner/step2 +block/trial_spawner/step3 +block/trial_spawner/step4 +block/trial_spawner/step5 +block/tuff/break1 +block/tuff/break2 +block/tuff/break3 +block/tuff/break4 +block/tuff/break5 +block/tuff_bricks/place1 +block/tuff_bricks/place2 +block/tuff_bricks/place3 +block/tuff_bricks/place4 +block/tuff_bricks/place5 +block/tuff_bricks/step1 +block/tuff_bricks/step2 +block/tuff_bricks/step3 +block/tuff_bricks/step4 +block/tuff_bricks/step5 +block/tuff_bricks/step6 +block/tuff/step1 +block/tuff/step2 +block/tuff/step3 +block/tuff/step4 +block/tuff/step5 +block/tuff/step6 block/vault/activate -block/vault/open_shutter -block/vault/insert -block/vault/break2 +block/vault/ambient1 block/vault/ambient2 -block/vault/place2 +block/vault/ambient3 +block/vault/break1 +block/vault/break2 block/vault/break3 block/vault/break4 block/vault/deactivate -block/vault/step5 -block/vault/step7 -block/vault/ambient3 -block/vault/place4 -block/vault/place3 -block/vault/step6 -block/vault/eject2 -block/vault/reject_rewarded_player -block/vault/step1 block/vault/eject1 -block/vault/insert_fail +block/vault/eject2 block/vault/eject3 +block/vault/insert_fail +block/vault/insert +block/vault/open_shutter block/vault/place1 +block/vault/place2 +block/vault/place3 +block/vault/place4 +block/vault/reject_rewarded_player +block/vault/step1 block/vault/step2 block/vault/step3 -block/vault/ambient1 -block/shelf/place_item4 -block/shelf/multi_swap2 -block/shelf/single_swap1 -block/shelf/multi_swap1 -block/shelf/single_swap4 -block/shelf/place_item3 -block/shelf/place_item1 -block/shelf/single_swap3 -block/shelf/activate1 -block/shelf/activate2 -block/shelf/single_swap2 -block/shelf/deactivate3 -block/shelf/place_item2 -block/shelf/multi_swap3 -block/shelf/deactivate2 -block/shelf/activate3 -block/shelf/deactivate1 -block/lodestone/place2 -block/lodestone/lock1 -block/lodestone/lock2 -block/lodestone/place4 -block/lodestone/place3 -block/lodestone/place1 -block/firefly_bush/firefly_bush11 -block/firefly_bush/firefly_bush5 -block/firefly_bush/firefly_bush1 -block/firefly_bush/firefly_bush3 -block/firefly_bush/firefly_bush2 -block/firefly_bush/firefly_bush8 -block/firefly_bush/firefly_bush4 -block/firefly_bush/firefly_bush10 -block/firefly_bush/firefly_bush7 -block/firefly_bush/firefly_bush6 -block/firefly_bush/firefly_bush9 -block/sculk_shrieker/break1 -block/sculk_shrieker/shriek3 -block/sculk_shrieker/break5 -block/sculk_shrieker/break6 -block/sculk_shrieker/shriek4 -block/sculk_shrieker/break2 -block/sculk_shrieker/place2 -block/sculk_shrieker/shriek2 -block/sculk_shrieker/place5 -block/sculk_shrieker/break3 -block/sculk_shrieker/shriek5 -block/sculk_shrieker/break4 -block/sculk_shrieker/place4 -block/sculk_shrieker/place3 -block/sculk_shrieker/place1 -block/sculk_shrieker/shriek1 -block/cactus_flower/break1 -block/cactus_flower/break5 -block/cactus_flower/break2 -block/cactus_flower/place2 -block/cactus_flower/break3 -block/cactus_flower/break4 -block/cactus_flower/place4 -block/cactus_flower/place3 -block/cactus_flower/place1 -block/cauldron/dye3 -block/cauldron/dye2 -block/cauldron/dye1 -block/nether_wood_hanging_sign/step4 -block/nether_wood_hanging_sign/break1 -block/nether_wood_hanging_sign/break2 -block/nether_wood_hanging_sign/break3 -block/nether_wood_hanging_sign/break4 -block/nether_wood_hanging_sign/step1 -block/nether_wood_hanging_sign/step2 -block/nether_wood_hanging_sign/step3 -block/cave_vines/break1 -block/cave_vines/break5 -block/cave_vines/break2 -block/cave_vines/break3 -block/cave_vines/break4 -block/copper_chest/copper_chest_weathered_open1 -block/copper_chest/copper_chest_oxidized_close3 -block/copper_chest/copper_chest_oxidized_close1 -block/copper_chest/copper_chest_weathered_close2 -block/copper_chest/copper_chest_oxidized_close2 -block/copper_chest/copper_chest_open3 -block/copper_chest/copper_chest_weathered_close1 -block/copper_chest/copper_chest_oxidized_open2 -block/copper_chest/copper_chest_close2 -block/copper_chest/copper_chest_weathered_close3 -block/copper_chest/copper_chest_open2 -block/copper_chest/copper_chest_close3 -block/copper_chest/copper_chest_oxidized_open1 -block/copper_chest/copper_chest_weathered_open2 -block/copper_chest/copper_chest_weathered_open3 -block/copper_chest/copper_chest_oxidized_open3 -block/copper_chest/copper_chest_close1 -block/copper_chest/copper_chest_open1 -dig/snow3 +block/vault/step4 +block/vault/step5 +block/vault/step6 +block/vault/step7 +block/vault/step8 +block/vine/break1 +block/vine/break2 +block/vine/break3 +block/vine/break4 +block/vine/climb1 +block/vine/climb2 +block/vine/climb3 +block/vine/climb4 +block/vine/climb5 +block/waterlily/place1 +block/waterlily/place2 +block/waterlily/place3 +block/waterlily/place4 +block/wooden_door/close1 +block/wooden_door/close2 +block/wooden_door/close3 +block/wooden_door/open1 +block/wooden_door/open2 +block/wooden_trapdoor/close1 +block/wooden_trapdoor/close2 +block/wooden_trapdoor/close3 +block/wooden_trapdoor/open1 +block/wooden_trapdoor/open2 +block/wooden_trapdoor/open3 +block/wooden_trapdoor/open4 +block/wooden_trapdoor/open5 +damage/fallbig +damage/fallsmall +damage/hit1 +damage/hit2 +damage/hit3 +dig/cloth1 +dig/cloth2 +dig/cloth3 +dig/cloth4 +dig/coral1 +dig/coral2 +dig/coral3 dig/coral4 -dig/stone3 -dig/wood2 dig/grass1 -dig/stone4 -dig/gravel3 -dig/wood4 -dig/stone2 -dig/snow1 -dig/sand4 +dig/grass2 dig/grass3 -dig/sand1 dig/grass4 -dig/wet_grass4 -dig/coral3 dig/gravel1 -dig/cloth4 -dig/snow2 -dig/coral2 -dig/sand2 -dig/wet_grass2 -dig/wood1 -dig/coral1 -dig/wet_grass3 -dig/cloth1 dig/gravel2 -dig/grass2 -dig/cloth2 -dig/cloth3 -dig/sand3 +dig/gravel3 dig/gravel4 +dig/sand1 +dig/sand2 +dig/sand3 +dig/sand4 +dig/snow1 +dig/snow2 +dig/snow3 +dig/snow4 dig/stone1 +dig/stone2 +dig/stone3 +dig/stone4 dig/wet_grass1 -dig/snow4 +dig/wet_grass2 +dig/wet_grass3 +dig/wet_grass4 +dig/wood1 +dig/wood2 dig/wood3 +dig/wood4 +enchant/soulspeed/soulspeed10 +enchant/soulspeed/soulspeed11 +enchant/soulspeed/soulspeed12 +enchant/soulspeed/soulspeed13 +enchant/soulspeed/soulspeed1 +enchant/soulspeed/soulspeed2 +enchant/soulspeed/soulspeed3 +enchant/soulspeed/soulspeed4 +enchant/soulspeed/soulspeed5 +enchant/soulspeed/soulspeed6 +enchant/soulspeed/soulspeed7 +enchant/soulspeed/soulspeed8 +enchant/soulspeed/soulspeed9 +enchant/thorns/hit1 +enchant/thorns/hit2 +enchant/thorns/hit3 +enchant/thorns/hit4 +entity/armorstand/break1 +entity/armorstand/break2 +entity/armorstand/break3 +entity/armorstand/break4 +entity/armorstand/hit1 +entity/armorstand/hit2 +entity/armorstand/hit3 +entity/armorstand/hit4 +entity/boat/paddle_land1 +entity/boat/paddle_land2 +entity/boat/paddle_land3 +entity/boat/paddle_land4 +entity/boat/paddle_land5 +entity/boat/paddle_land6 +entity/boat/paddle_water1 +entity/boat/paddle_water2 +entity/boat/paddle_water3 +entity/boat/paddle_water4 +entity/boat/paddle_water5 +entity/boat/paddle_water6 +entity/boat/paddle_water7 +entity/boat/paddle_water8 +entity/bobber/castfast +entity/bobber/retrieve1 +entity/bobber/retrieve2 +entity/bobber/retrieve3 +entity/cow/milk1 +entity/cow/milk2 +entity/cow/milk3 +entity/endereye/dead1 +entity/endereye/dead2 +entity/endereye/endereye_launch1 +entity/endereye/endereye_launch2 +entity/fish/flop1 +entity/fish/flop2 +entity/fish/flop3 +entity/fish/flop4 +entity/fish/hurt1 +entity/fish/hurt2 +entity/fish/hurt3 +entity/fish/hurt4 +entity/fish/swim1 +entity/fish/swim2 +entity/fish/swim3 +entity/fish/swim4 +entity/fish/swim5 +entity/fish/swim6 +entity/fish/swim7 +entity/glow_squid/ambient1 +entity/glow_squid/ambient2 +entity/glow_squid/ambient3 +entity/glow_squid/ambient4 +entity/glow_squid/ambient5 +entity/glow_squid/death1 +entity/glow_squid/death2 +entity/glow_squid/death3 +entity/glow_squid/hurt1 +entity/glow_squid/hurt2 +entity/glow_squid/hurt3 +entity/glow_squid/hurt4 +entity/glow_squid/squirt1 +entity/glow_squid/squirt2 +entity/glow_squid/squirt3 +entity/guardian/ambient1 +entity/guardian/ambient2 +entity/guardian/ambient3 +entity/guardian/ambient4 +entity/horse/eat1 +entity/horse/eat2 +entity/horse/eat3 +entity/horse/eat4 +entity/horse/eat5 +entity/itemframe/add_item1 +entity/itemframe/add_item2 +entity/itemframe/add_item3 +entity/itemframe/add_item4 +entity/itemframe/break1 +entity/itemframe/break2 +entity/itemframe/break3 +entity/itemframe/place1 +entity/itemframe/place2 +entity/itemframe/place3 +entity/itemframe/place4 +entity/itemframe/remove_item1 +entity/itemframe/remove_item2 +entity/itemframe/remove_item3 +entity/itemframe/remove_item4 +entity/itemframe/rotate_item1 +entity/itemframe/rotate_item2 +entity/itemframe/rotate_item3 +entity/itemframe/rotate_item4 +entity/leashknot/break1 +entity/leashknot/break2 +entity/leashknot/break3 +entity/leashknot/break +entity/leashknot/leash1 +entity/leashknot/leash2 +entity/leashknot/leash3 +entity/leashknot/place1 +entity/leashknot/place2 +entity/leashknot/place3 +entity/leashknot/unleash1 +entity/leashknot/unleash2 +entity/leashknot/unleash3 +entity/painting/break1 +entity/painting/break2 +entity/painting/break3 +entity/painting/place1 +entity/painting/place2 +entity/painting/place3 +entity/painting/place4 +entity/player/attack/crit1 +entity/player/attack/crit2 +entity/player/attack/crit3 +entity/player/attack/knockback1 +entity/player/attack/knockback2 +entity/player/attack/knockback3 +entity/player/attack/knockback4 +entity/player/attack/strong1 +entity/player/attack/strong2 +entity/player/attack/strong3 +entity/player/attack/strong4 +entity/player/attack/strong5 +entity/player/attack/strong6 +entity/player/attack/sweep1 +entity/player/attack/sweep2 +entity/player/attack/sweep3 +entity/player/attack/sweep4 +entity/player/attack/sweep5 +entity/player/attack/sweep6 +entity/player/attack/sweep7 +entity/player/attack/weak1 +entity/player/attack/weak2 +entity/player/attack/weak3 +entity/player/attack/weak4 +entity/player/hurt/berrybush_hurt1 +entity/player/hurt/berrybush_hurt2 +entity/player/hurt/drown1 +entity/player/hurt/drown2 +entity/player/hurt/drown3 +entity/player/hurt/drown4 +entity/player/hurt/fire_hurt1 +entity/player/hurt/fire_hurt2 +entity/player/hurt/fire_hurt3 +entity/player/hurt/freeze_hurt1 +entity/player/hurt/freeze_hurt2 +entity/player/hurt/freeze_hurt3 +entity/player/hurt/freeze_hurt4 +entity/player/hurt/freeze_hurt5 +entity/pufferfish/blow_out1 +entity/pufferfish/blow_out2 +entity/pufferfish/blow_up1 +entity/pufferfish/blow_up2 +entity/pufferfish/death1 +entity/pufferfish/death2 +entity/pufferfish/flop1 +entity/pufferfish/flop2 +entity/pufferfish/flop3 +entity/pufferfish/flop4 +entity/pufferfish/hurt1 +entity/pufferfish/hurt2 +entity/pufferfish/sting1 +entity/pufferfish/sting2 +entity/rabbit/attack1 +entity/rabbit/attack2 +entity/rabbit/attack3 +entity/rabbit/attack4 +entity/shulker/ambient1 +entity/shulker/ambient2 +entity/shulker/ambient3 +entity/shulker/ambient4 +entity/shulker/ambient5 +entity/shulker/ambient6 +entity/shulker/ambient7 +entity/shulker_bullet/hit1 +entity/shulker_bullet/hit2 +entity/shulker_bullet/hit3 +entity/shulker_bullet/hit4 +entity/shulker/close1 +entity/shulker/close2 +entity/shulker/close3 +entity/shulker/close4 +entity/shulker/close5 +entity/shulker/death1 +entity/shulker/death2 +entity/shulker/death3 +entity/shulker/death4 +entity/shulker/hurt1 +entity/shulker/hurt2 +entity/shulker/hurt3 +entity/shulker/hurt4 +entity/shulker/hurt_closed1 +entity/shulker/hurt_closed2 +entity/shulker/hurt_closed3 +entity/shulker/hurt_closed4 +entity/shulker/hurt_closed5 +entity/shulker/open1 +entity/shulker/open2 +entity/shulker/open3 +entity/shulker/open4 +entity/shulker/open5 +entity/shulker/shoot1 +entity/shulker/shoot2 +entity/shulker/shoot3 +entity/shulker/shoot4 +entity/snowman/death1 +entity/snowman/death2 +entity/snowman/death3 +entity/snowman/hurt1 +entity/snowman/hurt2 +entity/snowman/hurt3 +entity/squid/ambient1 +entity/squid/ambient2 +entity/squid/ambient3 +entity/squid/ambient4 +entity/squid/ambient5 +entity/squid/death1 +entity/squid/death2 +entity/squid/death3 +entity/squid/hurt1 +entity/squid/hurt2 +entity/squid/hurt3 +entity/squid/hurt4 +entity/squid/squirt1 +entity/squid/squirt2 +entity/squid/squirt3 +entity/wind_charge/wind_burst1 +entity/wind_charge/wind_burst2 +entity/wind_charge/wind_burst3 +entity/witch/ambient1 +entity/witch/ambient2 +entity/witch/ambient3 +entity/witch/ambient4 +entity/witch/ambient5 +entity/witch/celebrate +entity/witch/death1 +entity/witch/death2 +entity/witch/death3 +entity/witch/drink1 +entity/witch/drink2 +entity/witch/drink3 +entity/witch/drink4 +entity/witch/hurt1 +entity/witch/hurt2 +entity/witch/hurt3 +entity/witch/throw1 +entity/witch/throw2 +entity/witch/throw3 +event/mob_effects/bad_omen +event/mob_effects/raid_omen +event/mob_effects/trial_omen +event/raid/raidhorn_01 +event/raid/raidhorn_02 +event/raid/raidhorn_03 +event/raid/raidhorn_04 +fire/fire +fire/ignite fireworks/blast1 +fireworks/blast_far1 +fireworks/largeblast1 fireworks/largeblast_far1 -fireworks/twinkle_far1 fireworks/launch1 -fireworks/largeblast1 -fireworks/blast_far1 fireworks/twinkle1 +fireworks/twinkle_far1 +item/armor/break_wolf +item/armor/crack_wolf1 +item/armor/crack_wolf2 +item/armor/crack_wolf3 +item/armor/crack_wolf4 +item/armor/damage_wolf1 +item/armor/damage_wolf2 +item/armor/damage_wolf3 +item/armor/damage_wolf4 +item/armor/equip_chain1 +item/armor/equip_chain2 +item/armor/equip_chain3 +item/armor/equip_chain4 +item/armor/equip_chain5 +item/armor/equip_chain6 +item/armor/equip_copper1 +item/armor/equip_copper2 +item/armor/equip_copper3 +item/armor/equip_copper4 +item/armor/equip_copper5 +item/armor/equip_copper6 +item/armor/equip_diamond1 +item/armor/equip_diamond2 +item/armor/equip_diamond3 +item/armor/equip_diamond4 +item/armor/equip_diamond5 +item/armor/equip_diamond6 +item/armor/equip_generic1 +item/armor/equip_generic2 +item/armor/equip_generic3 +item/armor/equip_generic4 +item/armor/equip_generic5 +item/armor/equip_generic6 +item/armor/equip_gold1 +item/armor/equip_gold2 +item/armor/equip_gold3 +item/armor/equip_gold4 +item/armor/equip_gold5 +item/armor/equip_gold6 +item/armor/equip_iron1 +item/armor/equip_iron2 +item/armor/equip_iron3 +item/armor/equip_iron4 +item/armor/equip_iron5 +item/armor/equip_iron6 +item/armor/equip_leather1 +item/armor/equip_leather2 +item/armor/equip_leather3 +item/armor/equip_leather4 +item/armor/equip_leather5 +item/armor/equip_leather6 +item/armor/equip_netherite1 +item/armor/equip_netherite2 +item/armor/equip_netherite3 +item/armor/equip_netherite4 +item/armor/equip_wolf1 +item/armor/equip_wolf2 +item/armor/repair_wolf1 +item/armor/repair_wolf2 +item/armor/repair_wolf3 +item/armor/repair_wolf4 +item/armor/unequip_wolf1 +item/armor/unequip_wolf2 +item/axe/scrape1 +item/axe/scrape2 +item/axe/scrape3 +item/axe/strip1 +item/axe/strip2 +item/axe/strip3 +item/axe/strip4 +item/axe/wax_off1 +item/axe/wax_off2 +item/axe/wax_off3 +item/bonemeal/bonemeal1 +item/bonemeal/bonemeal2 +item/bonemeal/bonemeal3 +item/bonemeal/bonemeal4 +item/bonemeal/bonemeal5 +item/book/close_put1 +item/book/close_put2 +item/book/open_flip1 +item/book/open_flip2 +item/book/open_flip3 +item/bottle/drink_honey1 +item/bottle/drink_honey2 +item/bottle/drink_honey3 +item/bottle/empty1 +item/bottle/empty2 +item/bottle/fill1 +item/bottle/fill2 +item/bottle/fill3 +item/bottle/fill4 +item/bottle/fill_dragonbreath1 +item/bottle/fill_dragonbreath2 +item/brush/brushing_generic1 +item/brush/brushing_generic2 +item/brush/brushing_generic3 +item/brush/brushing_generic4 +item/brush/brushing_gravel1 +item/brush/brushing_gravel2 +item/brush/brushing_gravel3 +item/brush/brushing_gravel4 +item/brush/brushing_gravel_complete1 +item/brush/brushing_gravel_complete2 +item/brush/brushing_gravel_complete3 +item/brush/brushing_gravel_complete4 +item/brush/brushing_sand1 +item/brush/brushing_sand2 +item/brush/brushing_sand3 +item/brush/brushing_sand4 +item/brush/brush_sand_complete1 +item/brush/brush_sand_complete2 +item/brush/brush_sand_complete3 +item/brush/brush_sand_complete4 +item/brush/brush_sand_complete5 +item/bucket/empty1 +item/bucket/empty2 +item/bucket/empty3 +item/bucket/empty_fish1 +item/bucket/empty_fish2 +item/bucket/empty_fish3 +item/bucket/empty_lava1 +item/bucket/empty_lava2 +item/bucket/empty_lava3 +item/bucket/empty_powder_snow1 +item/bucket/empty_powder_snow2 +item/bucket/emptysulfurcube1 +item/bucket/emptysulfurcube2 +item/bucket/emptysulfurcube3 +item/bucket/fill1 +item/bucket/fill2 +item/bucket/fill3 +item/bucket/fill_axolotl1 +item/bucket/fill_axolotl2 +item/bucket/fill_axolotl3 +item/bucket/fill_fish1 +item/bucket/fill_fish2 +item/bucket/fill_fish3 +item/bucket/fill_lava1 +item/bucket/fill_lava2 +item/bucket/fill_lava3 +item/bucket/fill_powder_snow1 +item/bucket/fill_powder_snow2 +item/bucket/fillsulfurcube1 +item/bucket/fillsulfurcube2 +item/bucket/fillsulfurcube3 +item/bundle/drop_contents1 +item/bundle/drop_contents2 +item/bundle/drop_contents3 +item/bundle/insert1 +item/bundle/insert2 +item/bundle/insert3 +item/bundle/insert_fail +item/bundle/remove_one1 +item/bundle/remove_one2 +item/bundle/remove_one3 +item/crossbow/loading_end +item/crossbow/loading_middle1 +item/crossbow/loading_middle2 +item/crossbow/loading_middle3 +item/crossbow/loading_middle4 +item/crossbow/loading_start +item/crossbow/quick_charge/quick1_1 +item/crossbow/quick_charge/quick1_2 +item/crossbow/quick_charge/quick1_3 +item/crossbow/quick_charge/quick2_1 +item/crossbow/quick_charge/quick2_2 +item/crossbow/quick_charge/quick2_3 +item/crossbow/quick_charge/quick3_1 +item/crossbow/quick_charge/quick3_2 +item/crossbow/quick_charge/quick3_3 +item/crossbow/shoot1 +item/crossbow/shoot2 +item/crossbow/shoot3 +item/dye/dye +item/elytra/elytra_loop +item/goat_horn/call0 +item/goat_horn/call1 +item/goat_horn/call2 +item/goat_horn/call3 +item/goat_horn/call4 +item/goat_horn/call5 +item/goat_horn/call6 +item/goat_horn/call7 +item/golden_dandelion/unuse +item/golden_dandelion/use +item/hoe/till1 +item/hoe/till2 +item/hoe/till3 +item/hoe/till4 +item/honeycomb/wax_on1 +item/honeycomb/wax_on2 +item/honeycomb/wax_on3 +item/ink_sac/ink_sac1 +item/ink_sac/ink_sac2 +item/ink_sac/ink_sac3 +item/mace/smash_air1 +item/mace/smash_air2 +item/mace/smash_air3 +item/mace/smash_ground1 +item/mace/smash_ground2 +item/mace/smash_ground3 +item/mace/smash_ground4 +item/mace/smash_ground_heavy +item/ominous_bottle/dispose +item/plant/crop1 +item/plant/crop2 +item/plant/crop3 +item/plant/crop4 +item/plant/crop5 +item/plant/crop6 +item/plant/netherwart1 +item/plant/netherwart2 +item/plant/netherwart3 +item/plant/netherwart4 +item/plant/netherwart5 +item/plant/netherwart6 +item/shield/block1 +item/shield/block2 +item/shield/block3 +item/shield/block4 +item/shield/block5 +item/shovel/flatten1 +item/shovel/flatten2 +item/shovel/flatten3 +item/shovel/flatten4 +item/spear/attack1 +item/spear/attack2 +item/spear/attack3 +item/spear/hit1 +item/spear/hit2 +item/spear/hit3 +item/spear/lunge1 +item/spear/lunge2 +item/spear/lunge3 +item/spear/use +item/spear/wood/attack1 +item/spear/wood/attack2 +item/spear/wood/attack3 +item/spear/wood/hit1 +item/spear/wood/hit2 +item/spear/wood/hit3 +item/spear/wood/use +item/spyglass/stop +item/spyglass/use +item/sweet_berries/pick_from_bush1 +item/sweet_berries/pick_from_bush2 +item/totem/use_totem +item/trident/ground_impact1 +item/trident/ground_impact2 +item/trident/ground_impact3 +item/trident/ground_impact4 +item/trident/pierce1 +item/trident/pierce2 +item/trident/pierce3 +item/trident/return1 +item/trident/return2 +item/trident/return3 +item/trident/riptide1 +item/trident/riptide2 +item/trident/riptide3 +item/trident/throw1 +item/trident/throw2 +item/trident/thunder1 +item/trident/thunder2 +liquid/heavy_splash +liquid/lava +liquid/lavapop +liquid/splash2 +liquid/splash +liquid/swim10 +liquid/swim11 +liquid/swim12 +liquid/swim13 +liquid/swim14 +liquid/swim15 +liquid/swim16 +liquid/swim17 +liquid/swim18 +liquid/swim1 +liquid/swim2 +liquid/swim3 +liquid/swim4 +liquid/swim5 +liquid/swim6 +liquid/swim7 +liquid/swim8 +liquid/swim9 +liquid/water +minecart/base +minecart/inside +minecart/inside_underwater1 +minecart/inside_underwater2 +minecart/inside_underwater3 +mob/allay/death1 +mob/allay/death2 +mob/allay/hurt1 +mob/allay/hurt2 +mob/allay/idle_with_item1 +mob/allay/idle_with_item2 +mob/allay/idle_with_item3 +mob/allay/idle_with_item4 +mob/allay/idle_without_item1 +mob/allay/idle_without_item2 +mob/allay/idle_without_item3 +mob/allay/idle_without_item4 +mob/allay/item_given1 +mob/allay/item_given2 +mob/allay/item_given3 +mob/allay/item_given4 +mob/allay/item_taken1 +mob/allay/item_taken2 +mob/allay/item_taken3 +mob/allay/item_taken4 +mob/allay/item_thrown1 +mob/armadillo/ambient1 +mob/armadillo/ambient2 +mob/armadillo/ambient3 +mob/armadillo/ambient4 +mob/armadillo/ambient5 +mob/armadillo/ambient6 +mob/armadillo/ambient7 +mob/armadillo/ambient8 +mob/armadillo/brush_armadillo1 +mob/armadillo/brush_armadillo2 +mob/armadillo/death1 +mob/armadillo/death2 +mob/armadillo/death3 +mob/armadillo/death4 +mob/armadillo/eat1 +mob/armadillo/eat2 +mob/armadillo/eat3 +mob/armadillo/hurt1 +mob/armadillo/hurt2 +mob/armadillo/hurt3 +mob/armadillo/hurt4 +mob/armadillo/hurt5 +mob/armadillo/hurt_reduced1 +mob/armadillo/hurt_reduced2 +mob/armadillo/hurt_reduced3 +mob/armadillo/hurt_reduced4 +mob/armadillo/land1 +mob/armadillo/land2 +mob/armadillo/land3 +mob/armadillo/land4 +mob/armadillo/peek +mob/armadillo/roll1 +mob/armadillo/roll2 +mob/armadillo/roll3 +mob/armadillo/roll4 +mob/armadillo/scute_drop1 +mob/armadillo/scute_drop2 +mob/armadillo/step1 +mob/armadillo/step2 +mob/armadillo/step3 +mob/armadillo/step4 +mob/armadillo/step5 +mob/armadillo/unroll_finish1 +mob/armadillo/unroll_finish2 +mob/armadillo/unroll_start +mob/axolotl/attack1 +mob/axolotl/attack2 +mob/axolotl/attack3 +mob/axolotl/attack4 +mob/axolotl/death1 +mob/axolotl/death2 +mob/axolotl/hurt1 +mob/axolotl/hurt2 +mob/axolotl/hurt3 +mob/axolotl/hurt4 +mob/axolotl/idle1 +mob/axolotl/idle2 +mob/axolotl/idle3 +mob/axolotl/idle4 +mob/axolotl/idle5 +mob/axolotl/idle_air1 +mob/axolotl/idle_air2 +mob/axolotl/idle_air3 +mob/axolotl/idle_air4 +mob/axolotl/idle_air5 +mob/baby_nautilus/ambient1 +mob/baby_nautilus/ambient2 +mob/baby_nautilus/ambient3 +mob/baby_nautilus/ambient4 +mob/baby_nautilus/ambient5 +mob/baby_nautilus/ambient6 +mob/baby_nautilus/ambient_land1 +mob/baby_nautilus/ambient_land2 +mob/baby_nautilus/ambient_land3 +mob/baby_nautilus/ambient_land4 +mob/baby_nautilus/death_land +mob/baby_nautilus/death +mob/baby_nautilus/eat1 +mob/baby_nautilus/eat2 +mob/baby_nautilus/hurt1 +mob/baby_nautilus/hurt2 +mob/baby_nautilus/hurt3 +mob/baby_nautilus/hurt4 +mob/baby_nautilus/hurt_land1 +mob/baby_nautilus/hurt_land2 +mob/baby_nautilus/hurt_land3 +mob/baby_nautilus/hurt_land4 +mob/bat/death +mob/bat/hurt1 +mob/bat/hurt2 +mob/bat/hurt3 +mob/bat/hurt4 +mob/bat/idle1 +mob/bat/idle2 +mob/bat/idle3 +mob/bat/idle4 +mob/bat/loop +mob/bat/takeoff +mob/bee/aggressive1 +mob/bee/aggressive2 +mob/bee/aggressive3 +mob/bee/death1 +mob/bee/death2 +mob/bee/hurt1 +mob/bee/hurt2 +mob/bee/hurt3 +mob/bee/loop1 +mob/bee/loop2 +mob/bee/loop3 +mob/bee/loop4 +mob/bee/loop5 +mob/bee/pollinate1 +mob/bee/pollinate2 +mob/bee/pollinate3 +mob/bee/pollinate4 +mob/bee/sting +mob/blaze/breathe1 +mob/blaze/breathe2 +mob/blaze/breathe3 +mob/blaze/breathe4 +mob/blaze/death +mob/blaze/hit1 +mob/blaze/hit2 +mob/blaze/hit3 +mob/blaze/hit4 +mob/bogged/ambient1 +mob/bogged/ambient2 +mob/bogged/ambient3 +mob/bogged/ambient4 +mob/bogged/death +mob/bogged/hurt1 +mob/bogged/hurt2 +mob/bogged/hurt3 +mob/bogged/hurt4 +mob/bogged/step1 +mob/bogged/step2 +mob/bogged/step3 +mob/bogged/step4 +mob/breeze/charge1 +mob/breeze/charge2 +mob/breeze/charge3 +mob/breeze/death1 +mob/breeze/death2 +mob/breeze/deflect1 +mob/breeze/deflect2 +mob/breeze/deflect3 +mob/breeze/hurt1 +mob/breeze/hurt2 +mob/breeze/hurt3 +mob/breeze/idle1 +mob/breeze/idle2 +mob/breeze/idle3 +mob/breeze/idle4 +mob/breeze/idle_air1 +mob/breeze/idle_air2 +mob/breeze/idle_air3 +mob/breeze/idle_air4 +mob/breeze/inhale1 +mob/breeze/inhale2 +mob/breeze/jump1 +mob/breeze/jump2 +mob/breeze/land1 +mob/breeze/land2 +mob/breeze/shoot +mob/breeze/slide1 +mob/breeze/slide2 +mob/breeze/slide3 +mob/breeze/slide4 +mob/breeze/whirl +mob/breeze/wind_burst1 +mob/breeze/wind_burst2 +mob/breeze/wind_burst3 +mob/camel/ambient1 +mob/camel/ambient2 +mob/camel/ambient3 +mob/camel/ambient4 +mob/camel/ambient5 +mob/camel/ambient6 +mob/camel/ambient7 +mob/camel/ambient8 +mob/camel/dash1 +mob/camel/dash2 +mob/camel/dash3 +mob/camel/dash4 +mob/camel/dash5 +mob/camel/dash6 +mob/camel/dash_ready1 +mob/camel/death1 +mob/camel/death2 +mob/camel/eat1 +mob/camel/eat2 +mob/camel/eat3 +mob/camel/eat4 +mob/camel/eat5 +mob/camel/hurt1 +mob/camel/hurt2 +mob/camel/hurt3 +mob/camel/hurt4 +mob/camel_husk/ambient1 +mob/camel_husk/ambient2 +mob/camel_husk/ambient3 +mob/camel_husk/ambient4 +mob/camel_husk/ambient5 +mob/camel_husk/ambient6 +mob/camel_husk/ambient7 +mob/camel_husk/ambient8 +mob/camel_husk/dash1 +mob/camel_husk/dash2 +mob/camel_husk/dash3 +mob/camel_husk/dash4 +mob/camel_husk/dash5 +mob/camel_husk/dash6 +mob/camel_husk/dash_ready +mob/camel_husk/death1 +mob/camel_husk/death2 +mob/camel_husk/eat1 +mob/camel_husk/eat2 +mob/camel_husk/eat3 +mob/camel_husk/eat4 +mob/camel_husk/eat5 +mob/camel_husk/hurt1 +mob/camel_husk/hurt2 +mob/camel_husk/hurt3 +mob/camel_husk/hurt4 +mob/camel_husk/sit1 +mob/camel_husk/sit2 +mob/camel_husk/sit3 +mob/camel_husk/sit4 +mob/camel_husk/stand1 +mob/camel_husk/stand2 +mob/camel_husk/stand3 +mob/camel_husk/stand4 +mob/camel_husk/stand5 +mob/camel_husk/step1 +mob/camel_husk/step2 +mob/camel_husk/step3 +mob/camel_husk/step4 +mob/camel_husk/step5 +mob/camel_husk/step6 +mob/camel_husk/step_sand1 +mob/camel_husk/step_sand2 +mob/camel_husk/step_sand3 +mob/camel_husk/step_sand4 +mob/camel_husk/step_sand5 +mob/camel_husk/step_sand6 +mob/camel/sit1 +mob/camel/sit2 +mob/camel/sit3 +mob/camel/sit4 +mob/camel/stand1 +mob/camel/stand2 +mob/camel/stand3 +mob/camel/stand4 +mob/camel/stand5 +mob/camel/step1 +mob/camel/step2 +mob/camel/step3 +mob/camel/step4 +mob/camel/step5 +mob/camel/step6 +mob/camel/step_sand1 +mob/camel/step_sand2 +mob/camel/step_sand3 +mob/camel/step_sand4 +mob/camel/step_sand5 +mob/camel/step_sand6 +mob/cat/baby_cat/ambient1 +mob/cat/baby_cat/ambient2 +mob/cat/baby_cat/ambient3 +mob/cat/baby_cat/ambient4 +mob/cat/baby_cat/ambient5 +mob/cat/baby_cat/ambient6 +mob/cat/baby_cat/ambient7 +mob/cat/baby_cat/death +mob/cat/baby_cat/hurt1 +mob/cat/baby_cat/hurt2 +mob/cat/baby_cat/hurt3 +mob/cat/beg1 +mob/cat/beg2 +mob/cat/beg3 +mob/cat/eat1 +mob/cat/eat2 +mob/cat/hiss1 +mob/cat/hiss2 +mob/cat/hiss3 +mob/cat/hitt1 +mob/cat/hitt2 +mob/cat/hitt3 +mob/cat/meow1 +mob/cat/meow2 +mob/cat/meow3 +mob/cat/meow4 +mob/cat/ocelot/death1 +mob/cat/ocelot/death2 +mob/cat/ocelot/death3 +mob/cat/ocelot/idle1 +mob/cat/ocelot/idle2 +mob/cat/ocelot/idle3 +mob/cat/ocelot/idle4 +mob/cat/purr1 +mob/cat/purr2 +mob/cat/purr3 +mob/cat/purreow1 +mob/cat/purreow2 +mob/cat/royal/ambient1 +mob/cat/royal/ambient2 +mob/cat/royal/ambient3 +mob/cat/royal/ambient4 +mob/cat/royal/ambient5 +mob/cat/royal/ambient6 +mob/cat/royal/death +mob/cat/royal/hurt1 +mob/cat/royal/hurt2 +mob/cat/royal/hurt3 +mob/cat/stray/idle1 +mob/cat/stray/idle2 +mob/cat/stray/idle3 +mob/cat/stray/idle4 +mob/chicken/baby_chicken/ambient1 +mob/chicken/baby_chicken/ambient2 +mob/chicken/baby_chicken/death +mob/chicken/baby_chicken/hurt1 +mob/chicken/baby_chicken/hurt2 +mob/chicken/baby_chicken/hurt3 +mob/chicken/baby_chicken/hurt4 +mob/chicken/baby_chicken/step +mob/chicken/hurt1 +mob/chicken/hurt2 +mob/chicken/picky/ambient1 +mob/chicken/picky/ambient2 +mob/chicken/picky/ambient3 +mob/chicken/picky/ambient4 +mob/chicken/picky/ambient5 +mob/chicken/picky/ambient6 +mob/chicken/picky/ambient7 +mob/chicken/picky/ambient8 +mob/chicken/picky/death +mob/chicken/picky/hurt1 +mob/chicken/picky/hurt2 +mob/chicken/picky/hurt3 +mob/chicken/plop +mob/chicken/say1 +mob/chicken/say2 +mob/chicken/say3 +mob/chicken/step1 +mob/chicken/step2 +mob/coppergolem/item_drop +mob/coppergolem/item_no_drop +mob/coppergolem/no_item_get +mob/coppergolem/no_item_no_get +mob/coppergolem/oxidized/death +mob/coppergolem/oxidized/hurt1 +mob/coppergolem/oxidized/hurt2 +mob/coppergolem/oxidized/hurt3 +mob/coppergolem/oxidized/hurt4 +mob/coppergolem/oxidized/spin1 +mob/coppergolem/oxidized/spin2 +mob/coppergolem/oxidized/spin3 +mob/coppergolem/oxidized/spin4 +mob/coppergolem/oxidized/spin5 +mob/coppergolem/oxidized/spin6 +mob/coppergolem/oxidized/spin7 +mob/coppergolem/oxidized/step1 +mob/coppergolem/oxidized/step2 +mob/coppergolem/oxidized/step3 +mob/coppergolem/oxidized/step4 +mob/coppergolem/oxidized/step5 +mob/coppergolem/oxidized/step6 +mob/coppergolem/oxidized/step7 +mob/coppergolem/oxidized/step8 +mob/coppergolem/oxidized/step9 +mob/coppergolem/regular/death +mob/coppergolem/regular/hurt1 +mob/coppergolem/regular/hurt2 +mob/coppergolem/regular/hurt3 +mob/coppergolem/regular/hurt4 +mob/coppergolem/regular/spin1 +mob/coppergolem/regular/spin2 +mob/coppergolem/regular/spin3 +mob/coppergolem/regular/spin4 +mob/coppergolem/regular/spin5 +mob/coppergolem/regular/spin6 +mob/coppergolem/regular/spin7 +mob/coppergolem/regular/step1 +mob/coppergolem/regular/step2 +mob/coppergolem/regular/step3 +mob/coppergolem/regular/step4 +mob/coppergolem/regular/step5 +mob/coppergolem/regular/step6 +mob/coppergolem/regular/step7 +mob/coppergolem/regular/step8 +mob/coppergolem/regular/step9 +mob/coppergolem/spawn +mob/coppergolem/weathered/death +mob/coppergolem/weathered/hurt1 +mob/coppergolem/weathered/hurt2 +mob/coppergolem/weathered/hurt3 +mob/coppergolem/weathered/hurt4 +mob/coppergolem/weathered/spin1 +mob/coppergolem/weathered/spin2 +mob/coppergolem/weathered/spin3 +mob/coppergolem/weathered/spin4 +mob/coppergolem/weathered/spin5 +mob/coppergolem/weathered/spin6 +mob/coppergolem/weathered/spin7 +mob/coppergolem/weathered/step1 +mob/coppergolem/weathered/step2 +mob/coppergolem/weathered/step3 +mob/coppergolem/weathered/step4 +mob/coppergolem/weathered/step5 +mob/coppergolem/weathered/step6 +mob/coppergolem/weathered/step7 +mob/coppergolem/weathered/step8 +mob/coppergolem/weathered/step9 +mob/cow/hurt1 +mob/cow/hurt2 +mob/cow/hurt3 +mob/cow/moody/ambient1 +mob/cow/moody/ambient2 +mob/cow/moody/ambient3 +mob/cow/moody/ambient4 +mob/cow/moody/ambient5 +mob/cow/moody/ambient6 +mob/cow/moody/ambient7 +mob/cow/moody/ambient8 +mob/cow/moody/ambient9 +mob/cow/moody/death1 +mob/cow/moody/death2 +mob/cow/moody/hit1 +mob/cow/moody/hit2 +mob/cow/moody/hit3 +mob/cow/moody/hit4 +mob/cow/say1 +mob/cow/say2 +mob/cow/say3 +mob/cow/say4 +mob/cow/step1 +mob/cow/step2 +mob/cow/step3 +mob/cow/step4 +mob/creaking/attack +mob/creaking/creaking_activate +mob/creaking/creaking_attack1 +mob/creaking/creaking_attack2 +mob/creaking/creaking_attack3 +mob/creaking/creaking_attack4 +mob/creaking/creaking_deactivate +mob/creaking/creaking_death +mob/creaking/creaking_freeze1 +mob/creaking/creaking_freeze2 +mob/creaking/creaking_freeze3 +mob/creaking/creaking_freeze4 +mob/creaking/creaking_idle1 +mob/creaking/creaking_idle2 +mob/creaking/creaking_idle3 +mob/creaking/creaking_idle4 +mob/creaking/creaking_idle5 +mob/creaking/creaking_idle6 +mob/creaking/creaking_spawn +mob/creaking/creaking_step1 +mob/creaking/creaking_step2 +mob/creaking/creaking_step3 +mob/creaking/creaking_step4 +mob/creaking/creaking_step5 +mob/creaking/creaking_sway1 +mob/creaking/creaking_sway2 +mob/creaking/creaking_sway3 +mob/creaking/creaking_sway4 +mob/creaking/creaking_sway +mob/creaking/creaking_twitch +mob/creaking/creaking_unfreeze1 +mob/creaking/creaking_unfreeze2 +mob/creaking/creaking_unfreeze3 +mob/creaking/parrot_imitate_creaking +mob/creeper/death +mob/creeper/say1 +mob/creeper/say2 +mob/creeper/say3 +mob/creeper/say4 +mob/dolphin/attack1 +mob/dolphin/attack2 +mob/dolphin/attack3 +mob/dolphin/blowhole1 +mob/dolphin/blowhole2 +mob/dolphin/death1 +mob/dolphin/death2 +mob/dolphin/eat1 +mob/dolphin/eat2 +mob/dolphin/eat3 +mob/dolphin/hurt1 +mob/dolphin/hurt2 +mob/dolphin/hurt3 +mob/dolphin/idle1 +mob/dolphin/idle2 +mob/dolphin/idle3 +mob/dolphin/idle4 +mob/dolphin/idle5 +mob/dolphin/idle6 +mob/dolphin/idle_water10 +mob/dolphin/idle_water1 +mob/dolphin/idle_water2 +mob/dolphin/idle_water3 +mob/dolphin/idle_water4 +mob/dolphin/idle_water5 +mob/dolphin/idle_water6 +mob/dolphin/idle_water7 +mob/dolphin/idle_water8 +mob/dolphin/idle_water9 +mob/dolphin/jump1 +mob/dolphin/jump2 +mob/dolphin/jump3 +mob/dolphin/play1 +mob/dolphin/play2 +mob/dolphin/splash1 +mob/dolphin/splash2 +mob/dolphin/splash3 +mob/dolphin/swim1 +mob/dolphin/swim2 +mob/dolphin/swim3 +mob/dolphin/swim4 +mob/drowned/convert1 +mob/drowned/convert2 +mob/drowned/convert3 +mob/drowned/death1 +mob/drowned/death2 +mob/drowned/hurt1 +mob/drowned/hurt2 +mob/drowned/hurt3 +mob/drowned/idle1 +mob/drowned/idle2 +mob/drowned/idle3 +mob/drowned/idle4 +mob/drowned/idle5 +mob/drowned/step1 +mob/drowned/step2 +mob/drowned/step3 +mob/drowned/step4 +mob/drowned/step5 +mob/drowned/water/death1 +mob/drowned/water/death2 +mob/drowned/water/hurt1 +mob/drowned/water/hurt2 +mob/drowned/water/hurt3 +mob/drowned/water/idle1 +mob/drowned/water/idle2 +mob/drowned/water/idle3 +mob/drowned/water/idle4 +mob/enderdragon/end +mob/enderdragon/growl1 +mob/enderdragon/growl2 +mob/enderdragon/growl3 +mob/enderdragon/growl4 +mob/enderdragon/hit1 +mob/enderdragon/hit2 +mob/enderdragon/hit3 +mob/enderdragon/hit4 +mob/enderdragon/wings1 +mob/enderdragon/wings2 +mob/enderdragon/wings3 +mob/enderdragon/wings4 +mob/enderdragon/wings5 +mob/enderdragon/wings6 +mob/endermen/death +mob/endermen/hit1 +mob/endermen/hit2 +mob/endermen/hit3 +mob/endermen/hit4 +mob/endermen/idle1 +mob/endermen/idle2 +mob/endermen/idle3 +mob/endermen/idle4 +mob/endermen/idle5 +mob/endermen/portal2 +mob/endermen/portal +mob/endermen/scream1 +mob/endermen/scream2 +mob/endermen/scream3 +mob/endermen/scream4 +mob/endermen/stare +mob/evocation_illager/cast1 +mob/evocation_illager/cast2 +mob/evocation_illager/celebrate +mob/evocation_illager/death1 +mob/evocation_illager/death2 +mob/evocation_illager/fangs +mob/evocation_illager/hurt1 +mob/evocation_illager/hurt2 +mob/evocation_illager/idle1 +mob/evocation_illager/idle2 +mob/evocation_illager/idle3 +mob/evocation_illager/idle4 +mob/evocation_illager/prepare_attack1 +mob/evocation_illager/prepare_attack2 +mob/evocation_illager/prepare_summon +mob/evocation_illager/prepare_wololo +mob/fox/aggro1 +mob/fox/aggro2 +mob/fox/aggro3 +mob/fox/aggro4 +mob/fox/aggro5 +mob/fox/aggro6 +mob/fox/aggro7 +mob/fox/bite1 +mob/fox/bite2 +mob/fox/bite3 +mob/fox/death1 +mob/fox/death2 +mob/fox/eat1 +mob/fox/eat2 +mob/fox/eat3 +mob/fox/hurt1 +mob/fox/hurt2 +mob/fox/hurt3 +mob/fox/hurt4 +mob/fox/idle1 +mob/fox/idle2 +mob/fox/idle3 +mob/fox/idle4 +mob/fox/idle5 +mob/fox/idle6 +mob/fox/screech1 +mob/fox/screech2 +mob/fox/screech3 +mob/fox/screech4 +mob/fox/sleep1 +mob/fox/sleep2 +mob/fox/sleep3 +mob/fox/sleep4 +mob/fox/sleep5 +mob/fox/sniff1 +mob/fox/sniff2 +mob/fox/sniff3 +mob/fox/sniff4 +mob/fox/spit1 +mob/fox/spit2 +mob/fox/spit3 +mob/frog/death1 +mob/frog/death2 +mob/frog/death3 +mob/frog/eat1 +mob/frog/eat2 +mob/frog/eat3 +mob/frog/eat4 +mob/frog/hurt1 +mob/frog/hurt2 +mob/frog/hurt3 +mob/frog/hurt4 +mob/frog/hurt5 +mob/frog/idle1 +mob/frog/idle2 +mob/frog/idle3 +mob/frog/idle4 +mob/frog/idle5 +mob/frog/idle6 +mob/frog/idle7 +mob/frog/idle8 +mob/frog/lay_spawn1 +mob/frog/lay_spawn2 +mob/frog/long_jump1 +mob/frog/long_jump2 +mob/frog/long_jump3 +mob/frog/long_jump4 +mob/frog/step1 +mob/frog/step2 +mob/frog/step3 +mob/frog/step4 +mob/frog/tongue1 +mob/frog/tongue2 +mob/frog/tongue3 +mob/frog/tongue4 +mob/ghast/affectionate_scream +mob/ghast/charge +mob/ghast/death +mob/ghast/fireball4 +mob/ghastling/death +mob/ghastling/ghastling1 +mob/ghastling/ghastling2 +mob/ghastling/ghastling3 +mob/ghastling/ghastling4 +mob/ghastling/ghastling5 +mob/ghastling/ghastling6 +mob/ghastling/ghastling7 +mob/ghastling/hurt1 +mob/ghastling/hurt2 +mob/ghastling/hurt3 +mob/ghastling/hurt4 +mob/ghastling/hurt5 +mob/ghastling/spawn +mob/ghast/moan1 +mob/ghast/moan2 +mob/ghast/moan3 +mob/ghast/moan4 +mob/ghast/moan5 +mob/ghast/moan6 +mob/ghast/moan7 +mob/ghast/scream1 +mob/ghast/scream2 +mob/ghast/scream3 +mob/ghast/scream4 +mob/ghast/scream5 +mob/glow_squid/ambient1 +mob/glow_squid/ambient2 +mob/glow_squid/ambient3 +mob/glow_squid/ambient4 +mob/glow_squid/ambient5 +mob/glow_squid/death1 +mob/glow_squid/death2 +mob/glow_squid/death3 +mob/glow_squid/hurt1 +mob/glow_squid/hurt2 +mob/glow_squid/hurt3 +mob/glow_squid/hurt4 +mob/glow_squid/squirt1 +mob/glow_squid/squirt2 +mob/glow_squid/squirt3 +mob/goat/death1 +mob/goat/death2 +mob/goat/death3 +mob/goat/death4 +mob/goat/death5 +mob/goat/eat1 +mob/goat/eat2 +mob/goat/eat3 +mob/goat/horn_break1 +mob/goat/horn_break2 +mob/goat/horn_break3 +mob/goat/horn_break4 +mob/goat/hurt1 +mob/goat/hurt2 +mob/goat/hurt3 +mob/goat/hurt4 +mob/goat/idle1 +mob/goat/idle2 +mob/goat/idle3 +mob/goat/idle4 +mob/goat/idle5 +mob/goat/idle6 +mob/goat/idle7 +mob/goat/idle8 +mob/goat/impact1 +mob/goat/impact2 +mob/goat/impact3 +mob/goat/jump1 +mob/goat/jump2 +mob/goat/pre_ram1 +mob/goat/pre_ram2 +mob/goat/pre_ram3 +mob/goat/pre_ram4 +mob/goat/scream1 +mob/goat/scream2 +mob/goat/scream3 +mob/goat/scream4 +mob/goat/scream5 +mob/goat/scream6 +mob/goat/scream7 +mob/goat/scream8 +mob/goat/scream9 +mob/goat/screaming_death1 +mob/goat/screaming_death2 +mob/goat/screaming_death3 +mob/goat/screaming_hurt1 +mob/goat/screaming_hurt2 +mob/goat/screaming_hurt3 +mob/goat/screaming_milk1 +mob/goat/screaming_milk2 +mob/goat/screaming_milk3 +mob/goat/screaming_milk4 +mob/goat/screaming_milk5 +mob/goat/screaming_pre_ram1 +mob/goat/screaming_pre_ram2 +mob/goat/screaming_pre_ram3 +mob/goat/screaming_pre_ram4 +mob/goat/screaming_pre_ram5 +mob/goat/step1 +mob/goat/step2 +mob/goat/step3 +mob/goat/step4 +mob/goat/step5 +mob/goat/step6 +mob/guardian/attack_loop +mob/guardian/curse +mob/guardian/elder_death +mob/guardian/elder_hit1 +mob/guardian/elder_hit2 +mob/guardian/elder_hit3 +mob/guardian/elder_hit4 +mob/guardian/elder_idle1 +mob/guardian/elder_idle2 +mob/guardian/elder_idle3 +mob/guardian/elder_idle4 +mob/guardian/flop1 +mob/guardian/flop2 +mob/guardian/flop3 +mob/guardian/flop4 +mob/guardian/guardian_death +mob/guardian/guardian_hit1 +mob/guardian/guardian_hit2 +mob/guardian/guardian_hit3 +mob/guardian/guardian_hit4 +mob/guardian/guardian_idle1 +mob/guardian/guardian_idle2 +mob/guardian/guardian_idle3 +mob/guardian/guardian_idle4 +mob/guardian/land_death +mob/guardian/land_hit1 +mob/guardian/land_hit2 +mob/guardian/land_hit3 +mob/guardian/land_hit4 +mob/guardian/land_idle1 +mob/guardian/land_idle2 +mob/guardian/land_idle3 +mob/guardian/land_idle4 +mob/happy_ghast/ambient10 +mob/happy_ghast/ambient11 +mob/happy_ghast/ambient12 +mob/happy_ghast/ambient13 +mob/happy_ghast/ambient14 +mob/happy_ghast/ambient1 +mob/happy_ghast/ambient2 +mob/happy_ghast/ambient3 +mob/happy_ghast/ambient4 +mob/happy_ghast/ambient5 +mob/happy_ghast/ambient6 +mob/happy_ghast/ambient7 +mob/happy_ghast/ambient8 +mob/happy_ghast/ambient9 +mob/happy_ghast/death +mob/happy_ghast/ghast_ride +mob/happy_ghast/goggles_down +mob/happy_ghast/goggles_up +mob/happy_ghast/harness_equip +mob/happy_ghast/harness_unequip +mob/happy_ghast/hurt1 +mob/happy_ghast/hurt2 +mob/happy_ghast/hurt3 +mob/happy_ghast/hurt4 +mob/happy_ghast/hurt5 +mob/happy_ghast/hurt6 +mob/hoglin/angry1 +mob/hoglin/angry2 +mob/hoglin/angry3 +mob/hoglin/angry4 +mob/hoglin/angry5 +mob/hoglin/angry6 +mob/hoglin/attack1 +mob/hoglin/attack2 +mob/hoglin/converted1 +mob/hoglin/converted2 +mob/hoglin/death1 +mob/hoglin/death2 +mob/hoglin/death3 +mob/hoglin/hurt1 +mob/hoglin/hurt2 +mob/hoglin/hurt3 +mob/hoglin/hurt4 +mob/hoglin/idle10 +mob/hoglin/idle11 +mob/hoglin/idle1 +mob/hoglin/idle2 +mob/hoglin/idle3 +mob/hoglin/idle4 +mob/hoglin/idle5 +mob/hoglin/idle6 +mob/hoglin/idle7 +mob/hoglin/idle8 +mob/hoglin/idle9 +mob/hoglin/retreat1 +mob/hoglin/retreat2 +mob/hoglin/retreat3 +mob/hoglin/step1 +mob/hoglin/step2 +mob/hoglin/step3 +mob/hoglin/step4 +mob/hoglin/step5 +mob/hoglin/step6 +mob/horse/angry1 +mob/horse/armor +mob/horse/armor_unequip +mob/horse/baby_horse/ambient1 +mob/horse/baby_horse/ambient2 +mob/horse/baby_horse/ambient3 +mob/horse/baby_horse/ambient4 +mob/horse/baby_horse/ambient5 +mob/horse/baby_horse/ambient6 +mob/horse/baby_horse/ambient7 +mob/horse/baby_horse/ambient8 +mob/horse/baby_horse/angry +mob/horse/baby_horse/death +mob/horse/baby_horse/eat1 +mob/horse/baby_horse/eat2 +mob/horse/baby_horse/eat3 +mob/horse/baby_horse/eat4 +mob/horse/baby_horse/eat5 +mob/horse/baby_horse/hurt1 +mob/horse/baby_horse/hurt2 +mob/horse/baby_horse/hurt3 +mob/horse/baby_horse/land +mob/horse/baby_horse/step1 +mob/horse/baby_horse/step2 +mob/horse/baby_horse/step3 +mob/horse/baby_horse/step4 +mob/horse/baby_horse/step5 +mob/horse/baby_horse/step6 +mob/horse/breathe1 +mob/horse/breathe2 +mob/horse/breathe3 +mob/horse/death +mob/horse/donkey/angry1 +mob/horse/donkey/angry2 +mob/horse/donkey/death +mob/horse/donkey/hit1 +mob/horse/donkey/hit2 +mob/horse/donkey/hit3 +mob/horse/donkey/idle1 +mob/horse/donkey/idle2 +mob/horse/donkey/idle3 +mob/horse/eat1 +mob/horse/eat2 +mob/horse/eat3 +mob/horse/eat4 +mob/horse/eat5 +mob/horse/gallop1 +mob/horse/gallop2 +mob/horse/gallop3 +mob/horse/gallop4 +mob/horse/hit1 +mob/horse/hit2 +mob/horse/hit3 +mob/horse/hit4 +mob/horse/idle1 +mob/horse/idle2 +mob/horse/idle3 +mob/horse/jump +mob/horse/land +mob/horse/leather +mob/horse/saddle_unequip +mob/horse/skeleton/death +mob/horse/skeleton/hit1 +mob/horse/skeleton/hit2 +mob/horse/skeleton/hit3 +mob/horse/skeleton/hit4 +mob/horse/skeleton/idle1 +mob/horse/skeleton/idle2 +mob/horse/skeleton/idle3 +mob/horse/skeleton/water/gallop1 +mob/horse/skeleton/water/gallop2 +mob/horse/skeleton/water/gallop3 +mob/horse/skeleton/water/gallop4 +mob/horse/skeleton/water/idle1 +mob/horse/skeleton/water/idle2 +mob/horse/skeleton/water/idle3 +mob/horse/skeleton/water/idle4 +mob/horse/skeleton/water/idle5 +mob/horse/skeleton/water/jump +mob/horse/skeleton/water/soft1 +mob/horse/skeleton/water/soft2 +mob/horse/skeleton/water/soft3 +mob/horse/skeleton/water/soft4 +mob/horse/skeleton/water/soft5 +mob/horse/skeleton/water/soft6 +mob/horse/soft1 +mob/horse/soft2 +mob/horse/soft3 +mob/horse/soft4 +mob/horse/soft5 +mob/horse/soft6 +mob/horse/wood1 +mob/horse/wood2 +mob/horse/wood3 +mob/horse/wood4 +mob/horse/wood5 +mob/horse/wood6 +mob/horse/zombie/angry +mob/horse/zombie/death +mob/horse/zombie/hit1 +mob/horse/zombie/hit2 +mob/horse/zombie/hit3 +mob/horse/zombie/hit4 +mob/horse/zombie/idle1 +mob/horse/zombie/idle2 +mob/horse/zombie/idle3 +mob/husk/convert1 +mob/husk/convert2 +mob/husk/death1 +mob/husk/death2 +mob/husk/hurt1 +mob/husk/hurt2 +mob/husk/idle1 +mob/husk/idle2 +mob/husk/idle3 +mob/husk/step1 +mob/husk/step2 +mob/husk/step3 +mob/husk/step4 +mob/husk/step5 +mob/illusion_illager/death1 +mob/illusion_illager/death2 +mob/illusion_illager/hurt1 +mob/illusion_illager/hurt2 +mob/illusion_illager/hurt3 +mob/illusion_illager/idle1 +mob/illusion_illager/idle2 +mob/illusion_illager/idle3 +mob/illusion_illager/idle4 +mob/illusion_illager/mirror_move1 +mob/illusion_illager/mirror_move2 +mob/illusion_illager/prepare_blind +mob/illusion_illager/prepare_mirror +mob/irongolem/damage1 +mob/irongolem/damage2 +mob/irongolem/death +mob/irongolem/hit1 +mob/irongolem/hit2 +mob/irongolem/hit3 +mob/irongolem/hit4 +mob/irongolem/repair +mob/irongolem/throw +mob/irongolem/walk1 +mob/irongolem/walk2 +mob/irongolem/walk3 +mob/irongolem/walk4 +mob/llama/angry1 +mob/llama/death1 +mob/llama/death2 +mob/llama/eat1 +mob/llama/eat2 +mob/llama/eat3 +mob/llama/hurt1 +mob/llama/hurt2 +mob/llama/hurt3 +mob/llama/idle1 +mob/llama/idle2 +mob/llama/idle3 +mob/llama/idle4 +mob/llama/idle5 +mob/llama/spit1 +mob/llama/spit2 +mob/llama/step1 +mob/llama/step2 +mob/llama/step3 +mob/llama/step4 +mob/llama/step5 +mob/llama/swag +mob/llama/unequip +mob/magmacube/big1 +mob/magmacube/big2 +mob/magmacube/big3 +mob/magmacube/big4 +mob/magmacube/jump1 +mob/magmacube/jump2 +mob/magmacube/jump3 +mob/magmacube/jump4 +mob/magmacube/small1 +mob/magmacube/small2 +mob/magmacube/small3 +mob/magmacube/small4 +mob/magmacube/small5 +mob/mooshroom/convert1 +mob/mooshroom/convert2 +mob/mooshroom/eat1 +mob/mooshroom/eat2 +mob/mooshroom/eat3 +mob/mooshroom/eat4 +mob/mooshroom/milk1 +mob/mooshroom/milk2 +mob/mooshroom/milk3 +mob/nautilus/ambient1 +mob/nautilus/ambient2 +mob/nautilus/ambient3 +mob/nautilus/ambient4 +mob/nautilus/ambient5 +mob/nautilus/ambient6 +mob/nautilus/ambient7 +mob/nautilus/ambient8 +mob/nautilus/ambient_land1 +mob/nautilus/ambient_land2 +mob/nautilus/ambient_land3 +mob/nautilus/ambient_land4 +mob/nautilus/ambient_land5 +mob/nautilus/ambient_land6 +mob/nautilus/ambient_land7 +mob/nautilus/dash1 +mob/nautilus/dash2 +mob/nautilus/dash3 +mob/nautilus/dash4 +mob/nautilus/dash_land1 +mob/nautilus/dash_land2 +mob/nautilus/dash_land3 +mob/nautilus/dash_land4 +mob/nautilus/dash_ready1 +mob/nautilus/dash_ready2 +mob/nautilus/dash_ready3 +mob/nautilus/dash_ready_land1 +mob/nautilus/dash_ready_land2 +mob/nautilus/dash_ready_land3 +mob/nautilus/dash_ready_land4 +mob/nautilus/death_land +mob/nautilus/death +mob/nautilus/eat1 +mob/nautilus/eat2 +mob/nautilus/hurt1 +mob/nautilus/hurt2 +mob/nautilus/hurt3 +mob/nautilus/hurt4 +mob/nautilus/hurt_land1 +mob/nautilus/hurt_land2 +mob/nautilus/hurt_land3 +mob/nautilus/hurt_land4 +mob/nautilus/nautilus_saddle_equip +mob/nautilus/nautilus_saddle_underwater_equip +mob/nautilus/ride +mob/nautilus/swim1 +mob/nautilus/swim2 +mob/nautilus/swim3 +mob/nautilus/swim4 +mob/nautilus/swim5 +mob/nautilus/swim6 +mob/nautilus/swim7 +mob/nautilus/swim8 +mob/nautilus/swim9 +mob/panda/aggressive/aggressive1 +mob/panda/aggressive/aggressive2 +mob/panda/aggressive/aggressive3 +mob/panda/aggressive/aggressive4 +mob/panda/bite1 +mob/panda/bite2 +mob/panda/bite3 +mob/panda/cant_breed1 +mob/panda/cant_breed2 +mob/panda/cant_breed3 +mob/panda/cant_breed4 +mob/panda/cant_breed5 +mob/panda/death1 +mob/panda/death2 +mob/panda/death3 +mob/panda/death4 +mob/panda/eat10 +mob/panda/eat11 +mob/panda/eat12 +mob/panda/eat1 +mob/panda/eat2 +mob/panda/eat3 +mob/panda/eat4 +mob/panda/eat5 +mob/panda/eat6 +mob/panda/eat7 +mob/panda/eat8 +mob/panda/eat9 +mob/panda/hurt1 +mob/panda/hurt2 +mob/panda/hurt3 +mob/panda/hurt4 +mob/panda/hurt5 +mob/panda/hurt6 +mob/panda/idle1 +mob/panda/idle2 +mob/panda/idle3 +mob/panda/idle4 +mob/panda/nosebreath1 +mob/panda/nosebreath2 +mob/panda/nosebreath3 +mob/panda/pant1 +mob/panda/pant2 +mob/panda/pre_sneeze +mob/panda/sneeze1 +mob/panda/sneeze2 +mob/panda/sneeze3 +mob/panda/step1 +mob/panda/step2 +mob/panda/step3 +mob/panda/step4 +mob/panda/step5 +mob/panda/worried/worried1 +mob/panda/worried/worried2 +mob/panda/worried/worried3 +mob/panda/worried/worried4 +mob/panda/worried/worried5 +mob/panda/worried/worried6 +mob/parched/ambient1 +mob/parched/ambient2 +mob/parched/ambient3 +mob/parched/ambient4 +mob/parched/death +mob/parched/hurt1 +mob/parched/hurt2 +mob/parched/hurt3 +mob/parched/hurt4 +mob/parched/step1 +mob/parched/step2 +mob/parched/step3 +mob/parched/step4 +mob/parrot/death1 +mob/parrot/death2 +mob/parrot/death3 +mob/parrot/death4 +mob/parrot/eat1 +mob/parrot/eat2 +mob/parrot/eat3 +mob/parrot/fly1 +mob/parrot/fly2 +mob/parrot/fly3 +mob/parrot/fly4 +mob/parrot/fly5 +mob/parrot/fly6 +mob/parrot/fly7 +mob/parrot/fly8 +mob/parrot/hurt1 +mob/parrot/hurt2 +mob/parrot/idle1 +mob/parrot/idle2 +mob/parrot/idle3 +mob/parrot/idle4 +mob/parrot/idle5 +mob/parrot/idle6 +mob/parrot/step1 +mob/parrot/step2 +mob/parrot/step3 +mob/parrot/step4 +mob/parrot/step5 +mob/phantom/bite1 +mob/phantom/bite2 +mob/phantom/death1 +mob/phantom/death2 +mob/phantom/death3 +mob/phantom/flap1 +mob/phantom/flap2 +mob/phantom/flap3 +mob/phantom/flap4 +mob/phantom/flap5 +mob/phantom/flap6 +mob/phantom/hurt1 +mob/phantom/hurt2 +mob/phantom/hurt3 +mob/phantom/idle1 +mob/phantom/idle2 +mob/phantom/idle3 +mob/phantom/idle4 +mob/phantom/idle5 +mob/phantom/swoop1 +mob/phantom/swoop2 +mob/phantom/swoop3 +mob/phantom/swoop4 +mob/pig/baby_pig/ambient1 +mob/pig/baby_pig/ambient2 +mob/pig/baby_pig/ambient3 +mob/pig/baby_pig/ambient4 +mob/pig/baby_pig/ambient5 +mob/pig/baby_pig/ambient6 +mob/pig/baby_pig/death +mob/pig/baby_pig/eat1 +mob/pig/baby_pig/eat2 +mob/pig/baby_pig/hit1 +mob/pig/baby_pig/hit2 +mob/pig/baby_pig/hit3 +mob/pig/baby_pig/step1 +mob/pig/baby_pig/step2 +mob/pig/baby_pig/step3 +mob/pig/baby_pig/step4 +mob/pig/baby_pig/step5 +mob/pig/big/ambient1 +mob/pig/big/ambient2 +mob/pig/big/ambient3 +mob/pig/big/ambient4 +mob/pig/big/ambient5 +mob/pig/big/ambient6 +mob/pig/big/ambient7 +mob/pig/big/ambient8 +mob/pig/big/ambient9 +mob/pig/big/death +mob/pig/big/eat1 +mob/pig/big/eat2 +mob/pig/big/hit1 +mob/pig/big/hit2 +mob/pig/big/hit3 +mob/pig/death +mob/pig/eat1 +mob/pig/eat2 +mob/piglin/admire1 +mob/piglin/admire2 +mob/piglin/angry1 +mob/piglin/angry2 +mob/piglin/angry3 +mob/piglin/angry4 +mob/piglin_brute/angry1 +mob/piglin_brute/angry2 +mob/piglin_brute/angry3 +mob/piglin_brute/angry4 +mob/piglin_brute/angry5 +mob/piglin_brute/death1 +mob/piglin_brute/death2 +mob/piglin_brute/death3 +mob/piglin_brute/hurt1 +mob/piglin_brute/hurt2 +mob/piglin_brute/hurt3 +mob/piglin_brute/hurt4 +mob/piglin_brute/idle1 +mob/piglin_brute/idle2 +mob/piglin_brute/idle3 +mob/piglin_brute/idle4 +mob/piglin_brute/idle5 +mob/piglin_brute/idle6 +mob/piglin_brute/idle7 +mob/piglin_brute/idle8 +mob/piglin_brute/idle9 +mob/piglin_brute/step1 +mob/piglin_brute/step2 +mob/piglin_brute/step3 +mob/piglin_brute/step4 +mob/piglin_brute/step5 +mob/piglin/celebrate1 +mob/piglin/celebrate2 +mob/piglin/celebrate3 +mob/piglin/celebrate4 +mob/piglin/converted1 +mob/piglin/converted2 +mob/piglin/death1 +mob/piglin/death2 +mob/piglin/death3 +mob/piglin/death4 +mob/piglin/hurt1 +mob/piglin/hurt2 +mob/piglin/hurt3 +mob/piglin/idle1 +mob/piglin/idle2 +mob/piglin/idle3 +mob/piglin/idle4 +mob/piglin/idle5 +mob/piglin/jealous1 +mob/piglin/jealous2 +mob/piglin/jealous3 +mob/piglin/jealous4 +mob/piglin/jealous5 +mob/piglin/retreat1 +mob/piglin/retreat2 +mob/piglin/retreat3 +mob/piglin/retreat4 +mob/piglin/step1 +mob/piglin/step2 +mob/piglin/step3 +mob/piglin/step4 +mob/piglin/step5 +mob/pig/mini/ambient1 +mob/pig/mini/ambient2 +mob/pig/mini/ambient3 +mob/pig/mini/ambient4 +mob/pig/mini/ambient5 +mob/pig/mini/ambient6 +mob/pig/mini/death +mob/pig/mini/eat1 +mob/pig/mini/eat2 +mob/pig/mini/hurt1 +mob/pig/mini/hurt2 +mob/pig/mini/hurt3 +mob/pig/say1 +mob/pig/say2 +mob/pig/say3 +mob/pig/step1 +mob/pig/step2 +mob/pig/step3 +mob/pig/step4 +mob/pig/step5 +mob/pillager/celebrate1 +mob/pillager/celebrate2 +mob/pillager/celebrate3 +mob/pillager/celebrate4 +mob/pillager/death1 +mob/pillager/death2 +mob/pillager/horn_celebrate +mob/pillager/hurt1 +mob/pillager/hurt2 +mob/pillager/hurt3 +mob/pillager/idle1 +mob/pillager/idle2 +mob/pillager/idle3 +mob/pillager/idle4 +mob/polarbear_baby/idle1 +mob/polarbear_baby/idle2 +mob/polarbear_baby/idle3 +mob/polarbear_baby/idle4 +mob/polarbear/death1 +mob/polarbear/death2 +mob/polarbear/death3 +mob/polarbear/hurt1 +mob/polarbear/hurt2 +mob/polarbear/hurt3 +mob/polarbear/hurt4 +mob/polarbear/idle1 +mob/polarbear/idle2 +mob/polarbear/idle3 +mob/polarbear/idle4 +mob/polarbear/step1 +mob/polarbear/step2 +mob/polarbear/step3 +mob/polarbear/step4 +mob/polarbear/warning1 +mob/polarbear/warning2 +mob/polarbear/warning3 +mob/pufferfish/blow_out1 +mob/pufferfish/blow_out2 +mob/pufferfish/blow_up1 +mob/pufferfish/blow_up2 +mob/pufferfish/death1 +mob/pufferfish/death2 +mob/pufferfish/flop1 +mob/pufferfish/flop2 +mob/pufferfish/flop3 +mob/pufferfish/flop4 +mob/pufferfish/hurt1 +mob/pufferfish/hurt2 +mob/pufferfish/sting1 +mob/pufferfish/sting2 +mob/rabbit/attack1 +mob/rabbit/attack2 +mob/rabbit/attack3 +mob/rabbit/attack4 +mob/rabbit/bunnymurder +mob/rabbit/hop1 +mob/rabbit/hop2 +mob/rabbit/hop3 +mob/rabbit/hop4 +mob/rabbit/hurt1 +mob/rabbit/hurt2 +mob/rabbit/hurt3 +mob/rabbit/hurt4 +mob/rabbit/idle1 +mob/rabbit/idle2 +mob/rabbit/idle3 +mob/rabbit/idle4 +mob/ravager/bite1 +mob/ravager/bite2 +mob/ravager/bite3 +mob/ravager/celebrate1 +mob/ravager/celebrate2 +mob/ravager/death1 +mob/ravager/death2 +mob/ravager/death3 +mob/ravager/hurt1 +mob/ravager/hurt2 +mob/ravager/hurt3 +mob/ravager/hurt4 +mob/ravager/idle1 +mob/ravager/idle2 +mob/ravager/idle3 +mob/ravager/idle4 +mob/ravager/idle5 +mob/ravager/idle6 +mob/ravager/idle7 +mob/ravager/idle8 +mob/ravager/roar1 +mob/ravager/roar2 +mob/ravager/roar3 +mob/ravager/roar4 +mob/ravager/step1 +mob/ravager/step2 +mob/ravager/step3 +mob/ravager/step4 +mob/ravager/step5 +mob/ravager/stun1 +mob/ravager/stun2 +mob/ravager/stun3 +mob/sheep/say1 +mob/sheep/say2 +mob/sheep/say3 +mob/sheep/shear +mob/sheep/step1 +mob/sheep/step2 +mob/sheep/step3 +mob/sheep/step4 +mob/sheep/step5 +mob/silverfish/hit1 +mob/silverfish/hit2 +mob/silverfish/hit3 +mob/silverfish/kill +mob/silverfish/say1 +mob/silverfish/say2 +mob/silverfish/say3 +mob/silverfish/say4 +mob/silverfish/step1 +mob/silverfish/step2 +mob/silverfish/step3 +mob/silverfish/step4 +mob/skeleton/death +mob/skeleton/hurt1 +mob/skeleton/hurt2 +mob/skeleton/hurt3 +mob/skeleton/hurt4 +mob/skeleton/say1 +mob/skeleton/say2 +mob/skeleton/say3 +mob/skeleton/step1 +mob/skeleton/step2 +mob/skeleton/step3 +mob/skeleton/step4 +mob/slime/attack1 +mob/slime/attack2 +mob/slime/big1 +mob/slime/big2 +mob/slime/big3 +mob/slime/big4 +mob/slime/small1 +mob/slime/small2 +mob/slime/small3 +mob/slime/small4 +mob/slime/small5 +mob/sniffer/death1 +mob/sniffer/death2 +mob/sniffer/digging_stop1 +mob/sniffer/digging_stop2 +mob/sniffer/eat1 +mob/sniffer/eat2 +mob/sniffer/eat3 +mob/sniffer/happy1 +mob/sniffer/happy2 +mob/sniffer/happy3 +mob/sniffer/happy4 +mob/sniffer/happy5 +mob/sniffer/hurt1 +mob/sniffer/hurt2 +mob/sniffer/hurt3 +mob/sniffer/idle10 +mob/sniffer/idle11 +mob/sniffer/idle1 +mob/sniffer/idle2 +mob/sniffer/idle3 +mob/sniffer/idle4 +mob/sniffer/idle5 +mob/sniffer/idle6 +mob/sniffer/idle7 +mob/sniffer/idle8 +mob/sniffer/idle9 +mob/sniffer/longdig1 +mob/sniffer/longdig2 +mob/sniffer/scenting1 +mob/sniffer/scenting2 +mob/sniffer/scenting3 +mob/sniffer/searching1 +mob/sniffer/searching2 +mob/sniffer/searching3 +mob/sniffer/searching4 +mob/sniffer/searching5 +mob/sniffer/searching6 +mob/sniffer/sniffing1 +mob/sniffer/sniffing2 +mob/sniffer/sniffing3 +mob/sniffer/step1 +mob/sniffer/step2 +mob/sniffer/step3 +mob/sniffer/step4 +mob/sniffer/step5 +mob/sniffer/step6 +mob/spider/death +mob/spider/say1 +mob/spider/say2 +mob/spider/say3 +mob/spider/say4 +mob/spider/step1 +mob/spider/step2 +mob/spider/step3 +mob/spider/step4 +mob/squid/ambient1 +mob/squid/ambient2 +mob/squid/ambient3 +mob/squid/ambient4 +mob/squid/ambient5 +mob/squid/death1 +mob/squid/death2 +mob/squid/death3 +mob/squid/hurt1 +mob/squid/hurt2 +mob/squid/hurt3 +mob/squid/hurt4 +mob/squid/squirt1 +mob/squid/squirt2 +mob/squid/squirt3 +mob/stray/convert1 +mob/stray/convert2 +mob/stray/convert3 +mob/stray/death1 +mob/stray/death2 +mob/stray/hurt1 +mob/stray/hurt2 +mob/stray/hurt3 +mob/stray/hurt4 +mob/stray/idle1 +mob/stray/idle2 +mob/stray/idle3 +mob/stray/idle4 +mob/stray/step1 +mob/stray/step2 +mob/stray/step3 +mob/stray/step4 +mob/strider/death1 +mob/strider/death2 +mob/strider/death3 +mob/strider/death4 +mob/strider/eat1 +mob/strider/eat2 +mob/strider/eat3 +mob/strider/happy1 +mob/strider/happy2 +mob/strider/happy3 +mob/strider/happy4 +mob/strider/happy5 +mob/strider/hurt1 +mob/strider/hurt2 +mob/strider/hurt3 +mob/strider/hurt4 +mob/strider/idle1 +mob/strider/idle2 +mob/strider/idle3 +mob/strider/idle4 +mob/strider/idle5 +mob/strider/idle6 +mob/strider/retreat1 +mob/strider/retreat2 +mob/strider/retreat3 +mob/strider/retreat4 +mob/strider/retreat5 +mob/strider/step1 +mob/strider/step2 +mob/strider/step3 +mob/strider/step4 +mob/strider/step5 +mob/strider/step_lava1 +mob/strider/step_lava2 +mob/strider/step_lava3 +mob/strider/step_lava4 +mob/strider/step_lava5 +mob/strider/step_lava6 +mob/sulfur_cube/absorb1 +mob/sulfur_cube/absorb2 +mob/sulfur_cube/ball/bounce1 +mob/sulfur_cube/ball/bounce2 +mob/sulfur_cube/ball/bounce3 +mob/sulfur_cube/ball/bounce4 +mob/sulfur_cube/ball/bounce5 +mob/sulfur_cube/ball/bounce6 +mob/sulfur_cube/ball/bounce7 +mob/sulfur_cube/ball/bounce8 +mob/sulfur_cube/ball/bouncy_hit1 +mob/sulfur_cube/ball/bouncy_hit2 +mob/sulfur_cube/ball/bouncy_hit3 +mob/sulfur_cube/ball/bouncy_hit4 +mob/sulfur_cube/ball/bouncy_push1 +mob/sulfur_cube/ball/bouncy_push2 +mob/sulfur_cube/ball/bouncy_push3 +mob/sulfur_cube/ball/bouncy_push4 +mob/sulfur_cube/ball/explosive_hit1 +mob/sulfur_cube/ball/explosive_hit2 +mob/sulfur_cube/ball/explosive_hit3 +mob/sulfur_cube/ball/explosive_hit4 +mob/sulfur_cube/ball/explosive_push1 +mob/sulfur_cube/ball/explosive_push2 +mob/sulfur_cube/ball/explosive_push3 +mob/sulfur_cube/ball/explosive_push4 +mob/sulfur_cube/ball/fastflat_hit1 +mob/sulfur_cube/ball/fastflat_hit2 +mob/sulfur_cube/ball/fastflat_hit3 +mob/sulfur_cube/ball/fastflat_hit4 +mob/sulfur_cube/ball/fastflat_push1 +mob/sulfur_cube/ball/fastflat_push2 +mob/sulfur_cube/ball/fastflat_push3 +mob/sulfur_cube/ball/fastflat_push4 +mob/sulfur_cube/ball/fastsliding_hit1 +mob/sulfur_cube/ball/fastsliding_hit2 +mob/sulfur_cube/ball/fastsliding_hit3 +mob/sulfur_cube/ball/fastsliding_hit4 +mob/sulfur_cube/ball/fastsliding_push1 +mob/sulfur_cube/ball/fastsliding_push2 +mob/sulfur_cube/ball/fastsliding_push3 +mob/sulfur_cube/ball/fastsliding_push4 +mob/sulfur_cube/ball/highresistance_hit1 +mob/sulfur_cube/ball/highresistance_hit2 +mob/sulfur_cube/ball/highresistance_hit3 +mob/sulfur_cube/ball/highresistance_hit4 +mob/sulfur_cube/ball/highresistance_push1 +mob/sulfur_cube/ball/highresistance_push2 +mob/sulfur_cube/ball/highresistance_push3 +mob/sulfur_cube/ball/highresistance_push4 +mob/sulfur_cube/ball/hit1 +mob/sulfur_cube/ball/hit2 +mob/sulfur_cube/ball/hit3 +mob/sulfur_cube/ball/hit4 +mob/sulfur_cube/ball/hot_hit1 +mob/sulfur_cube/ball/hot_hit2 +mob/sulfur_cube/ball/hot_hit3 +mob/sulfur_cube/ball/hot_hit4 +mob/sulfur_cube/ball/hot_push1 +mob/sulfur_cube/ball/hot_push2 +mob/sulfur_cube/ball/hot_push3 +mob/sulfur_cube/ball/hot_push4 +mob/sulfur_cube/ball/light_hit1 +mob/sulfur_cube/ball/light_hit2 +mob/sulfur_cube/ball/light_hit3 +mob/sulfur_cube/ball/light_hit4 +mob/sulfur_cube/ball/light_push1 +mob/sulfur_cube/ball/light_push2 +mob/sulfur_cube/ball/light_push3 +mob/sulfur_cube/ball/light_push4 +mob/sulfur_cube/ball/push1 +mob/sulfur_cube/ball/push2 +mob/sulfur_cube/ball/push3 +mob/sulfur_cube/ball/push4 +mob/sulfur_cube/ball/regular_hit1 +mob/sulfur_cube/ball/regular_hit2 +mob/sulfur_cube/ball/regular_hit3 +mob/sulfur_cube/ball/regular_hit4 +mob/sulfur_cube/ball/regular_push1 +mob/sulfur_cube/ball/regular_push2 +mob/sulfur_cube/ball/regular_push3 +mob/sulfur_cube/ball/regular_push4 +mob/sulfur_cube/ball/slowflat_hit1 +mob/sulfur_cube/ball/slowflat_hit2 +mob/sulfur_cube/ball/slowflat_hit3 +mob/sulfur_cube/ball/slowflat_hit4 +mob/sulfur_cube/ball/slowflat_push1 +mob/sulfur_cube/ball/slowflat_push2 +mob/sulfur_cube/ball/slowflat_push3 +mob/sulfur_cube/ball/slowflat_push4 +mob/sulfur_cube/ball/slowsliding_push1 +mob/sulfur_cube/ball/slowsliding_push2 +mob/sulfur_cube/ball/slowsliding_push3 +mob/sulfur_cube/ball/slowsliding_push4 +mob/sulfur_cube/ball/sticky_hit1 +mob/sulfur_cube/ball/sticky_hit2 +mob/sulfur_cube/ball/sticky_hit3 +mob/sulfur_cube/ball/sticky_hit4 +mob/sulfur_cube/ball/sticky_push1 +mob/sulfur_cube/ball/sticky_push2 +mob/sulfur_cube/ball/sticky_push3 +mob/sulfur_cube/ball/sticky_push4 +mob/sulfur_cube/death +mob/sulfur_cube/eject1 +mob/sulfur_cube/eject2 +mob/sulfur_cube/hit1 +mob/sulfur_cube/hit2 +mob/sulfur_cube/hit3 +mob/sulfur_cube/hit4 +mob/sulfur_cube/jump10 +mob/sulfur_cube/jump11 +mob/sulfur_cube/jump1 +mob/sulfur_cube/jump2 +mob/sulfur_cube/jump3 +mob/sulfur_cube/jump4 +mob/sulfur_cube/jump5 +mob/sulfur_cube/jump6 +mob/sulfur_cube/jump7 +mob/sulfur_cube/jump8 +mob/sulfur_cube/jump9 +mob/sulfur_cube/small_sulfur_cube/death +mob/sulfur_cube/small_sulfur_cube/eat1 +mob/sulfur_cube/small_sulfur_cube/eat2 +mob/sulfur_cube/small_sulfur_cube/hit1 +mob/sulfur_cube/small_sulfur_cube/hit2 +mob/sulfur_cube/small_sulfur_cube/hit3 +mob/sulfur_cube/small_sulfur_cube/hit4 +mob/sulfur_cube/small_sulfur_cube/jump10 +mob/sulfur_cube/small_sulfur_cube/jump11 +mob/sulfur_cube/small_sulfur_cube/jump1 +mob/sulfur_cube/small_sulfur_cube/jump2 +mob/sulfur_cube/small_sulfur_cube/jump3 +mob/sulfur_cube/small_sulfur_cube/jump4 +mob/sulfur_cube/small_sulfur_cube/jump5 +mob/sulfur_cube/small_sulfur_cube/jump6 +mob/sulfur_cube/small_sulfur_cube/jump7 +mob/sulfur_cube/small_sulfur_cube/jump8 +mob/sulfur_cube/small_sulfur_cube/jump9 +mob/sulfur_cube/small_sulfur_cube/squish10 +mob/sulfur_cube/small_sulfur_cube/squish1 +mob/sulfur_cube/small_sulfur_cube/squish2 +mob/sulfur_cube/small_sulfur_cube/squish3 +mob/sulfur_cube/small_sulfur_cube/squish4 +mob/sulfur_cube/small_sulfur_cube/squish5 +mob/sulfur_cube/small_sulfur_cube/squish6 +mob/sulfur_cube/small_sulfur_cube/squish7 +mob/sulfur_cube/small_sulfur_cube/squish8 +mob/sulfur_cube/small_sulfur_cube/squish9 +mob/sulfur_cube/squish10 +mob/sulfur_cube/squish11 +mob/sulfur_cube/squish1 +mob/sulfur_cube/squish2 +mob/sulfur_cube/squish3 +mob/sulfur_cube/squish4 +mob/sulfur_cube/squish5 +mob/sulfur_cube/squish6 +mob/sulfur_cube/squish7 +mob/sulfur_cube/squish8 +mob/sulfur_cube/squish9 +mob/tadpole/death1 +mob/tadpole/death2 +mob/tadpole/hurt1 +mob/tadpole/hurt2 +mob/tadpole/hurt3 +mob/tadpole/hurt4 +mob/turtle/armor +mob/turtle/baby/death1 +mob/turtle/baby/death2 +mob/turtle/baby/egg_hatched1 +mob/turtle/baby/egg_hatched2 +mob/turtle/baby/egg_hatched3 +mob/turtle/baby/hurt1 +mob/turtle/baby/hurt2 +mob/turtle/baby/shamble1 +mob/turtle/baby/shamble2 +mob/turtle/baby/shamble3 +mob/turtle/baby/shamble4 +mob/turtle/death1 +mob/turtle/death2 +mob/turtle/death3 +mob/turtle/egg/drop_egg1 +mob/turtle/egg/drop_egg2 +mob/turtle/egg/egg_break1 +mob/turtle/egg/egg_break2 +mob/turtle/egg/egg_crack1 +mob/turtle/egg/egg_crack2 +mob/turtle/egg/egg_crack3 +mob/turtle/egg/egg_crack4 +mob/turtle/egg/egg_crack5 +mob/turtle/egg/jump_egg1 +mob/turtle/egg/jump_egg2 +mob/turtle/egg/jump_egg3 +mob/turtle/egg/jump_egg4 +mob/turtle/hurt1 +mob/turtle/hurt2 +mob/turtle/hurt3 +mob/turtle/hurt4 +mob/turtle/hurt5 +mob/turtle/idle1 +mob/turtle/idle2 +mob/turtle/idle3 +mob/turtle/swim/swim1 +mob/turtle/swim/swim2 +mob/turtle/swim/swim3 +mob/turtle/swim/swim4 +mob/turtle/swim/swim5 +mob/turtle/walk1 +mob/turtle/walk2 +mob/turtle/walk3 +mob/turtle/walk4 +mob/turtle/walk5 +mob/vex/charge1 +mob/vex/charge2 +mob/vex/charge3 +mob/vex/death1 +mob/vex/death2 +mob/vex/hurt1 +mob/vex/hurt2 +mob/vex/idle1 +mob/vex/idle2 +mob/vex/idle3 +mob/vex/idle4 +mob/villager/death +mob/villager/haggle1 +mob/villager/haggle2 +mob/villager/haggle3 +mob/villager/hit1 +mob/villager/hit2 +mob/villager/hit3 +mob/villager/hit4 +mob/villager/idle1 +mob/villager/idle2 +mob/villager/idle3 +mob/villager/no1 +mob/villager/no2 +mob/villager/no3 +mob/villager/yes1 +mob/villager/yes2 +mob/villager/yes3 +mob/vindication_illager/celebrate1 +mob/vindication_illager/celebrate2 +mob/vindication_illager/death1 +mob/vindication_illager/death2 +mob/vindication_illager/hurt1 +mob/vindication_illager/hurt2 +mob/vindication_illager/hurt3 +mob/vindication_illager/idle1 +mob/vindication_illager/idle2 +mob/vindication_illager/idle3 +mob/vindication_illager/idle4 +mob/vindication_illager/idle5 +mob/wandering_trader/appeared1 +mob/wandering_trader/appeared2 +mob/wandering_trader/death +mob/wandering_trader/disappeared1 +mob/wandering_trader/disappeared2 +mob/wandering_trader/drink_milk1 +mob/wandering_trader/drink_milk2 +mob/wandering_trader/drink_milk3 +mob/wandering_trader/drink_milk4 +mob/wandering_trader/drink_milk5 +mob/wandering_trader/drink_potion +mob/wandering_trader/haggle1 +mob/wandering_trader/haggle2 +mob/wandering_trader/haggle3 +mob/wandering_trader/hurt1 +mob/wandering_trader/hurt2 +mob/wandering_trader/hurt3 +mob/wandering_trader/hurt4 +mob/wandering_trader/idle1 +mob/wandering_trader/idle2 +mob/wandering_trader/idle3 +mob/wandering_trader/idle4 +mob/wandering_trader/idle5 +mob/wandering_trader/no1 +mob/wandering_trader/no2 +mob/wandering_trader/no3 +mob/wandering_trader/no4 +mob/wandering_trader/no5 +mob/wandering_trader/reappeared1 +mob/wandering_trader/reappeared2 +mob/wandering_trader/yes1 +mob/wandering_trader/yes2 +mob/wandering_trader/yes3 +mob/wandering_trader/yes4 +mob/warden/agitated_1 +mob/warden/agitated_2 +mob/warden/agitated_3 +mob/warden/agitated_4 +mob/warden/agitated_5 +mob/warden/agitated_6 +mob/warden/ambient_10 +mob/warden/ambient_11 +mob/warden/ambient_12 +mob/warden/ambient_1 +mob/warden/ambient_2 +mob/warden/ambient_3 +mob/warden/ambient_4 +mob/warden/ambient_5 +mob/warden/ambient_6 +mob/warden/ambient_7 +mob/warden/ambient_8 +mob/warden/ambient_9 +mob/warden/angry_1 +mob/warden/angry_2 +mob/warden/angry_3 +mob/warden/angry_4 +mob/warden/angry_5 +mob/warden/angry_6 +mob/warden/attack_impact_1 +mob/warden/attack_impact_2 +mob/warden/death_1 +mob/warden/death_2 +mob/warden/dig +mob/warden/emerge +mob/warden/heartbeat_1 +mob/warden/heartbeat_2 +mob/warden/heartbeat_3 +mob/warden/heartbeat_4 +mob/warden/hurt_1 +mob/warden/hurt_2 +mob/warden/hurt_3 +mob/warden/hurt_4 +mob/warden/listening_1 +mob/warden/listening_2 +mob/warden/listening_3 +mob/warden/listening_4 +mob/warden/listening_5 +mob/warden/listening_angry_1 +mob/warden/listening_angry_2 +mob/warden/listening_angry_3 +mob/warden/listening_angry_4 +mob/warden/listening_angry_5 +mob/warden/nearby_close_1 +mob/warden/nearby_close_2 +mob/warden/nearby_close_3 +mob/warden/nearby_close_4 +mob/warden/nearby_closer_1 +mob/warden/nearby_closer_2 +mob/warden/nearby_closer_3 +mob/warden/nearby_closest_1 +mob/warden/nearby_closest_2 +mob/warden/nearby_closest_3 +mob/warden/roar_1 +mob/warden/roar_2 +mob/warden/roar_3 +mob/warden/roar_4 +mob/warden/roar_5 +mob/warden/sniff_1 +mob/warden/sniff_2 +mob/warden/sniff_3 +mob/warden/sniff_4 +mob/warden/sonic_boom1 +mob/warden/sonic_boom2 +mob/warden/sonic_boom3 +mob/warden/sonic_boom4 +mob/warden/sonic_charge1 +mob/warden/sonic_charge2 +mob/warden/sonic_charge3 +mob/warden/sonic_charge4 +mob/warden/step_1 +mob/warden/step_2 +mob/warden/step_3 +mob/warden/step_4 +mob/warden/tendril_clicks_1 +mob/warden/tendril_clicks_2 +mob/warden/tendril_clicks_3 +mob/warden/tendril_clicks_4 +mob/warden/tendril_clicks_5 +mob/warden/tendril_clicks_6 +mob/wither/death +mob/wither/hurt1 +mob/wither/hurt2 +mob/wither/hurt3 +mob/wither/hurt4 +mob/wither/idle1 +mob/wither/idle2 +mob/wither/idle3 +mob/wither/idle4 +mob/wither/shoot +mob/wither_skeleton/death1 +mob/wither_skeleton/death2 +mob/wither_skeleton/hurt1 +mob/wither_skeleton/hurt2 +mob/wither_skeleton/hurt3 +mob/wither_skeleton/hurt4 +mob/wither_skeleton/idle1 +mob/wither_skeleton/idle2 +mob/wither_skeleton/idle3 +mob/wither_skeleton/step1 +mob/wither_skeleton/step2 +mob/wither_skeleton/step3 +mob/wither_skeleton/step4 +mob/wither/spawn +mob/wolf/angry/bark1 +mob/wolf/angry/bark2 +mob/wolf/angry/bark3 +mob/wolf/angry/death +mob/wolf/angry/growl1 +mob/wolf/angry/growl2 +mob/wolf/angry/growl3 +mob/wolf/angry/hurt1 +mob/wolf/angry/hurt2 +mob/wolf/angry/hurt3 +mob/wolf/angry/panting +mob/wolf/angry/whine +mob/wolf/baby/ambient1 +mob/wolf/baby/ambient2 +mob/wolf/baby/ambient3 +mob/wolf/baby/ambient4 +mob/wolf/baby/ambient5 +mob/wolf/baby/ambient6 +mob/wolf/baby/ambient7 +mob/wolf/baby/ambient8 +mob/wolf/baby/angry1 +mob/wolf/baby/angry2 +mob/wolf/baby/angry3 +mob/wolf/baby/angry4 +mob/wolf/baby/death +mob/wolf/baby/hurt1 +mob/wolf/baby/hurt2 +mob/wolf/baby/hurt3 +mob/wolf/baby/pant1 +mob/wolf/baby/pant2 +mob/wolf/baby/pant3 +mob/wolf/baby/step1 +mob/wolf/baby/step2 +mob/wolf/baby/step3 +mob/wolf/baby/step4 +mob/wolf/baby/step5 +mob/wolf/baby/whine1 +mob/wolf/baby/whine2 +mob/wolf/bark1 +mob/wolf/bark2 +mob/wolf/bark3 +mob/wolf/big/bark1 +mob/wolf/big/bark2 +mob/wolf/big/bark3 +mob/wolf/big/death +mob/wolf/big/growl1 +mob/wolf/big/growl2 +mob/wolf/big/growl3 +mob/wolf/big/hurt1 +mob/wolf/big/hurt2 +mob/wolf/big/hurt3 +mob/wolf/big/panting +mob/wolf/big/whine +mob/wolf/classic/bark1 +mob/wolf/classic/bark2 +mob/wolf/classic/bark3 +mob/wolf/classic/death +mob/wolf/classic/growl1 +mob/wolf/classic/growl2 +mob/wolf/classic/growl3 +mob/wolf/classic/hurt1 +mob/wolf/classic/hurt2 +mob/wolf/classic/hurt3 +mob/wolf/classic/panting +mob/wolf/classic/whine +mob/wolf/cute/bark1 +mob/wolf/cute/bark2 +mob/wolf/cute/bark3 +mob/wolf/cute/death +mob/wolf/cute/growl1 +mob/wolf/cute/growl2 +mob/wolf/cute/growl3 +mob/wolf/cute/hurt1 +mob/wolf/cute/hurt2 +mob/wolf/cute/hurt3 +mob/wolf/cute/panting +mob/wolf/cute/whine +mob/wolf/death +mob/wolf/growl1 +mob/wolf/growl2 +mob/wolf/growl3 +mob/wolf/grumpy/bark1 +mob/wolf/grumpy/bark2 +mob/wolf/grumpy/bark3 +mob/wolf/grumpy/death +mob/wolf/grumpy/growl1 +mob/wolf/grumpy/growl2 +mob/wolf/grumpy/growl3 +mob/wolf/grumpy/hurt1 +mob/wolf/grumpy/hurt2 +mob/wolf/grumpy/hurt3 +mob/wolf/grumpy/panting +mob/wolf/grumpy/whine +mob/wolf/howl1 +mob/wolf/howl2 +mob/wolf/hurt1 +mob/wolf/hurt2 +mob/wolf/hurt3 +mob/wolf/panting +mob/wolf/puglin/bark1 +mob/wolf/puglin/bark2 +mob/wolf/puglin/bark3 +mob/wolf/puglin/death +mob/wolf/puglin/growl1 +mob/wolf/puglin/growl2 +mob/wolf/puglin/growl3 +mob/wolf/puglin/hurt1 +mob/wolf/puglin/hurt2 +mob/wolf/puglin/hurt3 +mob/wolf/puglin/panting +mob/wolf/puglin/whine +mob/wolf/sad/bark1 +mob/wolf/sad/bark2 +mob/wolf/sad/bark3 +mob/wolf/sad/death +mob/wolf/sad/growl1 +mob/wolf/sad/growl2 +mob/wolf/sad/growl3 +mob/wolf/sad/hurt1 +mob/wolf/sad/hurt2 +mob/wolf/sad/hurt3 +mob/wolf/sad/panting +mob/wolf/sad/whine +mob/wolf/shake +mob/wolf/step1 +mob/wolf/step2 +mob/wolf/step3 +mob/wolf/step4 +mob/wolf/step5 +mob/wolf/whine +mob/zoglin/angry1 +mob/zoglin/angry2 +mob/zoglin/angry3 +mob/zoglin/attack1 +mob/zoglin/attack2 +mob/zoglin/death1 +mob/zoglin/death2 +mob/zoglin/death3 +mob/zoglin/hurt1 +mob/zoglin/hurt2 +mob/zoglin/hurt3 +mob/zoglin/idle1 +mob/zoglin/idle2 +mob/zoglin/idle3 +mob/zoglin/idle4 +mob/zoglin/idle5 +mob/zoglin/idle6 +mob/zoglin/step1 +mob/zoglin/step2 +mob/zoglin/step3 +mob/zoglin/step4 +mob/zoglin/step5 +mob/zombie/death +mob/zombie/hurt1 +mob/zombie/hurt2 +mob/zombie/infect +mob/zombie/metal1 +mob/zombie/metal2 +mob/zombie/metal3 +mob/zombie_nautilus/ambient1 +mob/zombie_nautilus/ambient2 +mob/zombie_nautilus/ambient3 +mob/zombie_nautilus/ambient4 +mob/zombie_nautilus/ambient5 +mob/zombie_nautilus/ambient_land1 +mob/zombie_nautilus/ambient_land2 +mob/zombie_nautilus/ambient_land3 +mob/zombie_nautilus/ambient_land4 +mob/zombie_nautilus/ambient_land5 +mob/zombie_nautilus/ambient_land6 +mob/zombie_nautilus/dash_land1 +mob/zombie_nautilus/dash_land2 +mob/zombie_nautilus/dash_land3 +mob/zombie_nautilus/dash_land4 +mob/zombie_nautilus/dash_ready1 +mob/zombie_nautilus/dash_ready2 +mob/zombie_nautilus/dash_ready3 +mob/zombie_nautilus/dash_ready_land1 +mob/zombie_nautilus/dash_ready_land2 +mob/zombie_nautilus/dash_ready_land3 +mob/zombie_nautilus/dash_ready_land4 +mob/zombie_nautilus/death_land +mob/zombie_nautilus/death +mob/zombie_nautilus/eat1 +mob/zombie_nautilus/eat2 +mob/zombie_nautilus/hurt1 +mob/zombie_nautilus/hurt2 +mob/zombie_nautilus/hurt3 +mob/zombie_nautilus/hurt4 +mob/zombie_nautilus/hurt_land1 +mob/zombie_nautilus/hurt_land2 +mob/zombie_nautilus/hurt_land3 +mob/zombie_nautilus/hurt_land4 +mob/zombie/remedy +mob/zombie/say1 +mob/zombie/say2 +mob/zombie/say3 +mob/zombie/step1 +mob/zombie/step2 +mob/zombie/step3 +mob/zombie/step4 +mob/zombie/step5 +mob/zombie/unfect +mob/zombie_villager/death +mob/zombie_villager/hurt1 +mob/zombie_villager/hurt2 +mob/zombie_villager/say1 +mob/zombie_villager/say2 +mob/zombie_villager/say3 +mob/zombie/wood1 +mob/zombie/wood2 +mob/zombie/wood3 +mob/zombie/wood4 +mob/zombie/woodbreak +mob/zombified_piglin/zpig1 +mob/zombified_piglin/zpig2 +mob/zombified_piglin/zpig3 +mob/zombified_piglin/zpig4 +mob/zombified_piglin/zpigangry1 +mob/zombified_piglin/zpigangry2 +mob/zombified_piglin/zpigangry3 +mob/zombified_piglin/zpigangry4 +mob/zombified_piglin/zpigdeath +mob/zombified_piglin/zpighurt1 +mob/zombified_piglin/zpighurt2 +music/game/a_familiar_room +music/game/ancestry +music/game/an_ordinary_day +music/game/below_and_above +music/game/broken_clocks +music/game/bromeliad +music/game/clark +music/game/comforting_memories +music/game/creative/aria_math +music/game/creative/biome_fest +music/game/creative/blind_spots +music/game/creative/dreiton +music/game/creative/haunt_muskie +music/game/creative/taswell +music/game/crescent_dunes +music/game/danny +music/game/deeper +music/game/dry_hands +music/game/ebb +music/game/echo_in_the_wind +music/game/eld_unknown +music/game/end/alpha +music/game/end/boss +music/game/endless +music/game/end/the_end +music/game/featherfall +music/game/fireflies +music/game/floating_dream +music/game/haggstrom +music/game/home +music/game/infinite_amethyst +music/game/key +music/game/komorebi +music/game/left_to_bloom +music/game/lilypad +music/game/living_mice +music/game/memories +music/game/mice_on_venus +music/game/minecraft +music/game/nether/ballad_of_the_cats +music/game/nether/concrete_halls +music/game/nether/crimson_forest/chrysopoeia +music/game/nether/dead_voxel +music/game/nether/nether_wastes/rubedo +music/game/nether/soulsand_valley/so_below +music/game/nether/warmth +music/game/nightly +music/game/one_more_day +music/game/os_piano +music/game/oxygene +music/game/pokopoko +music/game/puzzlebox +music/game/shores +music/game/stand_tall +music/game/subwoofer_lullaby +music/game/swamp/aerie +music/game/swamp/firebugs +music/game/swamp/labyrinthine +music/game/sweden +music/game/watcher +music/game/water/axolotl +music/game/water/dragon_fish +music/game/water/shuniji +music/game/wending +music/game/wet_hands +music/game/yakusoku +music/menu/beginning_2 +music/menu/floating_trees +music/menu/moog_city_2 +music/menu/mutation +note/banjo +note/bassattack +note/bass +note/bd +note/bell +note/bit +note/cow_bell +note/didgeridoo +note/flute +note/guitar +note/harp2 +note/harp +note/hat +note/icechime +note/iron_xylophone +note/pling +note/snare +note/trumpet_exposed +note/trumpet +note/trumpet_oxidized +note/trumpet_weathered +note/xylobone +portal/portal +portal/travel +portal/trigger +random/anvil_break +random/anvil_land +random/anvil_use +random/bowhit1 +random/bowhit2 +random/bowhit3 +random/bowhit4 +random/bow +random/break +random/breath +random/burp +random/chestclosed +random/chestopen +random/classic_hurt +random/click +random/click_stereo +random/door_close +random/door_open +random/drink +random/eat1 +random/eat2 +random/eat3 +random/explode1 +random/explode2 +random/explode3 +random/explode4 +random/fizz +random/fuse +random/glass1 +random/glass2 +random/glass3 +random/levelup +random/orb +random/pop +random/splash +random/successful_hit +random/wood_click +records/11 +records/13 +records/5 +records/blocks +records/bounce +records/cat +records/chirp +records/creator_music_box +records/creator +records/far +records/lava_chicken +records/mall +records/mellohi +records/otherside +records/pigstep +records/precipice +records/relic +records/stal +records/strad +records/tears +records/wait +records/ward +step/cloth1 +step/cloth2 +step/cloth3 +step/cloth4 +step/coral1 +step/coral2 +step/coral3 +step/coral4 +step/coral5 +step/coral6 +step/grass1 +step/grass2 +step/grass3 +step/grass4 +step/grass5 +step/grass6 +step/gravel1 +step/gravel2 +step/gravel3 +step/gravel4 +step/ladder1 +step/ladder2 +step/ladder3 +step/ladder4 +step/ladder5 +step/sand1 +step/sand2 +step/sand3 +step/sand4 +step/sand5 +step/scaffold1 +step/scaffold2 +step/scaffold3 +step/scaffold4 +step/scaffold5 +step/scaffold6 +step/scaffold7 +step/snow1 +step/snow2 +step/snow3 +step/snow4 +step/stone1 +step/stone2 +step/stone3 +step/stone4 +step/stone5 +step/stone6 +step/wet_grass1 +step/wet_grass2 +step/wet_grass3 +step/wet_grass4 +step/wet_grass5 +step/wet_grass6 +step/wood1 +step/wood2 +step/wood3 +step/wood4 +step/wood5 +step/wood6 +tile/piston/in +tile/piston/out +ui/cartography_table/drawmap1 +ui/cartography_table/drawmap2 +ui/cartography_table/drawmap3 +ui/hud/hud_bubble +ui/loom/select_pattern1 +ui/loom/select_pattern2 +ui/loom/select_pattern3 +ui/loom/select_pattern4 +ui/loom/select_pattern5 +ui/loom/take_result1 +ui/loom/take_result2 +ui/stonecutter/cut1 +ui/stonecutter/cut2 +ui/toast/challenge_complete +ui/toast/in +ui/toast/out diff --git a/packobf/src/minecraft/textures.txt b/packobf/src/minecraft/textures.txt index 46cc672..c8d301c 100644 --- a/packobf/src/minecraft/textures.txt +++ b/packobf/src/minecraft/textures.txt @@ -1,17 +1,22 @@ block/acacia_door_bottom block/acacia_door_top +block/acacia_hanging_sign block/acacia_leaves +block/acacia_leaves.mcmeta block/acacia_log block/acacia_log_top block/acacia_planks block/acacia_sapling block/acacia_shelf +block/acacia_sign block/acacia_trapdoor -block/activator_rail block/activator_rail_on +block/activator_rail block/allium +block/allium.mcmeta block/amethyst_block block/amethyst_cluster +block/amethyst_cluster.mcmeta block/ancient_debris_side block/ancient_debris_top block/andesite @@ -20,22 +25,26 @@ block/anvil_top block/attached_melon_stem block/attached_pumpkin_stem block/azalea_leaves +block/azalea_leaves.mcmeta block/azalea_plant block/azalea_side block/azalea_top block/azure_bluet +block/azure_bluet.mcmeta block/bamboo_block block/bamboo_block_top block/bamboo_door_bottom block/bamboo_door_top -block/bamboo_fence -block/bamboo_fence_gate block/bamboo_fence_gate_particle +block/bamboo_fence_gate block/bamboo_fence_particle +block/bamboo_fence +block/bamboo_hanging_sign block/bamboo_large_leaves block/bamboo_mosaic block/bamboo_planks block/bamboo_shelf +block/bamboo_sign block/bamboo_singleleaf block/bamboo_small_leaves block/bamboo_stage0 @@ -43,21 +52,23 @@ block/bamboo_stalk block/bamboo_trapdoor block/barrel_bottom block/barrel_side -block/barrel_top block/barrel_top_open +block/barrel_top block/basalt_side block/basalt_top block/beacon +block/bed_down +block/bed_head_north block/bedrock +block/beehive_end +block/beehive_front_honey +block/beehive_front +block/beehive_side block/bee_nest_bottom -block/bee_nest_front block/bee_nest_front_honey +block/bee_nest_front block/bee_nest_side block/bee_nest_top -block/beehive_end -block/beehive_front -block/beehive_front_honey -block/beehive_side block/beetroots_stage0 block/beetroots_stage1 block/beetroots_stage2 @@ -71,71 +82,101 @@ block/big_dripleaf_tip block/big_dripleaf_top block/birch_door_bottom block/birch_door_top +block/birch_hanging_sign block/birch_leaves +block/birch_leaves.mcmeta block/birch_log block/birch_log_top block/birch_planks block/birch_sapling block/birch_shelf +block/birch_sign block/birch_trapdoor -block/black_candle +block/black_bed_foot_east +block/black_bed_foot_south +block/black_bed_foot_up +block/black_bed_foot_west +block/black_bed_head_east +block/black_bed_head_up +block/black_bed_head_west block/black_candle_lit +block/black_candle block/black_concrete block/black_concrete_powder block/black_glazed_terracotta block/black_shulker_box -block/black_stained_glass block/black_stained_glass_pane_top -block/black_terracotta -block/black_wool +block/black_stained_glass block/blackstone block/blackstone_top -block/blast_furnace_front +block/black_terracotta +block/black_wool block/blast_furnace_front_on +block/blast_furnace_front_on.mcmeta +block/blast_furnace_front block/blast_furnace_side block/blast_furnace_top -block/blue_candle +block/blue_bed_foot_east +block/blue_bed_foot_south +block/blue_bed_foot_up +block/blue_bed_foot_west +block/blue_bed_head_east +block/blue_bed_head_up +block/blue_bed_head_west block/blue_candle_lit +block/blue_candle block/blue_concrete block/blue_concrete_powder block/blue_glazed_terracotta block/blue_ice block/blue_orchid +block/blue_orchid.mcmeta block/blue_shulker_box -block/blue_stained_glass block/blue_stained_glass_pane_top +block/blue_stained_glass block/blue_terracotta block/blue_wool block/bone_block_side block/bone_block_top block/bookshelf -block/brain_coral block/brain_coral_block block/brain_coral_fan -block/brewing_stand +block/brain_coral block/brewing_stand_base +block/brewing_stand block/bricks -block/brown_candle +block/brown_bed_foot_east +block/brown_bed_foot_south +block/brown_bed_foot_up +block/brown_bed_foot_west +block/brown_bed_head_east +block/brown_bed_head_up +block/brown_bed_head_west block/brown_candle_lit +block/brown_candle block/brown_concrete block/brown_concrete_powder block/brown_glazed_terracotta -block/brown_mushroom block/brown_mushroom_block +block/brown_mushroom +block/brown_mushroom.mcmeta block/brown_shulker_box -block/brown_stained_glass block/brown_stained_glass_pane_top +block/brown_stained_glass block/brown_terracotta block/brown_wool -block/bubble_coral block/bubble_coral_block block/bubble_coral_fan +block/bubble_coral block/budding_amethyst block/bush block/cactus_bottom block/cactus_flower +block/cactus_flower.mcmeta block/cactus_side +block/cactus_side.mcmeta block/cactus_top +block/cactus_top.mcmeta block/cake_bottom block/cake_inner block/cake_side @@ -145,10 +186,12 @@ block/calibrated_sculk_sensor_amethyst block/calibrated_sculk_sensor_input_side block/calibrated_sculk_sensor_top block/campfire_fire -block/campfire_log +block/campfire_fire.mcmeta block/campfire_log_lit -block/candle +block/campfire_log_lit.mcmeta +block/campfire_log block/candle_lit +block/candle block/carrots_stage0 block/carrots_stage1 block/carrots_stage2 @@ -162,28 +205,37 @@ block/cauldron_bottom block/cauldron_inner block/cauldron_side block/cauldron_top -block/cave_vines block/cave_vines_lit -block/cave_vines_plant block/cave_vines_plant_lit +block/cave_vines_plant +block/cave_vines block/chain_command_block_back +block/chain_command_block_back.mcmeta block/chain_command_block_conditional +block/chain_command_block_conditional.mcmeta block/chain_command_block_front +block/chain_command_block_front.mcmeta block/chain_command_block_side +block/chain_command_block_side.mcmeta +block/chain block/cherry_door_bottom block/cherry_door_top +block/cherry_hanging_sign block/cherry_leaves +block/cherry_leaves.mcmeta block/cherry_log block/cherry_log_top block/cherry_planks block/cherry_sapling block/cherry_shelf +block/cherry_sign block/cherry_trapdoor block/chipped_anvil_top block/chiseled_bookshelf_empty block/chiseled_bookshelf_occupied block/chiseled_bookshelf_side block/chiseled_bookshelf_top +block/chiseled_cinnabar block/chiseled_copper block/chiseled_deepslate block/chiseled_nether_bricks @@ -194,15 +246,19 @@ block/chiseled_red_sandstone block/chiseled_resin_bricks block/chiseled_sandstone block/chiseled_stone_bricks -block/chiseled_tuff +block/chiseled_sulfur block/chiseled_tuff_bricks block/chiseled_tuff_bricks_top +block/chiseled_tuff block/chiseled_tuff_top -block/chorus_flower block/chorus_flower_dead +block/chorus_flower block/chorus_plant +block/cinnabar_bricks +block/cinnabar block/clay block/closed_eyeblossom +block/closed_eyeblossom.mcmeta block/coal_block block/coal_ore block/coarse_dirt @@ -213,11 +269,15 @@ block/cocoa_stage0 block/cocoa_stage1 block/cocoa_stage2 block/command_block_back +block/command_block_back.mcmeta block/command_block_conditional +block/command_block_conditional.mcmeta block/command_block_front +block/command_block_front.mcmeta block/command_block_side -block/comparator +block/command_block_side.mcmeta block/comparator_on +block/comparator block/composter_bottom block/composter_compost block/composter_ready @@ -226,107 +286,125 @@ block/composter_top block/conduit block/copper_bars block/copper_block -block/copper_bulb block/copper_bulb_lit block/copper_bulb_lit_powered +block/copper_bulb block/copper_bulb_powered block/copper_chain block/copper_door_bottom block/copper_door_top block/copper_grate block/copper_lantern +block/copper_lantern.mcmeta block/copper_ore block/copper_torch block/copper_trapdoor block/cornflower +block/cornflower.mcmeta block/cracked_deepslate_bricks block/cracked_deepslate_tiles block/cracked_nether_bricks block/cracked_polished_blackstone_bricks block/cracked_stone_bricks block/crafter_bottom -block/crafter_east block/crafter_east_crafting +block/crafter_east block/crafter_east_triggered -block/crafter_north block/crafter_north_crafting +block/crafter_north block/crafter_south block/crafter_south_triggered -block/crafter_top block/crafter_top_crafting +block/crafter_top block/crafter_top_triggered -block/crafter_west block/crafter_west_crafting +block/crafter_west block/crafter_west_triggered block/crafting_table_front block/crafting_table_side block/crafting_table_top -block/creaking_heart +block/creaking_heart_active block/creaking_heart_awake block/creaking_heart_dormant -block/creaking_heart_top +block/creaking_heart +block/creaking_heart_top_active block/creaking_heart_top_awake block/creaking_heart_top_dormant +block/creaking_heart_top block/crimson_door_bottom block/crimson_door_top block/crimson_fungus +block/crimson_fungus.mcmeta +block/crimson_hanging_sign block/crimson_nylium block/crimson_nylium_side block/crimson_planks block/crimson_roots block/crimson_roots_pot block/crimson_shelf +block/crimson_sign block/crimson_stem +block/crimson_stem.mcmeta block/crimson_stem_top block/crimson_trapdoor block/crying_obsidian block/cut_copper block/cut_red_sandstone block/cut_sandstone -block/cyan_candle +block/cyan_bed_foot_east +block/cyan_bed_foot_south +block/cyan_bed_foot_up +block/cyan_bed_foot_west +block/cyan_bed_head_east +block/cyan_bed_head_up +block/cyan_bed_head_west block/cyan_candle_lit +block/cyan_candle block/cyan_concrete block/cyan_concrete_powder block/cyan_glazed_terracotta block/cyan_shulker_box -block/cyan_stained_glass block/cyan_stained_glass_pane_top +block/cyan_stained_glass block/cyan_terracotta block/cyan_wool block/damaged_anvil_top block/dandelion +block/dandelion.mcmeta block/dark_oak_door_bottom block/dark_oak_door_top +block/dark_oak_hanging_sign block/dark_oak_leaves +block/dark_oak_leaves.mcmeta block/dark_oak_log block/dark_oak_log_top block/dark_oak_planks block/dark_oak_sapling block/dark_oak_shelf +block/dark_oak_sign block/dark_oak_trapdoor block/dark_prismarine block/daylight_detector_inverted_top block/daylight_detector_side block/daylight_detector_top -block/dead_brain_coral block/dead_brain_coral_block block/dead_brain_coral_fan -block/dead_bubble_coral +block/dead_brain_coral block/dead_bubble_coral_block block/dead_bubble_coral_fan +block/dead_bubble_coral block/dead_bush -block/dead_fire_coral block/dead_fire_coral_block block/dead_fire_coral_fan -block/dead_horn_coral +block/dead_fire_coral block/dead_horn_coral_block block/dead_horn_coral_fan -block/dead_tube_coral +block/dead_horn_coral block/dead_tube_coral_block block/dead_tube_coral_fan -block/debug +block/dead_tube_coral block/debug2 -block/deepslate +block/debug block/deepslate_bricks block/deepslate_coal_ore block/deepslate_copper_ore @@ -335,6 +413,7 @@ block/deepslate_emerald_ore block/deepslate_gold_ore block/deepslate_iron_ore block/deepslate_lapis_ore +block/deepslate block/deepslate_redstone_ore block/deepslate_tiles block/deepslate_top @@ -348,14 +427,14 @@ block/destroy_stage_6 block/destroy_stage_7 block/destroy_stage_8 block/destroy_stage_9 -block/detector_rail block/detector_rail_on +block/detector_rail block/diamond_block block/diamond_ore block/diorite -block/dirt block/dirt_path_side block/dirt_path_top +block/dirt block/dispenser_front block/dispenser_front_vertical block/dragon_egg @@ -402,82 +481,102 @@ block/end_portal_frame_eye block/end_portal_frame_side block/end_portal_frame_top block/end_rod -block/end_stone block/end_stone_bricks +block/end_stone block/exposed_chiseled_copper -block/exposed_copper block/exposed_copper_bars -block/exposed_copper_bulb block/exposed_copper_bulb_lit block/exposed_copper_bulb_lit_powered +block/exposed_copper_bulb block/exposed_copper_bulb_powered block/exposed_copper_chain block/exposed_copper_door_bottom block/exposed_copper_door_top block/exposed_copper_grate block/exposed_copper_lantern +block/exposed_copper_lantern.mcmeta +block/exposed_copper block/exposed_copper_trapdoor block/exposed_cut_copper block/exposed_lightning_rod -block/farmland block/farmland_moist +block/farmland block/fern block/fire_0 +block/fire_0.mcmeta block/fire_1 -block/fire_coral +block/fire_1.mcmeta block/fire_coral_block block/fire_coral_fan -block/firefly_bush +block/fire_coral block/firefly_bush_emissive +block/firefly_bush_emissive.mcmeta +block/firefly_bush block/fletching_table_front block/fletching_table_side block/fletching_table_top -block/flower_pot block/flowering_azalea_leaves +block/flowering_azalea_leaves.mcmeta block/flowering_azalea_side block/flowering_azalea_top +block/flower_pot block/frogspawn block/frosted_ice_0 block/frosted_ice_1 block/frosted_ice_2 block/frosted_ice_3 -block/furnace_front block/furnace_front_on +block/furnace_front block/furnace_side block/furnace_top block/gilded_blackstone -block/glass block/glass_pane_top +block/glass +block/glass.mcmeta block/glow_item_frame block/glow_lichen block/glowstone block/gold_block -block/gold_ore block/golden_dandelion +block/gold_ore block/granite -block/grass_block_side block/grass_block_side_overlay +block/grass_block_side block/grass_block_snow block/grass_block_top block/gravel -block/gray_candle +block/gray_bed_foot_east +block/gray_bed_foot_south +block/gray_bed_foot_up +block/gray_bed_foot_west +block/gray_bed_head_east +block/gray_bed_head_up +block/gray_bed_head_west block/gray_candle_lit +block/gray_candle block/gray_concrete block/gray_concrete_powder block/gray_glazed_terracotta block/gray_shulker_box -block/gray_stained_glass block/gray_stained_glass_pane_top +block/gray_stained_glass block/gray_terracotta block/gray_wool -block/green_candle +block/green_bed_foot_east +block/green_bed_foot_south +block/green_bed_foot_up +block/green_bed_foot_west +block/green_bed_head_east +block/green_bed_head_up +block/green_bed_head_west block/green_candle_lit +block/green_candle block/green_concrete block/green_concrete_powder block/green_glazed_terracotta block/green_shulker_box -block/green_stained_glass block/green_stained_glass_pane_top +block/green_stained_glass block/green_terracotta block/green_wool block/grindstone_pivot @@ -494,9 +593,9 @@ block/honeycomb_block block/hopper_inside block/hopper_outside block/hopper_top -block/horn_coral block/horn_coral_block block/horn_coral_fan +block/horn_coral block/ice block/iron_bars block/iron_block @@ -515,64 +614,95 @@ block/jukebox_side block/jukebox_top block/jungle_door_bottom block/jungle_door_top +block/jungle_hanging_sign block/jungle_leaves +block/jungle_leaves.mcmeta block/jungle_log block/jungle_log_top block/jungle_planks block/jungle_sapling block/jungle_shelf +block/jungle_sign block/jungle_trapdoor -block/kelp block/kelp_plant +block/kelp_plant.mcmeta +block/kelp +block/kelp.mcmeta block/ladder block/lantern +block/lantern.mcmeta block/lapis_block block/lapis_ore block/large_amethyst_bud +block/large_amethyst_bud.mcmeta block/large_fern_bottom block/large_fern_top block/lava_flow +block/lava_flow.mcmeta block/lava_still +block/lava_still.mcmeta block/leaf_litter block/lectern_base block/lectern_front block/lectern_sides block/lectern_top block/lever -block/light_blue_candle +block/light_blue_bed_foot_east +block/light_blue_bed_foot_south +block/light_blue_bed_foot_up +block/light_blue_bed_foot_west +block/light_blue_bed_head_east +block/light_blue_bed_head_up +block/light_blue_bed_head_west block/light_blue_candle_lit +block/light_blue_candle block/light_blue_concrete block/light_blue_concrete_powder block/light_blue_glazed_terracotta block/light_blue_shulker_box -block/light_blue_stained_glass block/light_blue_stained_glass_pane_top +block/light_blue_stained_glass block/light_blue_terracotta block/light_blue_wool -block/light_gray_candle +block/light_gray_bed_foot_east +block/light_gray_bed_foot_south +block/light_gray_bed_foot_up +block/light_gray_bed_foot_west +block/light_gray_bed_head_east +block/light_gray_bed_head_up +block/light_gray_bed_head_west block/light_gray_candle_lit +block/light_gray_candle block/light_gray_concrete block/light_gray_concrete_powder block/light_gray_glazed_terracotta block/light_gray_shulker_box -block/light_gray_stained_glass block/light_gray_stained_glass_pane_top +block/light_gray_stained_glass block/light_gray_terracotta block/light_gray_wool -block/lightning_rod block/lightning_rod_on +block/lightning_rod block/lilac_bottom block/lilac_top block/lily_of_the_valley +block/lily_of_the_valley.mcmeta block/lily_pad -block/lime_candle +block/lime_bed_foot_east +block/lime_bed_foot_south +block/lime_bed_foot_up +block/lime_bed_foot_west +block/lime_bed_head_east +block/lime_bed_head_up +block/lime_bed_head_west block/lime_candle_lit +block/lime_candle block/lime_concrete block/lime_concrete_powder block/lime_glazed_terracotta block/lime_shulker_box -block/lime_stained_glass block/lime_stained_glass_pane_top +block/lime_stained_glass block/lime_terracotta block/lime_wool block/lodestone_side @@ -581,99 +711,129 @@ block/loom_bottom block/loom_front block/loom_side block/loom_top -block/magenta_candle +block/magenta_bed_foot_east +block/magenta_bed_foot_south +block/magenta_bed_foot_up +block/magenta_bed_foot_west +block/magenta_bed_head_east +block/magenta_bed_head_up +block/magenta_bed_head_west block/magenta_candle_lit +block/magenta_candle block/magenta_concrete block/magenta_concrete_powder block/magenta_glazed_terracotta block/magenta_shulker_box -block/magenta_stained_glass block/magenta_stained_glass_pane_top +block/magenta_stained_glass block/magenta_terracotta block/magenta_wool block/magma +block/magma.mcmeta block/mangrove_door_bottom block/mangrove_door_top +block/mangrove_hanging_sign block/mangrove_leaves +block/mangrove_leaves.mcmeta block/mangrove_log block/mangrove_log_top block/mangrove_planks -block/mangrove_propagule block/mangrove_propagule_hanging +block/mangrove_propagule block/mangrove_roots_side +block/mangrove_roots_side.mcmeta block/mangrove_roots_top +block/mangrove_roots_top.mcmeta block/mangrove_shelf +block/mangrove_sign block/mangrove_trapdoor block/medium_amethyst_bud +block/medium_amethyst_bud.mcmeta block/melon_side block/melon_stem block/melon_top block/moss_block block/mossy_cobblestone block/mossy_stone_bricks -block/mud block/mud_bricks block/muddy_mangrove_roots_side block/muddy_mangrove_roots_top +block/mud block/mushroom_block_inside block/mushroom_stem block/mycelium_side block/mycelium_top block/nether_bricks block/nether_gold_ore +block/netherite_block block/nether_portal +block/nether_portal.mcmeta block/nether_quartz_ore +block/netherrack block/nether_sprouts +block/nether_sprouts.mcmeta block/nether_wart_block block/nether_wart_stage0 block/nether_wart_stage1 block/nether_wart_stage2 -block/netherite_block -block/netherrack block/note_block block/oak_door_bottom block/oak_door_top +block/oak_hanging_sign block/oak_leaves +block/oak_leaves.mcmeta block/oak_log block/oak_log_top block/oak_planks block/oak_sapling block/oak_shelf +block/oak_sign block/oak_trapdoor -block/observer_back block/observer_back_on +block/observer_back block/observer_front block/observer_side block/observer_top block/obsidian block/ochre_froglight_side block/ochre_froglight_top -block/open_eyeblossom block/open_eyeblossom_emissive -block/orange_candle +block/open_eyeblossom +block/open_eyeblossom.mcmeta +block/orange_bed_foot_east +block/orange_bed_foot_south +block/orange_bed_foot_up +block/orange_bed_foot_west +block/orange_bed_head_east +block/orange_bed_head_up +block/orange_bed_head_west block/orange_candle_lit +block/orange_candle block/orange_concrete block/orange_concrete_powder block/orange_glazed_terracotta block/orange_shulker_box -block/orange_stained_glass block/orange_stained_glass_pane_top +block/orange_stained_glass block/orange_terracotta block/orange_tulip +block/orange_tulip.mcmeta block/orange_wool block/oxeye_daisy +block/oxeye_daisy.mcmeta block/oxidized_chiseled_copper -block/oxidized_copper block/oxidized_copper_bars -block/oxidized_copper_bulb block/oxidized_copper_bulb_lit block/oxidized_copper_bulb_lit_powered +block/oxidized_copper_bulb block/oxidized_copper_bulb_powered block/oxidized_copper_chain block/oxidized_copper_door_bottom block/oxidized_copper_door_top block/oxidized_copper_grate block/oxidized_copper_lantern +block/oxidized_copper_lantern.mcmeta +block/oxidized_copper block/oxidized_copper_trapdoor block/oxidized_cut_copper block/oxidized_lightning_rod @@ -687,29 +847,40 @@ block/pale_moss_carpet_side_small block/pale_moss_carpet_side_tall block/pale_oak_door_bottom block/pale_oak_door_top +block/pale_oak_hanging_sign block/pale_oak_leaves +block/pale_oak_leaves.mcmeta block/pale_oak_log block/pale_oak_log_top block/pale_oak_planks block/pale_oak_sapling block/pale_oak_shelf +block/pale_oak_sign block/pale_oak_trapdoor block/pearlescent_froglight_side block/pearlescent_froglight_top block/peony_bottom block/peony_top -block/pink_candle +block/pink_bed_foot_east +block/pink_bed_foot_south +block/pink_bed_foot_up +block/pink_bed_foot_west +block/pink_bed_head_east +block/pink_bed_head_up +block/pink_bed_head_west block/pink_candle_lit +block/pink_candle block/pink_concrete block/pink_concrete_powder block/pink_glazed_terracotta block/pink_petals block/pink_petals_stem block/pink_shulker_box -block/pink_stained_glass block/pink_stained_glass_pane_top +block/pink_stained_glass block/pink_terracotta block/pink_tulip +block/pink_tulip.mcmeta block/pink_wool block/piston_bottom block/piston_inner @@ -730,27 +901,31 @@ block/podzol_top block/pointed_dripstone_down_base block/pointed_dripstone_down_frustum block/pointed_dripstone_down_middle -block/pointed_dripstone_down_tip block/pointed_dripstone_down_tip_merge +block/pointed_dripstone_down_tip block/pointed_dripstone_up_base block/pointed_dripstone_up_frustum block/pointed_dripstone_up_middle -block/pointed_dripstone_up_tip block/pointed_dripstone_up_tip_merge +block/pointed_dripstone_up_tip block/polished_andesite block/polished_basalt_side block/polished_basalt_top -block/polished_blackstone block/polished_blackstone_bricks +block/polished_blackstone +block/polished_cinnabar block/polished_deepslate block/polished_diorite block/polished_granite +block/polished_sulfur block/polished_tuff block/poppy +block/poppy.mcmeta block/potatoes_stage0 block/potatoes_stage1 block/potatoes_stage2 block/potatoes_stage3 +block/potent_sulfur block/potted_azalea_bush_plant block/potted_azalea_bush_side block/potted_azalea_bush_top @@ -758,74 +933,101 @@ block/potted_flowering_azalea_bush_plant block/potted_flowering_azalea_bush_side block/potted_flowering_azalea_bush_top block/powder_snow -block/powered_rail block/powered_rail_on -block/prismarine +block/powered_rail block/prismarine_bricks +block/prismarine +block/prismarine.mcmeta block/pumpkin_side block/pumpkin_stem block/pumpkin_top -block/purple_candle +block/purple_bed_foot_east +block/purple_bed_foot_south +block/purple_bed_foot_up +block/purple_bed_foot_west +block/purple_bed_head_east +block/purple_bed_head_up +block/purple_bed_head_west block/purple_candle_lit +block/purple_candle block/purple_concrete block/purple_concrete_powder block/purple_glazed_terracotta block/purple_shulker_box -block/purple_stained_glass block/purple_stained_glass_pane_top +block/purple_stained_glass block/purple_terracotta block/purple_wool block/purpur_block block/purpur_pillar +block/purpur_pillar_side block/purpur_pillar_top block/quartz_block_bottom block/quartz_block_side block/quartz_block_top block/quartz_bricks block/quartz_pillar +block/quartz_pillar_side block/quartz_pillar_top -block/rail block/rail_corner +block/rail block/raw_copper_block block/raw_gold_block block/raw_iron_block -block/red_candle +block/red_bed_foot_east +block/red_bed_foot_south +block/red_bed_foot_up +block/red_bed_foot_west +block/red_bed_head_east +block/red_bed_head_up +block/red_bed_head_west block/red_candle_lit +block/red_candle block/red_concrete block/red_concrete_powder block/red_glazed_terracotta -block/red_mushroom block/red_mushroom_block +block/red_mushroom +block/red_mushroom.mcmeta block/red_nether_bricks block/red_sand -block/red_sandstone block/red_sandstone_bottom +block/red_sandstone block/red_sandstone_top block/red_shulker_box -block/red_stained_glass block/red_stained_glass_pane_top -block/red_terracotta -block/red_tulip -block/red_wool +block/red_stained_glass block/redstone_block block/redstone_dust_dot +block/redstone_dust_dot.mcmeta block/redstone_dust_line0 +block/redstone_dust_line0.mcmeta block/redstone_dust_line1 +block/redstone_dust_line1.mcmeta block/redstone_dust_overlay -block/redstone_lamp +block/redstone_dust_overlay.mcmeta block/redstone_lamp_on +block/redstone_lamp block/redstone_ore -block/redstone_torch block/redstone_torch_off +block/redstone_torch +block/red_terracotta +block/red_tulip +block/red_tulip.mcmeta +block/red_wool block/reinforced_deepslate_bottom block/reinforced_deepslate_side block/reinforced_deepslate_top -block/repeater block/repeater_on +block/repeater block/repeating_command_block_back +block/repeating_command_block_back.mcmeta block/repeating_command_block_conditional +block/repeating_command_block_conditional.mcmeta block/repeating_command_block_front +block/repeating_command_block_front.mcmeta block/repeating_command_block_side +block/repeating_command_block_side.mcmeta block/resin_block block/resin_bricks block/resin_clump @@ -835,44 +1037,56 @@ block/respawn_anchor_side1 block/respawn_anchor_side2 block/respawn_anchor_side3 block/respawn_anchor_side4 -block/respawn_anchor_top block/respawn_anchor_top_off +block/respawn_anchor_top +block/respawn_anchor_top.mcmeta block/rooted_dirt block/rose_bush_bottom block/rose_bush_top block/sand -block/sandstone block/sandstone_bottom +block/sandstone block/sandstone_top block/scaffolding_bottom block/scaffolding_side block/scaffolding_top -block/sculk block/sculk_catalyst_bottom -block/sculk_catalyst_side block/sculk_catalyst_side_bloom -block/sculk_catalyst_top +block/sculk_catalyst_side_bloom.mcmeta +block/sculk_catalyst_side block/sculk_catalyst_top_bloom +block/sculk_catalyst_top_bloom.mcmeta +block/sculk_catalyst_top +block/sculk +block/sculk.mcmeta block/sculk_sensor_bottom block/sculk_sensor_side block/sculk_sensor_tendril_active +block/sculk_sensor_tendril_active.mcmeta block/sculk_sensor_tendril_inactive +block/sculk_sensor_tendril_inactive.mcmeta block/sculk_sensor_top block/sculk_shrieker_bottom block/sculk_shrieker_can_summon_inner_top +block/sculk_shrieker_can_summon_inner_top.mcmeta block/sculk_shrieker_inner_top +block/sculk_shrieker_inner_top.mcmeta block/sculk_shrieker_side block/sculk_shrieker_top block/sculk_vein +block/sculk_vein.mcmeta +block/seagrass +block/seagrass.mcmeta block/sea_lantern +block/sea_lantern.mcmeta block/sea_pickle -block/seagrass block/short_dry_grass block/short_grass block/shroomlight block/shulker_box block/slime_block block/small_amethyst_bud +block/small_amethyst_bud.mcmeta block/small_dripleaf_side block/small_dripleaf_stem_bottom block/small_dripleaf_stem_top @@ -882,8 +1096,9 @@ block/smithing_table_front block/smithing_table_side block/smithing_table_top block/smoker_bottom -block/smoker_front block/smoker_front_on +block/smoker_front_on.mcmeta +block/smoker_front block/smoker_side block/smoker_top block/smooth_basalt @@ -909,32 +1124,41 @@ block/sniffer_egg_very_cracked_top block/sniffer_egg_very_cracked_west block/snow block/soul_campfire_fire +block/soul_campfire_fire.mcmeta block/soul_campfire_log_lit +block/soul_campfire_log_lit.mcmeta block/soul_fire_0 +block/soul_fire_0.mcmeta block/soul_fire_1 +block/soul_fire_1.mcmeta block/soul_lantern +block/soul_lantern.mcmeta block/soul_sand block/soul_soil block/soul_torch block/spawner block/sponge -block/spore_blossom block/spore_blossom_base +block/spore_blossom block/spruce_door_bottom block/spruce_door_top +block/spruce_hanging_sign block/spruce_leaves +block/spruce_leaves.mcmeta block/spruce_log block/spruce_log_top block/spruce_planks block/spruce_sapling block/spruce_shelf +block/spruce_sign block/spruce_trapdoor -block/stone block/stone_bricks block/stonecutter_bottom block/stonecutter_saw +block/stonecutter_saw.mcmeta block/stonecutter_side block/stonecutter_top +block/stone block/stripped_acacia_log block/stripped_acacia_log_top block/stripped_bamboo_block @@ -959,12 +1183,24 @@ block/stripped_spruce_log block/stripped_spruce_log_top block/stripped_warped_stem block/stripped_warped_stem_top -block/structure_block block/structure_block_corner block/structure_block_data block/structure_block_load +block/structure_block block/structure_block_save block/sugar_cane +block/sulfur_bricks +block/sulfur +block/sulfur_spike_down_base +block/sulfur_spike_down_frustum +block/sulfur_spike_down_middle +block/sulfur_spike_down_tip_merge +block/sulfur_spike_down_tip +block/sulfur_spike_up_base +block/sulfur_spike_up_frustum +block/sulfur_spike_up_middle +block/sulfur_spike_up_tip_merge +block/sulfur_spike_up_tip block/sunflower_back block/sunflower_bottom block/sunflower_front @@ -978,6 +1214,7 @@ block/suspicious_sand_1 block/suspicious_sand_2 block/suspicious_sand_3 block/sweet_berry_bush_stage0 +block/sweet_berry_bush_stage0.mcmeta block/sweet_berry_bush_stage1 block/sweet_berry_bush_stage2 block/sweet_berry_bush_stage3 @@ -985,7 +1222,9 @@ block/tall_dry_grass block/tall_grass_bottom block/tall_grass_top block/tall_seagrass_bottom +block/tall_seagrass_bottom.mcmeta block/tall_seagrass_top +block/tall_seagrass_top.mcmeta block/target_side block/target_top block/terracotta @@ -998,85 +1237,94 @@ block/tinted_glass block/tnt_bottom block/tnt_side block/tnt_top -block/torch -block/torchflower block/torchflower_crop_stage0 block/torchflower_crop_stage1 +block/torchflower +block/torchflower.mcmeta +block/torch block/trial_spawner_bottom -block/trial_spawner_side_active block/trial_spawner_side_active_ominous -block/trial_spawner_side_inactive +block/trial_spawner_side_active block/trial_spawner_side_inactive_ominous -block/trial_spawner_top_active +block/trial_spawner_side_inactive block/trial_spawner_top_active_ominous -block/trial_spawner_top_ejecting_reward +block/trial_spawner_top_active block/trial_spawner_top_ejecting_reward_ominous -block/trial_spawner_top_inactive +block/trial_spawner_top_ejecting_reward block/trial_spawner_top_inactive_ominous -block/tripwire +block/trial_spawner_top_inactive block/tripwire_hook -block/tube_coral +block/tripwire +block/tripwire.mcmeta block/tube_coral_block block/tube_coral_fan -block/tuff +block/tube_coral block/tuff_bricks +block/tuff block/turtle_egg block/turtle_egg_slightly_cracked block/turtle_egg_very_cracked -block/twisting_vines block/twisting_vines_plant -block/vault_bottom +block/twisting_vines block/vault_bottom_ominous -block/vault_front_ejecting +block/vault_bottom block/vault_front_ejecting_ominous -block/vault_front_off +block/vault_front_ejecting block/vault_front_off_ominous -block/vault_front_on +block/vault_front_off block/vault_front_on_ominous -block/vault_side_off +block/vault_front_on block/vault_side_off_ominous -block/vault_side_on +block/vault_side_off block/vault_side_on_ominous -block/vault_top -block/vault_top_ejecting +block/vault_side_on block/vault_top_ejecting_ominous +block/vault_top_ejecting block/vault_top_ominous +block/vault_top block/verdant_froglight_side block/verdant_froglight_top block/vine block/warped_door_bottom block/warped_door_top block/warped_fungus +block/warped_fungus.mcmeta +block/warped_hanging_sign block/warped_nylium block/warped_nylium_side block/warped_planks block/warped_roots block/warped_roots_pot block/warped_shelf +block/warped_sign block/warped_stem +block/warped_stem.mcmeta block/warped_stem_top block/warped_trapdoor block/warped_wart_block block/water_flow +block/water_flow.mcmeta block/water_overlay block/water_still +block/water_still.mcmeta block/weathered_chiseled_copper -block/weathered_copper block/weathered_copper_bars -block/weathered_copper_bulb block/weathered_copper_bulb_lit block/weathered_copper_bulb_lit_powered +block/weathered_copper_bulb block/weathered_copper_bulb_powered block/weathered_copper_chain block/weathered_copper_door_bottom block/weathered_copper_door_top block/weathered_copper_grate block/weathered_copper_lantern +block/weathered_copper_lantern.mcmeta +block/weathered_copper block/weathered_copper_trapdoor block/weathered_cut_copper block/weathered_lightning_rod -block/weeping_vines block/weeping_vines_plant +block/weeping_vines block/wet_sponge block/wheat_stage0 block/wheat_stage1 @@ -1086,28 +1334,44 @@ block/wheat_stage4 block/wheat_stage5 block/wheat_stage6 block/wheat_stage7 -block/white_candle +block/white_bed_foot_east +block/white_bed_foot_south +block/white_bed_foot_up +block/white_bed_foot_west +block/white_bed_head_east +block/white_bed_head_up +block/white_bed_head_west block/white_candle_lit +block/white_candle block/white_concrete block/white_concrete_powder block/white_glazed_terracotta block/white_shulker_box -block/white_stained_glass block/white_stained_glass_pane_top +block/white_stained_glass block/white_terracotta block/white_tulip +block/white_tulip.mcmeta block/white_wool block/wildflowers block/wildflowers_stem block/wither_rose -block/yellow_candle +block/wither_rose.mcmeta +block/yellow_bed_foot_east +block/yellow_bed_foot_south +block/yellow_bed_foot_up +block/yellow_bed_foot_west +block/yellow_bed_head_east +block/yellow_bed_head_up +block/yellow_bed_head_west block/yellow_candle_lit +block/yellow_candle block/yellow_concrete block/yellow_concrete_powder block/yellow_glazed_terracotta block/yellow_shulker_box -block/yellow_stained_glass block/yellow_stained_glass_pane_top +block/yellow_stained_glass block/yellow_terracotta block/yellow_wool colormap/dry_foliage @@ -1115,19 +1379,21 @@ colormap/foliage colormap/grass effect/dither entity/allay/allay -entity/armadillo/armadillo entity/armadillo/armadillo_baby +entity/armadillo/armadillo +entity/armadillo entity/armorstand/armorstand -entity/axolotl/axolotl_blue +entity/armorstand/wood entity/axolotl/axolotl_blue_baby -entity/axolotl/axolotl_cyan +entity/axolotl/axolotl_blue entity/axolotl/axolotl_cyan_baby -entity/axolotl/axolotl_gold +entity/axolotl/axolotl_cyan entity/axolotl/axolotl_gold_baby -entity/axolotl/axolotl_lucy +entity/axolotl/axolotl_gold entity/axolotl/axolotl_lucy_baby -entity/axolotl/axolotl_wild +entity/axolotl/axolotl_lucy entity/axolotl/axolotl_wild_baby +entity/axolotl/axolotl_wild entity/banner/banner_base entity/banner/base entity/banner/border @@ -1140,14 +1406,14 @@ entity/banner/diagonal_left entity/banner/diagonal_right entity/banner/diagonal_up_left entity/banner/diagonal_up_right -entity/banner/flow entity/banner/flower +entity/banner/flow entity/banner/globe entity/banner/gradient entity/banner/gradient_up entity/banner/guster -entity/banner/half_horizontal entity/banner/half_horizontal_bottom +entity/banner/half_horizontal entity/banner/half_vertical entity/banner/half_vertical_right entity/banner/mojang @@ -1169,13 +1435,15 @@ entity/banner/stripe_middle entity/banner/stripe_right entity/banner/stripe_top entity/banner/triangle_bottom -entity/banner/triangle_top entity/banner/triangles_bottom entity/banner/triangles_top +entity/banner/triangle_top entity/bat/bat +entity/bat entity/beacon/beacon_beam -entity/bear/polarbear +entity/beacon_beam entity/bear/polarbear_baby +entity/bear/polarbear entity/bed/black entity/bed/blue entity/bed/brown @@ -1192,17 +1460,18 @@ entity/bed/purple entity/bed/red entity/bed/white entity/bed/yellow -entity/bee/bee -entity/bee/bee_angry entity/bee/bee_angry_baby -entity/bee/bee_angry_nectar entity/bee/bee_angry_nectar_baby +entity/bee/bee_angry_nectar +entity/bee/bee_angry entity/bee/bee_baby -entity/bee/bee_nectar entity/bee/bee_nectar_baby +entity/bee/bee_nectar +entity/bee/bee entity/bee/bee_stinger entity/bell/bell_body entity/blaze/blaze +entity/blaze entity/boat/acacia entity/boat/bamboo entity/boat/birch @@ -1213,105 +1482,134 @@ entity/boat/mangrove entity/boat/oak entity/boat/pale_oak entity/boat/spruce -entity/breeze/breeze entity/breeze/breeze_eyes +entity/breeze/breeze entity/breeze/breeze_wind -entity/camel/camel entity/camel/camel_baby entity/camel/camel_husk -entity/cat/cat_all_black +entity/camel/camel +entity/cat/all_black +entity/cat/black +entity/cat/british_shorthair +entity/cat/calico entity/cat/cat_all_black_baby -entity/cat/cat_black +entity/cat/cat_all_black entity/cat/cat_black_baby -entity/cat/cat_british_shorthair +entity/cat/cat_black entity/cat/cat_british_shorthair_baby -entity/cat/cat_calico +entity/cat/cat_british_shorthair entity/cat/cat_calico_baby -entity/cat/cat_collar +entity/cat/cat_calico entity/cat/cat_collar_baby -entity/cat/cat_jellie +entity/cat/cat_collar entity/cat/cat_jellie_baby -entity/cat/cat_persian +entity/cat/cat_jellie entity/cat/cat_persian_baby -entity/cat/cat_ragdoll +entity/cat/cat_persian entity/cat/cat_ragdoll_baby -entity/cat/cat_red +entity/cat/cat_ragdoll entity/cat/cat_red_baby -entity/cat/cat_siamese +entity/cat/cat_red entity/cat/cat_siamese_baby -entity/cat/cat_tabby +entity/cat/cat_siamese entity/cat/cat_tabby_baby -entity/cat/cat_white +entity/cat/cat_tabby entity/cat/cat_white_baby -entity/cat/ocelot +entity/cat/cat_white +entity/cat/jellie entity/cat/ocelot_baby -entity/chest/christmas +entity/cat/ocelot +entity/cat/persian +entity/cat/ragdoll +entity/cat/red +entity/cat/siamese +entity/cat/tabby +entity/cat/white +entity/chest_boat/acacia +entity/chest_boat/bamboo +entity/chest_boat/birch +entity/chest_boat/cherry +entity/chest_boat/dark_oak +entity/chest_boat/jungle +entity/chest_boat/mangrove +entity/chest_boat/oak +entity/chest_boat/pale_oak +entity/chest_boat/spruce entity/chest/christmas_left +entity/chest/christmas entity/chest/christmas_right -entity/chest/copper -entity/chest/copper_exposed entity/chest/copper_exposed_left +entity/chest/copper_exposed entity/chest/copper_exposed_right entity/chest/copper_left -entity/chest/copper_oxidized entity/chest/copper_oxidized_left +entity/chest/copper_oxidized entity/chest/copper_oxidized_right +entity/chest/copper entity/chest/copper_right -entity/chest/copper_weathered entity/chest/copper_weathered_left +entity/chest/copper_weathered entity/chest/copper_weathered_right entity/chest/ender -entity/chest/normal entity/chest/normal_left +entity/chest/normal entity/chest/normal_right -entity/chest/trapped entity/chest/trapped_left +entity/chest/trapped entity/chest/trapped_right -entity/chest_boat/acacia -entity/chest_boat/bamboo -entity/chest_boat/birch -entity/chest_boat/cherry -entity/chest_boat/dark_oak -entity/chest_boat/jungle -entity/chest_boat/mangrove -entity/chest_boat/oak -entity/chest_boat/pale_oak -entity/chest_boat/spruce -entity/chicken/chicken_cold entity/chicken/chicken_cold_baby -entity/chicken/chicken_temperate +entity/chicken/chicken_cold entity/chicken/chicken_temperate_baby -entity/chicken/chicken_warm +entity/chicken/chicken_temperate entity/chicken/chicken_warm_baby +entity/chicken/chicken_warm +entity/chicken/cold_chicken +entity/chicken +entity/chicken/temperate_chicken +entity/chicken/warm_chicken entity/conduit/base entity/conduit/break_particle entity/conduit/cage entity/conduit/closed_eye entity/conduit/open_eye entity/conduit/wind +entity/conduit/wind.mcmeta entity/conduit/wind_vertical -entity/copper_golem/copper_golem +entity/conduit/wind_vertical.mcmeta entity/copper_golem/copper_golem_exposed -entity/copper_golem/copper_golem_eyes entity/copper_golem/copper_golem_eyes_exposed entity/copper_golem/copper_golem_eyes_oxidized +entity/copper_golem/copper_golem_eyes entity/copper_golem/copper_golem_eyes_weathered entity/copper_golem/copper_golem_oxidized +entity/copper_golem/copper_golem entity/copper_golem/copper_golem_weathered -entity/cow/cow_cold +entity/copper_golem/exposed_copper_golem_eyes +entity/copper_golem/exposed_copper_golem +entity/copper_golem/oxidized_copper_golem_eyes +entity/copper_golem/oxidized_copper_golem +entity/copper_golem/weathered_copper_golem_eyes +entity/copper_golem/weathered_copper_golem +entity/cow/brown_mooshroom +entity/cow/cold_cow entity/cow/cow_cold_baby -entity/cow/cow_temperate +entity/cow/cow_cold +entity/cow/cow entity/cow/cow_temperate_baby -entity/cow/cow_warm +entity/cow/cow_temperate entity/cow/cow_warm_baby -entity/cow/mooshroom_brown +entity/cow/cow_warm entity/cow/mooshroom_brown_baby -entity/cow/mooshroom_red +entity/cow/mooshroom_brown entity/cow/mooshroom_red_baby -entity/creaking/creaking +entity/cow/mooshroom_red +entity/cow/red_mooshroom +entity/cow/temperate_cow +entity/cow/warm_cow entity/creaking/creaking_eyes -entity/creeper/creeper +entity/creaking/creaking entity/creeper/creeper_armor +entity/creeper/creeper entity/decorated_pot/angler_pottery_pattern entity/decorated_pot/archer_pottery_pattern entity/decorated_pot/arms_up_pottery_pattern @@ -1325,8 +1623,8 @@ entity/decorated_pot/explorer_pottery_pattern entity/decorated_pot/flow_pottery_pattern entity/decorated_pot/friend_pottery_pattern entity/decorated_pot/guster_pottery_pattern -entity/decorated_pot/heart_pottery_pattern entity/decorated_pot/heartbreak_pottery_pattern +entity/decorated_pot/heart_pottery_pattern entity/decorated_pot/howl_pottery_pattern entity/decorated_pot/miner_pottery_pattern entity/decorated_pot/mourner_pottery_pattern @@ -1337,20 +1635,26 @@ entity/decorated_pot/sheaf_pottery_pattern entity/decorated_pot/shelter_pottery_pattern entity/decorated_pot/skull_pottery_pattern entity/decorated_pot/snort_pottery_pattern -entity/dolphin/dolphin entity/dolphin/dolphin_baby +entity/dolphin/dolphin +entity/dolphin +entity/elytra +entity/enchanting_table_book entity/enchantment/enchanting_table_book -entity/end_crystal/end_crystal entity/end_crystal/end_crystal_beam -entity/end_portal/end_gateway_beam -entity/end_portal/end_portal -entity/enderdragon/dragon +entity/end_crystal/end_crystal entity/enderdragon/dragon_exploding entity/enderdragon/dragon_eyes entity/enderdragon/dragon_fireball -entity/enderman/enderman +entity/enderdragon/dragon entity/enderman/enderman_eyes +entity/enderman/enderman entity/endermite/endermite +entity/endermite +entity/end_gateway_beam +entity/end_portal/end_gateway_beam +entity/end_portal/end_portal +entity/end_portal entity/equipment/camel_husk_saddle/saddle entity/equipment/camel_saddle/saddle entity/equipment/donkey_saddle/saddle @@ -1374,36 +1678,36 @@ entity/equipment/horse_body/copper entity/equipment/horse_body/diamond entity/equipment/horse_body/gold entity/equipment/horse_body/iron -entity/equipment/horse_body/leather entity/equipment/horse_body/leather_overlay +entity/equipment/horse_body/leather entity/equipment/horse_body/netherite entity/equipment/horse_saddle/saddle -entity/equipment/humanoid/chainmail -entity/equipment/humanoid/copper -entity/equipment/humanoid/diamond -entity/equipment/humanoid/gold -entity/equipment/humanoid/iron -entity/equipment/humanoid/leather -entity/equipment/humanoid/leather_overlay -entity/equipment/humanoid/netherite -entity/equipment/humanoid/turtle_scute entity/equipment/humanoid_baby/chainmail entity/equipment/humanoid_baby/copper entity/equipment/humanoid_baby/diamond entity/equipment/humanoid_baby/gold entity/equipment/humanoid_baby/iron -entity/equipment/humanoid_baby/leather entity/equipment/humanoid_baby/leather_overlay +entity/equipment/humanoid_baby/leather entity/equipment/humanoid_baby/netherite entity/equipment/humanoid_baby/turtle_scute +entity/equipment/humanoid/chainmail +entity/equipment/humanoid/copper +entity/equipment/humanoid/diamond +entity/equipment/humanoid/gold +entity/equipment/humanoid/iron +entity/equipment/humanoid/leather_overlay +entity/equipment/humanoid/leather entity/equipment/humanoid_leggings/chainmail entity/equipment/humanoid_leggings/copper entity/equipment/humanoid_leggings/diamond entity/equipment/humanoid_leggings/gold entity/equipment/humanoid_leggings/iron -entity/equipment/humanoid_leggings/leather entity/equipment/humanoid_leggings/leather_overlay +entity/equipment/humanoid_leggings/leather entity/equipment/humanoid_leggings/netherite +entity/equipment/humanoid/netherite +entity/equipment/humanoid/turtle_scute entity/equipment/llama_body/black entity/equipment/llama_body/blue entity/equipment/llama_body/brown @@ -1418,8 +1722,8 @@ entity/equipment/llama_body/orange entity/equipment/llama_body/pink entity/equipment/llama_body/purple entity/equipment/llama_body/red -entity/equipment/llama_body/trader_llama entity/equipment/llama_body/trader_llama_baby +entity/equipment/llama_body/trader_llama entity/equipment/llama_body/white entity/equipment/llama_body/yellow entity/equipment/mule_saddle/saddle @@ -1433,142 +1737,193 @@ entity/equipment/pig_saddle/saddle entity/equipment/skeleton_horse_saddle/saddle entity/equipment/strider_saddle/saddle entity/equipment/wings/elytra -entity/equipment/wolf_body/armadillo_scute entity/equipment/wolf_body/armadillo_scute_overlay +entity/equipment/wolf_body/armadillo_scute entity/equipment/zombie_horse_saddle/saddle entity/experience/experience_orb +entity/experience_orb entity/fish/cod +entity/fishing/fishing_hook +entity/fishing_hook entity/fish/pufferfish entity/fish/salmon -entity/fish/tropical_a entity/fish/tropical_a_pattern_1 entity/fish/tropical_a_pattern_2 entity/fish/tropical_a_pattern_3 entity/fish/tropical_a_pattern_4 entity/fish/tropical_a_pattern_5 entity/fish/tropical_a_pattern_6 -entity/fish/tropical_b +entity/fish/tropical_a entity/fish/tropical_b_pattern_1 entity/fish/tropical_b_pattern_2 entity/fish/tropical_b_pattern_3 entity/fish/tropical_b_pattern_4 entity/fish/tropical_b_pattern_5 entity/fish/tropical_b_pattern_6 -entity/fishing/fishing_hook -entity/fox/fox +entity/fish/tropical_b entity/fox/fox_baby -entity/fox/fox_sleep +entity/fox/fox entity/fox/fox_sleep_baby -entity/fox/fox_snow +entity/fox/fox_sleep entity/fox/fox_snow_baby -entity/fox/fox_snow_sleep +entity/fox/fox_snow entity/fox/fox_snow_sleep_baby +entity/fox/fox_snow_sleep +entity/fox/snow_fox +entity/fox/snow_fox_sleep +entity/frog/cold_frog entity/frog/frog_cold entity/frog/frog_temperate entity/frog/frog_warm +entity/frog/temperate_frog +entity/frog/warm_frog entity/ghast/ghast entity/ghast/ghast_shooting -entity/ghast/happy_ghast entity/ghast/happy_ghast_baby +entity/ghast/happy_ghast entity/ghast/happy_ghast_ropes -entity/goat/goat entity/goat/goat_baby -entity/guardian/guardian +entity/goat/goat +entity/guardian_beam +entity/guardian_elder entity/guardian/guardian_beam entity/guardian/guardian_elder -entity/hoglin/hoglin +entity/guardian/guardian +entity/guardian entity/hoglin/hoglin_baby -entity/hoglin/zoglin +entity/hoglin/hoglin entity/hoglin/zoglin_baby -entity/horse/donkey +entity/hoglin/zoglin +entity/horse/armor/horse_armor_diamond +entity/horse/armor/horse_armor_gold +entity/horse/armor/horse_armor_iron +entity/horse/armor/horse_armor_leather entity/horse/donkey_baby -entity/horse/horse_black +entity/horse/donkey entity/horse/horse_black_baby -entity/horse/horse_brown +entity/horse/horse_black entity/horse/horse_brown_baby -entity/horse/horse_chestnut +entity/horse/horse_brown entity/horse/horse_chestnut_baby -entity/horse/horse_creamy +entity/horse/horse_chestnut entity/horse/horse_creamy_baby -entity/horse/horse_darkbrown +entity/horse/horse_creamy entity/horse/horse_darkbrown_baby -entity/horse/horse_gray +entity/horse/horse_darkbrown entity/horse/horse_gray_baby -entity/horse/horse_markings_blackdots +entity/horse/horse_gray entity/horse/horse_markings_blackdots_baby -entity/horse/horse_markings_white +entity/horse/horse_markings_blackdots entity/horse/horse_markings_white_baby -entity/horse/horse_markings_whitedots entity/horse/horse_markings_whitedots_baby -entity/horse/horse_markings_whitefield +entity/horse/horse_markings_whitedots entity/horse/horse_markings_whitefield_baby -entity/horse/horse_skeleton +entity/horse/horse_markings_whitefield +entity/horse/horse_markings_white entity/horse/horse_skeleton_baby -entity/horse/horse_white +entity/horse/horse_skeleton entity/horse/horse_white_baby -entity/horse/horse_zombie +entity/horse/horse_white entity/horse/horse_zombie_baby -entity/horse/mule +entity/horse/horse_zombie entity/horse/mule_baby -entity/illager/evoker +entity/horse/mule entity/illager/evoker_fangs +entity/illager/evoker entity/illager/illusioner entity/illager/pillager entity/illager/ravager -entity/illager/vex entity/illager/vex_charging +entity/illager/vex entity/illager/vindicator -entity/iron_golem/iron_golem entity/iron_golem/iron_golem_crackiness_high entity/iron_golem/iron_golem_crackiness_low entity/iron_golem/iron_golem_crackiness_medium +entity/iron_golem/iron_golem entity/lead_knot/lead_knot -entity/llama/llama_brown +entity/lead_knot +entity/llama/brown +entity/llama/creamy +entity/llama/decor/black +entity/llama/decor/blue +entity/llama/decor/brown +entity/llama/decor/cyan +entity/llama/decor/gray +entity/llama/decor/green +entity/llama/decor/light_blue +entity/llama/decor/light_gray +entity/llama/decor/lime +entity/llama/decor/magenta +entity/llama/decor/orange +entity/llama/decor/pink +entity/llama/decor/purple +entity/llama/decor/red +entity/llama/decor/trader_llama +entity/llama/decor/white +entity/llama/decor/yellow +entity/llama/gray entity/llama/llama_brown_baby -entity/llama/llama_creamy +entity/llama/llama_brown entity/llama/llama_creamy_baby -entity/llama/llama_gray +entity/llama/llama_creamy entity/llama/llama_gray_baby +entity/llama/llama_gray entity/llama/llama_spit -entity/llama/llama_white entity/llama/llama_white_baby +entity/llama/llama_white +entity/llama/spit +entity/llama/white entity/minecart/minecart -entity/nautilus/nautilus +entity/minecart entity/nautilus/nautilus_baby -entity/nautilus/zombie_nautilus +entity/nautilus/nautilus entity/nautilus/zombie_nautilus_coral +entity/nautilus/zombie_nautilus entity/panda/aggressive_panda_baby +entity/panda/aggressive_panda entity/panda/brown_panda_baby +entity/panda/brown_panda entity/panda/lazy_panda_baby -entity/panda/panda +entity/panda/lazy_panda entity/panda/panda_aggressive entity/panda/panda_baby entity/panda/panda_brown entity/panda/panda_lazy entity/panda/panda_playful +entity/panda/panda entity/panda/panda_weak entity/panda/panda_worried entity/panda/playful_panda_baby +entity/panda/playful_panda entity/panda/weak_panda_baby +entity/panda/weak_panda entity/panda/worried_panda_baby +entity/panda/worried_panda entity/parrot/parrot_blue entity/parrot/parrot_green entity/parrot/parrot_grey entity/parrot/parrot_red_blue entity/parrot/parrot_yellow_blue -entity/phantom/phantom +entity/phantom_eyes entity/phantom/phantom_eyes -entity/pig/pig_cold -entity/pig/pig_cold_baby -entity/pig/pig_temperate -entity/pig/pig_temperate_baby -entity/pig/pig_warm -entity/pig/pig_warm_baby -entity/piglin/piglin +entity/phantom/phantom +entity/phantom +entity/pig/cold_pig entity/piglin/piglin_baby entity/piglin/piglin_brute -entity/piglin/zombified_piglin +entity/piglin/piglin entity/piglin/zombified_piglin_baby +entity/piglin/zombified_piglin +entity/pig/pig_cold_baby +entity/pig/pig_cold +entity/pig/pig +entity/pig/pig_saddle +entity/pig/pig_temperate_baby +entity/pig/pig_temperate +entity/pig/pig_warm_baby +entity/pig/pig_warm +entity/pig/temperate_pig +entity/pig/warm_pig entity/player/slim/alex entity/player/slim/ari entity/player/slim/efe @@ -1590,29 +1945,41 @@ entity/player/wide/zuri entity/projectiles/arrow entity/projectiles/arrow_spectral entity/projectiles/arrow_tipped +entity/projectiles/spectral_arrow +entity/projectiles/tipped_arrow entity/projectiles/wind_charge -entity/rabbit/rabbit_black +entity/rabbit/black +entity/rabbit/brown +entity/rabbit/caerbannog +entity/rabbit/gold entity/rabbit/rabbit_black_baby -entity/rabbit/rabbit_brown +entity/rabbit/rabbit_black entity/rabbit/rabbit_brown_baby -entity/rabbit/rabbit_caerbannog +entity/rabbit/rabbit_brown entity/rabbit/rabbit_caerbannog_baby -entity/rabbit/rabbit_gold +entity/rabbit/rabbit_caerbannog entity/rabbit/rabbit_gold_baby -entity/rabbit/rabbit_salt +entity/rabbit/rabbit_gold entity/rabbit/rabbit_salt_baby -entity/rabbit/rabbit_toast +entity/rabbit/rabbit_salt entity/rabbit/rabbit_toast_baby -entity/rabbit/rabbit_white +entity/rabbit/rabbit_toast entity/rabbit/rabbit_white_baby -entity/rabbit/rabbit_white_splotched +entity/rabbit/rabbit_white entity/rabbit/rabbit_white_splotched_baby -entity/sheep/sheep +entity/rabbit/rabbit_white_splotched +entity/rabbit/salt +entity/rabbit/toast +entity/rabbit/white +entity/rabbit/white_splotched entity/sheep/sheep_baby -entity/sheep/sheep_wool +entity/sheep/sheep_fur +entity/sheep/sheep entity/sheep/sheep_wool_baby +entity/sheep/sheep_wool entity/sheep/sheep_wool_undercoat -entity/shield/base +entity/shield_base_nopattern +entity/shield_base entity/shield/border entity/shield/bricks entity/shield/circle @@ -1623,21 +1990,21 @@ entity/shield/diagonal_left entity/shield/diagonal_right entity/shield/diagonal_up_left entity/shield/diagonal_up_right -entity/shield/flow entity/shield/flower +entity/shield/flow entity/shield/globe entity/shield/gradient entity/shield/gradient_up entity/shield/guster -entity/shield/half_horizontal entity/shield/half_horizontal_bottom +entity/shield/half_horizontal entity/shield/half_vertical entity/shield/half_vertical_right entity/shield/mojang entity/shield/piglin entity/shield/rhombus -entity/shield/shield_base entity/shield/shield_base_nopattern +entity/shield/shield_base entity/shield/skull entity/shield/small_stripes entity/shield/square_bottom_left @@ -1654,10 +2021,9 @@ entity/shield/stripe_middle entity/shield/stripe_right entity/shield/stripe_top entity/shield/triangle_bottom -entity/shield/triangle_top entity/shield/triangles_bottom entity/shield/triangles_top -entity/shulker/shulker +entity/shield/triangle_top entity/shulker/shulker_black entity/shulker/shulker_blue entity/shulker/shulker_brown @@ -1670,6 +2036,7 @@ entity/shulker/shulker_lime entity/shulker/shulker_magenta entity/shulker/shulker_orange entity/shulker/shulker_pink +entity/shulker/shulker entity/shulker/shulker_purple entity/shulker/shulker_red entity/shulker/shulker_white @@ -1699,35 +2066,46 @@ entity/signs/oak entity/signs/pale_oak entity/signs/spruce entity/signs/warped +entity/silverfish entity/silverfish/silverfish -entity/skeleton/bogged entity/skeleton/bogged_overlay +entity/skeleton/bogged entity/skeleton/parched entity/skeleton/skeleton -entity/skeleton/stray entity/skeleton/stray_overlay +entity/skeleton/stray entity/skeleton/wither_skeleton entity/slime/magmacube entity/slime/slime entity/sniffer/sniffer entity/sniffer/snifflet +entity/snow_golem entity/snow_golem/snow_golem entity/spider/cave_spider -entity/spider/spider +entity/spider_eyes entity/spider/spider_eyes -entity/squid/glow_squid +entity/spider/spider entity/squid/glow_squid_baby -entity/squid/squid +entity/squid/glow_squid entity/squid/squid_baby -entity/strider/strider +entity/squid/squid entity/strider/strider_baby -entity/strider/strider_cold entity/strider/strider_cold_baby +entity/strider/strider_cold +entity/strider/strider +entity/strider/strider_saddle +entity/sulfur_cube/sulfur_cube_inner +entity/sulfur_cube/sulfur_cube_inner_small +entity/sulfur_cube/sulfur_cube_outer +entity/sulfur_cube/sulfur_cube_outer_small entity/tadpole/tadpole +entity/trident +entity/trident_riptide entity/trident/trident entity/trident/trident_riptide -entity/turtle/turtle +entity/turtle/big_sea_turtle entity/turtle/turtle_baby +entity/turtle/turtle entity/villager/baby/desert entity/villager/baby/jungle entity/villager/baby/plains @@ -1737,109 +2115,119 @@ entity/villager/baby/swamp entity/villager/baby/taiga entity/villager/profession/armorer entity/villager/profession/butcher +entity/villager/profession/butcher.mcmeta entity/villager/profession/cartographer entity/villager/profession/cleric entity/villager/profession/farmer +entity/villager/profession/farmer.mcmeta entity/villager/profession/fisherman +entity/villager/profession/fisherman.mcmeta entity/villager/profession/fletcher +entity/villager/profession/fletcher.mcmeta entity/villager/profession/leatherworker +entity/villager/profession_level/diamond +entity/villager/profession_level/emerald +entity/villager/profession_level/gold +entity/villager/profession_level/iron +entity/villager/profession_level/stone entity/villager/profession/librarian +entity/villager/profession/librarian.mcmeta entity/villager/profession/mason entity/villager/profession/nitwit entity/villager/profession/shepherd +entity/villager/profession/shepherd.mcmeta entity/villager/profession/toolsmith entity/villager/profession/weaponsmith -entity/villager/profession_level/diamond -entity/villager/profession_level/emerald -entity/villager/profession_level/gold -entity/villager/profession_level/iron -entity/villager/profession_level/stone entity/villager/type/desert +entity/villager/type/desert.mcmeta entity/villager/type/jungle entity/villager/type/plains entity/villager/type/savanna entity/villager/type/snow +entity/villager/type/snow.mcmeta entity/villager/type/swamp entity/villager/type/taiga -entity/villager/villager entity/villager/villager_baby +entity/villager/villager +entity/wandering_trader entity/wandering_trader/wandering_trader -entity/warden/warden entity/warden/warden_bioluminescent_layer entity/warden/warden_heart +entity/warden/warden entity/warden/warden_pulsating_spots_1 entity/warden/warden_pulsating_spots_2 +entity/witch entity/witch/witch -entity/wither/wither entity/wither/wither_armor entity/wither/wither_invulnerable -entity/wolf/wolf -entity/wolf/wolf_angry +entity/wither/wither entity/wolf/wolf_angry_baby +entity/wolf/wolf_angry entity/wolf/wolf_armor_crackiness_high entity/wolf/wolf_armor_crackiness_low entity/wolf/wolf_armor_crackiness_medium -entity/wolf/wolf_ashen -entity/wolf/wolf_ashen_angry +entity/wolf/wolf_armor_overlay +entity/wolf/wolf_armor entity/wolf/wolf_ashen_angry_baby +entity/wolf/wolf_ashen_angry entity/wolf/wolf_ashen_baby -entity/wolf/wolf_ashen_tame +entity/wolf/wolf_ashen entity/wolf/wolf_ashen_tame_baby +entity/wolf/wolf_ashen_tame entity/wolf/wolf_baby -entity/wolf/wolf_black -entity/wolf/wolf_black_angry entity/wolf/wolf_black_angry_baby +entity/wolf/wolf_black_angry entity/wolf/wolf_black_baby -entity/wolf/wolf_black_tame +entity/wolf/wolf_black entity/wolf/wolf_black_tame_baby -entity/wolf/wolf_chestnut -entity/wolf/wolf_chestnut_angry +entity/wolf/wolf_black_tame entity/wolf/wolf_chestnut_angry_baby +entity/wolf/wolf_chestnut_angry entity/wolf/wolf_chestnut_baby -entity/wolf/wolf_chestnut_tame +entity/wolf/wolf_chestnut entity/wolf/wolf_chestnut_tame_baby -entity/wolf/wolf_collar +entity/wolf/wolf_chestnut_tame entity/wolf/wolf_collar_baby -entity/wolf/wolf_rusty -entity/wolf/wolf_rusty_angry +entity/wolf/wolf_collar +entity/wolf/wolf entity/wolf/wolf_rusty_angry_baby +entity/wolf/wolf_rusty_angry entity/wolf/wolf_rusty_baby -entity/wolf/wolf_rusty_tame +entity/wolf/wolf_rusty entity/wolf/wolf_rusty_tame_baby -entity/wolf/wolf_snowy -entity/wolf/wolf_snowy_angry +entity/wolf/wolf_rusty_tame entity/wolf/wolf_snowy_angry_baby +entity/wolf/wolf_snowy_angry entity/wolf/wolf_snowy_baby -entity/wolf/wolf_snowy_tame +entity/wolf/wolf_snowy entity/wolf/wolf_snowy_tame_baby -entity/wolf/wolf_spotted -entity/wolf/wolf_spotted_angry +entity/wolf/wolf_snowy_tame entity/wolf/wolf_spotted_angry_baby +entity/wolf/wolf_spotted_angry entity/wolf/wolf_spotted_baby -entity/wolf/wolf_spotted_tame +entity/wolf/wolf_spotted entity/wolf/wolf_spotted_tame_baby -entity/wolf/wolf_striped -entity/wolf/wolf_striped_angry +entity/wolf/wolf_spotted_tame entity/wolf/wolf_striped_angry_baby +entity/wolf/wolf_striped_angry entity/wolf/wolf_striped_baby -entity/wolf/wolf_striped_tame +entity/wolf/wolf_striped entity/wolf/wolf_striped_tame_baby -entity/wolf/wolf_tame +entity/wolf/wolf_striped_tame entity/wolf/wolf_tame_baby -entity/wolf/wolf_woods -entity/wolf/wolf_woods_angry +entity/wolf/wolf_tame entity/wolf/wolf_woods_angry_baby +entity/wolf/wolf_woods_angry entity/wolf/wolf_woods_baby -entity/wolf/wolf_woods_tame +entity/wolf/wolf_woods entity/wolf/wolf_woods_tame_baby -entity/zombie/drowned +entity/wolf/wolf_woods_tame entity/zombie/drowned_baby -entity/zombie/drowned_outer_layer entity/zombie/drowned_outer_layer_baby -entity/zombie/husk +entity/zombie/drowned_outer_layer +entity/zombie/drowned entity/zombie/husk_baby -entity/zombie/zombie -entity/zombie/zombie_baby +entity/zombie/husk entity/zombie_villager/baby/desert entity/zombie_villager/baby/jungle entity/zombie_villager/baby/plains @@ -1849,23 +2237,29 @@ entity/zombie_villager/baby/swamp entity/zombie_villager/baby/taiga entity/zombie_villager/profession/armorer entity/zombie_villager/profession/butcher +entity/zombie_villager/profession/butcher.mcmeta entity/zombie_villager/profession/cartographer entity/zombie_villager/profession/cleric entity/zombie_villager/profession/farmer +entity/zombie_villager/profession/farmer.mcmeta entity/zombie_villager/profession/fisherman +entity/zombie_villager/profession/fisherman.mcmeta entity/zombie_villager/profession/fletcher +entity/zombie_villager/profession/fletcher.mcmeta entity/zombie_villager/profession/leatherworker +entity/zombie_villager/profession_level/diamond +entity/zombie_villager/profession_level/emerald +entity/zombie_villager/profession_level/gold +entity/zombie_villager/profession_level/iron +entity/zombie_villager/profession_level/stone entity/zombie_villager/profession/librarian +entity/zombie_villager/profession/librarian.mcmeta entity/zombie_villager/profession/mason entity/zombie_villager/profession/nitwit entity/zombie_villager/profession/shepherd +entity/zombie_villager/profession/shepherd.mcmeta entity/zombie_villager/profession/toolsmith entity/zombie_villager/profession/weaponsmith -entity/zombie_villager/profession_level/diamond -entity/zombie_villager/profession_level/emerald -entity/zombie_villager/profession_level/gold -entity/zombie_villager/profession_level/iron -entity/zombie_villager/profession_level/stone entity/zombie_villager/type/desert entity/zombie_villager/type/jungle entity/zombie_villager/type/plains @@ -1873,8 +2267,10 @@ entity/zombie_villager/type/savanna entity/zombie_villager/type/snow entity/zombie_villager/type/swamp entity/zombie_villager/type/taiga -entity/zombie_villager/zombie_villager entity/zombie_villager/zombie_villager_baby +entity/zombie_villager/zombie_villager +entity/zombie/zombie_baby +entity/zombie/zombie environment/celestial/end_flash environment/celestial/moon/first_quarter environment/celestial/moon/full_moon @@ -1886,13 +2282,16 @@ environment/celestial/moon/waxing_crescent environment/celestial/moon/waxing_gibbous environment/celestial/sun environment/clouds +environment/end_flash environment/end_sky +environment/moon_phases environment/rain environment/snow +environment/sun font/accented +font/asciillager font/ascii font/ascii_sga -font/asciillager font/nonlatin_european gui/advancements/backgrounds/adventure gui/advancements/backgrounds/end @@ -1927,6 +2326,7 @@ gui/container/smithing gui/container/smoker gui/container/stonecutter gui/container/villager +gui/demo_background gui/footer_separator gui/hanging_signs/acacia gui/hanging_signs/bamboo @@ -1958,8 +2358,22 @@ gui/realms/snapshot_realms gui/realms/survival_spawn gui/realms/upload gui/recipe_book +gui/signs/acacia +gui/signs/bamboo +gui/signs/birch +gui/signs/cherry +gui/signs/crimson +gui/signs/dark_oak +gui/signs/jungle +gui/signs/mangrove +gui/signs/oak +gui/signs/pale_oak +gui/signs/spruce +gui/signs/warped gui/sprites/advancements/box_obtained +gui/sprites/advancements/box_obtained.mcmeta gui/sprites/advancements/box_unobtained +gui/sprites/advancements/box_unobtained.mcmeta gui/sprites/advancements/challenge_frame_obtained gui/sprites/advancements/challenge_frame_unobtained gui/sprites/advancements/goal_frame_obtained @@ -1991,6 +2405,7 @@ gui/sprites/advancements/tab_right_top_selected gui/sprites/advancements/task_frame_obtained gui/sprites/advancements/task_frame_unobtained gui/sprites/advancements/title_box +gui/sprites/advancements/title_box.mcmeta gui/sprites/boss_bar/blue_background gui/sprites/boss_bar/blue_progress gui/sprites/boss_bar/green_background @@ -2014,11 +2429,11 @@ gui/sprites/boss_bar/white_progress gui/sprites/boss_bar/yellow_background gui/sprites/boss_bar/yellow_progress gui/sprites/container/anvil/error -gui/sprites/container/anvil/text_field gui/sprites/container/anvil/text_field_disabled -gui/sprites/container/beacon/button +gui/sprites/container/anvil/text_field gui/sprites/container/beacon/button_disabled gui/sprites/container/beacon/button_highlighted +gui/sprites/container/beacon/button gui/sprites/container/beacon/button_selected gui/sprites/container/beacon/cancel gui/sprites/container/beacon/confirm @@ -2027,12 +2442,22 @@ gui/sprites/container/blast_furnace/lit_progress gui/sprites/container/brewing_stand/brew_progress gui/sprites/container/brewing_stand/bubbles gui/sprites/container/brewing_stand/fuel_length +gui/sprites/container/bundle/background +gui/sprites/container/bundle/background.mcmeta +gui/sprites/container/bundle/blocked_slot gui/sprites/container/bundle/bundle_progressbar_border +gui/sprites/container/bundle/bundle_progressbar_border.mcmeta gui/sprites/container/bundle/bundle_progressbar_fill +gui/sprites/container/bundle/bundle_progressbar_fill.mcmeta gui/sprites/container/bundle/bundle_progressbar_full +gui/sprites/container/bundle/bundle_progressbar_full.mcmeta gui/sprites/container/bundle/slot_background +gui/sprites/container/bundle/slot_background.mcmeta gui/sprites/container/bundle/slot_highlight_back +gui/sprites/container/bundle/slot_highlight_back.mcmeta gui/sprites/container/bundle/slot_highlight_front +gui/sprites/container/bundle/slot_highlight_front.mcmeta +gui/sprites/container/bundle/slot gui/sprites/container/cartography_table/duplicated_map gui/sprites/container/cartography_table/error gui/sprites/container/cartography_table/locked @@ -2041,8 +2466,8 @@ gui/sprites/container/cartography_table/scaled_map gui/sprites/container/crafter/disabled_slot gui/sprites/container/crafter/powered_redstone gui/sprites/container/crafter/unpowered_redstone -gui/sprites/container/creative_inventory/scroller gui/sprites/container/creative_inventory/scroller_disabled +gui/sprites/container/creative_inventory/scroller gui/sprites/container/creative_inventory/tab_bottom_selected_1 gui/sprites/container/creative_inventory/tab_bottom_selected_2 gui/sprites/container/creative_inventory/tab_bottom_selected_3 @@ -2071,32 +2496,41 @@ gui/sprites/container/creative_inventory/tab_top_unselected_4 gui/sprites/container/creative_inventory/tab_top_unselected_5 gui/sprites/container/creative_inventory/tab_top_unselected_6 gui/sprites/container/creative_inventory/tab_top_unselected_7 -gui/sprites/container/enchanting_table/enchantment_slot gui/sprites/container/enchanting_table/enchantment_slot_disabled gui/sprites/container/enchanting_table/enchantment_slot_highlighted -gui/sprites/container/enchanting_table/level_1 +gui/sprites/container/enchanting_table/enchantment_slot gui/sprites/container/enchanting_table/level_1_disabled -gui/sprites/container/enchanting_table/level_2 +gui/sprites/container/enchanting_table/level_1 gui/sprites/container/enchanting_table/level_2_disabled -gui/sprites/container/enchanting_table/level_3 +gui/sprites/container/enchanting_table/level_2 gui/sprites/container/enchanting_table/level_3_disabled +gui/sprites/container/enchanting_table/level_3 gui/sprites/container/furnace/burn_progress gui/sprites/container/furnace/lit_progress gui/sprites/container/grindstone/error +gui/sprites/container/horse/armor_slot gui/sprites/container/horse/chest_slots -gui/sprites/container/inventory/effect_background +gui/sprites/container/horse/llama_armor_slot +gui/sprites/container/horse/saddle_slot gui/sprites/container/inventory/effect_background_ambient +gui/sprites/container/inventory/effect_background_ambient.mcmeta +gui/sprites/container/inventory/effect_background_large +gui/sprites/container/inventory/effect_background +gui/sprites/container/inventory/effect_background.mcmeta +gui/sprites/container/inventory/effect_background_small +gui/sprites/container/loom/banner_slot +gui/sprites/container/loom/dye_slot gui/sprites/container/loom/error -gui/sprites/container/loom/pattern gui/sprites/container/loom/pattern_highlighted +gui/sprites/container/loom/pattern gui/sprites/container/loom/pattern_selected -gui/sprites/container/loom/scroller +gui/sprites/container/loom/pattern_slot gui/sprites/container/loom/scroller_disabled -gui/sprites/container/slot +gui/sprites/container/loom/scroller gui/sprites/container/slot/amethyst_shard gui/sprites/container/slot/axe -gui/sprites/container/slot/banner gui/sprites/container/slot/banner_pattern +gui/sprites/container/slot/banner gui/sprites/container/slot/boots gui/sprites/container/slot/brewing_fuel gui/sprites/container/slot/chestplate @@ -2104,15 +2538,20 @@ gui/sprites/container/slot/diamond gui/sprites/container/slot/dye gui/sprites/container/slot/emerald gui/sprites/container/slot/helmet +gui/sprites/container/slot_highlight_back +gui/sprites/container/slot_highlight_back.mcmeta +gui/sprites/container/slot_highlight_front +gui/sprites/container/slot_highlight_front.mcmeta gui/sprites/container/slot/hoe gui/sprites/container/slot/horse_armor gui/sprites/container/slot/ingot gui/sprites/container/slot/lapis_lazuli gui/sprites/container/slot/leggings gui/sprites/container/slot/llama_armor -gui/sprites/container/slot/nautilus_armor gui/sprites/container/slot/nautilus_armor_inventory +gui/sprites/container/slot/nautilus_armor gui/sprites/container/slot/pickaxe +gui/sprites/container/slot gui/sprites/container/slot/potion gui/sprites/container/slot/quartz gui/sprites/container/slot/redstone_dust @@ -2123,109 +2562,134 @@ gui/sprites/container/slot/smithing_template_armor_trim gui/sprites/container/slot/smithing_template_netherite_upgrade gui/sprites/container/slot/spear gui/sprites/container/slot/sword -gui/sprites/container/slot_highlight_back -gui/sprites/container/slot_highlight_front gui/sprites/container/smithing/error gui/sprites/container/smoker/burn_progress gui/sprites/container/smoker/lit_progress -gui/sprites/container/stonecutter/recipe gui/sprites/container/stonecutter/recipe_highlighted +gui/sprites/container/stonecutter/recipe gui/sprites/container/stonecutter/recipe_selected -gui/sprites/container/stonecutter/scroller gui/sprites/container/stonecutter/scroller_disabled +gui/sprites/container/stonecutter/scroller gui/sprites/container/villager/discount_strikethrough gui/sprites/container/villager/experience_bar_background gui/sprites/container/villager/experience_bar_current gui/sprites/container/villager/experience_bar_result gui/sprites/container/villager/out_of_stock -gui/sprites/container/villager/scroller gui/sprites/container/villager/scroller_disabled -gui/sprites/container/villager/trade_arrow +gui/sprites/container/villager/scroller gui/sprites/container/villager/trade_arrow_out_of_stock -gui/sprites/dialog/warning_button +gui/sprites/container/villager/trade_arrow gui/sprites/dialog/warning_button_disabled gui/sprites/dialog/warning_button_highlighted +gui/sprites/dialog/warning_button +gui/sprites/friends/accept_highlighted +gui/sprites/friends/accept +gui/sprites/friends/background_dark +gui/sprites/friends/background_dark.mcmeta +gui/sprites/friends/background +gui/sprites/friends/background.mcmeta +gui/sprites/friends/button_disabled +gui/sprites/friends/button_disabled.mcmeta +gui/sprites/friends/button_highlighted +gui/sprites/friends/button_highlighted.mcmeta +gui/sprites/friends/button +gui/sprites/friends/button.mcmeta +gui/sprites/friends/cancel +gui/sprites/friends/friends +gui/sprites/friends/illustrations_00 +gui/sprites/friends/list_separator_top +gui/sprites/friends/loading +gui/sprites/friends/loading.mcmeta +gui/sprites/friends/reject_highlighted +gui/sprites/friends/reject +gui/sprites/friends/remove +gui/sprites/friends/send_request +gui/sprites/friends/toast_background +gui/sprites/friends/toast_background.mcmeta gui/sprites/gamemode_switcher/selection gui/sprites/gamemode_switcher/slot -gui/sprites/hud/air gui/sprites/hud/air_bursting gui/sprites/hud/air_empty +gui/sprites/hud/air gui/sprites/hud/armor_empty gui/sprites/hud/armor_full gui/sprites/hud/armor_half -gui/sprites/hud/crosshair gui/sprites/hud/crosshair_attack_indicator_background gui/sprites/hud/crosshair_attack_indicator_full gui/sprites/hud/crosshair_attack_indicator_progress -gui/sprites/hud/effect_background +gui/sprites/hud/crosshair gui/sprites/hud/effect_background_ambient +gui/sprites/hud/effect_background gui/sprites/hud/experience_bar_background gui/sprites/hud/experience_bar_progress -gui/sprites/hud/food_empty gui/sprites/hud/food_empty_hunger -gui/sprites/hud/food_full +gui/sprites/hud/food_empty gui/sprites/hud/food_full_hunger -gui/sprites/hud/food_half +gui/sprites/hud/food_full gui/sprites/hud/food_half_hunger -gui/sprites/hud/heart/absorbing_full +gui/sprites/hud/food_half gui/sprites/hud/heart/absorbing_full_blinking -gui/sprites/hud/heart/absorbing_half +gui/sprites/hud/heart/absorbing_full gui/sprites/hud/heart/absorbing_half_blinking -gui/sprites/hud/heart/absorbing_hardcore_full +gui/sprites/hud/heart/absorbing_half gui/sprites/hud/heart/absorbing_hardcore_full_blinking -gui/sprites/hud/heart/absorbing_hardcore_half +gui/sprites/hud/heart/absorbing_hardcore_full gui/sprites/hud/heart/absorbing_hardcore_half_blinking -gui/sprites/hud/heart/container +gui/sprites/hud/heart/absorbing_hardcore_half gui/sprites/hud/heart/container_blinking -gui/sprites/hud/heart/container_hardcore gui/sprites/hud/heart/container_hardcore_blinking -gui/sprites/hud/heart/frozen_full +gui/sprites/hud/heart/container_hardcore +gui/sprites/hud/heart/container gui/sprites/hud/heart/frozen_full_blinking -gui/sprites/hud/heart/frozen_half +gui/sprites/hud/heart/frozen_full gui/sprites/hud/heart/frozen_half_blinking -gui/sprites/hud/heart/frozen_hardcore_full +gui/sprites/hud/heart/frozen_half gui/sprites/hud/heart/frozen_hardcore_full_blinking -gui/sprites/hud/heart/frozen_hardcore_half +gui/sprites/hud/heart/frozen_hardcore_full gui/sprites/hud/heart/frozen_hardcore_half_blinking -gui/sprites/hud/heart/full +gui/sprites/hud/heart/frozen_hardcore_half gui/sprites/hud/heart/full_blinking -gui/sprites/hud/heart/half +gui/sprites/hud/heart/full gui/sprites/hud/heart/half_blinking -gui/sprites/hud/heart/hardcore_full +gui/sprites/hud/heart/half gui/sprites/hud/heart/hardcore_full_blinking -gui/sprites/hud/heart/hardcore_half +gui/sprites/hud/heart/hardcore_full gui/sprites/hud/heart/hardcore_half_blinking -gui/sprites/hud/heart/poisoned_full +gui/sprites/hud/heart/hardcore_half gui/sprites/hud/heart/poisoned_full_blinking -gui/sprites/hud/heart/poisoned_half +gui/sprites/hud/heart/poisoned_full gui/sprites/hud/heart/poisoned_half_blinking -gui/sprites/hud/heart/poisoned_hardcore_full +gui/sprites/hud/heart/poisoned_half gui/sprites/hud/heart/poisoned_hardcore_full_blinking -gui/sprites/hud/heart/poisoned_hardcore_half +gui/sprites/hud/heart/poisoned_hardcore_full gui/sprites/hud/heart/poisoned_hardcore_half_blinking +gui/sprites/hud/heart/poisoned_hardcore_half gui/sprites/hud/heart/vehicle_container gui/sprites/hud/heart/vehicle_full gui/sprites/hud/heart/vehicle_half -gui/sprites/hud/heart/withered_full gui/sprites/hud/heart/withered_full_blinking -gui/sprites/hud/heart/withered_half +gui/sprites/hud/heart/withered_full gui/sprites/hud/heart/withered_half_blinking -gui/sprites/hud/heart/withered_hardcore_full +gui/sprites/hud/heart/withered_half gui/sprites/hud/heart/withered_hardcore_full_blinking -gui/sprites/hud/heart/withered_hardcore_half +gui/sprites/hud/heart/withered_hardcore_full gui/sprites/hud/heart/withered_hardcore_half_blinking -gui/sprites/hud/hotbar +gui/sprites/hud/heart/withered_hardcore_half gui/sprites/hud/hotbar_attack_indicator_background gui/sprites/hud/hotbar_attack_indicator_progress gui/sprites/hud/hotbar_offhand_left gui/sprites/hud/hotbar_offhand_right +gui/sprites/hud/hotbar gui/sprites/hud/hotbar_selection gui/sprites/hud/jump_bar_background gui/sprites/hud/jump_bar_cooldown gui/sprites/hud/jump_bar_progress gui/sprites/hud/locator_bar_arrow_down +gui/sprites/hud/locator_bar_arrow_down.mcmeta gui/sprites/hud/locator_bar_arrow_up +gui/sprites/hud/locator_bar_arrow_up.mcmeta gui/sprites/hud/locator_bar_background +gui/sprites/hud/locator_bar_background.mcmeta gui/sprites/hud/locator_bar_dot/bowtie gui/sprites/hud/locator_bar_dot/default_0 gui/sprites/hud/locator_bar_dot/default_1 @@ -2238,9 +2702,10 @@ gui/sprites/icon/draft_report gui/sprites/icon/info gui/sprites/icon/invite gui/sprites/icon/language -gui/sprites/icon/link gui/sprites/icon/link_highlighted +gui/sprites/icon/link gui/sprites/icon/music_notes +gui/sprites/icon/music_notes.mcmeta gui/sprites/icon/new_realm gui/sprites/icon/news gui/sprites/icon/ping_1 @@ -2251,50 +2716,57 @@ gui/sprites/icon/ping_5 gui/sprites/icon/ping_unknown gui/sprites/icon/search gui/sprites/icon/trial_available +gui/sprites/icon/trial_available.mcmeta gui/sprites/icon/unseen_notification -gui/sprites/icon/video_link gui/sprites/icon/video_link_highlighted +gui/sprites/icon/video_link gui/sprites/notification/1 gui/sprites/notification/2 gui/sprites/notification/3 gui/sprites/notification/4 gui/sprites/notification/5 gui/sprites/notification/more -gui/sprites/pending_invite/accept +gui/sprites/pause_menu/bug +gui/sprites/pause_menu/player_reporting +gui/sprites/pause_menu/social_interactions gui/sprites/pending_invite/accept_highlighted -gui/sprites/pending_invite/reject +gui/sprites/pending_invite/accept gui/sprites/pending_invite/reject_highlighted +gui/sprites/pending_invite/reject gui/sprites/player_list/make_operator gui/sprites/player_list/remove_operator gui/sprites/player_list/remove_player gui/sprites/popup/background +gui/sprites/popup/background.mcmeta gui/sprites/realm_status/closed gui/sprites/realm_status/expired gui/sprites/realm_status/expires_soon +gui/sprites/realm_status/expires_soon.mcmeta gui/sprites/realm_status/open -gui/sprites/recipe_book/button gui/sprites/recipe_book/button_highlighted -gui/sprites/recipe_book/crafting_overlay -gui/sprites/recipe_book/crafting_overlay_disabled +gui/sprites/recipe_book/button gui/sprites/recipe_book/crafting_overlay_disabled_highlighted +gui/sprites/recipe_book/crafting_overlay_disabled gui/sprites/recipe_book/crafting_overlay_highlighted -gui/sprites/recipe_book/filter_disabled +gui/sprites/recipe_book/crafting_overlay gui/sprites/recipe_book/filter_disabled_highlighted -gui/sprites/recipe_book/filter_enabled +gui/sprites/recipe_book/filter_disabled gui/sprites/recipe_book/filter_enabled_highlighted -gui/sprites/recipe_book/furnace_filter_disabled +gui/sprites/recipe_book/filter_enabled gui/sprites/recipe_book/furnace_filter_disabled_highlighted -gui/sprites/recipe_book/furnace_filter_enabled +gui/sprites/recipe_book/furnace_filter_disabled gui/sprites/recipe_book/furnace_filter_enabled_highlighted -gui/sprites/recipe_book/furnace_overlay -gui/sprites/recipe_book/furnace_overlay_disabled +gui/sprites/recipe_book/furnace_filter_enabled gui/sprites/recipe_book/furnace_overlay_disabled_highlighted +gui/sprites/recipe_book/furnace_overlay_disabled gui/sprites/recipe_book/furnace_overlay_highlighted +gui/sprites/recipe_book/furnace_overlay gui/sprites/recipe_book/overlay_recipe -gui/sprites/recipe_book/page_backward +gui/sprites/recipe_book/overlay_recipe.mcmeta gui/sprites/recipe_book/page_backward_highlighted -gui/sprites/recipe_book/page_forward +gui/sprites/recipe_book/page_backward gui/sprites/recipe_book/page_forward_highlighted +gui/sprites/recipe_book/page_forward gui/sprites/recipe_book/slot_craftable gui/sprites/recipe_book/slot_many_craftable gui/sprites/recipe_book/slot_many_uncraftable @@ -2302,12 +2774,12 @@ gui/sprites/recipe_book/slot_uncraftable gui/sprites/recipe_book/tab gui/sprites/recipe_book/tab_selected gui/sprites/server_list/incompatible -gui/sprites/server_list/join gui/sprites/server_list/join_highlighted -gui/sprites/server_list/move_down +gui/sprites/server_list/join gui/sprites/server_list/move_down_highlighted -gui/sprites/server_list/move_up +gui/sprites/server_list/move_down gui/sprites/server_list/move_up_highlighted +gui/sprites/server_list/move_up gui/sprites/server_list/ping_1 gui/sprites/server_list/ping_2 gui/sprites/server_list/ping_3 @@ -2320,13 +2792,14 @@ gui/sprites/server_list/pinging_4 gui/sprites/server_list/pinging_5 gui/sprites/server_list/unreachable gui/sprites/social_interactions/background -gui/sprites/social_interactions/mute_button +gui/sprites/social_interactions/background.mcmeta gui/sprites/social_interactions/mute_button_highlighted -gui/sprites/social_interactions/report_button +gui/sprites/social_interactions/mute_button gui/sprites/social_interactions/report_button_disabled gui/sprites/social_interactions/report_button_highlighted -gui/sprites/social_interactions/unmute_button +gui/sprites/social_interactions/report_button gui/sprites/social_interactions/unmute_button_highlighted +gui/sprites/social_interactions/unmute_button gui/sprites/spectator/close gui/sprites/spectator/scroll_left gui/sprites/spectator/scroll_right @@ -2345,65 +2818,86 @@ gui/sprites/toast/advancement gui/sprites/toast/mouse gui/sprites/toast/movement_keys gui/sprites/toast/now_playing -gui/sprites/toast/recipe +gui/sprites/toast/now_playing.mcmeta gui/sprites/toast/recipe_book +gui/sprites/toast/recipe gui/sprites/toast/right_click gui/sprites/toast/social_interactions gui/sprites/toast/system +gui/sprites/toast/system.mcmeta gui/sprites/toast/tree gui/sprites/toast/tutorial +gui/sprites/toast/tutorial.mcmeta gui/sprites/toast/wooden_planks gui/sprites/tooltip/background +gui/sprites/tooltip/background.mcmeta gui/sprites/tooltip/frame -gui/sprites/transferable_list/move_down +gui/sprites/tooltip/frame.mcmeta gui/sprites/transferable_list/move_down_highlighted -gui/sprites/transferable_list/move_up +gui/sprites/transferable_list/move_down gui/sprites/transferable_list/move_up_highlighted -gui/sprites/transferable_list/select +gui/sprites/transferable_list/move_up gui/sprites/transferable_list/select_highlighted -gui/sprites/transferable_list/unselect +gui/sprites/transferable_list/select gui/sprites/transferable_list/unselect_highlighted -gui/sprites/widget/button +gui/sprites/transferable_list/unselect gui/sprites/widget/button_disabled +gui/sprites/widget/button_disabled.mcmeta gui/sprites/widget/button_highlighted -gui/sprites/widget/checkbox +gui/sprites/widget/button_highlighted.mcmeta +gui/sprites/widget/button +gui/sprites/widget/button.mcmeta gui/sprites/widget/checkbox_highlighted -gui/sprites/widget/checkbox_selected +gui/sprites/widget/checkbox gui/sprites/widget/checkbox_selected_highlighted -gui/sprites/widget/cross_button +gui/sprites/widget/checkbox_selected gui/sprites/widget/cross_button_highlighted -gui/sprites/widget/locked_button +gui/sprites/widget/cross_button gui/sprites/widget/locked_button_disabled gui/sprites/widget/locked_button_highlighted -gui/sprites/widget/page_backward +gui/sprites/widget/locked_button gui/sprites/widget/page_backward_highlighted -gui/sprites/widget/page_forward +gui/sprites/widget/page_backward gui/sprites/widget/page_forward_highlighted +gui/sprites/widget/page_forward gui/sprites/widget/preedit -gui/sprites/widget/scroller +gui/sprites/widget/preedit.mcmeta gui/sprites/widget/scroller_background -gui/sprites/widget/slider -gui/sprites/widget/slider_handle +gui/sprites/widget/scroller_background.mcmeta +gui/sprites/widget/scroller +gui/sprites/widget/scroller.mcmeta gui/sprites/widget/slider_handle_highlighted +gui/sprites/widget/slider_handle_highlighted.mcmeta +gui/sprites/widget/slider_handle +gui/sprites/widget/slider_handle.mcmeta gui/sprites/widget/slider_highlighted +gui/sprites/widget/slider_highlighted.mcmeta +gui/sprites/widget/slider +gui/sprites/widget/slider.mcmeta gui/sprites/widget/slot_frame -gui/sprites/widget/tab gui/sprites/widget/tab_highlighted -gui/sprites/widget/tab_selected +gui/sprites/widget/tab_highlighted.mcmeta +gui/sprites/widget/tab +gui/sprites/widget/tab.mcmeta gui/sprites/widget/tab_selected_highlighted -gui/sprites/widget/text_field +gui/sprites/widget/tab_selected_highlighted.mcmeta +gui/sprites/widget/tab_selected +gui/sprites/widget/tab_selected.mcmeta gui/sprites/widget/text_field_highlighted -gui/sprites/widget/unlocked_button +gui/sprites/widget/text_field_highlighted.mcmeta +gui/sprites/widget/text_field +gui/sprites/widget/text_field.mcmeta gui/sprites/widget/unlocked_button_disabled gui/sprites/widget/unlocked_button_highlighted -gui/sprites/world_list/error +gui/sprites/widget/unlocked_button gui/sprites/world_list/error_highlighted -gui/sprites/world_list/join +gui/sprites/world_list/error gui/sprites/world_list/join_highlighted -gui/sprites/world_list/marked_join +gui/sprites/world_list/join gui/sprites/world_list/marked_join_highlighted -gui/sprites/world_list/warning +gui/sprites/world_list/marked_join gui/sprites/world_list/warning_highlighted +gui/sprites/world_list/warning gui/tab_header_background gui/title/background/panorama_0 gui/title/background/panorama_1 @@ -2413,10 +2907,14 @@ gui/title/background/panorama_4 gui/title/background/panorama_5 gui/title/background/panorama_overlay gui/title/edition +gui/title/edition.mcmeta gui/title/minceraft +gui/title/minceraft.mcmeta gui/title/minecraft +gui/title/minecraft.mcmeta gui/title/mojangstudios gui/title/realms +gui/title/realms.mcmeta item/acacia_boat item/acacia_chest_boat item/acacia_door @@ -2435,16 +2933,16 @@ item/arrow item/axolotl_bucket item/axolotl_spawn_egg item/baked_potato -item/bamboo item/bamboo_chest_raft item/bamboo_door item/bamboo_hanging_sign +item/bamboo item/bamboo_raft item/bamboo_sign item/barrier item/bat_spawn_egg -item/bee_spawn_egg item/beef +item/bee_spawn_egg item/beetroot item/beetroot_seeds item/beetroot_soup @@ -2454,9 +2952,9 @@ item/birch_chest_boat item/birch_door item/birch_hanging_sign item/birch_sign -item/black_bundle item/black_bundle_open_back item/black_bundle_open_front +item/black_bundle item/black_candle item/black_dye item/black_harness @@ -2464,50 +2962,52 @@ item/blade_pottery_sherd item/blaze_powder item/blaze_rod item/blaze_spawn_egg -item/blue_bundle item/blue_bundle_open_back item/blue_bundle_open_front +item/blue_bundle item/blue_candle item/blue_dye item/blue_egg item/blue_harness item/bogged_spawn_egg item/bolt_armor_trim_smithing_template -item/bone item/bone_meal +item/bone item/book item/bordure_indented_banner_pattern +item/bowl item/bow item/bow_pulling_0 item/bow_pulling_1 item/bow_pulling_2 -item/bowl item/bread item/breeze_rod item/breeze_spawn_egg item/brewer_pottery_sherd item/brewing_stand item/brick -item/brown_bundle +item/broken_elytra item/brown_bundle_open_back item/brown_bundle_open_front +item/brown_bundle item/brown_candle item/brown_dye item/brown_egg item/brown_harness item/brush item/bucket -item/bundle +item/bundle_filled item/bundle_open_back item/bundle_open_front +item/bundle item/burn_pottery_sherd item/cake item/camel_husk_spawn_egg item/camel_spawn_egg item/campfire item/candle -item/carrot item/carrot_on_a_stick +item/carrot item/cat_spawn_egg item/cauldron item/cave_spider_spawn_egg @@ -2515,6 +3015,7 @@ item/chainmail_boots item/chainmail_chestplate item/chainmail_helmet item/chainmail_leggings +item/chain item/charcoal item/cherry_boat item/cherry_chest_boat @@ -2593,8 +3094,8 @@ item/clock_63 item/coal item/coast_armor_trim_smithing_template item/cocoa_beans -item/cod item/cod_bucket +item/cod item/cod_spawn_egg item/command_block_minecart item/comparator @@ -2654,8 +3155,8 @@ item/copper_nautilus_armor item/copper_nugget item/copper_pickaxe item/copper_shovel -item/copper_spear item/copper_spear_in_hand +item/copper_spear item/copper_sword item/cow_spawn_egg item/creaking_spawn_egg @@ -2670,9 +3171,9 @@ item/crossbow_pulling_0 item/crossbow_pulling_1 item/crossbow_pulling_2 item/crossbow_standby -item/cyan_bundle item/cyan_bundle_open_back item/cyan_bundle_open_front +item/cyan_bundle item/cyan_candle item/cyan_dye item/cyan_harness @@ -2682,7 +3183,6 @@ item/dark_oak_chest_boat item/dark_oak_door item/dark_oak_hanging_sign item/dark_oak_sign -item/diamond item/diamond_axe item/diamond_boots item/diamond_chestplate @@ -2692,9 +3192,10 @@ item/diamond_horse_armor item/diamond_leggings item/diamond_nautilus_armor item/diamond_pickaxe +item/diamond item/diamond_shovel -item/diamond_spear item/diamond_spear_in_hand +item/diamond_spear item/diamond_sword item/disc_fragment_5 item/dolphin_spawn_egg @@ -2706,16 +3207,35 @@ item/dune_armor_trim_smithing_template item/echo_shard item/egg item/elder_guardian_spawn_egg -item/elytra item/elytra_broken +item/elytra item/emerald +item/empty_armor_slot_boots +item/empty_armor_slot_chestplate +item/empty_armor_slot_helmet +item/empty_armor_slot_leggings +item/empty_armor_slot_shield +item/empty_slot_amethyst_shard +item/empty_slot_axe +item/empty_slot_diamond +item/empty_slot_emerald +item/empty_slot_hoe +item/empty_slot_ingot +item/empty_slot_lapis_lazuli +item/empty_slot_pickaxe +item/empty_slot_quartz +item/empty_slot_redstone_dust +item/empty_slot_shovel +item/empty_slot_smithing_template_armor_trim +item/empty_slot_smithing_template_netherite_upgrade +item/empty_slot_sword item/enchanted_book item/end_crystal item/ender_dragon_spawn_egg item/ender_eye -item/ender_pearl item/enderman_spawn_egg item/endermite_spawn_egg +item/ender_pearl item/evoker_spawn_egg item/experience_bottle item/explorer_pottery_sherd @@ -2726,22 +3246,22 @@ item/eye_armor_trim_smithing_template item/feather item/fermented_spider_eye item/field_masoned_banner_pattern -item/filled_map item/filled_map_markings +item/filled_map item/fire_charge item/firefly_bush item/firework_rocket -item/firework_star item/firework_star_overlay -item/fishing_rod +item/firework_star item/fishing_rod_cast -item/flint +item/fishing_rod item/flint_and_steel +item/flint item/flow_armor_trim_smithing_template item/flow_banner_pattern -item/flow_pottery_sherd item/flower_banner_pattern item/flower_pot +item/flow_pottery_sherd item/fox_spawn_egg item/friend_pottery_sherd item/frog_spawn_egg @@ -2758,8 +3278,6 @@ item/glow_squid_spawn_egg item/glowstone_dust item/goat_horn item/goat_spawn_egg -item/gold_ingot -item/gold_nugget item/golden_apple item/golden_axe item/golden_boots @@ -2772,18 +3290,20 @@ item/golden_leggings item/golden_nautilus_armor item/golden_pickaxe item/golden_shovel -item/golden_spear item/golden_spear_in_hand +item/golden_spear item/golden_sword -item/gray_bundle +item/gold_ingot +item/gold_nugget item/gray_bundle_open_back item/gray_bundle_open_front +item/gray_bundle item/gray_candle item/gray_dye item/gray_harness -item/green_bundle item/green_bundle_open_back item/green_bundle_open_front +item/green_bundle item/green_candle item/green_dye item/green_harness @@ -2792,14 +3312,14 @@ item/gunpowder item/guster_banner_pattern item/guster_pottery_sherd item/happy_ghast_spawn_egg +item/heartbreak_pottery_sherd item/heart_of_the_sea item/heart_pottery_sherd -item/heartbreak_pottery_sherd item/hoglin_spawn_egg item/honey_bottle item/honeycomb -item/hopper item/hopper_minecart +item/hopper item/horse_spawn_egg item/host_armor_trim_smithing_template item/howl_pottery_sherd @@ -2820,8 +3340,8 @@ item/iron_nautilus_armor item/iron_nugget item/iron_pickaxe item/iron_shovel -item/iron_spear item/iron_spear_in_hand +item/iron_spear item/iron_sword item/item_frame item/jungle_boat @@ -2836,18 +3356,17 @@ item/lapis_lazuli item/lava_bucket item/lead item/leaf_litter -item/leather -item/leather_boots item/leather_boots_overlay -item/leather_chestplate +item/leather_boots item/leather_chestplate_overlay -item/leather_helmet +item/leather_chestplate item/leather_helmet_overlay -item/leather_horse_armor +item/leather_helmet item/leather_horse_armor_overlay -item/leather_leggings +item/leather_horse_armor item/leather_leggings_overlay -item/light +item/leather_leggings +item/leather item/light_00 item/light_01 item/light_02 @@ -2864,30 +3383,31 @@ item/light_12 item/light_13 item/light_14 item/light_15 -item/light_blue_bundle item/light_blue_bundle_open_back item/light_blue_bundle_open_front +item/light_blue_bundle item/light_blue_candle item/light_blue_dye item/light_blue_harness -item/light_gray_bundle item/light_gray_bundle_open_back item/light_gray_bundle_open_front +item/light_gray_bundle item/light_gray_candle item/light_gray_dye item/light_gray_harness -item/lime_bundle +item/light item/lime_bundle_open_back item/lime_bundle_open_front +item/lime_bundle item/lime_candle item/lime_dye item/lime_harness item/lingering_potion item/llama_spawn_egg item/mace -item/magenta_bundle item/magenta_bundle_open_back item/magenta_bundle_open_front +item/magenta_bundle item/magenta_candle item/magenta_dye item/magenta_harness @@ -2914,10 +3434,11 @@ item/music_disc_11 item/music_disc_13 item/music_disc_5 item/music_disc_blocks +item/music_disc_bounce item/music_disc_cat item/music_disc_chirp -item/music_disc_creator item/music_disc_creator_music_box +item/music_disc_creator item/music_disc_far item/music_disc_lava_chicken item/music_disc_mall @@ -2936,9 +3457,6 @@ item/name_tag item/nautilus_shell item/nautilus_spawn_egg item/nether_brick -item/nether_sprouts -item/nether_star -item/nether_wart item/netherite_axe item/netherite_boots item/netherite_chestplate @@ -2951,10 +3469,13 @@ item/netherite_nautilus_armor item/netherite_pickaxe item/netherite_scrap item/netherite_shovel -item/netherite_spear item/netherite_spear_in_hand +item/netherite_spear item/netherite_sword item/netherite_upgrade_smithing_template +item/nether_sprouts +item/nether_star +item/nether_wart item/oak_boat item/oak_chest_boat item/oak_door @@ -2963,9 +3484,9 @@ item/oak_sign item/ocelot_spawn_egg item/ominous_bottle item/ominous_trial_key -item/orange_bundle item/orange_bundle_open_back item/orange_bundle_open_front +item/orange_bundle item/orange_candle item/orange_dye item/orange_harness @@ -2984,14 +3505,14 @@ item/parched_spawn_egg item/parrot_spawn_egg item/phantom_membrane item/phantom_spawn_egg -item/pig_spawn_egg item/piglin_banner_pattern item/piglin_brute_spawn_egg item/piglin_spawn_egg +item/pig_spawn_egg item/pillager_spawn_egg -item/pink_bundle item/pink_bundle_open_back item/pink_bundle_open_front +item/pink_bundle item/pink_candle item/pink_dye item/pink_harness @@ -3005,27 +3526,27 @@ item/polar_bear_spawn_egg item/popped_chorus_fruit item/porkchop item/potato -item/potion item/potion_overlay +item/potion item/powder_snow_bucket item/prismarine_crystals item/prismarine_shard item/prize_pottery_sherd -item/pufferfish item/pufferfish_bucket +item/pufferfish item/pufferfish_spawn_egg item/pumpkin_pie item/pumpkin_seeds -item/purple_bundle item/purple_bundle_open_back item/purple_bundle_open_front +item/purple_bundle item/purple_candle item/purple_dye item/purple_harness item/quartz -item/rabbit item/rabbit_foot item/rabbit_hide +item/rabbit item/rabbit_spawn_egg item/rabbit_stew item/raiser_armor_trim_smithing_template @@ -3065,9 +3586,9 @@ item/recovery_compass_28 item/recovery_compass_29 item/recovery_compass_30 item/recovery_compass_31 -item/red_bundle item/red_bundle_open_back item/red_bundle_open_front +item/red_bundle item/red_candle item/red_dye item/red_harness @@ -3078,12 +3599,12 @@ item/resin_clump item/rib_armor_trim_smithing_template item/rotten_flesh item/saddle -item/salmon item/salmon_bucket +item/salmon item/salmon_spawn_egg item/scrape_pottery_sherd -item/sea_pickle item/seagrass +item/sea_pickle item/sentry_armor_trim_smithing_template item/shaper_armor_trim_smithing_template item/sheaf_pottery_sherd @@ -3104,10 +3625,12 @@ item/sniffer_egg item/sniffer_spawn_egg item/snort_pottery_sherd item/snout_armor_trim_smithing_template -item/snow_golem_spawn_egg item/snowball +item/snow_golem_spawn_egg item/soul_campfire item/soul_lantern +item/spawn_egg_overlay +item/spawn_egg item/spectral_arrow item/spider_eye item/spider_spawn_egg @@ -3118,23 +3641,26 @@ item/spruce_chest_boat item/spruce_door item/spruce_hanging_sign item/spruce_sign -item/spyglass item/spyglass_model +item/spyglass item/squid_spawn_egg item/stick item/stone_axe item/stone_hoe item/stone_pickaxe item/stone_shovel -item/stone_spear item/stone_spear_in_hand +item/stone_spear item/stone_sword item/stray_spawn_egg item/strider_spawn_egg item/string item/structure_void -item/sugar item/sugar_cane +item/sugar +item/sulfur_cube_bucket +item/sulfur_cube_spawn_egg +item/sulfur_spike item/suspicious_stew item/sweet_berries item/tadpole_bucket @@ -3148,8 +3674,8 @@ item/totem_of_undying item/trader_llama_spawn_egg item/trial_key item/trident -item/tropical_fish item/tropical_fish_bucket +item/tropical_fish item/tropical_fish_spawn_egg item/turtle_egg item/turtle_helmet @@ -3173,9 +3699,9 @@ item/weathered_copper_door item/weathered_copper_lantern item/wheat item/wheat_seeds -item/white_bundle item/white_bundle_open_back item/white_bundle_open_front +item/white_bundle item/white_candle item/white_dye item/white_harness @@ -3185,21 +3711,21 @@ item/wind_charge item/witch_spawn_egg item/wither_skeleton_spawn_egg item/wither_spawn_egg -item/wolf_armor item/wolf_armor_overlay +item/wolf_armor item/wolf_spawn_egg item/wooden_axe item/wooden_hoe item/wooden_pickaxe item/wooden_shovel -item/wooden_spear item/wooden_spear_in_hand +item/wooden_spear item/wooden_sword item/writable_book item/written_book -item/yellow_bundle item/yellow_bundle_open_back item/yellow_bundle_open_front +item/yellow_bundle item/yellow_candle item/yellow_dye item/yellow_harness @@ -3227,9 +3753,9 @@ map/decorations/ocean_monument map/decorations/orange_banner map/decorations/pink_banner map/decorations/plains_village -map/decorations/player map/decorations/player_off_limits map/decorations/player_off_map +map/decorations/player map/decorations/purple_banner map/decorations/red_banner map/decorations/red_marker @@ -3244,21 +3770,32 @@ map/decorations/trial_chambers map/decorations/white_banner map/decorations/woodland_mansion map/decorations/yellow_banner -map/map_background map/map_background_checkerboard +map/map_background misc/credits_vignette +misc/credits_vignette.mcmeta misc/enchanted_glint_armor +misc/enchanted_glint_armor.mcmeta +misc/enchanted_glint_entity +misc/enchanted_glint_entity.mcmeta misc/enchanted_glint_item +misc/enchanted_glint_item.mcmeta +misc/enchanted_item_glint.mcmeta misc/forcefield misc/nausea +misc/nausea.mcmeta misc/powder_snow_outline misc/pumpkinblur +misc/pumpkinblur.mcmeta misc/shadow +misc/shadow.mcmeta misc/spyglass_scope misc/underwater misc/unknown_pack misc/unknown_server misc/vignette +misc/vignette.mcmeta +misc/white mob_effect/absorption mob_effect/bad_omen mob_effect/blindness @@ -3299,9 +3836,24 @@ mob_effect/weakness mob_effect/weaving mob_effect/wind_charged mob_effect/wither +models/armor/chainmail_layer_1 +models/armor/chainmail_layer_2 +models/armor/diamond_layer_1 +models/armor/diamond_layer_2 +models/armor/gold_layer_1 +models/armor/gold_layer_2 +models/armor/iron_layer_1 +models/armor/iron_layer_2 +models/armor/leather_layer_1_overlay +models/armor/leather_layer_1 +models/armor/leather_layer_2_overlay +models/armor/leather_layer_2 +models/armor/netherite_layer_1 +models/armor/netherite_layer_2 +models/armor/turtle_layer_1 painting/alban -painting/aztec painting/aztec2 +painting/aztec painting/back painting/backyard painting/baroque @@ -3353,9 +3905,9 @@ painting/wind painting/wither particle/angry particle/big_smoke_0 -particle/big_smoke_1 particle/big_smoke_10 particle/big_smoke_11 +particle/big_smoke_1 particle/big_smoke_2 particle/big_smoke_3 particle/big_smoke_4 @@ -3370,10 +3922,11 @@ particle/bubble_pop_1 particle/bubble_pop_2 particle/bubble_pop_3 particle/bubble_pop_4 +particle/bubble_white particle/cherry_0 -particle/cherry_1 particle/cherry_10 particle/cherry_11 +particle/cherry_1 particle/cherry_2 particle/cherry_3 particle/cherry_4 @@ -3398,13 +3951,13 @@ particle/effect_6 particle/effect_7 particle/enchanted_hit particle/explosion_0 -particle/explosion_1 particle/explosion_10 particle/explosion_11 particle/explosion_12 particle/explosion_13 particle/explosion_14 particle/explosion_15 +particle/explosion_1 particle/explosion_2 particle/explosion_3 particle/explosion_4 @@ -3424,6 +3977,30 @@ particle/generic_4 particle/generic_5 particle/generic_6 particle/generic_7 +particle/geyser_base_01 +particle/geyser_base_02 +particle/geyser_base_03 +particle/geyser_base_04 +particle/geyser_base_05 +particle/geyser_base_06 +particle/geyser_base_07 +particle/geyser_base_08 +particle/geyser_plume_01 +particle/geyser_plume_02 +particle/geyser_plume_03 +particle/geyser_plume_04 +particle/geyser_plume_05 +particle/geyser_plume_06 +particle/geyser_plume_07 +particle/geyser_plume_08 +particle/geyser_poof_01 +particle/geyser_poof_02 +particle/geyser_poof_03 +particle/geyser_poof_04 +particle/geyser_poof_05 +particle/geyser_poof_06 +particle/geyser_poof_07 +particle/geyser_poof_08 particle/glint particle/glitter_0 particle/glitter_1 @@ -3438,9 +4015,9 @@ particle/goldheart_0 particle/goldheart_1 particle/goldheart_2 particle/gust_0 -particle/gust_1 particle/gust_10 particle/gust_11 +particle/gust_1 particle/gust_2 particle/gust_3 particle/gust_4 @@ -3453,9 +4030,9 @@ particle/heart particle/infested particle/lava particle/leaf_0 -particle/leaf_1 particle/leaf_10 particle/leaf_11 +particle/leaf_1 particle/leaf_2 particle/leaf_3 particle/leaf_4 @@ -3466,11 +4043,19 @@ particle/leaf_8 particle/leaf_9 particle/nautilus particle/note +particle/noxious_gas_01 +particle/noxious_gas_02 +particle/noxious_gas_03 +particle/noxious_gas_04 +particle/noxious_gas_05 +particle/noxious_gas_06 +particle/noxious_gas_07 +particle/noxious_gas_08 particle/ominous_spawning particle/pale_oak_0 -particle/pale_oak_1 particle/pale_oak_10 particle/pale_oak_11 +particle/pale_oak_1 particle/pale_oak_2 particle/pale_oak_3 particle/pale_oak_4 @@ -3492,8 +4077,8 @@ particle/sculk_charge_pop_1 particle/sculk_charge_pop_2 particle/sculk_charge_pop_3 particle/sculk_soul_0 -particle/sculk_soul_1 particle/sculk_soul_10 +particle/sculk_soul_1 particle/sculk_soul_2 particle/sculk_soul_3 particle/sculk_soul_4 @@ -3537,13 +4122,13 @@ particle/small_gust_4 particle/small_gust_5 particle/small_gust_6 particle/sonic_boom_0 -particle/sonic_boom_1 particle/sonic_boom_10 particle/sonic_boom_11 particle/sonic_boom_12 particle/sonic_boom_13 particle/sonic_boom_14 particle/sonic_boom_15 +particle/sonic_boom_1 particle/sonic_boom_2 particle/sonic_boom_3 particle/sonic_boom_4 @@ -3553,8 +4138,8 @@ particle/sonic_boom_7 particle/sonic_boom_8 particle/sonic_boom_9 particle/soul_0 -particle/soul_1 particle/soul_10 +particle/soul_1 particle/soul_2 particle/soul_3 particle/soul_4 @@ -3584,6 +4169,7 @@ particle/splash_0 particle/splash_1 particle/splash_2 particle/splash_3 +particle/sulfur_cube_goo particle/sweep_0 particle/sweep_1 particle/sweep_2 @@ -3605,19 +4191,20 @@ particle/trial_spawner_detection_ominous_3 particle/trial_spawner_detection_ominous_4 particle/vault_connection particle/vibration +particle/vibration.mcmeta trims/color_palettes/amethyst -trims/color_palettes/copper trims/color_palettes/copper_darker -trims/color_palettes/diamond +trims/color_palettes/copper trims/color_palettes/diamond_darker +trims/color_palettes/diamond trims/color_palettes/emerald -trims/color_palettes/gold trims/color_palettes/gold_darker -trims/color_palettes/iron +trims/color_palettes/gold trims/color_palettes/iron_darker +trims/color_palettes/iron trims/color_palettes/lapis -trims/color_palettes/netherite trims/color_palettes/netherite_darker +trims/color_palettes/netherite trims/color_palettes/quartz trims/color_palettes/redstone trims/color_palettes/resin @@ -3628,18 +4215,6 @@ trims/entity/humanoid/dune trims/entity/humanoid/eye trims/entity/humanoid/flow trims/entity/humanoid/host -trims/entity/humanoid/raiser -trims/entity/humanoid/rib -trims/entity/humanoid/sentry -trims/entity/humanoid/shaper -trims/entity/humanoid/silence -trims/entity/humanoid/snout -trims/entity/humanoid/spire -trims/entity/humanoid/tide -trims/entity/humanoid/vex -trims/entity/humanoid/ward -trims/entity/humanoid/wayfinder -trims/entity/humanoid/wild trims/entity/humanoid_leggings/bolt trims/entity/humanoid_leggings/coast trims/entity/humanoid_leggings/dune @@ -3658,7 +4233,55 @@ trims/entity/humanoid_leggings/vex trims/entity/humanoid_leggings/ward trims/entity/humanoid_leggings/wayfinder trims/entity/humanoid_leggings/wild +trims/entity/humanoid/raiser +trims/entity/humanoid/rib +trims/entity/humanoid/sentry +trims/entity/humanoid/shaper +trims/entity/humanoid/silence +trims/entity/humanoid/snout +trims/entity/humanoid/spire +trims/entity/humanoid/tide +trims/entity/humanoid/vex +trims/entity/humanoid/ward +trims/entity/humanoid/wayfinder +trims/entity/humanoid/wild trims/items/boots_trim trims/items/chestplate_trim trims/items/helmet_trim trims/items/leggings_trim +trims/models/armor/bolt_leggings +trims/models/armor/bolt +trims/models/armor/coast_leggings +trims/models/armor/coast +trims/models/armor/dune_leggings +trims/models/armor/dune +trims/models/armor/eye_leggings +trims/models/armor/eye +trims/models/armor/flow_leggings +trims/models/armor/flow +trims/models/armor/host_leggings +trims/models/armor/host +trims/models/armor/raiser_leggings +trims/models/armor/raiser +trims/models/armor/rib_leggings +trims/models/armor/rib +trims/models/armor/sentry_leggings +trims/models/armor/sentry +trims/models/armor/shaper_leggings +trims/models/armor/shaper +trims/models/armor/silence_leggings +trims/models/armor/silence +trims/models/armor/snout_leggings +trims/models/armor/snout +trims/models/armor/spire_leggings +trims/models/armor/spire +trims/models/armor/tide_leggings +trims/models/armor/tide +trims/models/armor/vex_leggings +trims/models/armor/vex +trims/models/armor/ward_leggings +trims/models/armor/ward +trims/models/armor/wayfinder_leggings +trims/models/armor/wayfinder +trims/models/armor/wild_leggings +trims/models/armor/wild From bf1c30be918f2eca32576e1614bcba9c22268484 Mon Sep 17 00:00:00 2001 From: misieur Date: Wed, 19 Aug 2026 21:45:28 +0200 Subject: [PATCH 19/20] Ultra preset --- packobf/src/options.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packobf/src/options.rs b/packobf/src/options.rs index 8a938a3..316fb6a 100644 --- a/packobf/src/options.rs +++ b/packobf/src/options.rs @@ -29,6 +29,7 @@ pub enum Preset { Fast, Normal, Best, + Ultra, } impl Options { @@ -71,6 +72,18 @@ impl Options { pub fn best() -> Self { Self { compression: Compression::Best, + shader_compression: ShaderCompression::None, + rename_files: true, + block_unzipping: true, + corrupt_png_files: true, + num_threads: None, + target_version: None, + } + } + + pub fn ultra() -> Self { + Self { + compression: Compression::Ultra, shader_compression: ShaderCompression::MinifyAndObfuscate, rename_files: true, block_unzipping: true, @@ -86,6 +99,7 @@ impl Options { Preset::Fast => Self::fast(), Preset::Normal => Self::normal(), Preset::Best => Self::best(), + Preset::Ultra => Self::ultra(), } } } From ba6d7a896f6a62ec837a33144c5fbdb984030978 Mon Sep 17 00:00:00 2001 From: misieur Date: Wed, 19 Aug 2026 21:46:15 +0200 Subject: [PATCH 20/20] [ci skip] Add documentation --- README.md | 55 ++------------------------- docs/README.md | 3 ++ docs/dev/EACH_MC_UPDATE.md | 9 +++++ docs/dev/README.md | 3 ++ docs/dev/TODO.md | 3 ++ docs/usage/HOW_TO_USE_LIBRARY_DEVS.md | 53 ++++++++++++++++++++++++++ docs/usage/README.md | 2 + 7 files changed, 77 insertions(+), 51 deletions(-) create mode 100644 docs/README.md create mode 100644 docs/dev/EACH_MC_UPDATE.md create mode 100644 docs/dev/README.md create mode 100644 docs/dev/TODO.md create mode 100644 docs/usage/HOW_TO_USE_LIBRARY_DEVS.md create mode 100644 docs/usage/README.md diff --git a/README.md b/README.md index cc1fdf2..674e48a 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,8 @@ Options: > [!TIP] > Using `--preset` is a good choice when trying PackOBF for the first time, possible values are: `simplest` (fastest), `normal` (balanced), `max` (slowest). -Alternatively, you can use PackOBF in your browser at https://packobf.misieur.me/ however, it will be way slower than the native app -because of internet browser restrictions. +~~Alternatively, you can use PackOBF in your browser at https://packobf.misieur.me/ however, it will be way slower than the native app +because of internet browser restrictions.~~ PackOBF on internet browsers is deprecated. ## List of features @@ -66,58 +66,11 @@ PackOBF is able to parse core shaders, minify them, rename variables and functio which might break your shaders, while `minify` does not. ## License -PackOBF is an open-source software distributed under the MIT license. See [`LICENSE.md`](LICENSE.md) for complete license. +PackOBF is open-source software distributed under the MIT license. See [`LICENSE.md`](LICENSE.md) for complete license. > [!NOTE] > No code from any other project has been "stolen" or used as inspiration, all researches were made using public server resource packs and online resources such as [ImHex](https://github.com/werwolv/imhex). ## How to use the library (for developers) -### Java - -Adding the dependency (Gradle) -###### build.gradle.kts -```kts -repositories { - maven("https://repo.misieur.me/repository") -} - -dependencies { - compileOnly("dev.misieur:packobf:0.2.1") -} -``` - -Using PackOBF -```java -... -import dev.misieur.packobf.PackOBF; -import dev.misieur.packobf.options.Compression; -import dev.misieur.packobf.options.Options; -import dev.misieur.packobf.options.ShaderCompression; -import dev.misieur.packobf.progress.*; -... - byte[] bytes = /* The byte array of your built resource pack readable by any software */; - try { - byte[] output = PackOBF.optimizeZip( // Optimize resource pack and returns the new byte array - bytes, - new Options( // Configure PackOBF - Compression.NORMAL, - ShaderCompression.NONE, - true, - true, - true - ), - (level, message) -> System.out.println(level.name().toUpperCase(Locale.ROOT) + ": " + message), // Message logger - progress -> { // Progress logger (can be used in bossbar for example) - switch (progress) { - case IdleProgress p -> System.out.println("Initializing..."); - case ReadingZipProgress p -> System.out.println("Reading resource pack... " + p.current() + "/" + p.total()); - ... - } - }, - Path.of("path/to/cachefile.bin") // Nullable - ); - } catch (IOException e) { // PackOBF will throw a Java exception if it fails to optimize the resource pack - e.printStackTrace(); - } -``` +See [How to use the library (for developers)](docs/usage/HOW_TO_USE_LIBRARY_DEVS.md) diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..2ee15cf --- /dev/null +++ b/docs/README.md @@ -0,0 +1,3 @@ +# Categories +- [DEVELOPMENT DOC](dev) +- [USER DOC](usage) \ No newline at end of file diff --git a/docs/dev/EACH_MC_UPDATE.md b/docs/dev/EACH_MC_UPDATE.md new file mode 100644 index 0000000..4f18252 --- /dev/null +++ b/docs/dev/EACH_MC_UPDATE.md @@ -0,0 +1,9 @@ +# What to do each Minecraft update +- Update files in [`/packobf/src/minecraft/`](/packobf/src/minecraft/) +- Update each file in [`/packobf/src/resource_pack/files/`](/packobf/src/resource_pack/files/). + Websites that can be useful: + - https://github.com/SpyglassMC/vanilla-mcdoc/tree/main/java/assets Mcdoc specifies which versions add/remove fields + - https://misode.github.io/generators/ Uses Mcdoc with a Web UI + - https://minecraft.wiki/ + - Minecraft release notes +- Update [`/packobf/src/version.rs`](/packobf/src/version.rs) \ No newline at end of file diff --git a/docs/dev/README.md b/docs/dev/README.md new file mode 100644 index 0000000..532e061 --- /dev/null +++ b/docs/dev/README.md @@ -0,0 +1,3 @@ +# Pages +- [What to do on each Minecraft update](EACH_MC_UPDATE.md) +- [TODO](TODO.md) \ No newline at end of file diff --git a/docs/dev/TODO.md b/docs/dev/TODO.md new file mode 100644 index 0000000..ab1d931 --- /dev/null +++ b/docs/dev/TODO.md @@ -0,0 +1,3 @@ +# TODO List +- All TODO comments in code +- GitHub actions \ No newline at end of file diff --git a/docs/usage/HOW_TO_USE_LIBRARY_DEVS.md b/docs/usage/HOW_TO_USE_LIBRARY_DEVS.md new file mode 100644 index 0000000..303b177 --- /dev/null +++ b/docs/usage/HOW_TO_USE_LIBRARY_DEVS.md @@ -0,0 +1,53 @@ +# How to use the library (for developers) + +> [!NOTE] +> You may want to contact me if you want a collaboration to add features specific to your product. + +### Java + +Adding the dependency (Gradle) +###### build.gradle.kts +```kts +repositories { + maven("https://repo.misieur.me/repository") +} + +dependencies { + compileOnly("dev.misieur:packobf:0.2.1") +} +``` + +Using PackOBF +```java +... +import dev.misieur.packobf.PackOBF; +import dev.misieur.packobf.options.Compression; +import dev.misieur.packobf.options.Options; +import dev.misieur.packobf.options.ShaderCompression; +import dev.misieur.packobf.progress.*; +... + byte[] bytes = /* The byte array of your built resource pack readable by any software */; + try { + byte[] output = PackOBF.optimizeZip( // Optimize resource pack and returns the new byte array + bytes, + new Options( // Configure PackOBF + Compression.NORMAL, + ShaderCompression.NONE, + true, + true, + true + ), + (level, message) -> System.out.println(level.name().toUpperCase(Locale.ROOT) + ": " + message), // Message logger + progress -> { // Progress logger (can be used in bossbar for example) + switch (progress) { + case IdleProgress p -> System.out.println("Initializing..."); + case ReadingZipProgress p -> System.out.println("Reading resource pack... " + p.current() + "/" + p.total()); + ... + } + }, + Path.of("path/to/cachefile.bin") // Nullable + ); + } catch (IOException e) { // PackOBF will throw a Java exception if it fails to optimize the resource pack + e.printStackTrace(); + } +``` \ No newline at end of file diff --git a/docs/usage/README.md b/docs/usage/README.md new file mode 100644 index 0000000..9b40412 --- /dev/null +++ b/docs/usage/README.md @@ -0,0 +1,2 @@ +# Pages +- [How to use the library (for developers)](HOW_TO_USE_LIBRARY_DEVS.md) \ No newline at end of file