60 lines
1.7 KiB
Java
60 lines
1.7 KiB
Java
package net.minecraft.world.inventory;
|
|
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.world.Container;
|
|
import net.minecraft.world.entity.EquipmentSlot;
|
|
import net.minecraft.world.entity.LivingEntity;
|
|
import net.minecraft.world.entity.player.Player;
|
|
import net.minecraft.world.item.ItemStack;
|
|
import net.minecraft.world.item.enchantment.EnchantmentEffectComponents;
|
|
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
class ArmorSlot extends Slot {
|
|
private final LivingEntity owner;
|
|
private final EquipmentSlot slot;
|
|
@Nullable
|
|
private final ResourceLocation emptyIcon;
|
|
|
|
public ArmorSlot(Container container, LivingEntity owner, EquipmentSlot slot, int slotIndex, int x, int y, @Nullable ResourceLocation emptyIcon) {
|
|
super(container, slotIndex, x, y);
|
|
this.owner = owner;
|
|
this.slot = slot;
|
|
this.emptyIcon = emptyIcon;
|
|
}
|
|
|
|
@Override
|
|
public void setByPlayer(ItemStack newStack, ItemStack oldStack) {
|
|
this.owner.onEquipItem(this.slot, oldStack, newStack);
|
|
super.setByPlayer(newStack, oldStack);
|
|
}
|
|
|
|
@Override
|
|
public int getMaxStackSize() {
|
|
return 1;
|
|
}
|
|
|
|
@Override
|
|
public boolean mayPlace(ItemStack stack) {
|
|
return this.owner.isEquippableInSlot(stack, this.slot);
|
|
}
|
|
|
|
@Override
|
|
public boolean isActive() {
|
|
return this.owner.canUseSlot(this.slot);
|
|
}
|
|
|
|
@Override
|
|
public boolean mayPickup(Player player) {
|
|
ItemStack itemStack = this.getItem();
|
|
return !itemStack.isEmpty() && !player.isCreative() && EnchantmentHelper.has(itemStack, EnchantmentEffectComponents.PREVENT_ARMOR_CHANGE)
|
|
? false
|
|
: super.mayPickup(player);
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public ResourceLocation getNoItemIcon() {
|
|
return this.emptyIcon;
|
|
}
|
|
}
|