Compare commits
No commits in common. "master" and "0.1" have entirely different histories.
10 changed files with 74 additions and 436 deletions
13
README.md
13
README.md
|
@ -2,11 +2,8 @@
|
||||||
This plugin helps with the conversion of data from VehiclesPlus v2 to v3.
|
This plugin helps with the conversion of data from VehiclesPlus v2 to v3.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
0. Make sure VehiclesPlus v2 is still installed. Otherwise install it again, you can find the .jar in the version history.
|
1. Make sure you installed both VehiclesPlus v2 and VehiclesPlus v3.
|
||||||
1. **Back up your v2 VehiclesPlusPro plugin data folder!**
|
2. Download the [latest release](https://github.com/SBDPlugins/VehiclesPlusConverter/releases) of the converter and install it into your `plugins` folder.
|
||||||
1. Download VehiclesPlus v3 and the [latest release](https://git.sbdevelopment.tech/SBDevelopment/VehiclesPlusConverter/releases) of the converter and install it into your `plugins` folder.
|
3. Restart your server.
|
||||||
1. (Re)start your server and check your console to make sure both v2 and v3 load correctly.
|
4. Use the `/vpconvert` command and follow the instructions.
|
||||||
1. Execute `/vpconvert` and read the instructions.
|
5. The server will restart. After the restart, the new vehicles will be loaded.
|
||||||
1. The plugin will convert all the data to the v3 data folder and stop the server.
|
|
||||||
1. Make sure to remove the .jar files of both VehiclesPlus v2 and VehiclesPlusConverter!
|
|
||||||
1. Start your server again and enjoy v3! 😉
|
|
22
pom.xml
22
pom.xml
|
@ -6,31 +6,33 @@
|
||||||
|
|
||||||
<groupId>tech.sbdevelopment</groupId>
|
<groupId>tech.sbdevelopment</groupId>
|
||||||
<artifactId>VehiclesPlusConverter</artifactId>
|
<artifactId>VehiclesPlusConverter</artifactId>
|
||||||
<version>0.2.4</version>
|
<version>1.0</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>VehiclesPlusConverter</name>
|
<name>VehiclesPlusConverter</name>
|
||||||
|
|
||||||
<description>Conversion plugin for v2 to v3.</description>
|
<description>Conversion plugin for v2 to v3.</description>
|
||||||
<properties>
|
<properties>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
</properties>
|
</properties>
|
||||||
<url>sbdevelopment.tech</url>
|
<url>sbdevelopment.tech</url>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>3.13.0</version>
|
<version>3.8.1</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<release>11</release>
|
<source>10</source>
|
||||||
|
<target>10</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-shade-plugin</artifactId>
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
<version>3.6.0</version>
|
<version>3.2.4</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<phase>package</phase>
|
<phase>package</phase>
|
||||||
|
@ -67,22 +69,22 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.21.4-R0.1-SNAPSHOT</version>
|
<version>1.19.2-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>nl.sbdeveloper</groupId>
|
<groupId>nl.sbdeveloper</groupId>
|
||||||
<artifactId>VehiclesPlus-v2</artifactId>
|
<artifactId>VehiclesPlus-v2</artifactId>
|
||||||
<version>2.4.7.2</version>
|
<version>2.3.5</version>
|
||||||
<scope>system</scope>
|
<scope>system</scope>
|
||||||
<systemPath>${project.basedir}/src/libs/VehiclesPlus-2.4.7.2.jar</systemPath>
|
<systemPath>${project.basedir}/src/libs/VehiclesPlus-2.3.5.jar</systemPath>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>nl.sbdeveloper</groupId>
|
<groupId>nl.sbdeveloper</groupId>
|
||||||
<artifactId>VehiclesPlus-v3</artifactId>
|
<artifactId>VehiclesPlus-v3</artifactId>
|
||||||
<version>3.0.3</version>
|
<version>3.0.0</version>
|
||||||
<scope>system</scope>
|
<scope>system</scope>
|
||||||
<systemPath>${project.basedir}/src/libs/VehiclesPlus-3.0.3.jar</systemPath>
|
<systemPath>${project.basedir}/src/libs/VehiclesPlus-3.0.0.jar</systemPath>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json"
|
|
||||||
}
|
|
|
@ -3,7 +3,6 @@ package tech.sbdevelopment.vehiclesplusconverter;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import tech.sbdevelopment.vehiclesplusconverter.cmd.ConverterCMD;
|
import tech.sbdevelopment.vehiclesplusconverter.cmd.ConverterCMD;
|
||||||
import tech.sbdevelopment.vehiclesplusconverter.utils.Version;
|
|
||||||
|
|
||||||
public final class VehiclesPlusConverter extends JavaPlugin {
|
public final class VehiclesPlusConverter extends JavaPlugin {
|
||||||
private static VehiclesPlusConverter instance;
|
private static VehiclesPlusConverter instance;
|
||||||
|
@ -22,20 +21,6 @@ public final class VehiclesPlusConverter extends JavaPlugin {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Version versionOld = Version.of(Bukkit.getPluginManager().getPlugin("VehiclesPlusPro").getDescription().getVersion());
|
|
||||||
if (versionOld.isOlderThan(Version.of("2.4.7.1"))) {
|
|
||||||
Bukkit.getLogger().severe("Your VehiclesPlus v2 plugin is too old! Please update to at least v2.4.7.1!");
|
|
||||||
Bukkit.getPluginManager().disablePlugin(this);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Version versionNew = Version.of(Bukkit.getPluginManager().getPlugin("VehiclesPlus").getDescription().getVersion());
|
|
||||||
if (versionNew.isOlderThan(Version.of("3.0.3"))) {
|
|
||||||
Bukkit.getLogger().severe("Your VehiclesPlus v3 plugin is too old! Please update to at least v3.0.3!");
|
|
||||||
Bukkit.getPluginManager().disablePlugin(this);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
getCommand("vpconvert").setExecutor(new ConverterCMD());
|
getCommand("vpconvert").setExecutor(new ConverterCMD());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,9 @@
|
||||||
package tech.sbdevelopment.vehiclesplusconverter.api;
|
package tech.sbdevelopment.vehiclesplusconverter.api;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class ConversionException extends IOException {
|
public class ConversionException extends IOException {
|
||||||
public ConversionException(String explanation, String filename) {
|
public ConversionException(String before, String filename) {
|
||||||
super(explanation + " " + filename + ".yml!");
|
super(before + " " + filename + ".yml");
|
||||||
}
|
|
||||||
|
|
||||||
public ConversionException(String explanation, String filename, String expected, Set<String> available) {
|
|
||||||
super(explanation + " " + filename + ".yml! Expected " + expected + ", available: " + String.join(", ", available));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ public class ConverterCMD implements CommandExecutor {
|
||||||
Converter.convert(sender);
|
Converter.convert(sender);
|
||||||
} else {
|
} else {
|
||||||
sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &fPlease use &b/vpconvert confirm &fto start the conversion!"));
|
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!!!"));
|
sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &4&lPLEASE NOTE: &cExisting v3 vehicles may be overwritten! &c&lCreate a backup before confirming."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -15,27 +15,19 @@ import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.skins.BikeS
|
||||||
import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.skins.Rotor;
|
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.Skin;
|
||||||
import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.skins.Turret;
|
import me.legofreak107.vehiclesplus.vehicles.vehicles.objects.addons.skins.Turret;
|
||||||
import nl.sbdeveloper.vehiclesplus.api.garages.Garage;
|
|
||||||
import nl.sbdeveloper.vehiclesplus.api.vehicles.HolderItemPosition;
|
|
||||||
import nl.sbdeveloper.vehiclesplus.api.vehicles.VehicleModel;
|
import nl.sbdeveloper.vehiclesplus.api.vehicles.VehicleModel;
|
||||||
import nl.sbdeveloper.vehiclesplus.api.vehicles.settings.UpgradableSetting;
|
import nl.sbdeveloper.vehiclesplus.api.vehicles.settings.UpgradableSetting;
|
||||||
import nl.sbdeveloper.vehiclesplus.api.vehicles.settings.impl.*;
|
import nl.sbdeveloper.vehiclesplus.api.vehicles.settings.impl.*;
|
||||||
import nl.sbdeveloper.vehiclesplus.storage.db.exceptions.DataStorageException;
|
|
||||||
import nl.sbdeveloper.vehiclesplus.utils.jackson.ColorList;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.Particle;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import tech.sbdevelopment.vehiclesplusconverter.VehiclesPlusConverter;
|
import tech.sbdevelopment.vehiclesplusconverter.VehiclesPlusConverter;
|
||||||
import tech.sbdevelopment.vehiclesplusconverter.api.ConversionException;
|
import tech.sbdevelopment.vehiclesplusconverter.api.ConversionException;
|
||||||
|
|
||||||
import java.io.File;
|
import java.util.List;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
import static tech.sbdevelopment.vehiclesplusconverter.utils.MainUtil.*;
|
import static tech.sbdevelopment.vehiclesplusconverter.utils.MainUtil.*;
|
||||||
|
|
||||||
|
@ -73,14 +65,6 @@ public class Converter {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &f" + (counter == 15 ? "Conversion finished! " : "") + "&bRebooting in &3" + counter + " &bseconds..."));
|
sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &f" + (counter == 15 ? "Conversion finished! " : "") + "&bRebooting in &3" + counter + " &bseconds..."));
|
||||||
if (counter == 1) {
|
|
||||||
sender.sendMessage(__("&7[&3&lVehiclesPlusConverter&7] &4&lPLEASE NOTE: &cVehiclesPlus v2 and the converter are disabled from now on!"));
|
|
||||||
try {
|
|
||||||
disablePlugin(VehiclesPlus.getInstance());
|
|
||||||
disablePlugin(VehiclesPlusConverter.getInstance());
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
counter--;
|
counter--;
|
||||||
}
|
}
|
||||||
}.runTaskTimer(VehiclesPlusConverter.getInstance(), 20L, 20L);
|
}.runTaskTimer(VehiclesPlusConverter.getInstance(), 20L, 20L);
|
||||||
|
@ -88,50 +72,36 @@ public class Converter {
|
||||||
|
|
||||||
private static void convertRims() {
|
private static void convertRims() {
|
||||||
for (Map.Entry<String, RimDesign> entry : VehiclesPlus.getVehicleManager().getRimDesignHashMap().entrySet()) {
|
for (Map.Entry<String, RimDesign> entry : VehiclesPlus.getVehicleManager().getRimDesignHashMap().entrySet()) {
|
||||||
nl.sbdeveloper.vehiclesplus.api.vehicles.rims.RimDesign rd = new nl.sbdeveloper.vehiclesplus.api.vehicles.rims.RimDesign(
|
nl.sbdeveloper.vehiclesplus.api.vehicles.rims.RimDesign rd = nl.sbdeveloper.vehiclesplus.api.vehicles.rims.RimDesign.builder()
|
||||||
entry.getValue().getName().toLowerCase(),
|
.name(entry.getValue().getName())
|
||||||
entry.getValue().getSkin(),
|
.price(entry.getValue().getPrice())
|
||||||
HolderItemPosition.HEAD,
|
.skin(entry.getValue().getSkin())
|
||||||
entry.getValue().getPrice()
|
.build();
|
||||||
);
|
|
||||||
|
|
||||||
nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getRimDesigns().put(entry.getKey(), rd);
|
nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getRimDesigns().put(entry.getKey(), rd);
|
||||||
rd.save();
|
|
||||||
|
|
||||||
VehiclesPlusConverter.getInstance().getLogger().info("Converted rim design: " + rd.getName());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void convertFuels() {
|
private static void convertFuels() {
|
||||||
for (Map.Entry<String, FuelType> entry : VehiclesPlus.getVehicleManager().getFuelTypeHashMap().entrySet()) {
|
for (Map.Entry<String, FuelType> entry : VehiclesPlus.getVehicleManager().getFuelTypeHashMap().entrySet()) {
|
||||||
nl.sbdeveloper.vehiclesplus.api.vehicles.fuel.FuelType ft = new nl.sbdeveloper.vehiclesplus.api.vehicles.fuel.FuelType(
|
nl.sbdeveloper.vehiclesplus.api.vehicles.fuel.FuelType ft = nl.sbdeveloper.vehiclesplus.api.vehicles.fuel.FuelType.builder()
|
||||||
entry.getValue().getName(),
|
.name(entry.getValue().getName())
|
||||||
entry.getValue().getFuelItem(),
|
.item(entry.getValue().getFuelItem())
|
||||||
entry.getValue().getPricePerLiter()
|
.pricePerLiter(entry.getValue().getPricePerLiter())
|
||||||
);
|
.build();
|
||||||
|
|
||||||
nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getFuelTypes().put(entry.getKey(), ft);
|
nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getFuelTypes().put(entry.getKey(), ft);
|
||||||
ft.save();
|
|
||||||
|
|
||||||
VehiclesPlusConverter.getInstance().getLogger().info("Converted fuel type: " + ft.getName());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void convertVehicleModels() {
|
private static void convertVehicleModels() {
|
||||||
VehiclesPlusConverter.getInstance().getLogger().info("Converting vehicle models: " + VehiclesPlusAPI.getVehicleManager().getBaseVehicleMap().values().stream().map(BaseVehicle::getName).reduce((s1, s2) -> s1 + ", " + s2).orElse(""));
|
|
||||||
|
|
||||||
for (BaseVehicle baseVehicle : VehiclesPlusAPI.getVehicleManager().getBaseVehicleMap().values()) {
|
for (BaseVehicle baseVehicle : VehiclesPlusAPI.getVehicleManager().getBaseVehicleMap().values()) {
|
||||||
if (baseVehicle.getName().startsWith("Example")) {
|
|
||||||
VehiclesPlusConverter.getInstance().getLogger().info("Skipping example vehicle model: " + baseVehicle.getName());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
VehicleModel.Builder vehicleModelBuilder = VehicleModel.builder()
|
VehicleModel.VehicleModelBuilder vehicleModelBuilder = VehicleModel.builder()
|
||||||
.id(baseVehicle.getName())
|
.id(baseVehicle.getName())
|
||||||
.displayName(idToReadable(baseVehicle.getName()))
|
.displayName(baseVehicle.getName())
|
||||||
.typeId(getTypeIdByClass(baseVehicle.getName(), getClassByFullName(baseVehicle.getVehicleType())))
|
.typeId(getTypeIdByClass(baseVehicle.getName(), getClassByFullName(baseVehicle.getVehicleType())))
|
||||||
.availableColors(new ColorList(baseVehicle.getBaseColorList()));
|
.availableColors(baseVehicle.getBaseColorList());
|
||||||
|
|
||||||
for (Part part : baseVehicle.getPartList()) {
|
for (Part part : baseVehicle.getPartList()) {
|
||||||
if (part instanceof BikeSeat) {
|
if (part instanceof BikeSeat) {
|
||||||
|
@ -148,12 +118,7 @@ public class Converter {
|
||||||
turretSeat.getXOffset(),
|
turretSeat.getXOffset(),
|
||||||
turretSeat.getYOffset(),
|
turretSeat.getYOffset(),
|
||||||
turretSeat.getZOffset(),
|
turretSeat.getZOffset(),
|
||||||
baseVehicle.getPartList()
|
baseVehicle.getPartList().stream().filter(Turret.class::isInstance).findFirst().orElseThrow(() -> new ConversionException("No Turret found while loading TurretSeat in file", baseVehicle.getName())).getUID()
|
||||||
.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) {
|
} else if (part instanceof Seat) {
|
||||||
Seat seat = (Seat) part;
|
Seat seat = (Seat) part;
|
||||||
|
@ -169,8 +134,7 @@ public class Converter {
|
||||||
bikeSkin.getXOffset(),
|
bikeSkin.getXOffset(),
|
||||||
bikeSkin.getYOffset(),
|
bikeSkin.getYOffset(),
|
||||||
bikeSkin.getZOffset(),
|
bikeSkin.getZOffset(),
|
||||||
bikeSkin.getSkinColored(),
|
bikeSkin.getSkinColored()
|
||||||
HolderItemPosition.HEAD
|
|
||||||
));
|
));
|
||||||
} else if (part instanceof Rotor) {
|
} else if (part instanceof Rotor) {
|
||||||
Rotor rotor = (Rotor) part;
|
Rotor rotor = (Rotor) part;
|
||||||
|
@ -178,8 +142,7 @@ public class Converter {
|
||||||
rotor.getXOffset(),
|
rotor.getXOffset(),
|
||||||
rotor.getYOffset(),
|
rotor.getYOffset(),
|
||||||
rotor.getZOffset(),
|
rotor.getZOffset(),
|
||||||
rotor.getSkinColored(),
|
rotor.getSkinColored()
|
||||||
HolderItemPosition.HEAD
|
|
||||||
));
|
));
|
||||||
} else if (part instanceof Turret) {
|
} else if (part instanceof Turret) {
|
||||||
Turret turret = (Turret) part;
|
Turret turret = (Turret) part;
|
||||||
|
@ -188,7 +151,6 @@ public class Converter {
|
||||||
turret.getYOffset(),
|
turret.getYOffset(),
|
||||||
turret.getZOffset(),
|
turret.getZOffset(),
|
||||||
turret.getSkin(),
|
turret.getSkin(),
|
||||||
HolderItemPosition.HEAD,
|
|
||||||
turret.getExplosionSize(),
|
turret.getExplosionSize(),
|
||||||
turret.getAmmo()
|
turret.getAmmo()
|
||||||
));
|
));
|
||||||
|
@ -198,57 +160,19 @@ public class Converter {
|
||||||
skin.getXOffset(),
|
skin.getXOffset(),
|
||||||
skin.getYOffset(),
|
skin.getYOffset(),
|
||||||
skin.getZOffset(),
|
skin.getZOffset(),
|
||||||
skin.getSkinColored(),
|
skin.getSkinColored()
|
||||||
HolderItemPosition.HEAD
|
|
||||||
));
|
));
|
||||||
} else if (part instanceof Wheel) {
|
} else if (part instanceof Wheel) {
|
||||||
Wheel wheel = (Wheel) part;
|
Wheel wheel = (Wheel) part;
|
||||||
ItemStack wheelSkin = wheel.getSkinColored();
|
vehicleModelBuilder = vehicleModelBuilder.part(new nl.sbdeveloper.vehiclesplus.api.vehicles.parts.impl.Wheel(
|
||||||
|
|
||||||
// Try to find an existing rim design with this skin
|
|
||||||
Optional<nl.sbdeveloper.vehiclesplus.api.vehicles.rims.RimDesign> matchingRimDesign = nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getRimDesigns()
|
|
||||||
.values()
|
|
||||||
.stream()
|
|
||||||
.filter(rd -> compareItems(rd.getSkin(), wheelSkin))
|
|
||||||
.findFirst();
|
|
||||||
|
|
||||||
if (matchingRimDesign.isEmpty()) {
|
|
||||||
// Create a new rim design since no matching one exists
|
|
||||||
String newRimDesignName = generateRimName();
|
|
||||||
nl.sbdeveloper.vehiclesplus.api.vehicles.rims.RimDesign newRimDesign = new nl.sbdeveloper.vehiclesplus.api.vehicles.rims.RimDesign(
|
|
||||||
newRimDesignName,
|
|
||||||
wheelSkin,
|
|
||||||
HolderItemPosition.HEAD,
|
|
||||||
1000
|
|
||||||
);
|
|
||||||
|
|
||||||
// Add the new rim design to the rim designs map
|
|
||||||
nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getRimDesigns().put(newRimDesignName, newRimDesign);
|
|
||||||
newRimDesign.save();
|
|
||||||
VehiclesPlusConverter.getInstance().getLogger().info("Created new rim design '" + newRimDesignName + "' for wheel skin!");
|
|
||||||
|
|
||||||
// Create the wheel part with the new rim design
|
|
||||||
vehicleModelBuilder = vehicleModelBuilder.part(new nl.sbdeveloper.vehiclesplus.api.vehicles.parts.impl.Wheel(
|
|
||||||
wheel.getXOffset(),
|
wheel.getXOffset(),
|
||||||
wheel.getYOffset(),
|
wheel.getYOffset(),
|
||||||
wheel.getZOffset(),
|
wheel.getZOffset(),
|
||||||
newRimDesign,
|
VehiclesPlus.getVehicleManager().getRimDesignHashMap().values().stream().findFirst().orElseThrow(() -> new ConversionException("No RimDesign found while loading Wheel in file", baseVehicle.getName())).getName(),
|
||||||
wheel.getColor(),
|
wheel.getColor(),
|
||||||
wheel.getSteering(),
|
wheel.getSteering(),
|
||||||
wheel.getRotationOffset()
|
wheel.getRotationOffset()
|
||||||
));
|
));
|
||||||
} else {
|
|
||||||
// Use the existing rim design that matches the skin
|
|
||||||
vehicleModelBuilder = vehicleModelBuilder.part(new nl.sbdeveloper.vehiclesplus.api.vehicles.parts.impl.Wheel(
|
|
||||||
wheel.getXOffset(),
|
|
||||||
wheel.getYOffset(),
|
|
||||||
wheel.getZOffset(),
|
|
||||||
matchingRimDesign.get(),
|
|
||||||
wheel.getColor(),
|
|
||||||
wheel.getSteering(),
|
|
||||||
wheel.getRotationOffset()
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,32 +181,29 @@ public class Converter {
|
||||||
baseVehicle.getSpeedSettings().getBase(),
|
baseVehicle.getSpeedSettings().getBase(),
|
||||||
baseVehicle.getSpeedSettings().getMax(),
|
baseVehicle.getSpeedSettings().getMax(),
|
||||||
baseVehicle.getSpeedSettings().getStep(),
|
baseVehicle.getSpeedSettings().getStep(),
|
||||||
baseVehicle.getSpeedSettings().getUpgradeCost(), "km/h"
|
baseVehicle.getSpeedSettings().getUpgradeCost()
|
||||||
))
|
))
|
||||||
.fuelTank(new UpgradableSetting(
|
.fuelTank(new UpgradableSetting(
|
||||||
baseVehicle.getFuelTankSettings().getBase(),
|
baseVehicle.getFuelTankSettings().getBase(),
|
||||||
baseVehicle.getFuelTankSettings().getMax(),
|
baseVehicle.getFuelTankSettings().getMax(),
|
||||||
baseVehicle.getFuelTankSettings().getStep(),
|
baseVehicle.getFuelTankSettings().getStep(),
|
||||||
baseVehicle.getFuelTankSettings().getUpgradeCost(), "L"
|
baseVehicle.getFuelTankSettings().getUpgradeCost()
|
||||||
))
|
))
|
||||||
.turningRadius(new UpgradableSetting(
|
.turningRadius(new UpgradableSetting(
|
||||||
baseVehicle.getTurningRadiusSettings().getBase(),
|
baseVehicle.getTurningRadiusSettings().getBase(),
|
||||||
baseVehicle.getTurningRadiusSettings().getMax(),
|
baseVehicle.getTurningRadiusSettings().getMax(),
|
||||||
baseVehicle.getTurningRadiusSettings().getStep(),
|
baseVehicle.getTurningRadiusSettings().getStep(),
|
||||||
baseVehicle.getTurningRadiusSettings().getUpgradeCost(), ""
|
baseVehicle.getTurningRadiusSettings().getUpgradeCost()
|
||||||
))
|
))
|
||||||
.acceleration(new UpgradableSetting(
|
.acceleration(new UpgradableSetting(
|
||||||
baseVehicle.getAccelerationSettings().getBase(),
|
baseVehicle.getAccelerationSettings().getBase(),
|
||||||
baseVehicle.getAccelerationSettings().getMax(),
|
baseVehicle.getAccelerationSettings().getMax(),
|
||||||
baseVehicle.getAccelerationSettings().getStep(),
|
baseVehicle.getAccelerationSettings().getStep(),
|
||||||
baseVehicle.getAccelerationSettings().getUpgradeCost(), ""
|
baseVehicle.getAccelerationSettings().getUpgradeCost()
|
||||||
))
|
))
|
||||||
.horn(new Horn(
|
.horn(new Horn(
|
||||||
baseVehicle.getHornSettings().getEnabled(),
|
baseVehicle.getHornSettings().getEnabled(),
|
||||||
new Sounds.Sound(
|
baseVehicle.getHornSettings().getSound().name()
|
||||||
baseVehicle.getHornSettings().getSound().name(),
|
|
||||||
1
|
|
||||||
)
|
|
||||||
))
|
))
|
||||||
.drift(baseVehicle.getDrift())
|
.drift(baseVehicle.getDrift())
|
||||||
.exhaust(new Exhaust(
|
.exhaust(new Exhaust(
|
||||||
|
@ -290,7 +211,7 @@ public class Converter {
|
||||||
baseVehicle.getExhaustSettings().getXOffset(),
|
baseVehicle.getExhaustSettings().getXOffset(),
|
||||||
baseVehicle.getExhaustSettings().getYOffset(),
|
baseVehicle.getExhaustSettings().getYOffset(),
|
||||||
baseVehicle.getExhaustSettings().getZOffset(),
|
baseVehicle.getExhaustSettings().getZOffset(),
|
||||||
baseVehicle.getExhaustSettings().getParticleName().get()
|
Particle.valueOf(baseVehicle.getExhaustSettings().getParticleName())
|
||||||
))
|
))
|
||||||
.exitWhileMoving(baseVehicle.getCanExitWhileMoving())
|
.exitWhileMoving(baseVehicle.getCanExitWhileMoving())
|
||||||
.price(baseVehicle.getPrice())
|
.price(baseVehicle.getPrice())
|
||||||
|
@ -306,107 +227,37 @@ public class Converter {
|
||||||
baseVehicle.getHitbox().getHeight()
|
baseVehicle.getHitbox().getHeight()
|
||||||
))
|
))
|
||||||
.realisticSteering(baseVehicle.getSteeringType())
|
.realisticSteering(baseVehicle.getSteeringType())
|
||||||
.permissions(baseVehicle.getPermissions() != null ?
|
.permissions(Permissions.builder()
|
||||||
Permissions.builder()
|
.buy(baseVehicle.getPermissions().getBuyPermission())
|
||||||
.buy(baseVehicle.getPermissions().getBuyPermission())
|
.ride(baseVehicle.getPermissions().getRidePermission())
|
||||||
.ride(baseVehicle.getPermissions().getRidePermission())
|
.sitWithoutRidePermission(baseVehicle.getPermissions().getEnterWithoutRidePermission())
|
||||||
.sitWithoutRidePermission(baseVehicle.getPermissions().getEnterWithoutRidePermission())
|
|
||||||
.adjust("vp.adjust." + baseVehicle.getName())
|
|
||||||
.spawn("vp.spawn." + baseVehicle.getName())
|
|
||||||
.build()
|
|
||||||
: Permissions.builder()
|
|
||||||
.buy("vp.buy." + baseVehicle.getName())
|
|
||||||
.ride("vp.ride." + baseVehicle.getName())
|
|
||||||
.sitWithoutRidePermission(true)
|
|
||||||
.adjust("vp.adjust." + baseVehicle.getName())
|
.adjust("vp.adjust." + baseVehicle.getName())
|
||||||
.spawn("vp.spawn." + baseVehicle.getName())
|
.spawn("vp.spawn." + baseVehicle.getName())
|
||||||
.build())
|
.build())
|
||||||
.sounds(defaultSounds)
|
.sounds(defaultSounds)
|
||||||
.gearbox(new Gearbox(true, 10))
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
VehiclesPlusConverter.getInstance().getLogger().info("Converted vehicle model: " + model.getId());
|
|
||||||
|
|
||||||
saveToVehiclesPlus(model, "vehicles/" + model.getTypeId(), model.getId());
|
saveToVehiclesPlus(model, "vehicles/" + model.getTypeId(), model.getId());
|
||||||
nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getVehicleModels().put(model.getId(), model);
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
VehiclesPlusConverter.getInstance().getLogger().log(java.util.logging.Level.SEVERE, "Could not convert vehicle model: " + baseVehicle.getName(), e);
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void convertVehicles() {
|
private static void convertVehicles() {
|
||||||
File baseDir = new File("plugins/VehiclesPlusPro/data");
|
for (Map.Entry<UUID, List<StorageVehicle>> set : VehiclesPlusAPI.getVehicleManager().getPlayerVehicleHashMap().entrySet()) {
|
||||||
if (!baseDir.exists()) {
|
UUID ownerUUID = set.getKey();
|
||||||
VehiclesPlusConverter.getInstance().getLogger().severe("Could not find the VehiclesPlusPro data folder!");
|
for (StorageVehicle vehicle : set.getValue()) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (File playerDir : baseDir.listFiles()) {
|
|
||||||
if (playerDir.isDirectory()) {
|
|
||||||
String ownerUUID = playerDir.getName();
|
|
||||||
|
|
||||||
OfflinePlayer player = Bukkit.getOfflinePlayer(UUID.fromString(ownerUUID));
|
|
||||||
if (player.getName() == null) {
|
|
||||||
VehiclesPlusConverter.getInstance().getLogger().severe("Could not find player with UUID: " + ownerUUID + ", skipping...");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
VehiclesPlusConverter.getInstance().getLogger().info("Converting vehicles for player with UUID " + ownerUUID + "...");
|
|
||||||
final Garage garage = nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getPersonalGarage(player);
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
for (File vehicleFile : playerDir.listFiles()) {
|
|
||||||
if (vehicleFile.getName().contains(".yml")) {
|
|
||||||
StorageVehicle vehicle;
|
|
||||||
try {
|
|
||||||
vehicle = StorageVehicle.loadFromStorage(vehicleFile.getAbsolutePath());
|
|
||||||
} catch (Exception e) {
|
|
||||||
Bukkit.getLogger().log(Level.SEVERE, "Could not convert vehicles for player with UUID " + ownerUUID + ", could not load the vehicle!", e);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (vehicle == null) {
|
|
||||||
Bukkit.getLogger().warning("Failed to load vehicle for player with UUID " + ownerUUID + " from file: " + vehicleFile.getName() + ", skipping...");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
nl.sbdeveloper.vehiclesplus.api.vehicles.impl.StorageVehicle newVehicle = new nl.sbdeveloper.vehiclesplus.api.vehicles.impl.StorageVehicle(
|
|
||||||
UUID.randomUUID(),
|
|
||||||
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(), vehicle.getBaseVehicle(), nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getVehicleModels().keySet())),
|
|
||||||
false
|
|
||||||
);
|
|
||||||
|
|
||||||
// Set the vehicle's stats
|
|
||||||
newVehicle.getStatics().forceSetMaxSpeed(vehicle.getVehicleStats().getSpeed());
|
|
||||||
newVehicle.getStatics().forceSetTurningRadius(vehicle.getVehicleStats().getSteering());
|
|
||||||
newVehicle.getStatics().forceSetFuelTank(vehicle.getVehicleStats().getFuelTank());
|
|
||||||
newVehicle.getStatics().setCurrentFuel(vehicle.getVehicleStats().getCurrentFuel());
|
|
||||||
newVehicle.getStatics().forceSetAcceleration(vehicle.getVehicleStats().getAcceleration());
|
|
||||||
newVehicle.getStatics().setBroken(vehicle.getVehicleStats().getBroken());
|
|
||||||
newVehicle.getStatics().setCurrentHealth(vehicle.getVehicleStats().getHealth());
|
|
||||||
|
|
||||||
// Set the trunk
|
|
||||||
newVehicle.getTrunkItems().addAll(Arrays.asList(vehicle.getVehicleTrunk().getContents()));
|
|
||||||
|
|
||||||
newVehicle.forceSave();
|
|
||||||
garage.addVehicle(newVehicle.getUuid());
|
|
||||||
} catch (Exception e) {
|
|
||||||
Bukkit.getLogger().log(Level.SEVERE, "Could not convert vehicles for player with UUID " + ownerUUID + ", could not save the vehicle!", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
VehiclesPlusConverter.getInstance().getLogger().info("Converted vehicle: " + vehicle.getUuid());
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
garage.forceSave();
|
nl.sbdeveloper.vehiclesplus.api.vehicles.impl.StorageVehicle newVehicle = new nl.sbdeveloper.vehiclesplus.api.vehicles.impl.StorageVehicle(
|
||||||
} catch (DataStorageException e) {
|
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())),
|
||||||
Bukkit.getLogger().log(Level.SEVERE, "Could not convert vehicles for player with UUID " + ownerUUID + ", could not save the garage!", e);
|
ownerUUID
|
||||||
}
|
);
|
||||||
|
|
||||||
VehiclesPlusConverter.getInstance().getLogger().info("Converted " + i + " vehicles for player with UUID " + ownerUUID);
|
newVehicle.save();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +1,13 @@
|
||||||
package tech.sbdevelopment.vehiclesplusconverter.utils;
|
package tech.sbdevelopment.vehiclesplusconverter.utils;
|
||||||
|
|
||||||
import com.google.common.io.Files;
|
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
import nl.sbdeveloper.vehiclesplus.storage.file.HJSONFile;
|
import nl.sbdeveloper.vehiclesplus.storage.file.JSONFile;
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
import tech.sbdevelopment.vehiclesplusconverter.VehiclesPlusConverter;
|
import tech.sbdevelopment.vehiclesplusconverter.VehiclesPlusConverter;
|
||||||
import tech.sbdevelopment.vehiclesplusconverter.api.ConversionException;
|
import tech.sbdevelopment.vehiclesplusconverter.api.ConversionException;
|
||||||
import tech.sbdevelopment.vehiclesplusconverter.api.InvalidConversionException;
|
import tech.sbdevelopment.vehiclesplusconverter.api.InvalidConversionException;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class MainUtil {
|
public class MainUtil {
|
||||||
|
@ -29,45 +24,20 @@ public class MainUtil {
|
||||||
return split[split.length - 1]; //Last position
|
return split[split.length - 1]; //Last position
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String idToReadable(String id) {
|
|
||||||
if (id.contains("_")) {
|
|
||||||
// Split on _ and capitalize each part
|
|
||||||
String[] split = id.split("_");
|
|
||||||
StringBuilder builder = new StringBuilder();
|
|
||||||
for (String s : split) {
|
|
||||||
builder.append(s.substring(0, 1).toUpperCase()).append(s.substring(1));
|
|
||||||
builder.append(" ");
|
|
||||||
}
|
|
||||||
return builder.toString().trim();
|
|
||||||
} else {
|
|
||||||
// Capitalize the first letter
|
|
||||||
return id.substring(0, 1).toUpperCase() + id.substring(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void disablePlugin(JavaPlugin plugin) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException, IOException {
|
|
||||||
// Call protected .getFile() method, then rename that file to .jar.old and save
|
|
||||||
Method getFile = JavaPlugin.class.getDeclaredMethod("getFile");
|
|
||||||
getFile.setAccessible(true);
|
|
||||||
File file = (File) getFile.invoke(plugin);
|
|
||||||
File renamedFile = new File(file.getParent(), file.getName() + ".disabled");
|
|
||||||
Files.move(file, renamedFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getTypeIdByClass(String baseVehicle, String type) throws ConversionException {
|
public static String getTypeIdByClass(String baseVehicle, String type) throws ConversionException {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case "BikeType":
|
case "BikeType":
|
||||||
return "bikes";
|
return "bike";
|
||||||
case "BoatType":
|
case "BoatType":
|
||||||
return "boats";
|
return "boat";
|
||||||
case "CarType":
|
case "CarType":
|
||||||
return "cars";
|
return "car";
|
||||||
case "HelicopterType":
|
case "HelicopterType":
|
||||||
return "helicopters";
|
return "helicopter";
|
||||||
case "HovercraftType":
|
case "HovercraftType":
|
||||||
return "hovercrafts";
|
return "hovercraft";
|
||||||
case "PlaneType":
|
case "PlaneType":
|
||||||
return "planes";
|
return "plane";
|
||||||
default:
|
default:
|
||||||
throw new InvalidConversionException("vehicleType", baseVehicle);
|
throw new InvalidConversionException("vehicleType", baseVehicle);
|
||||||
}
|
}
|
||||||
|
@ -75,74 +45,13 @@ public class MainUtil {
|
||||||
|
|
||||||
public static void saveToVehiclesPlus(Object data, String subFolder, String fileName) {
|
public static void saveToVehiclesPlus(Object data, String subFolder, String fileName) {
|
||||||
File parentFolders = new File(nl.sbdeveloper.vehiclesplus.VehiclesPlus.getInstance().getDataFolder(), subFolder);
|
File parentFolders = new File(nl.sbdeveloper.vehiclesplus.VehiclesPlus.getInstance().getDataFolder(), subFolder);
|
||||||
if (!parentFolders.exists() && !parentFolders.mkdirs()) {
|
if (!parentFolders.exists() && !parentFolders.mkdirs()) return;
|
||||||
VehiclesPlusConverter.getInstance().getLogger().log(Level.SEVERE, "Couldn't create the folder " + subFolder);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HJSONFile jsonFile = new HJSONFile(nl.sbdeveloper.vehiclesplus.VehiclesPlus.getInstance(), subFolder + "/" + fileName);
|
JSONFile jsonFile = new JSONFile(nl.sbdeveloper.vehiclesplus.VehiclesPlus.getInstance(), subFolder + "/" + fileName);
|
||||||
try {
|
try {
|
||||||
jsonFile.write(data);
|
jsonFile.write(data);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
VehiclesPlusConverter.getInstance().getLogger().log(Level.SEVERE, "Couldn't save to the file " + fileName, e);
|
VehiclesPlusConverter.getInstance().getLogger().log(Level.SEVERE, "Couldn't save to the file " + fileName, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Compare two ItemStacks for equality based on material type and metadata
|
|
||||||
*
|
|
||||||
* @param item1 First ItemStack
|
|
||||||
* @param item2 Second ItemStack
|
|
||||||
* @return true if the items are considered equal
|
|
||||||
*/
|
|
||||||
public static boolean compareItems(ItemStack item1, ItemStack item2) {
|
|
||||||
if (item1 == null || item2 == null) return false;
|
|
||||||
if (!item1.getType().equals(item2.getType())) return false;
|
|
||||||
|
|
||||||
org.bukkit.inventory.meta.ItemMeta meta1 = item1.getItemMeta();
|
|
||||||
org.bukkit.inventory.meta.ItemMeta meta2 = item2.getItemMeta();
|
|
||||||
|
|
||||||
if (meta1 == null || meta2 == null) return meta1 == meta2;
|
|
||||||
|
|
||||||
// Check CustomModelData if available (1.14+)
|
|
||||||
try {
|
|
||||||
return meta1.hasCustomModelData() && meta2.hasCustomModelData()
|
|
||||||
&& meta1.getCustomModelData() == meta2.getCustomModelData();
|
|
||||||
} catch (NoSuchMethodError ignored) {
|
|
||||||
// Pre 1.14, check Durability/Damage value instead
|
|
||||||
return item1.getDurability() == item2.getDurability();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final String[] RIM_PREFIXES = {
|
|
||||||
"sport", "racing", "luxury", "classic", "vintage", "modern", "elite", "premium", "pro", "ultra"
|
|
||||||
};
|
|
||||||
|
|
||||||
private static final String[] RIM_TYPES = {
|
|
||||||
"star", "spoke", "mesh", "alloy", "chrome", "forged", "cast", "split", "blade", "wave"
|
|
||||||
};
|
|
||||||
|
|
||||||
private static final String[] RIM_SUFFIXES = {
|
|
||||||
"design", "series", "line", "edition", "collection", "style", "plus", "max", "elite", "pro"
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate a realistic rim design name
|
|
||||||
*
|
|
||||||
* @return A random rim design name
|
|
||||||
*/
|
|
||||||
public static String generateRimName() {
|
|
||||||
String prefix = RIM_PREFIXES[(int) (Math.random() * RIM_PREFIXES.length)];
|
|
||||||
String type = RIM_TYPES[(int) (Math.random() * RIM_TYPES.length)];
|
|
||||||
String suffix = RIM_SUFFIXES[(int) (Math.random() * RIM_SUFFIXES.length)];
|
|
||||||
|
|
||||||
// Add a random number between 100 and 999
|
|
||||||
int number = 100 + (int) (Math.random() * 900);
|
|
||||||
|
|
||||||
// Convert to PascalCase
|
|
||||||
return prefix.substring(0, 1).toUpperCase() + prefix.substring(1) +
|
|
||||||
type.substring(0, 1).toUpperCase() + type.substring(1) +
|
|
||||||
suffix.substring(0, 1).toUpperCase() + suffix.substring(1) +
|
|
||||||
number;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,98 +0,0 @@
|
||||||
package tech.sbdevelopment.vehiclesplusconverter.utils;
|
|
||||||
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
public class Version implements Comparable<Version> {
|
|
||||||
private static final Pattern VERSION_PATTERN = Pattern.compile(
|
|
||||||
"([0-9*]+)\\.([0-9*]+)(?:\\.([0-9*]+))?(?:\\.([0-9*]+))?(?:-SNAPSHOT)?"
|
|
||||||
);
|
|
||||||
|
|
||||||
private final Integer major;
|
|
||||||
private final Integer minor;
|
|
||||||
private final Integer patch;
|
|
||||||
private final Integer build;
|
|
||||||
|
|
||||||
public static Version of(String version) {
|
|
||||||
return new Version(version);
|
|
||||||
}
|
|
||||||
|
|
||||||
Version(String version) {
|
|
||||||
Matcher matcher = VERSION_PATTERN.matcher(version);
|
|
||||||
if (matcher.matches()) {
|
|
||||||
this.major = parsePart(matcher.group(1));
|
|
||||||
this.minor = parsePart(matcher.group(2));
|
|
||||||
this.patch = matcher.group(3) != null ? parsePart(matcher.group(3)) : null;
|
|
||||||
this.build = matcher.group(4) != null ? parsePart(matcher.group(4)) : null;
|
|
||||||
} else {
|
|
||||||
throw new IllegalArgumentException("Invalid version format: " + version);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Integer parsePart(String part) {
|
|
||||||
if ("*".equals(part)) {
|
|
||||||
return null; // wildcard
|
|
||||||
} else {
|
|
||||||
return Integer.parseInt(part);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isNewerThan(Version other) {
|
|
||||||
return compareTo(other) > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isOlderThan(Version other) {
|
|
||||||
return compareTo(other) < 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object obj) {
|
|
||||||
if (this == obj) return true;
|
|
||||||
if (obj == null || getClass() != obj.getClass()) return false;
|
|
||||||
|
|
||||||
Version version = (Version) obj;
|
|
||||||
|
|
||||||
return this.compareTo(version) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo(Version other) {
|
|
||||||
int result = comparePart(this.major, other.major);
|
|
||||||
if (result != 0) return result;
|
|
||||||
|
|
||||||
result = comparePart(this.minor, other.minor);
|
|
||||||
if (result != 0) return result;
|
|
||||||
|
|
||||||
result = comparePart(this.patch, other.patch);
|
|
||||||
if (result != 0) return result;
|
|
||||||
|
|
||||||
return comparePart(this.build, other.build);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int comparePart(Integer part1, Integer part2) {
|
|
||||||
if (part1 == null && part2 == null) return 0;
|
|
||||||
if (part1 == null) return -1; // wildcard is less than any number
|
|
||||||
if (part2 == null) return 1; // any number is greater than wildcard
|
|
||||||
|
|
||||||
return Integer.compare(part1, part2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
int result = (major != null ? major.hashCode() : 0);
|
|
||||||
result = 31 * result + (minor != null ? minor.hashCode() : 0);
|
|
||||||
result = 31 * result + (patch != null ? patch.hashCode() : 0);
|
|
||||||
result = 31 * result + (build != null ? build.hashCode() : 0);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append(major != null ? major : "*").append('.')
|
|
||||||
.append(minor != null ? minor : "*");
|
|
||||||
if (patch != null || build != null) sb.append('.').append(patch != null ? patch : "*");
|
|
||||||
if (build != null) sb.append('.').append(build);
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +1,7 @@
|
||||||
name: VehiclesPlusConverter
|
name: VehiclesPlusConverter
|
||||||
version: '${project.version}'
|
version: '${project.version}'
|
||||||
main: tech.sbdevelopment.vehiclesplusconverter.VehiclesPlusConverter
|
main: tech.sbdevelopment.vehiclesplusconverter.VehiclesPlusConverter
|
||||||
api-version: 1.13
|
api-version: 1.19
|
||||||
authors: [ SBDeveloper ]
|
authors: [ SBDeveloper ]
|
||||||
description: Conversion plugin for v2 to v3.
|
description: Conversion plugin for v2 to v3.
|
||||||
website: sbdevelopment.tech
|
website: sbdevelopment.tech
|
||||||
|
|
Loading…
Add table
Reference in a new issue