Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fr.flowarg.flowupdater.utils.builderapi.BuilderException: ArgumentVanillaVersion is null ! #9

Closed
Midaco-YT opened this issue Oct 23, 2021 · 8 comments
Assignees
Labels
bug Something isn't working

Comments

@Midaco-YT
Copy link

Bonjour, en essayant de lancer minecraft avec forge j'ai eu cette erreur qui est apparut : fr.flowarg.flowupdater.utils.builderapi.BuilderException: ArgumentVanillaVersion is null !

Console : [03:47:59] [minecrouft] [ERROR]: fr.flowarg.flowupdater.utils.builderapi.BuilderException: ArgumentVanillaVersion is null ! fr.flowarg.flowupdater.utils.builderapi.BuilderException: ArgumentVanillaVersion is null ! at fr.flowarg.flowupdater.utils.builderapi.BuilderArgument.get(BuilderArgument.java:60) at fr.flowarg.flowupdater.versions.ForgeVersionBuilder.build(ForgeVersionBuilder.java:112) at fr.launcher.ui.panels.pages.Home.update(Home.java:164) at java.base/java.lang.Thread.run(Thread.java:832)

ma classe Home.java

`package fr.launcher.ui.panels.pages;

import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView;
import fr.flowarg.flowupdater.FlowUpdater;
import fr.flowarg.flowupdater.download.IProgressCallback;
import fr.flowarg.flowupdater.download.Step;
import fr.flowarg.flowupdater.download.VanillaDownloader;
import fr.flowarg.flowupdater.download.VanillaReader;
import fr.flowarg.flowupdater.download.json.CurseFileInfos;
import fr.flowarg.flowupdater.download.json.Mod;
import fr.flowarg.flowupdater.download.json.OptifineInfo;
import fr.flowarg.flowupdater.utils.UpdaterOptions;
import fr.flowarg.flowupdater.versions.AbstractForgeVersion;
import fr.flowarg.flowupdater.versions.ForgeVersionBuilder;
import fr.flowarg.flowupdater.versions.VanillaVersion;
import fr.flowarg.flowupdater.versions.VersionType;
import fr.launcher.Launcher;
import fr.launcher.game.MinecraftInfos;
import fr.launcher.ui.PanelManager;
import fr.launcher.ui.panels.pages.content.ContentPanel;
import fr.theshark34.openlauncherlib.external.ExternalLaunchProfile;
import fr.theshark34.openlauncherlib.external.ExternalLauncher;
import fr.theshark34.openlauncherlib.minecraft.*;
import fr.theshark34.openlauncherlib.util.Saver;
import javafx.application.Platform;
import javafx.geometry.Insets;
import javafx.geometry.VPos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.RowConstraints;

import java.io.File;
import java.nio.file.Path;
import java.text.DecimalFormat;
import java.util.List;

public class Home extends ContentPanel {
private final Saver saver = Launcher.getInstance().getSaver();
GridPane boxPane = new GridPane();
ProgressBar progressBar = new ProgressBar();
Label stepLabel = new Label();
Label fileLabel = new Label();
boolean isDownloading = false;

@Override
public String getName() {
    return "home";
}

@Override
public String getStyleSheetPath() {
    return "css/content/home.css";
}

@Override
public void init(PanelManager panelManager) {
    super.init(panelManager);

    RowConstraints rowConstraints = new RowConstraints();
    rowConstraints.setValignment(VPos.CENTER);
    rowConstraints.setMinHeight(75);
    rowConstraints.setMaxHeight(75);
    this.layout.getRowConstraints().addAll(rowConstraints, new RowConstraints());
    boxPane.getStyleClass().add("box-pane");
    setCanTakeAllSize(boxPane);
    boxPane.setPadding(new Insets(20));
    this.layout.add(boxPane, 0, 0);
    this.layout.getStyleClass().add("home-layout");

    progressBar.getStyleClass().add("download-progress");
    stepLabel.getStyleClass().add("download-status");
    fileLabel.getStyleClass().add("download-status");

    progressBar.setTranslateY(-15);
    setCenterH(progressBar);
    setCanTakeAllWidth(progressBar);

    stepLabel.setTranslateY(5);
    setCenterH(stepLabel);
    setCanTakeAllSize(stepLabel);

    fileLabel.setTranslateY(20);
    setCenterH(fileLabel);
    setCanTakeAllSize(fileLabel);

    this.showPlayButton();
}

private void showPlayButton() {
    boxPane.getChildren().clear();
    Button playBtn = new Button("Jouer");
    FontAwesomeIconView playIcon = new FontAwesomeIconView(FontAwesomeIcon.GAMEPAD);
    playIcon.getStyleClass().add("play-icon");
    setCanTakeAllSize(playBtn);
    setCenterH(playBtn);
    setCenterV(playBtn);
    playBtn.getStyleClass().add("play-btn");
    playBtn.setGraphic(playIcon);
    playBtn.setOnMouseClicked(e -> this.play());
    boxPane.getChildren().add(playBtn);
}

private void play() {
    isDownloading = true;
    boxPane.getChildren().clear();
    setProgress(0, 0);
    boxPane.getChildren().addAll(progressBar, stepLabel, fileLabel);

    Platform.runLater(() -> new Thread(this::update).start());
}
public void update() {
    IProgressCallback callback = new IProgressCallback() {
        private final DecimalFormat decimalFormat = new DecimalFormat("#.#");
        private String stepTxt = "";
        private String percentTxt = "0.0%";

        @Override
        public void step(Step step) {
            Platform.runLater(() -> {
                stepTxt = StepInfo.valueOf(step.name()).getDetails();
                setStatus(String.format("%s (%s)", stepTxt, percentTxt));
            });
        }

        @Override
        public void update(long downloaded, long max) {
            Platform.runLater(() -> {
                percentTxt = decimalFormat.format(downloaded * 100.d / max) + "%";
                setStatus(String.format("%s (%s)", stepTxt, percentTxt));
                setProgress(downloaded, max);
            });
        }


        public void onFileDownloaded(Path path) {
            Platform.runLater(() -> {
                String p = path.toString();
                fileLabel.setText("..." + p.replace(Launcher.getInstance().getLauncherDir().toFile().getAbsolutePath(), ""));
            });
        }
    };

    try {
        final VanillaVersion vanillaVersion = new VanillaVersion.VanillaVersionBuilder()
                .withName(MinecraftInfos.GAME_VERSION)
                .withVersionType(MinecraftInfos.VERSION_TYPE)
                .build();
        final UpdaterOptions options = new UpdaterOptions.UpdaterOptionsBuilder()
                .withEnableCurseForgePlugin(true)
                .withEnableOptifineDownloaderPlugin(true)
                .build();

        List<CurseFileInfos> curseMods = CurseFileInfos.getFilesFromJson(MinecraftInfos.CURSE_MODS_LIST_URL);
        List<Mod> mods = Mod.getModsFromJson(MinecraftInfos.MODS_LIST_URL);

        final AbstractForgeVersion forge = new ForgeVersionBuilder(MinecraftInfos.FORGE_VERSION_TYPE)
                .withForgeVersion(MinecraftInfos.FORGE_VERSION)
                .withCurseMods(curseMods)
                .withMods(mods)
                .withOptifine(new OptifineInfo(MinecraftInfos.OPTIFINE_VERSION, false))
                .build();


        final FlowUpdater updater = new FlowUpdater.FlowUpdaterBuilder()
                .withVersion(vanillaVersion)
                .withForgeVersion(forge)
                .withLogger(Launcher.getInstance().getLogger())
                .withProgressCallback(callback)
                .withUpdaterOptions(options)
                .build();

        updater.update(Launcher.getInstance().getLauncherDir().toFile());
        this.startGame(updater.getVersion().getName());
    } catch (Exception exception) {
        Launcher.getInstance().getLogger().err(exception.toString());
        exception.printStackTrace();
        Platform.runLater(() -> panelManager.getStage().show());
    }
}

public void startGame(String gameVersion) {
    GameInfos infos = new GameInfos(
            "minecrouft",
            false,
            new GameVersion(gameVersion, MinecraftInfos.OLL_GAME_TYPE.setNFVD(MinecraftInfos.OLL_FORGE_DISCRIMINATOR)),
            new GameTweak[]{}
    );

    try {
        ExternalLaunchProfile profile = MinecraftLauncher.createExternalProfile(infos, GameFolder.FLOW_UPDATER, Launcher.getInstance().getAuthInfos());
        profile.getVmArgs().add(this.getRamArgsFromSaver());
        ExternalLauncher launcher = new ExternalLauncher(profile);

        Platform.runLater(() -> panelManager.getStage().hide());

        Process p = launcher.launch();

        Platform.runLater(() -> {
            try {
                p.waitFor();
                Platform.exit();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
    } catch (Exception exception) {
        exception.printStackTrace();
        Launcher.getInstance().getLogger().err(exception.toString());
    }
}

public String getRamArgsFromSaver() {
    int val = 1024;
    try {
        if (saver.get("maxRam") != null) {
            val = Integer.parseInt(saver.get("maxRam"));
        } else {
            throw new NumberFormatException();
        }
    } catch (NumberFormatException error) {
        saver.set("maxRam", String.valueOf(val));
        saver.save();
    }

    return "-Xmx" + val + "M";
}

public void setStatus(String status) {
    this.stepLabel.setText(status);
}

public void setProgress(double current, double max) {
    this.progressBar.setProgress(current / max);
}

public boolean isDownloading() {
    return isDownloading;
}
public enum StepInfo {
    READ("Lecture du fichier json..."),
    DL_LIBS("Téléchargement des libraries..."),
    DL_ASSETS("Téléchargement des ressources..."),
    EXTRACT_NATIVES("Extraction des natives..."),
    FORGE("Installation de forge..."),
    FABRIC("Installation de fabric..."),
    MODS("Téléchargement des mods..."),
    EXTERNAL_FILES("Téléchargement des fichier externes..."),
    POST_EXECUTIONS("Exécution post-installation..."),
    END("Finit !");
    String details;

    StepInfo(String details) {
        this.details = details;
    }

    public String getDetails() {
        return details;
    }
}

}
`

Si vous pouvez m'aider ça serait super

@Midaco-YT Midaco-YT added the bug Something isn't working label Oct 23, 2021
@antoineok
Copy link
Contributor

quelle version de flow updater utilise tu?

@antoineok
Copy link
Contributor

car dans les anciennes version, il existait une methode pour la version vanilla dans la classe ForgeVersionBuilder

@Midaco-YT
Copy link
Author

dans mon build.gradle j'avais mit : implementation 'fr.flowarg:flowupdater:1.3.+'

@antoineok
Copy link
Contributor

yup, une ancienne version

@FlowArg
Copy link
Owner

FlowArg commented Oct 23, 2021

Salut,
pour commencer, tu peux passer en 1.4.+
Ensuite, pour résoudre ton problème, il faut pas oublier d'ajouter un objet VanillaVersion à ton FlowUpdaterBuilder.

@antoineok
Copy link
Contributor

@FlowArg nan, la il est dans une ancienne version qui avait encore besoin du VanillaVersion pour le ForgeBuilder

@Midaco-YT
Copy link
Author

ok merci j'ai changer la version et maintenant ça marche j'avais pas penser a regarde si il y avait une nouvelle version merci beacoup

@FlowArg
Copy link
Owner

FlowArg commented Oct 23, 2021

pas de soucis

@FlowArg FlowArg closed this as completed Oct 23, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants