mirror of
https://github.com/Xiao-MoMi/Custom-Fishing.git
synced 2025-12-19 15:09:24 +00:00
migration system
This commit is contained in:
@@ -40,6 +40,7 @@ import net.momirealms.customfishing.bukkit.integration.BukkitIntegrationManager;
|
|||||||
import net.momirealms.customfishing.bukkit.item.BukkitItemManager;
|
import net.momirealms.customfishing.bukkit.item.BukkitItemManager;
|
||||||
import net.momirealms.customfishing.bukkit.loot.BukkitLootManager;
|
import net.momirealms.customfishing.bukkit.loot.BukkitLootManager;
|
||||||
import net.momirealms.customfishing.bukkit.market.BukkitMarketManager;
|
import net.momirealms.customfishing.bukkit.market.BukkitMarketManager;
|
||||||
|
import net.momirealms.customfishing.bukkit.migration.Migration;
|
||||||
import net.momirealms.customfishing.bukkit.requirement.BukkitRequirementManager;
|
import net.momirealms.customfishing.bukkit.requirement.BukkitRequirementManager;
|
||||||
import net.momirealms.customfishing.bukkit.scheduler.BukkitSchedulerAdapter;
|
import net.momirealms.customfishing.bukkit.scheduler.BukkitSchedulerAdapter;
|
||||||
import net.momirealms.customfishing.bukkit.sender.BukkitSenderFactory;
|
import net.momirealms.customfishing.bukkit.sender.BukkitSenderFactory;
|
||||||
@@ -105,8 +106,9 @@ public class BukkitCustomFishingPluginImpl extends BukkitCustomFishingPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enable() {
|
public void enable() {
|
||||||
this.eventManager = new BukkitEventManager(this);
|
|
||||||
this.configManager = new BukkitConfigManager(this);
|
this.configManager = new BukkitConfigManager(this);
|
||||||
|
new Migration(this).start();
|
||||||
|
this.eventManager = new BukkitEventManager(this);
|
||||||
this.requirementManager = new BukkitRequirementManager(this);
|
this.requirementManager = new BukkitRequirementManager(this);
|
||||||
this.actionManager = new BukkitActionManager(this);
|
this.actionManager = new BukkitActionManager(this);
|
||||||
this.senderFactory = new BukkitSenderFactory(this);
|
this.senderFactory = new BukkitSenderFactory(this);
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ public class BukkitConfigManager extends ConfigManager {
|
|||||||
.addIgnoredRoute(configVersion, "other-settings.placeholder-register", '.')
|
.addIgnoredRoute(configVersion, "other-settings.placeholder-register", '.')
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
|
MAIN_CONFIG.save(resolveConfig("config.yml").toFile());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,167 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) <2022> <XiaoMoMi>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.momirealms.customfishing.bukkit.migration;
|
||||||
|
|
||||||
|
import dev.dejvokep.boostedyaml.YamlDocument;
|
||||||
|
import net.momirealms.customfishing.api.BukkitCustomFishingPlugin;
|
||||||
|
import net.momirealms.customfishing.api.mechanic.config.ConfigType;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.ArrayDeque;
|
||||||
|
import java.util.Deque;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class Migration {
|
||||||
|
|
||||||
|
private final BukkitCustomFishingPlugin plugin;
|
||||||
|
|
||||||
|
public Migration(BukkitCustomFishingPlugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() {
|
||||||
|
// if there exists market.yml, then do migration
|
||||||
|
File marketFile = new File(plugin.getDataFolder(), "market.yml");
|
||||||
|
if (!marketFile.exists()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
File configFile = new File(plugin.getDataFolder(), "config.yml");
|
||||||
|
YamlDocument market = plugin.getConfigManager().loadData(marketFile);
|
||||||
|
YamlDocument config = plugin.getConfigManager().loadData(configFile);
|
||||||
|
|
||||||
|
String configVersion = config.getString("config-version");
|
||||||
|
if (Integer.parseInt(configVersion) >= 33) {
|
||||||
|
marketFile.delete();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Map.Entry<String, Object> entry : market.getStringRouteMappedValues(false).entrySet()) {
|
||||||
|
config.set("mechanics.market." + entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
config.save(configFile);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.replaceConfigPlaceholders();
|
||||||
|
this.replaceConditions("loot-conditions");
|
||||||
|
this.replaceConditions("game-conditions");
|
||||||
|
this.replaceLoots();
|
||||||
|
|
||||||
|
// delete the file at last
|
||||||
|
marketFile.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceLoots() {
|
||||||
|
Deque<File> fileDeque = new ArrayDeque<>();
|
||||||
|
for (ConfigType type : ConfigType.values()) {
|
||||||
|
File typeFolder = new File(plugin.getDataFolder(), "contents" + File.separator + type.path());
|
||||||
|
if (!typeFolder.exists()) {
|
||||||
|
if (!typeFolder.mkdirs()) return;
|
||||||
|
plugin.getBoostrap().saveResource("contents" + File.separator + type.path() + File.separator + "default.yml", false);
|
||||||
|
}
|
||||||
|
fileDeque.push(typeFolder);
|
||||||
|
while (!fileDeque.isEmpty()) {
|
||||||
|
File file = fileDeque.pop();
|
||||||
|
File[] files = file.listFiles();
|
||||||
|
if (files == null) continue;
|
||||||
|
for (File subFile : files) {
|
||||||
|
if (subFile.isDirectory()) {
|
||||||
|
fileDeque.push(subFile);
|
||||||
|
} else if (subFile.isFile() && subFile.getName().endsWith(".yml")) {
|
||||||
|
replacePlaceholders(subFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replacePlaceholders(File file) {
|
||||||
|
String line;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) {
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
sb.append(line).append(System.lineSeparator());
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
};
|
||||||
|
try (BufferedWriter writer = new BufferedWriter(
|
||||||
|
new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8))) {
|
||||||
|
writer.write(sb.toString()
|
||||||
|
.replace("{size}", "{size_formatted}")
|
||||||
|
.replace("{SIZE}", "{size}")
|
||||||
|
.replace("{price}", "{price_formatted}")
|
||||||
|
.replace("{PRICE}", "{price}")
|
||||||
|
.replace("{loot}", "{id}")
|
||||||
|
);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceConditions(String file) {
|
||||||
|
String line;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(plugin.getDataFolder(), file + ".yml")), StandardCharsets.UTF_8))) {
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
sb.append(line).append(System.lineSeparator());
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
File outPut = new File(plugin.getDataFolder(), file + ".yml");
|
||||||
|
try (BufferedWriter writer = new BufferedWriter(
|
||||||
|
new OutputStreamWriter(new FileOutputStream(outPut), StandardCharsets.UTF_8))) {
|
||||||
|
writer.write(sb.toString()
|
||||||
|
.replace("lava-fishing: true", "in-lava: true")
|
||||||
|
.replace("lava-fishing: false", "in-water: true")
|
||||||
|
);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceConfigPlaceholders() {
|
||||||
|
String line;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(plugin.getDataFolder(), "config.yml")), StandardCharsets.UTF_8))) {
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
sb.append(line).append(System.lineSeparator());
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
File outPut = new File(plugin.getDataFolder(), "config.yml");
|
||||||
|
try (BufferedWriter writer = new BufferedWriter(
|
||||||
|
new OutputStreamWriter(new FileOutputStream(outPut), StandardCharsets.UTF_8))) {
|
||||||
|
writer.write(sb.toString()
|
||||||
|
.replace("{size}", "{size_formatted}")
|
||||||
|
.replace("{record}", "{record_formatted}")
|
||||||
|
.replace("{loot}", "{id}")
|
||||||
|
.replace("{BASE}", "{base}")
|
||||||
|
.replace("{BONUS}", "{bonus}")
|
||||||
|
.replace("{SIZE}", "{size}"));
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user