2025-11-24 22:52:51 +03:00

166 lines
4.5 KiB
Java

/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* org.jspecify.annotations.Nullable
*/
package net.minecraft.world.inventory;
import java.util.Optional;
import net.minecraft.resources.Identifier;
import net.minecraft.world.Container;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import org.jspecify.annotations.Nullable;
public class Slot {
private final int slot;
public final Container container;
public int index;
public final int x;
public final int y;
public Slot(Container container, int slot, int x, int y) {
this.container = container;
this.slot = slot;
this.x = x;
this.y = y;
}
public void onQuickCraft(ItemStack picked, ItemStack original) {
int count = original.getCount() - picked.getCount();
if (count > 0) {
this.onQuickCraft(original, count);
}
}
protected void onQuickCraft(ItemStack picked, int count) {
}
protected void onSwapCraft(int count) {
}
protected void checkTakeAchievements(ItemStack carried) {
}
public void onTake(Player player, ItemStack carried) {
this.setChanged();
}
public boolean mayPlace(ItemStack itemStack) {
return true;
}
public ItemStack getItem() {
return this.container.getItem(this.slot);
}
public boolean hasItem() {
return !this.getItem().isEmpty();
}
public void setByPlayer(ItemStack itemStack) {
this.setByPlayer(itemStack, this.getItem());
}
public void setByPlayer(ItemStack itemStack, ItemStack previous) {
this.set(itemStack);
}
public void set(ItemStack itemStack) {
this.container.setItem(this.slot, itemStack);
this.setChanged();
}
public void setChanged() {
this.container.setChanged();
}
public int getMaxStackSize() {
return this.container.getMaxStackSize();
}
public int getMaxStackSize(ItemStack itemStack) {
return Math.min(this.getMaxStackSize(), itemStack.getMaxStackSize());
}
public @Nullable Identifier getNoItemIcon() {
return null;
}
public ItemStack remove(int amount) {
return this.container.removeItem(this.slot, amount);
}
public boolean mayPickup(Player player) {
return true;
}
public boolean isActive() {
return true;
}
public Optional<ItemStack> tryRemove(int amount, int maxAmount, Player player) {
if (!this.mayPickup(player)) {
return Optional.empty();
}
if (!this.allowModification(player) && maxAmount < this.getItem().getCount()) {
return Optional.empty();
}
ItemStack result = this.remove(amount = Math.min(amount, maxAmount));
if (result.isEmpty()) {
return Optional.empty();
}
if (this.getItem().isEmpty()) {
this.setByPlayer(ItemStack.EMPTY, result);
}
return Optional.of(result);
}
public ItemStack safeTake(int amount, int maxAmount, Player player) {
Optional<ItemStack> result = this.tryRemove(amount, maxAmount, player);
result.ifPresent(item -> this.onTake(player, (ItemStack)item));
return result.orElse(ItemStack.EMPTY);
}
public ItemStack safeInsert(ItemStack stack) {
return this.safeInsert(stack, stack.getCount());
}
public ItemStack safeInsert(ItemStack inputStack, int inputAmount) {
if (inputStack.isEmpty() || !this.mayPlace(inputStack)) {
return inputStack;
}
ItemStack slotStack = this.getItem();
int transferableItemCount = Math.min(Math.min(inputAmount, inputStack.getCount()), this.getMaxStackSize(inputStack) - slotStack.getCount());
if (transferableItemCount <= 0) {
return inputStack;
}
if (slotStack.isEmpty()) {
this.setByPlayer(inputStack.split(transferableItemCount));
} else if (ItemStack.isSameItemSameComponents(slotStack, inputStack)) {
inputStack.shrink(transferableItemCount);
slotStack.grow(transferableItemCount);
this.setByPlayer(slotStack);
}
return inputStack;
}
public boolean allowModification(Player player) {
return this.mayPickup(player) && this.mayPlace(this.getItem());
}
public int getContainerSlot() {
return this.slot;
}
public boolean isHighlightable() {
return true;
}
public boolean isFake() {
return false;
}
}