@Override public int hashCode() { int hash = 7; hash = 41 * hash + stack.getItem().hashCode(); hash = 41 * hash + stack.getItemDamage(); hash = 41 * hash + stack.getCount(); hash = 41 * hash + (stack.getTagCompound() == null ? 0 : stack.getTagCompound().hashCode()); hash = 41 * hash + (this.wildcardSize ? 1 : 0); return hash; }
@Override public IData getTag() { if (tag == null) { if (stack.getTagCompound() == null) { return DataMap.EMPTY; } tag = NBTConverter.from(stack.getTagCompound(), true); } return tag; }
@Override public IItemStack removeTag(String tag) { ItemStack result = new ItemStack(stack.getItem(), stack.getCount(), stack.getItemDamage()); if (tag == null) { result.setTagCompound(null); } else { result.getTagCompound().removeTag(tag); } IData dataTag = NBTConverter.from(result.getTagCompound(), false); return new MCItemStack(result, dataTag); }
@Override public IItemStack updateTag(IData tagUpdate) { if (tag == null) { if (stack.getTagCompound() == null) { return withTag(tagUpdate); } tag = NBTConverter.from(stack.getTagCompound(), true); } IData updated = tag.update(tagUpdate); return withTag(updated); }
@Override public IItemStack withDamage(int damage) { if (stack.getItem().getHasSubtypes()) { MineTweakerAPI.logWarning("subitems don't have damaged states"); return this; } else { ItemStack result = new ItemStack(stack.getItem(), stack.getCount(), damage); result.setTagCompound(stack.getTagCompound()); return new MCItemStack(result, tag); } }
@Override public String toString() { StringBuilder result = new StringBuilder(); result.append('<'); result.append(Item.REGISTRY.getNameForObject(stack.getItem())); if (stack.getItemDamage() == OreDictionary.WILDCARD_VALUE) { result.append(":*"); } else if (stack.getItemDamage() > 0) { result.append(':').append(stack.getItemDamage()); } result.append('>'); if (stack.getTagCompound() != null) { result.append(".withTag("); result.append(NBTConverter.from(stack.getTagCompound(), wildcardSize).toString()); result.append(")"); } return result.toString(); }
@Override public IIngredient anyDamage() { if (stack.getItem().getHasSubtypes()) { MineTweakerAPI.logWarning("subitems don't have damaged states"); return this; } else { ItemStack result = new ItemStack(stack.getItem(), stack.getCount(), OreDictionary.WILDCARD_VALUE); result.setTagCompound(stack.getTagCompound()); return new MCItemStack(result, tag); } }
@Override public boolean matchesExact(IItemStack item) { ItemStack internal = getItemStack(item); if (internal.getTagCompound() != null && stack.getTagCompound() == null) { return false; } if (internal.getTagCompound() == null && stack.getTagCompound() != null) { return false; } if (internal.getTagCompound() == null && stack.getTagCompound() == null) { return stack.getItem() == internal.getItem() && (internal.getMetadata() == 32767 || stack.getMetadata() == internal.getMetadata()); } if (internal.getTagCompound().getKeySet().equals(stack.getTagCompound().getKeySet())) { for (String s : internal.getTagCompound().getKeySet()) { if (!internal.getTagCompound().getTag(s).equals(stack.getTagCompound().getTag(s))) { return false; } } } return stack.getItem() == internal.getItem() && (internal.getMetadata() == 32767 || stack.getMetadata() == internal.getMetadata()); }
@Override public IItemStack withAmount(int amount) { ItemStack result = new ItemStack(stack.getItem(), amount, stack.getItemDamage()); result.setTagCompound(stack.getTagCompound()); return new MCItemStack(result, tag); }
@Override public IItemStack anyAmount() { ItemStack result = new ItemStack(stack.getItem(), 1, stack.getItemDamage()); result.setTagCompound(stack.getTagCompound()); return new MCItemStack(result, tag, true); }