diff --git a/build.gradle b/build.gradle index 37dd092..2433ab1 100644 --- a/build.gradle +++ b/build.gradle @@ -30,10 +30,10 @@ repositories { maven { url 'https://maven.neoforged.net/releases' } - maven { + /*maven { name = 'papermc' url = 'https://repo.papermc.io/repository/maven-public/' - } + }*/ maven { url "https://libraries.minecraft.net" } @@ -44,6 +44,11 @@ repositories { name = "Terraformers" url = "https://maven.terraformersmc.com/" } + maven { + name "lemonnik's maven" + url "https://maven.lemonnik.dev/releases/" + } + } def use_architectury_loom = project.platform in ['fabric', 'quilt', 'forge', 'neoforge'] @@ -183,6 +188,12 @@ dependencies { paperweight.paperDevBundle("${project.minecraft_version}-R0.1-SNAPSHOT") } + if (mcVersion < 260100) { + modImplementation "dev.lemonnik:fern_config:${project.fern_version}" + } else { + implementation "dev.lemonnik:fern_config:${project.fern_version}" + } + implementation "net.snackbag.shit:shit:${project.shit_version}" } @@ -191,7 +202,7 @@ if (use_architectury_loom) { runConfigs.configureEach { // to make sure it generates all "Minecraft Client (:subproject_name)" applications ideConfigGenerated = true - vmArgs [''] + vmArgs [] } if (project.platform == 'forge') { diff --git a/fern-updater.sh b/fern-updater.sh new file mode 100644 index 0000000..7f29ded --- /dev/null +++ b/fern-updater.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +OLD_PREFIX="1.2.0" +NEW_PREFIX="1.3.0" + +find versions -type f -name "gradle.properties" | while read -r file; do + sed -i "s/\(fern_version=\)${OLD_PREFIX}/\1${NEW_PREFIX}/" "$file" + echo "Updated $file" +done \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 850ecca..5b1a5df 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ dev.kikugie.stonecutter.hard_mode=true # Mod Properties mod_id=tt20 mod_name=TT20 -mod_version=0.8.3 +mod_version=1.8.3 maven_group=net.snackbag mod_description=TT20 helps reduce lag by optimizing how ticks work when the server's TPS is low. @@ -24,6 +24,7 @@ shit_version=1.2.3 # Versioned Dependencies minecraft_version=[VERSIONED] platform=[VERSIONED] +fern_version=[VERSIONED] # Mods minecraft_dependency=[VERSIONED] diff --git a/src/main/java/net/snackbag/tt20/ModUpdater.java b/src/main/java/net/snackbag/tt20/ModUpdater.java index ce2b9d5..823af56 100644 --- a/src/main/java/net/snackbag/tt20/ModUpdater.java +++ b/src/main/java/net/snackbag/tt20/ModUpdater.java @@ -24,8 +24,8 @@ public class ModUpdater { } public static void check() { - if (!TT20.config.automaticUpdater()) { - TT20.LOGGER.info("(TT20) Not checking for updates, because the updater is disabled. Current patch: " + TT20.PATCH); + if (!TT20.config.enabled.get() || !TT20.config.updateChecker.get()) { + TT20.LOGGER.info("(TT20) Not checking for updates, because the updater or mod is disabled. Current patch: " + TT20.PATCH); return; } diff --git a/src/main/java/net/snackbag/tt20/TT20.java b/src/main/java/net/snackbag/tt20/TT20.java index c8f9c63..3405a34 100644 --- a/src/main/java/net/snackbag/tt20/TT20.java +++ b/src/main/java/net/snackbag/tt20/TT20.java @@ -25,8 +25,6 @@ //? 1.18.2 //import net.minecraft.network.chat.TextComponent; -import net.snackbag.tt20.config.BlockEntityMaskConfig; -import net.snackbag.tt20.config.MainConfig; import net.snackbag.tt20.util.TPSCalculator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,11 +48,10 @@ public class TT20 public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); public static final TPSCalculator TPS_CALCULATOR = new TPSCalculator(); - public static final String VERSION = /*$ mod_version */"0.8.3"; + public static final String VERSION = /*$ mod_version */"1.8.3"; public static final int PATCH = 3; - public static final MainConfig config = new MainConfig(); - public static final BlockEntityMaskConfig blockEntityMaskConfig = new BlockEntityMaskConfig(); + public static final TT20Config config = new TT20Config(); //? if fabric @Override public void onInitialize() @@ -71,6 +68,8 @@ public class TT20 { LOGGER.info("Starting TT20..."); + config.reload(); + CompletableFuture.runAsync(() -> { try { ModUpdater.check(); diff --git a/src/main/java/net/snackbag/tt20/TT20Command.java b/src/main/java/net/snackbag/tt20/TT20Command.java index 8341deb..bc80f6d 100644 --- a/src/main/java/net/snackbag/tt20/TT20Command.java +++ b/src/main/java/net/snackbag/tt20/TT20Command.java @@ -30,27 +30,27 @@ public static void register(CommandDispatcher dispatcher) { } private static int executeStatus(CommandContext context) { - sendMessage(context, literal("§7TT20 enabled: " + (TT20.config.enabled() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Block entity acceleration: " + (TT20.config.blockEntityAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Block breaking acceleration: " + (TT20.config.blockBreakingAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Potion effect acceleration: " + (TT20.config.potionEffectAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Fluid acceleration: " + (TT20.config.fluidAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Pickup acceleration: " + (TT20.config.pickupAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Eating acceleration: " + (TT20.config.eatingAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Portal acceleration: " + (TT20.config.portalAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Sleeping acceleration: " + (TT20.config.sleepingAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Time acceleration: " + (TT20.config.timeAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Bow pull acceleration: " + (TT20.config.bowAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Crossbow pull acceleration: " + (TT20.config.crossbowAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7TNT acceleration: " + (TT20.config.tntAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Vanilla Lagback: " + (TT20.config.vanillaLagback() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Random tickspeed acceleration: " + (TT20.config.randomTickSpeedAcceleration() ? "§aON" : "§cOFF"))); - sendMessage(context, literal("§7Server watchdog: " + (TT20.config.serverWatchdog() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7TT20 enabled: " + (TT20.config.enabled.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Block entity acceleration: " + (TT20.config.blockEntity.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Block breaking acceleration: " + (TT20.config.blockBreaking.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Potion effect acceleration: " + (TT20.config.potionEffect.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Fluid acceleration: " + (TT20.config.fluid.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Pickup acceleration: " + (TT20.config.pickup.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Eating acceleration: " + (TT20.config.eating.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Portal acceleration: " + (TT20.config.portal.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Sleeping acceleration: " + (TT20.config.sleeping.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Time acceleration: " + (TT20.config.time.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Bow pull acceleration: " + (TT20.config.bow.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Crossbow pull acceleration: " + (TT20.config.crossbow.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7TNT acceleration: " + (TT20.config.tnt.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Vanilla Lagback: " + (TT20.config.lagback.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Random tickspeed acceleration: " + (TT20.config.randomTickSpeed.get() ? "§aON" : "§cOFF"))); + sendMessage(context, literal("§7Server watchdog: " + (TT20.config.watchdog.get() ? "§aON" : "§cOFF"))); executeTps(context, false); sendMessage(context, literal("\n§8Version: §7" + TT20.VERSION)); sendMessage(context, literal("§8MSPT: §7" + TT20.TPS_CALCULATOR.getMSPT())); sendMessage(context, literal("§8Missed ticks: §7" + TPSUtil.formatMissedTicks(TT20.TPS_CALCULATOR.getAllMissedTicks()))); - sendMessage(context, literal("§8Automatic updater: §7" + (TT20.config.automaticUpdater() ? "§aenabled" : "§cdisabled"))); + sendMessage(context, literal("§8Updater checker: §7" + (TT20.config.updateChecker.get() ? "§aenabled" : "§cdisabled"))); return 1; } @@ -58,8 +58,6 @@ private static int executeStatus(CommandContext context) { private static int executeReload(CommandContext context) { TT20.config.reload(); sendMessage(context, literal("Reloaded config")); - TT20.blockEntityMaskConfig.reload(); - sendMessage(context, literal("Reloaded block entity mask config")); return 1; } @@ -81,10 +79,10 @@ private static int executeTps(CommandContext context, boolea } private static int executeToggle(CommandContext context) { - TT20.config.enabled(!TT20.config.enabled()); + TT20.config.enabled.set(!TT20.config.enabled.get()); TT20.config.save(); - String enabledText = TT20.config.enabled() ? "enabled" : "disabled"; + String enabledText = TT20.config.enabled.get() ? "enabled" : "disabled"; sendMessage(context, literal("TT20 is now " + enabledText)); return 1; @@ -92,8 +90,8 @@ private static int executeToggle(CommandContext context) { private static int executeMain(CommandContext context) { - sendMessage(context, literal("Running TT20 version " + TT20.VERSION)); - sendMessage(context, literal("Enabled: " + TT20.config.enabled())); + sendMessage(context, literal("Running TT20 version " + TT20.VERSION + " (PATCH: " + TT20.PATCH + ")")); + sendMessage(context, literal("Enabled: " + TT20.config.enabled.get())); return 1; } diff --git a/src/main/java/net/snackbag/tt20/TT20Config.java b/src/main/java/net/snackbag/tt20/TT20Config.java new file mode 100644 index 0000000..6c419e2 --- /dev/null +++ b/src/main/java/net/snackbag/tt20/TT20Config.java @@ -0,0 +1,66 @@ +package net.snackbag.tt20; + +import dev.lemonnik.fern_config.CConfig; +import dev.lemonnik.fern_config.CExporter; +import dev.lemonnik.fern_config.types.CBoolean; +import dev.lemonnik.fern_config.types.CEnum; +import dev.lemonnik.fern_config.types.CMask; +import dev.lemonnik.fern_config.utils.CCategory; +import dev.lemonnik.fern_config.utils.MaskType; + +//? if >1.19.2 { +import net.minecraft.core.registries.BuiltInRegistries; +//?} else { +/*import net.minecraft.core.Registry; +*///?} + +import org.jetbrains.annotations.NotNull; + +@SuppressWarnings("deprecation") +public class TT20Config extends CConfig { + @Override + public @NotNull String getFileName() { + return TT20.MOD_ID; + } + + @Override + protected @NotNull CExporter.Format getFormat() { + return CExporter.Format.JSON5; + } + + private static final CCategory MAIN = CCategory.of("main", "Main TT20 configuration"); + + public final CBoolean enabled = register(MAIN, new CBoolean("enabled", "Controls if TT20 is accelerating anything", true)); + public final CBoolean blockEntity = register(MAIN, new CBoolean("blockEntity", "ex. furnace work speed, this requires Block Entity Mask to be set up! (causes more lag otherwise)",false)); + public final CBoolean blockBreaking = register(MAIN, new CBoolean("blockBreaking", "block breaking acceleration", true)); + public final CBoolean eating = register(MAIN, new CBoolean("eating", "food consumption acceleration", true)); + public final CBoolean potionEffect = register(MAIN, new CBoolean("potionEffect", "effect duration acceleration", true)); + public final CBoolean fluid = register(MAIN, new CBoolean("fluid", "fluid flow acceleration", true)); + public final CBoolean pickup = register(MAIN, new CBoolean("pickup", "item pickup acceleration", true)); + public final CBoolean portal = register(MAIN, new CBoolean("portal", "time in portal acceleration", true)); + public final CBoolean sleeping = register(MAIN, new CBoolean("sleeping", "time laying in bed acceleration", true)); + public final CBoolean time = register(MAIN, new CBoolean("time", "daytime acceleration", true)); + public final CBoolean bow = register(MAIN, new CBoolean("bow", "bow charge acceleration", true)); + public final CBoolean crossbow = register(MAIN, new CBoolean("crossbow", "crossbow charge acceleration", true)); + public final CBoolean randomTickSpeed = register(MAIN, new CBoolean("randomTickSpeed", "random tick speed acceleration (ex. crop growth)", true)); + public final CBoolean tnt = register(MAIN, new CBoolean("tnt", "tnt timer acceleration", false)); + public final CBoolean lagback = register(MAIN, new CBoolean("lagback", "vanilla player lagback", true)); + public final CBoolean watchdog = register(MAIN, new CBoolean("watchdog", "server watchdog (vanilla's stop server after 1 minute of freeze behaviour)", true)); + + public final CBoolean updateChecker = register(MAIN, new CBoolean("updateChecker", "automatic update checker", true)); + + public final CMask blockEntityMask = register(MAIN, new CMask("blocks", "Block Entity Mask configuration, only change this if you know what you're doing!", + //? if >1.19.2 { + BuiltInRegistries.BLOCK, + //?} else { + /*Registry.BLOCK, + *///?} + new CEnum<>( + "type", + "mask type", + MaskType.class, + MaskType.WHITELIST + ), + "*:*") + ); +} diff --git a/src/main/java/net/snackbag/tt20/config/BlockEntityMaskConfig.java b/src/main/java/net/snackbag/tt20/config/BlockEntityMaskConfig.java deleted file mode 100644 index d45b25b..0000000 --- a/src/main/java/net/snackbag/tt20/config/BlockEntityMaskConfig.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.snackbag.tt20.config; - -//? if >=1.20.1 { -import net.minecraft.core.registries.BuiltInRegistries; -//?} else { -/*import net.minecraft.core.Registry; -*///?} -import net.snackbag.tt20.util.Mask; - -@SuppressWarnings("deprecation") -public class BlockEntityMaskConfig extends JSONConfiguration { - private Mask mask; - private boolean reloaded = false; - - public BlockEntityMaskConfig() { - super("block_entity_mask.json"); - - String[] defaultMask = {"*:*"}; - - putIfEmpty("type", "whitelist"); - putIfEmpty("blocks", defaultMask); - - save(); - reload(); - } - - public Mask getMask() { - return mask; - } - - @Override - public void reload() { - super.reload(); - - if (reloaded) { - //? if >=1.20.1 { - this.mask = new Mask(BuiltInRegistries.BLOCK, this, "blocks"); - //?} else { - /*this.mask = new Mask(Registry.BLOCK, this, "blocks"); - *///?} - } else { - reloaded = true; - } - } -} diff --git a/src/main/java/net/snackbag/tt20/config/JSONConfiguration.java b/src/main/java/net/snackbag/tt20/config/JSONConfiguration.java deleted file mode 100644 index 082a464..0000000 --- a/src/main/java/net/snackbag/tt20/config/JSONConfiguration.java +++ /dev/null @@ -1,288 +0,0 @@ -package net.snackbag.tt20.config; - -import com.google.gson.*; - -//? if fabric -import net.fabricmc.loader.api.FabricLoader; - -//? if forge -//import net.minecraftforge.fml.loading.FMLPaths; - -//? if neoforge -//import net.neoforged.fml.loading.FMLPaths; - -import net.snackbag.tt20.TT20; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.io.*; -import java.util.*; - -public class JSONConfiguration { - private final String fileName; - - private JsonObject json; - private final Gson gson; - - public JSONConfiguration(String fileName) { - this.fileName = fileName; - this.gson = new GsonBuilder().setPrettyPrinting().create(); - - // load file into configuration - reload(); - } - - public void save() { - try { - File file = new File(getAbsolutePath() + fileName); - file.getParentFile().mkdirs(); - file.createNewFile(); - - FileWriter writer = new FileWriter(file); - writer.write(gson.toJson(json)); - writer.close(); - - reload(); - } catch (IOException e) { - TT20.LOGGER.error("(TT20) Failed to save JSONConfiguration '" + fileName + "'"); - e.printStackTrace(); - return; - } - } - - public void reload() { - try { - File file = new File(getAbsolutePath() + fileName); - file.getParentFile().mkdirs(); - - // if the file didn't exist before - if (file.createNewFile()) { - FileWriter writer = new FileWriter(file); - writer.write("{}"); - writer.close(); - } - - BufferedReader reader = new BufferedReader(new FileReader(getAbsolutePath() + fileName)); - json = gson.fromJson(reader, JsonObject.class); - } catch (IOException e) { - TT20.LOGGER.error("(TT20) Failed to reload JSONConfiguration '" + fileName + "'"); - e.printStackTrace(); - } - } - - public boolean has(String key) { - // Create a deep copy of the json object - JsonElement element = gson.fromJson(json.toString(), JsonElement.class); - - for (String part : splitKey(key)) { - if (element == null || !element.getAsJsonObject().has(part)) { - return false; - } - element = element.getAsJsonObject().get(part); - } - return element != null; - } - - private @Nullable Object[] preparePut(String key, @Nullable Object value) { - String[] parts = splitKey(key); - JsonObject current = json; - - for (int i = 0; i < parts.length - 1; i++) { - String part = parts[i]; - - if (!current.has(part) || !current.get(part).isJsonObject()) { - current.add(part, new JsonObject()); - } - - current = current.getAsJsonObject(part); - } - - if (value == null) { - current.remove(parts[parts.length - 1]); - return null; - } - - return new Object[]{current, parts[parts.length - 1]}; - } - - public void put(String key, @Nullable String value) { - Object[] values = preparePut(key, value); - if (values == null) return; - - JsonObject current = (JsonObject) values[0]; - current.addProperty((String) values[1], value); - } - - public void put(String key, @Nullable Object[] value) { - Object[] values = preparePut(key, value); - if (values == null) return; - - JsonObject current = (JsonObject) values[0]; - - JsonArray array = new JsonArray(); - for (Object object : value) { - if (object instanceof String) { - array.add((String) object); - } else if (object instanceof Boolean) { - array.add((Boolean) object); - } else if (object instanceof Number) { - array.add((Number) object); - } else { - throw new IllegalArgumentException("Unsupported object type: " + object.getClass().getName()); - } - } - - current.add((String) values[1], array); - } - - public void put(String key, @Nullable Boolean value) { - Object[] values = preparePut(key, value); - if (values == null) return; - - JsonObject current = (JsonObject) values[0]; - current.addProperty((String) values[1], value); - } - - public void putIfEmpty(String key, @NotNull String value) { - Objects.requireNonNull(value); - - if (!has(key)) { - put(key, value); - } - } - - public void putIfEmpty(String key, @NotNull Object[] value) { - Objects.requireNonNull(value); - - if (!has(key)) { - put(key, value); - } - } - - public void putIfEmpty(String key, @NotNull Boolean value) { - Objects.requireNonNull(value); - - if (!has(key)) { - put(key, value); - } - } - - public String getAsString(String key) { - JsonElement element = json; - - for (String part : splitKey(key)) { - if (element == null || !element.getAsJsonObject().has(part)) { - return null; - } - element = element.getAsJsonObject().get(part); - } - - return element != null && element.isJsonPrimitive() && element.getAsJsonPrimitive().isString() - ? element.getAsString() - : null; - } - - public Boolean getAsBoolean(String key) { - JsonElement element = json; - - for (String part : splitKey(key)) { - if (element == null || !element.getAsJsonObject().has(part)) { - return null; - } - element = element.getAsJsonObject().get(part); - } - - return element != null && element.isJsonPrimitive() && element.getAsJsonPrimitive().isBoolean() - ? element.getAsBoolean() - : null; - } - - public JsonArray getAsArray(String key) { - JsonElement element = json; - - for (String part : splitKey(key)) { - if (element == null || !element.getAsJsonObject().has(part)) { - return null; - } - element = element.getAsJsonObject().get(part); - } - - return element != null && element.isJsonArray() - ? element.getAsJsonArray() - : null; - } - - public String getAsStringOrDefault(String key, String def) { - if (!has(key)) { - return def; - } - return getAsString(key); - } - - public Boolean getAsBooleanOrDefault(String key, Boolean def) { - if (!has(key)) { - return def; - } - return getAsBoolean(key); - } - - public String getFileName() { - return fileName; - } - - public String[] keys(String key) { - // If the key is empty, return all string keys in the root JSON object - if (key.isEmpty()) { - Set keys = new HashSet<>(); - collectStringKeys(json, "", keys); - return keys.toArray(new String[0]); - } - - // Traverse the JSON structure to the specified key - JsonElement element = json; - for (String part : splitKey(key)) { - if (element == null || !element.getAsJsonObject().has(part)) { - return new String[0]; - } - element = element.getAsJsonObject().get(part); - } - - // If the element is a JSON object, collect its string keys - if (element != null && element.isJsonObject()) { - Set keys = new HashSet<>(); - collectStringKeys(element.getAsJsonObject(), "", keys); - return keys.toArray(new String[0]); - } else { - return new String[0]; - } - } - - public String[] keys() { - return keys(""); - } - - public String[] splitKey(String key) { - return key.split("\\."); - } - - public String getAbsolutePath() { - //? if fabric - return FabricLoader.getInstance().getConfigDir().toAbsolutePath() + "/tt20/"; - - //? if forge || neoforge - //return FMLPaths.GAMEDIR.get().resolve(FMLPaths.CONFIGDIR.get()) + "/tt20/"; - } - - private void collectStringKeys(JsonObject jsonObject, String prefix, Set keys) { - for (String key : jsonObject.keySet()) { - JsonElement element = jsonObject.get(key); - String fullKey = prefix.isEmpty() ? key : prefix + "." + key; - - if (element.isJsonPrimitive() && element.getAsJsonPrimitive().isString()) { - keys.add(fullKey); - } else if (element.isJsonObject()) { - collectStringKeys(element.getAsJsonObject(), fullKey, keys); - } - } - } -} \ No newline at end of file diff --git a/src/main/java/net/snackbag/tt20/config/MainConfig.java b/src/main/java/net/snackbag/tt20/config/MainConfig.java deleted file mode 100644 index 2cfe6f3..0000000 --- a/src/main/java/net/snackbag/tt20/config/MainConfig.java +++ /dev/null @@ -1,211 +0,0 @@ -package net.snackbag.tt20.config; - -public class MainConfig extends JSONConfiguration { - private boolean enabled = true; - private boolean blockEntityAcceleration = false; - private boolean blockBreakingAcceleration = true; - private boolean eatingAcceleration = true; - private boolean potionEffectAcceleration = true; - private boolean fluidAcceleration = true; - private boolean pickupAcceleration = true; - private boolean portalAcceleration = true; - private boolean sleepingAcceleration = true; - private boolean timeAcceleration = true; - private boolean bowAcceleration = true; - private boolean crossbowAcceleration = true; - private boolean randomTickSpeedAcceleration = true; - private boolean tntAcceleration = false; - private boolean vanillaLagback = true; - - private boolean serverWatchdog = true; - private boolean automaticUpdater = true; - - public MainConfig() { - super("config.json"); - - putIfEmpty("enabled", enabled); - putIfEmpty("block-entity-acceleration", blockEntityAcceleration); - putIfEmpty("block-breaking-acceleration", blockBreakingAcceleration); - putIfEmpty("potion-effect-acceleration", potionEffectAcceleration); - putIfEmpty("fluid-acceleration", fluidAcceleration); - putIfEmpty("pickup-acceleration", pickupAcceleration); - putIfEmpty("eating-acceleration", eatingAcceleration); - putIfEmpty("portal-acceleration", portalAcceleration); - putIfEmpty("sleeping-acceleration", sleepingAcceleration); - putIfEmpty("server-watchdog", serverWatchdog); - putIfEmpty("time-acceleration", timeAcceleration); - putIfEmpty("bow-acceleration", bowAcceleration); - putIfEmpty("crossbow-acceleration", crossbowAcceleration); - putIfEmpty("random-tickspeed-acceleration", randomTickSpeedAcceleration); - putIfEmpty("tnt-acceleration", tntAcceleration); - putIfEmpty("vanilla-lagback", vanillaLagback); - - putIfEmpty("automatic-updater", automaticUpdater); - - save(); - } - - @Override - public void reload() { - super.reload(); - - this.enabled = getAsBooleanOrDefault("enabled", enabled); - this.blockEntityAcceleration = getAsBooleanOrDefault("block-entity-acceleration", blockEntityAcceleration); - this.blockBreakingAcceleration = getAsBooleanOrDefault("block-breaking-acceleration", blockBreakingAcceleration); - this.potionEffectAcceleration = getAsBooleanOrDefault("potion-effect-acceleration", potionEffectAcceleration); - this.fluidAcceleration = getAsBooleanOrDefault("fluid-acceleration", fluidAcceleration); - this.pickupAcceleration = getAsBooleanOrDefault("pickup-acceleration", pickupAcceleration); - this.eatingAcceleration = getAsBooleanOrDefault("eating-acceleration", eatingAcceleration); - this.portalAcceleration = getAsBooleanOrDefault("portal-acceleration", portalAcceleration); - this.sleepingAcceleration = getAsBooleanOrDefault("sleeping-acceleration", sleepingAcceleration); - this.serverWatchdog = getAsBooleanOrDefault("server-watchdog", serverWatchdog); - this.timeAcceleration = getAsBooleanOrDefault("time-acceleration", timeAcceleration); - this.bowAcceleration = getAsBooleanOrDefault("bow-acceleration", bowAcceleration); - this.crossbowAcceleration = getAsBooleanOrDefault("crossbow-acceleration", crossbowAcceleration); - this.randomTickSpeedAcceleration = getAsBooleanOrDefault("random-tickspeed-acceleration", randomTickSpeedAcceleration); - this.tntAcceleration = getAsBooleanOrDefault("tnt-acceleration", tntAcceleration); - this.vanillaLagback = getAsBooleanOrDefault("vanilla-lagback", vanillaLagback); - - this.automaticUpdater = getAsBooleanOrDefault("automatic-updater", automaticUpdater); - } - - public void enabled(boolean enabled) { - put("enabled", enabled); - } - - public boolean enabled() { - return enabled; - } - - public void serverWatchdog(boolean enabled) { - put("server-watchdog", enabled); - } - - public boolean serverWatchdog() { - return serverWatchdog; - } - - public void blockEntityAcceleration(boolean enabled) { - put("block-entity-acceleration", enabled); - } - - public boolean blockEntityAcceleration() { - return blockEntityAcceleration; - } - - public void blockBreakingAcceleration(boolean enabled) { - put("block-breaking-acceleration", enabled); - } - - public boolean blockBreakingAcceleration() { - return blockBreakingAcceleration; - } - - public void potionEffectAcceleration(boolean enabled) { - put("potion-effect-acceleration", enabled); - } - - public boolean potionEffectAcceleration() { - return potionEffectAcceleration; - } - - public void fluidAcceleration(boolean enabled) { - put("fluid-acceleration", enabled); - } - - public boolean fluidAcceleration() { - return fluidAcceleration; - } - - public void pickupAcceleration(boolean enabled) { - put("pickup-acceleration", enabled); - } - - public boolean pickupAcceleration() { - return pickupAcceleration; - } - - public void eatingAcceleration(boolean enabled) { - put("eating-acceleration", enabled); - } - - public boolean eatingAcceleration() { - return eatingAcceleration; - } - - public void portalAcceleration(boolean enabled) { - put("portal-acceleration", enabled); - } - - public boolean portalAcceleration() { - return portalAcceleration; - } - - public void sleepingAcceleration(boolean enabled) { - put("sleeping-acceleration", enabled); - } - - public boolean sleepingAcceleration() { - return sleepingAcceleration; - } - - public void automaticUpdater(boolean enabled) { - put("automatic-updater", enabled); - } - - public boolean automaticUpdater() { - return automaticUpdater; - } - - public void singlePlayerWarning(boolean enabled) { - put("singleplayer-warning", enabled); - } - - public boolean timeAcceleration() { - return timeAcceleration; - } - - public void timeAcceleration(boolean enabled) { - put("time-acceleration", enabled); - } - - public boolean bowAcceleration() { - return bowAcceleration; - } - - public void bowAcceleration(boolean enabled) { - put("bow-acceleration", enabled); - } - - public boolean crossbowAcceleration() { - return crossbowAcceleration; - } - - public void crossbowAcceleration(boolean enabled) { - put("crossbow-acceleration", enabled); - } - - public boolean randomTickSpeedAcceleration() { - return randomTickSpeedAcceleration; - } - - public void tntAcceleration(boolean enabled) { - put("tnt-acceleration", enabled); - } - - public boolean tntAcceleration() { - return tntAcceleration; - } - - public void vanillaLagback(boolean enabled) { - put("vanilla-lagback", enabled); - } - - public boolean vanillaLagback() { - return vanillaLagback; - } - - public void randomTickSpeedAcceleration(boolean enabled) { - put("random-tickspeed-acceleration", enabled); - } -} diff --git a/src/main/java/net/snackbag/tt20/mixin/LivingEntityMixin.java b/src/main/java/net/snackbag/tt20/mixin/LivingEntityMixin.java index 4e1d3f4..1e7a86e 100644 --- a/src/main/java/net/snackbag/tt20/mixin/LivingEntityMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/LivingEntityMixin.java @@ -15,7 +15,7 @@ public abstract class LivingEntityMixin { @Inject(method = "baseTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;tickEffects()V")) private void fixPotionDelayTick(CallbackInfo ci) { - if (!TT20.config.enabled() || !TT20.config.potionEffectAcceleration()) return; + if (!TT20.config.enabled.get() || !TT20.config.potionEffect.get()) return; //? if >=1.20.1 { if (((Entity)(Object)this).level().isClientSide()) return; //?} else { diff --git a/src/main/java/net/snackbag/tt20/mixin/PlayerMixin.java b/src/main/java/net/snackbag/tt20/mixin/PlayerMixin.java index f894253..486e611 100644 --- a/src/main/java/net/snackbag/tt20/mixin/PlayerMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/PlayerMixin.java @@ -15,7 +15,7 @@ public abstract class PlayerMixin { //? if <=1.20.5 { /*@ModifyReturnValue(method = "getPortalWaitTime", at = @At("RETURN")) private int netherPortalTimeTT20(int original) { - if (!TT20.config.enabled() || !TT20.config.portalAcceleration()) return original; + if (!TT20.config.enabled.get() || !TT20.config.portal.get()) return original; //? if >1.19.2 { if (((Entity)(Object)this).level().isClientSide()) return original; //?} else { @@ -31,7 +31,7 @@ private int netherPortalTimeTT20(int original) { private int tickTT20(int original) { Player player = (Player)(Object)this; - if (!TT20.config.enabled() || !TT20.config.sleepingAcceleration()) return original; + if (!TT20.config.enabled.get() || !TT20.config.sleeping.get()) return original; //? if >=1.20.1 { if (((Entity)(Object)this).level().isClientSide()) return original; //?} else { diff --git a/src/main/java/net/snackbag/tt20/mixin/PortalProcessorMixin.java b/src/main/java/net/snackbag/tt20/mixin/PortalProcessorMixin.java index ae7150f..d4f6873 100644 --- a/src/main/java/net/snackbag/tt20/mixin/PortalProcessorMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/PortalProcessorMixin.java @@ -18,7 +18,7 @@ public abstract class PortalProcessorMixin { @ModifyExpressionValue(method = "processPortalTeleportation", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/PortalProcessor;portalTime:I", opcode = Opcodes.GETFIELD)) private int runMissedTicks(int original, @Local ServerLevel world) { - if (!TT20.config.enabled() || !TT20.config.portalAcceleration()) return original; + if (!TT20.config.enabled.get() || !TT20.config.portal.get()) return original; if (world.isClientSide()) return original; portalTime = portalTime + TT20.TPS_CALCULATOR.applicableMissedTicks(); @@ -43,7 +43,7 @@ public abstract class PortalProcessorMixin { @ModifyExpressionValue(method = "processPortalTeleportation", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/PortalProcessor;portalTime:I", opcode = Opcodes.GETFIELD)) private int runMissedTicks(int original, @Local ServerLevel level) { - if (!TT20.config.enabled() || !TT20.config.portalAcceleration()) return original; + if (!TT20.config.enabled.get() || !TT20.config.portal.get()) return original; if (level.isClientSide()) return original; portalTime = portalTime + TT20.TPS_CALCULATOR.applicableMissedTicks(); diff --git a/src/main/java/net/snackbag/tt20/mixin/PrimedTntMixin.java b/src/main/java/net/snackbag/tt20/mixin/PrimedTntMixin.java index 2183723..6755249 100644 --- a/src/main/java/net/snackbag/tt20/mixin/PrimedTntMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/PrimedTntMixin.java @@ -15,6 +15,7 @@ public class PrimedTntMixin { ordinal = 0 ) private int modifyFuseDecrement(int original) { - return TT20.config.tntAcceleration() ? original + TT20.TPS_CALCULATOR.applicableMissedTicks() : original; + if (!TT20.config.enabled.get() || !TT20.config.tnt.get()) return original; + return original + TT20.TPS_CALCULATOR.applicableMissedTicks(); } } \ No newline at end of file diff --git a/src/main/java/net/snackbag/tt20/mixin/ServerGamePacketListenerImplMixin.java b/src/main/java/net/snackbag/tt20/mixin/ServerGamePacketListenerImplMixin.java index e0a4080..24442ac 100644 --- a/src/main/java/net/snackbag/tt20/mixin/ServerGamePacketListenerImplMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/ServerGamePacketListenerImplMixin.java @@ -20,6 +20,7 @@ public class ServerGamePacketListenerImplMixin { cancellable = true ) private void onMovedTooQuickly(ServerboundMovePlayerPacket packet, CallbackInfo ci) { - if (!TT20.config.vanillaLagback()) ci.cancel(); + if (!TT20.config.enabled.get() || TT20.config.lagback.get()) return; + ci.cancel(); } } \ No newline at end of file diff --git a/src/main/java/net/snackbag/tt20/mixin/ServerPlayerManagerMixin.java b/src/main/java/net/snackbag/tt20/mixin/ServerPlayerManagerMixin.java index 7e40c08..c8070f4 100644 --- a/src/main/java/net/snackbag/tt20/mixin/ServerPlayerManagerMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/ServerPlayerManagerMixin.java @@ -15,6 +15,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.concurrent.CompletableFuture; + import static net.snackbag.tt20.TT20.literal; import static net.snackbag.tt20.TT20.sendMessage; @@ -27,14 +29,23 @@ private void sendPlayerUpdateMessageIfCorrectPermissions(Connection connection, //?} else { /*private void sendPlayerUpdateMessageIfCorrectPermissions(Connection netManager, ServerPlayer player, CallbackInfo ci) { *///?} - if (!TT20.config.automaticUpdater() || !ModUpdater.hasUpdate) return; //? if >=1.21.9 { if (((ServerPlayerAccessor) player).getServer().getPlayerList().isOp(player.nameAndId())) { //?} else { /*if (player.getServer().getPlayerList().isOp(player.getGameProfile())) { *///?} - sendMessage(player, literal(ModUpdater.updateMessage)); - sendMessage(player, literal("§oOnly operators can see this message")); + CompletableFuture.runAsync(() -> { + try { + ModUpdater.check(); + if (!ModUpdater.hasUpdate) return; + + sendMessage(player, literal(ModUpdater.updateMessage)); + sendMessage(player, literal("§oOnly operators can see this message")); + } catch (RuntimeException e) { + TT20.LOGGER.error("Failed to check for updates."); + e.printStackTrace(); + } + }); } } } diff --git a/src/main/java/net/snackbag/tt20/mixin/ServerWatchdogMixin.java b/src/main/java/net/snackbag/tt20/mixin/ServerWatchdogMixin.java index 1ad9010..4635bc7 100644 --- a/src/main/java/net/snackbag/tt20/mixin/ServerWatchdogMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/ServerWatchdogMixin.java @@ -19,6 +19,7 @@ public class ServerWatchdogMixin { *///?} ) private long disableWatchdog(long original) { - return TT20.config.serverWatchdog() ? original : 0; + if (!TT20.config.enabled.get() || TT20.config.watchdog.get()) return original; + return 0; } } \ No newline at end of file diff --git a/src/main/java/net/snackbag/tt20/mixin/fluid/LavaFluidMixin.java b/src/main/java/net/snackbag/tt20/mixin/fluid/LavaFluidMixin.java index 48079ca..7f020ed 100644 --- a/src/main/java/net/snackbag/tt20/mixin/fluid/LavaFluidMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/fluid/LavaFluidMixin.java @@ -11,7 +11,7 @@ public abstract class LavaFluidMixin { @ModifyReturnValue(method = "getTickDelay", at = @At("RETURN")) private int tickRateTT20(int original) { - if (!TT20.config.enabled() || !TT20.config.fluidAcceleration()) return original; + if (!TT20.config.enabled.get() || !TT20.config.fluid.get()) return original; return TPSUtil.tt20(original, true); } } diff --git a/src/main/java/net/snackbag/tt20/mixin/fluid/WaterFluidMixin.java b/src/main/java/net/snackbag/tt20/mixin/fluid/WaterFluidMixin.java index ca57b77..d8b3690 100644 --- a/src/main/java/net/snackbag/tt20/mixin/fluid/WaterFluidMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/fluid/WaterFluidMixin.java @@ -11,7 +11,7 @@ public abstract class WaterFluidMixin { @ModifyReturnValue(method = "getTickDelay", at = @At("RETURN")) private int tickRateTT20(int original) { - if (!TT20.config.enabled() || !TT20.config.fluidAcceleration()) return original; + if (!TT20.config.enabled.get() || !TT20.config.fluid.get()) return original; return TPSUtil.tt20(original, true); } } diff --git a/src/main/java/net/snackbag/tt20/mixin/item/BowItemMixin.java b/src/main/java/net/snackbag/tt20/mixin/item/BowItemMixin.java index 2e3a532..82f9c92 100644 --- a/src/main/java/net/snackbag/tt20/mixin/item/BowItemMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/item/BowItemMixin.java @@ -11,7 +11,7 @@ public class BowItemMixin { @ModifyReturnValue(method = "getPowerForTime", at = @At("RETURN")) private static float bowProgress(float original) { - if (!TT20.config.enabled() || !TT20.config.bowAcceleration()) return original; + if (!TT20.config.enabled.get() || !TT20.config.bow.get()) return original; return original * TPSCalculator.MAX_TPS / (float) TT20.TPS_CALCULATOR.getMostAccurateTPS(); } diff --git a/src/main/java/net/snackbag/tt20/mixin/item/CrossbowItemMixin.java b/src/main/java/net/snackbag/tt20/mixin/item/CrossbowItemMixin.java index b5832e6..425cf9b 100644 --- a/src/main/java/net/snackbag/tt20/mixin/item/CrossbowItemMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/item/CrossbowItemMixin.java @@ -11,7 +11,7 @@ public class CrossbowItemMixin { @ModifyReturnValue(method = "getPowerForTime", at = @At("RETURN")) private static float crossbowProgress(float original) { - if (!TT20.config.enabled() || !TT20.config.crossbowAcceleration()) return original; + if (!TT20.config.enabled.get() || !TT20.config.crossbow.get()) return original; return original * TPSCalculator.MAX_TPS / (float) TT20.TPS_CALCULATOR.getMostAccurateTPS(); } diff --git a/src/main/java/net/snackbag/tt20/mixin/item/ItemEntityMixin.java b/src/main/java/net/snackbag/tt20/mixin/item/ItemEntityMixin.java index 07e2db9..bb0c158 100644 --- a/src/main/java/net/snackbag/tt20/mixin/item/ItemEntityMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/item/ItemEntityMixin.java @@ -15,7 +15,7 @@ public abstract class ItemEntityMixin { @Inject(method = "tick", at = @At("HEAD")) private void pickupDelayTT20(CallbackInfo ci) { - if (!TT20.config.enabled() || !TT20.config.pickupAcceleration()) return; + if (!TT20.config.enabled.get() || !TT20.config.pickup.get()) return; //? if >=1.20.1 { if (((Entity)(Object)this).level().isClientSide()) return; //?} else { diff --git a/src/main/java/net/snackbag/tt20/mixin/item/ItemMixin.java b/src/main/java/net/snackbag/tt20/mixin/item/ItemMixin.java index 284adae..d15747f 100644 --- a/src/main/java/net/snackbag/tt20/mixin/item/ItemMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/item/ItemMixin.java @@ -11,7 +11,7 @@ public abstract class ItemMixin { @ModifyReturnValue(method = "getUseDuration", at = @At(value = "RETURN", ordinal = 0)) private int onGetMaxUseTime(int original) { - if (!TT20.config.enabled() || !TT20.config.eatingAcceleration() || original == 0) return original; + if (!TT20.config.enabled.get() || !TT20.config.eating.get() || original == 0) return original; return TPSUtil.tt20(original, true); } } diff --git a/src/main/java/net/snackbag/tt20/mixin/world/BlockBehaviourMixin.java b/src/main/java/net/snackbag/tt20/mixin/world/BlockBehaviourMixin.java index 8424026..fe287a9 100644 --- a/src/main/java/net/snackbag/tt20/mixin/world/BlockBehaviourMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/world/BlockBehaviourMixin.java @@ -13,7 +13,7 @@ public abstract class BlockBehaviourMixin { @ModifyReturnValue(method = "getDestroyProgress", at = @At("RETURN")) private float onBlockBreakingCalc(float original, @Local(argsOnly = true) Player player) { - if (!TT20.config.enabled() || !TT20.config.blockBreakingAcceleration()) return original; + if (!TT20.config.enabled.get() || !TT20.config.blockBreaking.get()) return original; //? if >=1.20.1 { if (player.level().isClientSide()) return original; //?} else { diff --git a/src/main/java/net/snackbag/tt20/mixin/world/GameRulesMixin.java b/src/main/java/net/snackbag/tt20/mixin/world/GameRulesMixin.java index e33a83d..71c955b 100644 --- a/src/main/java/net/snackbag/tt20/mixin/world/GameRulesMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/world/GameRulesMixin.java @@ -22,7 +22,7 @@ private Object randomTickSpeedAcceleration(Object original, @Local(argsOnly = tr /*@ModifyReturnValue(method = "getInt", at = @At("RETURN")) private int randomTickSpeedAcceleration(int original, @Local(argsOnly = true) GameRules.Key key) { *///?} - if (!TT20.config.enabled() || !TT20.config.randomTickSpeedAcceleration()) return original; + if (!TT20.config.enabled.get() || !TT20.config.randomTickSpeed.get()) return original; //? if (>=1.21.11) { if (gameRule != GameRules.RANDOM_TICK_SPEED) return original; diff --git a/src/main/java/net/snackbag/tt20/mixin/world/LevelChunkMixin.java b/src/main/java/net/snackbag/tt20/mixin/world/LevelChunkMixin.java index cba32c7..f1e3b88 100644 --- a/src/main/java/net/snackbag/tt20/mixin/world/LevelChunkMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/world/LevelChunkMixin.java @@ -30,17 +30,16 @@ private void onTick( Operation original ) { original.call(instance, world, blockPos, blockState, blockEntity); - if (!TT20.config.enabled()) return; - if (!TT20.config.blockEntityAcceleration()) return; + if (!TT20.config.enabled.get() || !TT20.config.blockEntity.get()) return; if (world.isClientSide()) return; //? if >=1.21.2 { Registry registry = world.registryAccess().lookupOrThrow(Registries.BLOCK); - if (!TT20.blockEntityMaskConfig.getMask().isOkay(registry.getKey(blockState.getBlock()))) return; + if (!TT20.config.blockEntityMask.get().isOkay(registry.getKey(blockState.getBlock()))) return; //?} else if >=1.20.1 { /*Registry registry = world.registryAccess().registryOrThrow(Registries.BLOCK); - if (!TT20.blockEntityMaskConfig.getMask().isOkay(registry.getKey(blockState.getBlock()))) return; + if (!TT20.config.blockEntityMask.get().isOkay(registry.getKey(blockState.getBlock()))) return; *///?} else { - /*if (!TT20.blockEntityMaskConfig.getMask().isOkay(Registry.BLOCK.getKey(blockState.getBlock()))) return; + /*if (!TT20.config.blockEntityMask.get().isOkay(Registry.BLOCK.getKey(blockState.getBlock()))) return; *///?} for (int i = 0; i < TT20.TPS_CALCULATOR.applicableMissedTicks(); i++) { diff --git a/src/main/java/net/snackbag/tt20/mixin/world/ServerLevelMixin.java b/src/main/java/net/snackbag/tt20/mixin/world/ServerLevelMixin.java index a2c474d..1b7e00f 100644 --- a/src/main/java/net/snackbag/tt20/mixin/world/ServerLevelMixin.java +++ b/src/main/java/net/snackbag/tt20/mixin/world/ServerLevelMixin.java @@ -16,7 +16,7 @@ public abstract class ServerLevelMixin { /*@Inject(method = "tickTime", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerLevel;setDayTime(J)V")) *///?} private void applyMissedTicks(CallbackInfo ci) { - if (!TT20.config.enabled() || !TT20.config.timeAcceleration()) return; + if (!TT20.config.enabled.get() || !TT20.config.time.get()) return; ServerLevel self = (ServerLevel) (Object) this; diff --git a/src/main/java/net/snackbag/tt20/util/Mask.java b/src/main/java/net/snackbag/tt20/util/Mask.java deleted file mode 100644 index 476c6fc..0000000 --- a/src/main/java/net/snackbag/tt20/util/Mask.java +++ /dev/null @@ -1,107 +0,0 @@ -package net.snackbag.tt20.util; - -import com.google.gson.JsonElement; -import net.minecraft.core.Registry; -//? if >=1.21.11 { -import net.minecraft.resources.Identifier; -//?} else { -/*import net.minecraft.resources.ResourceLocation; -*///?} -import net.snackbag.tt20.TT20; -import net.snackbag.tt20.config.JSONConfiguration; - -import java.util.*; - -public class Mask { - private final JSONConfiguration file; - private final MaskType maskType; - private final Registry registry; - private final RegistryIndex index; - //? if >=1.21.11 { - private final Set entries; - //?} else { - /*private final Set entries; - *///?} - - public Mask(Registry registry, JSONConfiguration file, String maskKey) { - this.file = file; - this.maskType = MaskType.fromString(file.getAsString("type")); - this.registry = registry; - this.index = RegistryIndex.getIndex(this.registry); - this.entries = new HashSet<>(); - - for (JsonElement element : file.getAsArray(maskKey)) { - if (!(element.isJsonPrimitive() && element.getAsJsonPrimitive().isString())) { - TT20.LOGGER.error("(TT20) Mask element '" + element + "' isn't a string"); - return; - } - - entries.addAll(manageEntry(element.getAsString())); - } - } - - @SuppressWarnings("ConstantConditions") - //? if >=1.21.11 { - public List manageEntry(String entry) { - //?} else { - /*public List manageEntry(String entry) { - *///?} - String[] split = entry.split(":"); - - if (split.length != 2) { - TT20.LOGGER.error("(TT20) '" + entry + "' is not a valid identifier. Correct format is :"); - return new ArrayList<>(); - } - - // if *:* - if (split[0].equals("*") && split[1].equals("*")) { - return index.getResourceLocations(); - } - - // if : - if (!split[0].equals("*") && !split[1].equals("*")) { - return List.of(TT20.id(split[0], split[1])); - } - - // if *: - if (split[0].equals("*") && !split[1].equals("*")) { - return index.getPathIndex().getOrDefault(split[1], new ArrayList<>()); - } - - - // if :* - if (!split[0].equals("*") && split[1].equals("*")) { - return index.getNamespaceIndex().getOrDefault(split[0], new ArrayList<>()); - } - - return null; - } - - public Registry getRegistry() { - return registry; - } - - public JSONConfiguration getFile() { - return file; - } - - //? if >=1.21.11 { - public boolean matches(Identifier identifier) { - //?} else { - /*public boolean matches(ResourceLocation identifier) { - *///?} - return entries.contains(identifier); - } - - //? if >=1.21.11 { - public boolean isOkay(Identifier identifier) { - //?} else { - /*public boolean isOkay(ResourceLocation identifier) { - *///?} - if (maskType == MaskType.WHITELIST) { - return entries.contains(identifier); - } else { - return !entries.contains(identifier); - } - } -} diff --git a/src/main/java/net/snackbag/tt20/util/MaskType.java b/src/main/java/net/snackbag/tt20/util/MaskType.java deleted file mode 100644 index ea87fe8..0000000 --- a/src/main/java/net/snackbag/tt20/util/MaskType.java +++ /dev/null @@ -1,14 +0,0 @@ -package net.snackbag.tt20.util; - -public enum MaskType { - WHITELIST, - BLACKLIST; - - public static MaskType fromString(String input) { - return switch (input.toLowerCase()) { - case "whitelist" -> WHITELIST; - case "blacklist" -> BLACKLIST; - default -> throw new IllegalArgumentException("'" + input + "' is not a valid mask type"); - }; - } -} diff --git a/src/main/java/net/snackbag/tt20/util/RegistryIndex.java b/src/main/java/net/snackbag/tt20/util/RegistryIndex.java deleted file mode 100644 index db9ae7e..0000000 --- a/src/main/java/net/snackbag/tt20/util/RegistryIndex.java +++ /dev/null @@ -1,114 +0,0 @@ -package net.snackbag.tt20.util; - -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -//? if >=1.21.11 { -import net.minecraft.resources.Identifier; -//?} else { -/*import net.minecraft.resources.ResourceLocation; -*///?} - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class RegistryIndex { - private static final HashMap, RegistryIndex> indexes = new HashMap<>(); - - private final Registry registry; - private final List namespaces; - private final List paths; - //? if >=1.21.11 { - private final List identifiers; - private final HashMap> namespaceIndex; - private final HashMap> pathIndex; - //?} else { - /*private final List identifiers; - private final HashMap> namespaceIndex; - private final HashMap> pathIndex; - *///?} - - private RegistryIndex(Registry registry) { - this.registry = registry; - - this.identifiers = new ArrayList<>(); - this.namespaces = new ArrayList<>(); - this.paths = new ArrayList<>(); - this.namespaceIndex = new HashMap<>(); - this.pathIndex = new HashMap<>(); - - //? if >1.18.2 { - for (ResourceKey key : registry.registryKeySet()) { - //?} else { - /*for (ResourceLocation identifier : registry.keySet()) { - *///?} - //? if >=1.21.11 { - Identifier identifier = key.identifier(); - //?} else if >1.18.2 { - /*ResourceLocation identifier = key.location(); - *///?} - - String namespace = identifier.getNamespace(); - String path = identifier.getPath(); - - if (!namespaces.contains(namespace)) { - namespaces.add(namespace); - namespaceIndex.put(namespace, new ArrayList<>()); - } - - if (!paths.contains(path)) { - paths.add(path); - pathIndex.put(path, new ArrayList<>()); - } - - this.identifiers.add(identifier); - namespaceIndex.get(namespace).add(identifier); - pathIndex.get(path).add(identifier); - } - } - - public Registry getRegistry() { - return registry; - } - - //? if >=1.21.11 { - public List getResourceLocations() { - //?} else { - /*public List getResourceLocations() { - *///?} - return identifiers; - } - - //? if >=1.21.11 { - public HashMap> getNamespaceIndex() { - //?} else { - /*public HashMap> getNamespaceIndex() { - *///?} - return new HashMap<>(namespaceIndex); - } - - //? if >=1.21.11 { - public HashMap> getPathIndex() { - //?} else { - /*public HashMap> getPathIndex() { - *///?} - return new HashMap<>(pathIndex); - } - - public List getNamespaces() { - return new ArrayList<>(namespaces); - } - - public List getPaths() { - return new ArrayList<>(paths); - } - - public static RegistryIndex getIndex(Registry registry) { - if (indexes.containsKey(registry)) { - return indexes.get(registry); - } - - indexes.put(registry, new RegistryIndex(registry)); - return indexes.get(registry); - } -} diff --git a/versions/fabric-1.19.2/gradle.properties b/versions/fabric-1.19.2/gradle.properties index 3276d74..a543640 100644 --- a/versions/fabric-1.19.2/gradle.properties +++ b/versions/fabric-1.19.2/gradle.properties @@ -9,3 +9,4 @@ minecraft_dependency= >=1.19 <=1.19.2 # Dependencies modmenu_version=4.2.0-beta.2 +fern_version=1.3.0+mc1.19.2-fabric \ No newline at end of file diff --git a/versions/fabric-1.20.1/gradle.properties b/versions/fabric-1.20.1/gradle.properties index f64d14b..646e640 100644 --- a/versions/fabric-1.20.1/gradle.properties +++ b/versions/fabric-1.20.1/gradle.properties @@ -9,3 +9,4 @@ minecraft_dependency= >=1.20 <1.20.5 # Dependencies modmenu_version=7.2.2 +fern_version=1.3.0+mc1.20.1-fabric diff --git a/versions/fabric-1.20.5/gradle.properties b/versions/fabric-1.20.5/gradle.properties index 0b086e5..c9bd9bf 100644 --- a/versions/fabric-1.20.5/gradle.properties +++ b/versions/fabric-1.20.5/gradle.properties @@ -9,4 +9,5 @@ minecraft_dependency= >=1.20.5 <=1.20.6 # Dependencies modmenu_version=10.0.0 -fabric_api_version=0.97.8+1.20.5 \ No newline at end of file +fabric_api_version=0.97.8+1.20.5 +fern_version=1.3.0+mc1.20.5-fabric \ No newline at end of file diff --git a/versions/fabric-1.21.1/gradle.properties b/versions/fabric-1.21.1/gradle.properties index 22f5bbb..ad01bdf 100644 --- a/versions/fabric-1.21.1/gradle.properties +++ b/versions/fabric-1.21.1/gradle.properties @@ -9,4 +9,5 @@ minecraft_dependency= >=1.21 <=1.21.1 # Dependencies modmenu_version=11.0.4 -fabric_api_version=0.116.10+1.21.1 \ No newline at end of file +fabric_api_version=0.116.10+1.21.1 +fern_version=1.3.0+mc1.21.1-fabric \ No newline at end of file diff --git a/versions/fabric-1.21.11/gradle.properties b/versions/fabric-1.21.11/gradle.properties index 740076e..173c75f 100644 --- a/versions/fabric-1.21.11/gradle.properties +++ b/versions/fabric-1.21.11/gradle.properties @@ -9,4 +9,5 @@ minecraft_dependency= =1.21.11 # Dependencies modmenu_version=17.0.0 -fabric_api_version=0.141.3+1.21.11 \ No newline at end of file +fabric_api_version=0.141.3+1.21.11 +fern_version=1.3.0+mc1.21.11-fabric \ No newline at end of file diff --git a/versions/fabric-1.21.2/gradle.properties b/versions/fabric-1.21.2/gradle.properties index 8c5f442..6fad6f7 100644 --- a/versions/fabric-1.21.2/gradle.properties +++ b/versions/fabric-1.21.2/gradle.properties @@ -9,4 +9,5 @@ minecraft_dependency= >=1.21.2 <=1.21.8 # Dependencies modmenu_version=12.0.0 -fabric_api_version=0.106.1+1.21.2 \ No newline at end of file +fabric_api_version=0.106.1+1.21.2 +fern_version=1.3.0+mc1.21.2-fabric \ No newline at end of file diff --git a/versions/fabric-1.21.9/gradle.properties b/versions/fabric-1.21.9/gradle.properties index 4e15410..423ae6e 100644 --- a/versions/fabric-1.21.9/gradle.properties +++ b/versions/fabric-1.21.9/gradle.properties @@ -9,4 +9,5 @@ minecraft_dependency= >=1.21.9 <=1.21.10 # Dependencies modmenu_version=16.0.1 -fabric_api_version=0.134.1+1.21.9 \ No newline at end of file +fabric_api_version=0.134.1+1.21.9 +fern_version=1.3.0+mc1.21.9-fabric \ No newline at end of file diff --git a/versions/fabric-26.1.1/gradle.properties b/versions/fabric-26.1.1/gradle.properties index 2072e19..f123ad1 100644 --- a/versions/fabric-26.1.1/gradle.properties +++ b/versions/fabric-26.1.1/gradle.properties @@ -9,4 +9,5 @@ minecraft_dependency= >=26.1 <26.3 # Dependencies modmenu_version=18.0.0-alpha.8 -fabric_api_version=0.145.4+26.1.1 \ No newline at end of file +fabric_api_version=0.145.4+26.1.1 +fern_version=1.3.0+mc26.1.1-fabric \ No newline at end of file diff --git a/versions/forge-1.18.2/gradle.properties b/versions/forge-1.18.2/gradle.properties index 6218d7e..c57dc8f 100644 --- a/versions/forge-1.18.2/gradle.properties +++ b/versions/forge-1.18.2/gradle.properties @@ -8,3 +8,4 @@ forge_version=40.3.12 minecraft_dependency=[1.18, 1.18.2] # Dependencies +fern_version=1.3.0+mc1.18.2-forge \ No newline at end of file diff --git a/versions/forge-1.19.2/gradle.properties b/versions/forge-1.19.2/gradle.properties index 60c3bae..d7e3058 100644 --- a/versions/forge-1.19.2/gradle.properties +++ b/versions/forge-1.19.2/gradle.properties @@ -8,3 +8,4 @@ forge_version=43.5.2 minecraft_dependency=[1.19, 1.19.2] # Dependencies +fern_version=1.3.0+mc1.19.2-forge \ No newline at end of file diff --git a/versions/forge-1.20.1/gradle.properties b/versions/forge-1.20.1/gradle.properties index 781783f..be8177d 100644 --- a/versions/forge-1.20.1/gradle.properties +++ b/versions/forge-1.20.1/gradle.properties @@ -8,3 +8,4 @@ forge_version=47.4.18 minecraft_dependency=[1.20.1, 1.20.4] # Dependencies +fern_version=1.3.0+mc1.20.1-forge \ No newline at end of file diff --git a/versions/neoforge-1.20.3/gradle.properties b/versions/neoforge-1.20.3/gradle.properties index 9e81bf6..143387b 100644 --- a/versions/neoforge-1.20.3/gradle.properties +++ b/versions/neoforge-1.20.3/gradle.properties @@ -9,3 +9,4 @@ neoforge_version=20.3.8-beta minecraft_dependency=[1.20.3, 1.20.4] # Dependencies +fern_version=1.3.0+mc1.20.3-neoforge \ No newline at end of file diff --git a/versions/neoforge-1.20.5/gradle.properties b/versions/neoforge-1.20.5/gradle.properties index da808e6..8998492 100644 --- a/versions/neoforge-1.20.5/gradle.properties +++ b/versions/neoforge-1.20.5/gradle.properties @@ -9,3 +9,4 @@ neoforge_version=20.5.21-beta minecraft_dependency=[1.20.5, 1.20.6] # Dependencies +fern_version=1.3.0+mc1.20.5-neoforge \ No newline at end of file diff --git a/versions/neoforge-1.21.1/gradle.properties b/versions/neoforge-1.21.1/gradle.properties index 764cf19..e6294ad 100644 --- a/versions/neoforge-1.21.1/gradle.properties +++ b/versions/neoforge-1.21.1/gradle.properties @@ -9,3 +9,4 @@ neoforge_version=21.1.224 minecraft_dependency=[1.21, 1.21.1] # Dependencies +fern_version=1.3.0+mc1.21.1-neoforge \ No newline at end of file diff --git a/versions/neoforge-1.21.11/gradle.properties b/versions/neoforge-1.21.11/gradle.properties index 305ece5..abb840a 100644 --- a/versions/neoforge-1.21.11/gradle.properties +++ b/versions/neoforge-1.21.11/gradle.properties @@ -9,3 +9,4 @@ neoforge_version=21.11.42 minecraft_dependency=[1.21.11] # Dependencies +fern_version=1.3.0+mc1.21.11-neoforge \ No newline at end of file diff --git a/versions/neoforge-1.21.2/gradle.properties b/versions/neoforge-1.21.2/gradle.properties index 3457374..84e7abe 100644 --- a/versions/neoforge-1.21.2/gradle.properties +++ b/versions/neoforge-1.21.2/gradle.properties @@ -9,3 +9,4 @@ neoforge_version=21.2.1-beta minecraft_dependency=[1.21.2, 1.21.8] # Dependencies +fern_version=1.3.0+mc1.21.2-neoforge \ No newline at end of file diff --git a/versions/neoforge-1.21.9/gradle.properties b/versions/neoforge-1.21.9/gradle.properties index 7214875..abd37d7 100644 --- a/versions/neoforge-1.21.9/gradle.properties +++ b/versions/neoforge-1.21.9/gradle.properties @@ -9,3 +9,4 @@ neoforge_version=21.9.16-beta minecraft_dependency=[1.21.9, 1.21.10] # Dependencies +fern_version=1.3.0+mc1.21.9-neoforge \ No newline at end of file diff --git a/versions/neoforge-26.1.1/gradle.properties b/versions/neoforge-26.1.1/gradle.properties index c0b776e..b5920f2 100644 --- a/versions/neoforge-26.1.1/gradle.properties +++ b/versions/neoforge-26.1.1/gradle.properties @@ -9,3 +9,4 @@ neoforge_version=26.1.1.10-beta minecraft_dependency=[26.1, 26.3) # Dependencies +fern_version=1.3.0+mc26.1.1-neoforge \ No newline at end of file