All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bukkit.configuration.file.YamlConstructor Maven / Gradle / Ivy

package org.bukkit.configuration.file;

import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.yaml.snakeyaml.constructor.SafeConstructor;
import org.yaml.snakeyaml.error.YAMLException;
import org.yaml.snakeyaml.nodes.Node;
import org.yaml.snakeyaml.nodes.Tag;

import java.util.LinkedHashMap;
import java.util.Map;

public class YamlConstructor extends SafeConstructor {

  public YamlConstructor() {
    this.yamlConstructors.put(Tag.MAP, new ConstructCustomObject());
  }

  private class ConstructCustomObject extends ConstructYamlMap {
    @Override
    public Object construct(Node node) {
      if (node.isTwoStepsConstruction()) {
        throw new YAMLException("Unexpected referential mapping structure. Node: " + node);
      }

      Map raw = (Map) super.construct(node);

      if (raw.containsKey(ConfigurationSerialization.SERIALIZED_TYPE_KEY)) {
        Map typed = new LinkedHashMap(raw.size());
        for (Map.Entry entry : raw.entrySet()) {
          typed.put(entry.getKey().toString(), entry.getValue());
        }

        try {
          return ConfigurationSerialization.deserializeObject(typed);
        } catch (IllegalArgumentException ex) {
          throw new YAMLException("Could not deserialize object", ex);
        }
      }

      return raw;
    }

    @Override
    public void construct2ndStep(Node node, Object object) {
      throw new YAMLException("Unexpected referential mapping structure. Node: " + node);
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy