commit 602fc2e91dd62f607f2209eee1676c2a50f20b8e Author: SBDeveloper Date: Thu Nov 10 20:25:28 2022 +0100 :tada: First commit! diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4788b4b --- /dev/null +++ b/.gitignore @@ -0,0 +1,113 @@ +# User-specific stuff +.idea/ + +*.iml +*.ipr +*.iws + +# IntelliJ +out/ + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +target/ + +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next + +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +.flattened-pom.xml + +# Common working directory +run/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..a908946 --- /dev/null +++ b/pom.xml @@ -0,0 +1,90 @@ + + + 4.0.0 + + tech.sbdevelopment + VehiclesPlusConverter + 1.0 + jar + + VehiclesPlusConverter + + Conversion plugin for v2 to v3. + + 1.8 + UTF-8 + + sbdevelopment.tech + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 10 + 10 + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + false + + + + + + + + src/main/resources + true + + + + + + + spigotmc-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + + org.spigotmc + spigot-api + 1.19.2-R0.1-SNAPSHOT + provided + + + nl.sbdeveloper + VehiclesPlus-v2 + 2.3.5 + system + ${project.basedir}/src/libs/VehiclesPlus-2.3.5.jar + + + nl.sbdeveloper + VehiclesPlus-v3 + 3.0.0 + system + ${project.basedir}/src/libs/VehiclesPlus-3.0.0.jar + + + diff --git a/src/main/java/tech/sbdevelopment/vehiclesplusconverter/ConversionException.java b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/ConversionException.java new file mode 100644 index 0000000..ad69383 --- /dev/null +++ b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/ConversionException.java @@ -0,0 +1,9 @@ +package tech.sbdevelopment.vehiclesplusconverter; + +import java.io.IOException; + +public class ConversionException extends IOException { + public ConversionException(String before, String filename) { + super(before + " " + filename + ".yml"); + } +} diff --git a/src/main/java/tech/sbdevelopment/vehiclesplusconverter/Converter.java b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/Converter.java new file mode 100644 index 0000000..e3ef13a --- /dev/null +++ b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/Converter.java @@ -0,0 +1,303 @@ +package tech.sbdevelopment.vehiclesplusconverter; + +import me.legofreak107.vehiclesplus.VehiclesPlus; +import me.legofreak107.vehiclesplus.vehicles.api.VehiclesPlusAPI; +import me.legofreak107.vehiclesplus.vehicles.fuel.FuelType; +import me.legofreak107.vehiclesplus.vehicles.rims.RimDesign; +import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.BaseVehicle; +import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.StorageVehicle; +import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.Part; +import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.Wheel; +import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.seats.BikeSeat; +import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.seats.Seat; +import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.seats.TurretSeat; +import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.skins.BikeSkin; +import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.skins.Rotor; +import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.skins.Skin; +import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.skins.Turret; +import nl.sbdeveloper.vehiclesplus.api.vehicles.VehicleModel; +import nl.sbdeveloper.vehiclesplus.api.vehicles.settings.UpgradableSetting; +import nl.sbdeveloper.vehiclesplus.api.vehicles.settings.impl.*; +import nl.sbdeveloper.vehiclesplus.storage.file.JSONFile; +import org.bukkit.Bukkit; +import org.bukkit.Particle; +import org.bukkit.command.CommandSender; +import org.bukkit.scheduler.BukkitRunnable; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.logging.Level; + +import static tech.sbdevelopment.vehiclesplusconverter.utils.MainUtil.__; + +public class Converter { + private Converter() { + } + + private static final Sounds defaultSounds = Sounds.builder() + .idle(new Sounds.Sound("car.idle", 6)) + .start(new Sounds.Sound("car.start", 2)) + .accelerate(new Sounds.Sound("car.accelerate", 2)) + .driving(new Sounds.Sound("car.driving", 2)) + .slowingDown(new Sounds.Sound("car.slowingdown", 2)) + .build(); + + public static void convert(CommandSender sender) { + sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &fStarting v2 to v3 conversion...")); + + sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &fConverting rim designs...")); + convertRims(); + + sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &fConverting fuel types...")); + convertFuels(); + + sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &fConverting vehicle models...")); + convertVehicleModels(); + + sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &fConverting vehicles...")); + convertVehicles(); + + Bukkit.getScheduler().runTaskLater(VehiclesPlusConverter.getInstance(), () -> Bukkit.getServer().shutdown(), 20L * 15); + new BukkitRunnable() { + int counter = 15; + + @Override + public void run() { + sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &f" + (counter == 15 ? "Conversion finished! " : "") + "&bRebooting in &3" + counter + " &bseconds...")); + counter--; + } + }.runTaskTimer(VehiclesPlusConverter.getInstance(), 20L, 20L); + } + + private static void convertRims() { + for (Map.Entry entry : VehiclesPlus.getVehicleManager().getRimDesignHashMap().entrySet()) { + nl.sbdeveloper.vehiclesplus.api.vehicles.rims.RimDesign rd = nl.sbdeveloper.vehiclesplus.api.vehicles.rims.RimDesign.builder() + .name(entry.getValue().getName()) + .price(entry.getValue().getPrice()) + .skin(entry.getValue().getSkin()) + .build(); + + nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getRimDesigns().put(entry.getKey(), rd); + } + } + + private static void convertFuels() { + for (Map.Entry entry : VehiclesPlus.getVehicleManager().getFuelTypeHashMap().entrySet()) { + nl.sbdeveloper.vehiclesplus.api.vehicles.fuel.FuelType ft = nl.sbdeveloper.vehiclesplus.api.vehicles.fuel.FuelType.builder() + .name(entry.getValue().getName()) + .item(entry.getValue().getFuelItem()) + .pricePerLiter(entry.getValue().getPricePerLiter()) + .build(); + + nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getFuelTypes().put(entry.getKey(), ft); + } + } + + private static void convertVehicleModels() { + for (BaseVehicle baseVehicle : VehiclesPlusAPI.getVehicleManager().getBaseVehicleMap().values()) { + try { + VehicleModel.VehicleModelBuilder vehicleModelBuilder = VehicleModel.builder() + .id(baseVehicle.getName()) + .displayName(baseVehicle.getName()) + .typeId(getTypeIdByClass(baseVehicle.getName(), getClassByFullName(baseVehicle.getVehicleType()))) + .availableColors(baseVehicle.getBaseColorList()); + + for (Part part : baseVehicle.getPartList()) { + if (part instanceof BikeSeat) { + BikeSeat bikeSeat = (BikeSeat) part; + vehicleModelBuilder = vehicleModelBuilder.part(new nl.sbdeveloper.vehiclesplus.api.vehicles.parts.impl.seat.BikeSeat( + bikeSeat.getXOffset(), + bikeSeat.getYOffset(), + bikeSeat.getZOffset(), + bikeSeat.getSteer() + )); + } else if (part instanceof TurretSeat) { + TurretSeat turretSeat = (TurretSeat) part; + vehicleModelBuilder = vehicleModelBuilder.part(new nl.sbdeveloper.vehiclesplus.api.vehicles.parts.impl.seat.TurretSeat( + turretSeat.getXOffset(), + turretSeat.getYOffset(), + turretSeat.getZOffset(), + baseVehicle.getPartList().stream().filter(Turret.class::isInstance).findFirst().orElseThrow(() -> new ConversionException("No Turret found while loading TurretSeat in file", baseVehicle.getName())).getUID() + )); + } else if (part instanceof Seat) { + Seat seat = (Seat) part; + vehicleModelBuilder = vehicleModelBuilder.part(new nl.sbdeveloper.vehiclesplus.api.vehicles.parts.impl.seat.Seat( + seat.getXOffset(), + seat.getYOffset(), + seat.getZOffset(), + seat.getSteer() + )); + } else if (part instanceof BikeSkin) { + BikeSkin bikeSkin = (BikeSkin) part; + vehicleModelBuilder = vehicleModelBuilder.part(new nl.sbdeveloper.vehiclesplus.api.vehicles.parts.impl.skin.BikeSkin( + bikeSkin.getXOffset(), + bikeSkin.getYOffset(), + bikeSkin.getZOffset(), + bikeSkin.getSkinColored() + )); + } else if (part instanceof Rotor) { + Rotor rotor = (Rotor) part; + vehicleModelBuilder = vehicleModelBuilder.part(new nl.sbdeveloper.vehiclesplus.api.vehicles.parts.impl.skin.Rotor( + rotor.getXOffset(), + rotor.getYOffset(), + rotor.getZOffset(), + rotor.getSkinColored() + )); + } else if (part instanceof Turret) { + Turret turret = (Turret) part; + vehicleModelBuilder = vehicleModelBuilder.part(new nl.sbdeveloper.vehiclesplus.api.vehicles.parts.impl.skin.Turret( + turret.getXOffset(), + turret.getYOffset(), + turret.getZOffset(), + turret.getSkin(), + turret.getExplosionSize(), + turret.getAmmo() + )); + } else if (part instanceof Skin) { + Skin skin = (Skin) part; + vehicleModelBuilder = vehicleModelBuilder.part(new nl.sbdeveloper.vehiclesplus.api.vehicles.parts.impl.skin.Skin( + skin.getXOffset(), + skin.getYOffset(), + skin.getZOffset(), + skin.getSkinColored() + )); + } else if (part instanceof Wheel) { + Wheel wheel = (Wheel) part; + vehicleModelBuilder = vehicleModelBuilder.part(new nl.sbdeveloper.vehiclesplus.api.vehicles.parts.impl.Wheel( + wheel.getXOffset(), + wheel.getYOffset(), + wheel.getZOffset(), + VehiclesPlus.getVehicleManager().getRimDesignHashMap().values().stream().findFirst().orElseThrow(() -> new ConversionException("No RimDesign found while loading Wheel in file", baseVehicle.getName())).getName(), + wheel.getColor(), + wheel.getSteering(), + wheel.getRotationOffset() + )); + } + } + + VehicleModel model = vehicleModelBuilder + .maxSpeed(new UpgradableSetting( + baseVehicle.getSpeedSettings().getBase(), + baseVehicle.getSpeedSettings().getMax(), + baseVehicle.getSpeedSettings().getStep(), + baseVehicle.getSpeedSettings().getUpgradeCost() + )) + .fuelTank(new UpgradableSetting( + baseVehicle.getFuelTankSettings().getBase(), + baseVehicle.getFuelTankSettings().getMax(), + baseVehicle.getFuelTankSettings().getStep(), + baseVehicle.getFuelTankSettings().getUpgradeCost() + )) + .turningRadius(new UpgradableSetting( + baseVehicle.getTurningRadiusSettings().getBase(), + baseVehicle.getTurningRadiusSettings().getMax(), + baseVehicle.getTurningRadiusSettings().getStep(), + baseVehicle.getTurningRadiusSettings().getUpgradeCost() + )) + .acceleration(new UpgradableSetting( + baseVehicle.getAccelerationSettings().getBase(), + baseVehicle.getAccelerationSettings().getMax(), + baseVehicle.getAccelerationSettings().getStep(), + baseVehicle.getAccelerationSettings().getUpgradeCost() + )) + .horn(new Horn( + baseVehicle.getHornSettings().getEnabled(), + baseVehicle.getHornSettings().getSound().name() + )) + .drift(baseVehicle.getDrift()) + .exhaust(new Exhaust( + baseVehicle.getExhaustSettings().getEnabled(), + baseVehicle.getExhaustSettings().getXOffset(), + baseVehicle.getExhaustSettings().getYOffset(), + baseVehicle.getExhaustSettings().getZOffset(), + Particle.valueOf(baseVehicle.getExhaustSettings().getParticleName()) + )) + .exitWhileMoving(baseVehicle.getCanExitWhileMoving()) + .price(baseVehicle.getPrice()) + .fuel(new Fuel( + baseVehicle.getFuelSettings().getType(), + baseVehicle.getFuelSettings().getUsage() + )) + .health(baseVehicle.getHealth()) + .trunkSize(baseVehicle.getTrunkSize()) + .hitbox(new Hitbox( + baseVehicle.getHitbox().getLength(), + baseVehicle.getHitbox().getWidth(), + baseVehicle.getHitbox().getHeight() + )) + .realisticSteering(baseVehicle.getSteeringType()) + .permissions(Permissions.builder() + .buy(baseVehicle.getPermissions().getBuyPermission()) + .ride(baseVehicle.getPermissions().getRidePermission()) + .sitWithoutRidePermission(baseVehicle.getPermissions().getEnterWithoutRidePermission()) + .adjust("vp.adjust." + baseVehicle.getName()) + .spawn("vp.spawn." + baseVehicle.getName()) + .build()) + .sounds(defaultSounds) + .build(); + + save(model, "vehicles/" + model.getTypeId(), model.getId()); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + private static void convertVehicles() { + for (Map.Entry> set : VehiclesPlusAPI.getVehicleManager().getPlayerVehicleHashMap().entrySet()) { + UUID ownerUUID = set.getKey(); + for (StorageVehicle vehicle : set.getValue()) { + try { + nl.sbdeveloper.vehiclesplus.api.vehicles.impl.StorageVehicle newVehicle = new nl.sbdeveloper.vehiclesplus.api.vehicles.impl.StorageVehicle( + nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getVehicleModels().values().stream().filter(v -> v.getId().equalsIgnoreCase(vehicle.getBaseVehicle())).findFirst().orElseThrow(() -> new ConversionException("No VehicleModel found for", vehicle.getUuid())), + ownerUUID + ); + + newVehicle.save(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + private static String getClassByFullName(String name) { + String[] split = name.split("\\."); + if (split.length == 0) return name; + return split[split.length - 1]; //Last position + } + + private static String getTypeIdByClass(String baseVehicle, String type) throws ConversionException { + switch (type) { + case "BikeType": + return "bike"; + case "BoatType": + return "boat"; + case "CarType": + return "car"; + case "HelicopterType": + return "helicopter"; + case "HovercraftType": + return "hovercraft"; + case "PlaneType": + return "plane"; + default: + throw new InvalidConversionException("vehicleType", baseVehicle); + } + } + + private static void save(Object data, String subFolder, String fileName) { + File parentFolders = new File(nl.sbdeveloper.vehiclesplus.VehiclesPlus.getInstance().getDataFolder(), subFolder); + if (!parentFolders.exists() && !parentFolders.mkdirs()) return; + + JSONFile jsonFile = new JSONFile(nl.sbdeveloper.vehiclesplus.VehiclesPlus.getInstance(), subFolder + "/" + fileName); + try { + jsonFile.write(data); + } catch (IOException e) { + VehiclesPlusConverter.getInstance().getLogger().log(Level.SEVERE, "Couldn't save to the file " + fileName, e); + } + } +} diff --git a/src/main/java/tech/sbdevelopment/vehiclesplusconverter/InvalidConversionException.java b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/InvalidConversionException.java new file mode 100644 index 0000000..9f679d4 --- /dev/null +++ b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/InvalidConversionException.java @@ -0,0 +1,7 @@ +package tech.sbdevelopment.vehiclesplusconverter; + +public class InvalidConversionException extends ConversionException { + public InvalidConversionException(String message, String filename) { + super("Invalid " + message + " found in file", filename); + } +} diff --git a/src/main/java/tech/sbdevelopment/vehiclesplusconverter/VehiclesPlusConverter.java b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/VehiclesPlusConverter.java new file mode 100644 index 0000000..4fbe7b9 --- /dev/null +++ b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/VehiclesPlusConverter.java @@ -0,0 +1,31 @@ +package tech.sbdevelopment.vehiclesplusconverter; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; +import tech.sbdevelopment.vehiclesplusconverter.cmd.ConverterCMD; + +public final class VehiclesPlusConverter extends JavaPlugin { + private static VehiclesPlusConverter instance; + + public static VehiclesPlusConverter getInstance() { + return instance; + } + + @Override + public void onEnable() { + instance = this; + + if (!Bukkit.getPluginManager().isPluginEnabled("VehiclesPlusPro") || !Bukkit.getPluginManager().isPluginEnabled("VehiclesPlus")) { + Bukkit.getLogger().severe("Make sure both the v2 and v3 fully load without any errors! Disabling the converter..."); + Bukkit.getPluginManager().disablePlugin(this); + return; + } + + getCommand("vpconvert").setExecutor(new ConverterCMD()); + } + + @Override + public void onDisable() { + instance = null; + } +} diff --git a/src/main/java/tech/sbdevelopment/vehiclesplusconverter/cmd/ConverterCMD.java b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/cmd/ConverterCMD.java new file mode 100644 index 0000000..2c3fea9 --- /dev/null +++ b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/cmd/ConverterCMD.java @@ -0,0 +1,29 @@ +package tech.sbdevelopment.vehiclesplusconverter.cmd; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; +import tech.sbdevelopment.vehiclesplusconverter.Converter; + +import static tech.sbdevelopment.vehiclesplusconverter.utils.MainUtil.__; + +public class ConverterCMD implements CommandExecutor { + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (label.equalsIgnoreCase("vpconvert")) { + if (!sender.hasPermission("vpconvert.convert")) { + sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &fYou do not have the right permissions to use this command.")); + return false; + } + + if (args.length >= 1 && args[0].equalsIgnoreCase("confirm")) { + Converter.convert(sender); + } else { + sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &fPlease use &b/vpconvert confirm &fto start the conversion!")); + sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &4&lPLEASE NOTE: &cExisting v3 vehicles may be overwritten! &c&lCreate a backup before confirming.")); + } + } + return true; + } +} diff --git a/src/main/java/tech/sbdevelopment/vehiclesplusconverter/utils/MainUtil.java b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/utils/MainUtil.java new file mode 100644 index 0000000..668bf87 --- /dev/null +++ b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/utils/MainUtil.java @@ -0,0 +1,9 @@ +package tech.sbdevelopment.vehiclesplusconverter.utils; + +import net.md_5.bungee.api.ChatColor; + +public class MainUtil { + public static String __(String in) { + return ChatColor.translateAlternateColorCodes('&', in); + } +} diff --git a/src/main/java/tech/sbdevelopment/vehiclesplusconverter/utils/YamlFile.java b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/utils/YamlFile.java new file mode 100644 index 0000000..56516c3 --- /dev/null +++ b/src/main/java/tech/sbdevelopment/vehiclesplusconverter/utils/YamlFile.java @@ -0,0 +1,60 @@ +/* + * This file is part of MapReflectionAPI. + * Copyright (c) 2022 inventivetalent / SBDevelopment - All Rights Reserved + * + * 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 + * (at your option) 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 . + */ + +package tech.sbdevelopment.vehiclesplusconverter.utils; + +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.File; +import java.io.IOException; +import java.util.logging.Level; + +public class YamlFile { + private final JavaPlugin plugin; + private final File file; + private FileConfiguration fileConfiguration; + + public YamlFile(JavaPlugin plugin, File file) { + this.plugin = plugin; + this.file = file; + } + + public void reload() { + this.fileConfiguration = YamlConfiguration.loadConfiguration(this.file); + } + + public FileConfiguration getFile() { + if (this.fileConfiguration == null) + reload(); + + return this.fileConfiguration; + } + + public void save() { + if (this.fileConfiguration == null || this.file == null) + return; + + try { + this.fileConfiguration.save(this.file); + } catch (IOException e) { + plugin.getLogger().log(Level.SEVERE, "Couldn't save the file " + file.getName() + ".", e); + } + } +} \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..feb3d2e --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,16 @@ +name: VehiclesPlusConverter +version: '${project.version}' +main: tech.sbdevelopment.vehiclesplusconverter.VehiclesPlusConverter +api-version: 1.19 +authors: [ SBDeveloper ] +description: Conversion plugin for v2 to v3. +website: sbdevelopment.tech +softdepend: [ VehiclesPlusPro, VehiclesPlus ] +commands: + vpconvert: + description: Convert the v2 to v3 data. + permission: vpconvert.convert +permissions: + vpconvert.convert: + description: Use the /vpconvert command + default: op \ No newline at end of file