@Override public void encode() { calculateMassAndFuelCapacity(); byte[] data; if (isFullDesign) { data = new byte[4 + 13 + 4 * slotCount + nameBytes.length]; } else { data = new byte[6 + nameBytes.length]; } if (isFullDesign) data[0] = 7; else data[0] = 3; data[1] = 1; data[1] |= designNumber << 2; if (isTransferred) data[1] |= 0x80; if (isStarbase) data[1] |= 0x40; data[2] = (byte) hullId; data[3] = (byte) pic; int index; if (isFullDesign) { Util.write16(data, 4, armor); data[6] = (byte) slotCount; Util.write16(data, 7, turnDesigned); Util.write32(data, 9, totalBuilt); Util.write32(data, 13, totalRemaining); index = 17; for (Slot slot : slots) { Util.write16(data, index, slot.category); index += 2; data[index++] = (byte) slot.itemId; data[index++] = (byte) slot.count; } } else { Util.write16(data, 4, mass); index = 6; } System.arraycopy(nameBytes, 0, data, index, nameBytes.length); setDecryptedData(data, data.length); setData(data, data.length); encrypted = false; }