165 lines
4.6 KiB
Java
165 lines
4.6 KiB
Java
package net.minecraft.world.inventory;
|
|
|
|
import java.util.Optional;
|
|
import javax.annotation.Nullable;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.world.Container;
|
|
import net.minecraft.world.entity.player.Player;
|
|
import net.minecraft.world.item.ItemStack;
|
|
|
|
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 p_40223_, int p_40224_, int p_40225_, int p_40226_) {
|
|
this.container = p_40223_;
|
|
this.slot = p_40224_;
|
|
this.x = p_40225_;
|
|
this.y = p_40226_;
|
|
}
|
|
|
|
public void onQuickCraft(ItemStack p_40235_, ItemStack p_40236_) {
|
|
int i = p_40236_.getCount() - p_40235_.getCount();
|
|
if (i > 0) {
|
|
this.onQuickCraft(p_40236_, i);
|
|
}
|
|
}
|
|
|
|
protected void onQuickCraft(ItemStack p_40232_, int p_40233_) {
|
|
}
|
|
|
|
protected void onSwapCraft(int p_40237_) {
|
|
}
|
|
|
|
protected void checkTakeAchievements(ItemStack p_40239_) {
|
|
}
|
|
|
|
public void onTake(Player p_150645_, ItemStack p_150646_) {
|
|
this.setChanged();
|
|
}
|
|
|
|
public boolean mayPlace(ItemStack p_40231_) {
|
|
return true;
|
|
}
|
|
|
|
public ItemStack getItem() {
|
|
return this.container.getItem(this.slot);
|
|
}
|
|
|
|
public boolean hasItem() {
|
|
return !this.getItem().isEmpty();
|
|
}
|
|
|
|
public void setByPlayer(ItemStack p_270152_) {
|
|
this.setByPlayer(p_270152_, this.getItem());
|
|
}
|
|
|
|
public void setByPlayer(ItemStack p_299954_, ItemStack p_301385_) {
|
|
this.set(p_299954_);
|
|
}
|
|
|
|
public void set(ItemStack p_40240_) {
|
|
this.container.setItem(this.slot, p_40240_);
|
|
this.setChanged();
|
|
}
|
|
|
|
public void setChanged() {
|
|
this.container.setChanged();
|
|
}
|
|
|
|
public int getMaxStackSize() {
|
|
return this.container.getMaxStackSize();
|
|
}
|
|
|
|
public int getMaxStackSize(ItemStack p_40238_) {
|
|
return Math.min(this.getMaxStackSize(), p_40238_.getMaxStackSize());
|
|
}
|
|
|
|
@Nullable
|
|
public ResourceLocation getNoItemIcon() {
|
|
return null;
|
|
}
|
|
|
|
public ItemStack remove(int p_40227_) {
|
|
return this.container.removeItem(this.slot, p_40227_);
|
|
}
|
|
|
|
public boolean mayPickup(Player p_40228_) {
|
|
return true;
|
|
}
|
|
|
|
public boolean isActive() {
|
|
return true;
|
|
}
|
|
|
|
public Optional<ItemStack> tryRemove(int p_150642_, int p_150643_, Player p_150644_) {
|
|
if (!this.mayPickup(p_150644_)) {
|
|
return Optional.empty();
|
|
} else if (!this.allowModification(p_150644_) && p_150643_ < this.getItem().getCount()) {
|
|
return Optional.empty();
|
|
} else {
|
|
p_150642_ = Math.min(p_150642_, p_150643_);
|
|
ItemStack itemstack = this.remove(p_150642_);
|
|
if (itemstack.isEmpty()) {
|
|
return Optional.empty();
|
|
} else {
|
|
if (this.getItem().isEmpty()) {
|
|
this.setByPlayer(ItemStack.EMPTY, itemstack);
|
|
}
|
|
|
|
return Optional.of(itemstack);
|
|
}
|
|
}
|
|
}
|
|
|
|
public ItemStack safeTake(int p_150648_, int p_150649_, Player p_150650_) {
|
|
Optional<ItemStack> optional = this.tryRemove(p_150648_, p_150649_, p_150650_);
|
|
optional.ifPresent(p_150655_ -> this.onTake(p_150650_, p_150655_));
|
|
return optional.orElse(ItemStack.EMPTY);
|
|
}
|
|
|
|
public ItemStack safeInsert(ItemStack p_150660_) {
|
|
return this.safeInsert(p_150660_, p_150660_.getCount());
|
|
}
|
|
|
|
public ItemStack safeInsert(ItemStack p_150657_, int p_150658_) {
|
|
if (!p_150657_.isEmpty() && this.mayPlace(p_150657_)) {
|
|
ItemStack itemstack = this.getItem();
|
|
int i = Math.min(Math.min(p_150658_, p_150657_.getCount()), this.getMaxStackSize(p_150657_) - itemstack.getCount());
|
|
if (i <= 0) {
|
|
return p_150657_;
|
|
} else {
|
|
if (itemstack.isEmpty()) {
|
|
this.setByPlayer(p_150657_.split(i));
|
|
} else if (ItemStack.isSameItemSameComponents(itemstack, p_150657_)) {
|
|
p_150657_.shrink(i);
|
|
itemstack.grow(i);
|
|
this.setByPlayer(itemstack);
|
|
}
|
|
|
|
return p_150657_;
|
|
}
|
|
} else {
|
|
return p_150657_;
|
|
}
|
|
}
|
|
|
|
public boolean allowModification(Player p_150652_) {
|
|
return this.mayPickup(p_150652_) && this.mayPlace(this.getItem());
|
|
}
|
|
|
|
public int getContainerSlot() {
|
|
return this.slot;
|
|
}
|
|
|
|
public boolean isHighlightable() {
|
|
return true;
|
|
}
|
|
|
|
public boolean isFake() {
|
|
return false;
|
|
}
|
|
} |