private void saveProperty(ConfigCategory cat, ConfigPropertyData propData) {
   if (cat.containsKey(propData.name())) {
     Property forgeProp = cat.get(propData.name());
     forgeProp.comment = propData.comment();
     setForgePropertyDefaultValue(forgeProp, propData);
     setForgePropertyValue(forgeProp, propData);
   } else {
     Property forgeProp = makeProperty(propData);
     if (forgeProp == null) return;
     forgeProp.comment = propData.comment();
     setForgePropertyDefaultValue(forgeProp, propData);
     cat.put(forgeProp.getName(), forgeProp);
   }
 }
  private Property makeProperty(ConfigPropertyData propData) {
    Property.Type type = CONFIG_TYPES.get(propData.getType());
    if (type == null) return null;
    if (!propData.getType().isArray()) {
      Property forgeProp = new Property(propData.name(), String.valueOf(propData.getValue()), type);
      forgeProp.set(String.valueOf(propData.getValue()));
      return forgeProp;
    }

    switch (type) {
      case INTEGER:
        {
          Integer[] val = (Integer[]) propData.getValue();
          String[] propVal = new String[val.length];
          for (int i = 0; i < val.length; i++) propVal[i] = String.valueOf(val[i]);
          Property forgeProp = new Property(propData.name(), propVal, type);
          forgeProp.set(propVal);
          return forgeProp;
        }
      case DOUBLE:
        if (propData.getType().equals(Float.class) || propData.getType().equals(float.class)) {
          Float[] val = (Float[]) propData.getValue();
          String[] propVal = new String[val.length];
          for (int i = 0; i < val.length; i++) propVal[i] = String.valueOf(val[i]);
          Property forgeProp = new Property(propData.name(), propVal, type);
          forgeProp.set(propVal);
          return forgeProp;
        } else {
          Double[] val = (Double[]) propData.getValue();
          String[] propVal = new String[val.length];
          for (int i = 0; i < val.length; i++) propVal[i] = String.valueOf(val[i]);
          Property forgeProp = new Property(propData.name(), propVal, type);
          forgeProp.set(propVal);
          return forgeProp;
        }
      case BOOLEAN:
        {
          Boolean[] val = (Boolean[]) propData.getValue();
          String[] propVal = new String[val.length];
          for (int i = 0; i < val.length; i++) propVal[i] = String.valueOf(val[i]);
          Property forgeProp = new Property(propData.name(), propVal, type);
          forgeProp.set(propVal);
          return forgeProp;
        }
      case STRING:
        String[] propVal = (String[]) propData.getValue();
        Property forgeProp = new Property(propData.name(), propVal, type);
        forgeProp.set(propVal);
        return forgeProp;
    }

    return null;
  }