diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..412cbef --- /dev/null +++ b/.envrc @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# ^ make editor happy + +# +# Use https://direnv.net/ to automatically load the dev shell. +# + +if ! has nix_direnv_version || ! nix_direnv_version 3.0.4; then + source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.0.4/direnvrc" "sha256-DzlYZ33mWF/Gs8DDeyjr8mnVmQGx7ASYqA5WlxwvBG4=" +fi + +watch_file nix/** +watch_file -- **/*.nix +# Adding files to git includes them in a flake +# But it is also a bit much reloading. +# watch_file .git/index .git/HEAD +use flake . --show-trace diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..292fe49 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "stable" diff --git a/shell.nix b/shell.nix index d4ddaeb..85640ef 100644 --- a/shell.nix +++ b/shell.nix @@ -6,6 +6,7 @@ mkShell { direnv rustc cargo + rustfmt python3 python3Packages.beautifulsoup4 python3Packages.requests diff --git a/sniff-packets/.gitignore b/sniff-packets/.gitignore new file mode 100644 index 0000000..9f97022 --- /dev/null +++ b/sniff-packets/.gitignore @@ -0,0 +1 @@ +target/ \ No newline at end of file diff --git a/sniff-packets/Cargo.lock b/sniff-packets/Cargo.lock new file mode 100644 index 0000000..17f1a38 --- /dev/null +++ b/sniff-packets/Cargo.lock @@ -0,0 +1,192 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "craftflow-nbt" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a2d5312462b00f8420ace884a696f243be136ada9f50bf5f3d9858ff0c8e8e" +dependencies = [ + "cesu8", + "serde", + "thiserror", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "flate2" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "miniz_oxide" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +dependencies = [ + "adler2", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rust_mc_proto" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734168f5b9aef1991db4b11c0bcd71c0336b0a5ba98269f0df39b41b8463ac8c" +dependencies = [ + "flate2", + "uuid", +] + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "sniff-packets" +version = "0.1.0" +dependencies = [ + "craftflow-nbt", + "rust_mc_proto", + "serde", + "serde_json", + "uuid", +] + +[[package]] +name = "syn" +version = "2.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "uuid" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" diff --git a/sniff-packets/Cargo.toml b/sniff-packets/Cargo.toml new file mode 100644 index 0000000..742bbbb --- /dev/null +++ b/sniff-packets/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "sniff-packets" +version = "0.1.0" +edition = "2024" + +[dependencies] +rust_mc_proto = "0.1.19" +serde = "1.0.219" +serde_json = "1.0.140" +craftflow-nbt = "2.1.0" +uuid = "1.16.0" \ No newline at end of file diff --git a/sniff-packets/src/main.rs b/sniff-packets/src/main.rs new file mode 100644 index 0000000..67f3194 --- /dev/null +++ b/sniff-packets/src/main.rs @@ -0,0 +1,179 @@ +use std::{fs, io::Read}; + +use craftflow_nbt::DynNBT; +use rust_mc_proto::{prelude::*, write_packet, MCConnTcp, Packet, ProtocolError}; +use uuid::Uuid; + + +pub trait ReadWriteNBT: DataReader + DataWriter { + fn read_nbt(&mut self) -> Result; + fn write_nbt(&mut self, val: &T) -> Result<(), ProtocolError>; +} + +impl ReadWriteNBT for Packet { + fn read_nbt(&mut self) -> Result { + let mut data = Vec::new(); + let pos = self.get_ref().position(); + self.get_mut() + .read_to_end(&mut data) + .map_err(|_| ProtocolError::StringParseError)?; + let (remaining, value) = + craftflow_nbt::from_slice(&data).map_err(|_| ProtocolError::StringParseError)?; + self.get_mut() + .set_position(pos + (data.len() - remaining.len()) as u64); + Ok(value) + } + + fn write_nbt(&mut self, val: &DynNBT) -> Result<(), ProtocolError> { + craftflow_nbt::to_writer(self.get_mut(), val).map_err(|_| ProtocolError::StringParseError)?; + Ok(()) + } +} + + +fn main() -> Result<(), ProtocolError> { + let mut conn = MCConnTcp::connect("localhost:25565").unwrap(); + + conn.write_packet(&Packet::build(0x00, |packet| { + packet.write_varint(770)?; + packet.write_string("localhost")?; + packet.write_unsigned_short(25565)?; + packet.write_varint(2) + })?)?; + + conn.write_packet(&Packet::build(0x00, |packet| { + packet.write_string("TheMixRay")?; + packet.write_uuid(&Uuid::default()) + })?)?; + + loop { + let mut packet = conn.read_packet()?; + + if packet.id() == 0x03 { + let threshold = packet.read_varint()?; + + if threshold >= 0 { + conn.set_compression(Some(threshold as usize)); + } + } else if packet.id() == 0x02 { + break; + } + } + + conn.write_packet(&Packet::empty(0x03))?; + + conn.write_packet(&Packet::build(0x02, |packet| { + packet.write_string("minecraft:brand")?; + packet.write_string("vanilla") + })?)?; + + conn.write_packet(&Packet::build(0x00, |packet| { + packet.write_string("en_us")?; + packet.write_signed_byte(12)?; + packet.write_varint(0)?; + packet.write_boolean(true)?; + packet.write_byte(127)?; + packet.write_varint(1)?; + packet.write_boolean(true)?; + packet.write_boolean(true)?; + packet.write_varint(0) + })?)?; + + let mut packet = conn.read_packet()?; // server brand + + let id = packet.read_string()?; + println!("message id: {}", id); + println!("message data: {}", String::from_utf8_lossy(&packet.get_bytes()[id.len()+1..])); + + let mut packet = conn.read_packet()?; // feature flags + + let flags_len = packet.read_varint()?; + + println!("got {} feature flags:", flags_len); + + for _ in 0..flags_len { + let flag = packet.read_string()?; + + println!("flag: {}", flag); + } + + let mut packet = conn.read_packet()?; // wait for known packs packet + + if packet.id() != 0x0E { + println!("got unexpected packet while looking for 0x0E: 0x{:02X}", packet.id()); + return Ok(()); + } + + let packs_len = packet.read_varint()?; + + println!("got {} known packs:", packs_len); + + for _ in 0..packs_len { + println!("{}:{} v{}", packet.read_string()?, packet.read_string()?, packet.read_string()?); + } + + packet.set_id(0x07); // make it serverbound + + conn.write_packet(&packet)?; + + let mut data = Vec::new(); + + loop { + let mut packet = conn.read_packet()?; + + if packet.id() != 0x07 { // update tags + let registries_len = packet.read_varint()?; + + println!("got update tags: {}", registries_len); + + for _ in 0..registries_len { + let registry = packet.read_string()?; + + println!("registry: {}", registry); + + let tags_len = packet.read_varint()?; + + for _ in 0..tags_len { + let tag_name = packet.read_string()?; + + println!("tag: {}", tag_name); + + let entries_len = packet.read_varint()?; + + for _ in 0..entries_len { + let entry = packet.read_varint()?; + + println!("entry: {}", entry); + } + } + } + + fs::write("update-tags.bin", packet.get_bytes()).unwrap(); + + break; + } + + println!("got registry: {}", packet.read_string()?); + + let entries_len = packet.read_varint()?; + + for _ in 0..entries_len { + let entry_id = packet.read_string()?; + let has_data = packet.read_boolean()?; + + if has_data { + let entry_data = packet.read_nbt()?; + + println!("entry: {}, data: {:?}", entry_id, entry_data); + } else { + println!("entry: {}, no data", entry_id); + } + } + + write_packet(&mut data, None, 0, &packet)?; + } + + fs::write("registry-data.bin", &data).unwrap(); + + Ok(()) +} diff --git a/src/server/protocol/handler.rs b/src/server/protocol/handler.rs index 84bf5e4..a724bb3 100644 --- a/src/server/protocol/handler.rs +++ b/src/server/protocol/handler.rs @@ -157,6 +157,11 @@ pub fn handle_connection( particle_status, }); + client.write_packet(&Packet::build(clientbound::configuration::PLUGIN_MESSAGE, |p| { + p.write_string("minecraft:brand")?; + p.write_string("rust_minecraft_server") + })?)?; + handle_configuration_state(client.clone())?; client.write_packet(&Packet::empty(clientbound::configuration::FINISH))?; diff --git a/src/server/protocol/play.rs b/src/server/protocol/play.rs index 4783434..e125d6b 100644 --- a/src/server/protocol/play.rs +++ b/src/server/protocol/play.rs @@ -1,64 +1,67 @@ -use std::{collections::HashMap, sync::Arc}; +use std::{io::Cursor, sync::Arc}; -use craftflow_nbt::DynNBT; -use log::debug; -use rust_mc_proto::{DataWriter, Packet}; -use serde_json::{json, Value}; +use rust_mc_proto::{read_packet, DataWriter, Packet}; use crate::server::{ - data::ReadWriteNBT, player::context::ClientContext, ServerError + player::context::ClientContext, ServerError }; -use super::id::{clientbound::{self, configuration::REGISTRY_DATA}, serverbound}; +use super::id::*; + +pub fn send_update_tags( + client: Arc, +) -> Result<(), ServerError> { + + // rewrite this hardcode bullshit + + client.write_packet(&Packet::from_bytes(clientbound::configuration::UPDATE_TAGS, include_bytes!("update-tags.bin")))?; + + Ok(()) +} pub fn send_registry_data( client: Arc, ) -> Result<(), ServerError> { - let registry_data = include_str!("registry_data.json"); - let registry_data: Value = serde_json::from_str(registry_data).unwrap(); - let registry_data = registry_data.as_object().unwrap(); - for (registry_name, registry_data) in registry_data { - let registry_data = registry_data.as_object().unwrap(); + // rewrite this hardcode bullshit - let mut packet = Packet::empty(clientbound::configuration::REGISTRY_DATA); - packet.write_string(registry_name)?; - - packet.write_usize_varint(registry_data.len())?; - - debug!("sending registry: {registry_name}"); - - for (key, value) in registry_data { - packet.write_string(key)?; - packet.write_boolean(true)?; - - let mut data = Vec::new(); - craftflow_nbt::to_writer(&mut data, value).unwrap(); - - debug!("- {key}"); - - packet.write_bytes(&data)?; - } - + let mut registry_data = Cursor::new(include_bytes!("registry-data.bin")); + + while let Ok(mut packet) = read_packet(&mut registry_data, None) { + packet.set_id(clientbound::configuration::REGISTRY_DATA); client.write_packet(&packet)?; } Ok(()) } +pub fn process_known_packs( + client: Arc +) -> Result<(), ServerError> { + let mut packet = Packet::empty(clientbound::configuration::KNOWN_PACKS); + packet.write_varint(1)?; + packet.write_string("minecraft")?; + packet.write_string("core")?; + packet.write_string("1.21.5")?; + client.write_packet(&packet)?; + + client.read_packet(serverbound::configuration::KNOWN_PACKS)?; + + Ok(()) +} + pub fn handle_configuration_state( client: Arc, // Контекст клиента ) -> Result<(), ServerError> { - let mut p = Packet::empty(clientbound::configuration::KNOWN_PACKS); - p.write_varint(1)?; - p.write_string("minecraft")?; - p.write_string("core")?; - p.write_string("1.21.5")?; - client.write_packet(&p)?; - client.read_packet(serverbound::configuration::KNOWN_PACKS)?; + let mut packet = Packet::empty(clientbound::configuration::FEATURE_FLAGS); + packet.write_varint(1)?; + packet.write_string("minecraft:vanilla")?; + client.write_packet(&packet)?; + process_known_packs(client.clone())?; send_registry_data(client.clone())?; + send_update_tags(client.clone())?; Ok(()) } @@ -100,7 +103,14 @@ pub fn handle_play_state( packet.write_boolean(false)?; // Enforces Secure Chat client.write_packet(&packet)?; - loop {} + loop {} + + // TODO: отдельный поток для чтения пакетов + + // TODO: переработка функции read_packet так чтобы когда + // делаешь read_any_packet, пакет отправлялся сначала всем другим + // функциям read_packet которые настроены на этот айди пакета, + // а потом если таковых не осталось пакет возвращался Ok(()) } diff --git a/src/server/protocol/registry-data.bin b/src/server/protocol/registry-data.bin new file mode 100644 index 0000000..e466400 Binary files /dev/null and b/src/server/protocol/registry-data.bin differ diff --git a/src/server/protocol/registry_data.json b/src/server/protocol/registry_data.json deleted file mode 100644 index a4fc1cd..0000000 --- a/src/server/protocol/registry_data.json +++ /dev/null @@ -1,2489 +0,0 @@ -{ - "minecraft:banner_pattern": { - "minecraft:base": { - "asset_id": "minecraft:base", - "translation_key": "block.minecraft.banner.base" - }, - "minecraft:border": { - "asset_id": "minecraft:border", - "translation_key": "block.minecraft.banner.border" - }, - "minecraft:bricks": { - "asset_id": "minecraft:bricks", - "translation_key": "block.minecraft.banner.bricks" - }, - "minecraft:circle": { - "asset_id": "minecraft:circle", - "translation_key": "block.minecraft.banner.circle" - }, - "minecraft:creeper": { - "asset_id": "minecraft:creeper", - "translation_key": "block.minecraft.banner.creeper" - }, - "minecraft:cross": { - "asset_id": "minecraft:cross", - "translation_key": "block.minecraft.banner.cross" - }, - "minecraft:curly_border": { - "asset_id": "minecraft:curly_border", - "translation_key": "block.minecraft.banner.curly_border" - }, - "minecraft:diagonal_left": { - "asset_id": "minecraft:diagonal_left", - "translation_key": "block.minecraft.banner.diagonal_left" - }, - "minecraft:diagonal_right": { - "asset_id": "minecraft:diagonal_right", - "translation_key": "block.minecraft.banner.diagonal_right" - }, - "minecraft:diagonal_up_left": { - "asset_id": "minecraft:diagonal_up_left", - "translation_key": "block.minecraft.banner.diagonal_up_left" - }, - "minecraft:diagonal_up_right": { - "asset_id": "minecraft:diagonal_up_right", - "translation_key": "block.minecraft.banner.diagonal_up_right" - }, - "minecraft:flow": { - "asset_id": "minecraft:flow", - "translation_key": "block.minecraft.banner.flow" - }, - "minecraft:flower": { - "asset_id": "minecraft:flower", - "translation_key": "block.minecraft.banner.flower" - }, - "minecraft:globe": { - "asset_id": "minecraft:globe", - "translation_key": "block.minecraft.banner.globe" - }, - "minecraft:gradient": { - "asset_id": "minecraft:gradient", - "translation_key": "block.minecraft.banner.gradient" - }, - "minecraft:gradient_up": { - "asset_id": "minecraft:gradient_up", - "translation_key": "block.minecraft.banner.gradient_up" - }, - "minecraft:guster": { - "asset_id": "minecraft:guster", - "translation_key": "block.minecraft.banner.guster" - }, - "minecraft:half_horizontal": { - "asset_id": "minecraft:half_horizontal", - "translation_key": "block.minecraft.banner.half_horizontal" - }, - "minecraft:half_horizontal_bottom": { - "asset_id": "minecraft:half_horizontal_bottom", - "translation_key": "block.minecraft.banner.half_horizontal_bottom" - }, - "minecraft:half_vertical": { - "asset_id": "minecraft:half_vertical", - "translation_key": "block.minecraft.banner.half_vertical" - }, - "minecraft:half_vertical_right": { - "asset_id": "minecraft:half_vertical_right", - "translation_key": "block.minecraft.banner.half_vertical_right" - }, - "minecraft:mojang": { - "asset_id": "minecraft:mojang", - "translation_key": "block.minecraft.banner.mojang" - }, - "minecraft:piglin": { - "asset_id": "minecraft:piglin", - "translation_key": "block.minecraft.banner.piglin" - }, - "minecraft:rhombus": { - "asset_id": "minecraft:rhombus", - "translation_key": "block.minecraft.banner.rhombus" - }, - "minecraft:skull": { - "asset_id": "minecraft:skull", - "translation_key": "block.minecraft.banner.skull" - }, - "minecraft:small_stripes": { - "asset_id": "minecraft:small_stripes", - "translation_key": "block.minecraft.banner.small_stripes" - }, - "minecraft:square_bottom_left": { - "asset_id": "minecraft:square_bottom_left", - "translation_key": "block.minecraft.banner.square_bottom_left" - }, - "minecraft:square_bottom_right": { - "asset_id": "minecraft:square_bottom_right", - "translation_key": "block.minecraft.banner.square_bottom_right" - }, - "minecraft:square_top_left": { - "asset_id": "minecraft:square_top_left", - "translation_key": "block.minecraft.banner.square_top_left" - }, - "minecraft:square_top_right": { - "asset_id": "minecraft:square_top_right", - "translation_key": "block.minecraft.banner.square_top_right" - }, - "minecraft:straight_cross": { - "asset_id": "minecraft:straight_cross", - "translation_key": "block.minecraft.banner.straight_cross" - }, - "minecraft:stripe_bottom": { - "asset_id": "minecraft:stripe_bottom", - "translation_key": "block.minecraft.banner.stripe_bottom" - }, - "minecraft:stripe_center": { - "asset_id": "minecraft:stripe_center", - "translation_key": "block.minecraft.banner.stripe_center" - }, - "minecraft:stripe_downleft": { - "asset_id": "minecraft:stripe_downleft", - "translation_key": "block.minecraft.banner.stripe_downleft" - }, - "minecraft:stripe_downright": { - "asset_id": "minecraft:stripe_downright", - "translation_key": "block.minecraft.banner.stripe_downright" - }, - "minecraft:stripe_left": { - "asset_id": "minecraft:stripe_left", - "translation_key": "block.minecraft.banner.stripe_left" - }, - "minecraft:stripe_middle": { - "asset_id": "minecraft:stripe_middle", - "translation_key": "block.minecraft.banner.stripe_middle" - }, - "minecraft:stripe_right": { - "asset_id": "minecraft:stripe_right", - "translation_key": "block.minecraft.banner.stripe_right" - }, - "minecraft:stripe_top": { - "asset_id": "minecraft:stripe_top", - "translation_key": "block.minecraft.banner.stripe_top" - }, - "minecraft:triangle_bottom": { - "asset_id": "minecraft:triangle_bottom", - "translation_key": "block.minecraft.banner.triangle_bottom" - }, - "minecraft:triangle_top": { - "asset_id": "minecraft:triangle_top", - "translation_key": "block.minecraft.banner.triangle_top" - }, - "minecraft:triangles_bottom": { - "asset_id": "minecraft:triangles_bottom", - "translation_key": "block.minecraft.banner.triangles_bottom" - }, - "minecraft:triangles_top": { - "asset_id": "minecraft:triangles_top", - "translation_key": "block.minecraft.banner.triangles_top" - } - }, - "minecraft:chat_type": { - "minecraft:chat": { - "chat": { - "parameters": [ - "sender", - "content" - ], - "translation_key": "chat.type.text" - }, - "narration": { - "parameters": [ - "sender", - "content" - ], - "translation_key": "chat.type.text.narrate" - } - }, - "minecraft:emote_command": { - "chat": { - "parameters": [ - "sender", - "content" - ], - "translation_key": "chat.type.emote" - }, - "narration": { - "parameters": [ - "sender", - "content" - ], - "translation_key": "chat.type.emote" - } - }, - "minecraft:msg_command_incoming": { - "chat": { - "parameters": [ - "sender", - "content" - ], - "translation_key": "commands.message.display.incoming" - }, - "narration": { - "parameters": [ - "sender", - "content" - ], - "translation_key": "chat.type.text.narrate" - } - }, - "minecraft:msg_command_outgoing": { - "chat": { - "parameters": [ - "target", - "content" - ], - "translation_key": "commands.message.display.outgoing" - }, - "narration": { - "parameters": [ - "sender", - "content" - ], - "translation_key": "chat.type.text.narrate" - } - }, - "minecraft:say_command": { - "chat": { - "parameters": [ - "sender", - "content" - ], - "translation_key": "chat.type.announcement" - }, - "narration": { - "parameters": [ - "sender", - "content" - ], - "translation_key": "chat.type.text.narrate" - } - }, - "minecraft:team_msg_command_incoming": { - "chat": { - "parameters": [ - "target", - "sender", - "content" - ], - "translation_key": "chat.type.team.text" - }, - "narration": { - "parameters": [ - "sender", - "content" - ], - "translation_key": "chat.type.text.narrate" - } - }, - "minecraft:team_msg_command_outgoing": { - "chat": { - "parameters": [ - "target", - "sender", - "content" - ], - "translation_key": "chat.type.team.sent" - }, - "narration": { - "parameters": [ - "sender", - "content" - ], - "translation_key": "chat.type.text.narrate" - } - } - }, - "minecraft:damage_type": { - "minecraft:arrow": { - "exhaustion": 0.10000000149011612, - "message_id": "arrow", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:bad_respawn_point": { - "exhaustion": 0.10000000149011612, - "message_id": "badRespawnPoint", - "scaling": "always" - }, - "minecraft:cactus": { - "exhaustion": 0.10000000149011612, - "message_id": "cactus", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:campfire": { - "exhaustion": 0.10000000149011612, - "message_id": "inFire", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:cramming": { - "exhaustion": 0.0, - "message_id": "cramming", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:dragon_breath": { - "exhaustion": 0.0, - "message_id": "dragonBreath", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:drown": { - "exhaustion": 0.0, - "message_id": "drown", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:dry_out": { - "exhaustion": 0.10000000149011612, - "message_id": "dryout", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:explosion": { - "exhaustion": 0.10000000149011612, - "message_id": "explosion", - "scaling": "always" - }, - "minecraft:fall": { - "exhaustion": 0.0, - "message_id": "fall", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:falling_anvil": { - "exhaustion": 0.10000000149011612, - "message_id": "anvil", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:falling_block": { - "exhaustion": 0.10000000149011612, - "message_id": "fallingBlock", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:falling_stalactite": { - "exhaustion": 0.10000000149011612, - "message_id": "fallingStalactite", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:fireball": { - "exhaustion": 0.10000000149011612, - "message_id": "fireball", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:fireworks": { - "exhaustion": 0.10000000149011612, - "message_id": "fireworks", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:fly_into_wall": { - "exhaustion": 0.0, - "message_id": "flyIntoWall", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:freeze": { - "exhaustion": 0.0, - "message_id": "freeze", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:generic": { - "exhaustion": 0.0, - "message_id": "generic", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:generic_kill": { - "exhaustion": 0.0, - "message_id": "genericKill", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:hot_floor": { - "exhaustion": 0.10000000149011612, - "message_id": "hotFloor", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:in_fire": { - "exhaustion": 0.10000000149011612, - "message_id": "inFire", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:in_wall": { - "exhaustion": 0.0, - "message_id": "inWall", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:indirect_magic": { - "exhaustion": 0.0, - "message_id": "indirectMagic", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:lava": { - "exhaustion": 0.10000000149011612, - "message_id": "lava", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:lightning_bolt": { - "exhaustion": 0.10000000149011612, - "message_id": "lightningBolt", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:magic": { - "exhaustion": 0.0, - "message_id": "magic", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:mob_attack": { - "exhaustion": 0.10000000149011612, - "message_id": "mob", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:mob_attack_no_aggro": { - "exhaustion": 0.10000000149011612, - "message_id": "mob", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:mob_projectile": { - "exhaustion": 0.10000000149011612, - "message_id": "mob", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:on_fire": { - "exhaustion": 0.0, - "message_id": "onFire", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:out_of_world": { - "exhaustion": 0.0, - "message_id": "outOfWorld", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:outside_border": { - "exhaustion": 0.0, - "message_id": "outsideBorder", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:player_attack": { - "exhaustion": 0.10000000149011612, - "message_id": "player", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:player_explosion": { - "exhaustion": 0.10000000149011612, - "message_id": "explosion.player", - "scaling": "always" - }, - "minecraft:sonic_boom": { - "exhaustion": 0.0, - "message_id": "sonic_boom", - "scaling": "always" - }, - "minecraft:spit": { - "exhaustion": 0.10000000149011612, - "message_id": "mob", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:stalagmite": { - "exhaustion": 0.0, - "message_id": "stalagmite", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:starve": { - "exhaustion": 0.0, - "message_id": "starve", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:sting": { - "exhaustion": 0.10000000149011612, - "message_id": "sting", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:sweet_berry_bush": { - "exhaustion": 0.10000000149011612, - "message_id": "sweetBerryBush", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:thorns": { - "exhaustion": 0.10000000149011612, - "message_id": "thorns", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:thrown": { - "exhaustion": 0.10000000149011612, - "message_id": "thrown", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:trident": { - "exhaustion": 0.10000000149011612, - "message_id": "trident", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:unattributed_fireball": { - "exhaustion": 0.10000000149011612, - "message_id": "onFire", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:wind_charge": { - "exhaustion": 0.10000000149011612, - "message_id": "mob", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:wither": { - "exhaustion": 0.0, - "message_id": "wither", - "scaling": "when_caused_by_living_non_player" - }, - "minecraft:wither_skull": { - "exhaustion": 0.10000000149011612, - "message_id": "witherSkull", - "scaling": "when_caused_by_living_non_player" - } - }, - "minecraft:dimension_type": { - "minecraft:overworld": { - "ambient_light": 0.0, - "bed_works": 1, - "coordinate_scale": 1.0, - "effects": "minecraft:overworld", - "has_ceiling": 0, - "has_raids": 1, - "has_skylight": 1, - "height": 384, - "infiniburn": "#minecraft:infiniburn_overworld", - "logical_height": 384, - "min_y": -64, - "monster_spawn_block_light_limit": 0, - "monster_spawn_light_level": { - "max_inclusive": 7, - "min_inclusive": 0, - "type": "minecraft:uniform" - }, - "natural": 1, - "piglin_safe": 0, - "respawn_anchor_works": 0, - "ultrawarm": 0 - }, - "minecraft:overworld_caves": { - "ambient_light": 0.0, - "bed_works": 1, - "coordinate_scale": 1.0, - "effects": "minecraft:overworld", - "has_ceiling": 1, - "has_raids": 1, - "has_skylight": 1, - "height": 384, - "infiniburn": "#minecraft:infiniburn_overworld", - "logical_height": 384, - "min_y": -64, - "monster_spawn_block_light_limit": 0, - "monster_spawn_light_level": { - "max_inclusive": 7, - "min_inclusive": 0, - "type": "minecraft:uniform" - }, - "natural": 1, - "piglin_safe": 0, - "respawn_anchor_works": 0, - "ultrawarm": 0 - }, - "minecraft:the_end": { - "ambient_light": 0.0, - "bed_works": 0, - "coordinate_scale": 1.0, - "effects": "minecraft:the_end", - "has_ceiling": 0, - "has_raids": 1, - "has_skylight": 0, - "height": 256, - "infiniburn": "#minecraft:infiniburn_end", - "logical_height": 256, - "min_y": 0, - "monster_spawn_block_light_limit": 0, - "monster_spawn_light_level": { - "max_inclusive": 7, - "min_inclusive": 0, - "type": "minecraft:uniform" - }, - "natural": 0, - "piglin_safe": 0, - "respawn_anchor_works": 0, - "ultrawarm": 0 - }, - "minecraft:the_nether": { - "ambient_light": 0.10000000149011612, - "bed_works": 0, - "coordinate_scale": 8.0, - "effects": "minecraft:the_nether", - "has_ceiling": 1, - "has_raids": 0, - "has_skylight": 0, - "height": 256, - "infiniburn": "#minecraft:infiniburn_nether", - "logical_height": 128, - "min_y": 0, - "monster_spawn_block_light_limit": 15, - "monster_spawn_light_level": { - "max_inclusive": 7, - "min_inclusive": 7, - "type": "minecraft:uniform" - }, - "natural": 0, - "piglin_safe": 1, - "respawn_anchor_works": 1, - "ultrawarm": 1 - } - }, - "minecraft:painting_variant": { - "minecraft:alban": { - "asset_id": "minecraft:alban", - "height": 1, - "width": 1 - }, - "minecraft:aztec": { - "asset_id": "minecraft:aztec", - "height": 1, - "width": 1 - }, - "minecraft:aztec2": { - "asset_id": "minecraft:aztec2", - "height": 1, - "width": 1 - }, - "minecraft:backyard": { - "asset_id": "minecraft:backyard", - "height": 4, - "width": 3 - }, - "minecraft:baroque": { - "asset_id": "minecraft:baroque", - "height": 2, - "width": 2 - }, - "minecraft:bomb": { - "asset_id": "minecraft:bomb", - "height": 1, - "width": 1 - }, - "minecraft:bouquet": { - "asset_id": "minecraft:bouquet", - "height": 3, - "width": 3 - }, - "minecraft:burning_skull": { - "asset_id": "minecraft:burning_skull", - "height": 4, - "width": 4 - }, - "minecraft:bust": { - "asset_id": "minecraft:bust", - "height": 2, - "width": 2 - }, - "minecraft:cavebird": { - "asset_id": "minecraft:cavebird", - "height": 3, - "width": 3 - }, - "minecraft:changing": { - "asset_id": "minecraft:changing", - "height": 2, - "width": 4 - }, - "minecraft:cotan": { - "asset_id": "minecraft:cotan", - "height": 3, - "width": 3 - }, - "minecraft:courbet": { - "asset_id": "minecraft:courbet", - "height": 1, - "width": 2 - }, - "minecraft:creebet": { - "asset_id": "minecraft:creebet", - "height": 1, - "width": 2 - }, - "minecraft:donkey_kong": { - "asset_id": "minecraft:donkey_kong", - "height": 3, - "width": 4 - }, - "minecraft:earth": { - "asset_id": "minecraft:earth", - "height": 2, - "width": 2 - }, - "minecraft:endboss": { - "asset_id": "minecraft:endboss", - "height": 3, - "width": 3 - }, - "minecraft:fern": { - "asset_id": "minecraft:fern", - "height": 3, - "width": 3 - }, - "minecraft:fighters": { - "asset_id": "minecraft:fighters", - "height": 2, - "width": 4 - }, - "minecraft:finding": { - "asset_id": "minecraft:finding", - "height": 2, - "width": 4 - }, - "minecraft:fire": { - "asset_id": "minecraft:fire", - "height": 2, - "width": 2 - }, - "minecraft:graham": { - "asset_id": "minecraft:graham", - "height": 2, - "width": 1 - }, - "minecraft:humble": { - "asset_id": "minecraft:humble", - "height": 2, - "width": 2 - }, - "minecraft:kebab": { - "asset_id": "minecraft:kebab", - "height": 1, - "width": 1 - }, - "minecraft:lowmist": { - "asset_id": "minecraft:lowmist", - "height": 2, - "width": 4 - }, - "minecraft:match": { - "asset_id": "minecraft:match", - "height": 2, - "width": 2 - }, - "minecraft:meditative": { - "asset_id": "minecraft:meditative", - "height": 1, - "width": 1 - }, - "minecraft:orb": { - "asset_id": "minecraft:orb", - "height": 4, - "width": 4 - }, - "minecraft:owlemons": { - "asset_id": "minecraft:owlemons", - "height": 3, - "width": 3 - }, - "minecraft:passage": { - "asset_id": "minecraft:passage", - "height": 2, - "width": 4 - }, - "minecraft:pigscene": { - "asset_id": "minecraft:pigscene", - "height": 4, - "width": 4 - }, - "minecraft:plant": { - "asset_id": "minecraft:plant", - "height": 1, - "width": 1 - }, - "minecraft:pointer": { - "asset_id": "minecraft:pointer", - "height": 4, - "width": 4 - }, - "minecraft:pond": { - "asset_id": "minecraft:pond", - "height": 4, - "width": 3 - }, - "minecraft:pool": { - "asset_id": "minecraft:pool", - "height": 1, - "width": 2 - }, - "minecraft:prairie_ride": { - "asset_id": "minecraft:prairie_ride", - "height": 2, - "width": 1 - }, - "minecraft:sea": { - "asset_id": "minecraft:sea", - "height": 1, - "width": 2 - }, - "minecraft:skeleton": { - "asset_id": "minecraft:skeleton", - "height": 3, - "width": 4 - }, - "minecraft:skull_and_roses": { - "asset_id": "minecraft:skull_and_roses", - "height": 2, - "width": 2 - }, - "minecraft:stage": { - "asset_id": "minecraft:stage", - "height": 2, - "width": 2 - }, - "minecraft:sunflowers": { - "asset_id": "minecraft:sunflowers", - "height": 3, - "width": 3 - }, - "minecraft:sunset": { - "asset_id": "minecraft:sunset", - "height": 1, - "width": 2 - }, - "minecraft:tides": { - "asset_id": "minecraft:tides", - "height": 3, - "width": 3 - }, - "minecraft:unpacked": { - "asset_id": "minecraft:unpacked", - "height": 4, - "width": 4 - }, - "minecraft:void": { - "asset_id": "minecraft:void", - "height": 2, - "width": 2 - }, - "minecraft:wanderer": { - "asset_id": "minecraft:wanderer", - "height": 2, - "width": 1 - }, - "minecraft:wasteland": { - "asset_id": "minecraft:wasteland", - "height": 1, - "width": 1 - }, - "minecraft:water": { - "asset_id": "minecraft:water", - "height": 2, - "width": 2 - }, - "minecraft:wind": { - "asset_id": "minecraft:wind", - "height": 2, - "width": 2 - }, - "minecraft:wither": { - "asset_id": "minecraft:wither", - "height": 2, - "width": 2 - } - }, - "minecraft:trim_material": { - "minecraft:amethyst": { - "asset_name": "amethyst", - "description": { - "color": "#9A5CC6", - "translate": "trim_material.minecraft.amethyst" - }, - "ingredient": "minecraft:amethyst_shard", - "item_model_index": 1.0 - }, - "minecraft:copper": { - "asset_name": "copper", - "description": { - "color": "#B4684D", - "translate": "trim_material.minecraft.copper" - }, - "ingredient": "minecraft:copper_ingot", - "item_model_index": 0.5 - }, - "minecraft:diamond": { - "asset_name": "diamond", - "description": { - "color": "#6EECD2", - "translate": "trim_material.minecraft.diamond" - }, - "ingredient": "minecraft:diamond", - "item_model_index": 0.800000011920929 - }, - "minecraft:emerald": { - "asset_name": "emerald", - "description": { - "color": "#11A036", - "translate": "trim_material.minecraft.emerald" - }, - "ingredient": "minecraft:emerald", - "item_model_index": 0.699999988079071 - }, - "minecraft:gold": { - "asset_name": "gold", - "description": { - "color": "#DEB12D", - "translate": "trim_material.minecraft.gold" - }, - "ingredient": "minecraft:gold_ingot", - "item_model_index": 0.6000000238418579 - }, - "minecraft:iron": { - "asset_name": "iron", - "description": { - "color": "#ECECEC", - "translate": "trim_material.minecraft.iron" - }, - "ingredient": "minecraft:iron_ingot", - "item_model_index": 0.20000000298023224 - }, - "minecraft:lapis": { - "asset_name": "lapis", - "description": { - "color": "#416E97", - "translate": "trim_material.minecraft.lapis" - }, - "ingredient": "minecraft:lapis_lazuli", - "item_model_index": 0.8999999761581421 - }, - "minecraft:netherite": { - "asset_name": "netherite", - "description": { - "color": "#625859", - "translate": "trim_material.minecraft.netherite" - }, - "ingredient": "minecraft:netherite_ingot", - "item_model_index": 0.30000001192092896 - }, - "minecraft:quartz": { - "asset_name": "quartz", - "description": { - "color": "#E3D4C4", - "translate": "trim_material.minecraft.quartz" - }, - "ingredient": "minecraft:quartz", - "item_model_index": 0.10000000149011612 - }, - "minecraft:redstone": { - "asset_name": "redstone", - "description": { - "color": "#971607", - "translate": "trim_material.minecraft.redstone" - }, - "ingredient": "minecraft:redstone", - "item_model_index": 0.4000000059604645 - } - }, - "minecraft:trim_pattern": { - "minecraft:bolt": { - "asset_id": "minecraft:bolt", - "description": { - "translate": "trim_pattern.minecraft.bolt" - }, - "template_item": "minecraft:bolt_armor_trim_smithing_template" - }, - "minecraft:coast": { - "asset_id": "minecraft:coast", - "description": { - "translate": "trim_pattern.minecraft.coast" - }, - "template_item": "minecraft:coast_armor_trim_smithing_template" - }, - "minecraft:dune": { - "asset_id": "minecraft:dune", - "description": { - "translate": "trim_pattern.minecraft.dune" - }, - "template_item": "minecraft:dune_armor_trim_smithing_template" - }, - "minecraft:eye": { - "asset_id": "minecraft:eye", - "description": { - "translate": "trim_pattern.minecraft.eye" - }, - "template_item": "minecraft:eye_armor_trim_smithing_template" - }, - "minecraft:flow": { - "asset_id": "minecraft:flow", - "description": { - "translate": "trim_pattern.minecraft.flow" - }, - "template_item": "minecraft:flow_armor_trim_smithing_template" - }, - "minecraft:host": { - "asset_id": "minecraft:host", - "description": { - "translate": "trim_pattern.minecraft.host" - }, - "template_item": "minecraft:host_armor_trim_smithing_template" - }, - "minecraft:raiser": { - "asset_id": "minecraft:raiser", - "description": { - "translate": "trim_pattern.minecraft.raiser" - }, - "template_item": "minecraft:raiser_armor_trim_smithing_template" - }, - "minecraft:rib": { - "asset_id": "minecraft:rib", - "description": { - "translate": "trim_pattern.minecraft.rib" - }, - "template_item": "minecraft:rib_armor_trim_smithing_template" - }, - "minecraft:sentry": { - "asset_id": "minecraft:sentry", - "description": { - "translate": "trim_pattern.minecraft.sentry" - }, - "template_item": "minecraft:sentry_armor_trim_smithing_template" - }, - "minecraft:shaper": { - "asset_id": "minecraft:shaper", - "description": { - "translate": "trim_pattern.minecraft.shaper" - }, - "template_item": "minecraft:shaper_armor_trim_smithing_template" - }, - "minecraft:silence": { - "asset_id": "minecraft:silence", - "description": { - "translate": "trim_pattern.minecraft.silence" - }, - "template_item": "minecraft:silence_armor_trim_smithing_template" - }, - "minecraft:snout": { - "asset_id": "minecraft:snout", - "description": { - "translate": "trim_pattern.minecraft.snout" - }, - "template_item": "minecraft:snout_armor_trim_smithing_template" - }, - "minecraft:spire": { - "asset_id": "minecraft:spire", - "description": { - "translate": "trim_pattern.minecraft.spire" - }, - "template_item": "minecraft:spire_armor_trim_smithing_template" - }, - "minecraft:tide": { - "asset_id": "minecraft:tide", - "description": { - "translate": "trim_pattern.minecraft.tide" - }, - "template_item": "minecraft:tide_armor_trim_smithing_template" - }, - "minecraft:vex": { - "asset_id": "minecraft:vex", - "description": { - "translate": "trim_pattern.minecraft.vex" - }, - "template_item": "minecraft:vex_armor_trim_smithing_template" - }, - "minecraft:ward": { - "asset_id": "minecraft:ward", - "description": { - "translate": "trim_pattern.minecraft.ward" - }, - "template_item": "minecraft:ward_armor_trim_smithing_template" - }, - "minecraft:wayfinder": { - "asset_id": "minecraft:wayfinder", - "description": { - "translate": "trim_pattern.minecraft.wayfinder" - }, - "template_item": "minecraft:wayfinder_armor_trim_smithing_template" - }, - "minecraft:wild": { - "asset_id": "minecraft:wild", - "description": { - "translate": "trim_pattern.minecraft.wild" - }, - "template_item": "minecraft:wild_armor_trim_smithing_template" - } - }, - "minecraft:wolf_variant": { - "minecraft:ashen": { - "angry_texture": "minecraft:entity/wolf/wolf_ashen_angry", - "biomes": "minecraft:snowy_taiga", - "tame_texture": "minecraft:entity/wolf/wolf_ashen_tame", - "wild_texture": "minecraft:entity/wolf/wolf_ashen" - }, - "minecraft:black": { - "angry_texture": "minecraft:entity/wolf/wolf_black_angry", - "biomes": "minecraft:old_growth_pine_taiga", - "tame_texture": "minecraft:entity/wolf/wolf_black_tame", - "wild_texture": "minecraft:entity/wolf/wolf_black" - }, - "minecraft:chestnut": { - "angry_texture": "minecraft:entity/wolf/wolf_chestnut_angry", - "biomes": "minecraft:old_growth_spruce_taiga", - "tame_texture": "minecraft:entity/wolf/wolf_chestnut_tame", - "wild_texture": "minecraft:entity/wolf/wolf_chestnut" - }, - "minecraft:pale": { - "angry_texture": "minecraft:entity/wolf/wolf_angry", - "biomes": "minecraft:taiga", - "tame_texture": "minecraft:entity/wolf/wolf_tame", - "wild_texture": "minecraft:entity/wolf/wolf" - }, - "minecraft:rusty": { - "angry_texture": "minecraft:entity/wolf/wolf_rusty_angry", - "biomes": "#minecraft:is_jungle", - "tame_texture": "minecraft:entity/wolf/wolf_rusty_tame", - "wild_texture": "minecraft:entity/wolf/wolf_rusty" - }, - "minecraft:snowy": { - "angry_texture": "minecraft:entity/wolf/wolf_snowy_angry", - "biomes": "minecraft:grove", - "tame_texture": "minecraft:entity/wolf/wolf_snowy_tame", - "wild_texture": "minecraft:entity/wolf/wolf_snowy" - }, - "minecraft:spotted": { - "angry_texture": "minecraft:entity/wolf/wolf_spotted_angry", - "biomes": "#minecraft:is_savanna", - "tame_texture": "minecraft:entity/wolf/wolf_spotted_tame", - "wild_texture": "minecraft:entity/wolf/wolf_spotted" - }, - "minecraft:striped": { - "angry_texture": "minecraft:entity/wolf/wolf_striped_angry", - "biomes": "#minecraft:is_badlands", - "tame_texture": "minecraft:entity/wolf/wolf_striped_tame", - "wild_texture": "minecraft:entity/wolf/wolf_striped" - }, - "minecraft:woods": { - "angry_texture": "minecraft:entity/wolf/wolf_woods_angry", - "biomes": "minecraft:forest", - "tame_texture": "minecraft:entity/wolf/wolf_woods_tame", - "wild_texture": "minecraft:entity/wolf/wolf_woods" - } - }, - "minecraft:worldgen/biome": { - "minecraft:badlands": { - "downfall": 0.0, - "effects": { - "fog_color": 12638463, - "foliage_color": 10387789, - "grass_color": 9470285, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.badlands" - }, - "sky_color": 7254527, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 2.0 - }, - "minecraft:bamboo_jungle": { - "downfall": 0.8999999761581421, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.bamboo_jungle" - }, - "sky_color": 7842047, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.949999988079071 - }, - "minecraft:basalt_deltas": { - "downfall": 0.0, - "effects": { - "additions_sound": { - "sound": "minecraft:ambient.basalt_deltas.additions", - "tick_chance": 0.0111 - }, - "ambient_sound": "minecraft:ambient.basalt_deltas.loop", - "fog_color": 6840176, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.basalt_deltas.mood", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.nether.basalt_deltas" - }, - "particle": { - "options": { - "type": "minecraft:white_ash" - }, - "probability": 0.118093334 - }, - "sky_color": 7254527, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 2.0 - }, - "minecraft:beach": { - "downfall": 0.4000000059604645, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 7907327, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.800000011920929 - }, - "minecraft:birch_forest": { - "downfall": 0.6000000238418579, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.forest" - }, - "sky_color": 8037887, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.6000000238418579 - }, - "minecraft:cherry_grove": { - "downfall": 0.800000011920929, - "effects": { - "fog_color": 12638463, - "foliage_color": 11983713, - "grass_color": 11983713, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.cherry_grove" - }, - "sky_color": 8103167, - "water_color": 6141935, - "water_fog_color": 6141935 - }, - "has_precipitation": true, - "temperature": 0.5 - }, - "minecraft:cold_ocean": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8103167, - "water_color": 4020182, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.5 - }, - "minecraft:crimson_forest": { - "downfall": 0.0, - "effects": { - "additions_sound": { - "sound": "minecraft:ambient.crimson_forest.additions", - "tick_chance": 0.0111 - }, - "ambient_sound": "minecraft:ambient.crimson_forest.loop", - "fog_color": 3343107, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.crimson_forest.mood", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.nether.crimson_forest" - }, - "particle": { - "options": { - "type": "minecraft:crimson_spore" - }, - "probability": 0.025 - }, - "sky_color": 7254527, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 2.0 - }, - "minecraft:dark_forest": { - "downfall": 0.800000011920929, - "effects": { - "fog_color": 12638463, - "grass_color_modifier": "dark_forest", - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.forest" - }, - "sky_color": 7972607, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.699999988079071 - }, - "minecraft:deep_cold_ocean": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8103167, - "water_color": 4020182, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.5 - }, - "minecraft:deep_dark": { - "downfall": 0.4000000059604645, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.deep_dark" - }, - "sky_color": 7907327, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.800000011920929 - }, - "minecraft:deep_frozen_ocean": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8103167, - "water_color": 3750089, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.5 - }, - "minecraft:deep_lukewarm_ocean": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8103167, - "water_color": 4566514, - "water_fog_color": 267827 - }, - "has_precipitation": true, - "temperature": 0.5 - }, - "minecraft:deep_ocean": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8103167, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.5 - }, - "minecraft:desert": { - "downfall": 0.0, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.desert" - }, - "sky_color": 7254527, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 2.0 - }, - "minecraft:dripstone_caves": { - "downfall": 0.4000000059604645, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.dripstone_caves" - }, - "sky_color": 7907327, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.800000011920929 - }, - "minecraft:end_barrens": { - "downfall": 0.5, - "effects": { - "fog_color": 10518688, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 0, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 0.5 - }, - "minecraft:end_highlands": { - "downfall": 0.5, - "effects": { - "fog_color": 10518688, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 0, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 0.5 - }, - "minecraft:end_midlands": { - "downfall": 0.5, - "effects": { - "fog_color": 10518688, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 0, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 0.5 - }, - "minecraft:eroded_badlands": { - "downfall": 0.0, - "effects": { - "fog_color": 12638463, - "foliage_color": 10387789, - "grass_color": 9470285, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.badlands" - }, - "sky_color": 7254527, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 2.0 - }, - "minecraft:flower_forest": { - "downfall": 0.800000011920929, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.flower_forest" - }, - "sky_color": 7972607, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.699999988079071 - }, - "minecraft:forest": { - "downfall": 0.800000011920929, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.forest" - }, - "sky_color": 7972607, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.699999988079071 - }, - "minecraft:frozen_ocean": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8364543, - "water_color": 3750089, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.0 - }, - "minecraft:frozen_peaks": { - "downfall": 0.8999999761581421, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.frozen_peaks" - }, - "sky_color": 8756735, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": -0.699999988079071 - }, - "minecraft:frozen_river": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8364543, - "water_color": 3750089, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.0 - }, - "minecraft:grove": { - "downfall": 0.800000011920929, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.grove" - }, - "sky_color": 8495359, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": -0.20000000298023224 - }, - "minecraft:ice_spikes": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8364543, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.0 - }, - "minecraft:jagged_peaks": { - "downfall": 0.8999999761581421, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.jagged_peaks" - }, - "sky_color": 8756735, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": -0.699999988079071 - }, - "minecraft:jungle": { - "downfall": 0.8999999761581421, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.jungle" - }, - "sky_color": 7842047, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.949999988079071 - }, - "minecraft:lukewarm_ocean": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8103167, - "water_color": 4566514, - "water_fog_color": 267827 - }, - "has_precipitation": true, - "temperature": 0.5 - }, - "minecraft:lush_caves": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.lush_caves" - }, - "sky_color": 8103167, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.5 - }, - "minecraft:mangrove_swamp": { - "downfall": 0.8999999761581421, - "effects": { - "fog_color": 12638463, - "foliage_color": 9285927, - "grass_color_modifier": "swamp", - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.swamp" - }, - "sky_color": 7907327, - "water_color": 3832426, - "water_fog_color": 5077600 - }, - "has_precipitation": true, - "temperature": 0.800000011920929 - }, - "minecraft:meadow": { - "downfall": 0.800000011920929, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.meadow" - }, - "sky_color": 8103167, - "water_color": 937679, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.5 - }, - "minecraft:mushroom_fields": { - "downfall": 1.0, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 7842047, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.8999999761581421 - }, - "minecraft:nether_wastes": { - "downfall": 0.0, - "effects": { - "additions_sound": { - "sound": "minecraft:ambient.nether_wastes.additions", - "tick_chance": 0.0111 - }, - "ambient_sound": "minecraft:ambient.nether_wastes.loop", - "fog_color": 3344392, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.nether_wastes.mood", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.nether.nether_wastes" - }, - "sky_color": 7254527, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 2.0 - }, - "minecraft:ocean": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8103167, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.5 - }, - "minecraft:old_growth_birch_forest": { - "downfall": 0.6000000238418579, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.forest" - }, - "sky_color": 8037887, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.6000000238418579 - }, - "minecraft:old_growth_pine_taiga": { - "downfall": 0.800000011920929, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.old_growth_taiga" - }, - "sky_color": 8168447, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.30000001192092896 - }, - "minecraft:old_growth_spruce_taiga": { - "downfall": 0.800000011920929, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.old_growth_taiga" - }, - "sky_color": 8233983, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.25 - }, - "minecraft:plains": { - "downfall": 0.4000000059604645, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 7907327, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.800000011920929 - }, - "minecraft:river": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8103167, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.5 - }, - "minecraft:savanna": { - "downfall": 0.0, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 7254527, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 2.0 - }, - "minecraft:savanna_plateau": { - "downfall": 0.0, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 7254527, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 2.0 - }, - "minecraft:small_end_islands": { - "downfall": 0.5, - "effects": { - "fog_color": 10518688, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 0, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 0.5 - }, - "minecraft:snowy_beach": { - "downfall": 0.30000001192092896, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8364543, - "water_color": 4020182, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.05000000074505806 - }, - "minecraft:snowy_plains": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8364543, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.0 - }, - "minecraft:snowy_slopes": { - "downfall": 0.8999999761581421, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.snowy_slopes" - }, - "sky_color": 8560639, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": -0.30000001192092896 - }, - "minecraft:snowy_taiga": { - "downfall": 0.4000000059604645, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8625919, - "water_color": 4020182, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": -0.5 - }, - "minecraft:soul_sand_valley": { - "downfall": 0.0, - "effects": { - "additions_sound": { - "sound": "minecraft:ambient.soul_sand_valley.additions", - "tick_chance": 0.0111 - }, - "ambient_sound": "minecraft:ambient.soul_sand_valley.loop", - "fog_color": 1787717, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.soul_sand_valley.mood", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.nether.soul_sand_valley" - }, - "particle": { - "options": { - "type": "minecraft:ash" - }, - "probability": 0.00625 - }, - "sky_color": 7254527, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 2.0 - }, - "minecraft:sparse_jungle": { - "downfall": 0.800000011920929, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.sparse_jungle" - }, - "sky_color": 7842047, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.949999988079071 - }, - "minecraft:stony_peaks": { - "downfall": 0.30000001192092896, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.stony_peaks" - }, - "sky_color": 7776511, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 1.0 - }, - "minecraft:stony_shore": { - "downfall": 0.30000001192092896, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8233727, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.20000000298023224 - }, - "minecraft:sunflower_plains": { - "downfall": 0.4000000059604645, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 7907327, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.800000011920929 - }, - "minecraft:swamp": { - "downfall": 0.8999999761581421, - "effects": { - "fog_color": 12638463, - "foliage_color": 6975545, - "grass_color_modifier": "swamp", - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.swamp" - }, - "sky_color": 7907327, - "water_color": 6388580, - "water_fog_color": 2302743 - }, - "has_precipitation": true, - "temperature": 0.800000011920929 - }, - "minecraft:taiga": { - "downfall": 0.800000011920929, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8233983, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.25 - }, - "minecraft:the_end": { - "downfall": 0.5, - "effects": { - "fog_color": 10518688, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 0, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 0.5 - }, - "minecraft:the_void": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8103167, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 0.5 - }, - "minecraft:warm_ocean": { - "downfall": 0.5, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8103167, - "water_color": 4445678, - "water_fog_color": 270131 - }, - "has_precipitation": true, - "temperature": 0.5 - }, - "minecraft:warped_forest": { - "downfall": 0.0, - "effects": { - "additions_sound": { - "sound": "minecraft:ambient.warped_forest.additions", - "tick_chance": 0.0111 - }, - "ambient_sound": "minecraft:ambient.warped_forest.loop", - "fog_color": 1705242, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.warped_forest.mood", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.nether.warped_forest" - }, - "particle": { - "options": { - "type": "minecraft:warped_spore" - }, - "probability": 0.01428 - }, - "sky_color": 7254527, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 2.0 - }, - "minecraft:windswept_forest": { - "downfall": 0.30000001192092896, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8233727, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.20000000298023224 - }, - "minecraft:windswept_gravelly_hills": { - "downfall": 0.30000001192092896, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8233727, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.20000000298023224 - }, - "minecraft:windswept_hills": { - "downfall": 0.30000001192092896, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 8233727, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": true, - "temperature": 0.20000000298023224 - }, - "minecraft:windswept_savanna": { - "downfall": 0.0, - "effects": { - "fog_color": 12638463, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 7254527, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 2.0 - }, - "minecraft:wooded_badlands": { - "downfall": 0.0, - "effects": { - "fog_color": 12638463, - "foliage_color": 10387789, - "grass_color": 9470285, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "music": { - "max_delay": 24000, - "min_delay": 12000, - "replace_current_music": false, - "sound": "minecraft:music.overworld.badlands" - }, - "sky_color": 7254527, - "water_color": 4159204, - "water_fog_color": 329011 - }, - "has_precipitation": false, - "temperature": 2.0 - } - } -} \ No newline at end of file diff --git a/src/server/protocol/update-tags.bin b/src/server/protocol/update-tags.bin new file mode 100644 index 0000000..1674b67 Binary files /dev/null and b/src/server/protocol/update-tags.bin differ