Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added ModflaredApi.jar
Binary file not shown.
1 change: 1 addition & 0 deletions build.fabric.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ loom {
dependencies {
implementation(project(":core"))
implementation(project(":loader-core"))
implementation(files(rootDir.resolve("ModflaredApi.jar")))

minecraft("com.mojang:minecraft:${property("deps.minecraft")}")
mappings(loom.layered {
Expand Down
1 change: 1 addition & 0 deletions build.forge.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ legacyForge {
dependencies {
implementation(project(":core"))
implementation(project(":loader-core"))
implementation(files(rootDir.resolve("ModflaredApi.jar")))

compileOnly("net.fabricmc.fabric-api:fabric-api:0.92.2+1.20.1")
compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:${property("deps.mixin-extras")}")!!)
Expand Down
1 change: 1 addition & 0 deletions build.neoforge.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ neoForge {
dependencies {
implementation(project(":core"))
implementation(project(":loader-core"))
implementation(files(rootDir.resolve("ModflaredApi.jar")))

compileOnly("net.fabricmc.fabric-api:fabric-api:0.92.2+1.20.1")
}
Expand Down
2 changes: 2 additions & 0 deletions core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ dependencies {
implementation("org.apache.httpcomponents.client5:httpclient5:5.5")
testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.2")
testImplementation("org.junit.jupiter:junit-jupiter-engine:5.9.2")

implementation(files(rootDir.resolve("ModflaredApi.jar")))
}

java {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ private void updateAll() {
CustomFileUtils.deleteDummyFiles(Path.of(System.getProperty("user.dir")), latestModpackContent == null ? null : latestModpackContent.list);

// Update modpack
new ModpackUpdater().prepareUpdate(latestModpackContent, modpackAddresses, secret, selectedModpackDir);
new ModpackUpdater().prepareUpdate(latestModpackContent, modpackAddresses, secret, selectedModpackDir, null);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,18 @@ public class ModpackUpdater {
private Secrets.Secret modpackSecret;
private Path modpackDir;
private Path modpackContentFile;

private Runnable callback;

public String getModpackName() {
return serverModpackContent.modpackName;
}

public void prepareUpdate(Jsons.ModpackContentFields modpackContent, Jsons.ModpackAddresses modpackAddresses, Secrets.Secret secret, Path modpackPath) {
public void prepareUpdate(Jsons.ModpackContentFields modpackContent, Jsons.ModpackAddresses modpackAddresses, Secrets.Secret secret, Path modpackPath, Runnable callback) {
this.serverModpackContent = modpackContent;
this.modpackAddresses = modpackAddresses;
this.modpackSecret = secret;
this.modpackDir = modpackPath;
this.callback = callback;

if (this.modpackAddresses.isAnyEmpty() || modpackPath.toString().isEmpty()) {
throw new IllegalArgumentException("Address or modpackPath is null or empty");
Expand Down Expand Up @@ -377,6 +378,10 @@ public void startUpdate() {
// Downloads completed
Files.writeString(modpackContentFile, modpackContentJson);

if (callback != null) {
callback.run();
}

Path cwd = Path.of(System.getProperty("user.dir"));
CustomFileUtils.deleteDummyFiles(cwd, serverModpackContent.list);

Expand Down
1 change: 1 addition & 0 deletions loader/loader-fabric-core.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ dependencies {
compileOnly(project(":loader-core"))
compileOnly(project(":loader-fabric-15"))
compileOnly(project(":loader-fabric-16"))
implementation(files(rootDir.resolve("ModflaredApi.jar")))

compileOnly("com.google.code.gson:gson:2.10.1")
compileOnly("org.apache.logging.log4j:log4j-core:2.8.1")
Expand Down
1 change: 1 addition & 0 deletions loader/loader-forge.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ legacyForge {
dependencies {
compileOnly(project(":core"))
compileOnly(project(":loader-core"))
implementation(files(rootDir.resolve("ModflaredApi.jar")))

compileOnly("com.google.code.gson:gson:2.10.1")
compileOnly("org.apache.logging.log4j:log4j-core:2.8.1")
Expand Down
1 change: 1 addition & 0 deletions loader/loader-neoforge.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ neoForge {
dependencies {
compileOnly(project(":core"))
compileOnly(project(":loader-core"))
implementation(files(rootDir.resolve("ModflaredApi.jar")))

compileOnly("com.google.code.gson:gson:2.10.1")
compileOnly("org.apache.logging.log4j:log4j-core:2.8.1")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package pl.skidam.automodpack.networking.packet;

import de.rafael.modflared.api.ModflaredApi;
import io.netty.buffer.Unpooled;
import pl.skidam.automodpack.mixin.core.ClientConnectionAccessor;
import pl.skidam.automodpack.mixin.core.ClientLoginNetworkHandlerAccessor;
Expand All @@ -17,7 +18,6 @@
import java.net.InetSocketAddress;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import net.minecraft.client.Minecraft;
Expand Down Expand Up @@ -76,7 +76,6 @@ public static CompletableFuture<FriendlyByteBuf> receive(Minecraft Minecraft, Cl

LOGGER.info("Modpack address: {}:{} Requires to follow magic protocol: {}", modpackAddress.getHostString(), modpackAddress.getPort(), requiresMagic);

Boolean needsDisconnecting = null;
FriendlyByteBuf response = new FriendlyByteBuf(Unpooled.buffer());

Path modpackDir = ModpackUtils.getModpackPath(modpackAddress, modpackName);
Expand All @@ -87,9 +86,20 @@ public static CompletableFuture<FriendlyByteBuf> receive(Minecraft Minecraft, Cl
boolean update = ModpackUtils.isUpdate(optionalServerModpackContent.get(), modpackDir);

if (update) {
String connectedAddressString = connectedAddress.getHostString();
int connectedPort = connectedAddress.getPort();
if (ModflaredApi.IAPITUNNEL != null && ModflaredApi.IAPITUNNEL.isModflaredTunnel(connectedAddressString, connectedPort)) {
ModflaredApi.IAPITUNNEL.addTunnelDependency(connectedAddress.getHostString(), connectedAddress.getPort(), "automodpack");
}

Runnable callback = () -> {
if (ModflaredApi.IAPITUNNEL != null) {
ModflaredApi.IAPITUNNEL.removeTunnelDependency(connectedAddressString, connectedPort, "automodpack");
}
};

disconnectImmediately(handler);
new ModpackUpdater().prepareUpdate(optionalServerModpackContent.get(), modpackAddresses, secret, modpackDir);
needsDisconnecting = true;
new ModpackUpdater().prepareUpdate(optionalServerModpackContent.get(), modpackAddresses, secret, modpackDir, callback);
} else {
boolean selectedModpackChanged = ModpackUtils.selectModpack(modpackDir, modpackAddresses, Set.of());

Expand All @@ -103,21 +113,17 @@ public static CompletableFuture<FriendlyByteBuf> receive(Minecraft Minecraft, Cl
SecretsStore.saveClientSecret(clientConfig.selectedModpack, secret);
disconnectImmediately(handler);
new ReLauncher(modpackDir, UpdateType.SELECT, null).restart(false);
needsDisconnecting = true;
} else {
needsDisconnecting = false;
}
}
} else if (ModpackUtils.canConnectModpackHost(modpackAddresses)) { // Can't download modpack because e.g. certificate is not verified but it can connect to the modpack host
needsDisconnecting = true;
disconnectImmediately(handler);
}

if (clientConfig.selectedModpack != null && !clientConfig.selectedModpack.isBlank()) {
SecretsStore.saveClientSecret(clientConfig.selectedModpack, secret);
}

response.writeUtf(String.valueOf(needsDisconnecting), Short.MAX_VALUE);

response.writeUtf("false", Short.MAX_VALUE);
return CompletableFuture.completedFuture(response);
} catch (Exception e) {
LOGGER.error("Error while handling data packet", e);
Expand Down