Skip to main content

pumpkinplus/mirror_types/
entity_type.rs

1//! Mirror of the API entity type enum.
2//!
3//! These names correspond to the Pumpkin plugin API's `EntityType` variants.
4//! Use this enum for configuration fields that reference specific entity types.
5
6use serde::{Deserialize, Serialize};
7use std::fmt;
8
9/// Mirror of the API entity type enum.
10///
11/// Covers all entity types exposed by the Pumpkin plugin API.
12#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Hash)]
13#[serde(rename_all = "PascalCase")]
14pub enum EntityType {
15    AcaciaBoat,
16    AcaciaChestBoat,
17    Allay,
18    AreaEffectCloud,
19    Armadillo,
20    ArmorStand,
21    Arrow,
22    Axolotl,
23    BambooChestRaft,
24    BambooRaft,
25    Bat,
26    Bee,
27    BirchBoat,
28    BirchChestBoat,
29    Blaze,
30    BlockDisplay,
31    Bogged,
32    Breeze,
33    BreezeWindCharge,
34    Camel,
35    CamelHusk,
36    Cat,
37    CaveSpider,
38    CherryBoat,
39    CherryChestBoat,
40    ChestMinecart,
41    Chicken,
42    Cod,
43    CommandBlockMinecart,
44    CopperGolem,
45    Cow,
46    Creaking,
47    Creeper,
48    DarkOakBoat,
49    DarkOakChestBoat,
50    Dolphin,
51    Donkey,
52    DragonFireball,
53    Drowned,
54    Egg,
55    ElderGuardian,
56    EndCrystal,
57    EnderDragon,
58    Enderman,
59    Endermite,
60    EnderPearl,
61    Evoker,
62    EvokerFangs,
63    ExperienceBottle,
64    ExperienceOrb,
65    EyeOfEnder,
66    FallingBlock,
67    Fireball,
68    FireworkRocket,
69    FishingBobber,
70    Fox,
71    Frog,
72    FurnaceMinecart,
73    Ghast,
74    Giant,
75    GlowItemFrame,
76    GlowSquid,
77    Goat,
78    Guardian,
79    HappyGhast,
80    Hoglin,
81    HopperMinecart,
82    Horse,
83    Husk,
84    Illusioner,
85    Interaction,
86    IronGolem,
87    Item,
88    ItemDisplay,
89    ItemFrame,
90    JungleBoat,
91    JungleChestBoat,
92    LeashKnot,
93    LightningBolt,
94    LingeringPotion,
95    Llama,
96    LlamaSpit,
97    MagmaCube,
98    MangroveBoat,
99    MangroveChestBoat,
100    Mannequin,
101    Marker,
102    Minecart,
103    Mooshroom,
104    Mule,
105    Nautilus,
106    OakBoat,
107    OakChestBoat,
108    Ocelot,
109    OminousItemSpawner,
110    Painting,
111    PaleOakBoat,
112    PaleOakChestBoat,
113    Panda,
114    Parched,
115    Parrot,
116    Phantom,
117    Pig,
118    Piglin,
119    PiglinBrute,
120    Pillager,
121    Player,
122    PolarBear,
123    Pufferfish,
124    Rabbit,
125    Ravager,
126    Salmon,
127    Sheep,
128    Shulker,
129    ShulkerBullet,
130    Silverfish,
131    Skeleton,
132    SkeletonHorse,
133    Slime,
134    SmallFireball,
135    Sniffer,
136    Snowball,
137    SnowGolem,
138    SpawnerMinecart,
139    SpectralArrow,
140    Spider,
141    SplashPotion,
142    SpruceBoat,
143    SpruceChestBoat,
144    Squid,
145    Stray,
146    Strider,
147    Tadpole,
148    TextDisplay,
149    Tnt,
150    TntMinecart,
151    TraderLlama,
152    Trident,
153    TropicalFish,
154    Turtle,
155    Vex,
156    Villager,
157    Vindicator,
158    WanderingTrader,
159    Warden,
160    WindCharge,
161    Witch,
162    Wither,
163    WitherSkeleton,
164    WitherSkull,
165    Wolf,
166    Zoglin,
167    Zombie,
168    ZombieHorse,
169    ZombieNautilus,
170    ZombieVillager,
171    ZombifiedPiglin,
172}
173
174impl EntityType {
175    /// Returns true if the given list is empty (allow-all) or contains this entity type.
176    pub fn matches_config(&self, allowed: &[Self]) -> bool {
177        allowed.is_empty() || allowed.contains(self)
178    }
179}
180
181/// Convert from the upstream API `EntityType` to our mirror type.
182///
183/// Uses the debug representation as the canonical name, falling back
184/// to `Zombie` if the upstream type emits something unexpected.
185impl From<pumpkin_plugin_api::world::EntityType> for EntityType {
186    fn from(value: pumpkin_plugin_api::world::EntityType) -> Self {
187        #[allow(unreachable_patterns)]
188        match value {
189            pumpkin_plugin_api::world::EntityType::AcaciaBoat => Self::AcaciaBoat,
190            pumpkin_plugin_api::world::EntityType::AcaciaChestBoat => Self::AcaciaChestBoat,
191            pumpkin_plugin_api::world::EntityType::Allay => Self::Allay,
192            pumpkin_plugin_api::world::EntityType::AreaEffectCloud => Self::AreaEffectCloud,
193            pumpkin_plugin_api::world::EntityType::Armadillo => Self::Armadillo,
194            pumpkin_plugin_api::world::EntityType::ArmorStand => Self::ArmorStand,
195            pumpkin_plugin_api::world::EntityType::Arrow => Self::Arrow,
196            pumpkin_plugin_api::world::EntityType::Axolotl => Self::Axolotl,
197            pumpkin_plugin_api::world::EntityType::BambooChestRaft => Self::BambooChestRaft,
198            pumpkin_plugin_api::world::EntityType::BambooRaft => Self::BambooRaft,
199            pumpkin_plugin_api::world::EntityType::Bat => Self::Bat,
200            pumpkin_plugin_api::world::EntityType::Bee => Self::Bee,
201            pumpkin_plugin_api::world::EntityType::BirchBoat => Self::BirchBoat,
202            pumpkin_plugin_api::world::EntityType::BirchChestBoat => Self::BirchChestBoat,
203            pumpkin_plugin_api::world::EntityType::Blaze => Self::Blaze,
204            pumpkin_plugin_api::world::EntityType::BlockDisplay => Self::BlockDisplay,
205            pumpkin_plugin_api::world::EntityType::Bogged => Self::Bogged,
206            pumpkin_plugin_api::world::EntityType::Breeze => Self::Breeze,
207            pumpkin_plugin_api::world::EntityType::BreezeWindCharge => Self::BreezeWindCharge,
208            pumpkin_plugin_api::world::EntityType::Camel => Self::Camel,
209            pumpkin_plugin_api::world::EntityType::CamelHusk => Self::CamelHusk,
210            pumpkin_plugin_api::world::EntityType::Cat => Self::Cat,
211            pumpkin_plugin_api::world::EntityType::CaveSpider => Self::CaveSpider,
212            pumpkin_plugin_api::world::EntityType::CherryBoat => Self::CherryBoat,
213            pumpkin_plugin_api::world::EntityType::CherryChestBoat => Self::CherryChestBoat,
214            pumpkin_plugin_api::world::EntityType::ChestMinecart => Self::ChestMinecart,
215            pumpkin_plugin_api::world::EntityType::Chicken => Self::Chicken,
216            pumpkin_plugin_api::world::EntityType::Cod => Self::Cod,
217            pumpkin_plugin_api::world::EntityType::CommandBlockMinecart => {
218                Self::CommandBlockMinecart
219            }
220            pumpkin_plugin_api::world::EntityType::CopperGolem => Self::CopperGolem,
221            pumpkin_plugin_api::world::EntityType::Cow => Self::Cow,
222            pumpkin_plugin_api::world::EntityType::Creaking => Self::Creaking,
223            pumpkin_plugin_api::world::EntityType::Creeper => Self::Creeper,
224            pumpkin_plugin_api::world::EntityType::DarkOakBoat => Self::DarkOakBoat,
225            pumpkin_plugin_api::world::EntityType::DarkOakChestBoat => Self::DarkOakChestBoat,
226            pumpkin_plugin_api::world::EntityType::Dolphin => Self::Dolphin,
227            pumpkin_plugin_api::world::EntityType::Donkey => Self::Donkey,
228            pumpkin_plugin_api::world::EntityType::DragonFireball => Self::DragonFireball,
229            pumpkin_plugin_api::world::EntityType::Drowned => Self::Drowned,
230            pumpkin_plugin_api::world::EntityType::Egg => Self::Egg,
231            pumpkin_plugin_api::world::EntityType::ElderGuardian => Self::ElderGuardian,
232            pumpkin_plugin_api::world::EntityType::EndCrystal => Self::EndCrystal,
233            pumpkin_plugin_api::world::EntityType::EnderDragon => Self::EnderDragon,
234            pumpkin_plugin_api::world::EntityType::Enderman => Self::Enderman,
235            pumpkin_plugin_api::world::EntityType::Endermite => Self::Endermite,
236            pumpkin_plugin_api::world::EntityType::EnderPearl => Self::EnderPearl,
237            pumpkin_plugin_api::world::EntityType::Evoker => Self::Evoker,
238            pumpkin_plugin_api::world::EntityType::EvokerFangs => Self::EvokerFangs,
239            pumpkin_plugin_api::world::EntityType::ExperienceBottle => Self::ExperienceBottle,
240            pumpkin_plugin_api::world::EntityType::ExperienceOrb => Self::ExperienceOrb,
241            pumpkin_plugin_api::world::EntityType::EyeOfEnder => Self::EyeOfEnder,
242            pumpkin_plugin_api::world::EntityType::FallingBlock => Self::FallingBlock,
243            pumpkin_plugin_api::world::EntityType::Fireball => Self::Fireball,
244            pumpkin_plugin_api::world::EntityType::FireworkRocket => Self::FireworkRocket,
245            pumpkin_plugin_api::world::EntityType::FishingBobber => Self::FishingBobber,
246            pumpkin_plugin_api::world::EntityType::Fox => Self::Fox,
247            pumpkin_plugin_api::world::EntityType::Frog => Self::Frog,
248            pumpkin_plugin_api::world::EntityType::FurnaceMinecart => Self::FurnaceMinecart,
249            pumpkin_plugin_api::world::EntityType::Ghast => Self::Ghast,
250            pumpkin_plugin_api::world::EntityType::Giant => Self::Giant,
251            pumpkin_plugin_api::world::EntityType::GlowItemFrame => Self::GlowItemFrame,
252            pumpkin_plugin_api::world::EntityType::GlowSquid => Self::GlowSquid,
253            pumpkin_plugin_api::world::EntityType::Goat => Self::Goat,
254            pumpkin_plugin_api::world::EntityType::Guardian => Self::Guardian,
255            pumpkin_plugin_api::world::EntityType::HappyGhast => Self::HappyGhast,
256            pumpkin_plugin_api::world::EntityType::Hoglin => Self::Hoglin,
257            pumpkin_plugin_api::world::EntityType::HopperMinecart => Self::HopperMinecart,
258            pumpkin_plugin_api::world::EntityType::Horse => Self::Horse,
259            pumpkin_plugin_api::world::EntityType::Husk => Self::Husk,
260            pumpkin_plugin_api::world::EntityType::Illusioner => Self::Illusioner,
261            pumpkin_plugin_api::world::EntityType::Interaction => Self::Interaction,
262            pumpkin_plugin_api::world::EntityType::IronGolem => Self::IronGolem,
263            pumpkin_plugin_api::world::EntityType::Item => Self::Item,
264            pumpkin_plugin_api::world::EntityType::ItemDisplay => Self::ItemDisplay,
265            pumpkin_plugin_api::world::EntityType::ItemFrame => Self::ItemFrame,
266            pumpkin_plugin_api::world::EntityType::JungleBoat => Self::JungleBoat,
267            pumpkin_plugin_api::world::EntityType::JungleChestBoat => Self::JungleChestBoat,
268            pumpkin_plugin_api::world::EntityType::LeashKnot => Self::LeashKnot,
269            pumpkin_plugin_api::world::EntityType::LightningBolt => Self::LightningBolt,
270            pumpkin_plugin_api::world::EntityType::LingeringPotion => Self::LingeringPotion,
271            pumpkin_plugin_api::world::EntityType::Llama => Self::Llama,
272            pumpkin_plugin_api::world::EntityType::LlamaSpit => Self::LlamaSpit,
273            pumpkin_plugin_api::world::EntityType::MagmaCube => Self::MagmaCube,
274            pumpkin_plugin_api::world::EntityType::MangroveBoat => Self::MangroveBoat,
275            pumpkin_plugin_api::world::EntityType::MangroveChestBoat => Self::MangroveChestBoat,
276            pumpkin_plugin_api::world::EntityType::Mannequin => Self::Mannequin,
277            pumpkin_plugin_api::world::EntityType::Marker => Self::Marker,
278            pumpkin_plugin_api::world::EntityType::Minecart => Self::Minecart,
279            pumpkin_plugin_api::world::EntityType::Mooshroom => Self::Mooshroom,
280            pumpkin_plugin_api::world::EntityType::Mule => Self::Mule,
281            pumpkin_plugin_api::world::EntityType::Nautilus => Self::Nautilus,
282            pumpkin_plugin_api::world::EntityType::OakBoat => Self::OakBoat,
283            pumpkin_plugin_api::world::EntityType::OakChestBoat => Self::OakChestBoat,
284            pumpkin_plugin_api::world::EntityType::Ocelot => Self::Ocelot,
285            pumpkin_plugin_api::world::EntityType::OminousItemSpawner => Self::OminousItemSpawner,
286            pumpkin_plugin_api::world::EntityType::Painting => Self::Painting,
287            pumpkin_plugin_api::world::EntityType::PaleOakBoat => Self::PaleOakBoat,
288            pumpkin_plugin_api::world::EntityType::PaleOakChestBoat => Self::PaleOakChestBoat,
289            pumpkin_plugin_api::world::EntityType::Panda => Self::Panda,
290            pumpkin_plugin_api::world::EntityType::Parched => Self::Parched,
291            pumpkin_plugin_api::world::EntityType::Parrot => Self::Parrot,
292            pumpkin_plugin_api::world::EntityType::Phantom => Self::Phantom,
293            pumpkin_plugin_api::world::EntityType::Pig => Self::Pig,
294            pumpkin_plugin_api::world::EntityType::Piglin => Self::Piglin,
295            pumpkin_plugin_api::world::EntityType::PiglinBrute => Self::PiglinBrute,
296            pumpkin_plugin_api::world::EntityType::Pillager => Self::Pillager,
297            pumpkin_plugin_api::world::EntityType::Player => Self::Player,
298            pumpkin_plugin_api::world::EntityType::PolarBear => Self::PolarBear,
299            pumpkin_plugin_api::world::EntityType::Pufferfish => Self::Pufferfish,
300            pumpkin_plugin_api::world::EntityType::Rabbit => Self::Rabbit,
301            pumpkin_plugin_api::world::EntityType::Ravager => Self::Ravager,
302            pumpkin_plugin_api::world::EntityType::Salmon => Self::Salmon,
303            pumpkin_plugin_api::world::EntityType::Sheep => Self::Sheep,
304            pumpkin_plugin_api::world::EntityType::Shulker => Self::Shulker,
305            pumpkin_plugin_api::world::EntityType::ShulkerBullet => Self::ShulkerBullet,
306            pumpkin_plugin_api::world::EntityType::Silverfish => Self::Silverfish,
307            pumpkin_plugin_api::world::EntityType::Skeleton => Self::Skeleton,
308            pumpkin_plugin_api::world::EntityType::SkeletonHorse => Self::SkeletonHorse,
309            pumpkin_plugin_api::world::EntityType::Slime => Self::Slime,
310            pumpkin_plugin_api::world::EntityType::SmallFireball => Self::SmallFireball,
311            pumpkin_plugin_api::world::EntityType::Sniffer => Self::Sniffer,
312            pumpkin_plugin_api::world::EntityType::Snowball => Self::Snowball,
313            pumpkin_plugin_api::world::EntityType::SnowGolem => Self::SnowGolem,
314            pumpkin_plugin_api::world::EntityType::SpawnerMinecart => Self::SpawnerMinecart,
315            pumpkin_plugin_api::world::EntityType::SpectralArrow => Self::SpectralArrow,
316            pumpkin_plugin_api::world::EntityType::Spider => Self::Spider,
317            pumpkin_plugin_api::world::EntityType::SplashPotion => Self::SplashPotion,
318            pumpkin_plugin_api::world::EntityType::SpruceBoat => Self::SpruceBoat,
319            pumpkin_plugin_api::world::EntityType::SpruceChestBoat => Self::SpruceChestBoat,
320            pumpkin_plugin_api::world::EntityType::Squid => Self::Squid,
321            pumpkin_plugin_api::world::EntityType::Stray => Self::Stray,
322            pumpkin_plugin_api::world::EntityType::Strider => Self::Strider,
323            pumpkin_plugin_api::world::EntityType::Tadpole => Self::Tadpole,
324            pumpkin_plugin_api::world::EntityType::TextDisplay => Self::TextDisplay,
325            pumpkin_plugin_api::world::EntityType::Tnt => Self::Tnt,
326            pumpkin_plugin_api::world::EntityType::TntMinecart => Self::TntMinecart,
327            pumpkin_plugin_api::world::EntityType::TraderLlama => Self::TraderLlama,
328            pumpkin_plugin_api::world::EntityType::Trident => Self::Trident,
329            pumpkin_plugin_api::world::EntityType::TropicalFish => Self::TropicalFish,
330            pumpkin_plugin_api::world::EntityType::Turtle => Self::Turtle,
331            pumpkin_plugin_api::world::EntityType::Vex => Self::Vex,
332            pumpkin_plugin_api::world::EntityType::Villager => Self::Villager,
333            pumpkin_plugin_api::world::EntityType::Vindicator => Self::Vindicator,
334            pumpkin_plugin_api::world::EntityType::WanderingTrader => Self::WanderingTrader,
335            pumpkin_plugin_api::world::EntityType::Warden => Self::Warden,
336            pumpkin_plugin_api::world::EntityType::WindCharge => Self::WindCharge,
337            pumpkin_plugin_api::world::EntityType::Witch => Self::Witch,
338            pumpkin_plugin_api::world::EntityType::Wither => Self::Wither,
339            pumpkin_plugin_api::world::EntityType::WitherSkeleton => Self::WitherSkeleton,
340            pumpkin_plugin_api::world::EntityType::WitherSkull => Self::WitherSkull,
341            pumpkin_plugin_api::world::EntityType::Wolf => Self::Wolf,
342            pumpkin_plugin_api::world::EntityType::Zoglin => Self::Zoglin,
343            pumpkin_plugin_api::world::EntityType::Zombie => Self::Zombie,
344            pumpkin_plugin_api::world::EntityType::ZombieHorse => Self::ZombieHorse,
345            pumpkin_plugin_api::world::EntityType::ZombieNautilus => Self::ZombieNautilus,
346            pumpkin_plugin_api::world::EntityType::ZombieVillager => Self::ZombieVillager,
347            pumpkin_plugin_api::world::EntityType::ZombifiedPiglin => Self::ZombifiedPiglin,
348            _ => Self::Zombie,
349        }
350    }
351}
352
353impl fmt::Display for EntityType {
354    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
355        write!(f, "{:?}", self)
356    }
357}