From 90443fe7e7d5dfb1d89f8668f8cc71c293d68bec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Ferhat=20=C5=9Eenel?= Date: Tue, 13 Jan 2026 00:21:46 +0300 Subject: [PATCH 1/4] Add translation texts for new config options. --- common/src/main/resources/assets/maplink/lang/en_us.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/src/main/resources/assets/maplink/lang/en_us.json b/common/src/main/resources/assets/maplink/lang/en_us.json index 9f8286e..5e93527 100644 --- a/common/src/main/resources/assets/maplink/lang/en_us.json +++ b/common/src/main/resources/assets/maplink/lang/en_us.json @@ -81,6 +81,10 @@ "maplink.option.general.debugMode": "Debug Mode", "maplink.option.general.debugMode.@PrefixText": "Dev Options - please ignore", "maplink.option.general.chatLogInDebugMode": "Chat Logs in Debug Mode - Chat Spam...", + "maplink.option.general.userAgent": "HTTP User Agent", + "maplink.option.general.userAgent.@Tooltip": "This is used to change user agent of requests.", + "maplink.option.general.cloudflareClearanceCookie": "Cloudflare Clearance Cookie", + "maplink.option.general.cloudflareClearanceCookie.@Tooltip": "You don't need this unless map website is protected with Cloudflare. The user agent that used to get this cookie MUST match with the user agent above.", "maplink.option.ServerEntry": "Server Entry", From 745d6189aa59ae28971c3a6b0f03bf8d04eadb8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Ferhat=20=C5=9Eenel?= Date: Tue, 13 Jan 2026 00:30:22 +0300 Subject: [PATCH 2/4] Add user agent and Cloudflare clearance cookie GUI settings. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ömer Ferhat Şenel --- .../maplink/common/ModConfig.java | 9 +++++++- .../maplink/common/ModConfigGui.java | 22 ++++++++++++------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/de/the_build_craft/maplink/common/ModConfig.java b/common/src/main/java/de/the_build_craft/maplink/common/ModConfig.java index 5d28996..6d9ce44 100644 --- a/common/src/main/java/de/the_build_craft/maplink/common/ModConfig.java +++ b/common/src/main/java/de/the_build_craft/maplink/common/ModConfig.java @@ -38,7 +38,8 @@ /** * @author Leander Knüttel - * @version 02.01.2026 + * @author Ömer Ferhat Şenel + * @version 13.01.2026 */ @Config(name = "maplink") #if MC_VER < MC_1_20_6 @@ -207,6 +208,12 @@ public static class General implements ConfigData { public boolean chatLogInDebugMode = false; + @ConfigEntry.Gui.Tooltip + public String userAgent = ""; + + @ConfigEntry.Gui.Tooltip + public String cloudflareClearanceCookie = ""; + @ConfigEntry.Gui.Excluded public boolean ignoreCertificatesUseAtYourOwnRisk = false; diff --git a/common/src/main/java/de/the_build_craft/maplink/common/ModConfigGui.java b/common/src/main/java/de/the_build_craft/maplink/common/ModConfigGui.java index 8788b86..dbd6fa2 100644 --- a/common/src/main/java/de/the_build_craft/maplink/common/ModConfigGui.java +++ b/common/src/main/java/de/the_build_craft/maplink/common/ModConfigGui.java @@ -22,19 +22,22 @@ import de.the_build_craft.maplink.common.wrappers.Text; import me.shedaniel.clothconfig2.api.*; -import me.shedaniel.clothconfig2.gui.entries.*; +import me.shedaniel.clothconfig2.gui.entries.BooleanListEntry; +import me.shedaniel.clothconfig2.gui.entries.MultiElementListEntry; +import me.shedaniel.clothconfig2.gui.entries.NestedListListEntry; +import me.shedaniel.clothconfig2.gui.entries.TooltipListEntry; import me.shedaniel.clothconfig2.impl.builders.SubCategoryBuilder; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.network.chat.Component; -#if MC_VER >= MC_1_19_2 -import net.minecraft.network.chat.contents.TranslatableContents; -#else import net.minecraft.network.chat.TranslatableComponent; -#endif +import net.minecraft.network.chat.contents.TranslatableContents; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -42,7 +45,8 @@ /** * @author Leander Knüttel - * @version 02.01.2026 + * @author Ömer Ferhat Şenel + * @version 13.01.2026 */ @SuppressWarnings({"UnstableApiUsage", "rawtypes"}) public class ModConfigGui { @@ -184,7 +188,9 @@ public static ConfigBuilder getConfigBuilder() { SubCategoryBuilder devOptions = entryBuilder.startSubCategory(Text.translatable("maplink.option.general.debugMode.@PrefixText")); devOptions.addAll(Arrays.asList( entryBuilder.startBooleanToggle(Text.translatable("maplink.option.general.debugMode"), config.general.debugMode).setDefaultValue(defaultConfig.general.debugMode).setSaveConsumer(b -> config.general.debugMode = b).build(), - entryBuilder.startBooleanToggle(Text.translatable("maplink.option.general.chatLogInDebugMode"), config.general.chatLogInDebugMode).setDefaultValue(defaultConfig.general.debugMode).setSaveConsumer(b -> config.general.chatLogInDebugMode = b).build() + entryBuilder.startBooleanToggle(Text.translatable("maplink.option.general.chatLogInDebugMode"), config.general.chatLogInDebugMode).setDefaultValue(defaultConfig.general.debugMode).setSaveConsumer(b -> config.general.chatLogInDebugMode = b).build(), + entryBuilder.startStrField(Text.translatable("maplink.option.general.userAgent"), config.general.userAgent).setDefaultValue(defaultConfig.general.userAgent).setSaveConsumer(s -> config.general.userAgent = s).build(), + entryBuilder.startStrField(Text.translatable("maplink.option.general.cloudflareClearanceCookie"), config.general.cloudflareClearanceCookie).setDefaultValue(defaultConfig.general.cloudflareClearanceCookie).setSaveConsumer(s -> config.general.cloudflareClearanceCookie = s).build() )); autoTooltip(devOptions); general.addEntry(devOptions.build()); From 0ae6a177d7c364eed0be3f2c018cc67ea7198359 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Ferhat=20=C5=9Eenel?= Date: Tue, 13 Jan 2026 00:34:44 +0300 Subject: [PATCH 3/4] Use user agent and Cloudflare clearance cookie from config. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ömer Ferhat Şenel --- .../de/the_build_craft/maplink/common/HTTP.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/de/the_build_craft/maplink/common/HTTP.java b/common/src/main/java/de/the_build_craft/maplink/common/HTTP.java index e7d8160..d929230 100644 --- a/common/src/main/java/de/the_build_craft/maplink/common/HTTP.java +++ b/common/src/main/java/de/the_build_craft/maplink/common/HTTP.java @@ -47,7 +47,8 @@ * @author Leander Knüttel * @author eatmyvenom * @author yqs112358 - * @version 07.01.2026 + * @author Ömer Ferhat Şenel + * @version 13.01.2026 */ public class HTTP { private static final int TIMEOUT_MS = 10_000; @@ -93,11 +94,19 @@ public static HttpURLConnection openHTTPConnection(URL url, String contentType) HttpURLConnection request = (HttpURLConnection) url.openConnection(); request.setRequestMethod("GET"); request.setRequestProperty("Accept", contentType); - request.setRequestProperty("User-Agent", AbstractModInitializer.MOD_NAME); + request.setRequestProperty("User-Agent", + !config.general.userAgent.isEmpty() ? config.general.userAgent : AbstractModInitializer.MOD_NAME); request.setInstanceFollowRedirects(true); request.setConnectTimeout(TIMEOUT_MS); request.setReadTimeout(TIMEOUT_MS); + // add cf_clearance if user defined it + // this is to "bypass" Cloudflare's bot protection. it uses a already verified cookie from Cloudflare. + if (!config.general.cloudflareClearanceCookie.isEmpty()) { + request.setRequestProperty("Cookie", + String.format("cf_clearance=%s", config.general.cloudflareClearanceCookie)); + } + // completely insecure and should normally not be used! if (config.general.ignoreCertificatesUseAtYourOwnRisk && request instanceof HttpsURLConnection) { try { From a2539907d876729a32bc66bf823a8b1e260303bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Ferhat=20=C5=9Eenel?= Date: Tue, 13 Jan 2026 01:08:50 +0300 Subject: [PATCH 4/4] please stop jetbrains MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ömer Ferhat Şenel --- .../java/de/the_build_craft/maplink/common/ModConfigGui.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/de/the_build_craft/maplink/common/ModConfigGui.java b/common/src/main/java/de/the_build_craft/maplink/common/ModConfigGui.java index dbd6fa2..50edff3 100644 --- a/common/src/main/java/de/the_build_craft/maplink/common/ModConfigGui.java +++ b/common/src/main/java/de/the_build_craft/maplink/common/ModConfigGui.java @@ -30,8 +30,11 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TranslatableComponent; +#if MC_VER >= MC_1_19_2 import net.minecraft.network.chat.contents.TranslatableContents; +#else +import net.minecraft.network.chat.TranslatableComponent; +#endif import org.jetbrains.annotations.Nullable; import java.util.ArrayList;