public byte[] create() throws IOException { List<Patch> patches = this.project.getIncludedPatches(); int length = 0; length += HEADER_LENGTH; int indicesLength = Offset.SIZE * patches.size(); length += indicesLength; byte[] metadataBytes = project.getAuthor().getBytes("UTF-8"); length += metadataBytes.length; length += (Offset.SIZE * patches.size()); for (Patch patch : patches) { length += patch.getValue().getBytesLength(); } byte[] mod = new byte[length]; writeBytes(mod, new byte[] {(byte) 0xFF, 0x50, 0x54, 0x50, 0x00, (byte) patches.size()}, 0); writeBytes(mod, metadataBytes, HEADER_LENGTH + indicesLength); int patchStart = HEADER_LENGTH + indicesLength + metadataBytes.length; for (int i = 0; i < patches.size(); i++) { Patch patch = patches.get(i); writeBytes(mod, Value.intToByteArray(patchStart), HEADER_LENGTH + Offset.SIZE * i); int offsetBytesLength = writeBytes(mod, patch.getOffset().getBytes(), patchStart); int valueBytesLength = writeBytes(mod, patch.getValue().getBytes(), patchStart + Offset.SIZE); patchStart += (offsetBytesLength + valueBytesLength); } return mod; }