diff --git a/README.md b/README.md
index bbaef07..bae2a9e 100644
--- a/README.md
+++ b/README.md
@@ -35,6 +35,8 @@ To set the keybindings you can do so in the minecraft keybinding settings.
For supported mod loaders and minecraft versions see [release history](#release-history)
+
+
## Download
You can download the mod from any of the platforms below.
@@ -43,6 +45,8 @@ You can download the mod from any of the platforms below.
**GitHub Releases:** https://github.com/Lucaslah/WeatherChanger/releases
**Release Server**: https://release.cssudii.xyz/projects/weatherchanger
+
+
## Release History
| Branch | Version | MC Version | Mod loaders | Git Tag | CI | Supported |
|--------|---------|---------------|-------------|------------------------------------------------------------------------|-----|-----------|
@@ -57,6 +61,7 @@ You can download the mod from any of the platforms below.
## Minecraft Versions
| Version | Status |
|---------|---------------------------------|
+| 1.20.4 | Supported |
| 1.20.3 | Supported |
| 1.20.2 | Supported |
| 1.20.1 | Supported |
diff --git a/build.gradle.kts b/build.gradle.kts
index 7878319..b696fc4 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -4,7 +4,7 @@ import io.github.themrmilchmann.gradle.publish.curseforge.ReleaseType
plugins {
id("architectury-plugin") version "3.4-SNAPSHOT"
- id ("dev.architectury.loom") version "1.3-SNAPSHOT" apply false
+ id ("dev.architectury.loom") version "1.4-SNAPSHOT" apply false
id("com.modrinth.minotaur") version "2.+"
id("io.github.themrmilchmann.curseforge-publish") version "0.6.1"
}
@@ -65,6 +65,7 @@ modrinth {
}
curseforge {
+ apiToken = System.getenv("CURSEFORGE_TOKEN")
publications {
register("curseForge") {
projectId = "682513"
diff --git a/common/src/main/java/me/lucaslah/weatherchanger/WeatherChanger.java b/common/src/main/java/me/lucaslah/weatherchanger/WeatherChanger.java
index e36bc3a..c965dad 100644
--- a/common/src/main/java/me/lucaslah/weatherchanger/WeatherChanger.java
+++ b/common/src/main/java/me/lucaslah/weatherchanger/WeatherChanger.java
@@ -2,6 +2,8 @@ package me.lucaslah.weatherchanger;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import me.lucaslah.weatherchanger.command.CommandManager;
+import me.lucaslah.weatherchanger.commands.WeatherChangerCommand;
import me.lucaslah.weatherchanger.config.WcConfig;
import me.lucaslah.weatherchanger.config.WcMode;
import me.lucaslah.weatherchanger.keybinding.KeybindingManager;
@@ -9,6 +11,8 @@ import me.lucaslah.weatherchanger.keys.ToggleClearKey;
import me.lucaslah.weatherchanger.keys.ToggleOffKey;
import me.lucaslah.weatherchanger.keys.ToggleRainKey;
import me.lucaslah.weatherchanger.keys.ToggleThunderKey;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.text.Text;
import java.io.File;
import java.io.IOException;
@@ -21,6 +25,8 @@ public class WeatherChanger {
private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
private static WcMode currentMode = WcMode.OFF;
private static WeatherChangerPlatform platform;
+ private static KeybindingManager keybindingManager;
+ private static CommandManager commandManager;
public static void init(WeatherChangerPlatform platform) {
WeatherChanger.platform = platform;
@@ -41,7 +47,8 @@ public class WeatherChanger {
loadConfig();
}
- KeybindingManager keybindingManager = platform.getKeybindingManager();
+ keybindingManager = new KeybindingManager();
+ commandManager = new CommandManager();
keybindingManager
.add(new ToggleClearKey())
@@ -49,7 +56,7 @@ public class WeatherChanger {
.add(new ToggleRainKey())
.add(new ToggleThunderKey());
- keybindingManager.registerKeys();
+ commandManager.add(new WeatherChangerCommand());
}
private static void loadConfig() {
@@ -132,4 +139,16 @@ public class WeatherChanger {
public static void shutdown() {
writeConfig();
}
+
+ public static KeybindingManager getKeybindingManager() {
+ return keybindingManager;
+ }
+
+ public static CommandManager getCommandManager() {
+ return commandManager;
+ }
+
+ public static void sendClientMessage(String message) {
+ MinecraftClient.getInstance().inGameHud.getChatHud().addMessage(Text.literal(message));
+ }
}
\ No newline at end of file
diff --git a/common/src/main/java/me/lucaslah/weatherchanger/WeatherChangerPlatform.java b/common/src/main/java/me/lucaslah/weatherchanger/WeatherChangerPlatform.java
index 4c0205c..c1ad52b 100644
--- a/common/src/main/java/me/lucaslah/weatherchanger/WeatherChangerPlatform.java
+++ b/common/src/main/java/me/lucaslah/weatherchanger/WeatherChangerPlatform.java
@@ -1,10 +1,7 @@
package me.lucaslah.weatherchanger;
-import me.lucaslah.weatherchanger.keybinding.KeybindingManager;
-
import java.nio.file.Path;
public interface WeatherChangerPlatform {
Path getConfigDirectory();
- KeybindingManager getKeybindingManager();
}
diff --git a/common/src/main/java/me/lucaslah/weatherchanger/command/Command.java b/common/src/main/java/me/lucaslah/weatherchanger/command/Command.java
new file mode 100644
index 0000000..0a10c97
--- /dev/null
+++ b/common/src/main/java/me/lucaslah/weatherchanger/command/Command.java
@@ -0,0 +1,10 @@
+package me.lucaslah.weatherchanger.command;
+
+import com.mojang.brigadier.CommandDispatcher;
+import net.minecraft.util.Identifier;
+
+public abstract class Command {
+ public abstract void register(CommandDispatcher dispatcher);
+ public abstract Identifier getId();
+ public abstract boolean isEnabled();
+}
diff --git a/common/src/main/java/me/lucaslah/weatherchanger/command/CommandManager.java b/common/src/main/java/me/lucaslah/weatherchanger/command/CommandManager.java
index 8e23eb3..32ee597 100644
--- a/common/src/main/java/me/lucaslah/weatherchanger/command/CommandManager.java
+++ b/common/src/main/java/me/lucaslah/weatherchanger/command/CommandManager.java
@@ -1,4 +1,28 @@
package me.lucaslah.weatherchanger.command;
+import net.minecraft.util.Identifier;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
public class CommandManager {
+ private final HashMap entries = new HashMap<>();
+
+ public CommandManager add(Command entry) {
+ entries.put(entry.getId(), entry);
+ return this;
+ }
+
+ public Command get(Identifier identifier) {
+ return entries.get(identifier);
+ }
+
+ public List getEntries() {
+ if (!entries.isEmpty()) {
+ return new ArrayList<>(entries.values());
+ }
+
+ return new ArrayList<>();
+ }
}
diff --git a/common/src/main/java/me/lucaslah/weatherchanger/commands/WeatherChangerCommand.java b/common/src/main/java/me/lucaslah/weatherchanger/commands/WeatherChangerCommand.java
new file mode 100644
index 0000000..59d330f
--- /dev/null
+++ b/common/src/main/java/me/lucaslah/weatherchanger/commands/WeatherChangerCommand.java
@@ -0,0 +1,64 @@
+package me.lucaslah.weatherchanger.commands;
+
+import com.mojang.brigadier.CommandDispatcher;
+import com.mojang.brigadier.builder.LiteralArgumentBuilder;
+import com.mojang.brigadier.tree.CommandNode;
+import com.mojang.brigadier.tree.LiteralCommandNode;
+import me.lucaslah.weatherchanger.WeatherChanger;
+import me.lucaslah.weatherchanger.command.Command;
+import me.lucaslah.weatherchanger.config.WcMode;
+import net.minecraft.util.Identifier;
+
+import static me.lucaslah.weatherchanger.WeatherChanger.sendClientMessage;
+
+public class WeatherChangerCommand extends Command {
+ @Override
+ public void register(CommandDispatcher dispatcher) {
+ LiteralArgumentBuilder command = LiteralArgumentBuilder.literal("clientweather");
+
+ command.then(LiteralArgumentBuilder.literal("off")
+ .executes(context -> {
+ WeatherChanger.setMode(WcMode.OFF);
+ sendClientMessage("Set client weather to: Off");
+ return 1;
+ })
+ );
+
+ command.then(LiteralArgumentBuilder.literal("clear")
+ .executes(context -> {
+ WeatherChanger.setMode(WcMode.CLEAR);
+ sendClientMessage("Set client weather to: Clear");
+ return 1;
+ })
+ );
+
+ command.then(LiteralArgumentBuilder.literal("rain")
+ .executes(context -> {
+ WeatherChanger.setMode(WcMode.RAIN);
+ sendClientMessage("Set client weather to: Rain");
+ return 1;
+ })
+ );
+
+ command.then(LiteralArgumentBuilder.literal("thunder")
+ .executes(context -> {
+ WeatherChanger.setMode(WcMode.THUNDER);
+ sendClientMessage("Set client weather to: Thunder");
+ return 1;
+ })
+ );
+
+ LiteralCommandNode node = dispatcher.register(command);
+ dispatcher.register((LiteralArgumentBuilder) LiteralArgumentBuilder.literal("cweather").redirect((CommandNode