Skip to main content

steel_core/entity/base/
fire_freeze.rs

1/// Vanilla base fire and freezing state.
2#[derive(Debug, Clone, Copy, PartialEq, Eq)]
3pub struct EntityFireFreezeState {
4    pub(super) remaining_fire_ticks: i32,
5    pub(super) ticks_frozen: i32,
6    pub(super) is_in_powder_snow: bool,
7    pub(super) was_in_powder_snow: bool,
8    pub(super) has_visual_fire: bool,
9}
10
11impl EntityFireFreezeState {
12    /// Creates default vanilla fire/freeze state.
13    #[must_use]
14    pub const fn new() -> Self {
15        Self {
16            remaining_fire_ticks: 0,
17            ticks_frozen: 0,
18            is_in_powder_snow: false,
19            was_in_powder_snow: false,
20            has_visual_fire: false,
21        }
22    }
23
24    /// Creates fire/freeze state restored from persistent data.
25    #[must_use]
26    pub const fn from_parts(
27        remaining_fire_ticks: i32,
28        ticks_frozen: i32,
29        is_in_powder_snow: bool,
30        was_in_powder_snow: bool,
31        has_visual_fire: bool,
32    ) -> Self {
33        Self {
34            remaining_fire_ticks,
35            ticks_frozen,
36            is_in_powder_snow,
37            was_in_powder_snow,
38            has_visual_fire,
39        }
40    }
41
42    /// Returns vanilla `remainingFireTicks`.
43    #[must_use]
44    pub const fn remaining_fire_ticks(self) -> i32 {
45        self.remaining_fire_ticks
46    }
47
48    /// Returns synchronized vanilla `TicksFrozen`.
49    #[must_use]
50    pub const fn ticks_frozen(self) -> i32 {
51        self.ticks_frozen
52    }
53
54    /// Returns whether this entity touched powder snow during the current tick.
55    #[must_use]
56    pub const fn is_in_powder_snow(self) -> bool {
57        self.is_in_powder_snow
58    }
59
60    /// Returns whether this entity touched powder snow during the previous tick.
61    #[must_use]
62    pub const fn was_in_powder_snow(self) -> bool {
63        self.was_in_powder_snow
64    }
65
66    /// Returns vanilla `hasVisualFire`.
67    #[must_use]
68    pub const fn has_visual_fire(self) -> bool {
69        self.has_visual_fire
70    }
71
72    /// Returns whether the entity has any frozen ticks.
73    #[must_use]
74    pub const fn is_freezing(self) -> bool {
75        self.ticks_frozen > 0
76    }
77
78    /// Returns whether the entity has reached vanilla full-freeze duration.
79    #[must_use]
80    pub const fn is_fully_frozen(self, ticks_required_to_freeze: i32) -> bool {
81        self.ticks_frozen >= ticks_required_to_freeze
82    }
83}
84
85impl Default for EntityFireFreezeState {
86    fn default() -> Self {
87        Self::new()
88    }
89}