port to 1.21.11

This commit is contained in:
Alexander Medvedev
2025-12-24 13:09:01 +01:00
parent 7ac20597fb
commit 42c903493a
44 changed files with 44496 additions and 39144 deletions

58
Cargo.lock generated
View File

@@ -125,9 +125,9 @@ checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
[[package]]
name = "async-compression"
version = "0.4.35"
version = "0.4.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07a926debf178f2d355197f9caddb08e54a9329d44748034bba349c5848cb519"
checksum = "98ec5f6c2f8bc326c994cb9e241cc257ddaba9afa8555a43cffbb5dd86efaa37"
dependencies = [
"compression-codecs",
"compression-core",
@@ -401,9 +401,9 @@ dependencies = [
[[package]]
name = "compression-codecs"
version = "0.4.34"
version = "0.4.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34a3cbbb8b6eca96f3a5c4bf6938d5b27ced3675d69f95bb51948722870bc323"
checksum = "b0f7ac3e5b97fdce45e8922fb05cae2c37f7bbd63d30dd94821dacfd8f3f2bf2"
dependencies = [
"compression-core",
"flate2",
@@ -516,9 +516,9 @@ dependencies = [
[[package]]
name = "crc"
version = "3.4.0"
version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d"
checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675"
dependencies = [
"crc-catalog",
]
@@ -531,9 +531,9 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
[[package]]
name = "crc-fast"
version = "1.8.0"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2f7c8d397a6353ef0c1d6217ab91b3ddb5431daf57fd013f506b967dcf44458"
checksum = "2fd92aca2c6001b1bf5ba0ff84ee74ec8501b52bbef0cac80bf25a6c1d87a83d"
dependencies = [
"crc",
"digest 0.10.7",
@@ -941,7 +941,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
"windows-sys 0.61.2",
"windows-sys 0.52.0",
]
[[package]]
@@ -2095,7 +2095,7 @@ dependencies = [
[[package]]
name = "pumpkin"
version = "0.1.0-dev+1.21.10"
version = "0.1.0-dev+1.21.11"
dependencies = [
"base64 0.22.1",
"bytes",
@@ -2138,7 +2138,7 @@ dependencies = [
[[package]]
name = "pumpkin-api-macros"
version = "0.1.0-dev+1.21.10"
version = "0.1.0-dev+1.21.11"
dependencies = [
"proc-macro-error2",
"proc-macro2",
@@ -2148,7 +2148,7 @@ dependencies = [
[[package]]
name = "pumpkin-config"
version = "0.1.0-dev+1.21.10"
version = "0.1.0-dev+1.21.11"
dependencies = [
"log",
"pumpkin-util",
@@ -2159,7 +2159,7 @@ dependencies = [
[[package]]
name = "pumpkin-data"
version = "0.1.0-dev+1.21.10"
version = "0.1.0-dev+1.21.11"
dependencies = [
"crc-fast",
"heck",
@@ -2177,7 +2177,7 @@ dependencies = [
[[package]]
name = "pumpkin-inventory"
version = "0.1.0-dev+1.21.10"
version = "0.1.0-dev+1.21.11"
dependencies = [
"crossbeam-utils",
"log",
@@ -2191,7 +2191,7 @@ dependencies = [
[[package]]
name = "pumpkin-macros"
version = "0.1.0-dev+1.21.10"
version = "0.1.0-dev+1.21.11"
dependencies = [
"proc-macro-error2",
"proc-macro2",
@@ -2201,7 +2201,7 @@ dependencies = [
[[package]]
name = "pumpkin-nbt"
version = "0.1.0-dev+1.21.10"
version = "0.1.0-dev+1.21.11"
dependencies = [
"bytes",
"cesu8",
@@ -2213,7 +2213,7 @@ dependencies = [
[[package]]
name = "pumpkin-protocol"
version = "0.1.0-dev+1.21.10"
version = "0.1.0-dev+1.21.11"
dependencies = [
"aes",
"async-compression",
@@ -2235,7 +2235,7 @@ dependencies = [
[[package]]
name = "pumpkin-registry"
version = "0.1.0-dev+1.21.10"
version = "0.1.0-dev+1.21.11"
dependencies = [
"indexmap",
"pumpkin-protocol",
@@ -2246,7 +2246,7 @@ dependencies = [
[[package]]
name = "pumpkin-util"
version = "0.1.0-dev+1.21.10"
version = "0.1.0-dev+1.21.11"
dependencies = [
"base64 0.22.1",
"bytes",
@@ -2270,7 +2270,7 @@ dependencies = [
[[package]]
name = "pumpkin-world"
version = "0.1.0-dev+1.21.10"
version = "0.1.0-dev+1.21.11"
dependencies = [
"bitflags",
"bytes",
@@ -2469,15 +2469,15 @@ dependencies = [
[[package]]
name = "rustix"
version = "1.1.2"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34"
dependencies = [
"bitflags",
"errno",
"libc",
"linux-raw-sys",
"windows-sys 0.61.2",
"windows-sys 0.52.0",
]
[[package]]
@@ -2759,9 +2759,9 @@ dependencies = [
[[package]]
name = "simd-adler32"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2"
[[package]]
name = "simplelog"
@@ -2898,14 +2898,14 @@ checksum = "83176759e9416cf81ee66cb6508dbfe9c96f20b8b56265a39917551c23c70964"
[[package]]
name = "tempfile"
version = "3.23.0"
version = "3.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c"
dependencies = [
"fastrand",
"once_cell",
"rustix",
"windows-sys 0.61.2",
"windows-sys 0.52.0",
]
[[package]]
@@ -3470,7 +3470,7 @@ version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [
"windows-sys 0.61.2",
"windows-sys 0.52.0",
]
[[package]]

View File

@@ -14,7 +14,7 @@ members = [
]
[workspace.package]
version = "0.1.0-dev+1.21.10"
version = "0.1.0-dev+1.21.11"
edition = "2024"
[profile.release]
@@ -47,5 +47,5 @@ uuid = { version = "1.19", features = ["serde", "v3", "v4"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tempfile = { version = "3.23.0", default-features = false }
tempfile = { version = "3.24.0", default-features = false }
proc-macro-error2 = "2"

View File

@@ -5,7 +5,7 @@
![CI](https://github.com/Snowiiii/Pumpkin/actions/workflows/rust.yml/badge.svg)
[![Discord](https://img.shields.io/discord/1268592337445978193.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/wT8XjrjKkf)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
![Current version)](https://img.shields.io/badge/current_version-1.21.10-blue)
![Current version)](https://img.shields.io/badge/current_version-1.21.11-blue)
</div>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,34 +1,6 @@
{
"canyon": {
"config": {
"lava_level": {
"above_bottom": 8
},
"debug_settings": {
"water_state": {
"Properties": {
"waterlogged": "false",
"lit": "false",
"candles": "1"
},
"Name": "minecraft:candle"
},
"lava_state": {
"Name": "minecraft:orange_stained_glass"
},
"barrier_state": {
"Name": "minecraft:glass"
},
"air_state": {
"Properties": {
"powered": "false",
"facing": "north",
"face": "wall"
},
"Name": "minecraft:warped_button"
}
},
"replaceable": "#minecraft:overworld_carver_replaceables",
"probability": 0.01,
"y": {
"min_inclusive": {
@@ -40,41 +12,18 @@
"type": "minecraft:uniform"
},
"yScale": 3.0,
"vertical_rotation": {
"min_inclusive": -0.125,
"max_exclusive": 0.125,
"type": "minecraft:uniform"
},
"shape": {
"horizontal_radius_factor": {
"min_inclusive": 0.75,
"max_exclusive": 1.0,
"type": "minecraft:uniform"
},
"vertical_radius_default_factor": 1.0,
"vertical_radius_center_factor": 0.0,
"distance_factor": {
"min_inclusive": 0.75,
"max_exclusive": 1.0,
"type": "minecraft:uniform"
},
"thickness": {
"min": 0.0,
"max": 6.0,
"plateau": 2.0,
"type": "minecraft:trapezoid"
},
"width_smoothness": 3
}
},
"type": "minecraft:canyon"
},
"cave": {
"config": {
"lava_level": {
"above_bottom": 8
},
"debug_settings": {
"air_state": {
"Properties": {
"powered": "false",
"facing": "north",
"face": "wall"
},
"Name": "minecraft:warped_button"
},
"water_state": {
"Properties": {
"waterlogged": "false",
@@ -88,17 +37,40 @@
},
"barrier_state": {
"Name": "minecraft:glass"
},
"air_state": {
"Properties": {
"powered": "false",
"facing": "north",
"face": "wall"
},
"Name": "minecraft:crimson_button"
}
},
"replaceable": "#minecraft:overworld_carver_replaceables",
"vertical_rotation": {
"min_inclusive": -0.125,
"max_exclusive": 0.125,
"type": "minecraft:uniform"
},
"shape": {
"distance_factor": {
"min_inclusive": 0.75,
"max_exclusive": 1.0,
"type": "minecraft:uniform"
},
"thickness": {
"min": 0.0,
"max": 6.0,
"plateau": 2.0,
"type": "minecraft:trapezoid"
},
"width_smoothness": 3,
"horizontal_radius_factor": {
"min_inclusive": 0.75,
"max_exclusive": 1.0,
"type": "minecraft:uniform"
},
"vertical_radius_default_factor": 1.0,
"vertical_radius_center_factor": 0.0
}
},
"type": "minecraft:canyon"
},
"cave": {
"config": {
"probability": 0.15,
"y": {
"min_inclusive": {
@@ -114,6 +86,34 @@
"max_exclusive": 0.9,
"type": "minecraft:uniform"
},
"lava_level": {
"above_bottom": 8
},
"debug_settings": {
"air_state": {
"Properties": {
"powered": "false",
"facing": "north",
"face": "wall"
},
"Name": "minecraft:crimson_button"
},
"water_state": {
"Properties": {
"waterlogged": "false",
"lit": "false",
"candles": "1"
},
"Name": "minecraft:candle"
},
"lava_state": {
"Name": "minecraft:orange_stained_glass"
},
"barrier_state": {
"Name": "minecraft:glass"
}
},
"replaceable": "#minecraft:overworld_carver_replaceables",
"horizontal_radius_multiplier": {
"min_inclusive": 0.7,
"max_exclusive": 1.4,
@@ -134,34 +134,6 @@
},
"cave_extra_underground": {
"config": {
"lava_level": {
"above_bottom": 8
},
"debug_settings": {
"water_state": {
"Properties": {
"waterlogged": "false",
"lit": "false",
"candles": "1"
},
"Name": "minecraft:candle"
},
"lava_state": {
"Name": "minecraft:orange_stained_glass"
},
"barrier_state": {
"Name": "minecraft:glass"
},
"air_state": {
"Properties": {
"powered": "false",
"facing": "north",
"face": "wall"
},
"Name": "minecraft:oak_button"
}
},
"replaceable": "#minecraft:overworld_carver_replaceables",
"probability": 0.07,
"y": {
"min_inclusive": {
@@ -177,6 +149,34 @@
"max_exclusive": 0.9,
"type": "minecraft:uniform"
},
"lava_level": {
"above_bottom": 8
},
"debug_settings": {
"air_state": {
"Properties": {
"powered": "false",
"facing": "north",
"face": "wall"
},
"Name": "minecraft:oak_button"
},
"water_state": {
"Properties": {
"waterlogged": "false",
"lit": "false",
"candles": "1"
},
"Name": "minecraft:candle"
},
"lava_state": {
"Name": "minecraft:orange_stained_glass"
},
"barrier_state": {
"Name": "minecraft:glass"
}
},
"replaceable": "#minecraft:overworld_carver_replaceables",
"horizontal_radius_multiplier": {
"min_inclusive": 0.7,
"max_exclusive": 1.4,
@@ -197,10 +197,6 @@
},
"nether_cave": {
"config": {
"lava_level": {
"above_bottom": 10
},
"replaceable": "#minecraft:nether_carver_replaceables",
"probability": 0.2,
"y": {
"min_inclusive": {
@@ -212,6 +208,10 @@
"type": "minecraft:uniform"
},
"yScale": 0.5,
"lava_level": {
"above_bottom": 10
},
"replaceable": "#minecraft:nether_carver_replaceables",
"horizontal_radius_multiplier": 1.0,
"vertical_radius_multiplier": 1.0,
"floor_level": -0.7

File diff suppressed because it is too large Load Diff

View File

@@ -1,117 +1,117 @@
{
"1357": 0.3,
"526": 0.65,
"524": 0.65,
"235": 0.65,
"260": 0.3,
"1283": 0.3,
"1106": 0.5,
"265": 0.65,
"341": 0.3,
"208": 0.3,
"143": 0.3,
"203": 0.65,
"243": 0.65,
"1281": 0.3,
"210": 0.3,
"51": 0.3,
"411": 0.5,
"209": 0.3,
"246": 0.65,
"1223": 0.65,
"234": 0.65,
"189": 0.3,
"410": 0.5,
"186": 0.3,
"249": 0.65,
"1237": 1.0,
"504": 0.85,
"952": 0.65,
"205": 0.65,
"202": 0.3,
"253": 0.5,
"191": 0.3,
"1085": 1.0,
"185": 0.3,
"240": 0.65,
"340": 0.5,
"239": 0.65,
"261": 0.3,
"256": 0.5,
"525": 0.65,
"1360": 0.65,
"267": 0.65,
"211": 0.3,
"247": 0.65,
"230": 0.65,
"255": 0.5,
"236": 0.65,
"529": 0.65,
"1119": 0.65,
"231": 0.65,
"953": 0.85,
"263": 0.3,
"356": 0.65,
"257": 0.3,
"1109": 0.3,
"241": 0.65,
"258": 0.3,
"248": 0.65,
"237": 0.65,
"1108": 0.3,
"1280": 0.3,
"1107": 0.3,
"56": 0.3,
"266": 0.3,
"951": 0.3,
"268": 0.3,
"55": 0.3,
"244": 0.85,
"184": 0.3,
"52": 0.3,
"893": 0.65,
"49": 0.3,
"264": 0.3,
"576": 0.85,
"1282": 0.65,
"259": 0.3,
"1107": 0.3,
"229": 0.65,
"1227": 0.65,
"210": 0.3,
"187": 0.3,
"250": 0.65,
"182": 0.3,
"206": 0.85,
"528": 0.5,
"387": 0.85,
"249": 0.65,
"1285": 0.3,
"341": 0.3,
"409": 0.65,
"233": 0.65,
"53": 0.3,
"527": 0.65,
"190": 0.3,
"184": 0.3,
"50": 0.3,
"57": 0.3,
"192": 0.5,
"1027": 0.5,
"212": 0.65,
"1065": 0.65,
"577": 0.85,
"254": 0.5,
"242": 0.65,
"1224": 0.65,
"262": 0.65,
"188": 0.3,
"423": 0.65,
"54": 0.3,
"1225": 0.85,
"389": 0.65,
"357": 0.65,
"240": 0.65,
"388": 0.85,
"232": 0.65,
"256": 0.5,
"952": 0.65,
"951": 0.3,
"55": 0.3,
"253": 0.5,
"182": 0.3,
"255": 0.5,
"1065": 0.65,
"259": 0.3,
"423": 0.65,
"262": 0.65,
"340": 0.5,
"387": 0.85,
"192": 0.5,
"238": 0.65,
"204": 0.3,
"528": 0.5,
"1286": 0.3,
"1102": 0.85,
"251": 0.65,
"252": 0.65,
"229": 0.65,
"183": 0.3,
"268": 0.3,
"237": 0.65,
"1108": 0.3,
"265": 0.65,
"356": 0.65,
"1228": 0.65,
"263": 0.3,
"1374": 0.3,
"260": 0.3,
"245": 0.85,
"1356": 0.3
"243": 0.65,
"246": 0.65,
"49": 0.3,
"251": 0.65,
"230": 0.65,
"1085": 1.0,
"524": 0.65,
"953": 0.85,
"1106": 0.5,
"1119": 0.65,
"231": 0.65,
"234": 0.65,
"204": 0.3,
"212": 0.65,
"202": 0.3,
"527": 0.65,
"235": 0.65,
"1377": 0.65,
"1109": 0.3,
"191": 0.3,
"1229": 0.85,
"410": 0.5,
"50": 0.3,
"267": 0.65,
"266": 0.3,
"411": 0.5,
"190": 0.3,
"232": 0.65,
"529": 0.65,
"53": 0.3,
"250": 0.65,
"1287": 0.65,
"357": 0.65,
"1241": 1.0,
"54": 0.3,
"56": 0.3,
"1288": 0.3,
"577": 0.85,
"258": 0.3,
"1027": 0.5,
"205": 0.65,
"241": 0.65,
"1373": 0.3,
"209": 0.3,
"206": 0.85,
"186": 0.3,
"389": 0.65,
"236": 0.65,
"526": 0.65,
"504": 0.85,
"257": 0.3,
"185": 0.3,
"244": 0.85,
"57": 0.3,
"254": 0.5,
"264": 0.3,
"51": 0.3,
"239": 0.65,
"252": 0.65,
"183": 0.3,
"261": 0.3,
"576": 0.85,
"208": 0.3,
"189": 0.3,
"143": 0.3,
"188": 0.3,
"893": 0.65,
"211": 0.3,
"248": 0.65,
"247": 0.65,
"242": 0.65,
"203": 0.65,
"525": 0.65
}

File diff suppressed because it is too large Load Diff

View File

@@ -2,407 +2,415 @@
"arrow": {
"id": 0,
"components": {
"exhaustion": 0.1,
"message_id": "arrow",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"bad_respawn_point": {
"id": 1,
"components": {
"exhaustion": 0.1,
"death_message_type": "intentional_game_design",
"message_id": "badRespawnPoint",
"scaling": "always"
"scaling": "always",
"exhaustion": 0.1,
"death_message_type": "intentional_game_design"
}
},
"cactus": {
"id": 2,
"components": {
"exhaustion": 0.1,
"message_id": "cactus",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"campfire": {
"id": 3,
"components": {
"exhaustion": 0.1,
"effects": "burning",
"message_id": "inFire",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1,
"effects": "burning"
}
},
"cramming": {
"id": 4,
"components": {
"exhaustion": 0.0,
"message_id": "cramming",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"dragon_breath": {
"id": 5,
"components": {
"exhaustion": 0.0,
"message_id": "dragonBreath",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"drown": {
"id": 6,
"components": {
"exhaustion": 0.0,
"effects": "drowning",
"message_id": "drown",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0,
"effects": "drowning"
}
},
"dry_out": {
"id": 7,
"components": {
"exhaustion": 0.1,
"message_id": "dryout",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"ender_pearl": {
"id": 8,
"components": {
"exhaustion": 0.0,
"death_message_type": "fall_variants",
"message_id": "fall",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0,
"death_message_type": "fall_variants"
}
},
"explosion": {
"id": 9,
"components": {
"exhaustion": 0.1,
"message_id": "explosion",
"scaling": "always"
"scaling": "always",
"exhaustion": 0.1
}
},
"fall": {
"id": 10,
"components": {
"exhaustion": 0.0,
"death_message_type": "fall_variants",
"message_id": "fall",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0,
"death_message_type": "fall_variants"
}
},
"falling_anvil": {
"id": 11,
"components": {
"exhaustion": 0.1,
"message_id": "anvil",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"falling_block": {
"id": 12,
"components": {
"exhaustion": 0.1,
"message_id": "fallingBlock",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"falling_stalactite": {
"id": 13,
"components": {
"exhaustion": 0.1,
"message_id": "fallingStalactite",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"fireball": {
"id": 14,
"components": {
"exhaustion": 0.1,
"effects": "burning",
"message_id": "fireball",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1,
"effects": "burning"
}
},
"fireworks": {
"id": 15,
"components": {
"exhaustion": 0.1,
"message_id": "fireworks",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"fly_into_wall": {
"id": 16,
"components": {
"exhaustion": 0.0,
"message_id": "flyIntoWall",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"freeze": {
"id": 17,
"components": {
"exhaustion": 0.0,
"effects": "freezing",
"message_id": "freeze",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0,
"effects": "freezing"
}
},
"generic": {
"id": 18,
"components": {
"exhaustion": 0.0,
"message_id": "generic",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"generic_kill": {
"id": 19,
"components": {
"exhaustion": 0.0,
"message_id": "genericKill",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"hot_floor": {
"id": 20,
"components": {
"exhaustion": 0.1,
"effects": "burning",
"message_id": "hotFloor",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1,
"effects": "burning"
}
},
"in_fire": {
"id": 21,
"components": {
"exhaustion": 0.1,
"effects": "burning",
"message_id": "inFire",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1,
"effects": "burning"
}
},
"in_wall": {
"id": 22,
"components": {
"exhaustion": 0.0,
"message_id": "inWall",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"indirect_magic": {
"id": 23,
"components": {
"exhaustion": 0.0,
"message_id": "indirectMagic",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"lava": {
"id": 24,
"components": {
"exhaustion": 0.1,
"effects": "burning",
"message_id": "lava",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1,
"effects": "burning"
}
},
"lightning_bolt": {
"id": 25,
"components": {
"exhaustion": 0.1,
"message_id": "lightningBolt",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"mace_smash": {
"id": 26,
"components": {
"exhaustion": 0.1,
"message_id": "mace_smash",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"magic": {
"id": 27,
"components": {
"exhaustion": 0.0,
"message_id": "magic",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"mob_attack": {
"id": 28,
"components": {
"exhaustion": 0.1,
"message_id": "mob",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"mob_attack_no_aggro": {
"id": 29,
"components": {
"exhaustion": 0.1,
"message_id": "mob",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"mob_projectile": {
"id": 30,
"components": {
"exhaustion": 0.1,
"message_id": "mob",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"on_fire": {
"id": 31,
"components": {
"exhaustion": 0.0,
"effects": "burning",
"message_id": "onFire",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0,
"effects": "burning"
}
},
"out_of_world": {
"id": 32,
"components": {
"exhaustion": 0.0,
"message_id": "outOfWorld",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"outside_border": {
"id": 33,
"components": {
"exhaustion": 0.0,
"message_id": "outsideBorder",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"player_attack": {
"id": 34,
"components": {
"exhaustion": 0.1,
"message_id": "player",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"player_explosion": {
"id": 35,
"components": {
"exhaustion": 0.1,
"message_id": "explosion.player",
"scaling": "always"
"scaling": "always",
"exhaustion": 0.1
}
},
"sonic_boom": {
"id": 36,
"components": {
"exhaustion": 0.0,
"message_id": "sonic_boom",
"scaling": "always"
"scaling": "always",
"exhaustion": 0.0
}
},
"spear": {
"id": 37,
"components": {
"message_id": "spear",
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"spit": {
"id": 37,
"id": 38,
"components": {
"exhaustion": 0.1,
"message_id": "mob",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"stalagmite": {
"id": 38,
"id": 39,
"components": {
"exhaustion": 0.0,
"message_id": "stalagmite",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"starve": {
"id": 39,
"id": 40,
"components": {
"exhaustion": 0.0,
"message_id": "starve",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"sting": {
"id": 40,
"id": 41,
"components": {
"exhaustion": 0.1,
"message_id": "sting",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"sweet_berry_bush": {
"id": 41,
"id": 42,
"components": {
"exhaustion": 0.1,
"effects": "poking",
"message_id": "sweetBerryBush",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1,
"effects": "poking"
}
},
"thorns": {
"id": 42,
"id": 43,
"components": {
"exhaustion": 0.1,
"effects": "thorns",
"message_id": "thorns",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1,
"effects": "thorns"
}
},
"thrown": {
"id": 43,
"id": 44,
"components": {
"exhaustion": 0.1,
"message_id": "thrown",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"trident": {
"id": 44,
"id": 45,
"components": {
"exhaustion": 0.1,
"message_id": "trident",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"unattributed_fireball": {
"id": 45,
"id": 46,
"components": {
"exhaustion": 0.1,
"effects": "burning",
"message_id": "onFire",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1,
"effects": "burning"
}
},
"wind_charge": {
"id": 46,
"id": 47,
"components": {
"exhaustion": 0.1,
"message_id": "mob",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
},
"wither": {
"id": 47,
"id": 48,
"components": {
"exhaustion": 0.0,
"message_id": "wither",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.0
}
},
"wither_skull": {
"id": 48,
"id": 49,
"components": {
"exhaustion": 0.1,
"message_id": "witherSkull",
"scaling": "when_caused_by_living_non_player"
"scaling": "when_caused_by_living_non_player",
"exhaustion": 0.1
}
}
}

View File

@@ -4,95 +4,103 @@
"minecraft:max_damage": 2,
"minecraft:damage": 3,
"minecraft:unbreakable": 4,
"minecraft:custom_name": 5,
"minecraft:item_name": 6,
"minecraft:item_model": 7,
"minecraft:lore": 8,
"minecraft:rarity": 9,
"minecraft:enchantments": 10,
"minecraft:can_place_on": 11,
"minecraft:can_break": 12,
"minecraft:attribute_modifiers": 13,
"minecraft:custom_model_data": 14,
"minecraft:tooltip_display": 15,
"minecraft:repair_cost": 16,
"minecraft:creative_slot_lock": 17,
"minecraft:enchantment_glint_override": 18,
"minecraft:intangible_projectile": 19,
"minecraft:food": 20,
"minecraft:consumable": 21,
"minecraft:use_remainder": 22,
"minecraft:use_cooldown": 23,
"minecraft:damage_resistant": 24,
"minecraft:tool": 25,
"minecraft:weapon": 26,
"minecraft:enchantable": 27,
"minecraft:equippable": 28,
"minecraft:repairable": 29,
"minecraft:glider": 30,
"minecraft:tooltip_style": 31,
"minecraft:death_protection": 32,
"minecraft:blocks_attacks": 33,
"minecraft:stored_enchantments": 34,
"minecraft:dyed_color": 35,
"minecraft:map_color": 36,
"minecraft:map_id": 37,
"minecraft:map_decorations": 38,
"minecraft:map_post_processing": 39,
"minecraft:charged_projectiles": 40,
"minecraft:bundle_contents": 41,
"minecraft:potion_contents": 42,
"minecraft:potion_duration_scale": 43,
"minecraft:suspicious_stew_effects": 44,
"minecraft:writable_book_content": 45,
"minecraft:written_book_content": 46,
"minecraft:trim": 47,
"minecraft:debug_stick_state": 48,
"minecraft:entity_data": 49,
"minecraft:bucket_entity_data": 50,
"minecraft:block_entity_data": 51,
"minecraft:instrument": 52,
"minecraft:provides_trim_material": 53,
"minecraft:ominous_bottle_amplifier": 54,
"minecraft:jukebox_playable": 55,
"minecraft:provides_banner_patterns": 56,
"minecraft:recipes": 57,
"minecraft:lodestone_tracker": 58,
"minecraft:firework_explosion": 59,
"minecraft:fireworks": 60,
"minecraft:profile": 61,
"minecraft:note_block_sound": 62,
"minecraft:banner_patterns": 63,
"minecraft:base_color": 64,
"minecraft:pot_decorations": 65,
"minecraft:container": 66,
"minecraft:block_state": 67,
"minecraft:bees": 68,
"minecraft:lock": 69,
"minecraft:container_loot": 70,
"minecraft:break_sound": 71,
"minecraft:villager/variant": 72,
"minecraft:wolf/variant": 73,
"minecraft:wolf/sound_variant": 74,
"minecraft:wolf/collar": 75,
"minecraft:fox/variant": 76,
"minecraft:salmon/size": 77,
"minecraft:parrot/variant": 78,
"minecraft:tropical_fish/pattern": 79,
"minecraft:tropical_fish/base_color": 80,
"minecraft:tropical_fish/pattern_color": 81,
"minecraft:mooshroom/variant": 82,
"minecraft:rabbit/variant": 83,
"minecraft:pig/variant": 84,
"minecraft:cow/variant": 85,
"minecraft:chicken/variant": 86,
"minecraft:frog/variant": 87,
"minecraft:horse/variant": 88,
"minecraft:painting/variant": 89,
"minecraft:llama/variant": 90,
"minecraft:axolotl/variant": 91,
"minecraft:cat/variant": 92,
"minecraft:cat/collar": 93,
"minecraft:sheep/color": 94,
"minecraft:shulker/color": 95
"minecraft:use_effects": 5,
"minecraft:custom_name": 6,
"minecraft:minimum_attack_charge": 7,
"minecraft:damage_type": 8,
"minecraft:item_name": 9,
"minecraft:item_model": 10,
"minecraft:lore": 11,
"minecraft:rarity": 12,
"minecraft:enchantments": 13,
"minecraft:can_place_on": 14,
"minecraft:can_break": 15,
"minecraft:attribute_modifiers": 16,
"minecraft:custom_model_data": 17,
"minecraft:tooltip_display": 18,
"minecraft:repair_cost": 19,
"minecraft:creative_slot_lock": 20,
"minecraft:enchantment_glint_override": 21,
"minecraft:intangible_projectile": 22,
"minecraft:food": 23,
"minecraft:consumable": 24,
"minecraft:use_remainder": 25,
"minecraft:use_cooldown": 26,
"minecraft:damage_resistant": 27,
"minecraft:tool": 28,
"minecraft:weapon": 29,
"minecraft:attack_range": 30,
"minecraft:enchantable": 31,
"minecraft:equippable": 32,
"minecraft:repairable": 33,
"minecraft:glider": 34,
"minecraft:tooltip_style": 35,
"minecraft:death_protection": 36,
"minecraft:blocks_attacks": 37,
"minecraft:piercing_weapon": 38,
"minecraft:kinetic_weapon": 39,
"minecraft:swing_animation": 40,
"minecraft:stored_enchantments": 41,
"minecraft:dyed_color": 42,
"minecraft:map_color": 43,
"minecraft:map_id": 44,
"minecraft:map_decorations": 45,
"minecraft:map_post_processing": 46,
"minecraft:charged_projectiles": 47,
"minecraft:bundle_contents": 48,
"minecraft:potion_contents": 49,
"minecraft:potion_duration_scale": 50,
"minecraft:suspicious_stew_effects": 51,
"minecraft:writable_book_content": 52,
"minecraft:written_book_content": 53,
"minecraft:trim": 54,
"minecraft:debug_stick_state": 55,
"minecraft:entity_data": 56,
"minecraft:bucket_entity_data": 57,
"minecraft:block_entity_data": 58,
"minecraft:instrument": 59,
"minecraft:provides_trim_material": 60,
"minecraft:ominous_bottle_amplifier": 61,
"minecraft:jukebox_playable": 62,
"minecraft:provides_banner_patterns": 63,
"minecraft:recipes": 64,
"minecraft:lodestone_tracker": 65,
"minecraft:firework_explosion": 66,
"minecraft:fireworks": 67,
"minecraft:profile": 68,
"minecraft:note_block_sound": 69,
"minecraft:banner_patterns": 70,
"minecraft:base_color": 71,
"minecraft:pot_decorations": 72,
"minecraft:container": 73,
"minecraft:block_state": 74,
"minecraft:bees": 75,
"minecraft:lock": 76,
"minecraft:container_loot": 77,
"minecraft:break_sound": 78,
"minecraft:villager/variant": 79,
"minecraft:wolf/variant": 80,
"minecraft:wolf/sound_variant": 81,
"minecraft:wolf/collar": 82,
"minecraft:fox/variant": 83,
"minecraft:salmon/size": 84,
"minecraft:parrot/variant": 85,
"minecraft:tropical_fish/pattern": 86,
"minecraft:tropical_fish/base_color": 87,
"minecraft:tropical_fish/pattern_color": 88,
"minecraft:mooshroom/variant": 89,
"minecraft:rabbit/variant": 90,
"minecraft:pig/variant": 91,
"minecraft:cow/variant": 92,
"minecraft:chicken/variant": 93,
"minecraft:zombie_nautilus/variant": 94,
"minecraft:frog/variant": 95,
"minecraft:horse/variant": 96,
"minecraft:painting/variant": 97,
"minecraft:llama/variant": 98,
"minecraft:axolotl/variant": 99,
"minecraft:cat/variant": 100,
"minecraft:cat/collar": 101,
"minecraft:sheep/color": 102,
"minecraft:shulker/color": 103
}

View File

@@ -67,6 +67,8 @@
"advancements.adventure.sleep_in_bed.title": "Sweet Dreams",
"advancements.adventure.sniper_duel.description": "Kill a Skeleton from at least 50 meters away",
"advancements.adventure.sniper_duel.title": "Sniper Duel",
"advancements.adventure.spear_many_mobs.description": "Hit five mobs in the same Charge attack using the Spear",
"advancements.adventure.spear_many_mobs.title": "Mob Kabob",
"advancements.adventure.spyglass_at_dragon.description": "Look at the Ender Dragon through a Spyglass",
"advancements.adventure.spyglass_at_dragon.title": "Is It a Plane?",
"advancements.adventure.spyglass_at_ghast.description": "Look at a Ghast through a Spyglass",
@@ -281,6 +283,7 @@
"advMode.notEnabled.spawner": "Spawner blocks are not enabled",
"advMode.previousOutput": "Previous Output",
"advMode.setCommand": "Set Console Command for Block",
"advMode.setCommand.disabled": "Command set: %s, but command blocks are still disabled",
"advMode.setCommand.success": "Command set: %s",
"advMode.trackOutput": "Track output",
"advMode.triggering": "Triggering",
@@ -2461,6 +2464,7 @@
"chat.link.open": "Open in Browser",
"chat.link.warning": "Never open links from people that you don't trust!",
"chat.queue": "[+%s pending line(s)]",
"chat.queue.tooltip": "Click to display next message",
"chat.square_brackets": "[%s]",
"chat.tag.error": "Server sent invalid message.",
"chat.tag.modified": "Message modified by the server. Original:",
@@ -2919,6 +2923,12 @@
"commands.stopsound.success.source.sound": "Stopped sound '%s' on source '%s'",
"commands.stopsound.success.sourceless.any": "Stopped all sounds",
"commands.stopsound.success.sourceless.sound": "Stopped sound '%s'",
"commands.stopwatch.already_exists": "Stopwatch '%s' already exists",
"commands.stopwatch.create.success": "Created Stopwatch '%s'",
"commands.stopwatch.does_not_exist": "Stopwatch '%s' does not exist",
"commands.stopwatch.query": "Stopwatch '%s' has run for %ss",
"commands.stopwatch.remove.success": "Removed Stopwatch '%s'",
"commands.stopwatch.restart.success": "Restarted Stopwatch '%s'",
"commands.summon.failed": "Unable to summon entity",
"commands.summon.failed.peaceful": "Monsters cannot be summoned in Peaceful difficulty",
"commands.summon.failed.uuid": "Unable to summon entity due to duplicate UUIDs",
@@ -3148,6 +3158,7 @@
"controls.resetAll": "Reset Keys",
"controls.title": "Controls",
"createWorld.customize.buffet.biome": "Please select a biome",
"createWorld.customize.buffet.search": "Search...",
"createWorld.customize.buffet.title": "Single Biome Customization",
"createWorld.customize.flat.height": "Height",
"createWorld.customize.flat.layer": "%s",
@@ -3266,6 +3277,8 @@
"death.attack.sonic_boom": "%1$s was obliterated by a sonically-charged shriek",
"death.attack.sonic_boom.item": "%1$s was obliterated by a sonically-charged shriek while trying to escape %2$s wielding %3$s",
"death.attack.sonic_boom.player": "%1$s was obliterated by a sonically-charged shriek while trying to escape %2$s",
"death.attack.spear": "%1$s was speared by %2$s",
"death.attack.spear.item": "%1$s was speared by %2$s using %3$s",
"death.attack.stalagmite": "%1$s was impaled on a stalagmite",
"death.attack.stalagmite.player": "%1$s was impaled on a stalagmite while fighting %2$s",
"death.attack.starve": "%1$s starved to death",
@@ -3315,6 +3328,7 @@
"debug.copy_location.help": "F3 + C = Copy location as /tp command, or hold for 10 seconds to crash the game",
"debug.copy_location.message": "Copied location to clipboard",
"debug.crash.message": "F3 + C is held down. This will crash the game unless released.",
"debug.crash.message.rebindable": "%s + %s is held down. This will crash the game unless released.",
"debug.crash.warning": "Crashing in %s...",
"debug.creative_spectator.error": "Unable to switch game mode; no permission",
"debug.creative_spectator.help": "F3 + N = Cycle previous game mode <-> spectator",
@@ -3323,8 +3337,10 @@
"debug.entry.always": "Always",
"debug.entry.currently.alwaysOn": "%s: Currently always on",
"debug.entry.currently.inF3": "%s: Currently only in F3",
"debug.entry.currently.inOverlay": "%s: Currently only in debug overlay",
"debug.entry.currently.never": "%s: Currently off",
"debug.entry.f3": "In F3",
"debug.entry.overlay": "In Overlay",
"debug.gamemodes.error": "Unable to open game mode switcher; no permission",
"debug.gamemodes.help": "F3 + F4 = Open game mode switcher",
"debug.gamemodes.press_f4": "[ F4 ]",
@@ -3352,6 +3368,7 @@
"debug.prefix": "[Debug]:",
"debug.profiling.help": "F3 + L = Start/stop profiling",
"debug.profiling.start": "Profiling started for %s seconds. Use F3 + L to stop early",
"debug.profiling.start.rebindable": "Profiling started for %s seconds. Use %s + %s to stop early",
"debug.profiling.stop": "Profiling ended. Saved results to %s",
"debug.reload_chunks.help": "F3 + A = Reload chunks",
"debug.reload_chunks.message": "Reloading all chunks",
@@ -3408,6 +3425,7 @@
"effect.minecraft.absorption": "Absorption",
"effect.minecraft.bad_omen": "Bad Omen",
"effect.minecraft.blindness": "Blindness",
"effect.minecraft.breath_of_the_nautilus": "Breath of the Nautilus",
"effect.minecraft.conduit_power": "Conduit Power",
"effect.minecraft.darkness": "Darkness",
"effect.minecraft.dolphins_grace": "Dolphin's Grace",
@@ -3476,6 +3494,7 @@
"enchantment.minecraft.looting": "Looting",
"enchantment.minecraft.loyalty": "Loyalty",
"enchantment.minecraft.luck_of_the_sea": "Luck of the Sea",
"enchantment.minecraft.lunge": "Lunge",
"enchantment.minecraft.lure": "Lure",
"enchantment.minecraft.mending": "Mending",
"enchantment.minecraft.multishot": "Multishot",
@@ -3519,6 +3538,7 @@
"entity.minecraft.breeze": "Breeze",
"entity.minecraft.breeze_wind_charge": "Wind Charge",
"entity.minecraft.camel": "Camel",
"entity.minecraft.camel_husk": "Camel Husk",
"entity.minecraft.cat": "Cat",
"entity.minecraft.cave_spider": "Cave Spider",
"entity.minecraft.cherry_boat": "Cherry Boat",
@@ -3593,6 +3613,7 @@
"entity.minecraft.minecart": "Minecart",
"entity.minecraft.mooshroom": "Mooshroom",
"entity.minecraft.mule": "Mule",
"entity.minecraft.nautilus": "Nautilus",
"entity.minecraft.oak_boat": "Oak Boat",
"entity.minecraft.oak_chest_boat": "Oak Boat with Chest",
"entity.minecraft.ocelot": "Ocelot",
@@ -3601,6 +3622,7 @@
"entity.minecraft.pale_oak_boat": "Pale Oak Boat",
"entity.minecraft.pale_oak_chest_boat": "Pale Oak Boat with Chest",
"entity.minecraft.panda": "Panda",
"entity.minecraft.parched": "Parched",
"entity.minecraft.parrot": "Parrot",
"entity.minecraft.phantom": "Phantom",
"entity.minecraft.pig": "Pig",
@@ -3705,6 +3727,7 @@
"entity.minecraft.zoglin": "Zoglin",
"entity.minecraft.zombie": "Zombie",
"entity.minecraft.zombie_horse": "Zombie Horse",
"entity.minecraft.zombie_nautilus": "Zombie Nautilus",
"entity.minecraft.zombie_villager": "Zombie Villager",
"entity.minecraft.zombified_piglin": "Zombified Piglin",
"entity.not_summonable": "Can't summon entity of type %s",
@@ -3813,6 +3836,11 @@
"gamerule.maxEntityCramming": "Entity cramming threshold",
"gamerule.minecartMaxSpeed": "Minecart max speed",
"gamerule.minecartMaxSpeed.description": "Maximum default speed of a moving Minecart on land.",
"gamerule.minecraft.elytra_movement_check": "Do elytra movement check",
"gamerule.minecraft.fire_spread_radius_around_player": "Fire spread radius",
"gamerule.minecraft.fire_spread_radius_around_player.description": "The radius in blocks around a player in which fire can spread",
"gamerule.minecraft.player_movement_check": "Do player movement check",
"gamerule.minecraft.raids": "Do raids",
"gamerule.mobExplosionDropDecay": "In mob explosions, some blocks won't drop their loot",
"gamerule.mobExplosionDropDecay.description": "Some of the drops from blocks destroyed by explosions caused by mobs are lost in the explosion.",
"gamerule.mobGriefing": "Allow destructive mob actions",
@@ -4001,6 +4029,7 @@
"gui.fileDropFailure.detail": "Rejected %s files",
"gui.fileDropFailure.title": "Failed to add files",
"gui.hours": "%s hour(s)",
"gui.language.search": "Search...",
"gui.loadingMinecraft": "Loading Minecraft",
"gui.minutes": "%s minute(s)",
"gui.multiLineEditBox.character_limit": "%s/%s",
@@ -4015,7 +4044,9 @@
"gui.packSelection.search": "Search...",
"gui.proceed": "Proceed",
"gui.recipebook.moreRecipes": "Right Click for More",
"gui.recipebook.next_page": "Next Page",
"gui.recipebook.page": "%s/%s",
"gui.recipebook.previous_page": "Previous Page",
"gui.recipebook.search_hint": "Search...",
"gui.recipebook.toggleRecipes.all": "Showing All",
"gui.recipebook.toggleRecipes.blastable": "Showing Blastable",
@@ -4023,6 +4054,7 @@
"gui.recipebook.toggleRecipes.smeltable": "Showing Smeltable",
"gui.recipebook.toggleRecipes.smokable": "Showing Smokable",
"gui.report_to_server": "Report To Server",
"gui.selectWorld.search": "Search...",
"gui.socialInteractions.blocking_hint": "Manage with Microsoft account",
"gui.socialInteractions.empty_blocked": "No blocked players in chat",
"gui.socialInteractions.empty_hidden": "No players hidden in chat",
@@ -4085,6 +4117,7 @@
"item.disabled": "Disabled item",
"item.durability": "Durability: %s / %s",
"item.dyed": "Dyed",
"item.intangible": "Intangible",
"item.minecraft.acacia_boat": "Acacia Boat",
"item.minecraft.acacia_chest_boat": "Acacia Boat with Chest",
"item.minecraft.allay_spawn_egg": "Allay Spawn Egg",
@@ -4154,6 +4187,7 @@
"item.minecraft.bundle.fullness": "%s/%s",
"item.minecraft.burn_pottery_shard": "Burn Pottery Shard",
"item.minecraft.burn_pottery_sherd": "Burn Pottery Sherd",
"item.minecraft.camel_husk_spawn_egg": "Camel Husk Spawn Egg",
"item.minecraft.camel_spawn_egg": "Camel Spawn Egg",
"item.minecraft.carrot": "Carrot",
"item.minecraft.carrot_on_a_stick": "Carrot on a Stick",
@@ -4199,9 +4233,11 @@
"item.minecraft.copper_horse_armor": "Copper Horse Armor",
"item.minecraft.copper_ingot": "Copper Ingot",
"item.minecraft.copper_leggings": "Copper Leggings",
"item.minecraft.copper_nautilus_armor": "Copper Nautilus Armor",
"item.minecraft.copper_nugget": "Copper Nugget",
"item.minecraft.copper_pickaxe": "Copper Pickaxe",
"item.minecraft.copper_shovel": "Copper Shovel",
"item.minecraft.copper_spear": "Copper Spear",
"item.minecraft.copper_sword": "Copper Sword",
"item.minecraft.cow_spawn_egg": "Cow Spawn Egg",
"item.minecraft.creaking_spawn_egg": "Creaking Spawn Egg",
@@ -4232,8 +4268,10 @@
"item.minecraft.diamond_hoe": "Diamond Hoe",
"item.minecraft.diamond_horse_armor": "Diamond Horse Armor",
"item.minecraft.diamond_leggings": "Diamond Leggings",
"item.minecraft.diamond_nautilus_armor": "Diamond Nautilus Armor",
"item.minecraft.diamond_pickaxe": "Diamond Pickaxe",
"item.minecraft.diamond_shovel": "Diamond Shovel",
"item.minecraft.diamond_spear": "Diamond Spear",
"item.minecraft.diamond_sword": "Diamond Sword",
"item.minecraft.disc_fragment_5": "Disc Fragment",
"item.minecraft.disc_fragment_5.desc": "Music Disc - 5",
@@ -4342,8 +4380,10 @@
"item.minecraft.golden_hoe": "Golden Hoe",
"item.minecraft.golden_horse_armor": "Golden Horse Armor",
"item.minecraft.golden_leggings": "Golden Leggings",
"item.minecraft.golden_nautilus_armor": "Golden Nautilus Armor",
"item.minecraft.golden_pickaxe": "Golden Pickaxe",
"item.minecraft.golden_shovel": "Golden Shovel",
"item.minecraft.golden_spear": "Golden Spear",
"item.minecraft.golden_sword": "Golden Sword",
"item.minecraft.gray_bundle": "Gray Bundle",
"item.minecraft.gray_dye": "Gray Dye",
@@ -4384,9 +4424,11 @@
"item.minecraft.iron_horse_armor": "Iron Horse Armor",
"item.minecraft.iron_ingot": "Iron Ingot",
"item.minecraft.iron_leggings": "Iron Leggings",
"item.minecraft.iron_nautilus_armor": "Iron Nautilus Armor",
"item.minecraft.iron_nugget": "Iron Nugget",
"item.minecraft.iron_pickaxe": "Iron Pickaxe",
"item.minecraft.iron_shovel": "Iron Shovel",
"item.minecraft.iron_spear": "Iron Spear",
"item.minecraft.iron_sword": "Iron Sword",
"item.minecraft.item_frame": "Item Frame",
"item.minecraft.jungle_boat": "Jungle Boat",
@@ -4507,6 +4549,7 @@
"item.minecraft.mutton": "Raw Mutton",
"item.minecraft.name_tag": "Name Tag",
"item.minecraft.nautilus_shell": "Nautilus Shell",
"item.minecraft.nautilus_spawn_egg": "Nautilus Spawn Egg",
"item.minecraft.nether_brick": "Nether Brick",
"item.minecraft.nether_star": "Nether Star",
"item.minecraft.nether_wart": "Nether Wart",
@@ -4515,11 +4558,14 @@
"item.minecraft.netherite_chestplate": "Netherite Chestplate",
"item.minecraft.netherite_helmet": "Netherite Helmet",
"item.minecraft.netherite_hoe": "Netherite Hoe",
"item.minecraft.netherite_horse_armor": "Netherite Horse Armor",
"item.minecraft.netherite_ingot": "Netherite Ingot",
"item.minecraft.netherite_leggings": "Netherite Leggings",
"item.minecraft.netherite_nautilus_armor": "Netherite Nautilus Armor",
"item.minecraft.netherite_pickaxe": "Netherite Pickaxe",
"item.minecraft.netherite_scrap": "Netherite Scrap",
"item.minecraft.netherite_shovel": "Netherite Shovel",
"item.minecraft.netherite_spear": "Netherite Spear",
"item.minecraft.netherite_sword": "Netherite Sword",
"item.minecraft.netherite_upgrade_smithing_template": "Smithing Template",
"item.minecraft.netherite_upgrade_smithing_template.new": "Netherite Upgrade",
@@ -4536,6 +4582,7 @@
"item.minecraft.pale_oak_chest_boat": "Pale Oak Boat with Chest",
"item.minecraft.panda_spawn_egg": "Panda Spawn Egg",
"item.minecraft.paper": "Paper",
"item.minecraft.parched_spawn_egg": "Parched Spawn Egg",
"item.minecraft.parrot_spawn_egg": "Parrot Spawn Egg",
"item.minecraft.phantom_membrane": "Phantom Membrane",
"item.minecraft.phantom_spawn_egg": "Phantom Spawn Egg",
@@ -4732,6 +4779,7 @@
"item.minecraft.stone_hoe": "Stone Hoe",
"item.minecraft.stone_pickaxe": "Stone Pickaxe",
"item.minecraft.stone_shovel": "Stone Shovel",
"item.minecraft.stone_spear": "Stone Spear",
"item.minecraft.stone_sword": "Stone Sword",
"item.minecraft.stray_spawn_egg": "Stray Spawn Egg",
"item.minecraft.strider_spawn_egg": "Strider Spawn Egg",
@@ -4812,6 +4860,7 @@
"item.minecraft.wooden_hoe": "Wooden Hoe",
"item.minecraft.wooden_pickaxe": "Wooden Pickaxe",
"item.minecraft.wooden_shovel": "Wooden Shovel",
"item.minecraft.wooden_spear": "Wooden Spear",
"item.minecraft.wooden_sword": "Wooden Sword",
"item.minecraft.writable_book": "Book and Quill",
"item.minecraft.written_book": "Written Book",
@@ -4820,6 +4869,7 @@
"item.minecraft.yellow_harness": "Yellow Harness",
"item.minecraft.zoglin_spawn_egg": "Zoglin Spawn Egg",
"item.minecraft.zombie_horse_spawn_egg": "Zombie Horse Spawn Egg",
"item.minecraft.zombie_nautilus_spawn_egg": "Zombie Nautilus Spawn Egg",
"item.minecraft.zombie_spawn_egg": "Zombie Spawn Egg",
"item.minecraft.zombie_villager_spawn_egg": "Zombie Villager Spawn Egg",
"item.minecraft.zombified_piglin_spawn_egg": "Zombified Piglin Spawn Egg",
@@ -4903,6 +4953,7 @@
"key.categories.spectator": "Spectator",
"key.categories.ui": "Game Interface",
"key.category.minecraft.creative": "Creative Mode",
"key.category.minecraft.debug": "Debug",
"key.category.minecraft.gameplay": "Gameplay",
"key.category.minecraft.inventory": "Inventory",
"key.category.minecraft.misc": "Miscellaneous",
@@ -4911,6 +4962,27 @@
"key.category.minecraft.spectator": "Spectator",
"key.chat": "Open Chat",
"key.command": "Open Command",
"key.debug.clearChat": "Clear Chat",
"key.debug.copyLocation": "Copy Location",
"key.debug.copyRecreateCommand": "Copy Data",
"key.debug.crash": "Debug Crash",
"key.debug.debugOptions": "Debug Options",
"key.debug.dumpDynamicTextures": "Dump Dynamic Textures",
"key.debug.dumpVersion": "Dump Version Info",
"key.debug.focusPause": "Toggle Lost Focus Pause",
"key.debug.fpsCharts": "FPS Charts",
"key.debug.modifier": "Debug Modifier Key",
"key.debug.networkCharts": "Network Charts",
"key.debug.overlay": "Toggle Overlay",
"key.debug.profiling": "Start/Stop Profiling",
"key.debug.profilingChart": "Profiling Chart",
"key.debug.reloadChunk": "Reload Chunks",
"key.debug.reloadResourcePacks": "Reload Resource Packs",
"key.debug.showAdvancedTooltips": "Show Advanced Tooltips",
"key.debug.showChunkBorders": "Show Chunk Boundaries",
"key.debug.showHitboxes": "Show Hitboxes",
"key.debug.spectate": "Cycle Spectator",
"key.debug.switchGameMode": "Game Mode Switcher",
"key.drop": "Drop Selected Item",
"key.forward": "Walk Forward",
"key.fullscreen": "Toggle Fullscreen",
@@ -5029,7 +5101,9 @@
"key.spectatorOutlines": "Highlight Players",
"key.sprint": "Sprint",
"key.swapOffhand": "Swap Item With Off Hand",
"key.toggleGui": "Toggle GUI",
"key.togglePerspective": "Toggle Perspective",
"key.toggleSpectatorShaderEffects": "Toggle Spectator Shader Effects",
"key.use": "Use Item/Place Block",
"known_server_link.announcements": "Announcements",
"known_server_link.community": "Community",
@@ -5087,6 +5161,12 @@
"mco.backup.entry.undefined": "Undefined Change",
"mco.backup.entry.uploaded": "Uploaded",
"mco.backup.entry.worldType": "World Type",
"mco.backup.entry.worldType.adventureMap": "Adventure Map",
"mco.backup.entry.worldType.experience": "Experience",
"mco.backup.entry.worldType.inspiration": "Inspiration",
"mco.backup.entry.worldType.minigame": "Minigame",
"mco.backup.entry.worldType.normal": "Normal",
"mco.backup.entry.worldType.unknown": "Unknown",
"mco.backup.generate.world": "Generate world",
"mco.backup.info.title": "Changes From Last Backup",
"mco.backup.narration": "Backup from %s",
@@ -5167,6 +5247,7 @@
"mco.configure.world.location": "Location",
"mco.configure.world.minigame": "Current: %s",
"mco.configure.world.name": "Realm Name",
"mco.configure.world.name.validation.whitespace": "Must not start or end with whitespace. It will be trimmed.",
"mco.configure.world.opening": "Opening the Realm...",
"mco.configure.world.players.error": "A player with the provided name does not exist",
"mco.configure.world.players.invite.duplicate": "A player with the provided name has already been invited to the Realm",
@@ -5622,7 +5703,11 @@
"narration.button.usage.hovered": "Left click to activate",
"narration.checkbox": "Checkbox: %s",
"narration.checkbox.usage.focused": "Press Enter to toggle",
"narration.checkbox.usage.focused.check": "Press Enter to check",
"narration.checkbox.usage.focused.uncheck": "Press Enter to uncheck",
"narration.checkbox.usage.hovered": "Left click to toggle",
"narration.checkbox.usage.hovered.check": "Left click to check",
"narration.checkbox.usage.hovered.uncheck": "Left click to uncheck",
"narration.component_list.usage": "Press Tab to navigate to the next element",
"narration.cycle_button.usage.focused": "Press Enter to switch to %s",
"narration.cycle_button.usage.hovered": "Left click to switch to %s",
@@ -5727,6 +5812,7 @@
"options.biomeBlendRadius.11": "11x11 (Extreme)",
"options.biomeBlendRadius.13": "13x13 (Showoff)",
"options.biomeBlendRadius.15": "15x15 (Maximum)",
"options.blocks": "%s Blocks",
"options.chat": "Chat Settings...",
"options.chat.color": "Colors",
"options.chat.delay": "Chat Delay: %s second(s)",
@@ -5746,11 +5832,17 @@
"options.chat.visibility.hidden": "Hidden",
"options.chat.visibility.system": "Commands Only",
"options.chat.width": "Width",
"options.chunkFade": "Chunk Fade Time",
"options.chunkFade.none": "Chunk Fade: None",
"options.chunkFade.seconds": "Chunk Fade: %s second(s)",
"options.chunkFade.tooltip": "How long in seconds chunks should fade in when they're first rendered, if at all.",
"options.chunks": "%s Chunks",
"options.clouds.fancy": "Fancy",
"options.clouds.fast": "Fast",
"options.controls": "Controls...",
"options.credits_and_attribution": "Credits & Attribution...",
"options.cutoutLeaves": "See-Through Leaves",
"options.cutoutLeaves.tooltip": "Allows you to see through gaps in leaves. Disabling improves performance.",
"options.damageTiltStrength": "Damage Tilt",
"options.damageTiltStrength.tooltip": "The amount of camera shake caused by being hurt.",
"options.darkMojangStudiosBackgroundColor": "Monochrome Logo",
@@ -5800,12 +5892,15 @@
"options.glintStrength": "Glint Strength",
"options.glintStrength.tooltip": "Controls how transparent the visual glint is on enchanted items.",
"options.graphics": "Graphics",
"options.graphics.custom": "Custom",
"options.graphics.fabulous": "Fabulous!",
"options.graphics.fabulous.tooltip": "%s graphics uses screen shaders for drawing weather, clouds, and particles behind translucent blocks and water.\nThis may severely impact performance for portable devices and 4K displays.",
"options.graphics.fancy": "Fancy",
"options.graphics.fancy.tooltip": "Fancy graphics balances performance and quality for the majority of machines.\nWeather, clouds, and particles may not appear behind translucent blocks or water.",
"options.graphics.fast": "Fast",
"options.graphics.fast.tooltip": "Fast graphics reduces the amount of visible rain and snow.\nTransparency effects are disabled for various blocks such as leaves.",
"options.graphics.preset": "Preset",
"options.graphics.preset.tooltip": "Sets \"Quality & Performance\" settings to reasonable defaults corresponding to the desired quality.",
"options.graphics.warning.accept": "Continue Without Support",
"options.graphics.warning.cancel": "Take Me Back",
"options.graphics.warning.message": "Your graphics device is detected as unsupported for the %s graphics option.\n\nYou may ignore this and continue, however support will not be provided for your device if you choose to use %s graphics.",
@@ -5822,6 +5917,8 @@
"options.hideMatchedNames.tooltip": "3rd-party Servers may send chat messages in non-standard formats.\nWith this option on, hidden players will be matched based on chat sender names.",
"options.hideSplashTexts": "Hide Splash Texts",
"options.hideSplashTexts.tooltip": "Hides the yellow splash text in the main menu.",
"options.improvedTransparency": "Improved Transparency",
"options.improvedTransparency.tooltip": "An experimental approach that uses screen shaders for drawing weather, clouds, and particles behind translucent blocks and water.\nThis will impact GPU performance.",
"options.inactivityFpsLimit": "Reduce FPS when",
"options.inactivityFpsLimit.afk": "AFK",
"options.inactivityFpsLimit.afk.tooltip": "Limits framerate to 30 when the game is not getting any player input for more than a minute. Further limits it to 10 after 9 more minutes.",
@@ -5841,6 +5938,8 @@
"options.mainHand": "Main Hand",
"options.mainHand.left": "Left",
"options.mainHand.right": "Right",
"options.maxAnisotropy": "Anisotropic Filtering",
"options.maxAnisotropy.tooltip": "Each level significantly improves how smooth textures look, but impacts performance and significantly impacts video memory usage. Requires Texture Filtering to be set to Anisotropic.",
"options.mipmapLevels": "Mipmap Levels",
"options.modelPart.cape": "Cape",
"options.modelPart.hat": "Hat",
@@ -5859,6 +5958,13 @@
"options.music_frequency.default": "Default",
"options.music_frequency.frequent": "Frequent",
"options.music_frequency.tooltip": "Changes how frequently music plays while in a game world.",
"options.musicToast": "Music Toast",
"options.musicToast.never": "Never",
"options.musicToast.never.tooltip": "No music toast is shown.",
"options.musicToast.pauseMenu": "Pause Menu",
"options.musicToast.pauseMenu.tooltip": "A music toast is constantly displayed in the in-game pause menu while a song is playing.",
"options.musicToast.pauseMenuAndToast": "Pause Menu and Toast",
"options.musicToast.pauseMenuAndToast.tooltip": "Displays a toast when a song starts playing. The same toast is constantly displayed in the in-game pause menu while a song is playing.",
"options.narrator": "Narrator",
"options.narrator.all": "Narrates All",
"options.narrator.chat": "Narrates Chat",
@@ -5923,14 +6029,29 @@
"options.telemetry.state.all": "All",
"options.telemetry.state.minimal": "Minimal",
"options.telemetry.state.none": "None",
"options.textureFiltering": "Texture Filtering",
"options.textureFiltering.anisotropic": "Anisotropic",
"options.textureFiltering.anisotropic.tooltip": "A hardware based filtering method, but impacts performance and significantly impacts video memory usage. May not be supported on all hardware.",
"options.textureFiltering.none": "None",
"options.textureFiltering.none.tooltip": "Textures are displayed without any filtering. Blocks may look blurry when viewed at an angle.",
"options.textureFiltering.rgss": "RGSS",
"options.textureFiltering.rgss.tooltip": "(Rotated Grid Super Sampling)\nA shader based filtering method that improves texture quality with a moderate performance impact.",
"options.title": "Options",
"options.touchscreen": "Touchscreen Mode",
"options.value": "%s",
"options.video": "Video Settings...",
"options.video.display.header": "Display",
"options.video.interface.header": "Interface",
"options.video.preferences.header": "Preferences",
"options.video.quality.header": "Quality & Performance",
"options.videoTitle": "Video Settings",
"options.viewBobbing": "View Bobbing",
"options.vignette": "Show Vignette",
"options.vignette.tooltip": "This is a subtle texture over the game screen used for reducing brightness towards the edges of the screen and warning about the world border.",
"options.visible": "Shown",
"options.vsync": "VSync",
"options.weatherRadius": "Weather Effect Radius",
"options.weatherRadius.tooltip": "Radius of the area where rain and snow effects are visible. Very low performance impact.",
"outOfMemory.message": "Minecraft has run out of memory.\n\nThis could be caused by a bug in the game or by the Java Virtual Machine not being allocated enough memory.\n\nTo prevent world corruption, the current game has quit. We've tried to free up enough memory to let you go back to the main menu and back to playing, but this may not have worked.\n\nPlease restart the game if you see this message again.",
"outOfMemory.title": "Out of memory!",
"pack.available.title": "Available",
@@ -6390,6 +6511,7 @@
"stat.minecraft.leave_game": "Games Quit",
"stat.minecraft.minecart_one_cm": "Distance by Minecart",
"stat.minecraft.mob_kills": "Mob Kills",
"stat.minecraft.nautilus_one_cm": "Distance by Nautilus",
"stat.minecraft.open_barrel": "Barrels Opened",
"stat.minecraft.open_chest": "Chests Opened",
"stat.minecraft.open_enderchest": "Ender Chests Opened",
@@ -6665,6 +6787,14 @@
"subtitles.entity.axolotl.idle_water": "Axolotl chirps",
"subtitles.entity.axolotl.splash": "Axolotl splashes",
"subtitles.entity.axolotl.swim": "Axolotl swims",
"subtitles.entity.baby_nautilus.ambient": "Baby Nautilus chitters",
"subtitles.entity.baby_nautilus.ambient_land": "Baby Nautilus chitters",
"subtitles.entity.baby_nautilus.death": "Baby Nautilus dies",
"subtitles.entity.baby_nautilus.death_land": "Baby Nautilus dies",
"subtitles.entity.baby_nautilus.eat": "Baby Nautilus eats",
"subtitles.entity.baby_nautilus.hurt": "Baby Nautilus hurts",
"subtitles.entity.baby_nautilus.hurt_land": "Baby Nautilus hurts",
"subtitles.entity.baby_nautilus.swim": "Baby Nautilus swims",
"subtitles.entity.bat.ambient": "Bat screeches",
"subtitles.entity.bat.death": "Bat dies",
"subtitles.entity.bat.hurt": "Bat hurts",
@@ -6699,6 +6829,15 @@
"subtitles.entity.breeze.slide": "Breeze slides",
"subtitles.entity.breeze.whirl": "Breeze whirls",
"subtitles.entity.breeze.wind_burst": "Wind Charge bursts",
"subtitles.entity.camel_husk.ambient": "Camel Husk grumphs",
"subtitles.entity.camel_husk.dash": "Camel Husk yeets",
"subtitles.entity.camel_husk.dash_ready": "Camel Husk recovers",
"subtitles.entity.camel_husk.death": "Camel Husk dies",
"subtitles.entity.camel_husk.eat": "Camel Husk eats",
"subtitles.entity.camel_husk.hurt": "Camel Husk hurts",
"subtitles.entity.camel_husk.saddle": "Saddle equips",
"subtitles.entity.camel_husk.sit": "Camel Husk sits down",
"subtitles.entity.camel_husk.stand": "Camel Husk stands up",
"subtitles.entity.camel.ambient": "Camel grunts",
"subtitles.entity.camel.dash": "Camel yeets",
"subtitles.entity.camel.dash_ready": "Camel recovers",
@@ -6963,6 +7102,18 @@
"subtitles.entity.mule.eat": "Mule eats",
"subtitles.entity.mule.hurt": "Mule hurts",
"subtitles.entity.mule.jump": "Mule jumps",
"subtitles.entity.nautilus.ambient": "Nautilus clacks",
"subtitles.entity.nautilus.ambient_land": "Nautilus clacks",
"subtitles.entity.nautilus.dash": "Nautilus jets",
"subtitles.entity.nautilus.dash_land": "Nautilus jets",
"subtitles.entity.nautilus.dash_ready": "Nautilus recovers",
"subtitles.entity.nautilus.dash_ready_land": "Nautilus recovers",
"subtitles.entity.nautilus.death": "Nautilus dies",
"subtitles.entity.nautilus.death_land": "Nautilus dies",
"subtitles.entity.nautilus.eat": "Nautilus eats",
"subtitles.entity.nautilus.hurt": "Nautilus hurts",
"subtitles.entity.nautilus.hurt_land": "Nautilus hurts",
"subtitles.entity.nautilus.swim": "Nautilus swims",
"subtitles.entity.painting.break": "Painting broken",
"subtitles.entity.painting.place": "Painting placed",
"subtitles.entity.panda.aggressive_ambient": "Panda huffs",
@@ -6976,6 +7127,9 @@
"subtitles.entity.panda.sneeze": "Panda sneezes",
"subtitles.entity.panda.step": "Panda steps",
"subtitles.entity.panda.worried_ambient": "Panda whimpers",
"subtitles.entity.parched.ambient": "Parched crackles",
"subtitles.entity.parched.death": "Parched dies",
"subtitles.entity.parched.hurt": "Parched hurts",
"subtitles.entity.parrot.ambient": "Parrot talks",
"subtitles.entity.parrot.death": "Parrot dies",
"subtitles.entity.parrot.eats": "Parrot eats",
@@ -6984,6 +7138,7 @@
"subtitles.entity.parrot.imitate.blaze": "Parrot breathes",
"subtitles.entity.parrot.imitate.bogged": "Parrot rattles",
"subtitles.entity.parrot.imitate.breeze": "Parrot whirs",
"subtitles.entity.parrot.imitate.camel_husk": "Parrot grumphs",
"subtitles.entity.parrot.imitate.creaking": "Parrot creaks",
"subtitles.entity.parrot.imitate.creeper": "Parrot hisses",
"subtitles.entity.parrot.imitate.drowned": "Parrot gurgles",
@@ -6997,6 +7152,7 @@
"subtitles.entity.parrot.imitate.husk": "Parrot groans",
"subtitles.entity.parrot.imitate.illusioner": "Parrot murmurs",
"subtitles.entity.parrot.imitate.magma_cube": "Parrot squishes",
"subtitles.entity.parrot.imitate.parched": "Parrot crackles",
"subtitles.entity.parrot.imitate.phantom": "Parrot screeches",
"subtitles.entity.parrot.imitate.piglin": "Parrot snorts",
"subtitles.entity.parrot.imitate.piglin_brute": "Parrot snorts",
@@ -7016,6 +7172,8 @@
"subtitles.entity.parrot.imitate.wither_skeleton": "Parrot rattles",
"subtitles.entity.parrot.imitate.zoglin": "Parrot growls",
"subtitles.entity.parrot.imitate.zombie": "Parrot groans",
"subtitles.entity.parrot.imitate.zombie_horse": "Parrot groans",
"subtitles.entity.parrot.imitate.zombie_nautilus": "Parrot gargles",
"subtitles.entity.parrot.imitate.zombie_villager": "Parrot groans",
"subtitles.entity.phantom.ambient": "Phantom screeches",
"subtitles.entity.phantom.bite": "Phantom bites",
@@ -7260,8 +7418,22 @@
"subtitles.entity.zoglin.hurt": "Zoglin hurts",
"subtitles.entity.zoglin.step": "Zoglin steps",
"subtitles.entity.zombie_horse.ambient": "Zombie Horse cries",
"subtitles.entity.zombie_horse.angry": "Zombie Horse neighs",
"subtitles.entity.zombie_horse.death": "Zombie Horse dies",
"subtitles.entity.zombie_horse.eat": "Zombie Horse eats",
"subtitles.entity.zombie_horse.hurt": "Zombie Horse hurts",
"subtitles.entity.zombie_nautilus.ambient": "Zombie Nautilus burbles",
"subtitles.entity.zombie_nautilus.ambient_land": "Zombie Nautilus burbles",
"subtitles.entity.zombie_nautilus.dash": "Zombie Nautilus jets",
"subtitles.entity.zombie_nautilus.dash_land": "Zombie Nautilus jets",
"subtitles.entity.zombie_nautilus.dash_ready": "Zombie Nautilus recovers",
"subtitles.entity.zombie_nautilus.dash_ready_land": "Zombie Nautilus recovers",
"subtitles.entity.zombie_nautilus.death": "Zombie Nautilus dies",
"subtitles.entity.zombie_nautilus.death_land": "Zombie Nautilus dies",
"subtitles.entity.zombie_nautilus.eat": "Zombie Nautilus eats",
"subtitles.entity.zombie_nautilus.hurt": "Zombie Nautilus hurts",
"subtitles.entity.zombie_nautilus.hurt_land": "Zombie Nautilus hurts",
"subtitles.entity.zombie_nautilus.swim": "Zombie Nautilus swims",
"subtitles.entity.zombie_villager.ambient": "Zombie Villager groans",
"subtitles.entity.zombie_villager.converted": "Zombie Villager vociferates",
"subtitles.entity.zombie_villager.cure": "Zombie Villager snuffles",
@@ -7291,9 +7463,11 @@
"subtitles.item.armor.equip_gold": "Gold armor clinks",
"subtitles.item.armor.equip_iron": "Iron armor clanks",
"subtitles.item.armor.equip_leather": "Leather armor rustles",
"subtitles.item.armor.equip_nautilus": "Nautilus Armor equips",
"subtitles.item.armor.equip_netherite": "Netherite armor clanks",
"subtitles.item.armor.equip_turtle": "Turtle Shell thunks",
"subtitles.item.armor.equip_wolf": "Wolf Armor is fastened",
"subtitles.item.armor.unequip_nautilus": "Nautilus Armor unequips",
"subtitles.item.armor.unequip_wolf": "Wolf Armor snips away",
"subtitles.item.axe.scrape": "Axe scrapes",
"subtitles.item.axe.strip": "Axe strips",
@@ -7341,6 +7515,8 @@
"subtitles.item.lodestone_compass.lock": "Lodestone Compass locks onto Lodestone",
"subtitles.item.mace.smash_air": "Mace smashes",
"subtitles.item.mace.smash_ground": "Mace smashes",
"subtitles.item.nautilus_saddle_equip": "Saddle equips",
"subtitles.item.nautilus_saddle_underwater_equip": "Saddle equips",
"subtitles.item.nether_wart.plant": "Crop planted",
"subtitles.item.ominous_bottle.dispose": "Bottle breaks",
"subtitles.item.saddle.unequip": "Saddle snips away",
@@ -7348,6 +7524,13 @@
"subtitles.item.shears.snip": "Shears snip",
"subtitles.item.shield.block": "Shield blocks",
"subtitles.item.shovel.flatten": "Shovel flattens",
"subtitles.item.spear_wood.attack": "Spear jabs",
"subtitles.item.spear_wood.hit": "Spear hits",
"subtitles.item.spear_wood.use": "Charges with Spear",
"subtitles.item.spear.attack": "Spear jabs",
"subtitles.item.spear.hit": "Spear hits",
"subtitles.item.spear.lunge": "Spear lunges",
"subtitles.item.spear.use": "Charges with Spear",
"subtitles.item.spyglass.stop_using": "Spyglass retracts",
"subtitles.item.spyglass.use": "Spyglass expands",
"subtitles.item.totem.use": "Totem activates",
@@ -7357,6 +7540,7 @@
"subtitles.item.trident.riptide": "Trident zooms",
"subtitles.item.trident.throw": "Trident clangs",
"subtitles.item.trident.thunder": "Trident thunder cracks",
"subtitles.item.underwater_saddle.equip": "Saddle equips",
"subtitles.item.wolf_armor.break": "Wolf Armor breaks",
"subtitles.item.wolf_armor.crack": "Wolf Armor cracks",
"subtitles.item.wolf_armor.damage": "Wolf Armor takes damage",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,6 @@
{
"ADD_SPRINTING_PARTICLES_OR_RESET_SPAWNER_MINECART_SPAWN_DELAY": 1,
"KINETIC_ATTACK": 2,
"PLAY_DEATH_SOUND_OR_ADD_PROJECTILE_HIT_PARTICLES": 3,
"PLAY_ATTACK_SOUND": 4,
"ADD_NEGATIVE_PLAYER_REACTION_PARTICLES": 6,

View File

@@ -1,39 +1,39 @@
{
"252": 920,
"52": 415,
"243": 434,
"229": 422,
"236": 427,
"237": 428,
"233": 424,
"231": 1164,
"51": 414,
"239": 430,
"50": 413,
"249": 917,
"206": 1147,
"238": 429,
"269": 791,
"56": 419,
"247": 436,
"203": 421,
"340": 438,
"242": 433,
"244": 411,
"230": 1163,
"53": 416,
"55": 418,
"233": 424,
"205": 1146,
"232": 423,
"249": 917,
"207": 437,
"53": 416,
"243": 434,
"240": 431,
"236": 427,
"55": 418,
"251": 919,
"57": 420,
"244": 411,
"54": 417,
"241": 432,
"57": 420,
"206": 1147,
"247": 436,
"269": 791,
"250": 918,
"231": 1164,
"49": 412,
"239": 430,
"242": 433,
"252": 920,
"234": 425,
"237": 428,
"52": 415,
"230": 1163,
"238": 429,
"235": 426,
"248": 435,
"234": 425,
"207": 437,
"49": 412,
"240": 431,
"205": 1146
"203": 421,
"340": 438,
"50": 413,
"51": 414,
"229": 422,
"241": 432
}

View File

@@ -134,11 +134,6 @@
"745": 300,
"332": 300,
"741": 300,
"1261": 300,
"1262": 300,
"1263": 300,
"1264": 300,
"1265": 300,
"1266": 300,
"1267": 300,
"1268": 300,
@@ -150,6 +145,11 @@
"1274": 300,
"1275": 300,
"1276": 300,
"1277": 300,
"1278": 300,
"1279": 300,
"1280": 300,
"1281": 300,
"894": 300,
"1053": 300,
"335": 300,
@@ -175,6 +175,7 @@
"1009": 800,
"912": 200,
"911": 200,
"1296": 200,
"915": 200,
"914": 200,
"913": 200,
@@ -264,18 +265,18 @@
"519": 67,
"520": 67,
"1027": 4001,
"1322": 300,
"1339": 300,
"269": 50,
"207": 100,
"209": 100,
"210": 100,
"716": 50,
"1324": 300,
"1337": 300,
"1340": 300,
"1341": 300,
"1343": 300,
"1336": 300,
"1354": 300,
"1357": 300,
"1358": 300,
"1360": 300,
"1353": 300,
"143": 300,
"260": 100
}

View File

@@ -1,61 +1,61 @@
{
"allowEnteringNetherUsingPortals": true,
"allowFireTicksAwayFromPlayer": false,
"announceAdvancements": true,
"blockExplosionDropDecay": true,
"commandBlockOutput": true,
"commandBlocksEnabled": true,
"commandModificationBlockLimit": 32768,
"disableElytraMovementCheck": false,
"disablePlayerMovementCheck": false,
"disableRaids": false,
"doDaylightCycle": true,
"doEntityDrops": true,
"doFireTick": true,
"doImmediateRespawn": false,
"doInsomnia": true,
"doLimitedCrafting": false,
"doMobLoot": true,
"doMobSpawning": true,
"doPatrolSpawning": true,
"doTileDrops": true,
"doTraderSpawning": true,
"doVinesSpread": true,
"doWardenSpawning": true,
"doWeatherCycle": true,
"drowningDamage": true,
"enderPearlsVanishOnDeath": true,
"fallDamage": true,
"fireDamage": true,
"forgiveDeadPlayers": true,
"freezeDamage": true,
"globalSoundEvents": true,
"keepInventory": false,
"lavaSourceConversion": false,
"locatorBar": true,
"logAdminCommands": true,
"maxCommandChainLength": 65536,
"maxCommandForkCount": 65536,
"maxEntityCramming": 24,
"mobExplosionDropDecay": true,
"mobGriefing": true,
"naturalRegeneration": true,
"playersNetherPortalCreativeDelay": 0,
"playersNetherPortalDefaultDelay": 80,
"playersSleepingPercentage": 100,
"projectilesCanBreakBlocks": true,
"advance_time": true,
"advance_weather": true,
"allow_entering_nether_using_portals": true,
"block_drops": true,
"block_explosion_drop_decay": true,
"command_blocks_work": true,
"command_block_output": true,
"drowning_damage": true,
"elytra_movement_check": true,
"ender_pearls_vanish_on_death": true,
"entity_drops": true,
"fall_damage": true,
"fire_damage": true,
"fire_spread_radius_around_player": 128,
"forgive_dead_players": true,
"freeze_damage": true,
"global_sound_events": true,
"immediate_respawn": false,
"keep_inventory": false,
"lava_source_conversion": false,
"limited_crafting": false,
"locator_bar": true,
"log_admin_commands": true,
"max_block_modifications": 32768,
"max_command_forks": 65536,
"max_command_sequence_length": 65536,
"max_entity_cramming": 24,
"max_minecart_speed": 8,
"max_snow_accumulation_height": 1,
"mob_drops": true,
"mob_explosion_drop_decay": true,
"mob_griefing": true,
"natural_health_regeneration": true,
"player_movement_check": true,
"players_nether_portal_creative_delay": 0,
"players_nether_portal_default_delay": 80,
"players_sleeping_percentage": 100,
"projectiles_can_break_blocks": true,
"pvp": true,
"randomTickSpeed": 3,
"reducedDebugInfo": false,
"sendCommandFeedback": true,
"showDeathMessages": true,
"snowAccumulationHeight": 1,
"spawnMonsters": true,
"spawnRadius": 10,
"spawnerBlocksEnabled": true,
"spectatorsGenerateChunks": true,
"tntExplodes": true,
"tntExplosionDropDecay": false,
"universalAnger": false,
"waterSourceConversion": true
"raids": true,
"random_tick_speed": 3,
"reduced_debug_info": false,
"respawn_radius": 10,
"send_command_feedback": true,
"show_advancement_messages": true,
"show_death_messages": true,
"spawner_blocks_work": true,
"spawn_mobs": true,
"spawn_monsters": true,
"spawn_patrols": true,
"spawn_phantoms": true,
"spawn_wandering_traders": true,
"spawn_wardens": true,
"spectators_generate_chunks": true,
"spread_vines": true,
"tnt_explodes": true,
"tnt_explosion_drop_decay": false,
"universal_anger": false,
"water_source_conversion": true
}

File diff suppressed because it is too large Load Diff

View File

@@ -47,8 +47,8 @@
"content"
],
"style": {
"italic": true,
"color": "gray"
"color": "gray",
"italic": true
}
},
"narration": {
@@ -70,8 +70,8 @@
"content"
],
"style": {
"italic": true,
"color": "gray"
"color": "gray",
"italic": true
}
},
"narration": {

View File

@@ -1,5 +1,5 @@
{
"version": 773,
"version": 774,
"serverbound": {
"handshake": [
"intention"
@@ -172,7 +172,7 @@
"forget_level_chunk",
"game_event",
"game_test_highlight_pos",
"horse_screen_open",
"mount_screen_open",
"hurt_animation",
"initialize_border",
"keep_alive",

View File

@@ -1,216 +1,216 @@
[
{
"hash_key": -868937173,
"hash_key": -1226489813,
"enum_name": "attached",
"serialized_name": "attached",
"type": "boolean"
},
{
"hash_key": -1626301765,
"hash_key": -1983854405,
"enum_name": "berries",
"serialized_name": "berries",
"type": "boolean"
},
{
"hash_key": -1313842550,
"hash_key": -1671395190,
"enum_name": "bloom",
"serialized_name": "bloom",
"type": "boolean"
},
{
"hash_key": 1504063154,
"hash_key": 1146510514,
"enum_name": "bottom",
"serialized_name": "bottom",
"type": "boolean"
},
{
"hash_key": 1635772599,
"hash_key": 1278219959,
"enum_name": "can_summon",
"serialized_name": "can_summon",
"type": "boolean"
},
{
"hash_key": -199544051,
"hash_key": -557096691,
"enum_name": "conditional",
"serialized_name": "conditional",
"type": "boolean"
},
{
"hash_key": -1136256844,
"hash_key": -1493809484,
"enum_name": "disarmed",
"serialized_name": "disarmed",
"type": "boolean"
},
{
"hash_key": -1404583493,
"hash_key": -1762136133,
"enum_name": "drag",
"serialized_name": "drag",
"type": "boolean"
},
{
"hash_key": 1277697992,
"hash_key": 920145352,
"enum_name": "enabled",
"serialized_name": "enabled",
"type": "boolean"
},
{
"hash_key": 1066402240,
"hash_key": 708849600,
"enum_name": "extended",
"serialized_name": "extended",
"type": "boolean"
},
{
"hash_key": -1407574344,
"hash_key": -1765126984,
"enum_name": "eye",
"serialized_name": "eye",
"type": "boolean"
},
{
"hash_key": 1803476750,
"hash_key": 1445924110,
"enum_name": "falling",
"serialized_name": "falling",
"type": "boolean"
},
{
"hash_key": -714785097,
"hash_key": -1072337737,
"enum_name": "hanging",
"serialized_name": "hanging",
"type": "boolean"
},
{
"hash_key": 2044513411,
"hash_key": 1686960771,
"enum_name": "has_bottle_0",
"serialized_name": "has_bottle_0",
"type": "boolean"
},
{
"hash_key": 2044513412,
"hash_key": 1686960772,
"enum_name": "has_bottle_1",
"serialized_name": "has_bottle_1",
"type": "boolean"
},
{
"hash_key": 2044513413,
"hash_key": 1686960773,
"enum_name": "has_bottle_2",
"serialized_name": "has_bottle_2",
"type": "boolean"
},
{
"hash_key": 733620765,
"hash_key": 376068125,
"enum_name": "has_record",
"serialized_name": "has_record",
"type": "boolean"
},
{
"hash_key": -1267366411,
"hash_key": -1624919051,
"enum_name": "has_book",
"serialized_name": "has_book",
"type": "boolean"
},
{
"hash_key": -780000388,
"hash_key": -1137553028,
"enum_name": "inverted",
"serialized_name": "inverted",
"type": "boolean"
},
{
"hash_key": 531513643,
"hash_key": 173961003,
"enum_name": "in_wall",
"serialized_name": "in_wall",
"type": "boolean"
},
{
"hash_key": -1407568098,
"hash_key": -1765120738,
"enum_name": "lit",
"serialized_name": "lit",
"type": "boolean"
},
{
"hash_key": 1789839249,
"hash_key": 1432286609,
"enum_name": "locked",
"serialized_name": "locked",
"type": "boolean"
},
{
"hash_key": 321236144,
"hash_key": -36316496,
"enum_name": "natural",
"serialized_name": "natural",
"type": "boolean"
},
{
"hash_key": -614926555,
"hash_key": -972479195,
"enum_name": "occupied",
"serialized_name": "occupied",
"type": "boolean"
},
{
"hash_key": -1404257583,
"hash_key": -1761810223,
"enum_name": "open",
"serialized_name": "open",
"type": "boolean"
},
{
"hash_key": -895212770,
"hash_key": -1252765410,
"enum_name": "persistent",
"serialized_name": "persistent",
"type": "boolean"
},
{
"hash_key": -1795621653,
"hash_key": 2141793003,
"enum_name": "powered",
"serialized_name": "powered",
"type": "boolean"
},
{
"hash_key": -1298261757,
"hash_key": -1655814397,
"enum_name": "short",
"serialized_name": "short",
"type": "boolean"
},
{
"hash_key": -1044026825,
"hash_key": -1401579465,
"enum_name": "shrieking",
"serialized_name": "shrieking",
"type": "boolean"
},
{
"hash_key": -735003148,
"hash_key": -1092555788,
"enum_name": "signal_fire",
"serialized_name": "signal_fire",
"type": "boolean"
},
{
"hash_key": -1298082851,
"hash_key": -1655635491,
"enum_name": "snowy",
"serialized_name": "snowy",
"type": "boolean"
},
{
"hash_key": -1407560414,
"hash_key": -1765113054,
"enum_name": "tip",
"serialized_name": "tip",
"type": "boolean"
},
{
"hash_key": -2056427298,
"hash_key": 1880987358,
"enum_name": "triggered",
"serialized_name": "triggered",
"type": "boolean"
},
{
"hash_key": -1413671013,
"hash_key": -1771223653,
"enum_name": "unstable",
"serialized_name": "unstable",
"type": "boolean"
},
{
"hash_key": -365764128,
"hash_key": -723316768,
"enum_name": "waterlogged",
"serialized_name": "waterlogged",
"type": "boolean"
},
{
"hash_key": 2124340638,
"hash_key": -14062817,
"enum_name": "horizontal_axis",
"serialized_name": "axis",
"type": "enum",
@@ -220,7 +220,7 @@
]
},
{
"hash_key": 1941333927,
"hash_key": 2116573960,
"enum_name": "axis",
"serialized_name": "axis",
"type": "enum",
@@ -231,43 +231,43 @@
]
},
{
"hash_key": -1407671518,
"hash_key": -1765224158,
"enum_name": "up",
"serialized_name": "up",
"type": "boolean"
},
{
"hash_key": -1404585687,
"hash_key": -1762138327,
"enum_name": "down",
"serialized_name": "down",
"type": "boolean"
},
{
"hash_key": -1302667892,
"hash_key": -1660220532,
"enum_name": "north",
"serialized_name": "north",
"type": "boolean"
},
{
"hash_key": -1404569468,
"hash_key": -1762122108,
"enum_name": "east",
"serialized_name": "east",
"type": "boolean"
},
{
"hash_key": -1298047404,
"hash_key": -1655600044,
"enum_name": "south",
"serialized_name": "south",
"type": "boolean"
},
{
"hash_key": -1404029386,
"hash_key": -1761582026,
"enum_name": "west",
"serialized_name": "west",
"type": "boolean"
},
{
"hash_key": 298315299,
"hash_key": 3357405,
"enum_name": "facing",
"serialized_name": "facing",
"type": "enum",
@@ -281,7 +281,7 @@
]
},
{
"hash_key": 334173612,
"hash_key": -888841356,
"enum_name": "hopper_facing",
"serialized_name": "facing",
"type": "enum",
@@ -294,7 +294,7 @@
]
},
{
"hash_key": 1538441040,
"hash_key": -1610209386,
"enum_name": "horizontal_facing",
"serialized_name": "facing",
"type": "enum",
@@ -306,7 +306,7 @@
]
},
{
"hash_key": -847270335,
"hash_key": -1516062537,
"enum_name": "flower_amount",
"serialized_name": "flower_amount",
"type": "int",
@@ -314,7 +314,7 @@
"max": 4
},
{
"hash_key": -666272999,
"hash_key": -1335065201,
"enum_name": "segment_amount",
"serialized_name": "segment_amount",
"type": "int",
@@ -322,7 +322,7 @@
"max": 4
},
{
"hash_key": -1039513742,
"hash_key": -1275422999,
"enum_name": "orientation",
"serialized_name": "orientation",
"type": "enum",
@@ -342,7 +342,7 @@
]
},
{
"hash_key": -194458341,
"hash_key": 843751029,
"enum_name": "block_face",
"serialized_name": "face",
"type": "enum",
@@ -353,7 +353,7 @@
]
},
{
"hash_key": -504947085,
"hash_key": -339778284,
"enum_name": "attachment",
"serialized_name": "attachment",
"type": "enum",
@@ -365,7 +365,7 @@
]
},
{
"hash_key": -2013829128,
"hash_key": 638294841,
"enum_name": "east_wall_shape",
"serialized_name": "east",
"type": "enum",
@@ -376,7 +376,7 @@
]
},
{
"hash_key": 1145119728,
"hash_key": -497723599,
"enum_name": "north_wall_shape",
"serialized_name": "north",
"type": "enum",
@@ -387,7 +387,7 @@
]
},
{
"hash_key": 1288354856,
"hash_key": -354488471,
"enum_name": "south_wall_shape",
"serialized_name": "south",
"type": "enum",
@@ -398,7 +398,7 @@
]
},
{
"hash_key": -1997086586,
"hash_key": 655037383,
"enum_name": "west_wall_shape",
"serialized_name": "west",
"type": "enum",
@@ -409,7 +409,7 @@
]
},
{
"hash_key": -1760520997,
"hash_key": 1832748751,
"enum_name": "east_wire_connection",
"serialized_name": "east",
"type": "enum",
@@ -420,7 +420,7 @@
]
},
{
"hash_key": 1398427859,
"hash_key": 696730311,
"enum_name": "north_wire_connection",
"serialized_name": "north",
"type": "enum",
@@ -431,7 +431,7 @@
]
},
{
"hash_key": 1541662987,
"hash_key": 839965439,
"enum_name": "south_wire_connection",
"serialized_name": "south",
"type": "enum",
@@ -442,7 +442,7 @@
]
},
{
"hash_key": -1743778455,
"hash_key": 1849491293,
"enum_name": "west_wire_connection",
"serialized_name": "west",
"type": "enum",
@@ -453,7 +453,7 @@
]
},
{
"hash_key": -1787022173,
"hash_key": -2069079748,
"enum_name": "double_block_half",
"serialized_name": "half",
"type": "enum",
@@ -463,7 +463,7 @@
]
},
{
"hash_key": -313324108,
"hash_key": 972385409,
"enum_name": "block_half",
"serialized_name": "half",
"type": "enum",
@@ -473,7 +473,7 @@
]
},
{
"hash_key": 1701452866,
"hash_key": -129799615,
"enum_name": "side_chain",
"serialized_name": "side_chain",
"type": "enum",
@@ -485,7 +485,7 @@
]
},
{
"hash_key": 1058149539,
"hash_key": -257156205,
"enum_name": "rail_shape",
"serialized_name": "shape",
"type": "enum",
@@ -503,7 +503,7 @@
]
},
{
"hash_key": 973798096,
"hash_key": -773242843,
"enum_name": "straight_rail_shape",
"serialized_name": "shape",
"type": "enum",
@@ -517,7 +517,7 @@
]
},
{
"hash_key": -468618147,
"hash_key": -1137410349,
"enum_name": "age_1",
"serialized_name": "age",
"type": "int",
@@ -525,7 +525,7 @@
"max": 1
},
{
"hash_key": -468589285,
"hash_key": -1137381487,
"enum_name": "age_2",
"serialized_name": "age",
"type": "int",
@@ -533,7 +533,7 @@
"max": 2
},
{
"hash_key": -467694562,
"hash_key": -1136486764,
"enum_name": "age_3",
"serialized_name": "age",
"type": "int",
@@ -541,7 +541,7 @@
"max": 3
},
{
"hash_key": -439958148,
"hash_key": -1108750350,
"enum_name": "age_4",
"serialized_name": "age",
"type": "int",
@@ -549,7 +549,7 @@
"max": 4
},
{
"hash_key": 419870687,
"hash_key": -248921515,
"enum_name": "age_5",
"serialized_name": "age",
"type": "int",
@@ -557,7 +557,7 @@
"max": 5
},
{
"hash_key": -1328416864,
"hash_key": -1997209066,
"enum_name": "age_7",
"serialized_name": "age",
"type": "int",
@@ -565,7 +565,7 @@
"max": 7
},
{
"hash_key": 428064420,
"hash_key": -240727782,
"enum_name": "age_15",
"serialized_name": "age",
"type": "int",
@@ -573,7 +573,7 @@
"max": 15
},
{
"hash_key": -656033431,
"hash_key": -1324825633,
"enum_name": "age_25",
"serialized_name": "age",
"type": "int",
@@ -581,7 +581,7 @@
"max": 25
},
{
"hash_key": -87015455,
"hash_key": -755807657,
"enum_name": "bites",
"serialized_name": "bites",
"type": "int",
@@ -589,7 +589,7 @@
"max": 6
},
{
"hash_key": -592703689,
"hash_key": -1261495891,
"enum_name": "candles",
"serialized_name": "candles",
"type": "int",
@@ -597,7 +597,7 @@
"max": 4
},
{
"hash_key": -1806117798,
"hash_key": 1820057296,
"enum_name": "delay",
"serialized_name": "delay",
"type": "int",
@@ -605,7 +605,7 @@
"max": 4
},
{
"hash_key": -1723793080,
"hash_key": 1902382014,
"enum_name": "distance_1_7",
"serialized_name": "distance",
"type": "int",
@@ -613,7 +613,7 @@
"max": 7
},
{
"hash_key": -374208977,
"hash_key": -1043001179,
"enum_name": "eggs",
"serialized_name": "eggs",
"type": "int",
@@ -621,7 +621,7 @@
"max": 4
},
{
"hash_key": -1695981062,
"hash_key": 1930194032,
"enum_name": "hatch",
"serialized_name": "hatch",
"type": "int",
@@ -629,7 +629,7 @@
"max": 2
},
{
"hash_key": 1286534205,
"hash_key": 617742003,
"enum_name": "layers",
"serialized_name": "layers",
"type": "int",
@@ -637,7 +637,7 @@
"max": 8
},
{
"hash_key": -1577707753,
"hash_key": 2048467341,
"enum_name": "level_3",
"serialized_name": "level",
"type": "int",
@@ -645,7 +645,7 @@
"max": 3
},
{
"hash_key": 1833302105,
"hash_key": 1164509903,
"enum_name": "level_8",
"serialized_name": "level",
"type": "int",
@@ -653,7 +653,7 @@
"max": 8
},
{
"hash_key": 222361147,
"hash_key": -446431055,
"enum_name": "level_1_8",
"serialized_name": "level",
"type": "int",
@@ -661,7 +661,7 @@
"max": 8
},
{
"hash_key": -1213452418,
"hash_key": -1882244620,
"enum_name": "honey_level",
"serialized_name": "honey_level",
"type": "int",
@@ -669,7 +669,7 @@
"max": 5
},
{
"hash_key": -681055041,
"hash_key": -1349847243,
"enum_name": "level_15",
"serialized_name": "level",
"type": "int",
@@ -677,7 +677,7 @@
"max": 15
},
{
"hash_key": 1504654335,
"hash_key": 835862133,
"enum_name": "moisture",
"serialized_name": "moisture",
"type": "int",
@@ -685,7 +685,7 @@
"max": 7
},
{
"hash_key": -1342479181,
"hash_key": -2011271383,
"enum_name": "note",
"serialized_name": "note",
"type": "int",
@@ -693,7 +693,7 @@
"max": 24
},
{
"hash_key": -1209366972,
"hash_key": -1878159174,
"enum_name": "pickles",
"serialized_name": "pickles",
"type": "int",
@@ -701,7 +701,7 @@
"max": 4
},
{
"hash_key": -557273250,
"hash_key": -1226065452,
"enum_name": "power",
"serialized_name": "power",
"type": "int",
@@ -709,7 +709,7 @@
"max": 15
},
{
"hash_key": -1364104642,
"hash_key": -2032896844,
"enum_name": "stage",
"serialized_name": "stage",
"type": "int",
@@ -717,7 +717,7 @@
"max": 1
},
{
"hash_key": -979090582,
"hash_key": -1647882784,
"enum_name": "distance_0_7",
"serialized_name": "distance",
"type": "int",
@@ -725,7 +725,7 @@
"max": 7
},
{
"hash_key": 993161788,
"hash_key": 324369586,
"enum_name": "charges",
"serialized_name": "charges",
"type": "int",
@@ -733,7 +733,7 @@
"max": 4
},
{
"hash_key": 79060743,
"hash_key": -589731459,
"enum_name": "hydration",
"serialized_name": "hydration",
"type": "int",
@@ -741,7 +741,7 @@
"max": 3
},
{
"hash_key": -824248315,
"hash_key": -1493040517,
"enum_name": "rotation",
"serialized_name": "rotation",
"type": "int",
@@ -749,7 +749,7 @@
"max": 15
},
{
"hash_key": -51853932,
"hash_key": 115355525,
"enum_name": "bed_part",
"serialized_name": "part",
"type": "enum",
@@ -759,7 +759,7 @@
]
},
{
"hash_key": -1972273391,
"hash_key": 985570201,
"enum_name": "chest_type",
"serialized_name": "type",
"type": "enum",
@@ -770,7 +770,7 @@
]
},
{
"hash_key": 1293758681,
"hash_key": 1133103202,
"enum_name": "comparator_mode",
"serialized_name": "mode",
"type": "enum",
@@ -780,7 +780,7 @@
]
},
{
"hash_key": 1904233343,
"hash_key": 357094418,
"enum_name": "door_hinge",
"serialized_name": "hinge",
"type": "enum",
@@ -790,7 +790,7 @@
]
},
{
"hash_key": 1375922713,
"hash_key": 1352082262,
"enum_name": "instrument",
"serialized_name": "instrument",
"type": "enum",
@@ -821,7 +821,7 @@
]
},
{
"hash_key": 1937613125,
"hash_key": 1985185547,
"enum_name": "piston_type",
"serialized_name": "type",
"type": "enum",
@@ -831,7 +831,7 @@
]
},
{
"hash_key": -487931545,
"hash_key": -1730657296,
"enum_name": "slab_type",
"serialized_name": "type",
"type": "enum",
@@ -842,7 +842,7 @@
]
},
{
"hash_key": 1181336254,
"hash_key": 119113116,
"enum_name": "stair_shape",
"serialized_name": "shape",
"type": "enum",
@@ -855,7 +855,7 @@
]
},
{
"hash_key": 1614890635,
"hash_key": 669645663,
"enum_name": "structure_block_mode",
"serialized_name": "mode",
"type": "enum",
@@ -867,7 +867,7 @@
]
},
{
"hash_key": -1725677107,
"hash_key": -1164729359,
"enum_name": "bamboo_leaves",
"serialized_name": "leaves",
"type": "enum",
@@ -878,7 +878,7 @@
]
},
{
"hash_key": 495307086,
"hash_key": 1598352989,
"enum_name": "tilt",
"serialized_name": "tilt",
"type": "enum",
@@ -890,7 +890,7 @@
]
},
{
"hash_key": 170368215,
"hash_key": -1934650297,
"enum_name": "vertical_direction",
"serialized_name": "vertical_direction",
"type": "enum",
@@ -900,7 +900,7 @@
]
},
{
"hash_key": -199987491,
"hash_key": -514259569,
"enum_name": "thickness",
"serialized_name": "thickness",
"type": "enum",
@@ -913,7 +913,7 @@
]
},
{
"hash_key": -598681322,
"hash_key": 483793469,
"enum_name": "sculk_sensor_phase",
"serialized_name": "sculk_sensor_phase",
"type": "enum",
@@ -924,43 +924,43 @@
]
},
{
"hash_key": 2110930741,
"hash_key": 1753378101,
"enum_name": "slot_0_occupied",
"serialized_name": "slot_0_occupied",
"type": "boolean"
},
{
"hash_key": 1914417236,
"hash_key": 1556864596,
"enum_name": "slot_1_occupied",
"serialized_name": "slot_1_occupied",
"type": "boolean"
},
{
"hash_key": 1717903731,
"hash_key": 1360351091,
"enum_name": "slot_2_occupied",
"serialized_name": "slot_2_occupied",
"type": "boolean"
},
{
"hash_key": 1521390226,
"hash_key": 1163837586,
"enum_name": "slot_3_occupied",
"serialized_name": "slot_3_occupied",
"type": "boolean"
},
{
"hash_key": 1324876721,
"hash_key": 967324081,
"enum_name": "slot_4_occupied",
"serialized_name": "slot_4_occupied",
"type": "boolean"
},
{
"hash_key": 1128363216,
"hash_key": 770810576,
"enum_name": "slot_5_occupied",
"serialized_name": "slot_5_occupied",
"type": "boolean"
},
{
"hash_key": 1544739980,
"hash_key": 875947778,
"enum_name": "dusted",
"serialized_name": "dusted",
"type": "int",
@@ -968,19 +968,19 @@
"max": 3
},
{
"hash_key": -382763936,
"hash_key": -740316576,
"enum_name": "cracked",
"serialized_name": "cracked",
"type": "boolean"
},
{
"hash_key": 302847561,
"hash_key": -54705079,
"enum_name": "crafting",
"serialized_name": "crafting",
"type": "boolean"
},
{
"hash_key": 912516594,
"hash_key": 485447212,
"enum_name": "trial_spawner_state",
"serialized_name": "trial_spawner_state",
"type": "enum",
@@ -994,7 +994,7 @@
]
},
{
"hash_key": -1763805577,
"hash_key": -2113681949,
"enum_name": "vault_state",
"serialized_name": "vault_state",
"type": "enum",
@@ -1006,7 +1006,7 @@
]
},
{
"hash_key": -1594200735,
"hash_key": -1092228731,
"enum_name": "creaking_heart_state",
"serialized_name": "creaking_heart_state",
"type": "enum",
@@ -1017,13 +1017,13 @@
]
},
{
"hash_key": 1541920113,
"hash_key": 1184367473,
"enum_name": "ominous",
"serialized_name": "ominous",
"type": "boolean"
},
{
"hash_key": -668013444,
"hash_key": 665099556,
"enum_name": "test_block_mode",
"serialized_name": "mode",
"type": "enum",
@@ -1035,13 +1035,13 @@
]
},
{
"hash_key": -1407567389,
"hash_key": -1765120029,
"enum_name": "map",
"serialized_name": "map",
"type": "boolean"
},
{
"hash_key": 539141448,
"hash_key": 1159332573,
"enum_name": "copper_golem_pose",
"serialized_name": "copper_golem_pose",
"type": "enum",

View File

@@ -2,6 +2,6 @@
"1013": 1012,
"1014": 1012,
"1018": 1012,
"1285": 1120,
"1364": 1120
"1290": 1120,
"1381": 1120
}

File diff suppressed because it is too large Load Diff

View File

@@ -78,6 +78,8 @@
"item.armor.equip_turtle",
"item.armor.equip_wolf",
"item.armor.unequip_wolf",
"item.armor.equip_nautilus",
"item.armor.unequip_nautilus",
"entity.armor_stand.break",
"entity.armor_stand.fall",
"entity.armor_stand.hit",
@@ -105,6 +107,15 @@
"block.azalea_leaves.hit",
"block.azalea_leaves.place",
"block.azalea_leaves.step",
"entity.baby_nautilus.ambient",
"entity.baby_nautilus.ambient_land",
"entity.baby_nautilus.death",
"entity.baby_nautilus.death_land",
"entity.baby_nautilus.eat",
"entity.baby_nautilus.hurt",
"entity.baby_nautilus.hurt_land",
"entity.nautilus.riding",
"entity.baby_nautilus.swim",
"block.bamboo.break",
"block.bamboo.fall",
"block.bamboo.hit",
@@ -235,6 +246,17 @@
"block.calcite.place",
"block.calcite.hit",
"block.calcite.fall",
"entity.camel_husk.ambient",
"entity.camel_husk.dash",
"entity.camel_husk.dash_ready",
"entity.camel_husk.death",
"entity.camel_husk.eat",
"entity.camel_husk.hurt",
"entity.camel_husk.saddle",
"entity.camel_husk.sit",
"entity.camel_husk.stand",
"entity.camel_husk.step",
"entity.camel_husk.step_sand",
"entity.camel.ambient",
"entity.camel.dash",
"entity.camel.dash_ready",
@@ -892,6 +914,9 @@
"block.lodestone.hit",
"block.lodestone.fall",
"item.lodestone_compass.lock",
"item.spear.lunge_1",
"item.spear.lunge_2",
"item.spear.lunge_3",
"item.mace.smash_air",
"item.mace.smash_ground",
"item.mace.smash_ground_heavy",
@@ -1012,6 +1037,18 @@
"music.overworld.sparse_jungle",
"music.overworld.bamboo_jungle",
"music.under_water",
"entity.nautilus.ambient",
"entity.nautilus.ambient_land",
"entity.nautilus.dash",
"entity.nautilus.dash_land",
"entity.nautilus.dash_ready",
"entity.nautilus.dash_ready_land",
"entity.nautilus.death",
"entity.nautilus.death_land",
"entity.nautilus.eat",
"entity.nautilus.hurt",
"entity.nautilus.hurt_land",
"entity.nautilus.swim",
"block.nether_bricks.break",
"block.nether_bricks.step",
"block.nether_bricks.place",
@@ -1120,6 +1157,10 @@
"entity.panda.worried_ambient",
"entity.panda.hurt",
"entity.panda.bite",
"entity.parched.ambient",
"entity.parched.death",
"entity.parched.hurt",
"entity.parched.step",
"entity.parrot.ambient",
"entity.parrot.death",
"entity.parrot.eat",
@@ -1128,6 +1169,7 @@
"entity.parrot.imitate.blaze",
"entity.parrot.imitate.bogged",
"entity.parrot.imitate.breeze",
"entity.parrot.imitate.camel_husk",
"entity.parrot.imitate.creaking",
"entity.parrot.imitate.creeper",
"entity.parrot.imitate.drowned",
@@ -1142,6 +1184,7 @@
"entity.parrot.imitate.illusioner",
"entity.parrot.imitate.magma_cube",
"entity.parrot.imitate.phantom",
"entity.parrot.imitate.parched",
"entity.parrot.imitate.piglin",
"entity.parrot.imitate.piglin_brute",
"entity.parrot.imitate.pillager",
@@ -1160,6 +1203,8 @@
"entity.parrot.imitate.wither_skeleton",
"entity.parrot.imitate.zoglin",
"entity.parrot.imitate.zombie",
"entity.parrot.imitate.zombie_horse",
"entity.parrot.imitate.zombie_nautilus",
"entity.parrot.imitate.zombie_villager",
"entity.parrot.step",
"entity.phantom.ambient",
@@ -1267,6 +1312,15 @@
"block.nether_ore.place",
"block.nether_ore.step",
"block.redstone_torch.burnout",
"block.resin.break",
"block.resin.fall",
"block.resin.place",
"block.resin.step",
"block.resin_bricks.break",
"block.resin_bricks.fall",
"block.resin_bricks.hit",
"block.resin_bricks.place",
"block.resin_bricks.step",
"block.respawn_anchor.ambient",
"block.respawn_anchor.charge",
"block.respawn_anchor.deplete",
@@ -1410,15 +1464,12 @@
"block.spawner.hit",
"block.spawner.place",
"block.spawner.step",
"block.resin.break",
"block.resin.fall",
"block.resin.place",
"block.resin.step",
"block.resin_bricks.break",
"block.resin_bricks.fall",
"block.resin_bricks.hit",
"block.resin_bricks.place",
"block.resin_bricks.step",
"item.spear.use",
"item.spear.hit",
"item.spear.attack",
"item.spear_wood.use",
"item.spear_wood.hit",
"item.spear_wood.attack",
"block.spore_blossom.break",
"block.spore_blossom.fall",
"block.spore_blossom.hit",
@@ -1751,10 +1802,24 @@
"entity.zombie.death",
"entity.zombie.destroy_egg",
"entity.zombie_horse.ambient",
"entity.zombie_horse.angry",
"entity.zombie_horse.death",
"entity.zombie_horse.eat",
"entity.zombie_horse.hurt",
"entity.zombie.hurt",
"entity.zombie.infect",
"entity.zombie_nautilus.ambient",
"entity.zombie_nautilus.ambient_land",
"entity.zombie_nautilus.dash",
"entity.zombie_nautilus.dash_land",
"entity.zombie_nautilus.dash_ready",
"entity.zombie_nautilus.dash_ready_land",
"entity.zombie_nautilus.death",
"entity.zombie_nautilus.death_land",
"entity.zombie_nautilus.eat",
"entity.zombie_nautilus.hurt",
"entity.zombie_nautilus.hurt_land",
"entity.zombie_nautilus.swim",
"entity.zombified_piglin.ambient",
"entity.zombified_piglin.angry",
"entity.zombified_piglin.death",
@@ -1769,5 +1834,7 @@
"event.mob_effect.bad_omen",
"event.mob_effect.trial_omen",
"event.mob_effect.raid_omen",
"item.saddle.unequip"
"item.saddle.unequip",
"item.nautilus_saddle_underwater_equip",
"item.nautilus_saddle_equip"
]

View File

@@ -1,85 +1,89 @@
{
"1138": "cat",
"1162": "horse",
"1180": "ravager",
"1168": "mule",
"1199": "villager",
"1207": "zoglin",
"1130": "armadillo",
"1149": "elder_guardian",
"1160": "guardian",
"1135": "blaze",
"1211": "zoglin",
"1195": "slime",
"1189": "creaking",
"1205": "happy_ghast",
"1213": "ender_dragon",
"1165": "sniffer",
"1168": "snow_golem",
"1181": "wither_skeleton",
"1179": "stray",
"1197": "witch",
"1135": "donkey",
"1153": "dolphin",
"1157": "pufferfish",
"1152": "cod",
"1161": "tropical_fish",
"1203": "blaze",
"1155": "glow_squid",
"1187": "spider",
"1175": "husk",
"1202": "vex",
"1207": "magma_cube",
"1166": "copper_golem",
"1143": "bee",
"1209": "piglin_brute",
"1176": "parched",
"1171": "wandering_trader",
"1215": "endermite",
"1193": "phantom",
"1139": "parrot",
"1167": "iron_golem",
"1210": "strider",
"1214": "enderman",
"1173": "camel_husk",
"1188": "breeze",
"1146": "llama",
"1177": "skeleton",
"1133": "sheep",
"1140": "wolf",
"1159": "squid",
"1158": "salmon",
"1141": "armadillo",
"1142": "bat",
"1174": "drowned",
"1199": "pillager",
"1156": "nautilus",
"1182": "zombie",
"1149": "polar_bear",
"1185": "zombie_villager",
"1212": "zombified_piglin",
"1195": "trader_llama",
"1186": "skeleton_horse",
"1145": "creeper",
"1142": "cod",
"1188": "sniffer",
"1136": "bogged",
"1197": "turtle",
"1154": "fox",
"1143": "copper_golem",
"1178": "pufferfish",
"1171": "parrot",
"1140": "cave_spider",
"1156": "ghast",
"1164": "iron_golem",
"1172": "phantom",
"1183": "shulker",
"1184": "silverfish",
"1192": "stray",
"1201": "wandering_trader",
"1204": "wither",
"1205": "wither_skeleton",
"1173": "pig",
"1210": "zombie_horse",
"1211": "zombie_villager",
"1165": "llama",
"1185": "skeleton",
"1191": "squid",
"1158": "glow_squid",
"1161": "hoglin",
"1189": "snow_golem",
"1132": "axolotl",
"1169": "ocelot",
"1200": "vindicator",
"1179": "rabbit",
"1175": "piglin_brute",
"1133": "bat",
"1152": "endermite",
"1209": "zombie",
"1182": "sheep",
"1146": "dolphin",
"1194": "tadpole",
"1167": "mooshroom",
"1166": "magma_cube",
"1144": "cow",
"1170": "panda",
"1139": "camel",
"1174": "piglin",
"1177": "polar_bear",
"1203": "witch",
"1181": "salmon",
"1137": "breeze",
"1155": "frog",
"1208": "creaking",
"1150": "ender_dragon",
"1176": "pillager",
"1157": "happy_ghast",
"1141": "chicken",
"1196": "tropical_fish",
"1187": "slime",
"1163": "husk",
"1134": "bee",
"1193": "strider",
"1131": "allay",
"1147": "donkey",
"1148": "drowned",
"1190": "spider",
"1198": "vex",
"1206": "wolf",
"1153": "evoker",
"1202": "warden",
"1151": "enderman",
"1159": "goat"
"1170": "villager",
"1162": "turtle",
"1132": "pig",
"1163": "allay",
"1172": "bogged",
"1130": "chicken",
"1160": "tadpole",
"1186": "cave_spider",
"1190": "creeper",
"1204": "ghast",
"1216": "shulker",
"1192": "guardian",
"1137": "mule",
"1183": "zombie_horse",
"1148": "panda",
"1196": "warden",
"1144": "fox",
"1136": "horse",
"1164": "mooshroom",
"1200": "ravager",
"1178": "skeleton_horse",
"1154": "frog",
"1169": "trader_llama",
"1147": "ocelot",
"1134": "camel",
"1138": "cat",
"1180": "wither",
"1206": "hoglin",
"1201": "vindicator",
"1208": "piglin",
"1191": "elder_guardian",
"1131": "cow",
"1198": "evoker",
"1150": "rabbit",
"1184": "zombie_nautilus",
"1151": "axolotl",
"1194": "silverfish",
"1145": "goat"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,7 @@ pumpkin-util = { path = "../pumpkin-util" }
pumpkin-nbt = { path = "../pumpkin-nbt" }
serde.workspace = true
crc-fast = "1.8.0"
crc-fast = "1.9.0"
[build-dependencies]
pumpkin-util = { path = "../pumpkin-util" }

View File

@@ -27,7 +27,7 @@ aes = "0.8"
cfb8 = "0.8"
# compression
async-compression = { version = "0.4.35", features = ["tokio", "zlib"] }
async-compression = { version = "0.4.36", features = ["tokio", "zlib"] }
take_mut = "0.2.2"
bitflags = "2.10.0"

View File

@@ -28,4 +28,11 @@ impl BlockBox {
max: pos.0,
}
}
pub fn intersects(&self, other: &Self) -> bool {
self.min.x < other.max.x
&& self.max.x > other.min.x
&& self.min.y < other.max.y
&& self.max.y > other.min.y
}
}

View File

@@ -37,8 +37,8 @@ pub const CHUNK_COUNT: usize = REGION_SIZE * REGION_SIZE;
/// The number of bytes in a sector (4 KiB)
const SECTOR_BYTES: usize = 4096;
// 1.21.10
pub const WORLD_DATA_VERSION: i32 = 4556;
// 1.21.11
pub const WORLD_DATA_VERSION: i32 = 4671;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]

View File

@@ -35,8 +35,8 @@ use crate::generation::height_limit::HeightLimitView;
use crate::generation::noise::perlin::DoublePerlinNoiseSampler;
use crate::generation::noise::router::surface_height_sampler::SurfaceHeightSamplerBuilderOptions;
use crate::generation::structure::placement::StructurePlacementCalculator;
use crate::generation::structure::structures::StructurePosition;
use crate::generation::structure::{STRUCTURE_SETS, STRUCTURES, Structure, StructureType};
use crate::generation::structure::structures::StructureInstance;
use crate::generation::structure::{STRUCTURE_SETS, STRUCTURES, Structure};
use crate::{
BlockStateId, ProtoNoiseRouters,
biome::{BiomeSupplier, MultiNoiseBiomeSupplier, end::TheEndBiomeSupplier},
@@ -118,7 +118,7 @@ impl FluidLevelSamplerImpl for StandardChunkFluidLevelSampler {
///
/// 12. full: Generation is done and a chunk can now be loaded. The proto-chunk is now converted to a level chunk and all block updates deferred in the above steps are executed.
///
#[derive(Debug, Clone)]
#[derive(Clone)]
pub struct ProtoChunk {
pub x: i32,
pub z: i32,
@@ -135,7 +135,7 @@ pub struct ProtoChunk {
pub flat_motion_blocking_height_map: Box<[i16]>,
pub flat_motion_blocking_no_leaves_height_map: Box<[i16]>,
// may want to use chunk status
structure_starts: HashMap<Structure, (StructurePosition, StructureType)>,
structure_starts: HashMap<Structure, StructureInstance>,
// Height of the chunk for indexing
height: u16,
bottom_y: i8,
@@ -912,11 +912,20 @@ impl ProtoChunk {
Xoroshiro::get_population_seed(random_config.seed, block_pos.0.x, block_pos.0.z);
let _chunk_box = chunk.get_block_box_for_chunk();
for (_structure, (pos, stype)) in chunk.structure_starts.clone() {
dbg!("generating structure");
stype.generate(pos.clone(), chunk);
for (_structure_config, instance) in chunk.structure_starts.clone() {
match instance {
StructureInstance::Start(pos, _stype) => {
// Use the collector directly to place blocks
pos.collector
.generate_in_chunk(chunk, random_config.seed as i64);
}
StructureInstance::Reference(_start_block_pos) => {
// In Minecraft, a Reference tells the engine to look up the
// "Start" data from the chunk at start_block_pos and generate its pieces here.
// If you are only generating "Starts" for now, this can be a TODO.
}
}
}
// TODO: This needs to be different depending on what biomes are in the chunk -> affects the
// random
for (name, feature) in PLACED_FEATURES.iter() {
@@ -942,28 +951,37 @@ impl ProtoChunk {
let calculator = StructurePlacementCalculator {
seed: random_config.seed as i64,
};
// for structure in &set.structures {
// let start = self.structure_starts.get(STRUCTURES.get(name).unwrap());
// }
// 1. Check if the placement allows a structure to start in THIS specific chunk
if !set.placement.should_generate(calculator, self.x, self.z) {
continue; // ??
continue;
}
if set.structures.len() == 1 {
let position = set.structures[0]
.structure
.get_structure_position(name, self);
if let Some(position) = position
&& !position.generator.pieces_positions.is_empty()
{
self.structure_starts.insert(
STRUCTURES.get(name).unwrap().clone(),
(position, set.structures[0].structure.clone()),
);
// 2. Iterate through potential structures in the set
for structure_entry in &set.structures {
// FIX: Pass the 'name', 'seed', 'coords', and 'self' (the ProtoChunk)
let position = structure_entry.structure.try_generate(
name,
random_config.seed as i64,
self.x,
self.z,
self,
);
if let Some(pos) = position {
// Ensure the structure config exists in our registry
if let Some(structure_config) = STRUCTURES.get(name) {
// Minecraft logic: Insert the START in the origin chunk
self.structure_starts.insert(
structure_config.clone(),
StructureInstance::Start(pos, structure_entry.structure.clone()),
);
// Minecraft optimization: Usually only one structure start per chunk
return;
}
}
return;
}
// TODO: handle multiple structures
}
}

View File

@@ -29,7 +29,7 @@ pub struct Structures {
pub structure: StructureType,
}
#[derive(Deserialize, Clone, Debug)]
#[derive(Deserialize, Clone)]
pub enum StructureType {
#[serde(rename = "minecraft:buried_treasure")]
BuriedTreasure(BuriedTreasureGenerator),
@@ -38,39 +38,52 @@ pub enum StructureType {
}
impl StructureType {
pub fn get_structure_position(
pub fn try_generate(
&self,
name: &str,
chunk: &ProtoChunk,
seed: i64,
chunk_x: i32,
chunk_z: i32,
chunk_ref_for_biomes: &ProtoChunk,
) -> Option<StructurePosition> {
let position = match self {
StructureType::BuriedTreasure(generator) => generator.get_structure_position(chunk),
StructureType::NetherFortress(generator) => generator.get_structure_position(chunk),
let structure_pos = match self {
StructureType::BuriedTreasure(generator) => {
generator.try_generate(seed, chunk_x, chunk_z)
}
StructureType::NetherFortress(generator) => {
generator.try_generate(seed, chunk_x, chunk_z)
}
};
if let Some(structure) = STRUCTURES.get(name) {
let current_biome = chunk.get_biome(
position.position.0.x,
position.position.0.y,
position.position.0.z,
if let Some(pos) = structure_pos
&& let Some(structure_data) = STRUCTURES.get(name)
{
// Get the biome at the structure's starting position
let current_biome = chunk_ref_for_biomes.get_biome(
pos.start_pos.0.x,
pos.start_pos.0.y,
pos.start_pos.0.z,
);
if Biome::get_tag_values(&structure.biomes)
.unwrap()
// Check if the biome is allowed for this structure
if Biome::get_tag_values(&structure_data.biomes)
.unwrap_or_default()
.contains(&current_biome.registry_id)
{
return Some(position);
return Some(pos);
}
}
None
}
}
pub fn generate(&self, position: StructurePosition, chunk: &mut crate::ProtoChunk) {
for pos in position.generator.pieces_positions {
match self {
StructureType::BuriedTreasure(generator) => generator.generate(pos, chunk),
StructureType::NetherFortress(generator) => generator.generate(pos, chunk),
}
}
}
pub fn generate_structure_pieces(
structure_pos: &StructurePosition,
chunk: &mut ProtoChunk,
seed: i64,
) {
structure_pos.collector.generate_in_chunk(chunk, seed);
}
#[derive(Deserialize, Clone, PartialEq, Eq, Hash, Debug)]

View File

@@ -1,50 +1,70 @@
use pumpkin_data::{Block, BlockDirection};
use pumpkin_util::{
HeightMap,
math::{block_box::BlockBox, position::BlockPos, vector3::Vector3},
math::{block_box::BlockBox, position::BlockPos},
};
use serde::Deserialize;
use crate::{
ProtoChunk,
generation::{
positions::chunk_pos::{get_center_x, get_center_z, get_offset_x, get_offset_z},
structure::structures::{StructureGenerator, StructurePiecesCollector, StructurePosition},
positions::chunk_pos::{get_center_x, get_center_z},
structure::structures::{
StructureGenerator, StructurePiece, StructurePiecesCollector, StructurePosition,
},
},
};
#[derive(Deserialize, Clone, Debug)]
#[derive(Deserialize, Clone)]
pub struct BuriedTreasureGenerator;
impl StructureGenerator for BuriedTreasureGenerator {
fn get_structure_position(&self, chunk: &ProtoChunk) -> super::StructurePosition {
let x = get_center_x(chunk.x);
let z = get_center_z(chunk.z);
let y = chunk.get_top_y(&HeightMap::OceanFloorWg, x, z) - 1;
let generator = StructurePiecesCollector {
pieces_positions: vec![BlockBox::from_pos(BlockPos::new(
get_offset_x(chunk.x, 9),
90,
get_offset_z(chunk.z, 9),
))],
};
StructurePosition {
position: BlockPos(Vector3::new(x, y, z)),
generator,
}
fn try_generate(&self, _seed: i64, chunk_x: i32, chunk_z: i32) -> Option<StructurePosition> {
let x = get_center_x(chunk_x);
let z = get_center_z(chunk_z);
let bounding_box = BlockBox::new(x, -64, z, x, 320, z);
let mut collector = StructurePiecesCollector::default();
collector.add_piece(Box::new(BuriedTreasurePiece {
target_x: x,
target_z: z,
bounding_box,
}));
Some(StructurePosition {
start_pos: BlockPos::new(x, 90, z),
collector: collector.into(),
})
}
}
/// The Logic for actually placing the chest
#[derive(Debug, Clone)]
pub struct BuriedTreasurePiece {
target_x: i32,
target_z: i32,
bounding_box: BlockBox,
}
impl StructurePiece for BuriedTreasurePiece {
fn bounding_box(&self) -> &BlockBox {
&self.bounding_box
}
fn generate(&self, bounding_box: BlockBox, chunk: &mut crate::ProtoChunk) {
let y = chunk.get_top_y(
&HeightMap::OceanFloorWg,
bounding_box.min.x,
bounding_box.min.z,
);
let mut pos = BlockPos::new(bounding_box.min.x, y, bounding_box.min.z);
for _ in y..chunk.bottom_y() as i32 {
fn place(&self, chunk: &mut ProtoChunk, _seed: i64) {
let y = chunk.get_top_y(&HeightMap::OceanFloorWg, self.target_x, self.target_z);
let mut pos = BlockPos::new(self.target_x, y, self.target_z);
let bottom_y = chunk.bottom_y() as i32;
for _ in (bottom_y..=y).rev() {
let state = chunk.get_block_state(&pos.0);
let down_raw_state = chunk.get_block_state(&pos.down().0);
let down_pos = pos.down();
let down_raw_state = chunk.get_block_state(&down_pos.0);
let down_block = down_raw_state.to_block();
if down_block == &Block::SANDSTONE
|| down_block == &Block::STONE
|| down_block == &Block::ANDESITE
@@ -52,27 +72,34 @@ impl StructureGenerator for BuriedTreasureGenerator {
|| down_block == &Block::DIORITE
{
for dir in BlockDirection::all() {
let pos = pos.offset(dir.to_offset());
let dir_state = chunk.get_block_state(&pos.0);
let offset_pos = pos.offset(dir.to_offset());
let dir_state = chunk.get_block_state(&offset_pos.0);
if !dir_state.to_state().is_air() && !Self::is_liquid(dir_state.to_block()) {
continue;
}
let down_pos = pos.down();
let down_state = chunk.get_block_state(&down_pos.0);
if (down_state.to_state().is_air() || Self::is_liquid(down_state.to_block()))
let down_offset_pos = offset_pos.down();
let down_offset_state = chunk.get_block_state(&down_offset_pos.0);
if (down_offset_state.to_state().is_air()
|| Self::is_liquid(down_offset_state.to_block()))
&& dir != BlockDirection::Up
{
chunk.set_block_state(&pos.0, down_raw_state.to_state());
chunk.set_block_state(&offset_pos.0, down_raw_state.to_state());
continue;
}
let state1 = if state.to_state().is_air() || Self::is_liquid(state.to_block()) {
Block::SAND.default_state
} else {
state.to_state()
};
chunk.set_block_state(&pos.0, state1);
chunk.set_block_state(&offset_pos.0, state1);
}
// TODO: add loot
// Place the Chest
// TODO: Add loot table logic here (requires seed)
chunk.set_block_state(&pos.0, Block::CHEST.default_state);
return;
}
@@ -81,7 +108,7 @@ impl StructureGenerator for BuriedTreasureGenerator {
}
}
impl BuriedTreasureGenerator {
impl BuriedTreasurePiece {
fn is_liquid(block: &Block) -> bool {
block == &Block::WATER || block == &Block::LAVA
}

View File

@@ -1,18 +1,17 @@
use std::sync::Arc;
use pumpkin_data::BlockState;
use pumpkin_util::math::{block_box::BlockBox, position::BlockPos, vector3::Vector3};
use crate::ProtoChunk;
use crate::{
ProtoChunk,
generation::{height_limit::HeightLimitView, structure::StructureType},
};
pub mod buried_treasure;
pub mod nether_fortress;
pub mod swamp_hut;
pub trait StructureGenerator {
fn get_structure_position(&self, chunk: &ProtoChunk) -> StructurePosition;
fn generate(&self, position: BlockBox, chunk: &mut crate::ProtoChunk);
}
#[expect(clippy::too_many_arguments)]
pub fn fill_with_outline(
min_x: i32,
@@ -23,22 +22,43 @@ pub fn fill_with_outline(
max_z: i32,
outline: &BlockState,
inside: &BlockState,
chunk: &mut crate::ProtoChunk,
chunk: &mut ProtoChunk,
) {
let chunk_x = chunk.x;
let chunk_z = chunk.z;
let chunk_min_x = chunk_x * 16;
let chunk_max_x = chunk_min_x + 15;
let chunk_min_z = chunk_z * 16;
let chunk_max_z = chunk_min_z + 15;
let start_x = min_x.max(chunk_min_x);
let end_x = max_x.min(chunk_max_x);
let start_z = min_z.max(chunk_min_z);
let end_z = max_z.min(chunk_max_z);
if start_x > end_x || start_z > end_z {
return;
}
for y in min_y..=max_y {
for x in min_x..=max_x {
for z in min_z..=max_z {
if y == min_y || y == max_y || x == min_x || x == max_x || z == min_z || z == max_z
{
chunk.set_block_state(&Vector3::new(x, y, z), outline);
} else {
chunk.set_block_state(&Vector3::new(x, y, z), inside);
}
for x in start_x..=end_x {
for z in start_z..=end_z {
let is_border = x == min_x
|| x == max_x
|| y == min_y
|| y == max_y
|| z == min_z
|| z == max_z;
let block = if is_border { outline } else { inside };
chunk.set_block_state(&Vector3::new(x, y, z), block);
}
}
}
}
/// Fills a solid cuboid.
#[expect(clippy::too_many_arguments)]
pub fn fill(
min_x: i32,
@@ -48,30 +68,106 @@ pub fn fill(
max_y: i32,
max_z: i32,
state: &BlockState,
chunk: &mut crate::ProtoChunk,
chunk: &mut ProtoChunk,
) {
// Basic bounds check to avoid iterating 1000s of blocks outside the chunk
let chunk_x = chunk.x;
let chunk_z = chunk.z;
let chunk_min_x = chunk_x * 16;
let chunk_max_x = chunk_min_x + 15;
let chunk_min_z = chunk_z * 16;
let chunk_max_z = chunk_min_z + 15;
let start_x = min_x.max(chunk_min_x);
let end_x = max_x.min(chunk_max_x);
let start_z = min_z.max(chunk_min_z);
let end_z = max_z.min(chunk_max_z);
if start_x > end_x || start_z > end_z {
return;
}
for y in min_y..=max_y {
for x in min_x..=max_x {
for z in min_z..=max_z {
for x in start_x..=end_x {
for z in start_z..=end_z {
chunk.set_block_state(&Vector3::new(x, y, z), state);
}
}
}
}
pub fn fill_downwards(x: i32, y: i32, z: i32, state: &BlockState, chunk: &mut crate::ProtoChunk) {
for y in y..chunk.bottom_y() as i32 {
chunk.set_block_state(&Vector3::new(x, y, z), state);
/// Fills downwards from a point until the bottom of the world.
pub fn fill_downwards(x: i32, y: i32, z: i32, state: &BlockState, chunk: &mut ProtoChunk) {
let start_y = y;
let end_y = chunk.bottom_y() as i32; // e.g. -64
// FIX: Use .rev() because ranges like 60..-64 are empty.
// Also, usually you want to stop if you hit a solid block (optional, depends on need).
for current_y in (end_y..=start_y).rev() {
chunk.set_block_state(&Vector3::new(x, current_y, z), state);
}
}
#[derive(Clone, Debug)]
pub struct StructurePosition {
pub position: BlockPos,
pub generator: StructurePiecesCollector,
/// Represents a single component of a structure (e.g., a room, a bridge).
pub trait StructurePiece: Send + Sync {
/// The bounding box of this specific piece.
fn bounding_box(&self) -> &BlockBox;
/// Places the blocks for this piece into the chunk.
fn place(&self, chunk: &mut ProtoChunk, seed: i64);
}
#[derive(Default, Clone, Debug)]
/// Holds all the pieces that make up a generated structure instance.
#[derive(Default)]
pub struct StructurePiecesCollector {
pub pieces_positions: Vec<BlockBox>,
pub pieces: Vec<Box<dyn StructurePiece>>,
}
impl StructurePiecesCollector {
pub fn new() -> Self {
Self { pieces: Vec::new() }
}
pub fn add_piece(&mut self, piece: Box<dyn StructurePiece>) {
self.pieces.push(piece);
}
/// Iterates over all pieces and generates them if they intersect the current chunk.
pub fn generate_in_chunk(&self, chunk: &mut ProtoChunk, seed: i64) {
let chunk_x = chunk.x;
let chunk_z = chunk.z;
let chunk_box = BlockBox::new(
chunk_x * 16,
chunk.bottom_y() as i32,
chunk_z * 16,
(chunk_x * 16) + 15,
chunk.top_y() as i32,
(chunk_z * 16) + 15,
);
for piece in &self.pieces {
if piece.bounding_box().intersects(&chunk_box) {
piece.place(chunk, seed);
}
}
}
}
#[derive(Clone)]
pub struct StructurePosition {
pub start_pos: BlockPos,
pub collector: Arc<StructurePiecesCollector>,
}
pub trait StructureGenerator {
fn try_generate(&self, seed: i64, chunk_x: i32, chunk_z: i32) -> Option<StructurePosition>;
}
#[derive(Clone)]
pub enum StructureInstance {
/// This chunk is the "owner" of the structure.
Start(StructurePosition, StructureType),
/// This chunk just contains a piece of a structure starting elsewhere.
/// Stores the BlockPos of the 'Start' so you can look it up.
Reference(BlockPos),
}

View File

@@ -7,7 +7,8 @@ use crate::{
generation::{
positions::chunk_pos,
structure::structures::{
StructureGenerator, StructurePiecesCollector, StructurePosition, fill_with_outline,
StructureGenerator, StructurePiece, StructurePiecesCollector, StructurePosition, fill,
fill_downwards, fill_with_outline,
},
},
};
@@ -16,130 +17,169 @@ use crate::{
pub struct NetherFortressGenerator;
impl StructureGenerator for NetherFortressGenerator {
fn get_structure_position(&self, chunk: &ProtoChunk) -> StructurePosition {
let start_x = chunk_pos::start_block_x(chunk.x);
let start_z = chunk_pos::start_block_z(chunk.z);
let generator = StructurePiecesCollector {
pieces_positions: vec![], // TODO
fn try_generate(&self, _seed: i64, chunk_x: i32, chunk_z: i32) -> Option<StructurePosition> {
let start_x = chunk_pos::start_block_x(chunk_x);
let start_z = chunk_pos::start_block_z(chunk_z);
let start_y = 64;
let mut collector = StructurePiecesCollector::default();
// Add a Bridge Platform piece
let box_min = BlockPos::new(start_x, start_y, start_z);
let box_max = BlockPos::new(start_x + 8, start_y + 10, start_z + 8);
collector.add_piece(Box::new(NetherFortressPiece {
bounding_box: BlockBox::new(
box_min.0.x,
box_min.0.y,
box_min.0.z,
box_max.0.x,
box_max.0.y,
box_max.0.z,
),
piece_type: NetherFortressPieceType::BridgePlatform,
}));
Some(StructurePosition {
start_pos: box_min,
collector: collector.into(),
})
}
}
#[derive(Debug, Clone)]
pub enum NetherFortressPieceType {
BridgePlatform,
SmallCorridor,
}
#[derive(Debug, Clone)]
pub struct NetherFortressPiece {
pub bounding_box: BlockBox,
pub piece_type: NetherFortressPieceType,
}
impl StructurePiece for NetherFortressPiece {
fn bounding_box(&self) -> &BlockBox {
&self.bounding_box
}
fn place(&self, chunk: &mut ProtoChunk, _seed: i64) {
let origin_x = self.bounding_box.min.x;
let origin_y = self.bounding_box.min.y;
let origin_z = self.bounding_box.min.z;
let offset = |x, y, z| Vector3::new(origin_x + x, origin_y + y, origin_z + z);
let fill_rel = |min_x, min_y, min_z, max_x, max_y, max_z, block, c: &mut ProtoChunk| {
fill(
origin_x + min_x,
origin_y + min_y,
origin_z + min_z,
origin_x + max_x,
origin_y + max_y,
origin_z + max_z,
block,
c,
)
};
StructurePosition {
position: BlockPos::new(start_x, 64, start_z),
generator,
}
}
fn generate(&self, position: BlockBox, chunk: &mut crate::ProtoChunk) {
BridgePlatform::generate(&BridgePlatform, position, chunk);
}
}
let fill_outline_rel =
|min_x, min_y, min_z, max_x, max_y, max_z, outline, inside, c: &mut ProtoChunk| {
fill_with_outline(
origin_x + min_x,
origin_y + min_y,
origin_z + min_z,
origin_x + max_x,
origin_y + max_y,
origin_z + max_z,
outline,
inside,
c,
)
};
pub struct BridgePlatform;
match self.piece_type {
NetherFortressPieceType::BridgePlatform => {
fill_rel(0, 2, 0, 6, 7, 7, Block::AIR.default_state, chunk);
fill_rel(1, 0, 0, 5, 1, 7, Block::NETHER_BRICKS.default_state, chunk);
fill_rel(1, 2, 1, 5, 2, 7, Block::NETHER_BRICKS.default_state, chunk);
fill_rel(1, 3, 2, 5, 3, 7, Block::NETHER_BRICKS.default_state, chunk);
fill_rel(1, 4, 3, 5, 4, 7, Block::NETHER_BRICKS.default_state, chunk);
fill_rel(1, 2, 0, 1, 4, 2, Block::NETHER_BRICKS.default_state, chunk);
fill_rel(5, 2, 0, 5, 4, 2, Block::NETHER_BRICKS.default_state, chunk);
fill_rel(1, 5, 2, 1, 5, 3, Block::NETHER_BRICKS.default_state, chunk);
fill_rel(5, 5, 2, 5, 5, 3, Block::NETHER_BRICKS.default_state, chunk);
fill_rel(0, 5, 3, 0, 5, 8, Block::NETHER_BRICKS.default_state, chunk);
fill_rel(6, 5, 3, 6, 5, 8, Block::NETHER_BRICKS.default_state, chunk);
fill_rel(1, 5, 8, 5, 5, 8, Block::NETHER_BRICKS.default_state, chunk);
impl BridgePlatform {
fn generate(&self, _box: BlockBox, chunk: &mut crate::ProtoChunk) {
super::fill(0, 2, 0, 6, 7, 7, Block::AIR.default_state, chunk);
super::fill(1, 0, 0, 5, 1, 7, Block::NETHER_BRICKS.default_state, chunk);
super::fill(1, 2, 1, 5, 2, 7, Block::NETHER_BRICKS.default_state, chunk);
super::fill(1, 3, 2, 5, 3, 7, Block::NETHER_BRICKS.default_state, chunk);
super::fill(1, 4, 3, 5, 4, 7, Block::NETHER_BRICKS.default_state, chunk);
super::fill(1, 2, 0, 1, 4, 2, Block::NETHER_BRICKS.default_state, chunk);
super::fill(5, 2, 0, 5, 4, 2, Block::NETHER_BRICKS.default_state, chunk);
super::fill(1, 5, 2, 1, 5, 3, Block::NETHER_BRICKS.default_state, chunk);
super::fill(5, 5, 2, 5, 5, 3, Block::NETHER_BRICKS.default_state, chunk);
super::fill(0, 5, 3, 0, 5, 8, Block::NETHER_BRICKS.default_state, chunk);
super::fill(6, 5, 3, 6, 5, 8, Block::NETHER_BRICKS.default_state, chunk);
super::fill(1, 5, 8, 5, 5, 8, Block::NETHER_BRICKS.default_state, chunk);
// TODO
let block_state = Block::NETHER_BRICK_FENCE.default_state;
let block_state2 = Block::NETHER_BRICK_FENCE.default_state;
let fence = &Block::NETHER_BRICK_FENCE.default_state;
chunk.set_block_state(
&Vector3::new(1, 6, 3),
Block::NETHER_BRICK_FENCE.default_state,
);
chunk.set_block_state(
&Vector3::new(5, 6, 3),
Block::NETHER_BRICK_FENCE.default_state,
);
chunk.set_block_state(
&Vector3::new(0, 6, 3),
Block::NETHER_BRICK_FENCE.default_state,
);
chunk.set_block_state(
&Vector3::new(6, 6, 3),
Block::NETHER_BRICK_FENCE.default_state,
);
chunk.set_block_state(&offset(1, 6, 3), fence);
chunk.set_block_state(&offset(5, 6, 3), fence);
chunk.set_block_state(&offset(0, 6, 3), fence);
chunk.set_block_state(&offset(6, 6, 3), fence);
fill_with_outline(0, 6, 4, 0, 6, 7, block_state2, block_state2, chunk);
fill_with_outline(6, 6, 4, 6, 6, 7, block_state2, block_state2, chunk);
fill_outline_rel(0, 6, 4, 0, 6, 7, fence, fence, chunk);
fill_outline_rel(6, 6, 4, 6, 6, 7, fence, fence, chunk);
chunk.set_block_state(
&Vector3::new(0, 6, 8),
Block::NETHER_BRICK_FENCE.default_state,
);
chunk.set_block_state(
&Vector3::new(6, 6, 8),
Block::NETHER_BRICK_FENCE.default_state,
);
chunk.set_block_state(&offset(0, 6, 8), fence);
chunk.set_block_state(&offset(6, 6, 8), fence);
fill_with_outline(1, 6, 8, 5, 6, 8, block_state, block_state, chunk);
fill_outline_rel(1, 6, 8, 5, 6, 8, fence, fence, chunk);
chunk.set_block_state(
&Vector3::new(1, 7, 8),
Block::NETHER_BRICK_FENCE.default_state,
);
chunk.set_block_state(&offset(1, 7, 8), fence);
fill_outline_rel(2, 7, 8, 4, 7, 8, fence, fence, chunk);
chunk.set_block_state(&offset(5, 7, 8), fence);
fill_with_outline(2, 7, 8, 4, 7, 8, block_state, block_state, chunk);
chunk.set_block_state(&offset(2, 8, 8), fence);
chunk.set_block_state(&offset(3, 8, 8), fence);
chunk.set_block_state(&offset(4, 8, 8), fence);
chunk.set_block_state(
&Vector3::new(5, 7, 8),
Block::NETHER_BRICK_FENCE.default_state,
);
chunk.set_block_state(
&Vector3::new(2, 8, 8),
Block::NETHER_BRICK_FENCE.default_state,
);
chunk.set_block_state(&Vector3::new(3, 8, 8), block_state);
chunk.set_block_state(
&Vector3::new(4, 8, 8),
Block::NETHER_BRICK_FENCE.default_state,
);
// Blaze Spawner
chunk.set_block_state(&offset(3, 5, 5), Block::SPAWNER.default_state);
// Blaze Spawner
chunk.set_block_state(
&Vector3::new(3, 5, 5), // ?
Block::SPAWNER.default_state,
);
// Pillars down
for x in 0..6 {
for z in 0..6 {
fill_downwards(
origin_x + x,
origin_y - 1,
origin_z + z,
Block::NETHER_BRICKS.default_state,
chunk,
);
}
}
}
NetherFortressPieceType::SmallCorridor => {
fill_rel(0, 0, 0, 4, 1, 4, Block::NETHER_BRICKS.default_state, chunk);
fill_rel(0, 2, 0, 4, 5, 4, Block::AIR.default_state, chunk);
for x in 0..6 {
for z in 0..6 {
super::fill_downwards(x, -1, z, Block::NETHER_BRICKS.default_state, chunk);
}
}
}
}
let fence = &Block::NETHER_BRICK_FENCE.default_state;
pub struct SmallCorridor;
fill_rel(0, 2, 0, 0, 5, 4, Block::NETHER_BRICKS.default_state, chunk);
fill_rel(4, 2, 0, 4, 5, 4, Block::NETHER_BRICKS.default_state, chunk);
impl SmallCorridor {
fn generate(&self, _position: BlockPos, chunk: &mut crate::ProtoChunk) {
super::fill(0, 0, 0, 4, 1, 4, Block::NETHER_BRICKS.default_state, chunk);
super::fill(0, 2, 0, 4, 5, 4, Block::AIR.default_state, chunk);
fill_rel(0, 3, 1, 0, 4, 1, fence, chunk);
fill_rel(0, 3, 3, 0, 4, 3, fence, chunk);
fill_rel(4, 3, 1, 4, 4, 1, fence, chunk);
fill_rel(4, 3, 3, 4, 4, 3, fence, chunk);
// TODO
let block_state = Block::NETHER_BRICK_FENCE.default_state;
fill_rel(0, 6, 0, 4, 6, 4, Block::NETHER_BRICKS.default_state, chunk);
super::fill(0, 2, 0, 0, 5, 4, Block::NETHER_BRICKS.default_state, chunk);
super::fill(4, 2, 0, 4, 5, 4, Block::NETHER_BRICKS.default_state, chunk);
super::fill(0, 3, 1, 0, 4, 1, block_state, chunk);
super::fill(0, 3, 3, 0, 4, 3, block_state, chunk);
super::fill(4, 3, 1, 4, 4, 1, block_state, chunk);
super::fill(4, 3, 3, 4, 4, 3, block_state, chunk);
super::fill(0, 6, 0, 4, 6, 4, Block::NETHER_BRICKS.default_state, chunk);
for i in 0..=4 {
for j in 0..=4 {
super::fill_downwards(i, -1, j, Block::NETHER_BRICKS.default_state, chunk);
for i in 0..=4 {
for j in 0..=4 {
fill_downwards(
origin_x + i,
origin_y - 1,
origin_z + j,
Block::NETHER_BRICKS.default_state,
chunk,
);
}
}
}
}
}

View File

@@ -1,17 +1,111 @@
use pumpkin_util::math::block_box::BlockBox;
use pumpkin_data::Block;
use pumpkin_util::{
HeightMap,
math::{block_box::BlockBox, position::BlockPos, vector3::Vector3},
};
use serde::Deserialize;
use crate::{ProtoChunk, generation::structure::structures::StructureGenerator};
use crate::{
ProtoChunk,
generation::{
positions::chunk_pos::{get_center_x, get_center_z},
structure::structures::{
StructureGenerator, StructurePiece, StructurePiecesCollector, StructurePosition, fill,
fill_downwards,
},
},
};
#[derive(Deserialize, Clone, Debug)]
#[derive(Deserialize, Clone)]
pub struct SwampHutGenerator;
impl StructureGenerator for SwampHutGenerator {
fn get_structure_position(&self, _chunk: &ProtoChunk) -> super::StructurePosition {
todo!()
}
fn try_generate(&self, _seed: i64, chunk_x: i32, chunk_z: i32) -> Option<StructurePosition> {
let x = get_center_x(chunk_x);
let z = get_center_z(chunk_z);
let box_min_x = x;
let box_min_z = z;
fn generate(&self, _position: BlockBox, _chunk: &mut crate::ProtoChunk) {
todo!()
let bounding_box =
BlockBox::new(box_min_x, 60, box_min_z, box_min_x + 7, 80, box_min_z + 7);
let mut collector = StructurePiecesCollector::default();
collector.add_piece(Box::new(SwampHutPiece { bounding_box }));
Some(StructurePosition {
start_pos: BlockPos::new(x, 64, z),
collector: collector.into(),
})
}
}
#[derive(Debug, Clone)]
pub struct SwampHutPiece {
bounding_box: BlockBox,
}
impl StructurePiece for SwampHutPiece {
fn bounding_box(&self) -> &BlockBox {
&self.bounding_box
}
fn place(&self, chunk: &mut ProtoChunk, _seed: i64) {
let origin_x = self.bounding_box.min.x;
let origin_z = self.bounding_box.min.z;
// Find surface height (approximate, usually slightly submerged in swamp)
let floor_y = chunk.get_top_y(&HeightMap::OceanFloorWg, origin_x + 3, origin_z + 3) + 3; // +3 to lift it up
let origin_y = floor_y;
let fill_rel = |min_x, min_y, min_z, max_x, max_y, max_z, block, c: &mut ProtoChunk| {
fill(
origin_x + min_x,
origin_y + min_y,
origin_z + min_z,
origin_x + max_x,
origin_y + max_y,
origin_z + max_z,
block,
c,
)
};
let offset = |x, y, z| Vector3::new(origin_x + x, origin_y + y, origin_z + z);
// 1. Stilts (Logs downwards)
let spruce_log = &Block::SPRUCE_LOG.default_state;
let stilts = [(1, 1), (1, 6), (6, 1), (6, 6)];
for (sx, sz) in stilts {
fill_downwards(origin_x + sx, origin_y, origin_z + sz, spruce_log, chunk);
}
// 2. Main Platform (Spruce Planks)
let spruce_planks = &Block::SPRUCE_PLANKS.default_state;
fill_rel(0, 0, 0, 7, 0, 7, spruce_planks, chunk);
// 3. Walls
fill_rel(0, 1, 0, 7, 3, 0, spruce_planks, chunk); // North
fill_rel(0, 1, 7, 7, 3, 7, spruce_planks, chunk); // South
fill_rel(0, 1, 0, 0, 3, 7, spruce_planks, chunk); // West
fill_rel(7, 1, 0, 7, 3, 7, spruce_planks, chunk); // East
// 4. Roof (Simple block roof for now, stairs are complex without proper state orientation helpers)
fill_rel(0, 4, 0, 7, 4, 7, spruce_planks, chunk);
fill_rel(1, 5, 1, 6, 5, 6, spruce_planks, chunk);
// 5. Windows/Air
fill_rel(1, 1, 1, 6, 3, 6, Block::AIR.default_state, chunk); // Clear inside
// 6. Interior Decorations
chunk.set_block_state(&offset(2, 1, 2), Block::CRAFTING_TABLE.default_state);
chunk.set_block_state(&offset(2, 1, 3), Block::CAULDRON.default_state);
// Note: Flower Pot usually requires block entity data or specific state, simplifying here
chunk.set_block_state(&offset(5, 1, 3), Block::POTTED_BLUE_ORCHID.default_state);
// Fence on balcony
chunk.set_block_state(&offset(3, 1, 0), Block::OAK_FENCE.default_state);
}
}

View File

@@ -23,7 +23,7 @@ pub mod world_info;
pub type BlockId = u16;
pub type BlockStateId = u16;
pub const CURRENT_MC_VERSION: &str = "1.21.10";
pub const CURRENT_MC_VERSION: &str = "1.21.11";
pub const CURRENT_BEDROCK_MC_VERSION: &str = "1.21.111";
#[macro_export]

View File

@@ -203,27 +203,8 @@ mod test {
difficulty: Difficulty::Normal,
difficulty_locked: false,
game_rules: GameRuleRegistry {
announce_advancements: true,
block_explosion_drop_decay: true,
command_block_output: true,
command_modification_block_limit: 32768,
disable_elytra_movement_check: false,
disable_player_movement_check: false,
disable_raids: false,
do_daylight_cycle: true,
do_entity_drops: true,
do_fire_tick: true,
do_immediate_respawn: false,
do_insomnia: true,
do_limited_crafting: false,
do_mob_loot: true,
do_mob_spawning: true,
do_patrol_spawning: true,
do_tile_drops: true,
do_trader_spawning: true,
do_vines_spread: true,
do_warden_spawning: true,
do_weather_cycle: true,
drowning_damage: true,
ender_pearls_vanish_on_death: true,
fall_damage: true,
@@ -234,12 +215,9 @@ mod test {
keep_inventory: false,
lava_source_conversion: false,
log_admin_commands: true,
max_command_chain_length: 65536,
max_command_fork_count: 65536,
max_entity_cramming: 24,
mob_explosion_drop_decay: true,
mob_griefing: true,
natural_regeneration: true,
players_nether_portal_creative_delay: 0,
players_nether_portal_default_delay: 80,
players_sleeping_percentage: 100,
@@ -248,8 +226,6 @@ mod test {
reduced_debug_info: false,
send_command_feedback: true,
show_death_messages: true,
snow_accumulation_height: 1,
spawn_radius: 10,
spectators_generate_chunks: true,
tnt_explosion_drop_decay: false,
universal_anger: false,

View File

@@ -11,7 +11,7 @@ pub mod anvil;
// Constraint: disk biome palette serialization changed in 1.21.5
pub const MINIMUM_SUPPORTED_WORLD_DATA_VERSION: i32 = 4435; // 1.21.9
pub const MAXIMUM_SUPPORTED_WORLD_DATA_VERSION: i32 = 4556; // 1.21.10
pub const MAXIMUM_SUPPORTED_WORLD_DATA_VERSION: i32 = 4671; // 1.21.11
pub const MINIMUM_SUPPORTED_LEVEL_VERSION: i32 = 19132; // 1.21.9
pub const MAXIMUM_SUPPORTED_LEVEL_VERSION: i32 = 19133; // 1.21.9

View File

@@ -97,7 +97,7 @@ use pumpkin_world::chunk_system::ChunkLoading;
const MAX_CACHED_SIGNATURES: u8 = 128; // Vanilla: 128
const MAX_PREVIOUS_MESSAGES: u8 = 20; // Vanilla: 20
pub const DATA_VERSION: i32 = 4556; // 1.21.10
pub const DATA_VERSION: i32 = 4671; // 1.21.11
enum BatchState {
Initial,

View File

@@ -166,6 +166,7 @@ impl JavaClient {
pumpkin_data::tag::RegistryKey::Item,
pumpkin_data::tag::RegistryKey::EntityType,
pumpkin_data::tag::RegistryKey::Dialog,
pumpkin_data::tag::RegistryKey::Timeline,
]))
.await;

View File

@@ -381,7 +381,7 @@ impl JavaClient {
self.send_packet_now(&CKnownPacks::new(&[KnownPack {
namespace: "minecraft",
id: "core",
version: "1.21.10",
version: "1.21.11",
}]))
.await;
}