public void load(T state, CompoundTag compound) {
   String checkId = ((StringTag) compound.getValue().get("id")).getValue();
   if (!id.equalsIgnoreCase(checkId)) {
     throw new IllegalArgumentException(
         "Invalid ID loading tile entity, expected " + id + " got " + checkId);
   }
   int checkX = ((IntTag) compound.getValue().get("x")).getValue(), x = state.getX();
   int checkY = ((IntTag) compound.getValue().get("y")).getValue(), y = state.getY();
   int checkZ = ((IntTag) compound.getValue().get("z")).getValue(), z = state.getZ();
   if (x != checkX || y != checkY || z != checkZ) {
     throw new IllegalArgumentException(
         "Invalid coords loading tile entity, expected ("
             + x
             + ","
             + y
             + ","
             + z
             + ") got ("
             + checkX
             + ","
             + checkY
             + ","
             + checkZ
             + ")");
   }
 }
 @Override
 public void loadNbt(CompoundTag tag) {
   super.loadNbt(tag);
   if (tag.isInt("BrewTime")) {
     brewTime = tag.getInt("BrewTime");
   }
 }
 public static CompoundTag getTag() {
   CompoundTag tag = new CompoundTag();
   tag.putInt("int", 5);
   tag.putString("string", "text");
   tag.putList("list", TagType.FLOAT, Arrays.asList(1.f, 2.f, 3.f));
   tag.putCompound("compound", new CompoundTag());
   return tag;
 }
 public static BannerPattern fromNBT(List<CompoundTag> tag) {
   BannerPattern.Builder builder = BannerPattern.builder();
   for (CompoundTag layer : tag) {
     BannerPattern.LayerTexture type =
         BannerPattern.LayerTexture.getByCode(layer.getString("Pattern"));
     DyeColor color = DyeColor.getByDyeData((byte) layer.getInt("Color"));
     builder.layer(type, color);
   }
   return builder.build();
 }
 public static List<CompoundTag> toNBT(BannerPattern pattern) {
   List<CompoundTag> patterns = new ArrayList<>();
   for (BannerPattern.BannerLayer layer : pattern.getLayers()) {
     CompoundTag layerTag = new CompoundTag();
     layerTag.putString("Pattern", layer.getTexture().getCode());
     layerTag.putInt("Color", layer.getColor().getDyeData());
     patterns.add(layerTag);
   }
   return patterns;
 }
 public ItemStack readItemStack(CompoundTag compound) {
   ItemStack stack = null;
   Tag idTag = compound.getValue().get("id");
   Tag damageTag = compound.getValue().get("Damage");
   Tag countTag = compound.getValue().get("Count");
   short id = (idTag == null) ? 0 : ((ShortTag) idTag).getValue();
   short damage = (damageTag == null) ? 0 : ((ShortTag) damageTag).getValue();
   byte count = (countTag == null) ? 0 : ((ByteTag) countTag).getValue();
   if (id != 0 && count != 0) {
     stack = new ItemStack(id, count, damage);
   }
   return stack;
 }
 @Override
 public void load(GlowItem entity, CompoundTag compound) {
   if (compound.getValue().containsKey("Item")) {
     ItemStack stack = readItemStack((CompoundTag) compound.getValue().get("Item"));
     entity.setItemStack(stack);
   }
   if (compound.getValue().containsKey("Health")) {
     // item.setHealth(((IntTag)compound.getValue().get("Health")).getValue());
   }
   if (compound.getValue().containsKey("Age")) {
     // item.setAge(((IntTag)compound.getValue().get("Age")).getValue());
   }
 }
 /**
  * Save information about this structure piece to the given tag.
  *
  * @param structurePiece The structure piece to save.
  * @param compound The target tag.
  */
 public void save(T structurePiece, CompoundTag compound) {
   compound.putInt("GD", structurePiece.getGD());
   compound.putInt("O", structurePiece.getNumericOrientation());
   StructureBoundingBox boundingBox = structurePiece.getBoundingBox();
   int[] bb = new int[6];
   bb[0] = boundingBox.getMin().getBlockX();
   bb[1] = boundingBox.getMin().getBlockY();
   bb[2] = boundingBox.getMin().getBlockZ();
   bb[3] = boundingBox.getMax().getBlockX();
   bb[4] = boundingBox.getMax().getBlockY();
   bb[5] = boundingBox.getMax().getBlockZ();
   compound.putIntArray("BB", bb);
 }
 @Override
 public GlowItem load(GlowServer server, GlowWorld world, CompoundTag compound) {
   ItemStack stack = null;
   if (compound.getValue().containsKey("Item")) {
     stack = readItemStack((CompoundTag) compound.getValue().get("Item"));
   }
   GlowItem item = new GlowItem(server, world, stack);
   if (compound.getValue().containsKey("Health")) {
     // item.setHealth(((IntTag)compound.getValue().get("Health")).getValue());
   }
   if (compound.getValue().containsKey("Age")) {
     // item.setAge(((IntTag)compound.getValue().get("Age")).getValue());
   }
   return item;
 }
  public void readPlayerData(GlowPlayer player) {
    Map<String, Tag> playerData = new HashMap<String, Tag>();
    CompoundTag playerTag = null;
    // Map<PlayerData, Object> ret = new HashMap<PlayerData, Object>();

    File playerDir = new File(world.getName(), "players");
    if (!playerDir.exists()) playerDir.mkdirs();

    File playerFile = new File(playerDir, player.getName() + ".dat");
    if (!playerFile.exists()) {
      try {
        playerFile.createNewFile();
      } catch (IOException e) {
        e.printStackTrace();
      }
    } else {
      try {
        NBTInputStream in = new NBTInputStream(new FileInputStream(playerFile));
        playerTag = (CompoundTag) in.readTag();
        in.close();
        if (playerTag != null) playerData.putAll(playerTag.getValue());
      } catch (EOFException e) {
      } catch (IOException e) {
        player.kickPlayer("Failed to read " + player.getName() + ".dat!");
        server
            .getLogger()
            .severe(
                "Failed to read player.dat for player "
                    + player.getName()
                    + " in world "
                    + world.getName()
                    + "!");
        e.printStackTrace();
      }
    }

    if (playerTag == null) playerTag = new CompoundTag("", new HashMap<String, Tag>());
    EntityStoreLookupService.find(GlowPlayer.class).load(player, playerTag);
  }
 /**
  * Load structure piece data of the appropriate type from the given compound tag.
  *
  * @param structurePiece The target structure piece.
  * @param compound The structure piece's tag.
  */
 public void load(T structurePiece, CompoundTag compound) {
   if (compound.isInt("GD")) {
     structurePiece.setGD(compound.getInt("GD"));
   }
   if (compound.isInt("O")) {
     structurePiece.setNumericOrientation(compound.getInt("O"));
   }
   if (compound.isIntArray("BB")) {
     int[] bb = compound.getIntArray("BB");
     if (bb.length == 6) {
       final StructureBoundingBox boundingBox =
           new StructureBoundingBox(
               new Vector(bb[0], bb[1], bb[2]), new Vector(bb[3], bb[4], bb[5]));
       structurePiece.setBoundingBox(boundingBox);
     }
   }
 }
  public WorldFinalValues readWorldData() throws IOException {
    Map<String, Tag> level = new HashMap<String, Tag>();

    File levelFile = new File(dir, "level.dat");
    if (!levelFile.exists()) {
      try {
        levelFile.createNewFile();
      } catch (IOException e) {
        handleWorldException("level.dat", e);
      }
    } else {
      try {
        NBTInputStream in = new NBTInputStream(new FileInputStream(levelFile));
        CompoundTag levelTag = (CompoundTag) in.readTag();
        in.close();
        if (levelTag != null) level.putAll(levelTag.getValue());
      } catch (EOFException e) {
      } catch (IOException e) {
        handleWorldException("level.dat", e);
      }
    }
    UUID uid = null;
    File uuidFile = new File(dir, "uid.dat");
    if (!uuidFile.exists()) {
      try {
        uuidFile.createNewFile();
      } catch (IOException e) {
        handleWorldException("uid.dat", e);
      }
    } else {
      DataInputStream str = null;
      try {
        str = new DataInputStream(new FileInputStream(uuidFile));
        uid = new UUID(str.readLong(), str.readLong());
      } catch (EOFException e) {
      } finally {
        if (str != null) {
          str.close();
        }
      }
    }
    long seed = 0L;
    if (level.containsKey("thundering")) {
      ByteTag thunderTag = (ByteTag) level.remove("thundering");
      world.setThundering(thunderTag.getValue() == 1);
    }
    if (level.containsKey("raining")) {
      ByteTag rainTag = (ByteTag) level.remove("raining");
      world.setStorm(rainTag.getValue() == 1);
    }
    if (level.containsKey("thunderTime")) {
      IntTag thunderTimeTag = (IntTag) level.remove("thunderTime");
      world.setThunderDuration(thunderTimeTag.getValue());
    }
    if (level.containsKey("rainTime")) {
      IntTag rainTimeTag = (IntTag) level.remove("rainTime");
      world.setWeatherDuration(rainTimeTag.getValue());
    }
    if (level.containsKey("RandomSeed")) {
      LongTag seedTag = (LongTag) level.remove("RandomSeed");
      seed = seedTag.getValue();
    }
    if (level.containsKey("Time")) {
      LongTag timeTag = (LongTag) level.remove("Time");
      world.setTime(timeTag.getValue());
    }
    if (level.containsKey("SpawnX") && level.containsKey("SpawnY") && level.containsKey("SpawnZ")) {
      IntTag spawnXTag = (IntTag) level.remove("SpawnX");
      IntTag spawnYTag = (IntTag) level.remove("SpawnY");
      IntTag spawnZTag = (IntTag) level.remove("SpawnZ");
      world.setSpawnLocation(spawnXTag.getValue(), spawnYTag.getValue(), spawnZTag.getValue());
    }
    unknownTags.putAll(level);
    if (uid == null) uid = UUID.randomUUID();
    return new WorldFinalValues(seed, uid);
  }
 public CompoundTag writeNbt(ItemMeta meta) {
   CompoundTag result = new CompoundTag();
   toGlowMeta(meta).writeNbt(result);
   return result.isEmpty() ? null : result;
 }
 @Override
 public void saveNbt(CompoundTag tag) {
   super.saveNbt(tag);
   tag.putInt("BrewTime", brewTime);
 }