chore: prepare 1.20.5

This commit is contained in:
Alexander Medvedev
2026-04-18 21:01:44 +02:00
parent 85da55f9b3
commit d048c33870
23 changed files with 15052 additions and 123 deletions

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -649,6 +649,7 @@ dependencies = [
"serde",
"thiserror",
"tracing",
"uuid",
]
[[package]]

View File

@@ -24,6 +24,7 @@ pub struct Packets {
/// all `serverbound`/`clientbound` packet ID constants.
pub(crate) fn build() -> TokenStream {
let assets = [
(MinecraftVersion::V_1_20_5, "1_20_5_packets.json"),
(MinecraftVersion::V_1_21, "1_21_packets.json"),
(MinecraftVersion::V_1_21_2, "1_21_2_packets.json"),
(MinecraftVersion::V_1_21_4, "1_21_4_packets.json"),
@@ -57,7 +58,7 @@ pub(crate) fn build() -> TokenStream {
use pumpkin_util::version::MinecraftVersion;
pub const CURRENT_MC_VERSION: MinecraftVersion = #LATEST_VERSION;
pub const LOWEST_SUPPORTED_MC_VERSION: MinecraftVersion = MinecraftVersion::V_1_21;
pub const LOWEST_SUPPORTED_MC_VERSION: MinecraftVersion = MinecraftVersion::V_1_20_5;
#packet_id_struct

View File

@@ -13,6 +13,7 @@ const LATEST_VERSION: MinecraftVersion = MinecraftVersion::V_26_1;
/// static registry data, and the `Registry::get_synced` method.
pub(crate) fn build() -> TokenStream {
let assets = [
(MinecraftVersion::V_1_20_5, "1_21_synced_registries.json"),
(MinecraftVersion::V_1_21, "1_21_synced_registries.json"),
(MinecraftVersion::V_1_21_2, "1_21_2_synced_registries.json"),
(MinecraftVersion::V_1_21_4, "1_21_4_synced_registries.json"),

View File

@@ -7,10 +7,15 @@ use crate::version::MinecraftVersion;
/// Generates the `TokenStream` for per-version block-state remap tables and the
/// `remap_block_state_for_version` function.
pub fn build() -> TokenStream {
let node_1_20_5 = MappingNode {
version: MinecraftVersion::V_1_20_5,
value: "../assets/viaversion/data/mappings-1.20.5to1.21.nbt",
child: None,
};
let node_1_21 = MappingNode {
version: MinecraftVersion::V_1_21,
value: "../assets/viaversion/data/mappings-1.21to1.21.2.nbt",
child: None,
child: Some(&node_1_20_5),
};
let node_1_21_2 = MappingNode {
version: MinecraftVersion::V_1_21_2,

View File

@@ -7,10 +7,15 @@ use crate::version::MinecraftVersion;
/// Generates the `TokenStream` for per-version entity ID remap tables and the
/// `remap_entity_id_for_version` function.
pub fn build() -> TokenStream {
let node_1_20_5 = MappingNode {
version: MinecraftVersion::V_1_20_5,
value: "../assets/viaversion/data/mappings-1.20.5to1.21.nbt",
child: None,
};
let node_1_21 = MappingNode {
version: MinecraftVersion::V_1_21,
value: "../assets/viaversion/data/mappings-1.21to1.21.2.nbt",
child: None,
child: Some(&node_1_20_5),
};
let node_1_21_2 = MappingNode {
version: MinecraftVersion::V_1_21_2,

View File

@@ -23,10 +23,15 @@ fn reverse_mapping(mapping: &[u16], mapped_size: usize) -> Vec<u16> {
/// Generates the `TokenStream` for per-version item ID remap tables and the
/// `remap_item_id_for_version`/`remap_item_id_from_version` functions.
pub fn build() -> TokenStream {
let node_1_20_5 = MappingNode {
version: MinecraftVersion::V_1_20_5,
value: "../assets/viaversion/data/mappings-1.20.5to1.21.nbt",
child: None,
};
let node_1_21 = MappingNode {
version: MinecraftVersion::V_1_21,
value: "../assets/viaversion/data/mappings-1.21to1.21.2.nbt",
child: None,
child: Some(&node_1_20_5),
};
let node_1_21_2 = MappingNode {
version: MinecraftVersion::V_1_21_2,

View File

@@ -75,6 +75,7 @@ pub(crate) fn build() -> TokenStream {
// Watch specific tag versions
let assets = [
(MinecraftVersion::V_1_20_5, "1_21_2_tags.json"),
// TODO: upload 1_21_tags.json
(MinecraftVersion::V_1_21, "1_21_2_tags.json"),
(MinecraftVersion::V_1_21_2, "1_21_2_tags.json"),

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,13 @@
/* This file is generated. Do not edit manually. */
pub static ENTITY_ID_REMAP_V_26_1_TO_V_1_20_5: &[u16] = &[
0, 1, 0, 1, 2, 3, 4, 5, 8, 9, 6, 7, 12, 13, 8, 9, 11, 12, 13, 14, 15, 15, 16, 22, 23, 18, 19,
20, 21, 21, 22, 29, 23, 32, 33, 24, 25, 26, 27, 28, 29, 33, 34, 31, 32, 30, 35, 36, 37, 38, 39,
40, 62, 41, 42, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 72,
73, 63, 64, 65, 66, 67, 79, 80, 69, 68, 69, 70, 71, 17, 10, 17, 72, 61, 73, 90, 91, 74, 77, 75,
76, 77, 78, 79, 80, 81, 82, 83, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 96, 98,
99, 100, 119, 120, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 129, 126, 127, 128, 129,
];
pub static ENTITY_ID_REMAP_V_26_1_TO_V_1_21: &[u16] = &[
0, 1, 0, 1, 2, 3, 4, 5, 8, 9, 6, 7, 12, 13, 8, 9, 11, 12, 13, 14, 15, 15, 16, 22, 23, 18, 19,
20, 21, 21, 22, 29, 23, 32, 33, 24, 25, 26, 27, 28, 29, 33, 34, 31, 32, 30, 35, 36, 37, 38, 39,
@@ -74,6 +83,10 @@ pub fn remap_entity_id_for_version(
version: pumpkin_util::version::MinecraftVersion,
) -> u16 {
match version {
pumpkin_util::version::MinecraftVersion::V_1_20_5 => ENTITY_ID_REMAP_V_26_1_TO_V_1_20_5
.get(usize::from(entity_id))
.copied()
.unwrap_or(0),
pumpkin_util::version::MinecraftVersion::V_1_21 => ENTITY_ID_REMAP_V_26_1_TO_V_1_21
.get(usize::from(entity_id))
.copied()

View File

@@ -1,5 +1,171 @@
/* This file is generated. Do not edit manually. */
use pumpkin_util::version::MinecraftVersion;
const ITEM_ID_REMAP_V_26_1_TO_V_1_20_5: &[u16] = &[
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 43, 44, 45, 46, 47, 48,
49, 50, 51, 52, 53, 54, 56, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
135, 136, 137, 140, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 155,
152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 166, 162, 163, 164, 165, 166, 167, 168, 169,
170, 171, 177, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 189, 183, 184, 185, 186,
187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 197, 198, 199, 201, 202, 203, 200, 201,
202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 219,
220, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
237, 238, 239, 240, 241, 242, 243, 244, 246, 257, 248, 245, 247, 255, 256, 257, 248, 249, 250,
251, 252, 253, 254, 255, 256, 257, 258, 269, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 286, 287, 288, 289, 290, 291, 292, 293, 294,
295, 296, 297, 298, 310, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 315, 309, 310, 311,
312, 313, 314, 315, 316, 317, 330, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
330, 331, 344, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
348, 349, 350, 351, 352, 353, 354, 355, 362, 363, 364, 365, 366, 367, 368, 369, 356, 371, 372,
373, 374, 375, 376, 377, 378, 357, 358, 359, 360, 363, 364, 365, 366, 367, 368, 369, 361, 362,
363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381,
382, 383, 384, 385, 386, 387, 388, 389, 403, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399,
400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418,
419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437,
438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456,
457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494,
495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513,
514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532,
533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551,
552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570,
571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589,
589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607,
608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626,
627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645,
646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
665, 666, 667, 668, 669, 670, 671, 672, 673, 702, 703, 704, 705, 721, 706, 707, 674, 675, 676,
677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 705, 691, 692, 693, 694,
695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 721, 706, 707, 708, 709, 710, 711, 712,
713, 714, 715, 716, 717, 734, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730,
731, 732, 733, 734, 735, 736, 737, 755, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748,
749, 750, 751, 752, 753, 754, 755, 756, 775, 757, 758, 759, 760, 761, 762, 763, 764, 765, 767,
768, 769, 770, 771, 772, 1186, 773, 774, 775, 776, 777, 778, 779, 780, 781, 766, 767, 768, 769,
770, 771, 772, 1186, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787,
807, 808, 788, 789, 790, 791, 792, 793, 800, 801, 794, 795, 796, 797, 798, 848, 799, 800, 801,
802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820,
821, 859, 860, 861, 862, 863, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834,
835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 849, 850, 851, 852, 853, 854,
855, 856, 857, 858, 859, 900, 901, 902, 903, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869,
870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888,
889, 890, 891, 892, 915, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 927, 904, 905,
906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924,
925, 926, 927, 961, 962, 928, 929, 930, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965,
966, 967, 968, 969, 970, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944,
945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963,
964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982,
983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 999, 998, 1000,
1001, 1002, 1003, 1004, 1005, 1006, 1007, 1019, 1021, 1049, 1058, 1017, 1024, 1038, 1044, 1016,
1047, 1082, 1008, 1011, 1012, 1031, 1035, 1041, 1045, 1046, 1053, 1055, 1010, 1020, 1023, 1032,
1034, 1033, 1054, 1057, 1067, 1070, 1072, 1073, 1009, 1043, 1064, 1065, 1040, 1065, 1071, 1075,
1077, 1014, 1049, 1025, 1039, 1052, 1061, 1062, 1068, 1080, 1081, 1084, 1085, 1060, 1086, 1018,
1066, 1015, 1124, 1022, 1026, 1036, 1048, 1060, 1063, 1078, 1079, 1030, 1052, 1056, 1076, 1074,
1013, 1033, 1051, 1037, 1042, 1050, 1051, 1069, 1083, 1087, 1027, 1028, 1029, 1059, 1088, 1089,
1090, 1091, 1092, 1329, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104,
1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1125, 1116, 1117, 1118, 1119,
1120, 1121, 1122, 1123, 1170, 1124, 1125, 1126, 1131, 1127, 1128, 1129, 1130, 1131, 1132, 1133,
1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149,
1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1167, 1168, 1169,
1170, 1171, 1172, 1173, 1163, 1164, 1165, 1207, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173,
1172, 1173, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1186, 1201, 1184,
1185, 1187, 1241, 1242, 1200, 1201, 1202, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196,
1197, 1198, 1199, 1241, 1242, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210,
1211, 1212, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1213, 1214, 1215, 1216, 1217, 1218,
1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234,
1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250,
1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266,
1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282,
1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298,
1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314,
1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1467, 1468, 1469, 1470, 1471, 1472, 1473,
1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1324, 1325, 1326, 1327, 1328,
];
const ITEM_ID_REMAP_V_1_20_5_TO_V_26_1: &[u16] = &[
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
138, 139, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 156, 157, 158,
159, 160, 161, 162, 163, 164, 165, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 178, 179,
180, 181, 182, 183, 184, 185, 186, 187, 188, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
200, 201, 202, 203, 205, 206, 207, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
223, 224, 225, 226, 227, 228, 229, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 262, 259, 263, 267, 268,
269, 270, 271, 272, 273, 274, 275, 276, 277, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 318, 319,
320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 334, 335, 336, 337, 338, 339,
340, 341, 343, 344, 345, 346, 347, 348, 349, 350, 351, 353, 354, 355, 356, 357, 358, 359, 360,
361, 362, 363, 364, 365, 366, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380,
381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 400, 409, 410, 411, 412, 420, 421, 422,
423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441,
442, 443, 444, 445, 446, 447, 448, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461,
462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480,
481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499,
500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518,
519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537,
538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556,
557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575,
576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594,
595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613,
614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632,
633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 650, 651, 652,
653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690,
691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709,
710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728,
729, 730, 731, 732, 733, 734, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754,
755, 756, 757, 758, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774,
776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 789, 790, 791, 792, 793, 794, 795,
796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815,
816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835,
836, 837, 838, 855, 856, 857, 858, 859, 860, 861, 863, 864, 865, 866, 867, 868, 869, 870, 871,
872, 873, 874, 875, 876, 877, 880, 881, 882, 883, 884, 885, 888, 889, 890, 891, 892, 894, 895,
896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914,
915, 916, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938,
939, 940, 941, 942, 943, 944, 945, 946, 947, 893, 948, 949, 950, 951, 952, 953, 954, 955, 956,
957, 958, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 997, 998, 999,
1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016,
1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032,
1035, 1036, 1037, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066,
1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082,
1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098,
1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114,
1115, 1116, 1117, 1118, 1119, 1120, 1122, 1121, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130,
1142, 1164, 1152, 1143, 1144, 1204, 1173, 1189, 1139, 1135, 1187, 1131, 1153, 1132, 1191, 1154,
1136, 1175, 1192, 1214, 1215, 1216, 1199, 1145, 1155, 1205, 1156, 1146, 1193, 1207, 1137, 1176,
1168, 1147, 1208, 1165, 1138, 1148, 1149, 1140, 1194, 1174, 1209, 1210, 1200, 1150, 1158, 1151,
1201, 1159, 1134, 1217, 1195, 1178, 1179, 1196, 1166, 1169, 1188, 1160, 1180, 1211, 1161, 1170,
1162, 1163, 1203, 1171, 1202, 1172, 1197, 1198, 1181, 1182, 1141, 1212, 1183, 1184, 1186, 1213,
1218, 1219, 1220, 1221, 1222, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234,
1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1248, 1249, 1250, 1251,
1252, 1253, 1254, 1255, 1257, 1258, 1259, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269,
1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285,
1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1304, 1305, 1306, 1308, 1309,
1310, 1311, 1312, 1313, 1316, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328,
1331, 1332, 1329, 1333, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350,
1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1374, 1375, 1376,
1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392,
1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408,
1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424,
1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440,
1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456,
1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472,
1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1501, 1502, 1503, 1504,
1505, 1223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493,
1494, 1495, 1496, 1497, 1498, 1499, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
];
const ITEM_ID_REMAP_V_26_1_TO_V_1_21: &[u16] = &[
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 43, 44, 45, 46, 47, 48,
@@ -1354,6 +1520,10 @@ const ITEM_ID_REMAP_V_1_21_11_TO_V_26_1: &[u16] = &[
#[must_use]
pub fn remap_item_id_for_version(item_id: u16, version: MinecraftVersion) -> u16 {
match version {
pumpkin_util::version::MinecraftVersion::V_1_20_5 => ITEM_ID_REMAP_V_26_1_TO_V_1_20_5
.get(usize::from(item_id))
.copied()
.unwrap_or(item_id),
pumpkin_util::version::MinecraftVersion::V_1_21 => ITEM_ID_REMAP_V_26_1_TO_V_1_21
.get(usize::from(item_id))
.copied()
@@ -1392,6 +1562,10 @@ pub fn remap_item_id_for_version(item_id: u16, version: MinecraftVersion) -> u16
#[must_use]
pub fn remap_item_id_from_version(item_id: u16, version: MinecraftVersion) -> u16 {
match version {
pumpkin_util::version::MinecraftVersion::V_1_20_5 => ITEM_ID_REMAP_V_1_20_5_TO_V_26_1
.get(usize::from(item_id))
.copied()
.unwrap_or(item_id),
pumpkin_util::version::MinecraftVersion::V_1_21 => ITEM_ID_REMAP_V_1_21_TO_V_26_1
.get(usize::from(item_id))
.copied()

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -39,10 +39,11 @@ impl<'a> CLoginSuccess<'a> {
impl MultiVersionJavaPacket for CLoginSuccess<'_> {
fn to_id(version: MinecraftVersion) -> i32 {
if version >= MinecraftVersion::V_1_21_2 {
LOGIN_LOGIN_FINISHED.to_id(version)
} else {
// TODO: this is hacky :c
if version == MinecraftVersion::V_1_21 {
LOGIN_GAME_PROFILE.to_id(version)
} else {
LOGIN_LOGIN_FINISHED.to_id(version)
}
}
}

View File

@@ -20,8 +20,10 @@ impl MultiVersionJavaPacket for CSetSelectedSlot {
fn to_id(version: MinecraftVersion) -> i32 {
if version >= MinecraftVersion::V_1_21_2 {
PLAY_SET_HELD_SLOT.to_id(version)
} else {
} else if version == MinecraftVersion::V_1_21 {
PLAY_SET_CARRIED_ITEM.to_id(version)
} else {
PLAY_SET_HELD_SLOT.to_id(version)
}
}
}

View File

@@ -1,5 +1,4 @@
use std::{
io::Cursor,
path::PathBuf,
pin::Pin,
sync::{
@@ -11,7 +10,7 @@ use std::{
use bytes::Bytes;
use futures::future::join_all;
use pumpkin_data::{Block, chunk::ChunkStatus, fluid::Fluid};
use pumpkin_nbt::{compound::NbtCompound, from_bytes, nbt_long_array};
use pumpkin_nbt::{compound::NbtCompound, nbt_long_array};
use rustc_hash::FxHashMap;
use tokio::sync::Mutex;
use tracing::debug;
@@ -34,8 +33,6 @@ use super::{
ChunkData, ChunkHeightmaps, ChunkLight, ChunkParsingError, ChunkSections,
palette::{BiomePalette, BlockPalette},
};
use crate::block::BlockStateCodec;
pub mod anvil;
pub mod linear;
@@ -107,7 +104,7 @@ impl ChunkData {
chunk_data: &[u8],
position: Vector2<i32>,
) -> Result<Self, ChunkParsingError> {
let chunk_data = from_bytes::<ChunkNbt>(Cursor::new(chunk_data))
let chunk_data = pumpkin_nbt::from_pnbt::<ChunkNbt>(chunk_data)
.map_err(|e| ChunkParsingError::ErrorDeserializingChunk(e.to_string()))?;
if chunk_data.x_pos != position.x || chunk_data.z_pos != position.y {
@@ -264,9 +261,8 @@ impl ChunkData {
light_correct: is_light_correct,
};
let mut result = Vec::new();
pumpkin_nbt::to_bytes(&nbt, &mut result)
.map_err(ChunkSerializingError::ErrorSerializingChunk)?;
let result =
pumpkin_nbt::to_pnbt(&nbt).map_err(ChunkSerializingError::ErrorSerializingChunk)?;
Ok(result.into())
}
}
@@ -314,7 +310,7 @@ impl ChunkEntityData {
chunk_data: &[u8],
position: Vector2<i32>,
) -> Result<Self, ChunkParsingError> {
let chunk_entity_data = pumpkin_nbt::from_bytes::<EntityNbt>(Cursor::new(chunk_data))
let chunk_entity_data = pumpkin_nbt::from_pnbt::<EntityNbt>(chunk_data)
.map_err(|e| ChunkParsingError::ErrorDeserializingChunk(e.to_string()))?;
if chunk_entity_data.position[0] != position.x
@@ -362,9 +358,8 @@ impl ChunkEntityData {
entities: self.data.lock().await.values().cloned().collect(),
};
let mut result = Vec::new();
pumpkin_nbt::to_bytes(&nbt, &mut result)
.map_err(ChunkSerializingError::ErrorSerializingChunk)?;
let result =
pumpkin_nbt::to_pnbt(&nbt).map_err(ChunkSerializingError::ErrorSerializingChunk)?;
Ok(result.into())
}
}
@@ -390,15 +385,7 @@ pub struct ChunkSectionBiomes {
skip_serializing_if = "Option::is_none"
)]
pub(crate) data: Option<Box<[i64]>>,
pub(crate) palette: Vec<PaletteBiomeEntry>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
// NOTE: Change not documented in the wiki; biome palettes are directly just the name now
#[serde(rename_all = "PascalCase", transparent)]
pub struct PaletteBiomeEntry {
/// Biome name
pub name: String,
pub(crate) palette: Box<[u8]>,
}
#[derive(Serialize, Deserialize, Clone)]
@@ -408,7 +395,7 @@ pub struct ChunkSectionBlockStates {
skip_serializing_if = "Option::is_none"
)]
pub(crate) data: Option<Box<[i64]>>,
pub(crate) palette: Vec<BlockStateCodec>,
pub(crate) palette: Box<[u16]>,
}
#[derive(Debug, Clone)]

View File

@@ -1,17 +1,14 @@
use std::{collections::HashMap, hash::Hash, iter::repeat_n};
use pumpkin_data::{
Block, BlockState,
BlockState,
block_properties::{has_random_ticks, is_air, is_liquid},
chunk::Biome,
fluid::Fluid,
};
use pumpkin_util::encompassing_bits;
use tracing::warn;
use crate::block::BlockStateCodec;
use super::format::{ChunkSectionBiomes, ChunkSectionBlockStates, PaletteBiomeEntry};
use super::format::{ChunkSectionBiomes, ChunkSectionBlockStates};
/// 3d array indexed by y,z,x
type AbstractCube<T, const DIM: usize> = [[[T; DIM]; DIM]; DIM];
@@ -152,7 +149,7 @@ impl<V: Hash + Eq + Copy + Default, const DIM: usize> PalettedContainer<V, DIM>
#[must_use]
pub fn from_palette_and_packed_data(
palette: Vec<V>,
palette: &[V],
packed_data: &[i64],
minimum_bits_per_entry: u8,
) -> Self {
@@ -220,7 +217,7 @@ impl<V: Hash + Eq + Copy + Default, const DIM: usize> PalettedContainer<V, DIM>
Self::Heterogeneous(Box::new(HeterogeneousPaletteData {
cube,
palette,
palette: palette.to_vec(),
counts,
}))
}
@@ -328,14 +325,10 @@ impl BiomePalette {
#[must_use]
pub fn from_disk_nbt(nbt: ChunkSectionBiomes) -> Self {
let palette = nbt
.palette
.into_iter()
.map(|entry| Biome::from_name(&entry.name).unwrap_or(&Biome::PLAINS).id)
.collect::<Vec<_>>();
let palette = nbt.palette;
Self::from_palette_and_packed_data(
palette,
&palette,
nbt.data.as_ref().unwrap_or(&Box::default()),
BIOME_DISK_MIN_BITS,
)
@@ -352,12 +345,7 @@ impl BiomePalette {
} else {
Some(packed_data)
},
palette: palette
.into_iter()
.map(|registry_id| PaletteBiomeEntry {
name: Biome::from_id(registry_id).unwrap().registry_id.into(),
})
.collect(),
palette,
}
}
}
@@ -561,14 +549,10 @@ impl BlockPalette {
#[must_use]
pub fn from_disk_nbt(nbt: ChunkSectionBlockStates) -> Self {
let palette = nbt
.palette
.into_iter()
.map(|entry| entry.get_state_id())
.collect::<Vec<_>>();
let palette = nbt.palette;
Self::from_palette_and_packed_data(
palette,
&palette,
nbt.data.as_ref().unwrap_or(&Box::default()),
BLOCK_DISK_MIN_BITS,
)
@@ -583,24 +567,7 @@ impl BlockPalette {
} else {
Some(packed_data)
},
palette: palette
.into_iter()
.map(Self::block_state_id_to_palette_entry)
.collect(),
}
}
fn block_state_id_to_palette_entry(registry_id: u16) -> BlockStateCodec {
let block = Block::from_state_id(registry_id);
BlockStateCodec {
name: block,
properties: block.properties(registry_id).map(|p| {
p.to_props()
.into_iter()
.map(|(k, v)| (k.to_owned(), v.to_owned()))
.collect()
}),
palette,
}
}
}

View File

@@ -151,10 +151,15 @@ impl JavaClient {
);
}
pub async fn handle_known_packs(&self, _config_acknowledged: SKnownPacks) {
pub async fn handle_known_packs(
&self,
_config_acknowledged: SKnownPacks,
server: &Arc<Server>,
) -> Option<PacketHandlerResult> {
debug!("Handling known packs");
// let mut tags_to_send = Vec::new();
let registry = Registry::get_synced(self.version.load());
let version = self.version.load();
let registry = Registry::get_synced(version);
for registry in registry {
let entries: Vec<RegistryEntry> = registry
.registry_entries
@@ -181,9 +186,9 @@ impl JavaClient {
];
// optionally include timeline/dimension_type if there are any tags to send
if self.version.load().protocol_version() >= MinecraftVersion::V_1_21_11.protocol_version()
if version.protocol_version() >= MinecraftVersion::V_1_21_11.protocol_version()
&& let Some(map) = pumpkin_data::tag::get_registry_key_tags(
self.version.load(),
version,
pumpkin_data::tag::RegistryKey::Timeline,
)
&& !map.is_empty()
@@ -191,21 +196,21 @@ impl JavaClient {
tags.push(pumpkin_data::tag::RegistryKey::Timeline);
}
if let Some(map) = pumpkin_data::tag::get_registry_key_tags(
self.version.load(),
version,
pumpkin_data::tag::RegistryKey::DimensionType,
) && !map.is_empty()
{
tags.push(pumpkin_data::tag::RegistryKey::DimensionType);
}
if let Some(map) = pumpkin_data::tag::get_registry_key_tags(
self.version.load(),
version,
pumpkin_data::tag::RegistryKey::DamageType,
) && !map.is_empty()
{
tags.push(pumpkin_data::tag::RegistryKey::DamageType);
}
if let Some(map) = pumpkin_data::tag::get_registry_key_tags(
self.version.load(),
version,
pumpkin_data::tag::RegistryKey::BannerPattern,
) && !map.is_empty()
{
@@ -214,8 +219,14 @@ impl JavaClient {
self.send_packet_now(&CUpdateTags::new(&tags)).await;
// We are done with configuring
debug!("Finished config");
self.send_packet_now(&CFinishConfig).await;
if version < MinecraftVersion::V_1_20_2 {
return Some(self.handle_config_acknowledged(server).await);
}
debug!("Finished config");
None
}
pub async fn handle_config_acknowledged(&self, server: &Arc<Server>) -> PacketHandlerResult {

View File

@@ -9,7 +9,7 @@ use pumpkin_protocol::{
SEncryptionResponse, SLoginCookieResponse, SLoginPluginResponse, SLoginStart,
},
};
use pumpkin_util::text::TextComponent;
use pumpkin_util::{text::TextComponent, version::MinecraftVersion};
use tracing::debug;
use uuid::Uuid;
@@ -300,7 +300,9 @@ impl JavaClient {
self.connection_state.store(ConnectionState::Config);
self.send_packet_now(&server.get_branding()).await;
if server.advanced_config.server_links.enabled {
if server.advanced_config.server_links.enabled
&& self.version.load() >= MinecraftVersion::V_1_21
{
let mut links: Vec<Link> = Vec::new();
let bug_report = &server.advanced_config.server_links.bug_report;

View File

@@ -372,14 +372,15 @@ impl JavaClient {
version: MinecraftVersion,
mut write: impl Write,
) -> Result<(), WritingError> {
if P::to_id(version) == -1 {
let version_number = P::to_id(version);
if version_number == -1 {
error!(
"Packet ID for version {} is invalid ({} at latest)",
version,
P::to_id(CURRENT_MC_VERSION)
P::to_id(CURRENT_MC_VERSION),
);
}
write.write_var_int(&VarInt(P::to_id(version)))?;
write.write_var_int(&VarInt(version_number))?;
packet.write_packet_data(write, &version)
}
@@ -388,6 +389,7 @@ impl JavaClient {
version: MinecraftVersion,
) -> Result<Bytes, WritingError> {
let mut packet_buf = Vec::new();
Self::write_packet_for_version(packet, version, &mut packet_buf)?;
Ok(packet_buf.into())
}
@@ -649,8 +651,12 @@ impl JavaClient {
return Ok(Some(self.handle_config_acknowledged(server).await));
}
id if id == SKnownPacks::to_id(version) => {
self.handle_known_packs(SKnownPacks::read(payload, &version)?)
.await;
if let Some(i) = self
.handle_known_packs(SKnownPacks::read(payload, &version)?, server)
.await
{
return Ok(Some(i));
}
}
id if id == SConfigCookieResponse::to_id(version) => {
self.handle_config_cookie_response(&SConfigCookieResponse::read(

View File

@@ -1,9 +1,7 @@
use crate::{SHOULD_STOP, STOP_INTERRUPT, server::Server};
use std::{
sync::{Arc, atomic::Ordering},
time::{Duration, Instant},
};
use tokio::time::sleep;
use crate::{STOP_INTERRUPT, server::Server};
use std::sync::Arc;
use std::time::Duration;
use tokio::time::{Instant, sleep_until};
use tracing::debug;
pub struct Ticker;
@@ -11,63 +9,50 @@ pub struct Ticker;
impl Ticker {
/// IMPORTANT: Run this in a new thread/tokio task.
pub async fn run(server: &Arc<Server>) {
let mut last_tick = Instant::now();
'ticker: loop {
if SHOULD_STOP.load(Ordering::Relaxed) {
break;
}
let mut next_tick = Instant::now();
let tick_start_time = Instant::now();
'ticker: loop {
let tick_start_time = std::time::Instant::now();
let manager = &server.tick_rate_manager;
manager.tick();
// Now server.tick() handles both player/network ticking (always)
// and world logic ticking (conditionally based on freeze state)
if manager.is_sprinting() {
// A sprint is active, so we tick.
manager.start_sprint_tick_work();
server.tick().await;
// After ticking, end the work and check if the sprint is over.
if manager.end_sprint_tick_work() {
// This was the last sprint tick. Finish the sprint and restore the previous state.
manager.finish_tick_sprint(server).await;
}
} else {
// Always call tick - it will internally decide what to tick based on frozen state
server.tick().await;
}
// Record the total time this tick took
let tick_duration_nanos = tick_start_time.elapsed().as_nanos() as i64;
server.update_tick_times(tick_duration_nanos).await;
// Sleep logic remains the same
let now = Instant::now();
let elapsed = now.duration_since(last_tick);
let tick_interval = if manager.is_sprinting() {
Duration::ZERO
} else {
Duration::from_nanos(manager.nanoseconds_per_tick() as u64)
};
if let Some(sleep_time) = tick_interval.checked_sub(elapsed)
&& !sleep_time.is_zero()
{
// Use select! to make sleep interruptible by STOP_INTERRUPT
tokio::select! {
() = sleep(sleep_time) => {},
() = STOP_INTERRUPT.cancelled() => {
// Shutdown requested, exit the loop immediately
break 'ticker;
}
next_tick += tick_interval;
tokio::select! {
() = sleep_until(next_tick) => {},
() = STOP_INTERRUPT.cancelled() => {
break 'ticker;
}
}
last_tick = Instant::now();
// Death Spiral Prevention
let now = Instant::now();
if now.saturating_duration_since(next_tick) > Duration::from_secs(5) {
next_tick = now;
}
}
debug!("Ticker stopped");
}
}