mirror of
https://github.com/Lucaslah/WeatherChanger.git
synced 2026-01-03 03:57:50 +00:00
Start on NEXT (version 1.0) branch
- update gradle wrapper version (8.4 to 8.5) - update logo and add banner - change to gradle kotlin DSL (from groovy) - update README.md - update project layout for planned forge support - move common logic to common module - change environment to 'client' to prevent servers from loading the mod (#2) - cleanup unneeded files - update LICENSE.md to use Markdown format for easier reading - update version number to prepare for version 1.0 Signed-off-by: Lucas Petrino <nsx1lucas@gmail.com>
This commit is contained in:
16
common/build.gradle.kts
Normal file
16
common/build.gradle.kts
Normal file
@@ -0,0 +1,16 @@
|
||||
architectury {
|
||||
common(rootProject.property("enabled_platforms").toString().split(","))
|
||||
}
|
||||
|
||||
loom {
|
||||
accessWidenerPath = file("src/main/resources/weatherchanger.accesswidener")
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("com.google.code.gson:gson:2.10.1")
|
||||
modImplementation("net.fabricmc:fabric-loader:${rootProject.property("fabric.loader_version")}")
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
package me.lucaslah.weatherchanger;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import me.lucaslah.weatherchanger.config.WcConfig;
|
||||
import me.lucaslah.weatherchanger.config.WcMode;
|
||||
import me.lucaslah.weatherchanger.keybinding.KeybindingManager;
|
||||
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 java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Objects;
|
||||
|
||||
public class WeatherChanger {
|
||||
private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
||||
private static WcMode currentMode = WcMode.OFF;
|
||||
|
||||
public static void init() {
|
||||
boolean fileCreated = false;
|
||||
File configPath = getConfigFile();
|
||||
|
||||
if (!configPath.exists()) {
|
||||
try {
|
||||
fileCreated = configPath.createNewFile();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
if (fileCreated) {
|
||||
writeConfig();
|
||||
} else {
|
||||
loadConfig();
|
||||
}
|
||||
|
||||
KeybindingManager keybindingManager = WeatherChangerExpectPlatform.getKeybindingManager();
|
||||
|
||||
keybindingManager
|
||||
.add(new ToggleClearKey())
|
||||
.add(new ToggleOffKey())
|
||||
.add(new ToggleRainKey())
|
||||
.add(new ToggleThunderKey());
|
||||
|
||||
keybindingManager.registerKeys();
|
||||
}
|
||||
|
||||
private static void loadConfig() {
|
||||
Reader reader;
|
||||
|
||||
try {
|
||||
reader = Files.newBufferedReader(getConfigFile().toPath());
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
WcConfig config = gson.fromJson(reader, WcConfig.class);
|
||||
|
||||
if (!Objects.equals(config.getVersion(), "1.0.0")) {
|
||||
throw new RuntimeException("Invalid weather changer config version! Try removing the config file and try again.");
|
||||
}
|
||||
|
||||
currentMode = config.getMode();
|
||||
|
||||
try {
|
||||
reader.close();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static void writeConfig() {
|
||||
WcConfig config = new WcConfig();
|
||||
config.setMode(currentMode);
|
||||
config.setVersion("1.0.0");
|
||||
|
||||
Writer writer;
|
||||
try {
|
||||
writer = Files.newBufferedWriter(getConfigFile().toPath());
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
gson.toJson(config, writer);
|
||||
|
||||
try {
|
||||
writer.close();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static File getConfigFile() {
|
||||
return WeatherChangerExpectPlatform.getConfigDirectory().resolve("weather-changer.json").toFile();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reloads the config file from disk
|
||||
* @return if the reload was successful
|
||||
*/
|
||||
public static boolean reloadConfig() {
|
||||
if (getConfigFile().exists() && getConfigFile().isFile()) {
|
||||
loadConfig();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current mode
|
||||
* @param mode the mode
|
||||
*/
|
||||
public static void setMode(WcMode mode) {
|
||||
currentMode = mode;
|
||||
}
|
||||
|
||||
public static WcMode getMode() {
|
||||
return currentMode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call on shutdown
|
||||
*/
|
||||
public static void shutdown() {
|
||||
writeConfig();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package me.lucaslah.weatherchanger;
|
||||
|
||||
import dev.architectury.injectables.annotations.ExpectPlatform;
|
||||
import me.lucaslah.weatherchanger.keybinding.KeybindingManager;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class WeatherChangerExpectPlatform {
|
||||
@ExpectPlatform
|
||||
public static Path getConfigDirectory() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
@ExpectPlatform
|
||||
public static KeybindingManager getKeybindingManager() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package me.lucaslah.weatherchanger.command;
|
||||
|
||||
public class CommandManager {
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package me.lucaslah.weatherchanger.config;
|
||||
|
||||
public class WcConfig {
|
||||
private WcMode mode;
|
||||
private String version;
|
||||
|
||||
public WcConfig() {
|
||||
}
|
||||
|
||||
public WcConfig(WcMode mode, String version) {
|
||||
this.mode = mode;
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public WcMode getMode() {
|
||||
return mode;
|
||||
}
|
||||
|
||||
public void setMode(WcMode mode) {
|
||||
this.mode = mode;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(String version) {
|
||||
this.version = version;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package me.lucaslah.weatherchanger.config;
|
||||
|
||||
public enum WcMode {
|
||||
OFF,
|
||||
CLEAR,
|
||||
RAIN,
|
||||
THUNDER
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package me.lucaslah.weatherchanger.keybinding;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class Key {
|
||||
public KeyBinding keybind;
|
||||
public MinecraftClient mc = MinecraftClient.getInstance();
|
||||
|
||||
public Key(@NotNull String name) {
|
||||
keybind = new KeyBinding(this.getDisplayName(), this.getKeyType(), this.getKey(), this.getCategory());
|
||||
}
|
||||
|
||||
public abstract void onPress(@NotNull MinecraftClient client);
|
||||
public abstract Identifier getId();
|
||||
public abstract KeyBinding getKeyBinding();
|
||||
public abstract boolean isEnabled();
|
||||
public abstract String getDisplayName();
|
||||
public abstract InputUtil.Type getKeyType();
|
||||
public abstract String getCategory();
|
||||
public abstract int getKey();
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package me.lucaslah.weatherchanger.keybinding;
|
||||
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class KeybindingManager {
|
||||
private final HashMap<Identifier, Key> entries = new HashMap<>();
|
||||
|
||||
public KeybindingManager add(Key entry) {
|
||||
entries.put(entry.getId(), entry);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Key get(Identifier identifier) {
|
||||
return entries.get(identifier);
|
||||
}
|
||||
|
||||
public List<Key> getEntries() {
|
||||
if (!entries.isEmpty()) {
|
||||
return new ArrayList<>(entries.values());
|
||||
}
|
||||
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
public abstract void registerKeys();
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package me.lucaslah.weatherchanger.keys;
|
||||
|
||||
import me.lucaslah.weatherchanger.WeatherChanger;
|
||||
import me.lucaslah.weatherchanger.config.WcMode;
|
||||
import me.lucaslah.weatherchanger.keybinding.Key;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ToggleClearKey extends Key {
|
||||
public ToggleClearKey() {
|
||||
super("ToggleClearKey");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPress(@NotNull MinecraftClient client) {
|
||||
WeatherChanger.setMode(WcMode.CLEAR);
|
||||
assert mc.player != null;
|
||||
mc.player.sendMessage(Text.of("Set client weather to: Clear"), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Identifier getId() {
|
||||
return new Identifier("weatherchanger", "toggleclearkey");
|
||||
}
|
||||
|
||||
@Override
|
||||
public KeyBinding getKeyBinding() {
|
||||
return this.keybind;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return "Toggle Weather Clear";
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputUtil.Type getKeyType() {
|
||||
return InputUtil.Type.KEYSYM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCategory() {
|
||||
return "Weather Changer";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getKey() {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package me.lucaslah.weatherchanger.keys;
|
||||
|
||||
import me.lucaslah.weatherchanger.WeatherChanger;
|
||||
import me.lucaslah.weatherchanger.config.WcMode;
|
||||
import me.lucaslah.weatherchanger.keybinding.Key;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ToggleOffKey extends Key {
|
||||
public ToggleOffKey() {
|
||||
super("ToggleOffKey");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPress(@NotNull MinecraftClient client) {
|
||||
WeatherChanger.setMode(WcMode.OFF);
|
||||
assert mc.player != null;
|
||||
mc.player.sendMessage(Text.of("Set client weather to: Off"), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Identifier getId() {
|
||||
return new Identifier("weatherchanger", "toggleoffkey");
|
||||
}
|
||||
|
||||
@Override
|
||||
public KeyBinding getKeyBinding() {
|
||||
return this.keybind;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return "Toggle Weather Off";
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputUtil.Type getKeyType() {
|
||||
return InputUtil.Type.KEYSYM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCategory() {
|
||||
return "Weather Changer";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getKey() {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package me.lucaslah.weatherchanger.keys;
|
||||
|
||||
import me.lucaslah.weatherchanger.WeatherChanger;
|
||||
import me.lucaslah.weatherchanger.config.WcMode;
|
||||
import me.lucaslah.weatherchanger.keybinding.Key;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ToggleRainKey extends Key {
|
||||
public ToggleRainKey() {
|
||||
super("ToggleRainKey");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPress(@NotNull MinecraftClient client) {
|
||||
WeatherChanger.setMode(WcMode.RAIN);
|
||||
assert mc.player != null;
|
||||
mc.player.sendMessage(Text.of("Set client weather to: Rain"), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Identifier getId() {
|
||||
return new Identifier("weatherchanger", "togglerainkey");
|
||||
}
|
||||
|
||||
@Override
|
||||
public KeyBinding getKeyBinding() {
|
||||
return this.keybind;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return "Toggle Weather Rain";
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputUtil.Type getKeyType() {
|
||||
return InputUtil.Type.KEYSYM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCategory() {
|
||||
return "Weather Changer";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getKey() {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package me.lucaslah.weatherchanger.keys;
|
||||
|
||||
import me.lucaslah.weatherchanger.WeatherChanger;
|
||||
import me.lucaslah.weatherchanger.config.WcMode;
|
||||
import me.lucaslah.weatherchanger.keybinding.Key;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ToggleThunderKey extends Key {
|
||||
public ToggleThunderKey() {
|
||||
super("ToggleThunderKey");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPress(@NotNull MinecraftClient client) {
|
||||
WeatherChanger.setMode(WcMode.THUNDER);
|
||||
assert mc.player != null;
|
||||
mc.player.sendMessage(Text.of("Set client weather to: Thunder"), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Identifier getId() {
|
||||
return new Identifier("weatherchanger", "togglethunderkey");
|
||||
}
|
||||
|
||||
@Override
|
||||
public KeyBinding getKeyBinding() {
|
||||
return this.keybind;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return "Toggle Weather Thunder";
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputUtil.Type getKeyType() {
|
||||
return InputUtil.Type.KEYSYM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCategory() {
|
||||
return "Weather Changer";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getKey() {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package me.lucaslah.weatherchanger.mixin;
|
||||
|
||||
import me.lucaslah.weatherchanger.WeatherChanger;
|
||||
import me.lucaslah.weatherchanger.config.WcMode;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
@Mixin(World.class)
|
||||
public class WorldMixin {
|
||||
@Shadow
|
||||
protected float rainGradientPrev;
|
||||
@Shadow
|
||||
protected float rainGradient;
|
||||
@Shadow
|
||||
protected float thunderGradientPrev;
|
||||
@Shadow
|
||||
protected float thunderGradient;
|
||||
|
||||
@Inject(method = "getRainGradient", at = @At("HEAD"), cancellable = true)
|
||||
public void getRainGradient(float delta, CallbackInfoReturnable<Float> callback) {
|
||||
WcMode mode = WeatherChanger.getMode();
|
||||
|
||||
if (mode == WcMode.CLEAR) {
|
||||
callback.setReturnValue(0F);
|
||||
} else if (mode == WcMode.RAIN || mode == WcMode.THUNDER) {
|
||||
callback.setReturnValue(1F);
|
||||
} else {
|
||||
callback.setReturnValue(MathHelper.lerp(delta, this.rainGradientPrev, this.rainGradient));
|
||||
}
|
||||
|
||||
callback.cancel();
|
||||
}
|
||||
|
||||
@Inject(method = "getThunderGradient", at = @At("HEAD"), cancellable = true)
|
||||
public void getThunderGradient(float delta, CallbackInfoReturnable<Float> callback) {
|
||||
WcMode mode = WeatherChanger.getMode();
|
||||
|
||||
if (mode == WcMode.CLEAR) {
|
||||
callback.setReturnValue(0F);
|
||||
} else if (mode == WcMode.THUNDER) {
|
||||
callback.setReturnValue(1F);
|
||||
} else {
|
||||
callback.setReturnValue(MathHelper.lerp(delta, this.thunderGradientPrev, this.thunderGradient) * MathHelper.lerp(delta, this.rainGradientPrev, this.rainGradient));
|
||||
}
|
||||
|
||||
callback.cancel();
|
||||
}
|
||||
}
|
||||
3
common/src/main/resources/architectury.common.json
Normal file
3
common/src/main/resources/architectury.common.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"accessWidener": "weatherchanger.accesswidener"
|
||||
}
|
||||
1
common/src/main/resources/weatherchanger.accesswidener
Normal file
1
common/src/main/resources/weatherchanger.accesswidener
Normal file
@@ -0,0 +1 @@
|
||||
accessWidener v2 named
|
||||
14
common/src/main/resources/weatherchanger.mixins.json
Normal file
14
common/src/main/resources/weatherchanger.mixins.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"required": true,
|
||||
"minVersion": "0.8",
|
||||
"package": "me.lucaslah.weatherchanger.mixin",
|
||||
"compatibilityLevel": "JAVA_17",
|
||||
"mixins": [
|
||||
],
|
||||
"client": [
|
||||
"WorldMixin"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user