Code/net/minecraft/core/dispenser/EquipmentDispenseItemBehavi...

38 lines
1.6 KiB
Java
Raw Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.core.dispenser;
import java.util.List;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.DispenserBlock;
import net.minecraft.world.phys.AABB;
public class EquipmentDispenseItemBehavior extends DefaultDispenseItemBehavior {
public static final EquipmentDispenseItemBehavior INSTANCE = new EquipmentDispenseItemBehavior();
@Override
protected ItemStack execute(BlockSource p_361136_, ItemStack p_365597_) {
return dispenseEquipment(p_361136_, p_365597_) ? p_365597_ : super.execute(p_361136_, p_365597_);
}
public static boolean dispenseEquipment(BlockSource p_366555_, ItemStack p_367321_) {
BlockPos blockpos = p_366555_.pos().relative(p_366555_.state().getValue(DispenserBlock.FACING));
List<LivingEntity> list = p_366555_.level().getEntitiesOfClass(LivingEntity.class, new AABB(blockpos), p_368089_ -> p_368089_.canEquipWithDispenser(p_367321_));
if (list.isEmpty()) {
return false;
} else {
LivingEntity livingentity = list.getFirst();
EquipmentSlot equipmentslot = livingentity.getEquipmentSlotForItem(p_367321_);
ItemStack itemstack = p_367321_.split(1);
livingentity.setItemSlot(equipmentslot, itemstack);
if (livingentity instanceof Mob mob) {
mob.setGuaranteedDrop(equipmentslot);
mob.setPersistenceRequired();
}
return true;
}
}
}