Add config

This commit is contained in:
Liz Graham
2022-03-03 03:13:12 +00:00
parent 25c3ab29b0
commit 3bf86d170c
10 changed files with 245 additions and 23 deletions

View File

@@ -1,22 +1,60 @@
package net.fabricmc.example;
import net.fabricmc.api.ModInitializer;
import com.minelittlepony.common.util.GamePaths;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.minecraft.client.MinecraftClient;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.world.World;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Random;
public class ExampleMod implements ModInitializer {
public static final Logger LOGGER = LoggerFactory.getLogger("modid");
public class Dust implements ClientModInitializer {
public static final Logger LOGGER = LoggerFactory.getLogger("dust");
private static Dust instance;
public static Dust getInstance() {
return instance;
}
public Dust() {
instance = this;
}
private DustConfig config;
public DustConfig getConfig() {
return config;
}
@Override
public void onInitialize() {
ClientTickEvents.START_CLIENT_TICK.register((client) -> {
if(!client.isPaused()){
public void onInitializeClient() {
Path dustFolder = GamePaths.getConfigDirectory().resolve("dust");
config = new DustConfig(dustFolder.resolve("userconfig.json"), this);
config.load();
ClientTickEvents.END_CLIENT_TICK.register(this::createDust);
}
public int getRandomNumberUsingInts(int min, int max) {
Random random = new Random();
return random.ints(min, max)
.findFirst()
.getAsInt();
}
public static double lerp(double min, double max, double val) {
return 1 - ((val - min) / (max - min));
}
private void createDust(MinecraftClient client) {
if (getConfig().getDustEnabled()) {
if (!client.isPaused()) {
if (client.world != null) {
World world = client.world;
if (!client.player.clientWorld.isSkyVisible(client.player.getBlockPos())) {
@@ -33,16 +71,6 @@ public class ExampleMod implements ModInitializer {
}
}
}
});
}
public int getRandomNumberUsingInts(int min, int max) {
Random random = new Random();
return random.ints(min,max)
.findFirst()
.getAsInt();
}
public static double lerp(double min, double max, double val) {
return 1 - ((val - min) / (max - min));
}
}
}

View File

@@ -0,0 +1,38 @@
package net.fabricmc.example;
import net.fabricmc.example.utils.JsonFile;
import java.nio.file.Path;
import java.util.Vector;
public class DustConfig extends JsonFile {
private transient final Dust dust;
private Vector dimensions;
private boolean dustEnabled = true;
public DustConfig(Path file, Dust dust) {
super(file);
this.dust = dust;
}
public Vector setDimensions(){
return null;
}
public Vector getDimensions(){
return null;
}
public boolean toggleDust(){
dustEnabled = !dustEnabled;
save();
return dustEnabled;
}
public boolean getDustEnabled(){
return dustEnabled;
}
}

View File

@@ -0,0 +1,11 @@
package net.fabricmc.example;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
public class DustModMenuFactory implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return ModMenuScreen::new;
}
}

View File

@@ -0,0 +1,41 @@
package net.fabricmc.example;
import com.minelittlepony.common.client.gui.GameGui;
import com.minelittlepony.common.client.gui.element.*;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.TranslatableText;
import javax.annotation.Nullable;
public class ModMenuScreen extends GameGui {
public ModMenuScreen(@Nullable Screen parent) {
super(new TranslatableText("menu.dust.title"), parent);
}
@Override
public void init() {
int left = width / 2 - 100;
int row = height / 4 + 14;
DustConfig config = Dust.getInstance().getConfig();
addButton(new Label(width / 2, 30)).setCentered().getStyle()
.setText(getTitle());
addButton(new Button(left, row += 24).onClick(sender -> {
sender.getStyle().setText("menu.dust.global." + config.toggleDust());
})).getStyle()
.setText("menu.dust.global." + config.getDustEnabled());
addButton(new Button(left, row += 34)
.onClick(sender -> finish())).getStyle()
.setText("gui.done");
}
@Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float partialTicks) {
renderBackground(matrices);
super.render(matrices, mouseX, mouseY, partialTicks);
}
}

View File

@@ -0,0 +1,54 @@
package net.fabricmc.example.utils;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.Reader;
import java.nio.file.Files;
import java.nio.file.Path;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.InstanceCreator;
import net.fabricmc.example.Dust;
public class JsonFile {
protected transient final Gson gson = new GsonBuilder()
.registerTypeAdapter(getClass(), (InstanceCreator<JsonFile>)t -> this)
.setPrettyPrinting()
.create();
private transient Path file;
JsonFile() { }
public JsonFile(Path file) {
this.file = file;
}
public final void load() {
if (Files.isReadable(file)) {
try (Reader reader = Files.newBufferedReader(file)) {
load(reader);
} catch (Exception e) {
Dust.LOGGER.error("Invalid config", e);
}
}
save();
}
public final void load(Reader reader) {
gson.fromJson(reader, getClass());
}
public final void save() {
try {
Files.createDirectories(file.getParent());
try (BufferedWriter writer = Files.newBufferedWriter(file)) {
gson.toJson(this, writer);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}