minecraft-src/net/minecraft/world/inventory/MerchantResultSlot.java
2025-07-04 03:45:38 +03:00

65 lines
1.9 KiB
Java

package net.minecraft.world.inventory;
import net.minecraft.stats.Stats;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.trading.Merchant;
import net.minecraft.world.item.trading.MerchantOffer;
public class MerchantResultSlot extends Slot {
private final MerchantContainer slots;
private final Player player;
private int removeCount;
private final Merchant merchant;
public MerchantResultSlot(Player player, Merchant merchant, MerchantContainer slots, int slot, int xPosition, int yPosition) {
super(slots, slot, xPosition, yPosition);
this.player = player;
this.merchant = merchant;
this.slots = slots;
}
@Override
public boolean mayPlace(ItemStack stack) {
return false;
}
@Override
public ItemStack remove(int amount) {
if (this.hasItem()) {
this.removeCount = this.removeCount + Math.min(amount, this.getItem().getCount());
}
return super.remove(amount);
}
@Override
protected void onQuickCraft(ItemStack stack, int amount) {
this.removeCount += amount;
this.checkTakeAchievements(stack);
}
@Override
protected void checkTakeAchievements(ItemStack stack) {
stack.onCraftedBy(this.player, this.removeCount);
this.removeCount = 0;
}
@Override
public void onTake(Player player, ItemStack stack) {
this.checkTakeAchievements(stack);
MerchantOffer merchantOffer = this.slots.getActiveOffer();
if (merchantOffer != null) {
ItemStack itemStack = this.slots.getItem(0);
ItemStack itemStack2 = this.slots.getItem(1);
if (merchantOffer.take(itemStack, itemStack2) || merchantOffer.take(itemStack2, itemStack)) {
this.merchant.notifyTrade(merchantOffer);
player.awardStat(Stats.TRADED_WITH_VILLAGER);
this.slots.setItem(0, itemStack);
this.slots.setItem(1, itemStack2);
}
this.merchant.overrideXp(this.merchant.getVillagerXp() + merchantOffer.getXp());
}
}
}