terra_items/item/
id.rs

1use super::Item;
2use std::{mem, ops::RangeInclusive};
3
4const ID_RANGE: RangeInclusive<i32> = 1..=5455;
5
6impl super::Item {
7	pub fn to_id(self, version: i32) -> i32 {
8		let id = self as i32;
9		if version > 146 {
10			return id;
11		}
12
13		match id {
14			3769 => -24,
15			3768 => -23,
16			3767 => -22,
17			3766 => -21,
18			3765 => -20,
19			3764 => -19,
20			3480 => -48,
21			3481 => -47,
22			3482 => -46,
23			3483 => -45,
24			3484 => -44,
25			3485 => -43,
26			3486 => -42,
27			3487 => -41,
28			3488 => -40,
29			3489 => -39,
30			3490 => -38,
31			3491 => -37,
32			3492 => -36,
33			3493 => -35,
34			3494 => -34,
35			3495 => -33,
36			3496 => -32,
37			3497 => -31,
38			3498 => -30,
39			3499 => -29,
40			3500 => -28,
41			3501 => -27,
42			3502 => -26,
43			3503 => -25,
44			3504 => -18,
45			3505 => -17,
46			3506 => -16,
47			3507 => -15,
48			3508 => -14,
49			3509 => -13,
50			3510 => -12,
51			3511 => -11,
52			3512 => -10,
53			3513 => -9,
54			3514 => -8,
55			3515 => -7,
56			3516 => -6,
57			3517 => -5,
58			3518 => -4,
59			3519 => -3,
60			3520 => -2,
61			3521 => -1,
62			_ => id,
63		}
64	}
65
66	pub fn from_id(id: i32, _version: i32) -> Option<Self> {
67		let id = match id {
68			-24 => 3769,
69			-23 => 3768,
70			-22 => 3767,
71			-21 => 3766,
72			-20 => 3765,
73			-19 => 3764,
74			-48 => 3480,
75			-47 => 3481,
76			-46 => 3482,
77			-45 => 3483,
78			-44 => 3484,
79			-43 => 3485,
80			-42 => 3486,
81			-41 => 3487,
82			-40 => 3488,
83			-39 => 3489,
84			-38 => 3490,
85			-37 => 3491,
86			-36 => 3492,
87			-35 => 3493,
88			-34 => 3494,
89			-33 => 3495,
90			-32 => 3496,
91			-31 => 3497,
92			-30 => 3498,
93			-29 => 3499,
94			-28 => 3500,
95			-27 => 3501,
96			-26 => 3502,
97			-25 => 3503,
98			-18 => 3504,
99			-17 => 3505,
100			-16 => 3506,
101			-15 => 3507,
102			-14 => 3508,
103			-13 => 3509,
104			-12 => 3510,
105			-11 => 3511,
106			-10 => 3512,
107			-9 => 3513,
108			-8 => 3514,
109			-7 => 3515,
110			-6 => 3516,
111			-5 => 3517,
112			-4 => 3518,
113			-3 => 3519,
114			-2 => 3520,
115			-1 => 3521,
116			_ => id,
117		};
118
119		if !ID_RANGE.contains(&id) {
120			return None;
121		}
122
123		Some(unsafe { mem::transmute::<i32, Item>(id) })
124	}
125}