70 lines
1.6 KiB
Java
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;
|
|
}
|
|
}
|
|
}
|