aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.vscode/launch.json31
-rw-r--r--build.gradle.kts3
-rw-r--r--src/main/java/de/torui/coflsky/CoflSky.java2
-rw-r--r--src/main/java/de/torui/coflsky/WSCommandHandler.java42
-rw-r--r--src/main/java/de/torui/coflsky/commands/CommandType.java5
-rw-r--r--src/main/java/de/torui/coflsky/commands/models/ModListData.java33
-rw-r--r--src/main/java/de/torui/coflsky/network/WSClient.java1
-rw-r--r--src/main/java/de/torui/coflsky/utils/FileUtils.java40
8 files changed, 148 insertions, 9 deletions
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..19c0552
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,31 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "java",
+ "name": "Minecraft Client",
+ "request": "launch",
+ "cwd": "${workspaceFolder}/run",
+ "console": "internalConsole",
+ "stopOnEntry": false,
+ "mainClass": "net.fabricmc.devlaunchinjector.Main",
+ "vmArgs": "\"-Dfabric.dli.config\u003dE:\\CoflWork\\SkyblockMod\\.gradle\\loom-cache\\launch.cfg\" \"-Dfabric.dli.env\u003dclient\" \"-Dfabric.dli.main\u003dnet.minecraft.launchwrapper.Launch\"",
+ "args": "",
+ "env": {},
+ "projectName": ""
+ },
+ {
+ "type": "java",
+ "name": "Minecraft Server",
+ "request": "launch",
+ "cwd": "${workspaceFolder}/run",
+ "console": "internalConsole",
+ "stopOnEntry": false,
+ "mainClass": "net.fabricmc.devlaunchinjector.Main",
+ "vmArgs": "\"-Dfabric.dli.config\u003dE:\\CoflWork\\SkyblockMod\\.gradle\\loom-cache\\launch.cfg\" \"-Dfabric.dli.env\u003dserver\" \"-Dfabric.dli.main\u003dnet.minecraft.launchwrapper.Launch\"",
+ "args": "\"nogui\"",
+ "env": {},
+ "projectName": ""
+ }
+ ]
+} \ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index da4183b..734083b 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -85,9 +85,6 @@ tasks.shadowJar {
println("Config: ${it.files}")
}
}
-
- // If you want to include other dependencies and shadow them, you can relocate them in here
- fun relocate(name: String) = relocate(name, "com.examplemod.deps.$name")
}
tasks.assemble.get().dependsOn(tasks.remapJar)
diff --git a/src/main/java/de/torui/coflsky/CoflSky.java b/src/main/java/de/torui/coflsky/CoflSky.java
index 53c3fd3..7ab2448 100644
--- a/src/main/java/de/torui/coflsky/CoflSky.java
+++ b/src/main/java/de/torui/coflsky/CoflSky.java
@@ -64,6 +64,8 @@ public class CoflSky
if (config == null) {
config = LocalConfig.createDefaultConfig();
}
+ // Cache all the mods on load
+ WSCommandHandler.cacheMods();
}
@EventHandler
public void init(FMLInitializationEvent event) throws URISyntaxException
diff --git a/src/main/java/de/torui/coflsky/WSCommandHandler.java b/src/main/java/de/torui/coflsky/WSCommandHandler.java
index ef15381..5427364 100644
--- a/src/main/java/de/torui/coflsky/WSCommandHandler.java
+++ b/src/main/java/de/torui/coflsky/WSCommandHandler.java
@@ -1,16 +1,16 @@
package de.torui.coflsky;
+import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import de.torui.coflsky.commands.Command;
import de.torui.coflsky.commands.CommandType;
import de.torui.coflsky.commands.JsonStringCommand;
-import de.torui.coflsky.commands.models.ChatMessageData;
-import de.torui.coflsky.commands.models.FlipData;
-import de.torui.coflsky.commands.models.SoundData;
+import de.torui.coflsky.commands.RawCommand;
+import de.torui.coflsky.commands.models.*;
import de.torui.coflsky.configuration.ConfigurationManager;
-import de.torui.coflsky.commands.models.TimerData;
import de.torui.coflsky.handlers.EventRegistry;
+import de.torui.coflsky.utils.FileUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.audio.SoundHandler;
@@ -23,11 +23,18 @@ import net.minecraft.util.ChatStyle;
import net.minecraft.util.IChatComponent;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.ClientCommandHandler;
+import net.minecraftforge.common.ForgeModContainer;
+import net.minecraftforge.fml.common.Loader;
+import net.minecraftforge.fml.common.ModContainer;
+
+import java.io.File;
public class WSCommandHandler {
public static transient String lastOnClickEvent;
public static FlipHandler flipHandler = new FlipHandler();
+ private static final ModListData modListData = new ModListData();
+ private static final Gson gson = new Gson();
public static boolean HandleCommand(JsonStringCommand cmd, Entity sender) {
// Entity sender = Minecraft.getMinecraft().thePlayer;
@@ -54,6 +61,9 @@ public class WSCommandHandler {
case Countdown:
StartTimer(cmd.GetAs(new TypeToken<TimerData>() {}));
break;
+ case GetMods:
+ getMods();
+ break;
default:
break;
}
@@ -61,6 +71,30 @@ public class WSCommandHandler {
return true;
}
+ public static void cacheMods(){
+ File modFolder = new File(Minecraft.getMinecraft().mcDataDir, "mods");
+ for(File mods : modFolder.listFiles()){
+ modListData.addFilename(mods.getName());
+ try {
+ modListData.addFileHashes(FileUtils.getMD5Checksum(mods));
+ } catch (Exception exception){
+ // Highly less likely to happen unless something goes wrong
+ exception.printStackTrace();
+ }
+ }
+
+ for(ModContainer mod : Loader.instance().getModList()){
+ modListData.addModname(mod.getName());
+ modListData.addModname(mod.getModId());
+ }
+ }
+
+ private static void getMods(){
+ // the Cofl server has asked for an mod list now let's respond with all the info
+ CoflSky.Wrapper.SendMessage(new RawCommand("foundMods",gson.toJson(modListData)));
+ }
+
+
private static void Flip(Command<FlipData> cmd) {
//handle chat message
ChatMessageData[] messages = cmd.getData().Messages;
diff --git a/src/main/java/de/torui/coflsky/commands/CommandType.java b/src/main/java/de/torui/coflsky/commands/CommandType.java
index 7f196d4..b7dbc37 100644
--- a/src/main/java/de/torui/coflsky/commands/CommandType.java
+++ b/src/main/java/de/torui/coflsky/commands/CommandType.java
@@ -53,7 +53,10 @@ public enum CommandType {
chatBatch,
@SerializedName("uploadTab")
uploadTab,
- ;
+ @SerializedName("getMods")
+ GetMods;
+
+
public static Map<CommandType,String> data;
static {
data = new HashMap<>();
diff --git a/src/main/java/de/torui/coflsky/commands/models/ModListData.java b/src/main/java/de/torui/coflsky/commands/models/ModListData.java
new file mode 100644
index 0000000..f654ecd
--- /dev/null
+++ b/src/main/java/de/torui/coflsky/commands/models/ModListData.java
@@ -0,0 +1,33 @@
+package de.torui.coflsky.commands.models;
+
+import com.google.gson.annotations.SerializedName;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public class ModListData {
+
+ @SerializedName("fileNames")
+ private final List<String> fileNames = new LinkedList<>();
+
+ @SerializedName("modNames")
+ private final List<String> modNames = new LinkedList<>();
+
+ @SerializedName("fileHashes")
+ private final List<String> fileHashes = new LinkedList<>();
+
+
+ public void addFilename(String name){
+ this.fileNames.add(name);
+ }
+
+ public void addModname(String modname){
+ this.modNames.add(modname);
+ }
+
+ public void addFileHashes(String hash){
+ this.fileHashes.add(hash);
+ }
+
+
+}
diff --git a/src/main/java/de/torui/coflsky/network/WSClient.java b/src/main/java/de/torui/coflsky/network/WSClient.java
index f306751..12543e0 100644
--- a/src/main/java/de/torui/coflsky/network/WSClient.java
+++ b/src/main/java/de/torui/coflsky/network/WSClient.java
@@ -22,7 +22,6 @@ import de.torui.coflsky.commands.RawCommand;
public class WSClient extends WebSocketAdapter {
-
public static Gson gson;
diff --git a/src/main/java/de/torui/coflsky/utils/FileUtils.java b/src/main/java/de/torui/coflsky/utils/FileUtils.java
new file mode 100644
index 0000000..1541a75
--- /dev/null
+++ b/src/main/java/de/torui/coflsky/utils/FileUtils.java
@@ -0,0 +1,40 @@
+package de.torui.coflsky.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.security.MessageDigest;
+
+public class FileUtils {
+
+ public static byte[] createChecksum(File file) throws Exception {
+ InputStream fis = new FileInputStream(file);
+
+ byte[] buffer = new byte[1024];
+ MessageDigest complete = MessageDigest.getInstance("MD5");
+ int numRead;
+
+ do {
+ numRead = fis.read(buffer);
+ if (numRead > 0) {
+ complete.update(buffer, 0, numRead);
+ }
+ } while (numRead != -1);
+
+ fis.close();
+ return complete.digest();
+ }
+
+
+ public static String getMD5Checksum(File file) throws Exception {
+ byte[] b = createChecksum(file);
+ String result = "";
+
+ for (int i=0; i < b.length; i++) {
+ result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
+ }
+ return result;
+ }
+
+
+}