Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
static addR(ItemStack[] in, ItemStack[] out) {
recipes.put(in, out);
}
onTick() {
if(recipes.contains(getArrayOfItems())) {
Додумать
}
}
Где-то уже был такой метод. По моему в самом ItemStack'е.Oldestkon написал(а):Сделать враппер для итемстака, который будет генерировать хеш из ID + метадаты, опционально количества.
public static boolean areItemStacksEqual(ItemStack stackA, ItemStack stackB) {
return stackA == null &&
stackB == null ? true : (
stackA != null &&
stackB != null ? stackA.isItemStackEqual(stackB) : false);
}
private boolean isItemStackEqual(ItemStack other) {
return this.stackSize != other.stackSize
? false : (this.item != other.item ? false : (
this.itemDamage != other.itemDamage ? false : (
this.stackTagCompound == null && other.stackTagCompound != null ? false :
this.stackTagCompound == null || this.stackTagCompound.equals(other.stackTagCompound))));
}
public class ItemStackHash{
private ItemStack iStack;
private boolean doCheckNBT = false;
private boolean doCheckStackSize = false;
private boolean doCheckDamage = false;
public ItemStackHash(Block block){
this(block, 1);
}
public ItemStackHash(Block block, int count){
this(block, count, 0);
}
public ItemStackHash(Block block, int count, int damage){
this(Item.getItemFromBlock(block), count, damage);
}
public ItemStackHash(Item item){
this(item, 1);
}
public ItemStackHash(Item item, int count){
this(item, count, 0);
}
public ItemStackHash(Item item, int count, int damage){
iStack = new ItemStack(Preconditions.checkNotNull(item, "Item is null!"), count, damage);
}
public ItemStackHash(ItemStack itemStack){
iStack = Preconditions.checkNotNull(itemStack, "ItemStack is null!");
}
private ItemStackHash(){
throw new UnsupportedOperationException("Unsupported empty constructor!");
}
public ItemStackHash setDoCheckDamage(){
doCheckDamage = true;
return this;
}
public ItemStackHash setDoCheckStackSize(){
doCheckStackSize = true;
return this;
}
public ItemStackHash setDoCheckNBT(){
doCheckNBT = true;
return this;
}
public ItemStackHash setChecks(ItemStackHash parent){
doCheckNBT = parent.doCheckNBT;
doCheckDamage = parent.doCheckDamage;
doCheckStackSize = parent.doCheckStackSize;
return this;
}
public ItemStack getItemStack(){
return iStack;
}
public int hashCode(){
final int prime = 31;
int result = 1;
result = prime * result + Item.getIdFromItem(iStack.getItem());
result = prime * result + (doCheckDamage ? iStack.getItemDamage() : 0);
result = prime * result + (doCheckStackSize ? iStack.stackSize : 0);
result = prime * result + (doCheckNBT && iStack.hasTagCompound() ? iStack.stackTagCompound.hashCode() : 0);
return result;
}
public boolean equals(Object obj) {
if(!(obj instanceof ItemStackHash)){
return false;
}
ItemStackHash hashStack = (ItemStackHash)obj;
if(Item.getIdFromItem(iStack.getItem()) != Item.getIdFromItem(hashStack.iStack.getItem())){
return false;
}
if(doCheckDamage && iStack.getItemDamage() != hashStack.iStack.getItemDamage()){
return false;
}
if(doCheckNBT && iStack.stackTagCompound != hashStack.iStack.stackTagCompound){
return false;
}
if(doCheckStackSize && iStack.stackSize != hashStack.iStack.stackSize){
return false;
}
return true;
}
public String toString(){
return iStack.toString();
}
}
Точно, как раз думал об этом. Будем знать.Oldestkon написал(а):Фёрстик выше правильно написал.
Дело в том, что надо создать класс-враппер, который перезапишет equals и hashcode, иначе ты не сможешь использовать итемстак как ключ в хешкарте.