From 8ce1ec677228feec06f687d93282430966b63d2e Mon Sep 17 00:00:00 2001 From: skidam Date: Tue, 22 Jul 2025 13:19:51 +0200 Subject: [PATCH] Add ModflaredApi #398 --- ModflaredApi.jar | Bin 0 -> 2076 bytes build.fabric.gradle.kts | 1 + build.forge.gradle.kts | 1 + build.neoforge.gradle.kts | 1 + core/build.gradle.kts | 2 ++ .../automodpack_loader_core/Preload.java | 2 +- .../client/ModpackUpdater.java | 9 ++++-- loader/loader-fabric-core.gradle.kts | 1 + loader/loader-forge.gradle.kts | 1 + loader/loader-neoforge.gradle.kts | 1 + .../networking/packet/DataC2SPacket.java | 26 +++++++++++------- 11 files changed, 32 insertions(+), 13 deletions(-) create mode 100644 ModflaredApi.jar diff --git a/ModflaredApi.jar b/ModflaredApi.jar new file mode 100644 index 0000000000000000000000000000000000000000..f6f78a4ad6cb9b772bd8740c8e387cbe954b604b GIT binary patch literal 2076 zcmWIWW@Zs#;Nak3U|>)LVgwKYGJRb`9CbbY-1L1N{XE@VgG2Ou-CFz4t~%tv7}39yeMY&B1usW22bG{=Y#IdnJ0A3+=Cb)hO&SyydcW zLFdQb^>6+yU*8rN{~_$o+4_bDwjW*J9!UBSkUUecTtiHn>E&e=U%3Epc8*xPX8EH) zPflWFUmB;&XHIpS}M5 zSlA*x+~Py8*O!pl0cVrzrCuHR;ib=1`q})exFfG%l=0t1p(_@za*#GW6_#)9_Pf@FJ`Q6qMNmsRyW~Ia_*|7_6aW7KXD{#vFcyhZHuQYe`hD*yI zL|Vjj>pt4$wD)kkC-(Iifb=ocbXRYKjH`UE?`+qxqcxH8) zGj3Jy)S7ihheAL6UuWx7{F|TYE2plax$is6r!GZ8`-H4^Td_v3uvXi`d%WuCZR(;Ip~$ zxGBI%l23{u&!K?P;@#}M7g++B7*{M{eNgjuQCD-)t%G)a-1i+>-3tnmHjCXBtY}HT z!nHP<_2Cwd_qEKR$Y%6vyJ!K7XaiuW65!3qB*K6wl95X(P%cLW*a~QL6F@p(#TBSD zLjZQ5op2NIX#YVQVpL8pi&G0KH@L| zRHmVuf}G_*Wf%fj0)r1*=?XFhIX^&h0=l^%b70{Q%CHEq1Q@Qk%!OuObi 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); @@ -87,9 +86,20 @@ public static CompletableFuture 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()); @@ -103,21 +113,17 @@ public static CompletableFuture 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);