Skip to content

Commit

Permalink
change legacy flags converter to use dCore yaml config
Browse files Browse the repository at this point in the history
for submap patching
  • Loading branch information
mcmonkey4eva committed Dec 15, 2020
1 parent 42571f1 commit dbebb28
Showing 1 changed file with 40 additions and 31 deletions.
Expand Up @@ -8,66 +8,75 @@
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.core.TimeTag;
import com.denizenscript.denizencore.scripts.ScriptHelper;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import com.denizenscript.denizencore.utilities.YamlConfiguration;
import com.denizenscript.denizencore.utilities.text.StringHolder;
import org.bukkit.scheduler.BukkitRunnable;

import java.io.File;
import java.io.FileInputStream;
import java.util.UUID;

public class LegacySavesUpdater {

public static void updateLegacySaves() {
Debug.log("==== UPDATING LEGACY SAVES TO NEW FLAG ENGINE ====");
File savesFile = new File(Denizen.getInstance().getDataFolder(), "saves.yml");
FileConfiguration saveSection = YamlConfiguration.loadConfiguration(savesFile);
YamlConfiguration saveSection;
try {
FileInputStream fis = new FileInputStream(savesFile);
saveSection = YamlConfiguration.load(ScriptHelper.convertStreamToString(fis, false));
}
catch (Throwable ex) {
Debug.echoError(ex);
return;
}
savesFile.renameTo(new File(Denizen.getInstance().getDataFolder(), "saves.yml.bak"));
if (saveSection.contains("Global")) {
Debug.log("==== Update global data ====");
ConfigurationSection globalSection = saveSection.getConfigurationSection("Global");
YamlConfiguration globalSection = saveSection.getConfigurationSection("Global");
if (globalSection.contains("Flags")) {
applyFlags(Denizen.getInstance().serverFlagMap, globalSection.getConfigurationSection("Flags"));
}
if (globalSection.contains("Scripts")) {
ConfigurationSection scriptsSection = globalSection.getConfigurationSection("Scripts");
for (String script : scriptsSection.getKeys(false)) {
ConfigurationSection scriptSection = scriptsSection.getConfigurationSection(script);
YamlConfiguration scriptsSection = globalSection.getConfigurationSection("Scripts");
for (StringHolder script : scriptsSection.getKeys(false)) {
YamlConfiguration scriptSection = scriptsSection.getConfigurationSection(script.str);
if (scriptSection.contains("Cooldown Time")) {
long time = scriptSection.getLong("Cooldown Time");
long time = Long.parseLong(scriptSection.getString("Cooldown Time"));
TimeTag cooldown = new TimeTag(time);
Denizen.getInstance().serverFlagMap.setFlag("__interact_cooldown." + script, cooldown, cooldown);
Denizen.getInstance().serverFlagMap.setFlag("__interact_cooldown." + script.low, cooldown, cooldown);
}
}
}
}
if (saveSection.contains("Players")) {
Debug.log("==== Update player data ====");
ConfigurationSection playerSection = saveSection.getConfigurationSection("Players");
for (String plPrefix : playerSection.getKeys(false)) {
ConfigurationSection subSection = playerSection.getConfigurationSection(plPrefix);
for (String uuidString : subSection.getKeys(false)) {
UUID id = UUID.fromString(uuidString.substring(0, 8) + "-" + uuidString.substring(8, 12) + "-" + uuidString.substring(12, 16) + "-" + uuidString.substring(16, 20) + "-" + uuidString.substring(20, 32));
YamlConfiguration playerSection = saveSection.getConfigurationSection("Players");
for (StringHolder plPrefix : playerSection.getKeys(false)) {
YamlConfiguration subSection = playerSection.getConfigurationSection(plPrefix.str);
for (StringHolder uuidString : subSection.getKeys(false)) {
UUID id = UUID.fromString(uuidString.str.substring(0, 8) + "-" + uuidString.str.substring(8, 12) + "-" + uuidString.str.substring(12, 16) + "-" + uuidString.str.substring(16, 20) + "-" + uuidString.str.substring(20, 32));
PlayerTag player = PlayerTag.valueOf(id.toString(), CoreUtilities.errorButNoDebugContext);
if (player == null) {
Debug.echoError("Cannot update data for player with id: " + uuidString);
continue;
}
ConfigurationSection actual = subSection.getConfigurationSection(uuidString);
YamlConfiguration actual = subSection.getConfigurationSection(uuidString.str);
AbstractFlagTracker tracker = player.getFlagTracker();
if (actual.contains("Flags")) {
applyFlags(tracker, actual.getConfigurationSection("Flags"));
}
if (actual.contains("Scripts")) {
ConfigurationSection scriptsSection = actual.getConfigurationSection("Scripts");
for (String script : scriptsSection.getKeys(false)) {
ConfigurationSection scriptSection = scriptsSection.getConfigurationSection(script);
YamlConfiguration scriptsSection = actual.getConfigurationSection("Scripts");
for (StringHolder script : scriptsSection.getKeys(false)) {
YamlConfiguration scriptSection = scriptsSection.getConfigurationSection(script.str);
if (scriptSection.contains("Current Step")) {
tracker.setFlag("__interact_step." + script, new ElementTag(scriptSection.getString("Current Step")), null);
}
if (scriptSection.contains("Cooldown Time")) {
long time = scriptSection.getLong("Cooldown Time");
long time = Long.parseLong(scriptSection.getString("Cooldown Time"));
TimeTag cooldown = new TimeTag(time);
tracker.setFlag("__interact_cooldown." + script, cooldown, cooldown);
}
Expand All @@ -78,16 +87,16 @@ public static void updateLegacySaves() {
}
}
if (saveSection.contains("NPCs")) {
final ConfigurationSection npcsSection = saveSection.getConfigurationSection("NPCs");
final YamlConfiguration npcsSection = saveSection.getConfigurationSection("NPCs");
new BukkitRunnable() {
@Override
public void run() {
Debug.log("==== Late update NPC data ====");
for (String npcId : npcsSection.getKeys(false)) {
ConfigurationSection actual = npcsSection.getConfigurationSection(npcId);
NPCTag npc = NPCTag.valueOf(npcId, CoreUtilities.errorButNoDebugContext);
for (StringHolder npcId : npcsSection.getKeys(false)) {
YamlConfiguration actual = npcsSection.getConfigurationSection(npcId.str);
NPCTag npc = NPCTag.valueOf(npcId.str, CoreUtilities.errorButNoDebugContext);
if (npc == null) {
Debug.echoError("Cannot update data for NPC with id: " + npcId);
Debug.echoError("Cannot update data for NPC with id: " + npcId.str);
continue;
}
AbstractFlagTracker tracker = npc.getFlagTracker();
Expand All @@ -104,20 +113,20 @@ public void run() {
Debug.log("==== Done updating legacy saves (except NPCs) ====");
}

public static void applyFlags(AbstractFlagTracker tracker, ConfigurationSection section) {
public static void applyFlags(AbstractFlagTracker tracker, YamlConfiguration section) {
try {
for (String flagName : section.getKeys(false)) {
if (flagName.endsWith("-expiration")) {
for (StringHolder flagName : section.getKeys(false)) {
if (flagName.low.endsWith("-expiration")) {
continue;
}
TimeTag expireAt = null;
if (section.contains(flagName + "-expiration")) {
long expireTime = section.getLong(flagName + "-expiration");
long expireTime = Long.parseLong(section.getString(flagName + "-expiration"));
expireAt = new TimeTag(expireTime);
}
Object value = section.get(flagName);
Object value = section.get(flagName.str);
ObjectTag setAs = CoreUtilities.objectToTagForm(value, CoreUtilities.errorButNoDebugContext);
tracker.setFlag(flagName, setAs, expireAt);
tracker.setFlag(flagName.low, setAs, expireAt);
}
}
catch (Throwable ex) {
Expand Down

0 comments on commit dbebb28

Please sign in to comment.