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

70 lines
1.6 KiB
Java

package net.minecraft.world.inventory;
import net.minecraft.network.HashedPatchMap;
import net.minecraft.network.HashedStack;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.Nullable;
public interface RemoteSlot {
RemoteSlot PLACEHOLDER = new RemoteSlot() {
@Override
public void receive(HashedStack stack) {
}
@Override
public void force(ItemStack stack) {
}
@Override
public boolean matches(ItemStack stack) {
return true;
}
};
void force(ItemStack stack);
void receive(HashedStack stack);
boolean matches(ItemStack stack);
public static class Synchronized implements RemoteSlot {
private final HashedPatchMap.HashGenerator hasher;
@Nullable
private ItemStack remoteStack = null;
@Nullable
private HashedStack remoteHash = null;
public Synchronized(HashedPatchMap.HashGenerator hasher) {
this.hasher = hasher;
}
@Override
public void force(ItemStack stack) {
this.remoteStack = stack.copy();
this.remoteHash = null;
}
@Override
public void receive(HashedStack stack) {
this.remoteStack = null;
this.remoteHash = stack;
}
@Override
public boolean matches(ItemStack stack) {
if (this.remoteStack != null) {
return ItemStack.matches(this.remoteStack, stack);
} else if (this.remoteHash != null && this.remoteHash.matches(stack, this.hasher)) {
this.remoteStack = stack.copy();
return true;
} else {
return false;
}
}
public void copyFrom(RemoteSlot.Synchronized other) {
this.remoteStack = other.remoteStack;
this.remoteHash = other.remoteHash;
}
}
}