public static ResearchItem copy(ResearchItem res, String newKey, String newCat, int dC, int dR) { ResearchItem rItem; if (res.icon_resource != null) rItem = new ResearchItem( newKey, newCat, res.tags, dC, dR, res.getComplexity(), Object[].class.cast(res.icon_resource)); else rItem = new ResearchItem( newKey, newCat, res.tags, dC, dR, res.getComplexity(), Object[].class.cast(res.icon_item)); rItem.parents = res.parents; rItem.parentsHidden = res.parentsHidden; rItem.siblings = res.siblings; rItem.setPages(res.getPages()); rItem.setHidden(); if (res.isAutoUnlock()) rItem.setAutoUnlock(); if (res.isFlipped()) rItem.setFlipped(); if (res.isHidden()) rItem.setHidden(); if (res.isRound()) rItem.setRound(); if (res.isSecondary()) rItem.setSecondary(); if (res.isSpecial()) rItem.setSpecial(); if (res.isStub()) rItem.setStub(); if (res.siblings != null && res.siblings.length > 0) { String[] sibStr = new String[res.siblings.length + 1]; for (int i = 0; i < res.siblings.length; ++i) sibStr[i] = res.siblings[i]; sibStr[sibStr.length - 1] = newKey; res.setSiblings(sibStr); } else { res.setSiblings(newKey); } if (rItem.siblings != null && rItem.siblings.length > 0) { String[] sibStr = new String[rItem.siblings.length + 1]; for (int i = 0; i < rItem.siblings.length; ++i) sibStr[i] = rItem.siblings[i]; sibStr[sibStr.length - 1] = res.key; rItem.setSiblings(sibStr); } else { rItem.setSiblings(res.key); } return rItem; }