mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-26 07:06:44 +01:00
Add configuration conversion and fix BukkitLegacyMappings
This commit is contained in:
parent
165cac8b13
commit
02937cc543
@ -254,6 +254,10 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override public void shutdown() {
|
||||||
|
this.getServer().getPluginManager().disablePlugin(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override public void disable() {
|
@Override public void disable() {
|
||||||
onDisable();
|
onDisable();
|
||||||
}
|
}
|
||||||
|
@ -663,7 +663,7 @@ public final class BukkitLegacyMappings extends LegacyMappings {
|
|||||||
new LegacyBlock(2266, "record_11", "music_disc_11"),
|
new LegacyBlock(2266, "record_11", "music_disc_11"),
|
||||||
new LegacyBlock(2267, "record_12", "music_disc_wait")};
|
new LegacyBlock(2267, "record_12", "music_disc_wait")};
|
||||||
|
|
||||||
private static final Map<Integer, PlotBlock> LEGACY_ID_TO_STRING_PLOT_BLOCK = new HashMap<>();
|
// private static final Map<Integer, PlotBlock> LEGACY_ID_TO_STRING_PLOT_BLOCK = new HashMap<>();
|
||||||
private static final Map<IdDataPair, PlotBlock> LEGACY_ID_AND_DATA_TO_STRING_PLOT_BLOCK =
|
private static final Map<IdDataPair, PlotBlock> LEGACY_ID_AND_DATA_TO_STRING_PLOT_BLOCK =
|
||||||
new HashMap<>();
|
new HashMap<>();
|
||||||
private static final Map<String, PlotBlock> NEW_STRING_TO_LEGACY_PLOT_BLOCK = new HashMap<>();
|
private static final Map<String, PlotBlock> NEW_STRING_TO_LEGACY_PLOT_BLOCK = new HashMap<>();
|
||||||
@ -685,13 +685,15 @@ public final class BukkitLegacyMappings extends LegacyMappings {
|
|||||||
|
|
||||||
private void addAll(@NonNull final Collection<LegacyBlock> blocks) {
|
private void addAll(@NonNull final Collection<LegacyBlock> blocks) {
|
||||||
for (final LegacyBlock legacyBlock : blocks) {
|
for (final LegacyBlock legacyBlock : blocks) {
|
||||||
LEGACY_ID_TO_STRING_PLOT_BLOCK
|
// LEGACY_ID_TO_STRING_PLOT_BLOCK
|
||||||
.put(legacyBlock.getNumericalId(), legacyBlock.toStringPlotBlock());
|
// .put(legacyBlock.getNumericalId(), legacyBlock.toStringPlotBlock());
|
||||||
if (legacyBlock.getDataValue() != 0) {
|
/*if (legacyBlock.getDataValue() != 0) {
|
||||||
LEGACY_ID_AND_DATA_TO_STRING_PLOT_BLOCK
|
LEGACY_ID_AND_DATA_TO_STRING_PLOT_BLOCK
|
||||||
.put(new IdDataPair(legacyBlock.getNumericalId(), legacyBlock.getDataValue()),
|
.put(new IdDataPair(legacyBlock.getNumericalId(), legacyBlock.getDataValue()),
|
||||||
legacyBlock.toStringPlotBlock());
|
legacyBlock.toStringPlotBlock());
|
||||||
}
|
} */
|
||||||
|
LEGACY_ID_AND_DATA_TO_STRING_PLOT_BLOCK.put(new IdDataPair(legacyBlock.getNumericalId(),
|
||||||
|
legacyBlock.getDataValue()), legacyBlock.toStringPlotBlock());
|
||||||
NEW_STRING_TO_LEGACY_PLOT_BLOCK
|
NEW_STRING_TO_LEGACY_PLOT_BLOCK
|
||||||
.put(legacyBlock.getLegacyName(), legacyBlock.toStringPlotBlock());
|
.put(legacyBlock.getLegacyName(), legacyBlock.toStringPlotBlock());
|
||||||
OLD_STRING_TO_STRING_PLOT_BLOCK
|
OLD_STRING_TO_STRING_PLOT_BLOCK
|
||||||
@ -758,7 +760,7 @@ public final class BukkitLegacyMappings extends LegacyMappings {
|
|||||||
final int data = Integer.parseInt(parts[1]);
|
final int data = Integer.parseInt(parts[1]);
|
||||||
return fromLegacyToString(id, data);
|
return fromLegacyToString(id, data);
|
||||||
} else {
|
} else {
|
||||||
return fromLegacyToString(Integer.parseInt(workingString));
|
return fromLegacyToString(Integer.parseInt(workingString), 0);
|
||||||
}
|
}
|
||||||
} catch (final Throwable exception) {
|
} catch (final Throwable exception) {
|
||||||
return null;
|
return null;
|
||||||
@ -766,14 +768,7 @@ public final class BukkitLegacyMappings extends LegacyMappings {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlotBlock fromLegacyToString(final int id) {
|
|
||||||
return LEGACY_ID_TO_STRING_PLOT_BLOCK.get(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlotBlock fromLegacyToString(final int id, final int data) {
|
public PlotBlock fromLegacyToString(final int id, final int data) {
|
||||||
if (data == 0) {
|
|
||||||
return fromLegacyToString(id);
|
|
||||||
}
|
|
||||||
return LEGACY_ID_AND_DATA_TO_STRING_PLOT_BLOCK.get(new IdDataPair(id, data));
|
return LEGACY_ID_AND_DATA_TO_STRING_PLOT_BLOCK.get(new IdDataPair(id, data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,12 +125,10 @@ public class BukkitLocalQueue<T> extends BasicLocalBlockQueue<T> {
|
|||||||
} else {
|
} else {
|
||||||
final LegacyPlotBlock legacyPlotBlock = (LegacyPlotBlock) plotBlock;
|
final LegacyPlotBlock legacyPlotBlock = (LegacyPlotBlock) plotBlock;
|
||||||
material = PlotSquared.get().IMP.getLegacyMappings()
|
material = PlotSquared.get().IMP.getLegacyMappings()
|
||||||
.fromLegacyToString(legacyPlotBlock.getId()).to(Material.class);
|
.fromLegacyToString(legacyPlotBlock.getId(), legacyPlotBlock.getData()).to(Material.class);
|
||||||
if (material == null) {
|
if (material == null) {
|
||||||
throw new IllegalStateException(String
|
throw new IllegalStateException(String
|
||||||
.format("Could not find material that matches %s",
|
.format("Could not find material that matches %s", legacyPlotBlock.toString()));
|
||||||
PlotSquared.get().IMP.getLegacyMappings()
|
|
||||||
.fromLegacyToString(legacyPlotBlock.getId())));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
block.setType(material, false);
|
block.setType(material, false);
|
||||||
@ -142,7 +140,7 @@ public class BukkitLocalQueue<T> extends BasicLocalBlockQueue<T> {
|
|||||||
}
|
}
|
||||||
final LegacyPlotBlock legacyPlotBlock = (LegacyPlotBlock) plotBlock;
|
final LegacyPlotBlock legacyPlotBlock = (LegacyPlotBlock) plotBlock;
|
||||||
return Material.getMaterial(PlotSquared.get().IMP.getLegacyMappings()
|
return Material.getMaterial(PlotSquared.get().IMP.getLegacyMappings()
|
||||||
.fromLegacyToString(((LegacyPlotBlock) plotBlock).id).toString()) == block.getType()
|
.fromLegacyToString(((LegacyPlotBlock) plotBlock).id, ((LegacyPlotBlock) plotBlock).data).toString()) == block.getType()
|
||||||
&& (legacyPlotBlock.id == 0 || legacyPlotBlock.data == block.getData());
|
&& (legacyPlotBlock.id == 0 || legacyPlotBlock.data == block.getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +52,11 @@ public interface IPlotMain extends ILogger {
|
|||||||
*/
|
*/
|
||||||
void disable();
|
void disable();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Completely shut down the plugin
|
||||||
|
*/
|
||||||
|
void shutdown();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the version of the PlotSquared being used.
|
* Get the version of the PlotSquared being used.
|
||||||
*
|
*
|
||||||
|
@ -119,7 +119,13 @@ import java.util.zip.ZipInputStream;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
TaskManager.IMP = this.IMP.getTaskManager();
|
TaskManager.IMP = this.IMP.getTaskManager();
|
||||||
setupConfigs();
|
|
||||||
|
// World Util. Has to be done before config files are loaded
|
||||||
|
WorldUtil.IMP = this.IMP.initWorldUtil();
|
||||||
|
|
||||||
|
if (!setupConfigs()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.translationFile = MainUtil.getFile(this.IMP.getDirectory(),
|
this.translationFile = MainUtil.getFile(this.IMP.getDirectory(),
|
||||||
Settings.Paths.TRANSLATIONS + File.separator + IMP.getPluginName()
|
Settings.Paths.TRANSLATIONS + File.separator + IMP.getPluginName()
|
||||||
+ ".use_THIS.yml");
|
+ ".use_THIS.yml");
|
||||||
@ -176,8 +182,6 @@ import java.util.zip.ZipInputStream;
|
|||||||
InventoryUtil.manager = this.IMP.initInventoryUtil();
|
InventoryUtil.manager = this.IMP.initInventoryUtil();
|
||||||
// create setup util class
|
// create setup util class
|
||||||
SetupUtils.manager = this.IMP.initSetupUtils();
|
SetupUtils.manager = this.IMP.initSetupUtils();
|
||||||
// World Util
|
|
||||||
WorldUtil.IMP = this.IMP.initWorldUtil();
|
|
||||||
// Set block
|
// Set block
|
||||||
GlobalBlockQueue.IMP = new GlobalBlockQueue(IMP.initBlockQueue(), 1);
|
GlobalBlockQueue.IMP = new GlobalBlockQueue(IMP.initBlockQueue(), 1);
|
||||||
GlobalBlockQueue.IMP.runTask();
|
GlobalBlockQueue.IMP.runTask();
|
||||||
@ -1543,11 +1547,13 @@ import java.util.zip.ZipInputStream;
|
|||||||
try {
|
try {
|
||||||
// Validate that all data in the db is correct
|
// Validate that all data in the db is correct
|
||||||
final HashSet<Plot> plots = new HashSet<>();
|
final HashSet<Plot> plots = new HashSet<>();
|
||||||
foreachPlotRaw(new RunnableVal<Plot>() {
|
try {
|
||||||
@Override public void run(Plot value) {
|
foreachPlotRaw(new RunnableVal<Plot>() {
|
||||||
plots.add(value);
|
@Override public void run(Plot value) {
|
||||||
}
|
plots.add(value);
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
} catch (final Exception ignored) {}
|
||||||
DBFunc.validatePlots(plots);
|
DBFunc.validatePlots(plots);
|
||||||
|
|
||||||
// Close the connection
|
// Close the connection
|
||||||
@ -1661,7 +1667,7 @@ import java.util.zip.ZipInputStream;
|
|||||||
* - Storage: storage.yml<br>
|
* - Storage: storage.yml<br>
|
||||||
* - Translation: PlotSquared.use_THIS.yml, style.yml<br>
|
* - Translation: PlotSquared.use_THIS.yml, style.yml<br>
|
||||||
*/
|
*/
|
||||||
public void setupConfigs() {
|
public boolean setupConfigs() {
|
||||||
File folder = new File(this.IMP.getDirectory(), "config");
|
File folder = new File(this.IMP.getDirectory(), "config");
|
||||||
if (!folder.exists() && !folder.mkdirs()) {
|
if (!folder.exists() && !folder.mkdirs()) {
|
||||||
PlotSquared.log(C.PREFIX
|
PlotSquared.log(C.PREFIX
|
||||||
@ -1674,6 +1680,34 @@ import java.util.zip.ZipInputStream;
|
|||||||
"Could not create the worlds file, please create \"worlds.yml\" manually.");
|
"Could not create the worlds file, please create \"worlds.yml\" manually.");
|
||||||
}
|
}
|
||||||
this.worlds = YamlConfiguration.loadConfiguration(this.worldsFile);
|
this.worlds = YamlConfiguration.loadConfiguration(this.worldsFile);
|
||||||
|
|
||||||
|
if (this.worlds.contains("worlds")) {
|
||||||
|
if (!this.worlds.contains("configuration_version") || !this.worlds
|
||||||
|
.getString("configuration_version").equalsIgnoreCase(LegacyConverter.CONFIGURATION_VERSION)) {
|
||||||
|
// Conversion needed
|
||||||
|
log(C.LEGACY_CONFIG_FOUND.s());
|
||||||
|
try {
|
||||||
|
com.google.common.io.Files
|
||||||
|
.copy(this.worldsFile, new File(folder, "worlds.yml.old"));
|
||||||
|
log(C.LEGACY_CONFIG_BACKUP.s());
|
||||||
|
final ConfigurationSection worlds = this.worlds.getConfigurationSection("worlds");
|
||||||
|
final LegacyConverter converter = new LegacyConverter(worlds);
|
||||||
|
converter.convert();
|
||||||
|
this.worlds.set("configuration_version", LegacyConverter.CONFIGURATION_VERSION);
|
||||||
|
this.worlds.set("worlds", worlds); // Redundant, but hey... ¯\_(ツ)_/¯
|
||||||
|
this.worlds.save(this.worldsFile);
|
||||||
|
log(C.LEGACY_CONFIG_DONE.s());
|
||||||
|
} catch (final Exception e) {
|
||||||
|
log(C.LEGACY_CONFIG_CONVERSION_FAILED.s());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
// Disable plugin
|
||||||
|
this.IMP.shutdown();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.worlds.set("configuration_version", LegacyConverter.CONFIGURATION_VERSION);
|
||||||
|
}
|
||||||
} catch (IOException ignored) {
|
} catch (IOException ignored) {
|
||||||
PlotSquared.log("Failed to save settings.yml");
|
PlotSquared.log("Failed to save settings.yml");
|
||||||
}
|
}
|
||||||
@ -1734,6 +1768,7 @@ import java.util.zip.ZipInputStream;
|
|||||||
PlotSquared.log("Configuration file saving failed");
|
PlotSquared.log("Configuration file saving failed");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -247,7 +247,7 @@ import java.util.Map.Entry;
|
|||||||
|
|
||||||
boolean valid = false;
|
boolean valid = false;
|
||||||
try {
|
try {
|
||||||
step.isValid(args[0]);
|
valid = step.isValid(args[0]);
|
||||||
} catch (final Configuration.UnsafeBlockException e) {
|
} catch (final Configuration.UnsafeBlockException e) {
|
||||||
C.NOT_ALLOWED_BLOCK.send(player, e.getUnsafeBlock().toString());
|
C.NOT_ALLOWED_BLOCK.send(player, e.getUnsafeBlock().toString());
|
||||||
}
|
}
|
||||||
|
@ -851,6 +851,21 @@ public enum C {
|
|||||||
* Custom
|
* Custom
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Legacy Configuration Conversion
|
||||||
|
*/
|
||||||
|
LEGACY_CONFIG_FOUND("A legacy configuration file was detected. Conversion will be attempted.",
|
||||||
|
"LegacyConfig"), LEGACY_CONFIG_BACKUP(
|
||||||
|
"A copy of worlds.yml $1have been saved in the file worlds.yml.old$1.",
|
||||||
|
"LegacyConfig"), LEGACY_CONFIG_REPLACED("> %s has been replaced with %s",
|
||||||
|
"LegacyConfig"), LEGACY_CONFIG_DONE(
|
||||||
|
"The conversion has finished. PlotSquared will now be disabled and the new configuration file will"
|
||||||
|
+ " be used at next startup. Please review the new worlds.yml file. "
|
||||||
|
+ "Please note that schematics will not be converted, as we are now using WorldEdit to handle schematics. "
|
||||||
|
+ "You need to re-generate the schematics.",
|
||||||
|
"LegacyConfig"), LEGACY_CONFIG_CONVERSION_FAILED(
|
||||||
|
"Failed to convert the legacy configuration file. See stack trace for information.", "LegacyConfig"),
|
||||||
|
|
||||||
CUSTOM_STRING("-", "-");
|
CUSTOM_STRING("-", "-");
|
||||||
|
|
||||||
public static final HashMap<String, String> replacements = new HashMap<>();
|
public static final HashMap<String, String> replacements = new HashMap<>();
|
||||||
@ -1048,5 +1063,4 @@ public enum C {
|
|||||||
} else {
|
} else {
|
||||||
caller.sendMessage(msg);
|
caller.sendMessage(msg);
|
||||||
}
|
}
|
||||||
}
|
}}
|
||||||
}
|
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
package com.github.intellectualsites.plotsquared.plot.util;
|
package com.github.intellectualsites.plotsquared.plot.util;
|
||||||
|
|
||||||
import com.github.intellectualsites.plotsquared.configuration.ConfigurationSection;
|
import com.github.intellectualsites.plotsquared.configuration.ConfigurationSection;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.PlotSquared;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.config.C;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.BlockBucket;
|
import com.github.intellectualsites.plotsquared.plot.object.BlockBucket;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.PlotBlock;
|
import com.github.intellectualsites.plotsquared.plot.object.PlotBlock;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts legacy configurations into the new (BlockBucket) format
|
* Converts legacy configurations into the new (BlockBucket) format
|
||||||
@ -13,6 +18,8 @@ import java.util.*;
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class LegacyConverter {
|
public final class LegacyConverter {
|
||||||
|
|
||||||
|
public static final String CONFIGURATION_VERSION = "post_flattening";
|
||||||
|
|
||||||
private enum ConfigurationType {
|
private enum ConfigurationType {
|
||||||
BLOCK, BLOCK_LIST
|
BLOCK, BLOCK_LIST
|
||||||
}
|
}
|
||||||
@ -40,7 +47,7 @@ public final class LegacyConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setString(@NonNull final ConfigurationSection section, @NonNull final String string, @NonNull final BlockBucket blocks) {
|
private void setString(@NonNull final ConfigurationSection section, @NonNull final String string, @NonNull final BlockBucket blocks) {
|
||||||
if (!this.configuration.contains(string)) {
|
if (!section.contains(string)) {
|
||||||
throw new IllegalArgumentException(String.format("No such key: %s", string));
|
throw new IllegalArgumentException(String.format("No such key: %s", string));
|
||||||
}
|
}
|
||||||
section.set(string, blocks.toString());
|
section.set(string, blocks.toString());
|
||||||
@ -85,6 +92,7 @@ public final class LegacyConverter {
|
|||||||
@NonNull final String block) {
|
@NonNull final String block) {
|
||||||
final BlockBucket bucket = this.blockToBucket(block);
|
final BlockBucket bucket = this.blockToBucket(block);
|
||||||
this.setString(section, key, bucket);
|
this.setString(section, key, bucket);
|
||||||
|
PlotSquared.log(C.LEGACY_CONFIG_REPLACED.f(block, bucket.toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void convertBlockList(@NonNull final ConfigurationSection section, @NonNull final String key,
|
private void convertBlockList(@NonNull final ConfigurationSection section, @NonNull final String key,
|
||||||
@ -92,6 +100,18 @@ public final class LegacyConverter {
|
|||||||
final PlotBlock[] blocks = this.splitBlockList(blockList);
|
final PlotBlock[] blocks = this.splitBlockList(blockList);
|
||||||
final BlockBucket bucket = this.blockListToBucket(blocks);
|
final BlockBucket bucket = this.blockListToBucket(blocks);
|
||||||
this.setString(section, key, bucket);
|
this.setString(section, key, bucket);
|
||||||
|
PlotSquared.log(C.LEGACY_CONFIG_REPLACED.f(plotBlockArrayString(blocks), bucket.toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String plotBlockArrayString(@NonNull final PlotBlock[] blocks) {
|
||||||
|
final StringBuilder builder = new StringBuilder();
|
||||||
|
for (int i = 0; i < blocks.length; i++) {
|
||||||
|
builder.append(blocks[i].toString());
|
||||||
|
if ((i + 1) < blocks.length) {
|
||||||
|
builder.append(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void convert() {
|
public void convert() {
|
||||||
|
@ -6,8 +6,6 @@ public abstract class LegacyMappings {
|
|||||||
|
|
||||||
public abstract PlotBlock fromAny(final String string);
|
public abstract PlotBlock fromAny(final String string);
|
||||||
|
|
||||||
public abstract PlotBlock fromLegacyToString(final int id);
|
|
||||||
|
|
||||||
public abstract PlotBlock fromLegacyToString(final int id, final int data);
|
public abstract PlotBlock fromLegacyToString(final int id, final int data);
|
||||||
|
|
||||||
public abstract PlotBlock fromLegacyToString(final String id);
|
public abstract PlotBlock fromLegacyToString(final String id);
|
||||||
|
Loading…
Reference in New Issue
Block a user