/** * * A method to serialize an {@link ItemStack} array to Base64 String. * * <p /> * * Based off of {@link #toBase64(Inventory)}. * * @param items to turn into a Base64 String. * @return Base64 string of the items. * @throws IllegalStateException */ public static String itemStackArrayToBase64(ItemStack[] items) throws IllegalStateException { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); // Write the size of the inventory dataOutput.writeInt(items.length); // Save every element in the list for (int i = 0; i < items.length; i++) { dataOutput.writeObject(items[i]); } // Serialize that array dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Unable to save item stacks.", e); } }
/** * A method to serialize an inventory to Base64 string. * * <p /> * * Special thanks to Comphenix in the Bukkit forums or also known * as aadnk on GitHub. * * <a href="https://gist.github.com/aadnk/8138186">Original Source</a> * * @param inventory to serialize * @return Base64 string of the provided inventory * @throws IllegalStateException */ public static String toBase64(Inventory inventory) throws IllegalStateException { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); dataOutput.writeInt(inventory.getSize()); for (int i = 0; i < inventory.getSize(); i++) { dataOutput.writeObject(inventory.getItem(i)); } dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Unable to save item stacks.", e); } }
/** * * @param items * @return A base64 encoded String * @throws IllegalStateException * * It encodes an {@link ItemStack} array to a base64 String */ public static String itemStackArrayToBase64(ItemStack[] items) throws IllegalStateException { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); dataOutput.writeInt(items.length); for (int i = 0; i < items.length; i++) { dataOutput.writeObject(items[i]); } dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Unable to save item stacks.", e); } }
public static String itemStackArrayToBase64(ItemStack[] items) throws IllegalStateException { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); // Write the size of the inventory dataOutput.writeInt(items.length); // Save every element in the list for (int i = 0; i < items.length; i++) { dataOutput.writeObject(items[i]); } // Serialize that array dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Unable to save item stacks.", e); } }
/** * Serializes a ItemStack array to a byte array. * * @param itemStacks The ItemStacks that should be serialized. * @return Serialized ItemsStacks as byte array. null if serialization failed. */ @Override public byte[] serialize(ItemStack[] itemStacks) { byte[] ba = null; if(itemStacks != null) { try(ByteArrayOutputStream b = new ByteArrayOutputStream(); BukkitObjectOutputStream output = new BukkitObjectOutputStream(b)) { output.writeObject(itemStacks); output.flush(); ba = b.toByteArray(); } catch(Exception e) { e.printStackTrace(); } } return ba; }
private void saveEnderchest(Inventory inv) { Map<String, Object> enderchest = new HashMap<String, Object>(); for(int slot = 0; slot < inv.getSize(); slot++) { ItemStack item = inv.getItem(slot); if(item != null) { enderchest.put(String.valueOf(slot), inv.getItem(slot).serialize()); } } try { ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); BukkitObjectOutputStream out = new BukkitObjectOutputStream(byteOut); out.writeObject(enderchest); out.close(); this.database.setValue(this.key + ".enderchest", byteOut.toByteArray()); } catch(Exception e) { this.module.getLogger().log(Level.SEVERE, "Failed to save enderchest.", e); } }
public static String toBase64(Inventory inventory) throws IllegalStateException { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); // Write the size of the inventory dataOutput.writeInt(inventory.getSize()); // Save every element in the list for (int i = 0; i < inventory.getSize(); i++) { dataOutput.writeObject(inventory.getItem(i)); } // Serialize that array dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Unable to save item stacks.", e); } }
public static String serializeItemStack(ItemStack inv) { try { ByteArrayOutputStream os = new ByteArrayOutputStream(); BukkitObjectOutputStream bos = new BukkitObjectOutputStream(os); bos.writeObject(inv); String hex = BukkitObjectUtil.byteArrayToHexString(os.toByteArray()); bos.close(); os.close(); return hex; } catch (IOException ex) { ex.printStackTrace(); } return null; }
public static String serializeItemStacks(ItemStack[] inv) { try { ByteArrayOutputStream os = new ByteArrayOutputStream(); BukkitObjectOutputStream bos = new BukkitObjectOutputStream(os); bos.writeObject(inv); String hex = BukkitObjectUtil.byteArrayToHexString(os.toByteArray()); bos.close(); os.close(); return hex; } catch (IOException ex) { ex.printStackTrace(); } return null; }
public static String serializePotionEffects(Collection<PotionEffect> effects) { PotionEffect[] eff = new PotionEffect[effects.size()]; int count = 0; for (PotionEffect effect : effects) { eff[count] = effect; count++; } try { ByteArrayOutputStream os = new ByteArrayOutputStream(); BukkitObjectOutputStream bos = new BukkitObjectOutputStream(os); bos.writeObject(eff); String hex = BukkitObjectUtil.byteArrayToHexString(os.toByteArray()); bos.close(); os.close(); return hex; } catch (IOException ex) { ex.printStackTrace(); } return null; }
public static String toBase64(Inventory inventory) { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); // Write the size of the inventory dataOutput.writeInt(inventory.getSize()); // Save every element in the list for (int i = 0; i < inventory.getSize(); i++) { dataOutput.writeObject(inventory.getItem(i)); } // Serialize that array dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Unable to save item stacks.", e); } }
public void save(NBTCompoundTag rootTag) throws IOException { rootTag.setTag("X", new NBTShortTag((short)(location.getBlockX() - location.getChunk().getX() * 16))); rootTag.setTag("Y", new NBTShortTag((short)location.getBlockY())); rootTag.setTag("Z", new NBTShortTag((short)(location.getBlockZ() - location.getChunk().getZ() * 16))); ByteArrayOutputStream baos = new ByteArrayOutputStream(); BukkitObjectOutputStream boos = new BukkitObjectOutputStream(baos); boos.writeObject( items ); rootTag.setTag("BukkitItemStackArray", new NBTByteArrayTag(baos.toByteArray())); boos.close(); rootTag.setTag("InventoryType", new NBTStringTag(invType.name())); }
/** * Transfer a inventory into a string * * @param inventory Inventory * @return String */ @Deprecated public static String inventoryToString(Inventory inventory) { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); // Write the size of the inventory dataOutput.writeInt(inventory.getSize()); // Save every element in the list for (int i = 0; i < inventory.getSize(); i++) { dataOutput.writeObject(inventory.getItem(i)); } // Serialize that array dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Unable to save item stacks.", e); } }
public static String toBase64(Inventory inventory) { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); // Write the size of the inventory dataOutput.writeInt(inventory.getSize()); // Save every element in the list for (int i = 0; i < inventory.getSize(); i++) { dataOutput.writeObject(inventory.getItem(i)); } // Serialize that array dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Cannot into itemstacksz!", e); } }
/** * * A method to serialize an {@link ItemStack} array to Base64 String. * * <p> * * Based off of {@link #toBase64(Inventory)}. * * @param items to turn into a Base64 String. * @return Base64 string of the items. * @throws IllegalStateException if any of the {@link ItemStack}s couldn't be parsed */ public static String itemStackArrayToBase64(ItemStack[] items) throws IllegalStateException { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); // Write the size of the inventory dataOutput.writeInt(items.length); // Save every element in the list for (ItemStack item : items) { dataOutput.writeObject(item); } // Serialize that array dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Unable to save item stacks.", e); } }
/** * A method to serialize an inventory to Base64 string. * * <p> * * Special thanks to Comphenix in the Bukkit forums or also known * as aadnk on GitHub. <a href="https://gist.github.com/aadnk/8138186">Original Source</a> * * @param inventory to serialize * @return Base64 string of the provided inventory * @throws IllegalStateException if any of the {@link ItemStack}s couldn't be parsed */ public static String toBase64(Inventory inventory) throws IllegalStateException { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); // Write the size of the inventory dataOutput.writeInt(inventory.getSize()); // Save every element in the list for (int i = 0; i < inventory.getSize(); i++) { dataOutput.writeObject(inventory.getItem(i)); } // Serialize that array dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Unable to save item stacks.", e); } }
public static byte[] encodeItemStack(ItemStack item) { try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { try (BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream)) { dataOutput.writeObject(item); return outputStream.toByteArray(); } } catch (IOException e) { throw new RuntimeException(e); } }
public static byte[] encodeItemStacks(ItemStack[] items) { try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { try (BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream)) { dataOutput.writeInt(items.length); for (ItemStack item : items) { dataOutput.writeObject(item); } return outputStream.toByteArray(); } } catch (IOException e) { throw new RuntimeException(e); } }
public static byte[] encodeInventory(Inventory inventory) { try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { try (BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream)) { dataOutput.writeInt(inventory.getSize()); for (int i = 0; i < inventory.getSize(); i++) { dataOutput.writeObject(inventory.getItem(i)); } return outputStream.toByteArray(); } } catch (IOException e) { throw new RuntimeException(e); } }
@Test public void testSerialize() throws Exception { BukkitItemStackSerializer serializer = new BukkitItemStackSerializer(); assertNull("Serialized data should be null", serializer.serialize(null)); assertNull("Serialized data should be null when an error occurs", serializer.serialize(new ItemStack[] { new ItemStack(Material.APPLE, 10) })); BukkitObjectOutputStream mockedOutputStream = mock(BukkitObjectOutputStream.class); doNothing().when(mockedOutputStream).writeObject(any(at.pcgamingfreaks.TestClasses.NMS.ItemStack[].class)); doNothing().when(mockedOutputStream).flush(); whenNew(BukkitObjectOutputStream.class).withArguments(any(ByteArrayOutputStream.class)).thenReturn(mockedOutputStream); assertNotNull("Serialized data should not be null", serializer.serialize(new ItemStack[] { new ItemStack(Material.APPLE, 10) })); doThrow(new IOException()).when(mockedOutputStream).writeObject(any(at.pcgamingfreaks.TestClasses.NMS.ItemStack[].class)); assertNull("Serialized data should be null when an error occurs", serializer.serialize(new ItemStack[] { new ItemStack(Material.APPLE, 10) })); }
/** * Serialize an ItemStack to a JsonObject. * <p> * The item itself will be saved as a Base64 encoded string to * simplify the serialization and deserialization process. The result is * not human readable. * </p> * * @param item The item to serialize. * @param index The position in the inventory. * @return A JsonObject with the serialized item. */ public JsonObject serializeItem(ItemStack item, int index) { JsonObject values = new JsonObject(); if (item == null) return null; /* * Check to see if the item is a skull with a null owner. * This is because some people are getting skulls with null owners, which causes Spigot to throw an error * when it tries to serialize the item. If this ever gets fixed in Spigot, this will be removed. */ if (item.getType() == Material.SKULL_ITEM) { SkullMeta meta = (SkullMeta) item.getItemMeta(); if (meta.hasOwner() && (meta.getOwner() == null || meta.getOwner().isEmpty())) { item.setItemMeta(plugin.getServer().getItemFactory().getItemMeta(Material.SKULL_ITEM)); } } values.addProperty("index", index); try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream bos = new BukkitObjectOutputStream(outputStream)) { bos.writeObject(item); String encoded = Base64Coder.encodeLines(outputStream.toByteArray()); values.addProperty("item", encoded); } catch (IOException ex) { ConsoleLogger.severe("Unable to serialize item '" + item.getType().toString() + "':", ex); return null; } return values; }
public static JSONObject serializeItem(ItemStack item, boolean useIndex, int index) { try { JSONObject values = new JSONObject(); if (item == null) { return null; } /* * Check to see if the item is a skull with a null owner. * This is because some people are getting skulls with null owners, which causes Spigot to throw an error * when it tries to serialize the item. If this ever gets fixed in Spigot, this will be removed. */ if (item.getType() == Material.SKULL_ITEM) { SkullMeta meta = (SkullMeta) item.getItemMeta(); if (meta.hasOwner() && (meta.getOwner() == null || meta.getOwner().isEmpty())) { item.setItemMeta(NexusInventory.getInstance().getServer().getItemFactory().getItemMeta(Material.SKULL_ITEM)); } } if (useIndex) { values.put("index", index); } ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataObject = new BukkitObjectOutputStream(outputStream); dataObject.writeObject(item); dataObject.close(); values.put("item", Base64Coder.encodeLines(outputStream.toByteArray())); return values; } catch (JSONException | IOException ex) { ex.printStackTrace(); return null; } }
public static String toBase64(Inventory inventory, int maxItems) { if (maxItems <= 0) maxItems = inventory.getSize(); else if (maxItems > inventory.getSize()) maxItems = inventory.getSize(); try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); // Write the size of the inventory dataOutput.writeInt(maxItems); // Save every element in the list for (int i = 0; i < maxItems; i++) { ItemStack stack = inventory.getItem(i); Attributes attributes = stack == null ? null : new Attributes(stack); dataOutput.writeObject(stack); if (attributes != null) { dataOutput.writeInt(attributes.size()); for (Attributes.Attribute a : attributes.values()) { String s = Joiner.on(";;").join( a.getUUID().toString(), a.getOperation(), a.getName(), a.getAmount(), a.getAttributeType().getMinecraftId() ); dataOutput.writeObject(s); } } else { dataOutput.writeInt(0); } } // Serialize that array dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (IOException e) { throw new IllegalStateException("Unable to save item stacks.", e); } }
/** * * @param obj * @return An Base64 String of an {@link Object} * * */ public static String toBase64Obj(Object obj) { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); dataOutput.writeObject(obj); dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Unable to save obj.", e); } }
private void saveInventory(PlayerInventory inv) { Map<String, Object> inventory = new HashMap<String, Object>(); for(int slot = 0; slot < inv.getSize(); slot++) { ItemStack item = inv.getItem(slot); if(item != null) { inventory.put(String.valueOf(slot), inv.getItem(slot).serialize()); } } ItemStack helmet = inv.getHelmet(); ItemStack chestplate = inv.getChestplate(); ItemStack leggings = inv.getLeggings(); ItemStack boots = inv.getBoots(); if(helmet != null) { inventory.put("helmet", helmet.serialize()); } if(chestplate != null) { inventory.put("chestplate", chestplate.serialize()); } if(leggings != null) { inventory.put("leggings", leggings.serialize()); } if(boots != null) { inventory.put("boots", boots.serialize()); } try { ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); BukkitObjectOutputStream out = new BukkitObjectOutputStream(byteOut); out.writeObject(inventory); out.close(); this.database.setValue(this.key + ".inventory", byteOut.toByteArray()); } catch(IOException e) { this.module.getLogger().log(Level.SEVERE, "Failed to save inventory.", e); } }