From 51b7896f0247c3c0583d3d694de712054a49f286 Mon Sep 17 00:00:00 2001 From: Brianna Date: Wed, 26 Aug 2020 16:32:47 -0500 Subject: [PATCH] Overhauled entity serialization system. --- .../utils/structure/StructureUtil.java | 28 ++- .../utils/world/entity/EntityData.java | 138 ++++++++++ .../utils/world/entity/EntityUtil.java | 238 +----------------- 3 files changed, 160 insertions(+), 244 deletions(-) diff --git a/src/main/java/com/songoda/skyblock/utils/structure/StructureUtil.java b/src/main/java/com/songoda/skyblock/utils/structure/StructureUtil.java index dbc16a54..b764d78c 100644 --- a/src/main/java/com/songoda/skyblock/utils/structure/StructureUtil.java +++ b/src/main/java/com/songoda/skyblock/utils/structure/StructureUtil.java @@ -5,6 +5,8 @@ import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.nms.NmsManager; +import com.songoda.core.nms.nbt.NBTEntity; import com.songoda.skyblock.SkyBlock; import com.songoda.skyblock.config.FileManager; import com.songoda.skyblock.utils.Compression; @@ -30,10 +32,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Base64; -import java.util.LinkedHashMap; -import java.util.List; +import java.util.*; import java.util.logging.Level; import java.util.regex.Pattern; @@ -185,11 +184,22 @@ public final class StructureUtil { }.getType())) { Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(SkyBlock.getInstance(), () -> { try { - org.bukkit.Location blockRotationLocation = LocationUtil.rotateLocation(new org.bukkit.Location(location.getWorld(), entityDataList.getX(), entityDataList.getY(), entityDataList.getZ()), type); - org.bukkit.Location blockLocation = new org.bukkit.Location(location.getWorld(), location.getX() - Math.abs(Integer.parseInt(storage.getOriginLocation().split(":")[0])), - location.getY() - Integer.parseInt(storage.getOriginLocation().split(":")[1]), location.getZ() + Math.abs(Integer.parseInt(storage.getOriginLocation().split(":")[2]))); - blockLocation.add(blockRotationLocation); - EntityUtil.convertEntityDataToEntity(entityDataList, blockLocation, type); + if (entityDataList.getSerializedNBT() != null) { + org.bukkit.Location blockRotationLocation = LocationUtil.rotateLocation(new org.bukkit.Location(location.getWorld(), entityDataList.getX(), entityDataList.getY(), entityDataList.getZ()), type); + org.bukkit.Location blockLocation = new org.bukkit.Location(location.getWorld(), location.getX() - Math.abs(Integer.parseInt(storage.getOriginLocation().split(":")[0])), + location.getY() - Integer.parseInt(storage.getOriginLocation().split(":")[1]), location.getZ() + Math.abs(Integer.parseInt(storage.getOriginLocation().split(":")[2]))); + blockLocation.add(blockRotationLocation); + NBTEntity nbtEntity = NmsManager.getNbt().newEntity(); + nbtEntity.deSerialize(entityDataList.getSerializedNBT()); + nbtEntity.set("UUID", UUID.randomUUID()); + nbtEntity.spawn(blockLocation); + } else { + org.bukkit.Location blockRotationLocation = LocationUtil.rotateLocation(new org.bukkit.Location(location.getWorld(), entityDataList.getX(), entityDataList.getY(), entityDataList.getZ()), type); + org.bukkit.Location blockLocation = new org.bukkit.Location(location.getWorld(), location.getX() - Math.abs(Integer.parseInt(storage.getOriginLocation().split(":")[0])), + location.getY() - Integer.parseInt(storage.getOriginLocation().split(":")[1]), location.getZ() + Math.abs(Integer.parseInt(storage.getOriginLocation().split(":")[2]))); + blockLocation.add(blockRotationLocation); + EntityUtil.convertEntityDataToEntity(entityDataList, blockLocation, type); + } } catch (Exception e) { SkyBlock.getInstance().getLogger().warning("Unable to convert EntityData to Entity for type {" + entityDataList.getEntityType() + "} in structure {" + structure.getStructureFile() + "}"); } diff --git a/src/main/java/com/songoda/skyblock/utils/world/entity/EntityData.java b/src/main/java/com/songoda/skyblock/utils/world/entity/EntityData.java index 111cfea9..907386c0 100644 --- a/src/main/java/com/songoda/skyblock/utils/world/entity/EntityData.java +++ b/src/main/java/com/songoda/skyblock/utils/world/entity/EntityData.java @@ -2,6 +2,8 @@ package com.songoda.skyblock.utils.world.entity; public class EntityData { + private byte[] serializedNBT; + private String entityType; private String hand; private String helmet; @@ -71,6 +73,7 @@ public class EntityData { private boolean ai; private boolean baby; + @Deprecated public EntityData(String entityType, double x, double y, double z, String customName, boolean customNameVisible, int fireTicks, int ticksLived) { this.entityType = entityType; @@ -88,226 +91,297 @@ public class EntityData { this.ai = true; } + public EntityData(byte[] serializedNBT, double x, double y, double z) { + this.serializedNBT = serializedNBT; + this.x = x; + this.y = y; + this.z = z; + } + + public byte[] getSerializedNBT() { + return serializedNBT; + } + + public void setSerializedNBT(byte[] serializedNBT) { + this.serializedNBT = serializedNBT; + } + + @Deprecated public String getEntityType() { return entityType; } + @Deprecated public void setEntityType(String entityType) { this.entityType = entityType; } + @Deprecated public String getHand() { return this.hand; } + @Deprecated public void setHand(String hand) { this.hand = hand; } + @Deprecated public String getHelmet() { return this.helmet; } + @Deprecated public void setHelmet(String helmet) { this.helmet = helmet; } + @Deprecated public String getChestplate() { return this.chestplate; } + @Deprecated public void setChestplate(String chestplate) { this.chestplate = chestplate; } + @Deprecated public String getLeggings() { return this.leggings; } + @Deprecated public void setLeggings(String leggings) { this.leggings = leggings; } + @Deprecated public String getBoots() { return this.boots; } + @Deprecated public void setBoots(String boots) { this.boots = boots; } + @Deprecated public String getBodyPose() { return this.bodyPose; } + @Deprecated public void setBodyPose(String bodyPose) { this.bodyPose = bodyPose; } + @Deprecated public String getHeadPose() { return this.headPose; } + @Deprecated public void setHeadPose(String headPose) { this.headPose = headPose; } + @Deprecated public String getLeftArmPose() { return this.leftArmPose; } + @Deprecated public void setLeftArmPose(String leftArmPose) { this.leftArmPose = leftArmPose; } + @Deprecated public String getLeftLegPose() { return this.leftLegPose; } + @Deprecated public void setLeftLegPose(String leftLegPose) { this.leftLegPose = leftLegPose; } + @Deprecated public String getRightArmPose() { return this.rightArmPose; } + @Deprecated public void setRightArmPose(String rightArmPose) { this.rightArmPose = rightArmPose; } + @Deprecated public String getRightLegPose() { return this.rightLegPose; } + @Deprecated public void setRightLegPose(String rightLegPose) { this.rightLegPose = rightLegPose; } + @Deprecated public String getOffHand() { return this.offHand; } + @Deprecated public void setOffHand(String offHand) { this.offHand = offHand; } + @Deprecated public String getWoodType() { return this.woodType; } + @Deprecated public void setWoodType(String woodType) { this.woodType = woodType; } + @Deprecated public String getCarryBlock() { return this.carryBlock; } + @Deprecated public void setCarryBlock(String carryBlock) { this.carryBlock = carryBlock; } + @Deprecated public String getCustomName() { return this.customName; } + @Deprecated public void setCustomName(String customName) { this.customName = customName; } + @Deprecated public String getHorseColor() { return this.horseColor; } + @Deprecated public void setHorseColor(String horseColor) { this.horseColor = horseColor; } + @Deprecated public String getHorseStyle() { return this.horseStyle; } + @Deprecated public void setHorseStyle(String horseStyle) { this.horseStyle = horseStyle; } + @Deprecated public String getItem() { return this.item; } + @Deprecated public void setItem(String item) { this.item = item; } + @Deprecated public String getRotate() { return this.rotate; } + @Deprecated public void setRotate(String rotate) { this.rotate = rotate; } + @Deprecated public String getLlamaColor() { return this.llamaColor; } + @Deprecated public void setLlamaColor(String llamaColor) { this.llamaColor = llamaColor; } + @Deprecated public String getOcelotType() { return this.ocelotType; } + @Deprecated public void setOcelotType(String ocelotType) { this.ocelotType = ocelotType; } + @Deprecated public String getArt() { return this.art; } + @Deprecated public void setArt(String art) { this.art = art; } + @Deprecated public String getParrotVariant() { return this.parrotVariant; } + @Deprecated public void setParrotVariant(String parrotVariant) { this.parrotVariant = parrotVariant; } + @Deprecated public String getRabbitType() { return this.rabbitType; } + @Deprecated public void setRabbitType(String rabbitType) { this.rabbitType = rabbitType; } + @Deprecated public String getProfession() { return this.profession; } + @Deprecated public void setProfession(String profession) { this.profession = profession; } + @Deprecated public String getColor() { return this.color; } + @Deprecated public void setColor(String color) { this.color = color; } + @Deprecated public String[] getInventory() { return this.inventory; } + @Deprecated public void setInventory(String[] inventory) { this.inventory = inventory; } @@ -336,258 +410,322 @@ public class EntityData { this.z = z; } + @Deprecated public float getHandChance() { return this.handChance; } + @Deprecated public void setHandChance(float handChance) { this.handChance = handChance; } + @Deprecated public float getOffHandChance() { return this.offHandChance; } + @Deprecated public void setOffHandChange(float offHandChange) { this.offHandChance = offHandChange; } + @Deprecated public float getHelmetChance() { return this.helmetChance; } + @Deprecated public void setHelmetChance(float helmetChance) { this.helmetChance = helmetChance; } + @Deprecated public float getChestplateChance() { return this.chestplateChance; } + @Deprecated public void setChestplateChance(float chestplateChance) { this.chestplateChance = chestplateChance; } + @Deprecated public float getLeggingsChance() { return this.leggingsChance; } + @Deprecated public void setLeggingsChance(float leggingsChance) { this.leggingsChance = leggingsChance; } + @Deprecated public float getBootsChance() { return this.bootsChance; } + @Deprecated public void setBootsChance(float bootsChance) { this.bootsChance = bootsChance; } + @Deprecated public float getYaw() { return this.yaw; } + @Deprecated public void setYaw(float yaw) { this.yaw = yaw; } + @Deprecated public float getPitch() { return this.pitch; } + @Deprecated public void setPitch(float pitch) { this.pitch = pitch; } + @Deprecated public int getVersion() { return this.version; } + @Deprecated public void setVersion(int version) { this.version = version; } + @Deprecated public int getFireTicks() { return this.fireTicks; } + @Deprecated public void setFireTicks(int fireTicks) { this.fireTicks = fireTicks; } + @Deprecated public int getTicksLived() { return this.ticksLived; } + @Deprecated public void setTicksLived(int ticksLived) { this.ticksLived = ticksLived; } + @Deprecated public int getLlamaStrength() { return this.llamaStrength; } + @Deprecated public void setLlamaStrength(int llamaStrength) { this.llamaStrength = llamaStrength; } + @Deprecated public int getAngerLevel() { return this.angerLevel; } + @Deprecated public void setAngerLevel(int angerLevel) { this.angerLevel = angerLevel; } + @Deprecated public int getSlimeSize() { return this.slimeSize; } + @Deprecated public void setSlimeSize(int slimeSize) { this.slimeSize = slimeSize; } + @Deprecated public int getAge() { return this.age; } + @Deprecated public void setAge(int age) { this.age = age; } + @Deprecated public boolean hasArms() { return this.arms; } + @Deprecated public void setArms(boolean arms) { this.arms = arms; } + @Deprecated public boolean hasBasePlate() { return this.basePlate; } + @Deprecated public void setBasePlate(boolean basePlate) { this.basePlate = basePlate; } + @Deprecated public boolean isVisible() { return this.visible; } + @Deprecated public void setVisible(boolean visible) { this.visible = visible; } + @Deprecated public boolean isSmall() { return this.small; } + @Deprecated public void setSmall(boolean small) { this.small = small; } + @Deprecated public boolean isMarker() { return this.marker; } + @Deprecated public void setMarker(boolean marker) { this.marker = marker; } + @Deprecated public boolean isAwake() { return this.awake; } + @Deprecated public void setAwake(boolean awake) { this.awake = awake; } + @Deprecated public boolean isPowered() { return this.powered; } + @Deprecated public void setPowered(boolean powered) { this.powered = powered; } + @Deprecated public boolean isCustomNameVisible() { return this.customNameVisible; } + @Deprecated public void setCustomNameVisible(boolean customNameVisible) { this.customNameVisible = customNameVisible; } + @Deprecated public boolean isCreatedByPlayer() { return this.createdByPlayer; } + @Deprecated public void setCreatedByPlayer(boolean createdByPlayer) { this.createdByPlayer = createdByPlayer; } + @Deprecated public boolean hasSaddle() { return this.saddle; } + @Deprecated public void setSaddle(boolean saddle) { this.saddle = saddle; } + @Deprecated public boolean isAngry() { return this.angry; } + @Deprecated public void setAngry(boolean angry) { this.angry = angry; } + @Deprecated public boolean isSheared() { return this.sheared; } + @Deprecated public void setSheared(boolean sheared) { this.sheared = sheared; } + @Deprecated public boolean isDerp() { return this.derp; } + @Deprecated public void setDerp(boolean derp) { this.derp = derp; } + @Deprecated public boolean isAgeLock() { return this.ageLock; } + @Deprecated public void setAgeLock(boolean ageLock) { this.ageLock = ageLock; } + @Deprecated public boolean canBreed() { return this.breed; } + @Deprecated public void setBreed(boolean breed) { this.breed = breed; } + @Deprecated public boolean hasAI() { return this.ai; } + @Deprecated public void setAI(boolean ai) { this.ai = ai; } + @Deprecated public boolean isBaby() { return this.baby; } + @Deprecated public void setBaby(boolean baby) { this.baby = baby; } diff --git a/src/main/java/com/songoda/skyblock/utils/world/entity/EntityUtil.java b/src/main/java/com/songoda/skyblock/utils/world/entity/EntityUtil.java index 14d093a0..ec41bffe 100644 --- a/src/main/java/com/songoda/skyblock/utils/world/entity/EntityUtil.java +++ b/src/main/java/com/songoda/skyblock/utils/world/entity/EntityUtil.java @@ -1,6 +1,8 @@ package com.songoda.skyblock.utils.world.entity; import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.nms.NmsManager; +import com.songoda.core.nms.nbt.NBTEntity; import com.songoda.skyblock.utils.item.ItemStackUtil; import com.songoda.skyblock.utils.version.NMSUtil; import com.songoda.skyblock.utils.world.block.BlockDegreesType; @@ -22,241 +24,7 @@ import java.util.List; public final class EntityUtil { public static EntityData convertEntityToEntityData(Entity entity, int x, int y, int z) { - EntityData entityData = new EntityData(entity.getType().toString(), x, y, z, entity.getCustomName(), - entity.isCustomNameVisible(), entity.getFireTicks(), entity.getTicksLived()); - entityData.setVersion(NMSUtil.getVersionNumber()); - - if (entity instanceof ArmorStand) { - ArmorStand armorStand = (ArmorStand) entity; - entityData.setArms(armorStand.hasArms()); - - if (armorStand.getItemInHand() != null && armorStand.getItemInHand().getType() != Material.AIR) { - entityData.setHand(ItemStackUtil.serializeItemStack(armorStand.getItemInHand())); - } - - if (armorStand.getHelmet() != null && armorStand.getHelmet().getType() != Material.AIR) { - entityData.setHelmet(ItemStackUtil.serializeItemStack(armorStand.getHelmet())); - } - - if (armorStand.getChestplate() != null && armorStand.getChestplate().getType() != Material.AIR) { - entityData.setChestplate(ItemStackUtil.serializeItemStack(armorStand.getChestplate())); - } - - if (armorStand.getLeggings() != null && armorStand.getLeggings().getType() != Material.AIR) { - entityData.setLeggings(ItemStackUtil.serializeItemStack(armorStand.getLeggings())); - } - - if (armorStand.getBoots() != null && armorStand.getBoots().getType() != Material.AIR) { - entityData.setBoots(ItemStackUtil.serializeItemStack(armorStand.getBoots())); - } - - entityData.setBasePlate(armorStand.hasBasePlate()); - entityData.setVisible(armorStand.isVisible()); - entityData.setSmall(armorStand.isSmall()); - entityData.setMarker(armorStand.isMarker()); - entityData.setBodyPose(armorStand.getBodyPose().getX() + " " + armorStand.getBodyPose().getY() + " " - + armorStand.getBodyPose().getZ()); - entityData.setHeadPose(armorStand.getHeadPose().getX() + " " + armorStand.getHeadPose().getY() + " " - + armorStand.getHeadPose().getZ()); - entityData.setLeftArmPose(armorStand.getLeftArmPose().getX() + " " + armorStand.getLeftArmPose().getY() - + " " + armorStand.getLeftArmPose().getZ()); - entityData.setLeftLegPose(armorStand.getLeftLegPose().getX() + " " + armorStand.getLeftLegPose().getY() - + " " + armorStand.getLeftLegPose().getZ()); - entityData.setRightArmPose(armorStand.getRightArmPose().getX() + " " + armorStand.getRightArmPose().getY() - + " " + armorStand.getRightArmPose().getZ()); - entityData.setRightLegPose(armorStand.getRightLegPose().getX() + " " + armorStand.getRightLegPose().getY() - + " " + armorStand.getRightLegPose().getZ()); - - return entityData; - } - - int NMSVersion = NMSUtil.getVersionNumber(); - - if (entity instanceof LivingEntity) { - LivingEntity livingEntity = (LivingEntity) entity; - EntityEquipment entityEquipment = livingEntity.getEquipment(); - - if (NMSVersion > 8) { - if (NMSVersion > 9) { - entityData.setAI(livingEntity.hasAI()); - } - - if (entityEquipment.getItemInMainHand() != null - && entityEquipment.getItemInMainHand().getType() != Material.AIR) { - entityData.setHand(ItemStackUtil.serializeItemStack(entityEquipment.getItemInMainHand())); - } - - entityData.setHandChance(entityEquipment.getItemInMainHandDropChance()); - - if (entityEquipment.getItemInOffHand() != null - && entityEquipment.getItemInOffHand().getType() != Material.AIR) { - entityData.setOffHand(ItemStackUtil.serializeItemStack(entityEquipment.getItemInOffHand())); - } - - entityData.setOffHandChange(entityEquipment.getItemInOffHandDropChance()); - } else { - if (entityEquipment.getItemInHand() != null - && entityEquipment.getItemInHand().getType() != Material.AIR) { - entityData.setHand(ItemStackUtil.serializeItemStack(entityEquipment.getItemInHand())); - } - - entityData.setHandChance(entityEquipment.getItemInHandDropChance()); - } - - if (entityEquipment.getHelmet() != null && entityEquipment.getHelmet().getType() != Material.AIR) { - entityData.setHelmet(ItemStackUtil.serializeItemStack(entityEquipment.getHelmet())); - } - - if (entityEquipment.getChestplate() != null && entityEquipment.getChestplate().getType() != Material.AIR) { - entityData.setChestplate(ItemStackUtil.serializeItemStack(entityEquipment.getChestplate())); - } - - if (entityEquipment.getLeggings() != null && entityEquipment.getLeggings().getType() != Material.AIR) { - entityData.setLeggings(ItemStackUtil.serializeItemStack(entityEquipment.getLeggings())); - } - - if (entityEquipment.getBoots() != null && entityEquipment.getBoots().getType() != Material.AIR) { - entityData.setBoots(ItemStackUtil.serializeItemStack(entityEquipment.getBoots())); - } - - entityData.setHelmetChance(entityEquipment.getHelmetDropChance()); - entityData.setChestplateChance(entityEquipment.getChestplateDropChance()); - entityData.setLeggingsChance(entityEquipment.getLeggingsDropChance()); - entityData.setBootsChance(entityEquipment.getBootsDropChance()); - - if (entity instanceof Bat) { - entityData.setAwake(((Bat) entityData).isAwake()); - } else if (entity instanceof Creeper) { - entityData.setPowered(((Creeper) entity).isPowered()); - } else if (entity instanceof Enderman) { - Enderman enderman = ((Enderman) entity); - - if (NMSVersion > 12) { - if (enderman.getCarriedBlock() == null) { - entityData.setCarryBlock(""); - } else { - entityData.setCarryBlock(enderman.getCarriedBlock().getMaterial().name() + ":0"); - } - } else { - MaterialData materialData = enderman.getCarriedMaterial(); - - if (materialData == null) { - entityData.setCarryBlock(""); - } else { - entityData.setCarryBlock(materialData.getItemType().toString() + ":" + materialData.getData()); - } - } - } else if (entity instanceof Horse) { - Horse horse = ((Horse) entity); - entityData.setHorseColor(horse.getColor().toString()); - entityData.setHorseStyle(horse.getStyle().toString()); - - List items = new ArrayList<>(); - - for (ItemStack itemList : horse.getInventory().getContents()) { - if (itemList != null && itemList.getType() != Material.AIR) { - items.add(ItemStackUtil.serializeItemStack(itemList)); - } - } - - entityData.setInventory(items.toArray(new String[0])); - } else if (entity instanceof IronGolem) { - entityData.setCreatedByPlayer(((IronGolem) entity).isPlayerCreated()); - } else if (entity instanceof Ocelot) { - entityData.setOcelotType(((Ocelot) entity).getCatType().toString()); - } else if (entity instanceof Pig) { - entityData.setSaddle(((Pig) entity).hasSaddle()); - } else if (entity instanceof Zombie) { - entityData.setBaby(((Zombie) entity).isBaby()); - } else if (entity instanceof PigZombie) { - PigZombie pigZombie = ((PigZombie) entity); - entityData.setAngry(pigZombie.isAngry()); - entityData.setAngerLevel(pigZombie.getAnger()); - } else if (entity instanceof Rabbit) { - entityData.setRabbitType(((Rabbit) entity).getRabbitType().toString()); - } else if (entity instanceof Sheep) { - entityData.setSheared(((Sheep) entity).isSheared()); - entityData.setColor(((Colorable) entity).getColor().toString()); - } else if (entity instanceof Slime) { - entityData.setSlimeSize(((Slime) entity).getSize()); - } else if (entity instanceof Snowman) { - entityData.setDerp(((Snowman) entity).isDerp()); - } else if (entity instanceof Villager) { - Villager villager = ((Villager) entity); - entityData.setProfession(villager.getProfession().toString()); - - List items = new ArrayList<>(); - - for (ItemStack itemList : villager.getInventory().getContents()) { - if (itemList != null && itemList.getType() != Material.AIR) { - items.add(ItemStackUtil.serializeItemStack(itemList)); - } - } - - entityData.setInventory(items.toArray(new String[0])); - } - - if (NMSVersion > 10) { - if (entity instanceof Llama) { - Llama llama = ((Llama) entity); - entityData.setLlamaColor(llama.getColor().toString()); - entityData.setLlamaStrength(llama.getStrength()); - - List items = new ArrayList<>(); - - for (ItemStack itemList : llama.getInventory().getContents()) { - if (itemList != null && itemList.getType() != Material.AIR) { - items.add(ItemStackUtil.serializeItemStack(itemList)); - } - } - } - - if (NMSVersion > 11) { - if (entity instanceof Parrot) { - entityData.setParrotVariant(((Parrot) entity).getVariant().toString()); - } - } - } - } - - if (entity instanceof Ageable) { - Ageable ageable = ((Ageable) entity); - entityData.setBreed(ageable.canBreed()); - entityData.setAge(ageable.getAge()); - entityData.setAgeLock(ageable.getAgeLock()); - entityData.setBaby(!ageable.isAdult()); - } else if (entity instanceof Vehicle) { - if (entity instanceof Boat) { - entityData.setWoodType(((Boat) entity).getWoodType().toString()); - } else if (entity instanceof StorageMinecart || entity instanceof HopperMinecart) { - List items = new ArrayList<>(); - - for (ItemStack itemList : ((InventoryHolder) entity).getInventory().getContents()) { - if (itemList != null && itemList.getType() != Material.AIR) { - items.add(ItemStackUtil.serializeItemStack(itemList)); - } - } - - entityData.setInventory(items.toArray(new String[0])); - } - } else if (entity instanceof Hanging) { - if (entity instanceof ItemFrame) { - ItemFrame itemFrame = ((ItemFrame) entity); - ItemStack is = itemFrame.getItem(); - - if (is == null) { - entityData.setItem(""); - } else { - entityData.setItem(ItemStackUtil.serializeItemStack(is)); - } - - entityData.setRotate(itemFrame.getRotation().toString()); - } else if (entity instanceof Painting) { - entityData.setArt(((Painting) entity).getArt().toString()); - } - } - - return entityData; + return new EntityData(NmsManager.getNbt().of(entity).serialize("Attributes"), x, y, z); } public static void convertEntityDataToEntity(EntityData entityData, Location loc, BlockDegreesType type) {