VehiclesPlusConverter/src/main/java/tech/sbdevelopment/vehiclesplusconverter/handlers/Converter.java

322 lines
18 KiB
Java

package tech.sbdevelopment.vehiclesplusconverter.handlers;
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.garages.Garage;
import nl.sbdeveloper.vehiclesplus.api.vehicles.HolderItemPosition;
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.db.exceptions.DataStorageException;
import nl.sbdeveloper.vehiclesplus.utils.jackson.ColorList;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
import tech.sbdevelopment.vehiclesplusconverter.VehiclesPlusConverter;
import tech.sbdevelopment.vehiclesplusconverter.api.ConversionException;
import java.util.List;
import java.util.Map;
import java.util.UUID;
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..."));
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 e) {
e.printStackTrace();
}
}
counter--;
}
}.runTaskTimer(VehiclesPlusConverter.getInstance(), 20L, 20L);
}
private static void convertRims() {
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(
entry.getValue().getName(),
entry.getValue().getSkin(),
HolderItemPosition.HEAD,
entry.getValue().getPrice()
);
nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getRimDesigns().put(entry.getKey(), rd);
VehiclesPlusConverter.getInstance().getLogger().info("Converted rim design: " + rd.getName());
}
}
private static void convertFuels() {
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(
entry.getValue().getName(),
entry.getValue().getFuelItem(),
entry.getValue().getPricePerLiter()
);
nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getFuelTypes().put(entry.getKey(), ft);
VehiclesPlusConverter.getInstance().getLogger().info("Converted fuel type: " + ft.getName());
}
}
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()) {
try {
VehicleModel.Builder vehicleModelBuilder = VehicleModel.builder()
.id(baseVehicle.getName())
.displayName(idToReadable(baseVehicle.getName()))
.typeId(getTypeIdByClass(baseVehicle.getName(), getClassByFullName(baseVehicle.getVehicleType())))
.availableColors(new ColorList(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(),
HolderItemPosition.HEAD
));
} 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(),
HolderItemPosition.HEAD
));
} 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(),
HolderItemPosition.HEAD,
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(),
HolderItemPosition.HEAD
));
} 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(),
nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getRimDesign(VehiclesPlus.getVehicleManager().getRimDesignHashMap().values().stream().findFirst().orElseThrow(() -> new ConversionException("No RimDesign found while loading Wheel in file", baseVehicle.getName())).getName()).orElseThrow(() -> new ConversionException("No matching RimDesign found while loading Wheel in file", baseVehicle.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(), "km/h"
))
.fuelTank(new UpgradableSetting(
baseVehicle.getFuelTankSettings().getBase(),
baseVehicle.getFuelTankSettings().getMax(),
baseVehicle.getFuelTankSettings().getStep(),
baseVehicle.getFuelTankSettings().getUpgradeCost(), "L"
))
.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(),
new Sounds.Sound(
baseVehicle.getHornSettings().getSound().parseSound().name(),
1
)
))
.drift(baseVehicle.getDrift())
.exhaust(new Exhaust(
baseVehicle.getExhaustSettings().getEnabled(),
baseVehicle.getExhaustSettings().getXOffset(),
baseVehicle.getExhaustSettings().getYOffset(),
baseVehicle.getExhaustSettings().getZOffset(),
baseVehicle.getExhaustSettings().getParticleName().get()
))
.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(baseVehicle.getPermissions() != null ?
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()
: Permissions.builder()
.buy("vp.buy." + baseVehicle.getName())
.ride("vp.ride." + baseVehicle.getName())
.sitWithoutRidePermission(true)
.adjust("vp.adjust." + baseVehicle.getName())
.spawn("vp.spawn." + baseVehicle.getName())
.build())
.sounds(defaultSounds)
.gearbox(new Gearbox(true, 10))
.build();
VehiclesPlusConverter.getInstance().getLogger().info("Converted vehicle model: " + model.getId());
saveToVehiclesPlus(model, "vehicles/" + model.getTypeId(), model.getId());
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static void convertVehicles() {
for (Map.Entry<UUID, List<StorageVehicle>> set : VehiclesPlusAPI.getVehicleManager().getPlayerVehicleHashMap().entrySet()) {
UUID ownerUUID = set.getKey();
String ownerName = Bukkit.getOfflinePlayer(ownerUUID).getName();
if (ownerName == null) {
VehiclesPlusConverter.getInstance().getLogger().severe("Could not convert vehicles for player with UUID " + ownerUUID + ", the player name is unknown!");
continue;
}
final Garage garage = nl.sbdeveloper.vehiclesplus.api.VehiclesPlusAPI.getGarage(ownerName).orElseGet(() -> new Garage(ownerName, ownerUUID));
VehiclesPlusConverter.getInstance().getLogger().info("Converting vehicles for player with UUID " + ownerUUID + " (" + ownerName + ")...");
for (StorageVehicle vehicle : set.getValue()) {
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())),
false
);
newVehicle.forceSave();
garage.addVehicle(newVehicle.getUuid());
} catch (Exception e) {
e.printStackTrace();
Bukkit.getLogger().severe("Could not convert vehicles for player with UUID " + ownerUUID + ", could not save the vehicle!");
}
VehiclesPlusConverter.getInstance().getLogger().info("Converted vehicle: " + vehicle.getUuid());
}
try {
garage.forceSave();
} catch (DataStorageException e) {
e.printStackTrace();
Bukkit.getLogger().severe("Could not convert vehicles for player with UUID " + ownerUUID + ", could not save the garage!");
}
}
}
}