diff --git a/build.gradle b/build.gradle index 16f0c6b..3dc8201 100644 --- a/build.gradle +++ b/build.gradle @@ -17,6 +17,9 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" + + implementation "com.moandjiezana.toml:toml4j:${project.toml4j_version}" + include "com.moandjiezana.toml:toml4j:${project.toml4j_version}" } processResources { @@ -35,7 +38,7 @@ tasks.withType(JavaCompile).configureEach { it.options.encoding = "UTF-8" // Minecraft 1.17 (21w19a) upwards uses Java 16. - it.options.release = 16 + it.options.release.set(16) } java { @@ -62,14 +65,4 @@ publishing { } } } -// -// repositories { -// maven { -// url = mavenUrl -// credentials { -// username mavenUser -// password mavenPassword -// } -// } -// } } diff --git a/gradle.properties b/gradle.properties index 9eecb68..00916f3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,4 +12,6 @@ fabric_version=0.34.9+1.17 # Mod Properties mod_version = 1.5 maven_group = net.cavoj -archives_base_name = servertick \ No newline at end of file +archives_base_name = servertick + +toml4j_version = 0.7.2 diff --git a/src/main/java/net/cavoj/servertick/Config.java b/src/main/java/net/cavoj/servertick/Config.java new file mode 100644 index 0000000..28dce9b --- /dev/null +++ b/src/main/java/net/cavoj/servertick/Config.java @@ -0,0 +1,33 @@ +package net.cavoj.servertick; + +import com.moandjiezana.toml.Toml; +import com.moandjiezana.toml.TomlWriter; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; + +public class Config { + public final boolean requireOP; + + public Config(Path configPath) { + if (!Files.exists(configPath)) { + createDefault(configPath); + } + Toml toml = new Toml().read(configPath.toFile()); + this.requireOP = toml.getBoolean("requireOP"); + } + + private static void createDefault(Path configPath) { + TomlWriter tw = new TomlWriter(); + Map defaults = new HashMap<>(); + defaults.put("requireOP", true); + try { + tw.write(defaults, configPath.toFile()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/net/cavoj/servertick/ServerTick.java b/src/main/java/net/cavoj/servertick/ServerTick.java index 296fe02..ab08023 100644 --- a/src/main/java/net/cavoj/servertick/ServerTick.java +++ b/src/main/java/net/cavoj/servertick/ServerTick.java @@ -13,7 +13,11 @@ import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; +import java.nio.file.Path; + public class ServerTick implements ModInitializer { + private Config config; + @Override public void onInitialize() { ServerPlayNetworking.registerGlobalReceiver(NetworkC2S.PACKET_ENABLED, this::processTogglePacket); @@ -21,13 +25,14 @@ public void onInitialize() { ((MinecraftServerWithST)minecraftServer).tickST(); })); if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER) { - // TODO Load server config + Path configFilePath = FabricLoader.getInstance().getConfigDir().resolve("servertick.toml"); + this.config = new Config(configFilePath); } } private boolean checkPlayerPrivilege(PlayerEntity player) { - // TODO check server config return (player.getServer() != null && !player.getServer().isDedicated()) || + (this.config != null && !this.config.requireOP) || player.hasPermissionLevel(4); }