package net.minecraft.world.entity; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.annotation.Nullable; import net.minecraft.core.component.DataComponents; import net.minecraft.resources.ResourceKey; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.equipment.Equippable; import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.LootTable; public interface EquipmentUser { void setItemSlot(EquipmentSlot p_333752_, ItemStack p_331668_); ItemStack getItemBySlot(EquipmentSlot p_329199_); void setDropChance(EquipmentSlot p_331517_, float p_334697_); default void equip(EquipmentTable p_331159_, LootParams p_332346_) { this.equip(p_331159_.lootTable(), p_332346_, p_331159_.slotDropChances()); } default void equip(ResourceKey p_329232_, LootParams p_330675_, Map p_328003_) { this.equip(p_329232_, p_330675_, 0L, p_328003_); } default void equip(ResourceKey p_331471_, LootParams p_333826_, long p_331881_, Map p_328541_) { LootTable loottable = p_333826_.getLevel().getServer().reloadableRegistries().getLootTable(p_331471_); if (loottable != LootTable.EMPTY) { List list = loottable.getRandomItems(p_333826_, p_331881_); List list1 = new ArrayList<>(); for (ItemStack itemstack : list) { EquipmentSlot equipmentslot = this.resolveSlot(itemstack, list1); if (equipmentslot != null) { ItemStack itemstack1 = equipmentslot.limit(itemstack); this.setItemSlot(equipmentslot, itemstack1); Float f = p_328541_.get(equipmentslot); if (f != null) { this.setDropChance(equipmentslot, f); } list1.add(equipmentslot); } } } } @Nullable default EquipmentSlot resolveSlot(ItemStack p_329649_, List p_334449_) { if (p_329649_.isEmpty()) { return null; } else { Equippable equippable = p_329649_.get(DataComponents.EQUIPPABLE); if (equippable != null) { EquipmentSlot equipmentslot = equippable.slot(); if (!p_334449_.contains(equipmentslot)) { return equipmentslot; } } else if (!p_334449_.contains(EquipmentSlot.MAINHAND)) { return EquipmentSlot.MAINHAND; } return null; } } }