mirror of
https://github.com/Pumpkin-MC/Pumpkin.git
synced 2026-08-30 20:14:23 +00:00
chore: prepare 1.20.5
This commit is contained in:
1
assets/packet/1_20_5_packets.json
Normal file
1
assets/packet/1_20_5_packets.json
Normal file
File diff suppressed because one or more lines are too long
BIN
assets/viaversion/data/mappings-1.20.5to1.21.nbt
Normal file
BIN
assets/viaversion/data/mappings-1.20.5to1.21.nbt
Normal file
Binary file not shown.
1
pumpkin-codegen/Cargo.lock
generated
1
pumpkin-codegen/Cargo.lock
generated
@@ -649,6 +649,7 @@ dependencies = [
|
||||
"serde",
|
||||
"thiserror",
|
||||
"tracing",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"),
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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()
|
||||
|
||||
@@ -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
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)]
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user