--- a/net/minecraft/world/entity/EntityType.java
+++ b/net/minecraft/world/entity/EntityType.java
@@ -168,671 +168,145 @@
 import net.minecraft.world.phys.Vec3;
 import net.minecraft.world.phys.shapes.Shapes;
 import net.minecraft.world.phys.shapes.VoxelShape;
+import org.bukkit.event.entity.CreatureSpawnEvent;
 import org.slf4j.Logger;
 
 public class EntityType<T extends Entity> implements FeatureElement, EntityTypeTest<Entity, T> {
+
     private static final Logger LOGGER = LogUtils.getLogger();
-    private final Holder.Reference<EntityType<?>> builtInRegistryHolder = BuiltInRegistries.ENTITY_TYPE.createIntrusiveHolder(this);
+    private final Holder.Reference<EntityType<?>> builtInRegistryHolder;
     private static final float MAGIC_HORSE_WIDTH = 1.3964844F;
     private static final int DISPLAY_TRACKING_RANGE = 10;
-    public static final EntityType<Allay> ALLAY = register(
-        "allay",
-        EntityType.Builder.of(Allay::new, MobCategory.CREATURE)
-            .sized(0.35F, 0.6F)
-            .eyeHeight(0.36F)
-            .ridingOffset(0.04F)
-            .clientTrackingRange(8)
-            .updateInterval(2)
-    );
-    public static final EntityType<AreaEffectCloud> AREA_EFFECT_CLOUD = register(
-        "area_effect_cloud",
-        EntityType.Builder.<AreaEffectCloud>of(AreaEffectCloud::new, MobCategory.MISC)
-            .fireImmune()
-            .sized(6.0F, 0.5F)
-            .clientTrackingRange(10)
-            .updateInterval(Integer.MAX_VALUE)
-    );
-    public static final EntityType<Armadillo> ARMADILLO = register(
-        "armadillo", EntityType.Builder.of(Armadillo::new, MobCategory.CREATURE).sized(0.7F, 0.65F).eyeHeight(0.26F).clientTrackingRange(10)
-    );
-    public static final EntityType<ArmorStand> ARMOR_STAND = register(
-        "armor_stand", EntityType.Builder.<ArmorStand>of(ArmorStand::new, MobCategory.MISC).sized(0.5F, 1.975F).eyeHeight(1.7775F).clientTrackingRange(10)
-    );
-    public static final EntityType<Arrow> ARROW = register(
-        "arrow", EntityType.Builder.<Arrow>of(Arrow::new, MobCategory.MISC).sized(0.5F, 0.5F).eyeHeight(0.13F).clientTrackingRange(4).updateInterval(20)
-    );
-    public static final EntityType<Axolotl> AXOLOTL = register(
-        "axolotl", EntityType.Builder.of(Axolotl::new, MobCategory.AXOLOTLS).sized(0.75F, 0.42F).eyeHeight(0.2751F).clientTrackingRange(10)
-    );
-    public static final EntityType<Bat> BAT = register(
-        "bat", EntityType.Builder.of(Bat::new, MobCategory.AMBIENT).sized(0.5F, 0.9F).eyeHeight(0.45F).clientTrackingRange(5)
-    );
-    public static final EntityType<Bee> BEE = register(
-        "bee", EntityType.Builder.of(Bee::new, MobCategory.CREATURE).sized(0.7F, 0.6F).eyeHeight(0.3F).clientTrackingRange(8)
-    );
-    public static final EntityType<Blaze> BLAZE = register(
-        "blaze", EntityType.Builder.of(Blaze::new, MobCategory.MONSTER).fireImmune().sized(0.6F, 1.8F).clientTrackingRange(8)
-    );
-    public static final EntityType<Display.BlockDisplay> BLOCK_DISPLAY = register(
-        "block_display", EntityType.Builder.of(Display.BlockDisplay::new, MobCategory.MISC).sized(0.0F, 0.0F).clientTrackingRange(10).updateInterval(1)
-    );
-    public static final EntityType<Boat> BOAT = register(
-        "boat", EntityType.Builder.<Boat>of(Boat::new, MobCategory.MISC).sized(1.375F, 0.5625F).eyeHeight(0.5625F).clientTrackingRange(10)
-    );
-    public static final EntityType<Bogged> BOGGED = register(
-        "bogged",
-        EntityType.Builder.of(Bogged::new, MobCategory.MONSTER)
-            .sized(0.6F, 1.99F)
-            .eyeHeight(1.74F)
-            .ridingOffset(-0.7F)
-            .clientTrackingRange(8)
-            .requiredFeatures(FeatureFlags.UPDATE_1_21)
-    );
-    public static final EntityType<Breeze> BREEZE = register(
-        "breeze",
-        EntityType.Builder.of(Breeze::new, MobCategory.MONSTER)
-            .sized(0.6F, 1.77F)
-            .eyeHeight(1.3452F)
-            .clientTrackingRange(10)
-            .requiredFeatures(FeatureFlags.UPDATE_1_21)
-    );
-    public static final EntityType<BreezeWindCharge> BREEZE_WIND_CHARGE = register(
-        "breeze_wind_charge",
-        EntityType.Builder.<BreezeWindCharge>of(BreezeWindCharge::new, MobCategory.MISC)
-            .sized(0.3125F, 0.3125F)
-            .eyeHeight(0.0F)
-            .clientTrackingRange(4)
-            .updateInterval(10)
-            .requiredFeatures(FeatureFlags.UPDATE_1_21)
-    );
-    public static final EntityType<Camel> CAMEL = register(
-        "camel", EntityType.Builder.of(Camel::new, MobCategory.CREATURE).sized(1.7F, 2.375F).eyeHeight(2.275F).clientTrackingRange(10)
-    );
-    public static final EntityType<Cat> CAT = register(
-        "cat", EntityType.Builder.of(Cat::new, MobCategory.CREATURE).sized(0.6F, 0.7F).eyeHeight(0.35F).passengerAttachments(0.5125F).clientTrackingRange(8)
-    );
-    public static final EntityType<CaveSpider> CAVE_SPIDER = register(
-        "cave_spider", EntityType.Builder.of(CaveSpider::new, MobCategory.MONSTER).sized(0.7F, 0.5F).eyeHeight(0.45F).clientTrackingRange(8)
-    );
-    public static final EntityType<ChestBoat> CHEST_BOAT = register(
-        "chest_boat", EntityType.Builder.<ChestBoat>of(ChestBoat::new, MobCategory.MISC).sized(1.375F, 0.5625F).eyeHeight(0.5625F).clientTrackingRange(10)
-    );
-    public static final EntityType<MinecartChest> CHEST_MINECART = register(
-        "chest_minecart",
-        EntityType.Builder.<MinecartChest>of(MinecartChest::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8)
-    );
-    public static final EntityType<Chicken> CHICKEN = register(
-        "chicken",
-        EntityType.Builder.of(Chicken::new, MobCategory.CREATURE)
-            .sized(0.4F, 0.7F)
-            .eyeHeight(0.644F)
-            .passengerAttachments(new Vec3(0.0, 0.7, -0.1))
-            .clientTrackingRange(10)
-    );
-    public static final EntityType<Cod> COD = register(
-        "cod", EntityType.Builder.of(Cod::new, MobCategory.WATER_AMBIENT).sized(0.5F, 0.3F).eyeHeight(0.195F).clientTrackingRange(4)
-    );
-    public static final EntityType<MinecartCommandBlock> COMMAND_BLOCK_MINECART = register(
-        "command_block_minecart",
-        EntityType.Builder.<MinecartCommandBlock>of(MinecartCommandBlock::new, MobCategory.MISC)
-            .sized(0.98F, 0.7F)
-            .passengerAttachments(0.1875F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<Cow> COW = register(
-        "cow", EntityType.Builder.of(Cow::new, MobCategory.CREATURE).sized(0.9F, 1.4F).eyeHeight(1.3F).passengerAttachments(1.36875F).clientTrackingRange(10)
-    );
-    public static final EntityType<Creeper> CREEPER = register(
-        "creeper", EntityType.Builder.of(Creeper::new, MobCategory.MONSTER).sized(0.6F, 1.7F).clientTrackingRange(8)
-    );
-    public static final EntityType<Dolphin> DOLPHIN = register(
-        "dolphin", EntityType.Builder.of(Dolphin::new, MobCategory.WATER_CREATURE).sized(0.9F, 0.6F).eyeHeight(0.3F)
-    );
-    public static final EntityType<Donkey> DONKEY = register(
-        "donkey",
-        EntityType.Builder.of(Donkey::new, MobCategory.CREATURE)
-            .sized(1.3964844F, 1.5F)
-            .eyeHeight(1.425F)
-            .passengerAttachments(1.1125F)
-            .clientTrackingRange(10)
-    );
-    public static final EntityType<DragonFireball> DRAGON_FIREBALL = register(
-        "dragon_fireball",
-        EntityType.Builder.<DragonFireball>of(DragonFireball::new, MobCategory.MISC).sized(1.0F, 1.0F).clientTrackingRange(4).updateInterval(10)
-    );
-    public static final EntityType<Drowned> DROWNED = register(
-        "drowned",
-        EntityType.Builder.of(Drowned::new, MobCategory.MONSTER)
-            .sized(0.6F, 1.95F)
-            .eyeHeight(1.74F)
-            .passengerAttachments(2.0125F)
-            .ridingOffset(-0.7F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<ThrownEgg> EGG = register(
-        "egg", EntityType.Builder.<ThrownEgg>of(ThrownEgg::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10)
-    );
-    public static final EntityType<ElderGuardian> ELDER_GUARDIAN = register(
-        "elder_guardian",
-        EntityType.Builder.of(ElderGuardian::new, MobCategory.MONSTER)
-            .sized(1.9975F, 1.9975F)
-            .eyeHeight(0.99875F)
-            .passengerAttachments(2.350625F)
-            .clientTrackingRange(10)
-    );
-    public static final EntityType<EndCrystal> END_CRYSTAL = register(
-        "end_crystal",
-        EntityType.Builder.<EndCrystal>of(EndCrystal::new, MobCategory.MISC).sized(2.0F, 2.0F).clientTrackingRange(16).updateInterval(Integer.MAX_VALUE)
-    );
-    public static final EntityType<EnderDragon> ENDER_DRAGON = register(
-        "ender_dragon",
-        EntityType.Builder.of(EnderDragon::new, MobCategory.MONSTER).fireImmune().sized(16.0F, 8.0F).passengerAttachments(3.0F).clientTrackingRange(10)
-    );
-    public static final EntityType<ThrownEnderpearl> ENDER_PEARL = register(
-        "ender_pearl",
-        EntityType.Builder.<ThrownEnderpearl>of(ThrownEnderpearl::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10)
-    );
-    public static final EntityType<EnderMan> ENDERMAN = register(
-        "enderman",
-        EntityType.Builder.of(EnderMan::new, MobCategory.MONSTER).sized(0.6F, 2.9F).eyeHeight(2.55F).passengerAttachments(2.80625F).clientTrackingRange(8)
-    );
-    public static final EntityType<Endermite> ENDERMITE = register(
-        "endermite",
-        EntityType.Builder.of(Endermite::new, MobCategory.MONSTER).sized(0.4F, 0.3F).eyeHeight(0.13F).passengerAttachments(0.2375F).clientTrackingRange(8)
-    );
-    public static final EntityType<Evoker> EVOKER = register(
-        "evoker",
-        EntityType.Builder.of(Evoker::new, MobCategory.MONSTER).sized(0.6F, 1.95F).passengerAttachments(2.0F).ridingOffset(-0.6F).clientTrackingRange(8)
-    );
-    public static final EntityType<EvokerFangs> EVOKER_FANGS = register(
-        "evoker_fangs", EntityType.Builder.<EvokerFangs>of(EvokerFangs::new, MobCategory.MISC).sized(0.5F, 0.8F).clientTrackingRange(6).updateInterval(2)
-    );
-    public static final EntityType<ThrownExperienceBottle> EXPERIENCE_BOTTLE = register(
-        "experience_bottle",
-        EntityType.Builder.<ThrownExperienceBottle>of(ThrownExperienceBottle::new, MobCategory.MISC)
-            .sized(0.25F, 0.25F)
-            .clientTrackingRange(4)
-            .updateInterval(10)
-    );
-    public static final EntityType<ExperienceOrb> EXPERIENCE_ORB = register(
-        "experience_orb",
-        EntityType.Builder.<ExperienceOrb>of(ExperienceOrb::new, MobCategory.MISC).sized(0.5F, 0.5F).clientTrackingRange(6).updateInterval(20)
-    );
-    public static final EntityType<EyeOfEnder> EYE_OF_ENDER = register(
-        "eye_of_ender", EntityType.Builder.<EyeOfEnder>of(EyeOfEnder::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(4)
-    );
-    public static final EntityType<FallingBlockEntity> FALLING_BLOCK = register(
-        "falling_block",
-        EntityType.Builder.<FallingBlockEntity>of(FallingBlockEntity::new, MobCategory.MISC).sized(0.98F, 0.98F).clientTrackingRange(10).updateInterval(20)
-    );
-    public static final EntityType<FireworkRocketEntity> FIREWORK_ROCKET = register(
-        "firework_rocket",
-        EntityType.Builder.<FireworkRocketEntity>of(FireworkRocketEntity::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10)
-    );
-    public static final EntityType<Fox> FOX = register(
-        "fox",
-        EntityType.Builder.of(Fox::new, MobCategory.CREATURE)
-            .sized(0.6F, 0.7F)
-            .eyeHeight(0.4F)
-            .passengerAttachments(new Vec3(0.0, 0.6375, -0.25))
-            .clientTrackingRange(8)
-            .immuneTo(Blocks.SWEET_BERRY_BUSH)
-    );
-    public static final EntityType<Frog> FROG = register(
-        "frog",
-        EntityType.Builder.of(Frog::new, MobCategory.CREATURE).sized(0.5F, 0.5F).passengerAttachments(new Vec3(0.0, 0.375, -0.25)).clientTrackingRange(10)
-    );
-    public static final EntityType<MinecartFurnace> FURNACE_MINECART = register(
-        "furnace_minecart",
-        EntityType.Builder.<MinecartFurnace>of(MinecartFurnace::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8)
-    );
-    public static final EntityType<Ghast> GHAST = register(
-        "ghast",
-        EntityType.Builder.of(Ghast::new, MobCategory.MONSTER)
-            .fireImmune()
-            .sized(4.0F, 4.0F)
-            .eyeHeight(2.6F)
-            .passengerAttachments(4.0625F)
-            .ridingOffset(0.5F)
-            .clientTrackingRange(10)
-    );
-    public static final EntityType<Giant> GIANT = register(
-        "giant", EntityType.Builder.of(Giant::new, MobCategory.MONSTER).sized(3.6F, 12.0F).eyeHeight(10.44F).ridingOffset(-3.75F).clientTrackingRange(10)
-    );
-    public static final EntityType<GlowItemFrame> GLOW_ITEM_FRAME = register(
-        "glow_item_frame",
-        EntityType.Builder.<GlowItemFrame>of(GlowItemFrame::new, MobCategory.MISC)
-            .sized(0.5F, 0.5F)
-            .eyeHeight(0.0F)
-            .clientTrackingRange(10)
-            .updateInterval(Integer.MAX_VALUE)
-    );
-    public static final EntityType<GlowSquid> GLOW_SQUID = register(
-        "glow_squid", EntityType.Builder.of(GlowSquid::new, MobCategory.UNDERGROUND_WATER_CREATURE).sized(0.8F, 0.8F).eyeHeight(0.4F).clientTrackingRange(10)
-    );
-    public static final EntityType<Goat> GOAT = register(
-        "goat", EntityType.Builder.of(Goat::new, MobCategory.CREATURE).sized(0.9F, 1.3F).passengerAttachments(1.1125F).clientTrackingRange(10)
-    );
-    public static final EntityType<Guardian> GUARDIAN = register(
-        "guardian",
-        EntityType.Builder.of(Guardian::new, MobCategory.MONSTER).sized(0.85F, 0.85F).eyeHeight(0.425F).passengerAttachments(0.975F).clientTrackingRange(8)
-    );
-    public static final EntityType<Hoglin> HOGLIN = register(
-        "hoglin", EntityType.Builder.of(Hoglin::new, MobCategory.MONSTER).sized(1.3964844F, 1.4F).passengerAttachments(1.49375F).clientTrackingRange(8)
-    );
-    public static final EntityType<MinecartHopper> HOPPER_MINECART = register(
-        "hopper_minecart",
-        EntityType.Builder.<MinecartHopper>of(MinecartHopper::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8)
-    );
-    public static final EntityType<Horse> HORSE = register(
-        "horse",
-        EntityType.Builder.of(Horse::new, MobCategory.CREATURE).sized(1.3964844F, 1.6F).eyeHeight(1.52F).passengerAttachments(1.44375F).clientTrackingRange(10)
-    );
-    public static final EntityType<Husk> HUSK = register(
-        "husk",
-        EntityType.Builder.of(Husk::new, MobCategory.MONSTER)
-            .sized(0.6F, 1.95F)
-            .eyeHeight(1.74F)
-            .passengerAttachments(2.075F)
-            .ridingOffset(-0.7F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<Illusioner> ILLUSIONER = register(
-        "illusioner",
-        EntityType.Builder.of(Illusioner::new, MobCategory.MONSTER).sized(0.6F, 1.95F).passengerAttachments(2.0F).ridingOffset(-0.6F).clientTrackingRange(8)
-    );
-    public static final EntityType<Interaction> INTERACTION = register(
-        "interaction", EntityType.Builder.of(Interaction::new, MobCategory.MISC).sized(0.0F, 0.0F).clientTrackingRange(10)
-    );
-    public static final EntityType<IronGolem> IRON_GOLEM = register(
-        "iron_golem", EntityType.Builder.of(IronGolem::new, MobCategory.MISC).sized(1.4F, 2.7F).clientTrackingRange(10)
-    );
-    public static final EntityType<ItemEntity> ITEM = register(
-        "item",
-        EntityType.Builder.<ItemEntity>of(ItemEntity::new, MobCategory.MISC).sized(0.25F, 0.25F).eyeHeight(0.2125F).clientTrackingRange(6).updateInterval(20)
-    );
-    public static final EntityType<Display.ItemDisplay> ITEM_DISPLAY = register(
-        "item_display", EntityType.Builder.of(Display.ItemDisplay::new, MobCategory.MISC).sized(0.0F, 0.0F).clientTrackingRange(10).updateInterval(1)
-    );
-    public static final EntityType<ItemFrame> ITEM_FRAME = register(
-        "item_frame",
-        EntityType.Builder.<ItemFrame>of(ItemFrame::new, MobCategory.MISC)
-            .sized(0.5F, 0.5F)
-            .eyeHeight(0.0F)
-            .clientTrackingRange(10)
-            .updateInterval(Integer.MAX_VALUE)
-    );
-    public static final EntityType<OminousItemSpawner> OMINOUS_ITEM_SPAWNER = register(
-        "ominous_item_spawner",
-        EntityType.Builder.of(OminousItemSpawner::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(8).requiredFeatures(FeatureFlags.UPDATE_1_21)
-    );
-    public static final EntityType<LargeFireball> FIREBALL = register(
-        "fireball", EntityType.Builder.<LargeFireball>of(LargeFireball::new, MobCategory.MISC).sized(1.0F, 1.0F).clientTrackingRange(4).updateInterval(10)
-    );
-    public static final EntityType<LeashFenceKnotEntity> LEASH_KNOT = register(
-        "leash_knot",
-        EntityType.Builder.<LeashFenceKnotEntity>of(LeashFenceKnotEntity::new, MobCategory.MISC)
-            .noSave()
-            .sized(0.375F, 0.5F)
-            .eyeHeight(0.0625F)
-            .clientTrackingRange(10)
-            .updateInterval(Integer.MAX_VALUE)
-    );
-    public static final EntityType<LightningBolt> LIGHTNING_BOLT = register(
-        "lightning_bolt",
-        EntityType.Builder.of(LightningBolt::new, MobCategory.MISC).noSave().sized(0.0F, 0.0F).clientTrackingRange(16).updateInterval(Integer.MAX_VALUE)
-    );
-    public static final EntityType<Llama> LLAMA = register(
-        "llama",
-        EntityType.Builder.of(Llama::new, MobCategory.CREATURE)
-            .sized(0.9F, 1.87F)
-            .eyeHeight(1.7765F)
-            .passengerAttachments(new Vec3(0.0, 1.37, -0.3))
-            .clientTrackingRange(10)
-    );
-    public static final EntityType<LlamaSpit> LLAMA_SPIT = register(
-        "llama_spit", EntityType.Builder.<LlamaSpit>of(LlamaSpit::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10)
-    );
-    public static final EntityType<MagmaCube> MAGMA_CUBE = register(
-        "magma_cube",
-        EntityType.Builder.of(MagmaCube::new, MobCategory.MONSTER)
-            .fireImmune()
-            .sized(0.52F, 0.52F)
-            .eyeHeight(0.325F)
-            .spawnDimensionsScale(4.0F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<Marker> MARKER = register(
-        "marker", EntityType.Builder.of(Marker::new, MobCategory.MISC).sized(0.0F, 0.0F).clientTrackingRange(0)
-    );
-    public static final EntityType<Minecart> MINECART = register(
-        "minecart", EntityType.Builder.<Minecart>of(Minecart::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8)
-    );
-    public static final EntityType<MushroomCow> MOOSHROOM = register(
-        "mooshroom",
-        EntityType.Builder.of(MushroomCow::new, MobCategory.CREATURE).sized(0.9F, 1.4F).eyeHeight(1.3F).passengerAttachments(1.36875F).clientTrackingRange(10)
-    );
-    public static final EntityType<Mule> MULE = register(
-        "mule",
-        EntityType.Builder.of(Mule::new, MobCategory.CREATURE).sized(1.3964844F, 1.6F).eyeHeight(1.52F).passengerAttachments(1.2125F).clientTrackingRange(8)
-    );
-    public static final EntityType<Ocelot> OCELOT = register(
-        "ocelot", EntityType.Builder.of(Ocelot::new, MobCategory.CREATURE).sized(0.6F, 0.7F).passengerAttachments(0.6375F).clientTrackingRange(10)
-    );
-    public static final EntityType<Painting> PAINTING = register(
-        "painting",
-        EntityType.Builder.<Painting>of(Painting::new, MobCategory.MISC).sized(0.5F, 0.5F).clientTrackingRange(10).updateInterval(Integer.MAX_VALUE)
-    );
-    public static final EntityType<Panda> PANDA = register(
-        "panda", EntityType.Builder.of(Panda::new, MobCategory.CREATURE).sized(1.3F, 1.25F).clientTrackingRange(10)
-    );
-    public static final EntityType<Parrot> PARROT = register(
-        "parrot",
-        EntityType.Builder.of(Parrot::new, MobCategory.CREATURE).sized(0.5F, 0.9F).eyeHeight(0.54F).passengerAttachments(0.4625F).clientTrackingRange(8)
-    );
-    public static final EntityType<Phantom> PHANTOM = register(
-        "phantom",
-        EntityType.Builder.of(Phantom::new, MobCategory.MONSTER)
-            .sized(0.9F, 0.5F)
-            .eyeHeight(0.175F)
-            .passengerAttachments(0.3375F)
-            .ridingOffset(-0.125F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<Pig> PIG = register(
-        "pig", EntityType.Builder.of(Pig::new, MobCategory.CREATURE).sized(0.9F, 0.9F).passengerAttachments(0.86875F).clientTrackingRange(10)
-    );
-    public static final EntityType<Piglin> PIGLIN = register(
-        "piglin",
-        EntityType.Builder.of(Piglin::new, MobCategory.MONSTER)
-            .sized(0.6F, 1.95F)
-            .eyeHeight(1.79F)
-            .passengerAttachments(2.0125F)
-            .ridingOffset(-0.7F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<PiglinBrute> PIGLIN_BRUTE = register(
-        "piglin_brute",
-        EntityType.Builder.of(PiglinBrute::new, MobCategory.MONSTER)
-            .sized(0.6F, 1.95F)
-            .eyeHeight(1.79F)
-            .passengerAttachments(2.0125F)
-            .ridingOffset(-0.7F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<Pillager> PILLAGER = register(
-        "pillager",
-        EntityType.Builder.of(Pillager::new, MobCategory.MONSTER)
-            .canSpawnFarFromPlayer()
-            .sized(0.6F, 1.95F)
-            .passengerAttachments(2.0F)
-            .ridingOffset(-0.6F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<PolarBear> POLAR_BEAR = register(
-        "polar_bear", EntityType.Builder.of(PolarBear::new, MobCategory.CREATURE).immuneTo(Blocks.POWDER_SNOW).sized(1.4F, 1.4F).clientTrackingRange(10)
-    );
-    public static final EntityType<ThrownPotion> POTION = register(
-        "potion", EntityType.Builder.<ThrownPotion>of(ThrownPotion::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10)
-    );
-    public static final EntityType<Pufferfish> PUFFERFISH = register(
-        "pufferfish", EntityType.Builder.of(Pufferfish::new, MobCategory.WATER_AMBIENT).sized(0.7F, 0.7F).eyeHeight(0.455F).clientTrackingRange(4)
-    );
-    public static final EntityType<Rabbit> RABBIT = register(
-        "rabbit", EntityType.Builder.of(Rabbit::new, MobCategory.CREATURE).sized(0.4F, 0.5F).clientTrackingRange(8)
-    );
-    public static final EntityType<Ravager> RAVAGER = register(
-        "ravager",
-        EntityType.Builder.of(Ravager::new, MobCategory.MONSTER)
-            .sized(1.95F, 2.2F)
-            .passengerAttachments(new Vec3(0.0, 2.2625, -0.0625))
-            .clientTrackingRange(10)
-    );
-    public static final EntityType<Salmon> SALMON = register(
-        "salmon", EntityType.Builder.of(Salmon::new, MobCategory.WATER_AMBIENT).sized(0.7F, 0.4F).eyeHeight(0.26F).clientTrackingRange(4)
-    );
-    public static final EntityType<Sheep> SHEEP = register(
-        "sheep",
-        EntityType.Builder.of(Sheep::new, MobCategory.CREATURE).sized(0.9F, 1.3F).eyeHeight(1.235F).passengerAttachments(1.2375F).clientTrackingRange(10)
-    );
-    public static final EntityType<Shulker> SHULKER = register(
-        "shulker",
-        EntityType.Builder.of(Shulker::new, MobCategory.MONSTER).fireImmune().canSpawnFarFromPlayer().sized(1.0F, 1.0F).eyeHeight(0.5F).clientTrackingRange(10)
-    );
-    public static final EntityType<ShulkerBullet> SHULKER_BULLET = register(
-        "shulker_bullet", EntityType.Builder.<ShulkerBullet>of(ShulkerBullet::new, MobCategory.MISC).sized(0.3125F, 0.3125F).clientTrackingRange(8)
-    );
-    public static final EntityType<Silverfish> SILVERFISH = register(
-        "silverfish",
-        EntityType.Builder.of(Silverfish::new, MobCategory.MONSTER).sized(0.4F, 0.3F).eyeHeight(0.13F).passengerAttachments(0.2375F).clientTrackingRange(8)
-    );
-    public static final EntityType<Skeleton> SKELETON = register(
-        "skeleton", EntityType.Builder.of(Skeleton::new, MobCategory.MONSTER).sized(0.6F, 1.99F).eyeHeight(1.74F).ridingOffset(-0.7F).clientTrackingRange(8)
-    );
-    public static final EntityType<SkeletonHorse> SKELETON_HORSE = register(
-        "skeleton_horse",
-        EntityType.Builder.of(SkeletonHorse::new, MobCategory.CREATURE)
-            .sized(1.3964844F, 1.6F)
-            .eyeHeight(1.52F)
-            .passengerAttachments(1.31875F)
-            .clientTrackingRange(10)
-    );
-    public static final EntityType<Slime> SLIME = register(
-        "slime",
-        EntityType.Builder.of(Slime::new, MobCategory.MONSTER).sized(0.52F, 0.52F).eyeHeight(0.325F).spawnDimensionsScale(4.0F).clientTrackingRange(10)
-    );
-    public static final EntityType<SmallFireball> SMALL_FIREBALL = register(
-        "small_fireball",
-        EntityType.Builder.<SmallFireball>of(SmallFireball::new, MobCategory.MISC).sized(0.3125F, 0.3125F).clientTrackingRange(4).updateInterval(10)
-    );
-    public static final EntityType<Sniffer> SNIFFER = register(
-        "sniffer",
-        EntityType.Builder.of(Sniffer::new, MobCategory.CREATURE)
-            .sized(1.9F, 1.75F)
-            .eyeHeight(1.05F)
-            .passengerAttachments(2.09375F)
-            .nameTagOffset(2.05F)
-            .clientTrackingRange(10)
-    );
-    public static final EntityType<SnowGolem> SNOW_GOLEM = register(
-        "snow_golem",
-        EntityType.Builder.of(SnowGolem::new, MobCategory.MISC).immuneTo(Blocks.POWDER_SNOW).sized(0.7F, 1.9F).eyeHeight(1.7F).clientTrackingRange(8)
-    );
-    public static final EntityType<Snowball> SNOWBALL = register(
-        "snowball", EntityType.Builder.<Snowball>of(Snowball::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10)
-    );
-    public static final EntityType<MinecartSpawner> SPAWNER_MINECART = register(
-        "spawner_minecart",
-        EntityType.Builder.<MinecartSpawner>of(MinecartSpawner::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8)
-    );
-    public static final EntityType<SpectralArrow> SPECTRAL_ARROW = register(
-        "spectral_arrow",
-        EntityType.Builder.<SpectralArrow>of(SpectralArrow::new, MobCategory.MISC).sized(0.5F, 0.5F).eyeHeight(0.13F).clientTrackingRange(4).updateInterval(20)
-    );
-    public static final EntityType<Spider> SPIDER = register(
-        "spider",
-        EntityType.Builder.of(Spider::new, MobCategory.MONSTER).sized(1.4F, 0.9F).eyeHeight(0.65F).passengerAttachments(0.765F).clientTrackingRange(8)
-    );
-    public static final EntityType<Squid> SQUID = register(
-        "squid", EntityType.Builder.of(Squid::new, MobCategory.WATER_CREATURE).sized(0.8F, 0.8F).eyeHeight(0.4F).clientTrackingRange(8)
-    );
-    public static final EntityType<Stray> STRAY = register(
-        "stray",
-        EntityType.Builder.of(Stray::new, MobCategory.MONSTER)
-            .sized(0.6F, 1.99F)
-            .eyeHeight(1.74F)
-            .ridingOffset(-0.7F)
-            .immuneTo(Blocks.POWDER_SNOW)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<Strider> STRIDER = register(
-        "strider", EntityType.Builder.of(Strider::new, MobCategory.CREATURE).fireImmune().sized(0.9F, 1.7F).clientTrackingRange(10)
-    );
-    public static final EntityType<Tadpole> TADPOLE = register(
-        "tadpole",
-        EntityType.Builder.of(Tadpole::new, MobCategory.CREATURE)
-            .sized(Tadpole.HITBOX_WIDTH, Tadpole.HITBOX_HEIGHT)
-            .eyeHeight(Tadpole.HITBOX_HEIGHT * 0.65F)
-            .clientTrackingRange(10)
-    );
-    public static final EntityType<Display.TextDisplay> TEXT_DISPLAY = register(
-        "text_display", EntityType.Builder.of(Display.TextDisplay::new, MobCategory.MISC).sized(0.0F, 0.0F).clientTrackingRange(10).updateInterval(1)
-    );
-    public static final EntityType<PrimedTnt> TNT = register(
-        "tnt",
-        EntityType.Builder.<PrimedTnt>of(PrimedTnt::new, MobCategory.MISC)
-            .fireImmune()
-            .sized(0.98F, 0.98F)
-            .eyeHeight(0.15F)
-            .clientTrackingRange(10)
-            .updateInterval(10)
-    );
-    public static final EntityType<MinecartTNT> TNT_MINECART = register(
-        "tnt_minecart",
-        EntityType.Builder.<MinecartTNT>of(MinecartTNT::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8)
-    );
-    public static final EntityType<TraderLlama> TRADER_LLAMA = register(
-        "trader_llama",
-        EntityType.Builder.of(TraderLlama::new, MobCategory.CREATURE)
-            .sized(0.9F, 1.87F)
-            .eyeHeight(1.7765F)
-            .passengerAttachments(new Vec3(0.0, 1.37, -0.3))
-            .clientTrackingRange(10)
-    );
-    public static final EntityType<ThrownTrident> TRIDENT = register(
-        "trident",
-        EntityType.Builder.<ThrownTrident>of(ThrownTrident::new, MobCategory.MISC).sized(0.5F, 0.5F).eyeHeight(0.13F).clientTrackingRange(4).updateInterval(20)
-    );
-    public static final EntityType<TropicalFish> TROPICAL_FISH = register(
-        "tropical_fish", EntityType.Builder.of(TropicalFish::new, MobCategory.WATER_AMBIENT).sized(0.5F, 0.4F).eyeHeight(0.26F).clientTrackingRange(4)
-    );
-    public static final EntityType<Turtle> TURTLE = register(
-        "turtle",
-        EntityType.Builder.of(Turtle::new, MobCategory.CREATURE).sized(1.2F, 0.4F).passengerAttachments(new Vec3(0.0, 0.55625, -0.25)).clientTrackingRange(10)
-    );
-    public static final EntityType<Vex> VEX = register(
-        "vex",
-        EntityType.Builder.of(Vex::new, MobCategory.MONSTER)
-            .fireImmune()
-            .sized(0.4F, 0.8F)
-            .eyeHeight(0.51875F)
-            .passengerAttachments(0.7375F)
-            .ridingOffset(0.04F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<Villager> VILLAGER = register(
-        "villager", EntityType.Builder.<Villager>of(Villager::new, MobCategory.MISC).sized(0.6F, 1.95F).eyeHeight(1.62F).clientTrackingRange(10)
-    );
-    public static final EntityType<Vindicator> VINDICATOR = register(
-        "vindicator",
-        EntityType.Builder.of(Vindicator::new, MobCategory.MONSTER).sized(0.6F, 1.95F).passengerAttachments(2.0F).ridingOffset(-0.6F).clientTrackingRange(8)
-    );
-    public static final EntityType<WanderingTrader> WANDERING_TRADER = register(
-        "wandering_trader", EntityType.Builder.of(WanderingTrader::new, MobCategory.CREATURE).sized(0.6F, 1.95F).eyeHeight(1.62F).clientTrackingRange(10)
-    );
-    public static final EntityType<Warden> WARDEN = register(
-        "warden",
-        EntityType.Builder.of(Warden::new, MobCategory.MONSTER)
-            .sized(0.9F, 2.9F)
-            .passengerAttachments(3.15F)
-            .attach(EntityAttachment.WARDEN_CHEST, 0.0F, 1.6F, 0.0F)
-            .clientTrackingRange(16)
-            .fireImmune()
-    );
-    public static final EntityType<WindCharge> WIND_CHARGE = register(
-        "wind_charge",
-        EntityType.Builder.<WindCharge>of(WindCharge::new, MobCategory.MISC)
-            .sized(0.3125F, 0.3125F)
-            .eyeHeight(0.0F)
-            .clientTrackingRange(4)
-            .updateInterval(10)
-            .requiredFeatures(FeatureFlags.UPDATE_1_21)
-    );
-    public static final EntityType<Witch> WITCH = register(
-        "witch",
-        EntityType.Builder.of(Witch::new, MobCategory.MONSTER).sized(0.6F, 1.95F).eyeHeight(1.62F).passengerAttachments(2.2625F).clientTrackingRange(8)
-    );
-    public static final EntityType<WitherBoss> WITHER = register(
-        "wither",
-        EntityType.Builder.of(WitherBoss::new, MobCategory.MONSTER).fireImmune().immuneTo(Blocks.WITHER_ROSE).sized(0.9F, 3.5F).clientTrackingRange(10)
-    );
-    public static final EntityType<WitherSkeleton> WITHER_SKELETON = register(
-        "wither_skeleton",
-        EntityType.Builder.of(WitherSkeleton::new, MobCategory.MONSTER)
-            .fireImmune()
-            .immuneTo(Blocks.WITHER_ROSE)
-            .sized(0.7F, 2.4F)
-            .eyeHeight(2.1F)
-            .ridingOffset(-0.875F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<WitherSkull> WITHER_SKULL = register(
-        "wither_skull",
-        EntityType.Builder.<WitherSkull>of(WitherSkull::new, MobCategory.MISC).sized(0.3125F, 0.3125F).clientTrackingRange(4).updateInterval(10)
-    );
-    public static final EntityType<Wolf> WOLF = register(
-        "wolf",
-        EntityType.Builder.of(Wolf::new, MobCategory.CREATURE)
-            .sized(0.6F, 0.85F)
-            .eyeHeight(0.68F)
-            .passengerAttachments(new Vec3(0.0, 0.81875, -0.0625))
-            .clientTrackingRange(10)
-    );
-    public static final EntityType<Zoglin> ZOGLIN = register(
-        "zoglin",
-        EntityType.Builder.of(Zoglin::new, MobCategory.MONSTER).fireImmune().sized(1.3964844F, 1.4F).passengerAttachments(1.49375F).clientTrackingRange(8)
-    );
-    public static final EntityType<Zombie> ZOMBIE = register(
-        "zombie",
-        EntityType.Builder.<Zombie>of(Zombie::new, MobCategory.MONSTER)
-            .sized(0.6F, 1.95F)
-            .eyeHeight(1.74F)
-            .passengerAttachments(2.0125F)
-            .ridingOffset(-0.7F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<ZombieHorse> ZOMBIE_HORSE = register(
-        "zombie_horse",
-        EntityType.Builder.of(ZombieHorse::new, MobCategory.CREATURE)
-            .sized(1.3964844F, 1.6F)
-            .eyeHeight(1.52F)
-            .passengerAttachments(1.31875F)
-            .clientTrackingRange(10)
-    );
-    public static final EntityType<ZombieVillager> ZOMBIE_VILLAGER = register(
-        "zombie_villager",
-        EntityType.Builder.of(ZombieVillager::new, MobCategory.MONSTER)
-            .sized(0.6F, 1.95F)
-            .passengerAttachments(2.125F)
-            .ridingOffset(-0.7F)
-            .eyeHeight(1.74F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<ZombifiedPiglin> ZOMBIFIED_PIGLIN = register(
-        "zombified_piglin",
-        EntityType.Builder.of(ZombifiedPiglin::new, MobCategory.MONSTER)
-            .fireImmune()
-            .sized(0.6F, 1.95F)
-            .eyeHeight(1.79F)
-            .passengerAttachments(2.0F)
-            .ridingOffset(-0.7F)
-            .clientTrackingRange(8)
-    );
-    public static final EntityType<Player> PLAYER = register(
-        "player",
-        EntityType.Builder.<Player>createNothing(MobCategory.MISC)
-            .noSave()
-            .noSummon()
-            .sized(0.6F, 1.8F)
-            .eyeHeight(1.62F)
-            .vehicleAttachment(Player.DEFAULT_VEHICLE_ATTACHMENT)
-            .clientTrackingRange(32)
-            .updateInterval(2)
-    );
-    public static final EntityType<FishingHook> FISHING_BOBBER = register(
-        "fishing_bobber",
-        EntityType.Builder.<FishingHook>of(FishingHook::new, MobCategory.MISC).noSave().noSummon().sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(5)
-    );
+    public static final EntityType<Allay> ALLAY = EntityType.register("allay", EntityType.Builder.of(Allay::new, MobCategory.CREATURE).sized(0.35F, 0.6F).eyeHeight(0.36F).ridingOffset(0.04F).clientTrackingRange(8).updateInterval(2));
+    public static final EntityType<AreaEffectCloud> AREA_EFFECT_CLOUD = EntityType.register("area_effect_cloud", EntityType.Builder.of(AreaEffectCloud::new, MobCategory.MISC).fireImmune().sized(6.0F, 0.5F).clientTrackingRange(10).updateInterval(10)); // CraftBukkit - SPIGOT-3729: track area effect clouds
+    public static final EntityType<Armadillo> ARMADILLO = EntityType.register("armadillo", EntityType.Builder.of(Armadillo::new, MobCategory.CREATURE).sized(0.7F, 0.65F).eyeHeight(0.26F).clientTrackingRange(10));
+    public static final EntityType<ArmorStand> ARMOR_STAND = EntityType.register("armor_stand", EntityType.Builder.of(ArmorStand::new, MobCategory.MISC).sized(0.5F, 1.975F).eyeHeight(1.7775F).clientTrackingRange(10));
+    public static final EntityType<Arrow> ARROW = EntityType.register("arrow", EntityType.Builder.of(Arrow::new, MobCategory.MISC).sized(0.5F, 0.5F).eyeHeight(0.13F).clientTrackingRange(4).updateInterval(20));
+    public static final EntityType<Axolotl> AXOLOTL = EntityType.register("axolotl", EntityType.Builder.of(Axolotl::new, MobCategory.AXOLOTLS).sized(0.75F, 0.42F).eyeHeight(0.2751F).clientTrackingRange(10));
+    public static final EntityType<Bat> BAT = EntityType.register("bat", EntityType.Builder.of(Bat::new, MobCategory.AMBIENT).sized(0.5F, 0.9F).eyeHeight(0.45F).clientTrackingRange(5));
+    public static final EntityType<Bee> BEE = EntityType.register("bee", EntityType.Builder.of(Bee::new, MobCategory.CREATURE).sized(0.7F, 0.6F).eyeHeight(0.3F).clientTrackingRange(8));
+    public static final EntityType<Blaze> BLAZE = EntityType.register("blaze", EntityType.Builder.of(Blaze::new, MobCategory.MONSTER).fireImmune().sized(0.6F, 1.8F).clientTrackingRange(8));
+    public static final EntityType<Display.BlockDisplay> BLOCK_DISPLAY = EntityType.register("block_display", EntityType.Builder.of(Display.BlockDisplay::new, MobCategory.MISC).sized(0.0F, 0.0F).clientTrackingRange(10).updateInterval(1));
+    public static final EntityType<Boat> BOAT = EntityType.register("boat", EntityType.Builder.of(Boat::new, MobCategory.MISC).sized(1.375F, 0.5625F).eyeHeight(0.5625F).clientTrackingRange(10));
+    public static final EntityType<Bogged> BOGGED = EntityType.register("bogged", EntityType.Builder.of(Bogged::new, MobCategory.MONSTER).sized(0.6F, 1.99F).eyeHeight(1.74F).ridingOffset(-0.7F).clientTrackingRange(8).requiredFeatures(FeatureFlags.UPDATE_1_21));
+    public static final EntityType<Breeze> BREEZE = EntityType.register("breeze", EntityType.Builder.of(Breeze::new, MobCategory.MONSTER).sized(0.6F, 1.77F).eyeHeight(1.3452F).clientTrackingRange(10).requiredFeatures(FeatureFlags.UPDATE_1_21));
+    public static final EntityType<BreezeWindCharge> BREEZE_WIND_CHARGE = EntityType.register("breeze_wind_charge", EntityType.Builder.of(BreezeWindCharge::new, MobCategory.MISC).sized(0.3125F, 0.3125F).eyeHeight(0.0F).clientTrackingRange(4).updateInterval(10).requiredFeatures(FeatureFlags.UPDATE_1_21));
+    public static final EntityType<Camel> CAMEL = EntityType.register("camel", EntityType.Builder.of(Camel::new, MobCategory.CREATURE).sized(1.7F, 2.375F).eyeHeight(2.275F).clientTrackingRange(10));
+    public static final EntityType<Cat> CAT = EntityType.register("cat", EntityType.Builder.of(Cat::new, MobCategory.CREATURE).sized(0.6F, 0.7F).eyeHeight(0.35F).passengerAttachments(0.5125F).clientTrackingRange(8));
+    public static final EntityType<CaveSpider> CAVE_SPIDER = EntityType.register("cave_spider", EntityType.Builder.of(CaveSpider::new, MobCategory.MONSTER).sized(0.7F, 0.5F).eyeHeight(0.45F).clientTrackingRange(8));
+    public static final EntityType<ChestBoat> CHEST_BOAT = EntityType.register("chest_boat", EntityType.Builder.of(ChestBoat::new, MobCategory.MISC).sized(1.375F, 0.5625F).eyeHeight(0.5625F).clientTrackingRange(10));
+    public static final EntityType<MinecartChest> CHEST_MINECART = EntityType.register("chest_minecart", EntityType.Builder.of(MinecartChest::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8));
+    public static final EntityType<Chicken> CHICKEN = EntityType.register("chicken", EntityType.Builder.of(Chicken::new, MobCategory.CREATURE).sized(0.4F, 0.7F).eyeHeight(0.644F).passengerAttachments(new Vec3(0.0D, 0.7D, -0.1D)).clientTrackingRange(10));
+    public static final EntityType<Cod> COD = EntityType.register("cod", EntityType.Builder.of(Cod::new, MobCategory.WATER_AMBIENT).sized(0.5F, 0.3F).eyeHeight(0.195F).clientTrackingRange(4));
+    public static final EntityType<MinecartCommandBlock> COMMAND_BLOCK_MINECART = EntityType.register("command_block_minecart", EntityType.Builder.of(MinecartCommandBlock::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8));
+    public static final EntityType<Cow> COW = EntityType.register("cow", EntityType.Builder.of(Cow::new, MobCategory.CREATURE).sized(0.9F, 1.4F).eyeHeight(1.3F).passengerAttachments(1.36875F).clientTrackingRange(10));
+    public static final EntityType<Creeper> CREEPER = EntityType.register("creeper", EntityType.Builder.of(Creeper::new, MobCategory.MONSTER).sized(0.6F, 1.7F).clientTrackingRange(8));
+    public static final EntityType<Dolphin> DOLPHIN = EntityType.register("dolphin", EntityType.Builder.of(Dolphin::new, MobCategory.WATER_CREATURE).sized(0.9F, 0.6F).eyeHeight(0.3F));
+    public static final EntityType<Donkey> DONKEY = EntityType.register("donkey", EntityType.Builder.of(Donkey::new, MobCategory.CREATURE).sized(1.3964844F, 1.5F).eyeHeight(1.425F).passengerAttachments(1.1125F).clientTrackingRange(10));
+    public static final EntityType<DragonFireball> DRAGON_FIREBALL = EntityType.register("dragon_fireball", EntityType.Builder.of(DragonFireball::new, MobCategory.MISC).sized(1.0F, 1.0F).clientTrackingRange(4).updateInterval(10));
+    public static final EntityType<Drowned> DROWNED = EntityType.register("drowned", EntityType.Builder.of(Drowned::new, MobCategory.MONSTER).sized(0.6F, 1.95F).eyeHeight(1.74F).passengerAttachments(2.0125F).ridingOffset(-0.7F).clientTrackingRange(8));
+    public static final EntityType<ThrownEgg> EGG = EntityType.register("egg", EntityType.Builder.of(ThrownEgg::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10));
+    public static final EntityType<ElderGuardian> ELDER_GUARDIAN = EntityType.register("elder_guardian", EntityType.Builder.of(ElderGuardian::new, MobCategory.MONSTER).sized(1.9975F, 1.9975F).eyeHeight(0.99875F).passengerAttachments(2.350625F).clientTrackingRange(10));
+    public static final EntityType<EndCrystal> END_CRYSTAL = EntityType.register("end_crystal", EntityType.Builder.of(EndCrystal::new, MobCategory.MISC).sized(2.0F, 2.0F).clientTrackingRange(16).updateInterval(Integer.MAX_VALUE));
+    public static final EntityType<EnderDragon> ENDER_DRAGON = EntityType.register("ender_dragon", EntityType.Builder.of(EnderDragon::new, MobCategory.MONSTER).fireImmune().sized(16.0F, 8.0F).passengerAttachments(3.0F).clientTrackingRange(10));
+    public static final EntityType<ThrownEnderpearl> ENDER_PEARL = EntityType.register("ender_pearl", EntityType.Builder.of(ThrownEnderpearl::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10));
+    public static final EntityType<EnderMan> ENDERMAN = EntityType.register("enderman", EntityType.Builder.of(EnderMan::new, MobCategory.MONSTER).sized(0.6F, 2.9F).eyeHeight(2.55F).passengerAttachments(2.80625F).clientTrackingRange(8));
+    public static final EntityType<Endermite> ENDERMITE = EntityType.register("endermite", EntityType.Builder.of(Endermite::new, MobCategory.MONSTER).sized(0.4F, 0.3F).eyeHeight(0.13F).passengerAttachments(0.2375F).clientTrackingRange(8));
+    public static final EntityType<Evoker> EVOKER = EntityType.register("evoker", EntityType.Builder.of(Evoker::new, MobCategory.MONSTER).sized(0.6F, 1.95F).passengerAttachments(2.0F).ridingOffset(-0.6F).clientTrackingRange(8));
+    public static final EntityType<EvokerFangs> EVOKER_FANGS = EntityType.register("evoker_fangs", EntityType.Builder.of(EvokerFangs::new, MobCategory.MISC).sized(0.5F, 0.8F).clientTrackingRange(6).updateInterval(2));
+    public static final EntityType<ThrownExperienceBottle> EXPERIENCE_BOTTLE = EntityType.register("experience_bottle", EntityType.Builder.of(ThrownExperienceBottle::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10));
+    public static final EntityType<ExperienceOrb> EXPERIENCE_ORB = EntityType.register("experience_orb", EntityType.Builder.of(ExperienceOrb::new, MobCategory.MISC).sized(0.5F, 0.5F).clientTrackingRange(6).updateInterval(20));
+    public static final EntityType<EyeOfEnder> EYE_OF_ENDER = EntityType.register("eye_of_ender", EntityType.Builder.of(EyeOfEnder::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(4));
+    public static final EntityType<FallingBlockEntity> FALLING_BLOCK = EntityType.register("falling_block", EntityType.Builder.of(FallingBlockEntity::new, MobCategory.MISC).sized(0.98F, 0.98F).clientTrackingRange(10).updateInterval(20));
+    public static final EntityType<FireworkRocketEntity> FIREWORK_ROCKET = EntityType.register("firework_rocket", EntityType.Builder.of(FireworkRocketEntity::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10));
+    public static final EntityType<Fox> FOX = EntityType.register("fox", EntityType.Builder.of(Fox::new, MobCategory.CREATURE).sized(0.6F, 0.7F).eyeHeight(0.4F).passengerAttachments(new Vec3(0.0D, 0.6375D, -0.25D)).clientTrackingRange(8).immuneTo(Blocks.SWEET_BERRY_BUSH));
+    public static final EntityType<Frog> FROG = EntityType.register("frog", EntityType.Builder.of(Frog::new, MobCategory.CREATURE).sized(0.5F, 0.5F).passengerAttachments(new Vec3(0.0D, 0.375D, -0.25D)).clientTrackingRange(10));
+    public static final EntityType<MinecartFurnace> FURNACE_MINECART = EntityType.register("furnace_minecart", EntityType.Builder.of(MinecartFurnace::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8));
+    public static final EntityType<Ghast> GHAST = EntityType.register("ghast", EntityType.Builder.of(Ghast::new, MobCategory.MONSTER).fireImmune().sized(4.0F, 4.0F).eyeHeight(2.6F).passengerAttachments(4.0625F).ridingOffset(0.5F).clientTrackingRange(10));
+    public static final EntityType<Giant> GIANT = EntityType.register("giant", EntityType.Builder.of(Giant::new, MobCategory.MONSTER).sized(3.6F, 12.0F).eyeHeight(10.44F).ridingOffset(-3.75F).clientTrackingRange(10));
+    public static final EntityType<GlowItemFrame> GLOW_ITEM_FRAME = EntityType.register("glow_item_frame", EntityType.Builder.of(GlowItemFrame::new, MobCategory.MISC).sized(0.5F, 0.5F).eyeHeight(0.0F).clientTrackingRange(10).updateInterval(Integer.MAX_VALUE));
+    public static final EntityType<GlowSquid> GLOW_SQUID = EntityType.register("glow_squid", EntityType.Builder.of(GlowSquid::new, MobCategory.UNDERGROUND_WATER_CREATURE).sized(0.8F, 0.8F).eyeHeight(0.4F).clientTrackingRange(10));
+    public static final EntityType<Goat> GOAT = EntityType.register("goat", EntityType.Builder.of(Goat::new, MobCategory.CREATURE).sized(0.9F, 1.3F).passengerAttachments(1.1125F).clientTrackingRange(10));
+    public static final EntityType<Guardian> GUARDIAN = EntityType.register("guardian", EntityType.Builder.of(Guardian::new, MobCategory.MONSTER).sized(0.85F, 0.85F).eyeHeight(0.425F).passengerAttachments(0.975F).clientTrackingRange(8));
+    public static final EntityType<Hoglin> HOGLIN = EntityType.register("hoglin", EntityType.Builder.of(Hoglin::new, MobCategory.MONSTER).sized(1.3964844F, 1.4F).passengerAttachments(1.49375F).clientTrackingRange(8));
+    public static final EntityType<MinecartHopper> HOPPER_MINECART = EntityType.register("hopper_minecart", EntityType.Builder.of(MinecartHopper::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8));
+    public static final EntityType<Horse> HORSE = EntityType.register("horse", EntityType.Builder.of(Horse::new, MobCategory.CREATURE).sized(1.3964844F, 1.6F).eyeHeight(1.52F).passengerAttachments(1.44375F).clientTrackingRange(10));
+    public static final EntityType<Husk> HUSK = EntityType.register("husk", EntityType.Builder.of(Husk::new, MobCategory.MONSTER).sized(0.6F, 1.95F).eyeHeight(1.74F).passengerAttachments(2.075F).ridingOffset(-0.7F).clientTrackingRange(8));
+    public static final EntityType<Illusioner> ILLUSIONER = EntityType.register("illusioner", EntityType.Builder.of(Illusioner::new, MobCategory.MONSTER).sized(0.6F, 1.95F).passengerAttachments(2.0F).ridingOffset(-0.6F).clientTrackingRange(8));
+    public static final EntityType<Interaction> INTERACTION = EntityType.register("interaction", EntityType.Builder.of(Interaction::new, MobCategory.MISC).sized(0.0F, 0.0F).clientTrackingRange(10));
+    public static final EntityType<IronGolem> IRON_GOLEM = EntityType.register("iron_golem", EntityType.Builder.of(IronGolem::new, MobCategory.MISC).sized(1.4F, 2.7F).clientTrackingRange(10));
+    public static final EntityType<ItemEntity> ITEM = EntityType.register("item", EntityType.Builder.of(ItemEntity::new, MobCategory.MISC).sized(0.25F, 0.25F).eyeHeight(0.2125F).clientTrackingRange(6).updateInterval(20));
+    public static final EntityType<Display.ItemDisplay> ITEM_DISPLAY = EntityType.register("item_display", EntityType.Builder.of(Display.ItemDisplay::new, MobCategory.MISC).sized(0.0F, 0.0F).clientTrackingRange(10).updateInterval(1));
+    public static final EntityType<ItemFrame> ITEM_FRAME = EntityType.register("item_frame", EntityType.Builder.of(ItemFrame::new, MobCategory.MISC).sized(0.5F, 0.5F).eyeHeight(0.0F).clientTrackingRange(10).updateInterval(Integer.MAX_VALUE));
+    public static final EntityType<OminousItemSpawner> OMINOUS_ITEM_SPAWNER = EntityType.register("ominous_item_spawner", EntityType.Builder.of(OminousItemSpawner::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(8).requiredFeatures(FeatureFlags.UPDATE_1_21));
+    public static final EntityType<LargeFireball> FIREBALL = EntityType.register("fireball", EntityType.Builder.of(LargeFireball::new, MobCategory.MISC).sized(1.0F, 1.0F).clientTrackingRange(4).updateInterval(10));
+    public static final EntityType<LeashFenceKnotEntity> LEASH_KNOT = EntityType.register("leash_knot", EntityType.Builder.of(LeashFenceKnotEntity::new, MobCategory.MISC).noSave().sized(0.375F, 0.5F).eyeHeight(0.0625F).clientTrackingRange(10).updateInterval(Integer.MAX_VALUE));
+    public static final EntityType<LightningBolt> LIGHTNING_BOLT = EntityType.register("lightning_bolt", EntityType.Builder.of(LightningBolt::new, MobCategory.MISC).noSave().sized(0.0F, 0.0F).clientTrackingRange(16).updateInterval(Integer.MAX_VALUE));
+    public static final EntityType<Llama> LLAMA = EntityType.register("llama", EntityType.Builder.of(Llama::new, MobCategory.CREATURE).sized(0.9F, 1.87F).eyeHeight(1.7765F).passengerAttachments(new Vec3(0.0D, 1.37D, -0.3D)).clientTrackingRange(10));
+    public static final EntityType<LlamaSpit> LLAMA_SPIT = EntityType.register("llama_spit", EntityType.Builder.of(LlamaSpit::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10));
+    public static final EntityType<MagmaCube> MAGMA_CUBE = EntityType.register("magma_cube", EntityType.Builder.of(MagmaCube::new, MobCategory.MONSTER).fireImmune().sized(0.52F, 0.52F).eyeHeight(0.325F).spawnDimensionsScale(4.0F).clientTrackingRange(8));
+    public static final EntityType<Marker> MARKER = EntityType.register("marker", EntityType.Builder.of(Marker::new, MobCategory.MISC).sized(0.0F, 0.0F).clientTrackingRange(0));
+    public static final EntityType<Minecart> MINECART = EntityType.register("minecart", EntityType.Builder.of(Minecart::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8));
+    public static final EntityType<MushroomCow> MOOSHROOM = EntityType.register("mooshroom", EntityType.Builder.of(MushroomCow::new, MobCategory.CREATURE).sized(0.9F, 1.4F).eyeHeight(1.3F).passengerAttachments(1.36875F).clientTrackingRange(10));
+    public static final EntityType<Mule> MULE = EntityType.register("mule", EntityType.Builder.of(Mule::new, MobCategory.CREATURE).sized(1.3964844F, 1.6F).eyeHeight(1.52F).passengerAttachments(1.2125F).clientTrackingRange(8));
+    public static final EntityType<Ocelot> OCELOT = EntityType.register("ocelot", EntityType.Builder.of(Ocelot::new, MobCategory.CREATURE).sized(0.6F, 0.7F).passengerAttachments(0.6375F).clientTrackingRange(10));
+    public static final EntityType<Painting> PAINTING = EntityType.register("painting", EntityType.Builder.of(Painting::new, MobCategory.MISC).sized(0.5F, 0.5F).clientTrackingRange(10).updateInterval(Integer.MAX_VALUE));
+    public static final EntityType<Panda> PANDA = EntityType.register("panda", EntityType.Builder.of(Panda::new, MobCategory.CREATURE).sized(1.3F, 1.25F).clientTrackingRange(10));
+    public static final EntityType<Parrot> PARROT = EntityType.register("parrot", EntityType.Builder.of(Parrot::new, MobCategory.CREATURE).sized(0.5F, 0.9F).eyeHeight(0.54F).passengerAttachments(0.4625F).clientTrackingRange(8));
+    public static final EntityType<Phantom> PHANTOM = EntityType.register("phantom", EntityType.Builder.of(Phantom::new, MobCategory.MONSTER).sized(0.9F, 0.5F).eyeHeight(0.175F).passengerAttachments(0.3375F).ridingOffset(-0.125F).clientTrackingRange(8));
+    public static final EntityType<Pig> PIG = EntityType.register("pig", EntityType.Builder.of(Pig::new, MobCategory.CREATURE).sized(0.9F, 0.9F).passengerAttachments(0.86875F).clientTrackingRange(10));
+    public static final EntityType<Piglin> PIGLIN = EntityType.register("piglin", EntityType.Builder.of(Piglin::new, MobCategory.MONSTER).sized(0.6F, 1.95F).eyeHeight(1.79F).passengerAttachments(2.0125F).ridingOffset(-0.7F).clientTrackingRange(8));
+    public static final EntityType<PiglinBrute> PIGLIN_BRUTE = EntityType.register("piglin_brute", EntityType.Builder.of(PiglinBrute::new, MobCategory.MONSTER).sized(0.6F, 1.95F).eyeHeight(1.79F).passengerAttachments(2.0125F).ridingOffset(-0.7F).clientTrackingRange(8));
+    public static final EntityType<Pillager> PILLAGER = EntityType.register("pillager", EntityType.Builder.of(Pillager::new, MobCategory.MONSTER).canSpawnFarFromPlayer().sized(0.6F, 1.95F).passengerAttachments(2.0F).ridingOffset(-0.6F).clientTrackingRange(8));
+    public static final EntityType<PolarBear> POLAR_BEAR = EntityType.register("polar_bear", EntityType.Builder.of(PolarBear::new, MobCategory.CREATURE).immuneTo(Blocks.POWDER_SNOW).sized(1.4F, 1.4F).clientTrackingRange(10));
+    public static final EntityType<ThrownPotion> POTION = EntityType.register("potion", EntityType.Builder.of(ThrownPotion::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10));
+    public static final EntityType<Pufferfish> PUFFERFISH = EntityType.register("pufferfish", EntityType.Builder.of(Pufferfish::new, MobCategory.WATER_AMBIENT).sized(0.7F, 0.7F).eyeHeight(0.455F).clientTrackingRange(4));
+    public static final EntityType<Rabbit> RABBIT = EntityType.register("rabbit", EntityType.Builder.of(Rabbit::new, MobCategory.CREATURE).sized(0.4F, 0.5F).clientTrackingRange(8));
+    public static final EntityType<Ravager> RAVAGER = EntityType.register("ravager", EntityType.Builder.of(Ravager::new, MobCategory.MONSTER).sized(1.95F, 2.2F).passengerAttachments(new Vec3(0.0D, 2.2625D, -0.0625D)).clientTrackingRange(10));
+    public static final EntityType<Salmon> SALMON = EntityType.register("salmon", EntityType.Builder.of(Salmon::new, MobCategory.WATER_AMBIENT).sized(0.7F, 0.4F).eyeHeight(0.26F).clientTrackingRange(4));
+    public static final EntityType<Sheep> SHEEP = EntityType.register("sheep", EntityType.Builder.of(Sheep::new, MobCategory.CREATURE).sized(0.9F, 1.3F).eyeHeight(1.235F).passengerAttachments(1.2375F).clientTrackingRange(10));
+    public static final EntityType<Shulker> SHULKER = EntityType.register("shulker", EntityType.Builder.of(Shulker::new, MobCategory.MONSTER).fireImmune().canSpawnFarFromPlayer().sized(1.0F, 1.0F).eyeHeight(0.5F).clientTrackingRange(10));
+    public static final EntityType<ShulkerBullet> SHULKER_BULLET = EntityType.register("shulker_bullet", EntityType.Builder.of(ShulkerBullet::new, MobCategory.MISC).sized(0.3125F, 0.3125F).clientTrackingRange(8));
+    public static final EntityType<Silverfish> SILVERFISH = EntityType.register("silverfish", EntityType.Builder.of(Silverfish::new, MobCategory.MONSTER).sized(0.4F, 0.3F).eyeHeight(0.13F).passengerAttachments(0.2375F).clientTrackingRange(8));
+    public static final EntityType<Skeleton> SKELETON = EntityType.register("skeleton", EntityType.Builder.of(Skeleton::new, MobCategory.MONSTER).sized(0.6F, 1.99F).eyeHeight(1.74F).ridingOffset(-0.7F).clientTrackingRange(8));
+    public static final EntityType<SkeletonHorse> SKELETON_HORSE = EntityType.register("skeleton_horse", EntityType.Builder.of(SkeletonHorse::new, MobCategory.CREATURE).sized(1.3964844F, 1.6F).eyeHeight(1.52F).passengerAttachments(1.31875F).clientTrackingRange(10));
+    public static final EntityType<Slime> SLIME = EntityType.register("slime", EntityType.Builder.of(Slime::new, MobCategory.MONSTER).sized(0.52F, 0.52F).eyeHeight(0.325F).spawnDimensionsScale(4.0F).clientTrackingRange(10));
+    public static final EntityType<SmallFireball> SMALL_FIREBALL = EntityType.register("small_fireball", EntityType.Builder.of(SmallFireball::new, MobCategory.MISC).sized(0.3125F, 0.3125F).clientTrackingRange(4).updateInterval(10));
+    public static final EntityType<Sniffer> SNIFFER = EntityType.register("sniffer", EntityType.Builder.of(Sniffer::new, MobCategory.CREATURE).sized(1.9F, 1.75F).eyeHeight(1.05F).passengerAttachments(2.09375F).nameTagOffset(2.05F).clientTrackingRange(10));
+    public static final EntityType<SnowGolem> SNOW_GOLEM = EntityType.register("snow_golem", EntityType.Builder.of(SnowGolem::new, MobCategory.MISC).immuneTo(Blocks.POWDER_SNOW).sized(0.7F, 1.9F).eyeHeight(1.7F).clientTrackingRange(8));
+    public static final EntityType<Snowball> SNOWBALL = EntityType.register("snowball", EntityType.Builder.of(Snowball::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10));
+    public static final EntityType<MinecartSpawner> SPAWNER_MINECART = EntityType.register("spawner_minecart", EntityType.Builder.of(MinecartSpawner::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8));
+    public static final EntityType<SpectralArrow> SPECTRAL_ARROW = EntityType.register("spectral_arrow", EntityType.Builder.of(SpectralArrow::new, MobCategory.MISC).sized(0.5F, 0.5F).eyeHeight(0.13F).clientTrackingRange(4).updateInterval(20));
+    public static final EntityType<Spider> SPIDER = EntityType.register("spider", EntityType.Builder.of(Spider::new, MobCategory.MONSTER).sized(1.4F, 0.9F).eyeHeight(0.65F).passengerAttachments(0.765F).clientTrackingRange(8));
+    public static final EntityType<Squid> SQUID = EntityType.register("squid", EntityType.Builder.of(Squid::new, MobCategory.WATER_CREATURE).sized(0.8F, 0.8F).eyeHeight(0.4F).clientTrackingRange(8));
+    public static final EntityType<Stray> STRAY = EntityType.register("stray", EntityType.Builder.of(Stray::new, MobCategory.MONSTER).sized(0.6F, 1.99F).eyeHeight(1.74F).ridingOffset(-0.7F).immuneTo(Blocks.POWDER_SNOW).clientTrackingRange(8));
+    public static final EntityType<Strider> STRIDER = EntityType.register("strider", EntityType.Builder.of(Strider::new, MobCategory.CREATURE).fireImmune().sized(0.9F, 1.7F).clientTrackingRange(10));
+    public static final EntityType<Tadpole> TADPOLE = EntityType.register("tadpole", EntityType.Builder.of(Tadpole::new, MobCategory.CREATURE).sized(Tadpole.HITBOX_WIDTH, Tadpole.HITBOX_HEIGHT).eyeHeight(Tadpole.HITBOX_HEIGHT * 0.65F).clientTrackingRange(10));
+    public static final EntityType<Display.TextDisplay> TEXT_DISPLAY = EntityType.register("text_display", EntityType.Builder.of(Display.TextDisplay::new, MobCategory.MISC).sized(0.0F, 0.0F).clientTrackingRange(10).updateInterval(1));
+    public static final EntityType<PrimedTnt> TNT = EntityType.register("tnt", EntityType.Builder.of(PrimedTnt::new, MobCategory.MISC).fireImmune().sized(0.98F, 0.98F).eyeHeight(0.15F).clientTrackingRange(10).updateInterval(10));
+    public static final EntityType<MinecartTNT> TNT_MINECART = EntityType.register("tnt_minecart", EntityType.Builder.of(MinecartTNT::new, MobCategory.MISC).sized(0.98F, 0.7F).passengerAttachments(0.1875F).clientTrackingRange(8));
+    public static final EntityType<TraderLlama> TRADER_LLAMA = EntityType.register("trader_llama", EntityType.Builder.of(TraderLlama::new, MobCategory.CREATURE).sized(0.9F, 1.87F).eyeHeight(1.7765F).passengerAttachments(new Vec3(0.0D, 1.37D, -0.3D)).clientTrackingRange(10));
+    public static final EntityType<ThrownTrident> TRIDENT = EntityType.register("trident", EntityType.Builder.of(ThrownTrident::new, MobCategory.MISC).sized(0.5F, 0.5F).eyeHeight(0.13F).clientTrackingRange(4).updateInterval(20));
+    public static final EntityType<TropicalFish> TROPICAL_FISH = EntityType.register("tropical_fish", EntityType.Builder.of(TropicalFish::new, MobCategory.WATER_AMBIENT).sized(0.5F, 0.4F).eyeHeight(0.26F).clientTrackingRange(4));
+    public static final EntityType<Turtle> TURTLE = EntityType.register("turtle", EntityType.Builder.of(Turtle::new, MobCategory.CREATURE).sized(1.2F, 0.4F).passengerAttachments(new Vec3(0.0D, 0.55625D, -0.25D)).clientTrackingRange(10));
+    public static final EntityType<Vex> VEX = EntityType.register("vex", EntityType.Builder.of(Vex::new, MobCategory.MONSTER).fireImmune().sized(0.4F, 0.8F).eyeHeight(0.51875F).passengerAttachments(0.7375F).ridingOffset(0.04F).clientTrackingRange(8));
+    public static final EntityType<Villager> VILLAGER = EntityType.register("villager", EntityType.Builder.of(Villager::new, MobCategory.MISC).sized(0.6F, 1.95F).eyeHeight(1.62F).clientTrackingRange(10));
+    public static final EntityType<Vindicator> VINDICATOR = EntityType.register("vindicator", EntityType.Builder.of(Vindicator::new, MobCategory.MONSTER).sized(0.6F, 1.95F).passengerAttachments(2.0F).ridingOffset(-0.6F).clientTrackingRange(8));
+    public static final EntityType<WanderingTrader> WANDERING_TRADER = EntityType.register("wandering_trader", EntityType.Builder.of(WanderingTrader::new, MobCategory.CREATURE).sized(0.6F, 1.95F).eyeHeight(1.62F).clientTrackingRange(10));
+    public static final EntityType<Warden> WARDEN = EntityType.register("warden", EntityType.Builder.of(Warden::new, MobCategory.MONSTER).sized(0.9F, 2.9F).passengerAttachments(3.15F).attach(EntityAttachment.WARDEN_CHEST, 0.0F, 1.6F, 0.0F).clientTrackingRange(16).fireImmune());
+    public static final EntityType<WindCharge> WIND_CHARGE = EntityType.register("wind_charge", EntityType.Builder.of(WindCharge::new, MobCategory.MISC).sized(0.3125F, 0.3125F).eyeHeight(0.0F).clientTrackingRange(4).updateInterval(10).requiredFeatures(FeatureFlags.UPDATE_1_21));
+    public static final EntityType<Witch> WITCH = EntityType.register("witch", EntityType.Builder.of(Witch::new, MobCategory.MONSTER).sized(0.6F, 1.95F).eyeHeight(1.62F).passengerAttachments(2.2625F).clientTrackingRange(8));
+    public static final EntityType<WitherBoss> WITHER = EntityType.register("wither", EntityType.Builder.of(WitherBoss::new, MobCategory.MONSTER).fireImmune().immuneTo(Blocks.WITHER_ROSE).sized(0.9F, 3.5F).clientTrackingRange(10));
+    public static final EntityType<WitherSkeleton> WITHER_SKELETON = EntityType.register("wither_skeleton", EntityType.Builder.of(WitherSkeleton::new, MobCategory.MONSTER).fireImmune().immuneTo(Blocks.WITHER_ROSE).sized(0.7F, 2.4F).eyeHeight(2.1F).ridingOffset(-0.875F).clientTrackingRange(8));
+    public static final EntityType<WitherSkull> WITHER_SKULL = EntityType.register("wither_skull", EntityType.Builder.of(WitherSkull::new, MobCategory.MISC).sized(0.3125F, 0.3125F).clientTrackingRange(4).updateInterval(10));
+    public static final EntityType<Wolf> WOLF = EntityType.register("wolf", EntityType.Builder.of(Wolf::new, MobCategory.CREATURE).sized(0.6F, 0.85F).eyeHeight(0.68F).passengerAttachments(new Vec3(0.0D, 0.81875D, -0.0625D)).clientTrackingRange(10));
+    public static final EntityType<Zoglin> ZOGLIN = EntityType.register("zoglin", EntityType.Builder.of(Zoglin::new, MobCategory.MONSTER).fireImmune().sized(1.3964844F, 1.4F).passengerAttachments(1.49375F).clientTrackingRange(8));
+    public static final EntityType<Zombie> ZOMBIE = EntityType.register("zombie", EntityType.Builder.of(Zombie::new, MobCategory.MONSTER).sized(0.6F, 1.95F).eyeHeight(1.74F).passengerAttachments(2.0125F).ridingOffset(-0.7F).clientTrackingRange(8));
+    public static final EntityType<ZombieHorse> ZOMBIE_HORSE = EntityType.register("zombie_horse", EntityType.Builder.of(ZombieHorse::new, MobCategory.CREATURE).sized(1.3964844F, 1.6F).eyeHeight(1.52F).passengerAttachments(1.31875F).clientTrackingRange(10));
+    public static final EntityType<ZombieVillager> ZOMBIE_VILLAGER = EntityType.register("zombie_villager", EntityType.Builder.of(ZombieVillager::new, MobCategory.MONSTER).sized(0.6F, 1.95F).passengerAttachments(2.125F).ridingOffset(-0.7F).eyeHeight(1.74F).clientTrackingRange(8));
+    public static final EntityType<ZombifiedPiglin> ZOMBIFIED_PIGLIN = EntityType.register("zombified_piglin", EntityType.Builder.of(ZombifiedPiglin::new, MobCategory.MONSTER).fireImmune().sized(0.6F, 1.95F).eyeHeight(1.79F).passengerAttachments(2.0F).ridingOffset(-0.7F).clientTrackingRange(8));
+    public static final EntityType<Player> PLAYER = EntityType.register("player", EntityType.Builder.createNothing(MobCategory.MISC).noSave().noSummon().sized(0.6F, 1.8F).eyeHeight(1.62F).vehicleAttachment(Player.DEFAULT_VEHICLE_ATTACHMENT).clientTrackingRange(32).updateInterval(2));
+    public static final EntityType<FishingHook> FISHING_BOBBER = EntityType.register("fishing_bobber", EntityType.Builder.of(FishingHook::new, MobCategory.MISC).noSave().noSummon().sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(5));
     private final EntityType.EntityFactory<T> factory;
     private final MobCategory category;
     private final ImmutableSet<Block> immuneTo;
@@ -852,8 +326,8 @@
     private final float spawnDimensionsScale;
     private final FeatureFlagSet requiredFeatures;
 
-    private static <T extends Entity> EntityType<T> register(String id, EntityType.Builder<T> type) {
-        return Registry.register(BuiltInRegistries.ENTITY_TYPE, id, type.build(id));
+    private static <T extends Entity> EntityType<T> register(String id, EntityType.Builder type) { // CraftBukkit - decompile error
+        return (EntityType) Registry.register(BuiltInRegistries.ENTITY_TYPE, id, (EntityType<T>) type.build(id)); // CraftBukkit - decompile error
     }
 
     public static ResourceLocation getKey(EntityType<?> type) {
@@ -864,20 +338,17 @@
         return BuiltInRegistries.ENTITY_TYPE.getOptional(ResourceLocation.tryParse(id));
     }
 
-    public EntityType(
-        EntityType.EntityFactory<T> factory,
-        MobCategory spawnGroup,
-        boolean saveable,
-        boolean summonable,
-        boolean fireImmune,
-        boolean spawnableFarFromPlayer,
-        ImmutableSet<Block> canSpawnInside,
-        EntityDimensions dimensions,
-        float spawnBoxScale,
-        int maxTrackDistance,
-        int trackTickInterval,
-        FeatureFlagSet requiredFeatures
-    ) {
+    public EntityType(EntityType.EntityFactory<T> factory, MobCategory spawnGroup, boolean saveable, boolean summonable, boolean fireImmune, boolean spawnableFarFromPlayer, ImmutableSet<Block> canSpawnInside, EntityDimensions dimensions, float spawnBoxScale, int maxTrackDistance, int trackTickInterval, FeatureFlagSet requiredFeatures) {
+       // Paper start
+        this(factory, spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnInside, dimensions, spawnBoxScale, maxTrackDistance, trackTickInterval, requiredFeatures, "custom");
+    }
+    public EntityType(EntityType.EntityFactory<T> factory, MobCategory spawnGroup, boolean saveable, boolean summonable, boolean fireImmune, boolean spawnableFarFromPlayer, ImmutableSet<Block> canSpawnInside, EntityDimensions dimensions, float spawnBoxScale, int maxTrackDistance, int trackTickInterval, FeatureFlagSet requiredFeatures, String id) {
+        this.tickTimer = co.aikar.timings.MinecraftTimings.getEntityTimings(id, "tick");
+        this.inactiveTickTimer = co.aikar.timings.MinecraftTimings.getEntityTimings(id, "inactiveTick");
+        this.passengerTickTimer = co.aikar.timings.MinecraftTimings.getEntityTimings(id, "passengerTick");
+        this.passengerInactiveTickTimer = co.aikar.timings.MinecraftTimings.getEntityTimings(id, "passengerInactiveTick");
+        // Paper end
+        this.builtInRegistryHolder = BuiltInRegistries.ENTITY_TYPE.createIntrusiveHolder(this);
         this.factory = factory;
         this.category = spawnGroup;
         this.canSpawnFarFromPlayer = spawnableFarFromPlayer;
@@ -893,98 +364,154 @@
     }
 
     @Nullable
-    public T spawn(
-        ServerLevel world, @Nullable ItemStack stack, @Nullable Player player, BlockPos pos, MobSpawnType spawnReason, boolean alignPosition, boolean invertY
-    ) {
-        Consumer<T> consumer;
-        if (stack != null) {
-            consumer = createDefaultStackConfig(world, stack, player);
+    public T spawn(ServerLevel world, @Nullable ItemStack stack, @Nullable Player player, BlockPos pos, MobSpawnType spawnReason, boolean alignPosition, boolean invertY) {
+        // CraftBukkit start
+        return this.spawn(world, stack, player, pos, spawnReason, alignPosition, invertY, spawnReason == MobSpawnType.DISPENSER ? org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DISPENSE_EGG : org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER_EGG); // Paper - use correct spawn reason for dispenser spawn eggs
+    }
+
+    @Nullable
+    public T spawn(ServerLevel worldserver, @Nullable ItemStack itemstack, @Nullable Player entityhuman, BlockPos blockposition, MobSpawnType enummobspawn, boolean flag, boolean flag1, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) {
+        // CraftBukkit end
+        Consumer<T> consumer; // CraftBukkit - decompile error
+
+        if (itemstack != null) {
+            consumer = EntityType.createDefaultStackConfig(worldserver, itemstack, entityhuman);
         } else {
-            consumer = entity -> {
+            consumer = (entity) -> {
             };
         }
 
-        return this.spawn(world, consumer, pos, spawnReason, alignPosition, invertY);
+        return this.spawn(worldserver, consumer, blockposition, enummobspawn, flag, flag1, spawnReason); // CraftBukkit
     }
 
     public static <T extends Entity> Consumer<T> createDefaultStackConfig(ServerLevel world, ItemStack stack, @Nullable Player player) {
-        return appendDefaultStackConfig(entity -> {
+        return EntityType.appendDefaultStackConfig((entity) -> {
         }, world, stack, player);
     }
 
     public static <T extends Entity> Consumer<T> appendDefaultStackConfig(Consumer<T> chained, ServerLevel world, ItemStack stack, @Nullable Player player) {
-        return appendCustomEntityStackConfig(appendCustomNameConfig(chained, stack), world, stack, player);
+        return EntityType.appendCustomEntityStackConfig(EntityType.appendCustomNameConfig(chained, stack), world, stack, player);
     }
 
     public static <T extends Entity> Consumer<T> appendCustomNameConfig(Consumer<T> chained, ItemStack stack) {
-        Component component = stack.get(DataComponents.CUSTOM_NAME);
-        return component != null ? chained.andThen(entity -> entity.setCustomName(component)) : chained;
+        Component ichatbasecomponent = (Component) stack.get(DataComponents.CUSTOM_NAME);
+
+        return ichatbasecomponent != null ? chained.andThen((entity) -> {
+            entity.setCustomName(ichatbasecomponent);
+        }) : chained;
     }
 
     public static <T extends Entity> Consumer<T> appendCustomEntityStackConfig(Consumer<T> chained, ServerLevel world, ItemStack stack, @Nullable Player player) {
-        CustomData customData = stack.getOrDefault(DataComponents.ENTITY_DATA, CustomData.EMPTY);
-        return !customData.isEmpty() ? chained.andThen(entity -> updateCustomEntityTag(world, player, entity, customData)) : chained;
+        CustomData customdata = (CustomData) stack.getOrDefault(DataComponents.ENTITY_DATA, CustomData.EMPTY);
+
+        return !customdata.isEmpty() ? chained.andThen((entity) -> {
+            try { EntityType.updateCustomEntityTag(world, player, entity, customdata); } catch (Throwable t) { EntityType.LOGGER.warn("Error loading spawn egg NBT", t); } // CraftBukkit - SPIGOT-5665
+        }) : chained;
     }
 
     @Nullable
     public T spawn(ServerLevel world, BlockPos pos, MobSpawnType reason) {
-        return this.spawn(world, null, pos, reason, false, false);
+        // CraftBukkit start
+        return this.spawn(world, pos, reason, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DEFAULT);
+    }
+
+    @Nullable
+    public T spawn(ServerLevel worldserver, BlockPos blockposition, MobSpawnType enummobspawn, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) {
+        return this.spawn(worldserver, (Consumer<T>) null, blockposition, enummobspawn, false, false, spawnReason); // CraftBukkit - decompile error
+        // CraftBukkit end
     }
 
     @Nullable
     public T spawn(ServerLevel world, @Nullable Consumer<T> afterConsumer, BlockPos pos, MobSpawnType reason, boolean alignPosition, boolean invertY) {
-        T entity = this.create(world, afterConsumer, pos, reason, alignPosition, invertY);
-        if (entity != null) {
-            world.addFreshEntityWithPassengers(entity);
+        // CraftBukkit start
+        return this.spawn(world, afterConsumer, pos, reason, alignPosition, invertY, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DEFAULT);
+    }
+
+    @Nullable
+    public T spawn(ServerLevel worldserver, @Nullable Consumer<T> consumer, BlockPos blockposition, MobSpawnType enummobspawn, boolean flag, boolean flag1, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) {
+        // CraftBukkit end
+        // Paper start - PreCreatureSpawnEvent
+        com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent event = new com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent(
+            io.papermc.paper.util.MCUtil.toLocation(worldserver, blockposition),
+            org.bukkit.craftbukkit.entity.CraftEntityType.minecraftToBukkit(this),
+            spawnReason
+        );
+        if (!event.callEvent()) {
+            return null;
         }
+        // Paper end - PreCreatureSpawnEvent
+        T t0 = this.create(worldserver, consumer, blockposition, enummobspawn, flag, flag1);
 
-        return entity;
+        if (t0 != null) {
+            worldserver.addFreshEntityWithPassengers(t0, spawnReason);
+            return !t0.isRemoved() ? t0 : null; // Don't return an entity when CreatureSpawnEvent is canceled
+            // CraftBukkit end
+        }
+
+        return t0;
     }
 
     @Nullable
     public T create(ServerLevel world, @Nullable Consumer<T> afterConsumer, BlockPos pos, MobSpawnType reason, boolean alignPosition, boolean invertY) {
-        T entity = this.create(world);
-        if (entity == null) {
+        T t0 = this.create(world);
+
+        if (t0 == null) {
             return null;
         } else {
-            double d;
+            double d0;
+
             if (alignPosition) {
-                entity.setPos((double)pos.getX() + 0.5, (double)(pos.getY() + 1), (double)pos.getZ() + 0.5);
-                d = getYOffset(world, pos, invertY, entity.getBoundingBox());
+                t0.setPos((double) pos.getX() + 0.5D, (double) (pos.getY() + 1), (double) pos.getZ() + 0.5D);
+                d0 = EntityType.getYOffset(world, pos, invertY, t0.getBoundingBox());
             } else {
-                d = 0.0;
+                d0 = 0.0D;
             }
 
-            entity.moveTo((double)pos.getX() + 0.5, (double)pos.getY() + d, (double)pos.getZ() + 0.5, Mth.wrapDegrees(world.random.nextFloat() * 360.0F), 0.0F);
-            if (entity instanceof Mob mob) {
-                mob.yHeadRot = mob.getYRot();
-                mob.yBodyRot = mob.getYRot();
-                mob.finalizeSpawn(world, world.getCurrentDifficultyAt(mob.blockPosition()), reason, null);
-                mob.playAmbientSound();
+            t0.moveTo((double) pos.getX() + 0.5D, (double) pos.getY() + d0, (double) pos.getZ() + 0.5D, Mth.wrapDegrees(world.random.nextFloat() * 360.0F), 0.0F);
+            if (t0 instanceof Mob) {
+                Mob entityinsentient = (Mob) t0;
+
+                entityinsentient.yHeadRot = entityinsentient.getYRot();
+                entityinsentient.yBodyRot = entityinsentient.getYRot();
+                entityinsentient.finalizeSpawn(world, world.getCurrentDifficultyAt(entityinsentient.blockPosition()), reason, (SpawnGroupData) null);
+                entityinsentient.playAmbientSound();
             }
 
             if (afterConsumer != null) {
-                afterConsumer.accept(entity);
+                afterConsumer.accept(t0);
             }
 
-            return entity;
+            return t0;
         }
     }
 
     protected static double getYOffset(LevelReader world, BlockPos pos, boolean invertY, AABB boundingBox) {
-        AABB aABB = new AABB(pos);
+        AABB axisalignedbb1 = new AABB(pos);
+
         if (invertY) {
-            aABB = aABB.expandTowards(0.0, -1.0, 0.0);
+            axisalignedbb1 = axisalignedbb1.expandTowards(0.0D, -1.0D, 0.0D);
         }
 
-        Iterable<VoxelShape> iterable = world.getCollisions(null, aABB);
-        return 1.0 + Shapes.collide(Direction.Axis.Y, boundingBox, iterable, invertY ? -2.0 : -1.0);
+        Iterable<VoxelShape> iterable = world.getCollisions((Entity) null, axisalignedbb1);
+
+        return 1.0D + Shapes.collide(Direction.Axis.Y, boundingBox, iterable, invertY ? -2.0D : -1.0D);
     }
 
     public static void updateCustomEntityTag(Level world, @Nullable Player player, @Nullable Entity entity, CustomData nbt) {
-        MinecraftServer minecraftServer = world.getServer();
-        if (minecraftServer != null && entity != null) {
-            if (world.isClientSide || !entity.onlyOpCanSetNbt() || player != null && minecraftServer.getPlayerList().isOp(player.getGameProfile())) {
+        MinecraftServer minecraftserver = world.getServer();
+
+        if (minecraftserver != null && entity != null) {
+            if (world.isClientSide || !entity.onlyOpCanSetNbt() || player != null && minecraftserver.getPlayerList().isOp(player.getGameProfile())) {
+                    // Paper start - filter out protected tags
+                    if (player == null || !player.getBukkitEntity().hasPermission("minecraft.nbt.place")) {
+                        nbt = nbt.update((compound) -> {
+                            for (net.minecraft.commands.arguments.NbtPathArgument.NbtPath tag : world.paperConfig().entities.spawning.filteredEntityTagNbtPaths) {
+                                tag.remove(compound);
+                            }
+                        });
+                    }
+                    // Paper end - filter out protected tags
+
                 nbt.loadInto(entity);
             }
         }
@@ -1026,20 +553,21 @@
         return this.description;
     }
 
-    @Override
     public String toString() {
         return this.getDescriptionId();
     }
 
     public String toShortString() {
         int i = this.getDescriptionId().lastIndexOf(46);
+
         return i == -1 ? this.getDescriptionId() : this.getDescriptionId().substring(i + 1);
     }
 
     public ResourceKey<LootTable> getDefaultLootTable() {
         if (this.lootTable == null) {
-            ResourceLocation resourceLocation = BuiltInRegistries.ENTITY_TYPE.getKey(this);
-            this.lootTable = ResourceKey.create(Registries.LOOT_TABLE, resourceLocation.withPrefix("entities/"));
+            ResourceLocation minecraftkey = BuiltInRegistries.ENTITY_TYPE.getKey(this);
+
+            this.lootTable = ResourceKey.create(Registries.LOOT_TABLE, minecraftkey.withPrefix("entities/"));
         }
 
         return this.lootTable;
@@ -1064,28 +592,30 @@
     }
 
     public static Optional<Entity> create(CompoundTag nbt, Level world) {
-        return Util.ifElse(
-            by(nbt).map(entityType -> entityType.create(world)),
-            entity -> entity.load(nbt),
-            () -> LOGGER.warn("Skipping Entity with id {}", nbt.getString("id"))
-        );
+        // Paper start - Don't fire sync event during generation
+        return create(nbt, world, false);
+    }
+    public static Optional<Entity> create(CompoundTag nbt, Level world, boolean generation) {
+        // Paper end - Don't fire sync event during generation
+        return Util.ifElse(EntityType.by(nbt).map((entitytypes) -> {
+            return entitytypes.create(world);
+        }), (entity) -> {
+            if (generation) entity.generation = true; // Paper - Don't fire sync event during generation
+            entity.load(nbt);
+        }, () -> {
+            EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id"));
+        });
     }
 
     public AABB getSpawnAABB(double x, double y, double z) {
         float f = this.spawnDimensionsScale * this.getWidth() / 2.0F;
-        float g = this.spawnDimensionsScale * this.getHeight();
-        return new AABB(x - (double)f, y, z - (double)f, x + (double)f, y + (double)g, z + (double)f);
+        float f1 = this.spawnDimensionsScale * this.getHeight();
+
+        return new AABB(x - (double) f, y, z - (double) f, x + (double) f, y + (double) f1, z + (double) f);
     }
 
     public boolean isBlockDangerous(BlockState state) {
-        return !this.immuneTo.contains(state.getBlock())
-            && (
-                !this.fireImmune && NodeEvaluator.isBurningBlock(state)
-                    || state.is(Blocks.WITHER_ROSE)
-                    || state.is(Blocks.SWEET_BERRY_BUSH)
-                    || state.is(Blocks.CACTUS)
-                    || state.is(Blocks.POWDER_SNOW)
-            );
+        return this.immuneTo.contains(state.getBlock()) ? false : (!this.fireImmune && NodeEvaluator.isBurningBlock(state) ? true : state.is(Blocks.WITHER_ROSE) || state.is(Blocks.SWEET_BERRY_BUSH) || state.is(Blocks.CACTUS) || state.is(Blocks.POWDER_SNOW));
     }
 
     public EntityDimensions getDimensions() {
@@ -1093,49 +623,60 @@
     }
 
     public static Optional<EntityType<?>> by(CompoundTag nbt) {
-        return BuiltInRegistries.ENTITY_TYPE.getOptional(new ResourceLocation(nbt.getString("id")));
+        return BuiltInRegistries.ENTITY_TYPE.getOptional(ResourceLocation.tryParse(nbt.getString("id"))); // Paper - Validate ResourceLocation
     }
 
     @Nullable
     public static Entity loadEntityRecursive(CompoundTag nbt, Level world, Function<Entity, Entity> entityProcessor) {
-        return loadStaticEntity(nbt, world).map(entityProcessor).map(entity -> {
+        return (Entity) EntityType.loadStaticEntity(nbt, world).map(entityProcessor).map((entity) -> {
             if (nbt.contains("Passengers", 9)) {
-                ListTag listTag = nbt.getList("Passengers", 10);
+                ListTag nbttaglist = nbt.getList("Passengers", 10);
 
-                for (int i = 0; i < listTag.size(); i++) {
-                    Entity entity2 = loadEntityRecursive(listTag.getCompound(i), world, entityProcessor);
-                    if (entity2 != null) {
-                        entity2.startRiding(entity, true);
+                for (int i = 0; i < nbttaglist.size(); ++i) {
+                    Entity entity1 = EntityType.loadEntityRecursive(nbttaglist.getCompound(i), world, entityProcessor);
+
+                    if (entity1 != null) {
+                        entity1.startRiding(entity, true);
                     }
                 }
             }
 
-            return (Entity)entity;
-        }).orElse(null);
+            return entity;
+        }).orElse(null); // CraftBukkit - decompile error
     }
 
-    public static Stream<Entity> loadEntitiesRecursive(List<? extends Tag> entityNbtList, Level world) {
+    public static Stream<Entity> loadEntitiesRecursive(final List<? extends Tag> entityNbtList, final Level world) {
         final Spliterator<? extends Tag> spliterator = entityNbtList.spliterator();
+
         return StreamSupport.stream(new Spliterator<Entity>() {
-            @Override
+            final java.util.Map<EntityType<?>, Integer> loadedEntityCounts = new java.util.HashMap<>(); // Paper - Entity load/save limit per chunk
             public boolean tryAdvance(Consumer<? super Entity> consumer) {
-                return spliterator.tryAdvance(nbt -> EntityType.loadEntityRecursive((CompoundTag)nbt, world, entity -> {
+                return spliterator.tryAdvance((nbtbase) -> {
+                    EntityType.loadEntityRecursive((CompoundTag) nbtbase, world, (entity) -> {
+                        // Paper start - Entity load/save limit per chunk
+                        final EntityType<?> entityType = entity.getType();
+                        final int saveLimit = world.paperConfig().chunks.entityPerChunkSaveLimit.getOrDefault(entityType, -1);
+                        if (saveLimit > -1) {
+                            if (this.loadedEntityCounts.getOrDefault(entityType, 0) >= saveLimit) {
+                                return null;
+                            }
+                            this.loadedEntityCounts.merge(entityType, 1, Integer::sum);
+                        }
+                        // Paper end - Entity load/save limit per chunk
                         consumer.accept(entity);
                         return entity;
-                    }));
+                    });
+                });
             }
 
-            @Override
             public Spliterator<Entity> trySplit() {
                 return null;
             }
 
-            @Override
             public long estimateSize() {
-                return (long)entityNbtList.size();
+                return (long) entityNbtList.size();
             }
 
-            @Override
             public int characteristics() {
                 return 1297;
             }
@@ -1144,9 +685,9 @@
 
     private static Optional<Entity> loadStaticEntity(CompoundTag nbt, Level world) {
         try {
-            return create(nbt, world);
-        } catch (RuntimeException var3) {
-            LOGGER.warn("Exception loading entity: ", (Throwable)var3);
+            return EntityType.create(nbt, world);
+        } catch (RuntimeException runtimeexception) {
+            EntityType.LOGGER.warn("Exception loading entity: ", runtimeexception);
             return Optional.empty();
         }
     }
@@ -1159,17 +700,14 @@
         return this.updateInterval;
     }
 
+    // Paper start - timings
+    public final co.aikar.timings.Timing tickTimer;
+    public final co.aikar.timings.Timing inactiveTickTimer;
+    public final co.aikar.timings.Timing passengerTickTimer;
+    public final co.aikar.timings.Timing passengerInactiveTickTimer;
+    // Paper end
     public boolean trackDeltas() {
-        return this != PLAYER
-            && this != LLAMA_SPIT
-            && this != WITHER
-            && this != BAT
-            && this != ITEM_FRAME
-            && this != GLOW_ITEM_FRAME
-            && this != LEASH_KNOT
-            && this != PAINTING
-            && this != END_CRYSTAL
-            && this != EVOKER_FANGS;
+        return this != EntityType.PLAYER && this != EntityType.LLAMA_SPIT && this != EntityType.WITHER && this != EntityType.BAT && this != EntityType.ITEM_FRAME && this != EntityType.GLOW_ITEM_FRAME && this != EntityType.LEASH_KNOT && this != EntityType.PAINTING && this != EntityType.END_CRYSTAL && this != EntityType.EVOKER_FANGS;
     }
 
     public boolean is(TagKey<EntityType<?>> tag) {
@@ -1181,9 +719,8 @@
     }
 
     @Nullable
-    @Override
     public T tryCast(Entity obj) {
-        return (T)(obj.getType() == this ? obj : null);
+        return obj.getType() == this ? (T) obj : null; // CraftBukkit - decompile error
     }
 
     @Override
@@ -1191,12 +728,14 @@
         return Entity.class;
     }
 
+    /** @deprecated */
     @Deprecated
     public Holder.Reference<EntityType<?>> builtInRegistryHolder() {
         return this.builtInRegistryHolder;
     }
 
     public static class Builder<T extends Entity> {
+
         private final EntityType.EntityFactory<T> factory;
         private final MobCategory category;
         private ImmutableSet<Block> immuneTo = ImmutableSet.of();
@@ -1209,20 +748,23 @@
         private EntityDimensions dimensions = EntityDimensions.scalable(0.6F, 1.8F);
         private float spawnDimensionsScale = 1.0F;
         private EntityAttachments.Builder attachments = EntityAttachments.builder();
-        private FeatureFlagSet requiredFeatures = FeatureFlags.VANILLA_SET;
+        private FeatureFlagSet requiredFeatures;
 
         private Builder(EntityType.EntityFactory<T> factory, MobCategory spawnGroup) {
+            this.requiredFeatures = FeatureFlags.VANILLA_SET;
             this.factory = factory;
             this.category = spawnGroup;
             this.canSpawnFarFromPlayer = spawnGroup == MobCategory.CREATURE || spawnGroup == MobCategory.MISC;
         }
 
-        public static <T extends Entity> EntityType.Builder<T> of(EntityType.EntityFactory<T> factory, MobCategory spawnGroup) {
+        public static <T extends Entity> EntityType.Builder<T> of(EntityType.EntityFactory factory, MobCategory spawnGroup) { // CraftBukkit - decompile error
             return new EntityType.Builder<>(factory, spawnGroup);
         }
 
         public static <T extends Entity> EntityType.Builder<T> createNothing(MobCategory spawnGroup) {
-            return new EntityType.Builder<>((type, world) -> null, spawnGroup);
+            return new EntityType.Builder<>((entitytypes, world) -> {
+                return null;
+            }, spawnGroup);
         }
 
         public EntityType.Builder<T> sized(float width, float height) {
@@ -1241,7 +783,12 @@
         }
 
         public EntityType.Builder<T> passengerAttachments(float... offsetYs) {
-            for (float f : offsetYs) {
+            float[] afloat1 = offsetYs;
+            int i = offsetYs.length;
+
+            for (int j = 0; j < i; ++j) {
+                float f = afloat1[j];
+
                 this.attachments = this.attachments.attach(EntityAttachment.PASSENGER, 0.0F, f, 0.0F);
             }
 
@@ -1249,8 +796,13 @@
         }
 
         public EntityType.Builder<T> passengerAttachments(Vec3... passengerAttachments) {
-            for (Vec3 vec3 : passengerAttachments) {
-                this.attachments = this.attachments.attach(EntityAttachment.PASSENGER, vec3);
+            Vec3[] avec3d1 = passengerAttachments;
+            int i = passengerAttachments.length;
+
+            for (int j = 0; j < i; ++j) {
+                Vec3 vec3d = avec3d1[j];
+
+                this.attachments = this.attachments.attach(EntityAttachment.PASSENGER, vec3d);
             }
 
             return this;
@@ -1323,24 +875,12 @@
                 Util.fetchChoiceType(References.ENTITY_TREE, id);
             }
 
-            return new EntityType<>(
-                this.factory,
-                this.category,
-                this.serialize,
-                this.summon,
-                this.fireImmune,
-                this.canSpawnFarFromPlayer,
-                this.immuneTo,
-                this.dimensions.withAttachments(this.attachments),
-                this.spawnDimensionsScale,
-                this.clientTrackingRange,
-                this.updateInterval,
-                this.requiredFeatures
-            );
+            return new EntityType<>(this.factory, this.category, this.serialize, this.summon, this.fireImmune, this.canSpawnFarFromPlayer, this.immuneTo, this.dimensions.withAttachments(this.attachments), this.spawnDimensionsScale, this.clientTrackingRange, this.updateInterval, this.requiredFeatures, id); // Paper - add id
         }
     }
 
     public interface EntityFactory<T extends Entity> {
+
         T create(EntityType<T> type, Level world);
     }
 }
