mirror of
https://github.com/Pumpkin-MC/Pumpkin.git
synced 2026-08-30 20:14:23 +00:00
Implements the full vanilla Minecraft 26.2 mob equipment system, giving mobs weapons, armor, enchantments, and loot-pickup flags at spawn. Added: - Data-driven EQUIPMENT_REGISTRY mapping 13 mob types (zombie, husk, zombie_villager, drowned, zombified_piglin, skeleton, stray, bogged, wither_skeleton, piglin, pillager, vindicator) to their weapon and armor configurations, all verified against decompiled vanilla sources. - Exact vanilla RegionalDifficulty formula from DifficultyInstance.java: computes effective_difficulty and special_multiplier from base difficulty, game time, chunk inhabited time, and moon phase. When special_multiplier is 0.0 (fresh Normal/Easy worlds), equipment, enchantments, and loot-pickup flags are suppressed, matching vanilla. - Vanilla-accurate armor selection: random base tier (0-2) with up to 3 upgrade attempts at 10.87% each, partial armor break chance (10% on Hard, 25% otherwise). Higher difficulty produces fewer pieces. - Weighted enchantment selection with exclusive-set conflict resolution and cost-based level determination. Curated flat pools per equipment category (melee/trident/bow/crossbow/fishing_rod/head/chest/legs/feet). - Per-slot equipment drop chances (0.085 default) with looting bonus (+lootingLevel * 0.01 per vanilla EnchantmentHelper). - Exact vanilla drop durability formula from Mob.dropCustomDeathLoot: damage = maxDamage - random(1 + random(max(maxDamage-3, 1))). - CAN_PICK_UP_LOOT mob flag (bit 3, value 8) set probabilistically at 55% * special_multiplier. - Guard against empty equipment packets in send_equipment_changes to prevent client decode crashes. - Chunk inhabited_time tracking in world tick for difficulty scaling. Integration: equip_mob_on_spawn is called from the blanket EntityBase::init_data_tracker impl, so every mob type automatically participates. New mobs are added by inserting a MobEquipmentDef into the EQUIPMENT_REGISTRY with their weapon/armor config. cargo check: passes / cargo clippy (pedantic): 0 warnings / cargo fmt: clean