Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>me.plytki</groupId>
<artifactId>VirtualRealty</artifactId>
<version>1.3.0</version>
<version>1.4.0</version>
<packaging>jar</packaging>

<name>VirtualRealty</name>
Expand Down Expand Up @@ -97,6 +97,10 @@
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
<repository>
<id>panda-repository</id>
<url>https://repo.panda-lang.org/</url>
</repository>
</repositories>

<dependencies>
Expand Down Expand Up @@ -130,5 +134,10 @@
<version>2.2.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.diorite</groupId>
<artifactId>diorite-config-minimal</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
266 changes: 204 additions & 62 deletions src/main/java/me/plytki/virtualrealty/VirtualRealty.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,30 @@
import me.plytki.virtualrealty.commands.PlotCommand;
import me.plytki.virtualrealty.commands.VirtualRealtyCommand;
import me.plytki.virtualrealty.enums.PlotSize;
import me.plytki.virtualrealty.exceptions.IncompatibleVersionException;
import me.plytki.virtualrealty.listeners.PlotListener;
import me.plytki.virtualrealty.listeners.PlotProtectionListener;
import me.plytki.virtualrealty.listeners.WorldListener;
import me.plytki.virtualrealty.loaders.PluginConfiguration;
import me.plytki.virtualrealty.loaders.SizesConfiguration;
import me.plytki.virtualrealty.managers.PlotManager;
import me.plytki.virtualrealty.objects.Plot;
import me.plytki.virtualrealty.sql.SQL;
import me.plytki.virtualrealty.tasks.PlotExpireTask;
import me.plytki.virtualrealty.utils.ConfigUtil;
import me.plytki.virtualrealty.utils.UpdateChecker;
import me.plytki.virtualrealty.utils.multiversion.VMaterial;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import org.bstats.bukkit.Metrics;
import org.bstats.charts.AdvancedPie;
import org.bstats.charts.SimplePie;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.io.*;
import java.util.*;
import java.util.concurrent.Callable;

public final class VirtualRealty extends JavaPlugin {
Expand All @@ -36,49 +35,58 @@ public final class VirtualRealty extends JavaPlugin {
public static final String PREFIX = "§a§lVR §8§l» §7";
public static ArrayList<BukkitTask> tasks = new ArrayList<>();

private File sizesFile = new File(this.getDataFolder().getAbsolutePath() + "/sizes.yml");
private FileConfiguration sizesConfiguration;
public static File plotsFolder;
public static File plotsSchemaFolder;

private static final ArrayList<String> compatibleVersions = new ArrayList<>();
private boolean closedDueToIncompatibleVersion = false;

private PluginConfiguration pluginConfiguration;
private SizesConfiguration sizesConfiguration;
private final File pluginConfigurationFile = new File(this.getDataFolder(), "config.yml");
private final File sizesConfigurationFile = new File(this.getDataFolder(), "sizes.yml");

private static final ArrayList<String> postVersions = new ArrayList<>();
private boolean configError = false;

public static boolean isLegacy = false;

@Override
public void onEnable() {
// Plugin startup logic
instance = this;
setCompatibleVersions();
if (!checkCompatibleVersion(Bukkit.getBukkitVersion())) {
closedDueToIncompatibleVersion = true;
try {
throw new IncompatibleVersionException("You have installed the wrong VirtualRealty plugin for your server version - The correct plugin to use is §a§ohttps://www.spigotmc.org/resources/virtual-realty.95599/");
} catch (IncompatibleVersionException e) {
e.printStackTrace();
}
Bukkit.getServer().getPluginManager().disablePlugin(instance);
return;
if (!checkLegacyVersions()) {
isLegacy = true;
}
String[] updateCheck = UpdateChecker.getUpdate();
if (updateCheck != null) {
if (!updateCheck[0].equals(this.getDescription().getVersion())) {
System.out.println(" ");
this.getLogger().info("A new version is available!");
this.getLogger().info("Current version you're using: " + this.getDescription().getVersion());
this.getLogger().info("Latest version available: " + updateCheck[0]);
this.getLogger().info("Download link: https://www.spigotmc.org/resources/virtual-realty.95599/");
System.out.println(" ");
} else {
this.getLogger().info("Plugin is up to date!");
}
}
try {
checkConfig();
checkSizesConfig();
} catch (IOException e) {
e.printStackTrace();
}
registerMetrics();
plotsFolder = new File(getInstance().getDataFolder().getAbsolutePath(), "plots");
plotsFolder.mkdirs();
plotsSchemaFolder = new File(plotsFolder.getAbsolutePath(), "primary-terrain");
plotsSchemaFolder.mkdirs();
saveDefaultConfig();
createSizesConfig();
try {
this.pluginConfiguration = ConfigUtil.loadConfig(this.pluginConfigurationFile, PluginConfiguration.class);
this.sizesConfiguration = ConfigUtil.loadConfig(this.sizesConfigurationFile, SizesConfiguration.class);
} catch (Exception exception) {
exception.printStackTrace();
configError = true;
this.getServer().getPluginManager().disablePlugin(this);
return;
}
//createSizesConfig();
loadSizesConfiguration();
connectToDatabase();
registerCommands();
Expand All @@ -89,7 +97,7 @@ public void onEnable() {
@Override
public void onDisable() {
// Plugin shutdown logic
if (closedDueToIncompatibleVersion) {
if (configError) {
return;
}
tasks.forEach(BukkitTask::cancel);
Expand All @@ -104,6 +112,7 @@ private void registerCommands() {
private void registerListeners() {
getServer().getPluginManager().registerEvents(new PlotListener(), this);
getServer().getPluginManager().registerEvents(new PlotProtectionListener(), this);
getServer().getPluginManager().registerEvents(new WorldListener(), this);
}

private void registerTasks() {
Expand Down Expand Up @@ -158,53 +167,186 @@ private void connectToDatabase() {
PlotManager.loadPlots();
}

private void createSizesConfig() {
sizesFile = new File(getDataFolder(), "sizes.yml");
if (!sizesFile.exists()) {
sizesFile.getParentFile().mkdirs();
saveResource("sizes.yml", false);
}
sizesConfiguration = new YamlConfiguration();
try {
sizesConfiguration.load(sizesFile);
} catch (IOException | InvalidConfigurationException e) {
e.printStackTrace();
}
}

public static void loadSizesConfiguration() {
for (PlotSize plotSize : PlotSize.values()) {
if (plotSize == PlotSize.CUSTOM) return;
plotSize.setLength(getInstance().sizesConfiguration.getInt("plots-sizes." + plotSize.name() + ".size.length"));
plotSize.setWidth(getInstance().sizesConfiguration.getInt("plots-sizes." + plotSize.name() + ".size.width"));
plotSize.setHeight(getInstance().sizesConfiguration.getInt("plots-sizes." + plotSize.name() + ".size.height"));
plotSize.setFloorMaterial(Material.valueOf(getInstance().sizesConfiguration.getString("plots-sizes." + plotSize.name() + ".floorMaterial")));
SizesConfiguration.Size classSize = null;
switch (plotSize) {
case SMALL: {
classSize = getInstance().sizesConfiguration.plotSizes.SMALL;
break;
}
case MEDIUM: {
classSize = getInstance().sizesConfiguration.plotSizes.MEDIUM;
break;
}
case LARGE: {
classSize = getInstance().sizesConfiguration.plotSizes.LARGE;
break;
}
}
Material floorMaterial;
try {
floorMaterial = VMaterial.getMaterial(classSize.floorMaterial.toUpperCase());
floorMaterial.name();
} catch (Exception e) {
floorMaterial = VirtualRealty.isLegacy ? Material.GRASS : Material.GRASS_BLOCK;
VirtualRealty.getInstance().getLogger().warning("Couldn't parse floor-material from sizes.yml | Using default: " + (VirtualRealty.isLegacy ? Material.GRASS : Material.GRASS_BLOCK));
}
Material borderMaterial;
try {
borderMaterial = VMaterial.getMaterial(classSize.borderMaterial.toUpperCase());
borderMaterial.name();
} catch (Exception e) {
borderMaterial = VirtualRealty.isLegacy ? Material.getMaterial("STEP") : Material.STONE_BRICK_SLAB;
VirtualRealty.getInstance().getLogger().warning("Couldn't parse border-material from sizes.yml | Using default: " + (VirtualRealty.isLegacy ? Material.getMaterial("STEP") : Material.STONE_BRICK_SLAB));
}
plotSize.setFloorMaterial(floorMaterial);
plotSize.setFloorData(classSize.floorData);
plotSize.setBorderMaterial(borderMaterial);
plotSize.setBorderData(classSize.borderData);
plotSize.setLength(classSize.length);
plotSize.setWidth(classSize.width);
plotSize.setHeight(classSize.height);
}
}

public FileConfiguration getSizesConfiguration() {
return this.sizesConfiguration;
}

public static VirtualRealty getInstance() {
return instance;
}

public boolean checkCompatibleVersion(String version) {
for (String compatibleVersion : compatibleVersions) {
if (version.toLowerCase().contains(compatibleVersion.toLowerCase())) {
public static PluginConfiguration getPluginConfiguration() {
return getInstance().pluginConfiguration;
}

public boolean checkLegacyVersions() {
setPostVersions();
for (String postVersion : postVersions) {
if (Bukkit.getBukkitVersion().toLowerCase().contains(postVersion.toLowerCase())) {
return true;
}
}
return false;
}

public void setCompatibleVersions() {
compatibleVersions.add("1.17");
compatibleVersions.add("1.16");
compatibleVersions.add("1.15");
compatibleVersions.add("1.14");
compatibleVersions.add("1.13");

public void setPostVersions() {
postVersions.add("1.17");
postVersions.add("1.16");
postVersions.add("1.15");
postVersions.add("1.14");
postVersions.add("1.13");
}

public void checkConfig() throws IOException {
File oldConfigFile = new File(this.getDataFolder().getAbsolutePath(), "config.yml");
if (!oldConfigFile.exists()) return;
String version = null;
boolean isOldVersion = true;
boolean updateConfigVersion = false;
BufferedReader reader = new BufferedReader(new FileReader(this.pluginConfigurationFile));
String latestLine;
while((latestLine = reader.readLine()) != null) {
if (latestLine.contains("config-version")) {
version = latestLine.replaceAll("config-version: ", "");
isOldVersion = false;
}
}
if (version == null) {
System.err.println(" ");
this.getLogger().warning("Config has been reset due to major config changes!");
this.getLogger().warning("Old config has been renamed to config.yml.old");
this.getLogger().warning("Please update your config file!");
System.err.println(" ");
} else if (!version.equalsIgnoreCase(VirtualRealty.getInstance().getDescription().getVersion())) {
updateConfigVersion = true;
this.getLogger().info("Config has been updated!");
}

// save old config file
if (isOldVersion) {
File newConfigFile = new File(this.getDataFolder().getAbsolutePath(), "config.yml.old");
if (newConfigFile.exists()) {
newConfigFile.delete();
}
FileUtils.copyFile(oldConfigFile, newConfigFile);
oldConfigFile.delete();
}

// update config version
if (updateConfigVersion) {
List<String> lines = new ArrayList<>();
LineIterator iterator = FileUtils.lineIterator(oldConfigFile);
while (iterator.hasNext()) {
String line = iterator.next();
lines.add(line);
}
for (String line : new ArrayList<>(lines)) {
if (line.contains("config-version")) {
int index = lines.indexOf(line);
lines.set(index, "config-version: " + VirtualRealty.getInstance().getDescription().getVersion());
}
}
File newConfigFile = new File(this.getDataFolder().getAbsolutePath(), "config.yml");
FileUtils.deleteQuietly(newConfigFile);
FileUtils.writeLines(newConfigFile, lines);
newConfigFile.createNewFile();
}
}

public void checkSizesConfig() throws IOException {
File oldConfigFile = new File(this.getDataFolder().getAbsolutePath(), "sizes.yml");
if (!oldConfigFile.exists()) return;
String version = null;
boolean isOldVersion = true;
boolean updateConfigVersion = false;
BufferedReader reader = new BufferedReader(new FileReader(this.pluginConfigurationFile));
String latestLine;
while((latestLine = reader.readLine()) != null) {
if (latestLine.contains("config-version")) {
version = latestLine.replaceAll("config-version: ", "");
isOldVersion = false;
}
}
if (version == null) {
System.err.println(" ");
this.getLogger().warning("Config has been reset due to major config changes!");
this.getLogger().warning("Old config has been renamed to sizes.yml.old");
this.getLogger().warning("Please update your config file!");
System.err.println(" ");
} else if (!version.equalsIgnoreCase(VirtualRealty.getInstance().getDescription().getVersion())) {
updateConfigVersion = true;
this.getLogger().info("Plot sizes config has been updated!");
}

// save old config file
if (isOldVersion) {
File newConfigFile = new File(this.getDataFolder().getAbsolutePath(), "sizes.yml.old");
if (newConfigFile.exists()) {
newConfigFile.delete();
}
FileUtils.copyFile(oldConfigFile, newConfigFile);
oldConfigFile.delete();
}

// update config version
if (updateConfigVersion) {
List<String> lines = new ArrayList<>();
LineIterator iterator = FileUtils.lineIterator(oldConfigFile);
while (iterator.hasNext()) {
String line = iterator.next();
lines.add(line);
}
for (String line : new ArrayList<>(lines)) {
if (line.contains("config-version")) {
int index = lines.indexOf(line);
lines.set(index, "config-version: " + VirtualRealty.getInstance().getDescription().getVersion());
}
}
File newConfigFile = new File(this.getDataFolder().getAbsolutePath(), "sizes.yml");
FileUtils.deleteQuietly(newConfigFile);
FileUtils.writeLines(newConfigFile, lines);
newConfigFile.createNewFile();
}
}

}
Loading