steel_registry/
vanilla_ticket_types.rs1use steel_utils::Identifier;
4
5use crate::ticket_type::{TicketType, TicketTypeFlags, TicketTypeRegistry};
6
7const LOADS: TicketTypeFlags = TicketTypeFlags::LOADING;
8const LOADS_AND_SIMULATES: TicketTypeFlags = LOADS.union(TicketTypeFlags::SIMULATION);
9const SIMULATES_AND_KEEPS_ACTIVE: TicketTypeFlags =
10 TicketTypeFlags::SIMULATION.union(TicketTypeFlags::KEEP_DIMENSION_ACTIVE);
11const PERSISTENT_LOADING_SIMULATION: TicketTypeFlags = TicketTypeFlags::PERSIST
12 .union(TicketTypeFlags::LOADING)
13 .union(TicketTypeFlags::SIMULATION)
14 .union(TicketTypeFlags::KEEP_DIMENSION_ACTIVE);
15const LOADING_SIMULATION: TicketTypeFlags = TicketTypeFlags::LOADING
16 .union(TicketTypeFlags::SIMULATION)
17 .union(TicketTypeFlags::KEEP_DIMENSION_ACTIVE);
18const LOADING_THAT_EXPIRES_IF_UNLOADED: TicketTypeFlags =
19 TicketTypeFlags::LOADING.union(TicketTypeFlags::CAN_EXPIRE_IF_UNLOADED);
20
21pub static PLAYER_SPAWN: TicketType =
22 TicketType::new(Identifier::vanilla_static("player_spawn"), 20, LOADS);
23pub static SPAWN_SEARCH: TicketType =
24 TicketType::new(Identifier::vanilla_static("spawn_search"), 1, LOADS);
25pub static DRAGON: TicketType = TicketType::new(
26 Identifier::vanilla_static("dragon"),
27 TicketType::NO_TIMEOUT,
28 LOADS_AND_SIMULATES,
29);
30pub static PLAYER_LOADING: TicketType = TicketType::new(
31 Identifier::vanilla_static("player_loading"),
32 TicketType::NO_TIMEOUT,
33 LOADS,
34);
35pub static PLAYER_SIMULATION: TicketType = TicketType::new(
36 Identifier::vanilla_static("player_simulation"),
37 TicketType::NO_TIMEOUT,
38 SIMULATES_AND_KEEPS_ACTIVE,
39);
40pub static FORCED: TicketType = TicketType::new(
41 Identifier::vanilla_static("forced"),
42 TicketType::NO_TIMEOUT,
43 PERSISTENT_LOADING_SIMULATION,
44);
45pub static PORTAL: TicketType = TicketType::new(
46 Identifier::vanilla_static("portal"),
47 300,
48 PERSISTENT_LOADING_SIMULATION,
49);
50pub static ENDER_PEARL: TicketType = TicketType::new(
51 Identifier::vanilla_static("ender_pearl"),
52 40,
53 LOADING_SIMULATION,
54);
55pub static UNKNOWN: TicketType = TicketType::new(
56 Identifier::vanilla_static("unknown"),
57 1,
58 LOADING_THAT_EXPIRES_IF_UNLOADED,
59);
60
61pub fn register_vanilla_ticket_types(registry: &mut TicketTypeRegistry) {
63 registry.register(&PLAYER_SPAWN);
64 registry.register(&SPAWN_SEARCH);
65 registry.register(&DRAGON);
66 registry.register(&PLAYER_LOADING);
67 registry.register(&PLAYER_SIMULATION);
68 registry.register(&FORCED);
69 registry.register(&PORTAL);
70 registry.register(&ENDER_PEARL);
71 registry.register(&UNKNOWN);
72}
73
74#[cfg(test)]
75mod tests {
76 use super::register_vanilla_ticket_types;
77 use crate::RegistryExt;
78 use crate::ticket_type::TicketTypeRegistry;
79
80 #[test]
81 fn registry_matches_vanilla_order_timeouts_and_behavior() {
82 let mut registry = TicketTypeRegistry::new();
83 register_vanilla_ticket_types(&mut registry);
84
85 let expected = [
86 ("minecraft:player_spawn", 20, 2),
87 ("minecraft:spawn_search", 1, 2),
88 ("minecraft:dragon", 0, 6),
89 ("minecraft:player_loading", 0, 2),
90 ("minecraft:player_simulation", 0, 12),
91 ("minecraft:forced", 0, 15),
92 ("minecraft:portal", 300, 15),
93 ("minecraft:ender_pearl", 40, 14),
94 ("minecraft:unknown", 1, 18),
95 ];
96
97 assert_eq!(registry.len(), expected.len());
98
99 for (id, (key, timeout, flags)) in expected.into_iter().enumerate() {
100 let ticket_type = registry
101 .by_id(id)
102 .unwrap_or_else(|| panic!("missing vanilla ticket type at ID {id}"));
103
104 assert_eq!(ticket_type.key.to_string(), key);
105 assert_eq!(ticket_type.timeout(), timeout);
106 assert_eq!(ticket_type.flags().bits(), flags);
107 }
108 }
109}