wip modding (2)

This commit is contained in:
Bixilon 2020-09-25 20:14:35 +02:00
parent 6d1e966619
commit 1fb09e8f40
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
7 changed files with 154 additions and 7 deletions

View File

@ -45,7 +45,7 @@ In your jar file (the mod) must be a file called `mod.json`.
- `versionName`, `authors`, `name` is the classic implementation of metadata. Can be anything, will be displayed in the mod list. **Required**
- `identifier` is the prefix of items (for Minecraft it is `minecraft`). Aka the thing before the `:`. **Required**
- `mainClass` the Main class of your mod (self explaining). The main class needs to extent the abstract class `MinosoftMod`. **Required**
`loading` Loading attributes. **Optional**
- `loading` Loading attributes. **Optional**
- `priority` should the mod be loaded at the beginning or at the end. Possible values are `LOWEST`, `LOW`, `NORMAL`, `HIGH`, `HIGHEST` **Optional**
- `dependencies` Used if you need an other mod to work **Optional**
- `hard` These mods are **needed** to work. If the loading fails, your mod is not getting loaded and an warning message is being displayed. **Optional**

View File

@ -0,0 +1,33 @@
/*
* Codename Minosoft
* Copyright (C) 2020 Moritz Zwerger
*
* 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 <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.modding.loading;
public class LoadingInfo {
LoadingPriorities loadingPriority;
public LoadingInfo(LoadingPriorities loadingPriority) {
this.loadingPriority = loadingPriority;
}
public LoadingInfo() {
}
public LoadingPriorities getLoadingPriority() {
return loadingPriority;
}
public void setLoadingPriority(LoadingPriorities loadingPriority) {
this.loadingPriority = loadingPriority;
}
}

View File

@ -0,0 +1,22 @@
/*
* Codename Minosoft
* Copyright (C) 2020 Moritz Zwerger
*
* 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 <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.modding.loading;
public enum LoadingPriorities {
LOWEST,
LOW,
NORMAL,
HIGH,
HIGHEST
}

View File

@ -11,7 +11,7 @@
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.modding;
package de.bixilon.minosoft.modding.loading;
interface MinosoftModInterface {
boolean start(ModPhases phase);

View File

@ -0,0 +1,87 @@
/*
* Codename Minosoft
* Copyright (C) 2020 Moritz Zwerger
*
* 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 <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.modding.loading;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import de.bixilon.minosoft.util.Util;
import java.util.UUID;
public class ModInfo {
final UUID uuid;
final int versionId;
final String versionName;
final String name;
final String[] authors;
final String identifier;
final String mainClass;
LoadingInfo info;
public ModInfo(JsonObject json) {
this.uuid = Util.uuidFromString(json.get("uuid").getAsString());
this.versionId = json.get("versionId").getAsInt();
this.versionName = json.get("versionName").getAsString();
this.name = json.get("name").getAsString();
JsonArray authors = json.get("authors").getAsJsonArray();
this.authors = new String[authors.size()];
int i = 0;
for (JsonElement authorElement : authors) {
this.authors[i] = authorElement.getAsString();
i++;
}
this.identifier = json.get("identifier").getAsString();
this.mainClass = json.get("mainClass").getAsString();
if (json.has("loading")) {
JsonObject loading = json.getAsJsonObject("loading");
this.info = new LoadingInfo();
if (loading.has("priority")) {
this.info.setLoadingPriority(LoadingPriorities.valueOf(loading.get("priority").getAsString()));
}
}
}
public UUID getUUID() {
return uuid;
}
public int getVersionId() {
return versionId;
}
public String getVersionName() {
return versionName;
}
public String getName() {
return name;
}
public String[] getAuthors() {
return authors;
}
public String getIdentifier() {
return identifier;
}
public String getMainClass() {
return mainClass;
}
public LoadingInfo getInfo() {
return info;
}
}

View File

@ -11,7 +11,7 @@
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.modding;
package de.bixilon.minosoft.modding.loading;
public enum ModPhases {
BOOTING,

View File

@ -28,10 +28,7 @@ import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.UUID;
import java.util.regex.Pattern;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
import java.util.zip.GZIPInputStream;
import java.util.zip.Inflater;
import java.util.zip.*;
public final class Util {
public static final Pattern UUID_FIX = Pattern.compile("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})"); // thanks https://www.spigotmc.org/threads/free-code-easily-convert-between-trimmed-and-full-uuids.165615
@ -159,6 +156,14 @@ public final class Util {
return stringBuilder.toString();
}
public static String readFileFromZip(String fileName, ZipFile zipFile) throws IOException {
return readFile(new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipFile.getEntry(fileName)))), false);
}
public static JsonObject readJsonFromZip(String fileName, ZipFile zipFile) throws IOException {
return JsonParser.parseString(readFileFromZip(fileName, zipFile)).getAsJsonObject();
}
public static String readFile(File file) throws IOException {
return readFile(new BufferedReader(new FileReader(file)), true);
}