From 3f8ea97f7cc1191c1e162c05c52b1fe7bb5f23d4 Mon Sep 17 00:00:00 2001 From: Darto KLoning Date: Tue, 29 Sep 2026 05:48:40 +0700 Subject: [PATCH] fix client file configuration respectedly --- README.md | 8 +++++--- gradle.properties | 2 +- .../itemdespawntimer/config/ServerConfig.java | 10 ++++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d55b738..1f5e53a 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,16 @@ This branch is Fabric-only and intentionally separates authority: -* `config/item-despawn-timer-server.json` — server gameplay: default despawn time and per-item overrides. `-1` means infinite when enabled. -* `config/item-despawn-timer-client.json` — client presentation only: timer/name visibility, heights, threshold and colors. +* `config/item-despawn-timer-server.json` — **dedicated server only**; server gameplay: default despawn time and per-item overrides. `-1` means infinite when enabled. +* `config/item-despawn-timer-client.json` — **client only**; presentation settings: timer/name visibility, heights, threshold and colors. + +Since v0.3.7, a physical client no longer creates `item-despawn-timer-server.json`. The main Fabric initializer also runs on clients, so `ServerConfig` explicitly checks the physical environment before reading/writing its persistent file. Integrated singleplayer uses the built-in server defaults in memory; dedicated servers continue to use the persistent server JSON. Minecraft 26.2 uses the unobfuscated Mojang/official names and Java 25. This port therefore does not reuse the old Yarn-named common/client GUI classes from 0.2.2. Client rendering lives only in `src/client`, while server/gameplay code lives in `src/main`. Run `compiler.bat` on Windows or `./compiler.sh` on Linux/macOS. The script checks whether the existing JAR contains the same `mod_version+mc` as `gradle.properties`; matching builds offer Push/Recompile/Quit. After a successful build it offers Git push and retries failed pushes in groups of three. -## Commands (v0.3.4) +## Commands (v0.3.7) `/idt reload` diff --git a/gradle.properties b/gradle.properties index f32f9eb..b611e2a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,6 +3,6 @@ org.gradle.configuration-cache=false minecraft_version=26.2 loader_version=0.19.3 fabric_version=0.160.0+26.2 -mod_version=0.3.6 +mod_version=0.3.7 maven_group=whirlfrenzy.itemdespawntimer archives_base_name=item-despawn-timer diff --git a/src/main/java/whirlfrenzy/itemdespawntimer/config/ServerConfig.java b/src/main/java/whirlfrenzy/itemdespawntimer/config/ServerConfig.java index 0ef10ec..c5b3174 100644 --- a/src/main/java/whirlfrenzy/itemdespawntimer/config/ServerConfig.java +++ b/src/main/java/whirlfrenzy/itemdespawntimer/config/ServerConfig.java @@ -2,6 +2,7 @@ package whirlfrenzy.itemdespawntimer.config; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import net.fabricmc.api.EnvType; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.entity.item.ItemEntity; @@ -18,6 +19,15 @@ public final class ServerConfig { } private ServerConfig() {} public static void load() { + // The common/main initializer also runs in a physical Minecraft client. + // Never create or read the server config there: a client installation owns + // presentation settings only. Integrated singleplayer uses server defaults + // in memory; a dedicated server owns the persistent server config file. + if (FabricLoader.getInstance().getEnvironmentType() != EnvType.SERVER) { + data = new Data(); + return; + } + Path p = FabricLoader.getInstance().getConfigDir().resolve("item-despawn-timer-server.json"); try { if (Files.exists(p)) { try (Reader r=Files.newBufferedReader(p)) { Data d=GSON.fromJson(r,Data.class); if(d!=null)data=d; } }