Fix some bugs

This commit is contained in:
Timo Ley 2020-07-24 21:52:44 +02:00
parent 0a81452d98
commit f05d4e33c3
5 changed files with 91 additions and 72 deletions

View File

@ -1,6 +1,5 @@
package ley.anvil.addonscript.curse;
import ley.anvil.addonscript.forge.ForgeTools;
import ley.anvil.addonscript.util.JSON;
import ley.anvil.addonscript.v1.AddonscriptJSON;

View File

@ -0,0 +1,24 @@
package ley.anvil.addonscript.forge;
import ley.anvil.addonscript.v1.AddonscriptJSON;
import java.util.ArrayList;
public class ForgeMeta extends AddonscriptJSON.Meta {
public ForgeMeta() {
name = "Minecraft Forge";
contributors = new ArrayList<>();
contributors.add(getContrib("LexManos", "owner")); //TODO Complete Contributor list
website = "https://forums.minecraftforge.net/";
}
private AddonscriptJSON.Contributor getContrib(String name, String role) {
AddonscriptJSON.Contributor con = new AddonscriptJSON.Contributor();
con.name = name;
con.roles = new ArrayList<>();
con.roles.add(role);
return con;
}
}

View File

@ -1,59 +0,0 @@
package ley.anvil.addonscript.forge;
import ley.anvil.addonscript.v1.AddonscriptJSON;
import java.util.ArrayList;
public class ForgeTools {
public static void addForgeRepo(AddonscriptJSON as) {
if (as.repositories == null) {
as.repositories = new ArrayList<>();
}
boolean alreadyAdded = false;
for (AddonscriptJSON.Repository repo : as.repositories) {
if (repo.id != null && repo.id.equals("forge")) {
alreadyAdded = true;
}
}
if (!alreadyAdded) {
AddonscriptJSON.Repository repo = new AddonscriptJSON.Repository();
repo.id = "forge";
repo.type = "forge";
repo.url = "https://files.minecraftforge.net/";
as.repositories.add(repo);
}
}
public static void addForge(AddonscriptJSON as, int version, String forgeVersion) {
addForgeRepo(as);
if (as.versions == null) {
as.versions = new ArrayList<>();
as.versions.add(new AddonscriptJSON.Version());
}
AddonscriptJSON.Version ver = null;
for (AddonscriptJSON.Version v : as.versions) {
if (v.versionid == version || v.versionid == -1) {
ver = v;
}
}
if (ver != null) {
AddonscriptJSON.Relation rel = new AddonscriptJSON.Relation();
rel.id = "forge";
rel.type = "required";
if (as.type != null && as.type.equals("modpack")) {
rel.type = "included";
}
rel.file = new AddonscriptJSON.File();
rel.file.installer = "internal.forge";
rel.file.artifact = "forge:"+ forgeVersion;
if (ver.relations == null) {
ver.relations = new ArrayList<>();
}
ver.relations.add(rel);
}
}
}

View File

@ -1,16 +1,17 @@
package ley.anvil.addonscript.v1;
import com.google.gson.annotations.Expose;
import javafx.util.Pair;
import ley.anvil.addonscript.curse.CurseforgeRepository;
import ley.anvil.addonscript.forge.ForgeMeta;
import ley.anvil.addonscript.installer.IInstaller;
import ley.anvil.addonscript.installer.InternalDirInstaller;
import ley.anvil.addonscript.maven.MavenRepository;
import ley.anvil.addonscript.python.PythonInstaller;
import ley.anvil.addonscript.util.ASBase;
import ley.anvil.addonscript.installer.IInstaller;
import ley.anvil.addonscript.util.IRepository;
import ley.anvil.addonscript.installer.InternalDirInstaller;
import ley.anvil.addonscript.util.Indexes;
import ley.anvil.addonscript.util.Utils;
import ley.anvil.addonscript.wrapper.LinkInstPair;
import org.python.jline.internal.Nullable;
import java.io.Reader;
@ -133,20 +134,20 @@ public class AddonscriptJSON extends ASBase {
return list;
}
public List<Pair<String, String>> getRelLinks(Indexes indexes, String side, boolean optionals, @Nullable String installer, @Nullable String edition) {
List<Pair<String, String>> list = new ArrayList<>();
public List<LinkInstPair> getRelLinks(Indexes indexes, String side, boolean optionals, @Nullable String installer, @Nullable String edition) {
List<LinkInstPair> list = new ArrayList<>();
for (Relation r : getRelations(side, optionals, edition)) {
list.addAll(r.getLinks(indexes, side, optionals, installer, edition));
}
return list;
}
public List<Pair<String, String>> getLinks(Indexes indexes, String side, boolean optionals, @Nullable String installer, @Nullable String edition) {
List<Pair<String, String>> list = new ArrayList<>();
public List<LinkInstPair> getLinks(Indexes indexes, String side, boolean optionals, @Nullable String installer, @Nullable String edition) {
List<LinkInstPair> list = new ArrayList<>();
for (File file : files) {
if (file != null && file.hasOption(side) && (installer == null || installer.equals(file.installer) || installer.equals(file.installer.split(":")[0])) && ((file.hasOption("optional") && optionals) || file.hasOption("edition:" + edition) || file.hasOption("required")))
list.add(new Pair<>(file.getLink(indexes), file.installer));
list.add(new LinkInstPair(file.getLink(indexes), file.installer));
}
return list;
@ -388,12 +389,14 @@ public class AddonscriptJSON extends ASBase {
return indexes.ADDONS.get(id).meta;
else if(meta != null)
return meta;
else if (type != null && type.equals("modloader") && id != null && id.equals("forge"))
return new ForgeMeta();
else
return file.getMeta(indexes);
}
public List<Pair<String, String>> getLinks(Indexes indexes, String side, boolean optionals, @Nullable String installer, @Nullable String edition) {
List<Pair<String, String>> list = new ArrayList<>();
public List<LinkInstPair> getLinks(Indexes indexes, String side, boolean optionals, @Nullable String installer, @Nullable String edition) {
List<LinkInstPair> list = new ArrayList<>();
if (indexes.ADDONS.containsKey(id)) {
AddonscriptJSON addon = indexes.ADDONS.get(id);
@ -403,13 +406,13 @@ public class AddonscriptJSON extends ASBase {
if (version != null) {
for (File f : version.files) {
if (f != null && f.hasOption(side) && (installer == null || installer.equals(f.installer) || installer.equals(f.installer.split(":")[0])) && ((f.hasOption("optional") && optionals) || f.hasOption("edition:" + edition) || f.hasOption("required")))
list.add(new Pair<>(f.getLink(indexes), f.installer));
list.add(new LinkInstPair(f.getLink(indexes), f.installer));
}
}
}
if (file != null && hasOption(side) && (installer == null || installer.equals(file.installer) || installer.equals(file.installer.split(":")[0])) && ((hasOption("optional") && optionals) || hasOption("edition:" + edition) || hasOption("required")))
list.add(new Pair<>(file.getLink(indexes), file.installer));
list.add(new LinkInstPair(file.getLink(indexes), file.installer));
return list;
}

View File

@ -0,0 +1,52 @@
package ley.anvil.addonscript.wrapper;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
public class LinkInstPair {
public String link;
public String installer;
public LinkInstPair(String link, String installer) {
this.link = link;
this.installer = installer;
}
public String getLink() {
return link;
}
public String getInstaller() {
return installer;
}
public boolean isURL() {
return link.startsWith("http://") || link.startsWith("https://");
}
public boolean isFile() {
return link.startsWith("file://");
}
public File asFile(String jsonDir) {
if (isFile()) {
String f = link.replace("file://", jsonDir + (jsonDir.endsWith("/") ? "" : "/"));
return new File(f);
}
throw new RuntimeException("This is not a file");
}
public URL asURL() {
if (isURL()) {
try {
return new URL(link);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
throw new RuntimeException("This is not a URL");
}
}