From e290359c166a96139f7e901092b78f38e748099b Mon Sep 17 00:00:00 2001 From: melontini <104443436+melontini@users.noreply.github.com> Date: Tue, 13 Feb 2024 18:24:17 +0700 Subject: [PATCH 1/8] Switch Crystal data to records and codecs, fix null pointer. --- .../andromeda/base/ModuleManager.java | 2 +- .../dragon_fight/EnderDragonManager.java | 78 +++++++++---------- .../modules/mechanics/dragon_fight/Main.java | 15 +++- 3 files changed, 50 insertions(+), 45 deletions(-) diff --git a/src/main/java/me/melontini/andromeda/base/ModuleManager.java b/src/main/java/me/melontini/andromeda/base/ModuleManager.java index d6cdc022..25bfb8c4 100644 --- a/src/main/java/me/melontini/andromeda/base/ModuleManager.java +++ b/src/main/java/me/melontini/andromeda/base/ModuleManager.java @@ -272,7 +272,7 @@ public class ModuleManager { } /** - * Quickly returns a module of the given class. Useful for mixins and registration. + * Quickly returns a module of the given class. Useful for mixins and registration. Must never be used in non-mixin static fields and class initializers. *

This will throw an {@link IllegalStateException} if the module is not loaded.

* @param cls the module class. * @return the module instance. diff --git a/src/main/java/me/melontini/andromeda/modules/mechanics/dragon_fight/EnderDragonManager.java b/src/main/java/me/melontini/andromeda/modules/mechanics/dragon_fight/EnderDragonManager.java index bd67e264..c0ebca8d 100644 --- a/src/main/java/me/melontini/andromeda/modules/mechanics/dragon_fight/EnderDragonManager.java +++ b/src/main/java/me/melontini/andromeda/modules/mechanics/dragon_fight/EnderDragonManager.java @@ -1,14 +1,13 @@ package me.melontini.andromeda.modules.mechanics.dragon_fight; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import lombok.Getter; -import me.melontini.andromeda.common.util.MiscUtil; -import me.melontini.andromeda.util.AndromedaLog; +import me.melontini.andromeda.base.ModuleManager; import me.melontini.dark_matter.api.base.util.MakeSure; import me.melontini.dark_matter.api.minecraft.world.PersistentStateHelper; import me.melontini.dark_matter.api.minecraft.world.interfaces.DeserializableState; import me.melontini.dark_matter.api.minecraft.world.interfaces.TickableState; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents; import net.minecraft.entity.EntityType; import net.minecraft.entity.LightningEntity; import net.minecraft.entity.attribute.EntityAttributeInstance; @@ -17,30 +16,27 @@ import net.minecraft.entity.boss.dragon.EnderDragonEntity; import net.minecraft.entity.decoration.EndCrystalEntity; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtList; +import net.minecraft.nbt.NbtOps; import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; -import net.minecraft.util.Pair; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.world.PersistentState; -import net.minecraft.world.World; import org.apache.commons.lang3.mutable.MutableInt; +import java.util.ArrayList; import java.util.List; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; @Getter public class EnderDragonManager extends PersistentState implements DeserializableState, TickableState { - private static DragonFight MODULE; - public static final String ID = "andromeda_ender_dragon_fight"; + private final DragonFight module = ModuleManager.quick(DragonFight.class); + private final List crystals = new ArrayList<>(); private final ServerWorld world; - private final Set> list = ConcurrentHashMap.newKeySet(); private int maxPlayers = 1; public EnderDragonManager(ServerWorld world) { @@ -58,27 +54,26 @@ public class EnderDragonManager extends PersistentState implements Deserializabl int i = MathHelper.clamp(world.getPlayers().size(), 1, maxPlayers); if (i > maxPlayers) maxPlayers = i; - for (Pair pair : list) { - if (pair.getLeft().decrementAndGet() <= 0) { + for (Crystal pair : crystals) { + if (pair.timer().decrementAndGet() <= 0) { LightningEntity lightning = new LightningEntity(EntityType.LIGHTNING_BOLT, world); lightning.setCosmetic(true); - lightning.setPos(pair.getRight().x, pair.getRight().y, pair.getRight().z); + lightning.setPos(pair.pos().x, pair.pos().y, pair.pos().z); world.spawnEntity(lightning); - ParticleS2CPacket particleS2CPacket = new ParticleS2CPacket(ParticleTypes.END_ROD, true, pair.getRight().x, pair.getRight().y, pair.getRight().z, 0.5f, 0.5f, 0.5f, 0.5f, 100); + ParticleS2CPacket particleS2CPacket = new ParticleS2CPacket(ParticleTypes.END_ROD, true, pair.pos().x, pair.pos().y, pair.pos().z, 0.5f, 0.5f, 0.5f, 0.5f, 100); for (int j = 0; j < world.getPlayers().size(); ++j) { ServerPlayerEntity serverPlayerEntity = world.getPlayers().get(j); - world.sendToPlayerIfNearby(serverPlayerEntity, true, pair.getRight().x, pair.getRight().y, pair.getRight().z, particleS2CPacket); + world.sendToPlayerIfNearby(serverPlayerEntity, true, pair.pos().x, pair.pos().y, pair.pos().z, particleS2CPacket); } - EndCrystalEntity endCrystalEntity = new EndCrystalEntity(world, pair.getRight().x, pair.getRight().y, pair.getRight().z); + EndCrystalEntity endCrystalEntity = new EndCrystalEntity(world, pair.pos().x, pair.pos().y, pair.pos().z); world.spawnEntity(endCrystalEntity); - list.remove(pair); - AndromedaLog.devInfo("respawned crystal at [{}]", MiscUtil.vec3dAsString(pair.getRight())); + crystals.remove(pair); } } markDirty(); - if (MODULE.config().scaleHealthByMaxPlayers) { + if (module.config().scaleHealthByMaxPlayers) { for (EnderDragonEntity dragon : dragons) { EntityAttributeInstance inst = dragon.getAttributeInstance(EntityAttributes.GENERIC_MAX_HEALTH); MakeSure.notNull(inst, "Ender Dragon has no attributes?").setBaseValue(Math.floor((Math.sqrt(500 * i)) * 10)); @@ -90,47 +85,44 @@ public class EnderDragonManager extends PersistentState implements Deserializabl } public void queueRespawn(MutableInt mutableInt, Vec3d vec3d) { - list.add(new Pair<>(mutableInt, vec3d)); - AndromedaLog.devInfo("scheduled crystal at [{}] for respawn in {} ticks", MiscUtil.vec3dAsString(vec3d), mutableInt.getValue()); + var crystal = new Crystal(mutableInt, vec3d); + if (!crystals.contains(crystal)) crystals.add(crystal); } public void readNbt(NbtCompound tag) { - if (tag.contains("players")) { + if (tag.contains("crystals")) { NbtList listTag = tag.getList("crystals", 10); for (int i = 0; i < listTag.size(); i++) { NbtCompound crystal = listTag.getCompound(i); MutableInt mutableInt = new MutableInt(crystal.getInt("timer")); Vec3d vec3d = new Vec3d(crystal.getDouble("x"), crystal.getDouble("y"), crystal.getDouble("z")); - list.add(new Pair<>(mutableInt, vec3d)); + crystals.add(new Crystal(mutableInt, vec3d)); } } + + if (tag.contains("crystalData")) + crystals.addAll(Crystal.LIST_CODEC.parse(NbtOps.INSTANCE, tag.getCompound("crystalData")) + .getOrThrow(false, string -> { + throw new IllegalStateException(string); + })); if (tag.contains("players")) maxPlayers = tag.getInt("players"); } @Override public NbtCompound writeNbt(NbtCompound nbt) { - NbtList listTag = new NbtList(); - for (Pair pair : list) { - NbtCompound crystal = new NbtCompound(); - crystal.putInt("timer", pair.getLeft().getValue()); - crystal.putDouble("x", pair.getRight().x); - crystal.putDouble("y", pair.getRight().y); - crystal.putDouble("z", pair.getRight().z); - listTag.add(crystal); - } - if (!listTag.isEmpty()) nbt.put("crystals", listTag); + if (!crystals.isEmpty()) nbt.put("crystalData", Crystal.LIST_CODEC.encodeStart(NbtOps.INSTANCE, crystals) + .getOrThrow(false, string -> { + throw new IllegalStateException(string); + })); if (maxPlayers > 1) nbt.putInt("players", maxPlayers); return nbt; } - public static void init() { - ServerWorldEvents.LOAD.register((server, world) -> { - if (world.getRegistryKey() == World.END) EnderDragonManager.get(world); - }); - - ServerTickEvents.END_WORLD_TICK.register(world -> { - if (world.getRegistryKey() == World.END) PersistentStateHelper.consumeIfLoaded(world, EnderDragonManager.ID, - (world1, s) -> EnderDragonManager.get(world1), TickableState::tick); - }); + public record Crystal(MutableInt timer, Vec3d pos) { + public static final Codec CODEC = RecordCodecBuilder.create(data -> data.group( + Codec.INT.fieldOf("timer").xmap(MutableInt::new, MutableInt::getValue).forGetter(Crystal::timer), + Vec3d.CODEC.fieldOf("pos").forGetter(Crystal::pos) + ).apply(data, Crystal::new)); + public static final Codec> LIST_CODEC = CODEC.listOf(); } } \ No newline at end of file diff --git a/src/main/java/me/melontini/andromeda/modules/mechanics/dragon_fight/Main.java b/src/main/java/me/melontini/andromeda/modules/mechanics/dragon_fight/Main.java index 11e0786a..52d88a2a 100644 --- a/src/main/java/me/melontini/andromeda/modules/mechanics/dragon_fight/Main.java +++ b/src/main/java/me/melontini/andromeda/modules/mechanics/dragon_fight/Main.java @@ -1,7 +1,20 @@ package me.melontini.andromeda.modules.mechanics.dragon_fight; +import me.melontini.dark_matter.api.minecraft.world.PersistentStateHelper; +import me.melontini.dark_matter.api.minecraft.world.interfaces.TickableState; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents; +import net.minecraft.world.World; + public class Main { Main() { - EnderDragonManager.init(); + ServerWorldEvents.LOAD.register((server, world) -> { + if (world.getRegistryKey() == World.END) EnderDragonManager.get(world); + }); + + ServerTickEvents.END_WORLD_TICK.register(world -> { + if (world.getRegistryKey() == World.END) PersistentStateHelper.consumeIfLoaded(world, EnderDragonManager.ID, + (world1, s) -> EnderDragonManager.get(world1), TickableState::tick); + }); } } -- 2.51.2 From 6e8d8f587300b789a55a55830bfca56e1eb01749 Mon Sep 17 00:00:00 2001 From: melontini <104443436+melontini@users.noreply.github.com> Date: Tue, 13 Feb 2024 21:04:46 +0700 Subject: [PATCH 2/8] Clean up uploading again --- .../common/mixin/CrashReportMixin.java | 11 +- .../andromeda/util/CrashHandler.java | 141 +++++------------- .../util/exceptions/AndromedaException.java | 28 ++-- 3 files changed, 59 insertions(+), 121 deletions(-) diff --git a/src/main/java/me/melontini/andromeda/common/mixin/CrashReportMixin.java b/src/main/java/me/melontini/andromeda/common/mixin/CrashReportMixin.java index 405010dd..2c69c36b 100644 --- a/src/main/java/me/melontini/andromeda/common/mixin/CrashReportMixin.java +++ b/src/main/java/me/melontini/andromeda/common/mixin/CrashReportMixin.java @@ -1,6 +1,5 @@ package me.melontini.andromeda.common.mixin; -import com.google.gson.JsonObject; import me.melontini.andromeda.util.CrashHandler; import me.melontini.andromeda.util.exceptions.AndromedaException; import net.minecraft.util.crash.CrashReport; @@ -14,13 +13,9 @@ abstract class CrashReportMixin { @Inject(at = @At("TAIL"), method = "", require = 0) private void andromeda$init(String message, Throwable cause, CallbackInfo ci) { - if (CrashHandler.hasInstance(cause)) { - var sec = ((CrashReport) (Object) this).addElement("Andromeda Statuses"); - sec.trimStackTraceEnd(sec.getStackTrace().length); - - JsonObject statuses = CrashHandler.traverse(cause); - sec.add("statuses", "\n" + (statuses == null ? "Unavailable" : AndromedaException.toString(statuses))); - } + var sec = ((CrashReport) (Object) this).addElement("Andromeda Statuses"); + sec.trimStackTraceEnd(sec.getStackTrace().length); + sec.add("statuses", "\n" + AndromedaException.toString(CrashHandler.traverse(cause).orElseGet(AndromedaException::defaultStatuses))); CrashHandler.sanitizeTrace(cause); } diff --git a/src/main/java/me/melontini/andromeda/util/CrashHandler.java b/src/main/java/me/melontini/andromeda/util/CrashHandler.java index eadfa4f2..ca654894 100644 --- a/src/main/java/me/melontini/andromeda/util/CrashHandler.java +++ b/src/main/java/me/melontini/andromeda/util/CrashHandler.java @@ -4,16 +4,13 @@ import com.google.common.collect.Sets; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import me.melontini.andromeda.base.AndromedaConfig; -import me.melontini.andromeda.base.Bootstrap; import me.melontini.andromeda.util.exceptions.AndromedaException; import me.melontini.dark_matter.api.base.util.classes.Context; import me.melontini.dark_matter.api.crash_handler.Crashlytics; -import me.melontini.dark_matter.api.crash_handler.Prop; import me.melontini.dark_matter.api.crash_handler.uploading.Mixpanel; import me.melontini.dark_matter.api.crash_handler.uploading.Uploader; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.impl.util.StringUtil; -import net.minecraft.util.crash.CrashReport; import org.spongepowered.asm.mixin.extensibility.IMixinInfo; import java.io.IOException; @@ -24,39 +21,23 @@ import java.util.*; public class CrashHandler { private static final Mixpanel MIXPANEL = Mixpanel.get(new String(Base64.getDecoder().decode("NGQ3YWVhZGRjN2M5M2JkNzhiODRmNDViZWI3Y2NlOTE=")), true); + private static final Set IMPORTANT_MODS = Sets.newHashSet("andromeda", "minecraft", "fabric-api", "fabricloader", "connectormod", "forge"); - private static boolean findAndromedaInTrace(Throwable cause) { - if (cause instanceof AndromedaException e && e.shouldReport()) return true; - - for (StackTraceElement element : cause.getStackTrace()) { - if (element.isNativeMethod()) continue; - String cls = element.getClassName(); - if (cls.startsWith("me.melontini.andromeda.")) return true; - if (cls.startsWith("net.minecraft.")) { - String mthd = element.getMethodName(); - if ((mthd.contains("$andromeda$") || mthd.contains(".andromeda$"))) - return true; - } - } - return cause.getCause() != null && findAndromedaInTrace(cause.getCause()); - } - - public static boolean hasInstance(Throwable cause) { - if (cause instanceof AndromedaException) return true; - return cause.getCause() != null && hasInstance(cause.getCause()); + private static boolean shouldReportRecursive(Throwable cause) { + if (cause instanceof AndromedaException e && !e.shouldReport()) return false; + return cause.getCause() != null && shouldReportRecursive(cause.getCause()); } - public static JsonObject traverse(Throwable cause) { + public static Optional traverse(Throwable cause) { if (cause instanceof AndromedaException e) { JsonObject s = e.getStatuses(); - if (cause.getCause() != null) { - var r = traverse(cause.getCause()); - if (r != null) s.add("cause", r); + if (e.getCause() != null) { + traverse(e.getCause()).ifPresent(object -> s.add("cause", object)); } - return s; + return Optional.ofNullable(s); } if (cause.getCause() != null) return traverse(cause.getCause()); - return null; + return Optional.empty(); } private static final Set BAD_PREFIXES = Set.of( @@ -81,96 +62,48 @@ public class CrashHandler { return; } - if (context.get(IMixinInfo.class, Crashlytics.Keys.MIXIN_INFO).map(info -> info.getClassName().startsWith("me.melontini.andromeda")).orElse(false) || findAndromedaInTrace(cause)) { - AndromedaLog.warn("Found Andromeda in trace, collecting and uploading crash report..."); - - JsonObject object = new JsonObject(); - - sanitizeTrace(cause); + if (!context.get(IMixinInfo.class, Crashlytics.Keys.MIXIN_INFO).map(info -> info.getClassName().startsWith("me.melontini.andromeda")).orElse(false) && !shouldReportRecursive(cause)) + return; + AndromedaLog.warn("Found Andromeda in trace, collecting and uploading crash report..."); - String message = "Something terrible happened!"; - if (context.get(Object.class, Crashlytics.Keys.CRASH_REPORT).isPresent()) { - message = getFromCrashReport(context); - } - - //fill trace. - JsonArray stackTrace = new JsonArray(); - for (String string : getCauseAsString(cause, message).lines().flatMap(s -> StringUtil.wrapLines(s, 190).lines()).toList()) - stackTrace.add(string); - object.add("stackTrace", stackTrace); - - JsonObject statuses; - if (!hasInstance(cause)) { - statuses = new JsonObject(); - - MIXPANEL.attachProps(statuses, Prop.ENVIRONMENT, Prop.OS, Prop.JAVA_VERSION, Prop.JAVA_VENDOR); - statuses.addProperty("platform", CommonValues.platform().toString().toLowerCase()); - statuses.addProperty("bootstrap_status", Bootstrap.Status.get().toString()); - } else { - statuses = traverse(cause); - if (statuses == null) statuses = new JsonObject(); - } - object.add("statuses", statuses); + sanitizeTrace(cause); - JsonArray mods = new JsonArray(); - Set importantMods = Sets.newHashSet("andromeda", "minecraft", "fabric-api", "fabricloader", "connectormod", "forge"); + JsonObject object = new JsonObject(); + //fill trace. + JsonArray stackTrace = new JsonArray(); + for (String string : getCauseAsString(cause).lines().flatMap(s -> StringUtil.wrapLines(s, 190).lines()).toList()) + stackTrace.add(string); + object.add("stackTrace", stackTrace); - for (String importantMod : importantMods) { - FabricLoader.getInstance().getModContainer(importantMod).ifPresent(mod -> mods.add(importantMod + " (" + mod.getMetadata().getVersion().getFriendlyString() + ")")); - } - - object.add("mods", mods); + object.add("statuses", traverse(cause).orElseGet(AndromedaException::defaultStatuses)); - Runnable r = () -> MIXPANEL.upload(new Mixpanel.Context("Crash", object)).handle((unused, throwable) -> { - if (throwable != null) - System.err.printf("Failed to upload crash report! %s: %s%n", throwable.getClass().getSimpleName(), throwable.getMessage()); - return null; - }); + JsonArray mods = new JsonArray(); + for (String importantMod : IMPORTANT_MODS) { + FabricLoader.getInstance().getModContainer(importantMod).ifPresent(mod -> mods.add(importantMod + " (" + mod.getMetadata().getVersion().getFriendlyString() + ")")); + } + object.add("mods", mods); - if (context.get(Boolean.class, "andromeda:skip_service").orElse(false)) { - r.run(); - } else { - Uploader.SERVICE.submit(r); - } + if (context.get(Boolean.class, "andromeda:skip_service").orElse(false)) { + upload(object); + } else { + Uploader.SERVICE.submit(() -> upload(object)); } } - private static String getFromCrashReport(Context context) { - return CrashReportProcessor.accept(context); + private static void upload(JsonObject object) { + MIXPANEL.upload(new Mixpanel.Context("Crash", object)).handle((unused, throwable) -> { + if (throwable != null) + System.err.printf("Failed to upload crash report! %s: %s%n", throwable.getClass().getSimpleName(), throwable.getMessage()); + return null; + }); } - private static String getCauseAsString(Throwable cause, String message) { - Throwable throwable = getThrowable(cause, message); - + private static String getCauseAsString(Throwable cause) { try(var stringWriter = new StringWriter(); var printWriter = new PrintWriter(stringWriter)) { - throwable.printStackTrace(printWriter); + cause.printStackTrace(printWriter); return stringWriter.toString(); } catch (IOException e) { return "Failed to get cause: " + e.getMessage(); } } - - private static Throwable getThrowable(Throwable cause, String message) { - Throwable throwable = cause; - if (throwable.getMessage() == null) { - if (throwable instanceof NullPointerException) { - throwable = new NullPointerException(message); - } else if (throwable instanceof StackOverflowError) { - throwable = new StackOverflowError(message); - } else if (throwable instanceof OutOfMemoryError) { - throwable = new OutOfMemoryError(message); - } - - throwable.setStackTrace(cause.getStackTrace()); - } - return throwable; - } - - private static class CrashReportProcessor { - - public static String accept(Context context) { - CrashReport report = context.get(CrashReport.class, Crashlytics.Keys.CRASH_REPORT).orElseThrow(); - return report.getMessage(); - } - } } diff --git a/src/main/java/me/melontini/andromeda/util/exceptions/AndromedaException.java b/src/main/java/me/melontini/andromeda/util/exceptions/AndromedaException.java index 9e216431..4b7620f2 100644 --- a/src/main/java/me/melontini/andromeda/util/exceptions/AndromedaException.java +++ b/src/main/java/me/melontini/andromeda/util/exceptions/AndromedaException.java @@ -15,7 +15,7 @@ import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Set; +import java.util.Map; import java.util.function.Consumer; @CustomLog @@ -60,8 +60,12 @@ public class AndromedaException extends RuntimeException { return report; } + //referenced by name in MixinProcessor$Plugin#wrapNodeWithErrorHandling + @SuppressWarnings("unused") public static AndromedaException moduleException(Throwable t, String module) { - return AndromedaException.builder().cause(t).add("module", module).build(); + return AndromedaException.builder() + .message("Andromeda module caught a mixin handler exception! There's no guarantee that this is Andromeda's fault.") + .cause(t).add("module", module).build(); } public static void run(ThrowingRunnable runnable, Consumer consumer) { @@ -82,11 +86,19 @@ public class AndromedaException extends RuntimeException { return new Builder(); } + public static JsonObject defaultStatuses() { + return new Builder().statuses; + } + public static class Builder { - private static final Set DEFAULT_KEYS = Set.of( - "bootstrap_status", "platform", - prop(Prop.ENVIRONMENT), prop(Prop.OS), prop(Prop.JAVA_VERSION), prop(Prop.JAVA_VENDOR) + private static final Map> DEFAULT_KEYS = Map.of( + "bootstrap_status", b -> b.add("bootstrap_status", Bootstrap.Status.get()), + "platform", b -> b.add("platform", CommonValues.platform()), + prop(Prop.ENVIRONMENT), b -> b.add(Prop.ENVIRONMENT), + prop(Prop.OS), b -> b.add(Prop.OS), + prop(Prop.JAVA_VERSION), b -> b.add(Prop.JAVA_VERSION), + prop(Prop.JAVA_VENDOR), b -> b.add(Prop.JAVA_VENDOR) ); private static String prop(Prop prop) { @@ -100,9 +112,7 @@ public class AndromedaException extends RuntimeException { private final JsonObject statuses = new JsonObject(); private Builder() { - add(Prop.ENVIRONMENT, Prop.OS, Prop.JAVA_VERSION, Prop.JAVA_VENDOR); - add("platform", CommonValues.platform()); - add("bootstrap_status", Bootstrap.Status.get()); + DEFAULT_KEYS.values().forEach(c -> c.accept(this)); } public Builder message(String message) { @@ -149,7 +159,7 @@ public class AndromedaException extends RuntimeException { private void disableInHierarchy(Throwable cause) { if (cause == null) return; if (cause instanceof AndromedaException e) { - for (String defaultKey : DEFAULT_KEYS) { + for (String defaultKey : DEFAULT_KEYS.keySet()) { e.statuses.remove(defaultKey); } } -- 2.51.2 From 24b4b744f26776697ff30676694959381c0cf52a Mon Sep 17 00:00:00 2001 From: melontini <104443436+melontini@users.noreply.github.com> Date: Tue, 13 Feb 2024 21:38:25 +0700 Subject: [PATCH 3/8] Copy FileSystemUtil from fabric-loader to optionally close filesystems. --- .../melontini/andromeda/util/ClassPath.java | 17 ++-- .../andromeda/util/FileSystemUtil.java | 86 +++++++++++++++++++ 2 files changed, 93 insertions(+), 10 deletions(-) create mode 100644 src/main/java/me/melontini/andromeda/util/FileSystemUtil.java diff --git a/src/main/java/me/melontini/andromeda/util/ClassPath.java b/src/main/java/me/melontini/andromeda/util/ClassPath.java index 15ec3918..71011260 100644 --- a/src/main/java/me/melontini/andromeda/util/ClassPath.java +++ b/src/main/java/me/melontini/andromeda/util/ClassPath.java @@ -7,7 +7,10 @@ import me.melontini.dark_matter.api.base.util.Exceptions; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; -import java.nio.file.*; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.*; @@ -75,15 +78,9 @@ public final class ClassPath { @SneakyThrows private void scanJar(Path path) { - FileSystem fs = Exceptions.supply(() -> { - try { - return FileSystems.getFileSystem(path.toUri()); - } catch (Exception e) { - return FileSystems.newFileSystem(path, Collections.emptyMap()); - } - }); - - scan(fs.getRootDirectories().iterator().next()); + try (var delegate = FileSystemUtil.getJarFileSystem(path, false)) { + scan(delegate.get().getRootDirectories().iterator().next()); + } } @SneakyThrows diff --git a/src/main/java/me/melontini/andromeda/util/FileSystemUtil.java b/src/main/java/me/melontini/andromeda/util/FileSystemUtil.java new file mode 100644 index 00000000..ebe3bec6 --- /dev/null +++ b/src/main/java/me/melontini/andromeda/util/FileSystemUtil.java @@ -0,0 +1,86 @@ +/* + * Copyright 2016 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package me.melontini.andromeda.util; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.*; +import java.util.Collections; +import java.util.Map; +import java.util.zip.ZipError; + +//Copied directly from Fabric Loader to avoid depending on loader internals. +public final class FileSystemUtil { + public static class FileSystemDelegate implements AutoCloseable { + private final FileSystem fileSystem; + private final boolean owner; + + public FileSystemDelegate(FileSystem fileSystem, boolean owner) { + this.fileSystem = fileSystem; + this.owner = owner; + } + + public FileSystem get() { + return fileSystem; + } + + @Override + public void close() throws IOException { + if (owner) { + fileSystem.close(); + } + } + } + + private FileSystemUtil() { } + + private static final Map jfsArgsCreate = Collections.singletonMap("create", "true"); + private static final Map jfsArgsEmpty = Collections.emptyMap(); + + public static FileSystemDelegate getJarFileSystem(Path path, boolean create) throws IOException { + return getJarFileSystem(path.toUri(), create); + } + + public static FileSystemDelegate getJarFileSystem(URI uri, boolean create) throws IOException { + URI jarUri; + + try { + jarUri = new URI("jar:" + uri.getScheme(), uri.getHost(), uri.getPath(), uri.getFragment()); + } catch (URISyntaxException e) { + throw new IOException(e); + } + + boolean opened = false; + FileSystem ret; + + try { + ret = FileSystems.getFileSystem(jarUri); + } catch (FileSystemNotFoundException ignore) { + try { + ret = FileSystems.newFileSystem(jarUri, create ? jfsArgsCreate : jfsArgsEmpty); + opened = true; + } catch (FileSystemAlreadyExistsException ignore2) { + ret = FileSystems.getFileSystem(jarUri); + } catch (IOException | ZipError e) { + throw new IOException("Error accessing "+uri+": "+e, e); + } + } + + return new FileSystemDelegate(ret, opened); + } +} -- 2.51.2 From 407a1650d438db6c72aea15686d3b600d82ce4d5 Mon Sep 17 00:00:00 2001 From: melontini <104443436+melontini@users.noreply.github.com> Date: Tue, 13 Feb 2024 21:43:50 +0700 Subject: [PATCH 4/8] Return to attaching statuses only if andromeda is present in the trace. --- .../andromeda/common/mixin/CrashReportMixin.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/melontini/andromeda/common/mixin/CrashReportMixin.java b/src/main/java/me/melontini/andromeda/common/mixin/CrashReportMixin.java index 2c69c36b..b78450f8 100644 --- a/src/main/java/me/melontini/andromeda/common/mixin/CrashReportMixin.java +++ b/src/main/java/me/melontini/andromeda/common/mixin/CrashReportMixin.java @@ -13,9 +13,11 @@ abstract class CrashReportMixin { @Inject(at = @At("TAIL"), method = "", require = 0) private void andromeda$init(String message, Throwable cause, CallbackInfo ci) { - var sec = ((CrashReport) (Object) this).addElement("Andromeda Statuses"); - sec.trimStackTraceEnd(sec.getStackTrace().length); - sec.add("statuses", "\n" + AndromedaException.toString(CrashHandler.traverse(cause).orElseGet(AndromedaException::defaultStatuses))); + CrashHandler.traverse(cause).ifPresent(statuses -> { + var sec = ((CrashReport) (Object) this).addElement("Andromeda Statuses"); + sec.trimStackTraceEnd(sec.getStackTrace().length); + sec.add("statuses", "\n" + AndromedaException.toString(statuses)); + }); CrashHandler.sanitizeTrace(cause); } -- 2.51.2 From 85620847c190e53b6f8a52ededc6be3a9eb7890d Mon Sep 17 00:00:00 2001 From: melontini <104443436+melontini@users.noreply.github.com> Date: Tue, 13 Feb 2024 22:18:41 +0700 Subject: [PATCH 5/8] Fixed some init points. --- .../modules/items/pouches/Merged.java | 13 +++++++++ .../modules/items/pouches/client/Client.java | 12 -------- .../mechanics/throwable_items/Main.java | 7 +++-- .../data/ItemBehaviorData.java | 8 ------ .../CustomTraderManager.java | 19 ------------- .../mechanics/trading_goat_horn/Main.java | 28 +++++++++++++++++++ 6 files changed, 46 insertions(+), 41 deletions(-) create mode 100644 src/main/java/me/melontini/andromeda/modules/mechanics/trading_goat_horn/Main.java diff --git a/src/main/java/me/melontini/andromeda/modules/items/pouches/Merged.java b/src/main/java/me/melontini/andromeda/modules/items/pouches/Merged.java index 2aa093c7..db328f2e 100644 --- a/src/main/java/me/melontini/andromeda/modules/items/pouches/Merged.java +++ b/src/main/java/me/melontini/andromeda/modules/items/pouches/Merged.java @@ -1,8 +1,21 @@ package me.melontini.andromeda.modules.items.pouches; +import me.melontini.andromeda.common.conflicts.CommonRegistries; +import me.melontini.andromeda.util.AndromedaLog; +import me.melontini.andromeda.util.Debug; + public class Merged { Merged() { Main.testBlocks(); + + if (Debug.Keys.PRINT_DEBUG_MESSAGES.isPresent()) { + StringBuilder b = new StringBuilder(); + b.append("Viewable block entities:"); + Main.VIEWABLE_BLOCKS.forEach((blockEntityType, field) -> { + b.append('\n').append(CommonRegistries.blockEntityTypes().getId(blockEntityType)).append(": ").append(field.getName()); + }); + AndromedaLog.info(b); + } } } diff --git a/src/main/java/me/melontini/andromeda/modules/items/pouches/client/Client.java b/src/main/java/me/melontini/andromeda/modules/items/pouches/client/Client.java index e7e65df3..231b737c 100644 --- a/src/main/java/me/melontini/andromeda/modules/items/pouches/client/Client.java +++ b/src/main/java/me/melontini/andromeda/modules/items/pouches/client/Client.java @@ -1,9 +1,6 @@ package me.melontini.andromeda.modules.items.pouches.client; -import me.melontini.andromeda.common.conflicts.CommonRegistries; import me.melontini.andromeda.modules.items.pouches.Main; -import me.melontini.andromeda.util.AndromedaLog; -import me.melontini.andromeda.util.Debug; import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; import net.minecraft.client.render.entity.FlyingItemEntityRenderer; @@ -11,14 +8,5 @@ public class Client { Client() { EntityRendererRegistry.register(Main.POUCH.orThrow(), FlyingItemEntityRenderer::new); - - if (Debug.Keys.PRINT_DEBUG_MESSAGES.isPresent()) { - StringBuilder b = new StringBuilder(); - b.append("Viewable block entities:"); - Main.VIEWABLE_BLOCKS.forEach((blockEntityType, field) -> { - b.append('\n').append(CommonRegistries.blockEntityTypes().getId(blockEntityType)).append(": ").append(field.getName()); - }); - AndromedaLog.info(b); - } } } diff --git a/src/main/java/me/melontini/andromeda/modules/mechanics/throwable_items/Main.java b/src/main/java/me/melontini/andromeda/modules/mechanics/throwable_items/Main.java index 1b8af948..12a2b32b 100644 --- a/src/main/java/me/melontini/andromeda/modules/mechanics/throwable_items/Main.java +++ b/src/main/java/me/melontini/andromeda/modules/mechanics/throwable_items/Main.java @@ -2,7 +2,7 @@ package me.melontini.andromeda.modules.mechanics.throwable_items; import me.melontini.andromeda.common.conflicts.CommonRegistries; import me.melontini.andromeda.common.registries.Keeper; -import me.melontini.andromeda.modules.mechanics.throwable_items.data.ItemBehaviorData; +import me.melontini.andromeda.modules.mechanics.throwable_items.data.BehaviorLoader; import me.melontini.andromeda.modules.mechanics.throwable_items.data.ItemBehaviorManager; import me.melontini.dark_matter.api.content.RegistryUtil; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; @@ -11,6 +11,7 @@ import net.fabricmc.fabric.api.networking.v1.PlayerLookup; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; +import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.minecraft.block.dispenser.ProjectileDispenserBehavior; import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; @@ -22,6 +23,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; +import net.minecraft.resource.ResourceType; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; import net.minecraft.util.math.Position; @@ -67,7 +69,8 @@ public class Main { } }); - ItemBehaviorData.init(); + ServerLifecycleEvents.SERVER_STOPPED.register(server -> ItemBehaviorManager.clear()); + ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(new BehaviorLoader()); } private static PacketByteBuf sendItemsS2CPacket() { diff --git a/src/main/java/me/melontini/andromeda/modules/mechanics/throwable_items/data/ItemBehaviorData.java b/src/main/java/me/melontini/andromeda/modules/mechanics/throwable_items/data/ItemBehaviorData.java index 6f564843..0202362b 100644 --- a/src/main/java/me/melontini/andromeda/modules/mechanics/throwable_items/data/ItemBehaviorData.java +++ b/src/main/java/me/melontini/andromeda/modules/mechanics/throwable_items/data/ItemBehaviorData.java @@ -7,10 +7,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.JsonOps; import com.mojang.serialization.codecs.RecordCodecBuilder; import me.melontini.andromeda.common.conflicts.CommonRegistries; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; -import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.minecraft.item.Item; -import net.minecraft.resource.ResourceType; import java.util.Collections; import java.util.List; @@ -69,9 +66,4 @@ public record ItemBehaviorData(List items, boolean disabled, boolean overr throw new RuntimeException(string); }); } - - public static void init() { - ServerLifecycleEvents.SERVER_STOPPED.register(server -> ItemBehaviorManager.clear()); - ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(new BehaviorLoader()); - } } diff --git a/src/main/java/me/melontini/andromeda/modules/mechanics/trading_goat_horn/CustomTraderManager.java b/src/main/java/me/melontini/andromeda/modules/mechanics/trading_goat_horn/CustomTraderManager.java index 939d33a1..6e5375a8 100644 --- a/src/main/java/me/melontini/andromeda/modules/mechanics/trading_goat_horn/CustomTraderManager.java +++ b/src/main/java/me/melontini/andromeda/modules/mechanics/trading_goat_horn/CustomTraderManager.java @@ -5,9 +5,6 @@ import me.melontini.dark_matter.api.base.util.MathStuff; import me.melontini.dark_matter.api.minecraft.world.PersistentStateHelper; import me.melontini.dark_matter.api.minecraft.world.interfaces.DeserializableState; import me.melontini.dark_matter.api.minecraft.world.interfaces.TickableState; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnReason; import net.minecraft.entity.SpawnRestriction; @@ -122,20 +119,4 @@ public class CustomTraderManager extends PersistentState implements Deserializab return true; } - - public static void init() { - ServerWorldEvents.LOAD.register((server, world) -> { - if (world.getRegistryKey() == World.OVERWORLD) CustomTraderManager.get(world); - }); - - ServerLifecycleEvents.SERVER_STOPPING.register(server -> { - PersistentStateHelper.consumeIfLoaded(MakeSure.notNull(server.getWorld(World.OVERWORLD)), CustomTraderManager.ID, - (world1, s) -> CustomTraderManager.get(world1), PersistentState::markDirty); - }); - - ServerTickEvents.END_WORLD_TICK.register(world -> { - if (world.getRegistryKey() == World.OVERWORLD) PersistentStateHelper.consumeIfLoaded(world, CustomTraderManager.ID, - (world1, s) -> CustomTraderManager.get(world1), TickableState::tick); - }); - } } diff --git a/src/main/java/me/melontini/andromeda/modules/mechanics/trading_goat_horn/Main.java b/src/main/java/me/melontini/andromeda/modules/mechanics/trading_goat_horn/Main.java new file mode 100644 index 00000000..13ed0431 --- /dev/null +++ b/src/main/java/me/melontini/andromeda/modules/mechanics/trading_goat_horn/Main.java @@ -0,0 +1,28 @@ +package me.melontini.andromeda.modules.mechanics.trading_goat_horn; + +import me.melontini.dark_matter.api.base.util.MakeSure; +import me.melontini.dark_matter.api.minecraft.world.PersistentStateHelper; +import me.melontini.dark_matter.api.minecraft.world.interfaces.TickableState; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents; +import net.minecraft.world.PersistentState; +import net.minecraft.world.World; + +public class Main { + Main() { + ServerWorldEvents.LOAD.register((server, world) -> { + if (world.getRegistryKey() == World.OVERWORLD) CustomTraderManager.get(world); + }); + + ServerLifecycleEvents.SERVER_STOPPING.register(server -> { + PersistentStateHelper.consumeIfLoaded(MakeSure.notNull(server.getWorld(World.OVERWORLD)), CustomTraderManager.ID, + (world1, s) -> CustomTraderManager.get(world1), PersistentState::markDirty); + }); + + ServerTickEvents.END_WORLD_TICK.register(world -> { + if (world.getRegistryKey() == World.OVERWORLD) PersistentStateHelper.consumeIfLoaded(world, CustomTraderManager.ID, + (world1, s) -> CustomTraderManager.get(world1), TickableState::tick); + }); + } +} -- 2.51.2 From 02813d2e90f3802ffb98bb9b6121a2010a2d746f Mon Sep 17 00:00:00 2001 From: melontini <104443436+melontini@users.noreply.github.com> Date: Tue, 13 Feb 2024 22:57:26 +0700 Subject: [PATCH 6/8] Removed legacy config migration. --- .../melontini/andromeda/base/Bootstrap.java | 16 +--------- .../me/melontini/andromeda/base/Module.java | 12 -------- .../andromeda/base/ModuleManager.java | 7 +---- .../base/annotations/OldConfigKey.java | 15 ---------- .../base/events/LegacyConfigEvent.java | 10 ------- .../modules/blocks/bed/power/Power.java | 2 -- .../modules/blocks/bed/safe/Safe.java | 2 -- .../modules/blocks/bed/unsafe/Unsafe.java | 2 -- .../BetterFletchingTable.java | 2 -- .../cactus_bottle_filling/CactusFiller.java | 2 -- .../campfire_effects/CampfireEffects.java | 26 ---------------- .../falling_propagule/FallingPropagule.java | 2 -- .../blocks/guarded_loot/GuardedLoot.java | 11 ------- .../modules/blocks/incubator/Incubator.java | 11 ------- .../blocks/leaf_slowdown/LeafSlowdown.java | 2 -- .../advancement_shadow/AdvancementShadow.java | 2 -- .../BeeFlowerDuplication.java | 6 ---- .../BetterFurnaceMinecart.java | 7 ----- .../modules/entities/boats/Boats.java | 13 -------- .../modules/entities/minecarts/Minecarts.java | 12 -------- .../modules/entities/slimes/Slimes.java | 13 -------- .../entities/snowball_tweaks/Snowballs.java | 15 ---------- .../VillagersFollowEmeralds.java | 2 -- .../entities/zombie/all_pick_up/Pickup.java | 2 -- .../entities/zombie/clean_pickup/Pickup.java | 9 ------ .../gui/gui_particles/GuiParticles.java | 16 ---------- .../ItemFrameTooltips.java | 2 -- .../gui/name_tooltips/NameTooltips.java | 2 -- .../no_more_adventure/NoMoreAdventure.java | 2 -- .../balanced_mending/BalancedMending.java | 2 -- .../items/better_names/BetterNames.java | 2 -- .../items/infinite_totem/InfiniteTotem.java | 11 ------- .../modules/items/lockpick/Lockpick.java | 14 --------- .../MinecartBlockPicking.java | 6 ---- .../modules/items/tooltips/Tooltips.java | 13 -------- .../mechanics/dragon_fight/DragonFight.java | 13 -------- .../throwable_items/ThrowableItems.java | 13 -------- .../mechanics/trading_goat_horn/GoatHorn.java | 2 -- .../villager_gifting/VillagerGifting.java | 2 -- .../MinorInconvenience.java | 2 -- .../AdvancementGeneration.java | 30 ------------------- .../misc/translations/Translations.java | 2 -- .../modules/misc/unknown/Unknown.java | 2 -- .../world/auto_planting/AutoPlanting.java | 21 ------------- .../crop_temperature/PlantTemperature.java | 2 -- .../falling_beenests/CanBeeNestsFall.java | 2 -- .../modules/world/quick_fire/QuickFire.java | 2 -- 47 files changed, 2 insertions(+), 364 deletions(-) delete mode 100644 src/main/java/me/melontini/andromeda/base/annotations/OldConfigKey.java delete mode 100644 src/main/java/me/melontini/andromeda/base/events/LegacyConfigEvent.java diff --git a/src/main/java/me/melontini/andromeda/base/Bootstrap.java b/src/main/java/me/melontini/andromeda/base/Bootstrap.java index 49b936ad..1dc88785 100644 --- a/src/main/java/me/melontini/andromeda/base/Bootstrap.java +++ b/src/main/java/me/melontini/andromeda/base/Bootstrap.java @@ -112,20 +112,6 @@ public class Bootstrap { Class.forName(Exceptions.class.getName()); }); - AtomicReference oldCfg = new AtomicReference<>(); - var oldCfgPath = FabricLoader.getInstance().getConfigDir().resolve("andromeda.json"); - if (Files.exists(oldCfgPath)) { - if (!Files.exists(CommonValues.configPath())) { - wrapIO(() -> { - oldCfg.set(JsonParser.parseReader(Files.newBufferedReader(oldCfgPath)).getAsJsonObject()); - Files.createDirectories(CommonValues.configPath().getParent()); - Files.move(oldCfgPath, CommonValues.configPath()); - }, "Couldn't rename pre-1.0.0 config!"); - } else { - wrapIO(() -> Files.delete(oldCfgPath), "Couldn't delete pre-1.0.0 config!"); - } - } - AndromedaConfig.save(); Status.update(); @@ -154,7 +140,7 @@ public class Bootstrap { ModuleManager m; try { - m = new ModuleManager(sorted, oldCfg.get()); + m = new ModuleManager(sorted); } catch (Throwable t) {//Manager constructor does a lot of heavy-lifting, so we want to catch any errors. throw AndromedaException.builder() .cause(t).message("Failed to initialize ModuleManager!!!") diff --git a/src/main/java/me/melontini/andromeda/base/Module.java b/src/main/java/me/melontini/andromeda/base/Module.java index cf1830c7..0ed4fe2e 100644 --- a/src/main/java/me/melontini/andromeda/base/Module.java +++ b/src/main/java/me/melontini/andromeda/base/Module.java @@ -5,10 +5,7 @@ import lombok.Getter; import lombok.Setter; import lombok.SneakyThrows; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; import me.melontini.andromeda.base.events.Bus; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; import me.melontini.andromeda.util.exceptions.AndromedaException; import me.melontini.dark_matter.api.base.config.ConfigManager; import me.melontini.dark_matter.api.base.reflect.Reflect; @@ -45,15 +42,6 @@ public abstract class Module { protected Module() { ModuleInfo info1 = this.getClass().getAnnotation(ModuleInfo.class); this.info = new Metadata(info1.name(), info1.category(), info1.environment()); - - if (this.getClass().isAnnotationPresent(OldConfigKey.class)) { - OldConfigKey key = this.getClass().getAnnotation(OldConfigKey.class); - LegacyConfigEvent.BUS.listen(config -> { - if (config.has(key.value())) { - JsonOps.ifPresent(config, key.value(), e -> this.config().enabled = e.getAsBoolean()); - } - }); - } } public final Metadata meta() { diff --git a/src/main/java/me/melontini/andromeda/base/ModuleManager.java b/src/main/java/me/melontini/andromeda/base/ModuleManager.java index 25bfb8c4..b9774df6 100644 --- a/src/main/java/me/melontini/andromeda/base/ModuleManager.java +++ b/src/main/java/me/melontini/andromeda/base/ModuleManager.java @@ -1,12 +1,10 @@ package me.melontini.andromeda.base; -import com.google.gson.JsonObject; import lombok.CustomLog; import me.melontini.andromeda.base.annotations.ModuleInfo; import me.melontini.andromeda.base.annotations.Unscoped; import me.melontini.andromeda.base.events.Bus; import me.melontini.andromeda.base.events.ConfigEvent; -import me.melontini.andromeda.base.events.LegacyConfigEvent; import me.melontini.andromeda.util.Debug; import me.melontini.dark_matter.api.base.config.ConfigManager; import me.melontini.dark_matter.api.base.util.MakeSure; @@ -14,7 +12,6 @@ import me.melontini.dark_matter.api.base.util.Utilities; import net.fabricmc.api.EnvType; import net.fabricmc.loader.api.FabricLoader; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.lang.reflect.ParameterizedType; @@ -46,7 +43,7 @@ public class ModuleManager { final Map> mixinConfigs = new HashMap<>(); - ModuleManager(List zygotes, @Nullable JsonObject oldCfg) { + ModuleManager(List zygotes) { if (Bootstrap.INSTANCE != null) throw new IllegalStateException("ModuleManager already initialized!"); Bootstrap.INSTANCE = this; @@ -72,8 +69,6 @@ public class ModuleManager { module.defaultConfig = Utilities.cast(module.manager.createDefault()); }); - if (oldCfg != null) LegacyConfigEvent.BUS.invoker().acceptLegacy(oldCfg); - if (Debug.Keys.ENABLE_ALL_MODULES.isPresent()) sorted.forEach(module -> module.config().enabled = true); fixScopes(sorted); diff --git a/src/main/java/me/melontini/andromeda/base/annotations/OldConfigKey.java b/src/main/java/me/melontini/andromeda/base/annotations/OldConfigKey.java deleted file mode 100644 index 91a97b1a..00000000 --- a/src/main/java/me/melontini/andromeda/base/annotations/OldConfigKey.java +++ /dev/null @@ -1,15 +0,0 @@ -package me.melontini.andromeda.base.annotations; - -import org.jetbrains.annotations.ApiStatus; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@ApiStatus.Internal -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface OldConfigKey { - String value(); -} diff --git a/src/main/java/me/melontini/andromeda/base/events/LegacyConfigEvent.java b/src/main/java/me/melontini/andromeda/base/events/LegacyConfigEvent.java deleted file mode 100644 index 2988cbfb..00000000 --- a/src/main/java/me/melontini/andromeda/base/events/LegacyConfigEvent.java +++ /dev/null @@ -1,10 +0,0 @@ -package me.melontini.andromeda.base.events; - -import com.google.gson.JsonObject; - -public interface LegacyConfigEvent { - - Bus BUS = new Bus<>(events -> config -> events.forEach(event -> event.acceptLegacy(config))); - - void acceptLegacy(JsonObject config); -} diff --git a/src/main/java/me/melontini/andromeda/modules/blocks/bed/power/Power.java b/src/main/java/me/melontini/andromeda/modules/blocks/bed/power/Power.java index d5e08fbb..eb908ef3 100644 --- a/src/main/java/me/melontini/andromeda/modules/blocks/bed/power/Power.java +++ b/src/main/java/me/melontini/andromeda/modules/blocks/bed/power/Power.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.blocks.bed.power; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("enableBedExplosionPower") @ModuleInfo(name = "bed/power", category = "blocks", environment = Environment.SERVER) public class Power extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/blocks/bed/safe/Safe.java b/src/main/java/me/melontini/andromeda/modules/blocks/bed/safe/Safe.java index 5f17ae93..eb514cd3 100644 --- a/src/main/java/me/melontini/andromeda/modules/blocks/bed/safe/Safe.java +++ b/src/main/java/me/melontini/andromeda/modules/blocks/bed/safe/Safe.java @@ -2,9 +2,7 @@ package me.melontini.andromeda.modules.blocks.bed.safe; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("safeBeds") @ModuleInfo(name = "bed/safe", category = "blocks") public class Safe extends Module { } diff --git a/src/main/java/me/melontini/andromeda/modules/blocks/bed/unsafe/Unsafe.java b/src/main/java/me/melontini/andromeda/modules/blocks/bed/unsafe/Unsafe.java index a78fdb1d..5e9e3b40 100644 --- a/src/main/java/me/melontini/andromeda/modules/blocks/bed/unsafe/Unsafe.java +++ b/src/main/java/me/melontini/andromeda/modules/blocks/bed/unsafe/Unsafe.java @@ -4,7 +4,6 @@ import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.ModuleManager; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; import me.melontini.andromeda.base.events.BlockadesEvent; import me.melontini.andromeda.base.events.ConfigEvent; import me.melontini.andromeda.modules.blocks.bed.safe.Safe; @@ -12,7 +11,6 @@ import me.melontini.andromeda.modules.blocks.bed.safe.Safe; import java.util.concurrent.CompletableFuture; import java.util.function.BooleanSupplier; -@OldConfigKey("bedsExplodeEverywhere") @ModuleInfo(name = "bed/unsafe", category = "blocks", environment = Environment.SERVER) public class Unsafe extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/blocks/better_fletching_table/BetterFletchingTable.java b/src/main/java/me/melontini/andromeda/modules/blocks/better_fletching_table/BetterFletchingTable.java index 1b5733b1..a6b0d912 100644 --- a/src/main/java/me/melontini/andromeda/modules/blocks/better_fletching_table/BetterFletchingTable.java +++ b/src/main/java/me/melontini/andromeda/modules/blocks/better_fletching_table/BetterFletchingTable.java @@ -2,11 +2,9 @@ package me.melontini.andromeda.modules.blocks.better_fletching_table; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; import me.melontini.andromeda.base.annotations.Unscoped; @Unscoped -@OldConfigKey("usefulFletching") @ModuleInfo(name = "better_fletching_table", category = "blocks") public class BetterFletchingTable extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/blocks/cactus_bottle_filling/CactusFiller.java b/src/main/java/me/melontini/andromeda/modules/blocks/cactus_bottle_filling/CactusFiller.java index 7a3e836d..7ffbb932 100644 --- a/src/main/java/me/melontini/andromeda/modules/blocks/cactus_bottle_filling/CactusFiller.java +++ b/src/main/java/me/melontini/andromeda/modules/blocks/cactus_bottle_filling/CactusFiller.java @@ -2,9 +2,7 @@ package me.melontini.andromeda.modules.blocks.cactus_bottle_filling; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("cactusBottleFilling") @ModuleInfo(name = "cactus_bottle_filling", category = "blocks") public class CactusFiller extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/blocks/campfire_effects/CampfireEffects.java b/src/main/java/me/melontini/andromeda/modules/blocks/campfire_effects/CampfireEffects.java index 08f2058a..96948d3b 100644 --- a/src/main/java/me/melontini/andromeda/modules/blocks/campfire_effects/CampfireEffects.java +++ b/src/main/java/me/melontini/andromeda/modules/blocks/campfire_effects/CampfireEffects.java @@ -1,44 +1,18 @@ package me.melontini.andromeda.modules.blocks.campfire_effects; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; import me.shedaniel.autoconfig.annotation.ConfigEntry; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; @ModuleInfo(name = "campfire_effects", category = "blocks", environment = Environment.SERVER) public class CampfireEffects extends Module { - CampfireEffects() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("campfireTweaks")) { - JsonObject campfireTweaks = config.getAsJsonObject("campfireTweaks"); - - JsonOps.ifPresent(campfireTweaks, "campfireEffects", e -> this.config().enabled = e.getAsBoolean()); - JsonOps.ifPresent(campfireTweaks, "campfireEffectsPassive", e -> this.config().affectsPassive = e.getAsBoolean()); - JsonOps.ifPresent(campfireTweaks, "campfireEffectsRange", e -> this.config().effectsRange = e.getAsInt()); - - JsonOps.ifPresent(campfireTweaks, "effectsList", element -> { - List effects = new ArrayList<>(); - for (JsonElement e : element.getAsJsonArray()) { - JsonObject o = e.getAsJsonObject(); - effects.add(new Config.Effect(o.get("identifier").getAsString(), o.get("amplifier").getAsInt())); - } - this.config().effectList = effects; - }); - } - }); - } - public static class Config extends BaseConfig { public boolean affectsPassive = true; diff --git a/src/main/java/me/melontini/andromeda/modules/blocks/falling_propagule/FallingPropagule.java b/src/main/java/me/melontini/andromeda/modules/blocks/falling_propagule/FallingPropagule.java index 9db111d7..56eaf7f6 100644 --- a/src/main/java/me/melontini/andromeda/modules/blocks/falling_propagule/FallingPropagule.java +++ b/src/main/java/me/melontini/andromeda/modules/blocks/falling_propagule/FallingPropagule.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.blocks.falling_propagule; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("fallingPropagule") @ModuleInfo(name = "falling_propagule", category = "blocks", environment = Environment.SERVER) public class FallingPropagule extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/blocks/guarded_loot/GuardedLoot.java b/src/main/java/me/melontini/andromeda/modules/blocks/guarded_loot/GuardedLoot.java index c34ed92b..b765c8ae 100644 --- a/src/main/java/me/melontini/andromeda/modules/blocks/guarded_loot/GuardedLoot.java +++ b/src/main/java/me/melontini/andromeda/modules/blocks/guarded_loot/GuardedLoot.java @@ -1,23 +1,12 @@ package me.melontini.andromeda.modules.blocks.guarded_loot; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; @ModuleInfo(name = "guarded_loot", category = "blocks") public class GuardedLoot extends Module { GuardedLoot() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("guardedLoot")) { - JsonObject guardedLoot = config.getAsJsonObject("guardedLoot"); - - JsonOps.ifPresent(guardedLoot, "enabled", e -> this.config().enabled = e.getAsBoolean()); - JsonOps.ifPresent(guardedLoot, "range", e -> this.config().range = e.getAsInt()); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/blocks/incubator/Incubator.java b/src/main/java/me/melontini/andromeda/modules/blocks/incubator/Incubator.java index 1eb2405d..0de1090d 100644 --- a/src/main/java/me/melontini/andromeda/modules/blocks/incubator/Incubator.java +++ b/src/main/java/me/melontini/andromeda/modules/blocks/incubator/Incubator.java @@ -1,27 +1,16 @@ package me.melontini.andromeda.modules.blocks.incubator; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; import me.melontini.andromeda.base.annotations.SpecialEnvironment; import me.melontini.andromeda.base.annotations.Unscoped; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; @Unscoped @ModuleInfo(name = "incubator", category = "blocks") public class Incubator extends Module { Incubator() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("incubatorSettings")) { - JsonObject incubator = config.getAsJsonObject("incubatorSettings"); - - JsonOps.ifPresent(incubator, "enableIncubator", e -> this.config().enabled = e.getAsBoolean()); - JsonOps.ifPresent(incubator, "incubatorRandomness", e -> this.config().randomness = e.getAsBoolean()); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/blocks/leaf_slowdown/LeafSlowdown.java b/src/main/java/me/melontini/andromeda/modules/blocks/leaf_slowdown/LeafSlowdown.java index c760f393..0a757543 100644 --- a/src/main/java/me/melontini/andromeda/modules/blocks/leaf_slowdown/LeafSlowdown.java +++ b/src/main/java/me/melontini/andromeda/modules/blocks/leaf_slowdown/LeafSlowdown.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.blocks.leaf_slowdown; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("leafSlowdown") @ModuleInfo(name = "leaf_slowdown", category = "blocks", environment = Environment.SERVER) public class LeafSlowdown extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/bugfixes/advancement_shadow/AdvancementShadow.java b/src/main/java/me/melontini/andromeda/modules/bugfixes/advancement_shadow/AdvancementShadow.java index d575f209..f06abc18 100644 --- a/src/main/java/me/melontini/andromeda/modules/bugfixes/advancement_shadow/AdvancementShadow.java +++ b/src/main/java/me/melontini/andromeda/modules/bugfixes/advancement_shadow/AdvancementShadow.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.bugfixes.advancement_shadow; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("frameIndependentAdvancementShadow") @ModuleInfo(name = "advancement_shadow", category = "bugfixes", environment = Environment.CLIENT) public class AdvancementShadow extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/entities/bee_flower_duplication/BeeFlowerDuplication.java b/src/main/java/me/melontini/andromeda/modules/entities/bee_flower_duplication/BeeFlowerDuplication.java index c8444650..55155594 100644 --- a/src/main/java/me/melontini/andromeda/modules/entities/bee_flower_duplication/BeeFlowerDuplication.java +++ b/src/main/java/me/melontini/andromeda/modules/entities/bee_flower_duplication/BeeFlowerDuplication.java @@ -3,17 +3,11 @@ package me.melontini.andromeda.modules.entities.bee_flower_duplication; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; @ModuleInfo(name = "bee_flower_duplication", category = "entities", environment = Environment.SERVER) public class BeeFlowerDuplication extends Module { BeeFlowerDuplication() { - LegacyConfigEvent.BUS.listen(config -> { - JsonOps.ifPresent(config, "beeFlowerDuplication", e -> this.config().enabled = e.getAsBoolean()); - JsonOps.ifPresent(config, "beeTallFlowerDuplication", e -> this.config().tallFlowers = e.getAsBoolean()); - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/entities/better_furnace_minecart/BetterFurnaceMinecart.java b/src/main/java/me/melontini/andromeda/modules/entities/better_furnace_minecart/BetterFurnaceMinecart.java index 245b4de4..d0fbd628 100644 --- a/src/main/java/me/melontini/andromeda/modules/entities/better_furnace_minecart/BetterFurnaceMinecart.java +++ b/src/main/java/me/melontini/andromeda/modules/entities/better_furnace_minecart/BetterFurnaceMinecart.java @@ -4,19 +4,12 @@ import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; import me.melontini.andromeda.base.annotations.Unscoped; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; @Unscoped @ModuleInfo(name = "better_furnace_minecart", category = "entities", environment = Environment.SERVER) public class BetterFurnaceMinecart extends Module { BetterFurnaceMinecart() { - LegacyConfigEvent.BUS.listen(config -> { - JsonOps.ifPresent(config, "betterFurnaceMinecart", e -> this.config().enabled = e.getAsBoolean()); - JsonOps.ifPresent(config, "maxFurnaceMinecartFuel", e -> this.config().maxFuel = e.getAsInt()); - JsonOps.ifPresent(config, "furnaceMinecartTakeFuelWhenLow", e -> this.config().takeFuelWhenLow = e.getAsBoolean()); - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/entities/boats/Boats.java b/src/main/java/me/melontini/andromeda/modules/entities/boats/Boats.java index 298e70e4..34c95a71 100644 --- a/src/main/java/me/melontini/andromeda/modules/entities/boats/Boats.java +++ b/src/main/java/me/melontini/andromeda/modules/entities/boats/Boats.java @@ -1,13 +1,10 @@ package me.melontini.andromeda.modules.entities.boats; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; import me.melontini.andromeda.base.annotations.SpecialEnvironment; import me.melontini.andromeda.base.annotations.Unscoped; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; import me.shedaniel.autoconfig.annotation.ConfigEntry; @Unscoped @@ -15,16 +12,6 @@ import me.shedaniel.autoconfig.annotation.ConfigEntry; public class Boats extends Module { Boats() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("newBoats")) { - JsonObject newBoats = config.getAsJsonObject("newBoats"); - - JsonOps.ifPresent(newBoats, "isFurnaceBoatOn", e -> this.config().isFurnaceBoatOn = e.getAsBoolean()); - JsonOps.ifPresent(newBoats, "isTNTBoatOn", e -> this.config().isTNTBoatOn = e.getAsBoolean()); - JsonOps.ifPresent(newBoats, "isJukeboxBoatOn", e -> this.config().isJukeboxBoatOn = e.getAsBoolean()); - JsonOps.ifPresent(newBoats, "isHopperBoatOn", e -> this.config().isHopperBoatOn = e.getAsBoolean()); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/entities/minecarts/Minecarts.java b/src/main/java/me/melontini/andromeda/modules/entities/minecarts/Minecarts.java index 9baecee0..312cc74a 100644 --- a/src/main/java/me/melontini/andromeda/modules/entities/minecarts/Minecarts.java +++ b/src/main/java/me/melontini/andromeda/modules/entities/minecarts/Minecarts.java @@ -1,13 +1,10 @@ package me.melontini.andromeda.modules.entities.minecarts; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; import me.melontini.andromeda.base.annotations.SpecialEnvironment; import me.melontini.andromeda.base.annotations.Unscoped; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; import me.shedaniel.autoconfig.annotation.ConfigEntry; @Unscoped @@ -15,15 +12,6 @@ import me.shedaniel.autoconfig.annotation.ConfigEntry; public class Minecarts extends Module { Minecarts() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("newMinecarts")) { - JsonObject newMinecarts = config.getAsJsonObject("newMinecarts"); - - JsonOps.ifPresent(newMinecarts, "isAnvilMinecartOn", e -> this.config().isAnvilMinecartOn = e.getAsBoolean()); - JsonOps.ifPresent(newMinecarts, "isNoteBlockMinecartOn", e -> this.config().isNoteBlockMinecartOn = e.getAsBoolean()); - JsonOps.ifPresent(newMinecarts, "isJukeboxMinecartOn", e -> this.config().isJukeboxMinecartOn = e.getAsBoolean()); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/entities/slimes/Slimes.java b/src/main/java/me/melontini/andromeda/modules/entities/slimes/Slimes.java index c7961772..a2e545bf 100644 --- a/src/main/java/me/melontini/andromeda/modules/entities/slimes/Slimes.java +++ b/src/main/java/me/melontini/andromeda/modules/entities/slimes/Slimes.java @@ -1,26 +1,13 @@ package me.melontini.andromeda.modules.entities.slimes; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; @ModuleInfo(name = "slimes", category = "entities", environment = Environment.SERVER) public class Slimes extends Module { Slimes() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("slimes")) { - JsonObject slimes = config.getAsJsonObject("slimes"); - - JsonOps.ifPresent(slimes, "flee", e -> this.config().flee = e.getAsBoolean()); - JsonOps.ifPresent(slimes, "merge", e -> this.config().merge = e.getAsBoolean()); - JsonOps.ifPresent(slimes, "maxMerge", e -> this.config().maxMerge = e.getAsInt()); - JsonOps.ifPresent(slimes, "slowness", e -> this.config().slowness = e.getAsBoolean()); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/entities/snowball_tweaks/Snowballs.java b/src/main/java/me/melontini/andromeda/modules/entities/snowball_tweaks/Snowballs.java index fb3af59b..b8b805b7 100644 --- a/src/main/java/me/melontini/andromeda/modules/entities/snowball_tweaks/Snowballs.java +++ b/src/main/java/me/melontini/andromeda/modules/entities/snowball_tweaks/Snowballs.java @@ -1,28 +1,13 @@ package me.melontini.andromeda.modules.entities.snowball_tweaks; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; @ModuleInfo(name = "snowball_tweaks", category = "entities", environment = Environment.SERVER) public class Snowballs extends Module { Snowballs() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("snowballs")) { - JsonObject snowballs = config.getAsJsonObject("snowballs"); - - JsonOps.ifPresent(snowballs, "freeze", e -> this.config().freeze = e.getAsBoolean()); - JsonOps.ifPresent(snowballs, "extinguish", e -> this.config().extinguish = e.getAsBoolean()); - JsonOps.ifPresent(snowballs, "melt", e -> this.config().melt = e.getAsBoolean()); - JsonOps.ifPresent(snowballs, "layers", e -> this.config().layers = e.getAsBoolean()); - JsonOps.ifPresent(snowballs, "enableCooldown", e -> this.config().enableCooldown = e.getAsBoolean()); - JsonOps.ifPresent(snowballs, "cooldown", e -> this.config().cooldown = e.getAsInt()); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/entities/villagers_follow_emeralds/VillagersFollowEmeralds.java b/src/main/java/me/melontini/andromeda/modules/entities/villagers_follow_emeralds/VillagersFollowEmeralds.java index d5522f4d..272005a5 100644 --- a/src/main/java/me/melontini/andromeda/modules/entities/villagers_follow_emeralds/VillagersFollowEmeralds.java +++ b/src/main/java/me/melontini/andromeda/modules/entities/villagers_follow_emeralds/VillagersFollowEmeralds.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.entities.villagers_follow_emeralds; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("villagersFollowEmeraldBlocks") @ModuleInfo(name = "villagers_follow_emeralds", category = "entities", environment = Environment.SERVER) public class VillagersFollowEmeralds extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/entities/zombie/all_pick_up/Pickup.java b/src/main/java/me/melontini/andromeda/modules/entities/zombie/all_pick_up/Pickup.java index 2ec75f37..1b606069 100644 --- a/src/main/java/me/melontini/andromeda/modules/entities/zombie/all_pick_up/Pickup.java +++ b/src/main/java/me/melontini/andromeda/modules/entities/zombie/all_pick_up/Pickup.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.entities.zombie.all_pick_up; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("allZombiesCanPickUpItems") @ModuleInfo(name = "zombie/all_pick_up", category = "entities", environment = Environment.SERVER) public class Pickup extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/entities/zombie/clean_pickup/Pickup.java b/src/main/java/me/melontini/andromeda/modules/entities/zombie/clean_pickup/Pickup.java index 3b1bf9c3..65352178 100644 --- a/src/main/java/me/melontini/andromeda/modules/entities/zombie/clean_pickup/Pickup.java +++ b/src/main/java/me/melontini/andromeda/modules/entities/zombie/clean_pickup/Pickup.java @@ -1,21 +1,12 @@ package me.melontini.andromeda.modules.entities.zombie.clean_pickup; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.events.LegacyConfigEvent; @ModuleInfo(name = "zombie/clean_pickup", category = "entities", environment = Environment.SERVER) public class Pickup extends Module { Pickup() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("newThrowableItems")) { - JsonObject o = config.get("newThrowableItems").getAsJsonObject(); - this.config().enabled = o.has("enable") && o.get("enable").getAsBoolean() - && o.has("preventUselessItems") && o.get("preventUselessItems").getAsBoolean(); - } - }); } } diff --git a/src/main/java/me/melontini/andromeda/modules/gui/gui_particles/GuiParticles.java b/src/main/java/me/melontini/andromeda/modules/gui/gui_particles/GuiParticles.java index bd907e51..9ee862a4 100644 --- a/src/main/java/me/melontini/andromeda/modules/gui/gui_particles/GuiParticles.java +++ b/src/main/java/me/melontini/andromeda/modules/gui/gui_particles/GuiParticles.java @@ -1,29 +1,13 @@ package me.melontini.andromeda.modules.gui.gui_particles; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; @ModuleInfo(name = "gui_particles", category = "gui", environment = Environment.CLIENT) public class GuiParticles extends Module { GuiParticles() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("guiParticles")) { - JsonObject guiParticles = config.getAsJsonObject("guiParticles"); - - this.config().enabled = true; - JsonOps.ifPresent(guiParticles, "anvilScreenParticles", e -> this.config().anvilScreenParticles = e.getAsBoolean()); - JsonOps.ifPresent(guiParticles, "enchantmentScreenParticles", e -> this.config().enchantmentScreenParticles = e.getAsBoolean()); - JsonOps.ifPresent(guiParticles, "furnaceScreenParticles", e -> this.config().furnaceScreenParticles = e.getAsBoolean()); - JsonOps.ifPresent(guiParticles, "creativeScreenParticles", e -> this.config().creativeScreenParticles = e.getAsBoolean()); - JsonOps.ifPresent(guiParticles, "creativeScreenParticlesVelX", e -> this.config().creativeScreenParticlesVelX = e.getAsDouble()); - JsonOps.ifPresent(guiParticles, "gameModeSwitcherParticles", e -> this.config().gameModeSwitcherParticles = e.getAsBoolean()); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/gui/item_frame_tooltips/ItemFrameTooltips.java b/src/main/java/me/melontini/andromeda/modules/gui/item_frame_tooltips/ItemFrameTooltips.java index f3b6f427..87c04fbc 100644 --- a/src/main/java/me/melontini/andromeda/modules/gui/item_frame_tooltips/ItemFrameTooltips.java +++ b/src/main/java/me/melontini/andromeda/modules/gui/item_frame_tooltips/ItemFrameTooltips.java @@ -3,7 +3,6 @@ package me.melontini.andromeda.modules.gui.item_frame_tooltips; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; import me.melontini.andromeda.base.events.BlockadesEvent; import me.melontini.andromeda.base.events.ConfigEvent; @@ -11,7 +10,6 @@ import java.util.function.BooleanSupplier; import static me.melontini.andromeda.base.Bootstrap.testModVersion; -@OldConfigKey("itemFrameTooltips") @ModuleInfo(name = "item_frame_tooltips", category = "gui", environment = Environment.CLIENT) public class ItemFrameTooltips extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/gui/name_tooltips/NameTooltips.java b/src/main/java/me/melontini/andromeda/modules/gui/name_tooltips/NameTooltips.java index c356cb1f..2eea8762 100644 --- a/src/main/java/me/melontini/andromeda/modules/gui/name_tooltips/NameTooltips.java +++ b/src/main/java/me/melontini/andromeda/modules/gui/name_tooltips/NameTooltips.java @@ -3,7 +3,6 @@ package me.melontini.andromeda.modules.gui.name_tooltips; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; import me.melontini.andromeda.base.events.BlockadesEvent; import me.melontini.andromeda.base.events.ConfigEvent; @@ -11,7 +10,6 @@ import java.util.function.BooleanSupplier; import static me.melontini.andromeda.base.Bootstrap.testModVersion; -@OldConfigKey("tooltipNotName") @ModuleInfo(name = "name_tooltips", category = "gui", environment = Environment.CLIENT) public class NameTooltips extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/gui/no_more_adventure/NoMoreAdventure.java b/src/main/java/me/melontini/andromeda/modules/gui/no_more_adventure/NoMoreAdventure.java index 46111729..ad401bc3 100644 --- a/src/main/java/me/melontini/andromeda/modules/gui/no_more_adventure/NoMoreAdventure.java +++ b/src/main/java/me/melontini/andromeda/modules/gui/no_more_adventure/NoMoreAdventure.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.gui.no_more_adventure; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("noMoreAdventure") @ModuleInfo(name = "no_more_adventure", category = "gui", environment = Environment.CLIENT) public class NoMoreAdventure extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/items/balanced_mending/BalancedMending.java b/src/main/java/me/melontini/andromeda/modules/items/balanced_mending/BalancedMending.java index 1232912c..507b020c 100644 --- a/src/main/java/me/melontini/andromeda/modules/items/balanced_mending/BalancedMending.java +++ b/src/main/java/me/melontini/andromeda/modules/items/balanced_mending/BalancedMending.java @@ -2,11 +2,9 @@ package me.melontini.andromeda.modules.items.balanced_mending; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; import me.melontini.andromeda.base.annotations.Unscoped; @Unscoped -@OldConfigKey("balancedMending") @ModuleInfo(name = "balanced_mending", category = "items") public class BalancedMending extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/items/better_names/BetterNames.java b/src/main/java/me/melontini/andromeda/modules/items/better_names/BetterNames.java index 7077beab..fbe0a175 100644 --- a/src/main/java/me/melontini/andromeda/modules/items/better_names/BetterNames.java +++ b/src/main/java/me/melontini/andromeda/modules/items/better_names/BetterNames.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.items.better_names; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("slightlyBetterItemNames") @ModuleInfo(name = "better_names", category = "items", environment = Environment.CLIENT) public class BetterNames extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/items/infinite_totem/InfiniteTotem.java b/src/main/java/me/melontini/andromeda/modules/items/infinite_totem/InfiniteTotem.java index 49896ded..c7aa5863 100644 --- a/src/main/java/me/melontini/andromeda/modules/items/infinite_totem/InfiniteTotem.java +++ b/src/main/java/me/melontini/andromeda/modules/items/infinite_totem/InfiniteTotem.java @@ -1,23 +1,12 @@ package me.melontini.andromeda.modules.items.infinite_totem; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; @ModuleInfo(name = "infinite_totem", category = "items") public class InfiniteTotem extends Module { InfiniteTotem() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("totemSettings")) { - JsonObject totemSettings = config.getAsJsonObject("totemSettings"); - - JsonOps.ifPresent(totemSettings, "enableInfiniteTotem", e -> this.config().enabled = e.getAsBoolean()); - JsonOps.ifPresent(totemSettings, "enableTotemAscension", e -> this.config().enableAscension = e.getAsBoolean()); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/items/lockpick/Lockpick.java b/src/main/java/me/melontini/andromeda/modules/items/lockpick/Lockpick.java index 6b9c4f7f..b15f5056 100644 --- a/src/main/java/me/melontini/andromeda/modules/items/lockpick/Lockpick.java +++ b/src/main/java/me/melontini/andromeda/modules/items/lockpick/Lockpick.java @@ -1,11 +1,8 @@ package me.melontini.andromeda.modules.items.lockpick; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; import me.melontini.andromeda.base.annotations.Unscoped; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; import me.melontini.dark_matter.api.base.util.MathStuff; @Unscoped @@ -13,17 +10,6 @@ import me.melontini.dark_matter.api.base.util.MathStuff; public class Lockpick extends Module { Lockpick() { - LegacyConfigEvent.BUS.listen(config -> { - JsonOps.ifPresent(config, "lockpickEnabled", e -> this.config().enabled = e.getAsBoolean()); - - if (config.has("lockpick")) { - JsonObject lockpick = config.getAsJsonObject("lockpick"); - - JsonOps.ifPresent(lockpick, "chance", e -> this.config().chance = e.getAsInt()); - JsonOps.ifPresent(lockpick, "breakAfterUse", e -> this.config().breakAfterUse = e.getAsBoolean()); - JsonOps.ifPresent(lockpick, "villagerInventory", e -> this.config().villagerInventory = e.getAsBoolean()); - } - }); } public boolean rollLockpick() { diff --git a/src/main/java/me/melontini/andromeda/modules/items/minecart_block_picking/MinecartBlockPicking.java b/src/main/java/me/melontini/andromeda/modules/items/minecart_block_picking/MinecartBlockPicking.java index bb7100ff..1670f903 100644 --- a/src/main/java/me/melontini/andromeda/modules/items/minecart_block_picking/MinecartBlockPicking.java +++ b/src/main/java/me/melontini/andromeda/modules/items/minecart_block_picking/MinecartBlockPicking.java @@ -3,18 +3,12 @@ package me.melontini.andromeda.modules.items.minecart_block_picking; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; import me.melontini.andromeda.base.annotations.Unscoped; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; @Unscoped @ModuleInfo(name = "minecart_block_picking", category = "items") public class MinecartBlockPicking extends Module { MinecartBlockPicking() { - LegacyConfigEvent.BUS.listen(config -> { - JsonOps.ifPresent(config, "minecartBlockPicking", e -> this.config().enabled = e.getAsBoolean()); - JsonOps.ifPresent(config, "minecartSpawnerPicking", e -> this.config().spawnerPicking = e.getAsBoolean()); - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/items/tooltips/Tooltips.java b/src/main/java/me/melontini/andromeda/modules/items/tooltips/Tooltips.java index 742ffcee..e73ad9e9 100644 --- a/src/main/java/me/melontini/andromeda/modules/items/tooltips/Tooltips.java +++ b/src/main/java/me/melontini/andromeda/modules/items/tooltips/Tooltips.java @@ -1,26 +1,13 @@ package me.melontini.andromeda.modules.items.tooltips; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; @ModuleInfo(name = "tooltips", category = "items", environment = Environment.CLIENT) public class Tooltips extends Module { Tooltips() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("tooltips")) { - JsonObject tooltips = config.getAsJsonObject("tooltips"); - - this.config().enabled = true; - JsonOps.ifPresent(tooltips, "clock", e -> this.config().clock = e.getAsBoolean()); - JsonOps.ifPresent(tooltips, "compass", e -> this.config().compass = e.getAsBoolean()); - JsonOps.ifPresent(tooltips, "recoveryCompass", e -> this.config().recoveryCompass = e.getAsBoolean()); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/mechanics/dragon_fight/DragonFight.java b/src/main/java/me/melontini/andromeda/modules/mechanics/dragon_fight/DragonFight.java index 14e3e1bf..ffe3ab2f 100644 --- a/src/main/java/me/melontini/andromeda/modules/mechanics/dragon_fight/DragonFight.java +++ b/src/main/java/me/melontini/andromeda/modules/mechanics/dragon_fight/DragonFight.java @@ -1,12 +1,9 @@ package me.melontini.andromeda.modules.mechanics.dragon_fight; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; import me.melontini.andromeda.base.annotations.Unscoped; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; import me.shedaniel.autoconfig.annotation.ConfigEntry; @Unscoped @@ -14,16 +11,6 @@ import me.shedaniel.autoconfig.annotation.ConfigEntry; public class DragonFight extends Module { DragonFight() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("dragonFight")) { - JsonObject dragonFight = config.getAsJsonObject("dragonFight"); - - JsonOps.ifPresent(dragonFight, "respawnCrystals", e -> this.config().respawnCrystals = e.getAsBoolean()); - JsonOps.ifPresent(dragonFight, "scaleHealthByMaxPlayers", e -> this.config().scaleHealthByMaxPlayers = e.getAsBoolean()); - JsonOps.ifPresent(dragonFight, "shorterCrystalTrackRange", e -> this.config().shorterCrystalTrackRange = e.getAsBoolean()); - JsonOps.ifPresent(dragonFight, "shorterSpikes", e -> this.config().shorterSpikes = e.getAsBoolean()); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/mechanics/throwable_items/ThrowableItems.java b/src/main/java/me/melontini/andromeda/modules/mechanics/throwable_items/ThrowableItems.java index a7a17fdd..30463704 100644 --- a/src/main/java/me/melontini/andromeda/modules/mechanics/throwable_items/ThrowableItems.java +++ b/src/main/java/me/melontini/andromeda/modules/mechanics/throwable_items/ThrowableItems.java @@ -1,29 +1,16 @@ package me.melontini.andromeda.modules.mechanics.throwable_items; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; import me.melontini.andromeda.base.annotations.SpecialEnvironment; import me.melontini.andromeda.base.annotations.Unscoped; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; @Unscoped @ModuleInfo(name = "throwable_items", category = "mechanics") public class ThrowableItems extends Module { ThrowableItems() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("newThrowableItems")) { - JsonObject newThrowableItems = config.getAsJsonObject("newThrowableItems"); - - JsonOps.ifPresent(newThrowableItems, "enable", e -> this.config().enabled = e.getAsBoolean()); - JsonOps.ifPresent(newThrowableItems, "canZombiesThrowItems", e -> this.config().canZombiesThrowItems = e.getAsBoolean()); - JsonOps.ifPresent(newThrowableItems, "zombieThrowInterval", e -> this.config().zombieThrowInterval = e.getAsInt()); - JsonOps.ifPresent(newThrowableItems, "tooltip", e -> this.config().tooltip = e.getAsBoolean()); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/mechanics/trading_goat_horn/GoatHorn.java b/src/main/java/me/melontini/andromeda/modules/mechanics/trading_goat_horn/GoatHorn.java index 431e1e5f..07486d14 100644 --- a/src/main/java/me/melontini/andromeda/modules/mechanics/trading_goat_horn/GoatHorn.java +++ b/src/main/java/me/melontini/andromeda/modules/mechanics/trading_goat_horn/GoatHorn.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.mechanics.trading_goat_horn; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("tradingGoatHorn") @ModuleInfo(name = "trading_goat_horn", category = "mechanics", environment = Environment.SERVER) public class GoatHorn extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/mechanics/villager_gifting/VillagerGifting.java b/src/main/java/me/melontini/andromeda/modules/mechanics/villager_gifting/VillagerGifting.java index 35a7e7a9..38cbd2ea 100644 --- a/src/main/java/me/melontini/andromeda/modules/mechanics/villager_gifting/VillagerGifting.java +++ b/src/main/java/me/melontini/andromeda/modules/mechanics/villager_gifting/VillagerGifting.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.mechanics.villager_gifting; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("villagerGifting") @ModuleInfo(name = "villager_gifting", category = "mechanics", environment = Environment.SERVER) public class VillagerGifting extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/misc/minor_inconvenience/MinorInconvenience.java b/src/main/java/me/melontini/andromeda/modules/misc/minor_inconvenience/MinorInconvenience.java index b8489d7a..2aeb0fa6 100644 --- a/src/main/java/me/melontini/andromeda/modules/misc/minor_inconvenience/MinorInconvenience.java +++ b/src/main/java/me/melontini/andromeda/modules/misc/minor_inconvenience/MinorInconvenience.java @@ -2,9 +2,7 @@ package me.melontini.andromeda.modules.misc.minor_inconvenience; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("minorInconvenience") @ModuleInfo(name = "minor_inconvenience", category = "misc") public class MinorInconvenience extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/misc/recipe_advancements_generation/AdvancementGeneration.java b/src/main/java/me/melontini/andromeda/modules/misc/recipe_advancements_generation/AdvancementGeneration.java index e20cfe9c..b9fe8e0c 100644 --- a/src/main/java/me/melontini/andromeda/modules/misc/recipe_advancements_generation/AdvancementGeneration.java +++ b/src/main/java/me/melontini/andromeda/modules/misc/recipe_advancements_generation/AdvancementGeneration.java @@ -1,14 +1,9 @@ package me.melontini.andromeda.modules.misc.recipe_advancements_generation; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -16,31 +11,6 @@ import java.util.List; public class AdvancementGeneration extends Module { AdvancementGeneration() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("autogenRecipeAdvancements")) { - JsonObject ara = config.getAsJsonObject("autogenRecipeAdvancements"); - - JsonOps.ifPresent(ara, "autogenRecipeAdvancements", e -> this.config().enabled = e.getAsBoolean()); - JsonOps.ifPresent(ara, "requireAllItems", e -> this.config().requireAllItems = e.getAsBoolean()); - JsonOps.ifPresent(ara, "ignoreRecipesHiddenInTheRecipeBook", e -> this.config().ignoreRecipesHiddenInTheRecipeBook = e.getAsBoolean()); - - JsonOps.ifPresent(ara, "blacklistedRecipeNamespaces", element -> { - List nsbl = new ArrayList<>(); - for (JsonElement e : element.getAsJsonArray()) { - nsbl.add(e.getAsString()); - } - this.config().namespaceBlacklist = nsbl; - }); - - JsonOps.ifPresent(ara, "blacklistedRecipeIds", element -> { - List rbbl = new ArrayList<>(); - for (JsonElement e : element.getAsJsonArray()) { - rbbl.add(e.getAsString()); - } - this.config().recipeBlacklist = rbbl; - }); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/misc/translations/Translations.java b/src/main/java/me/melontini/andromeda/modules/misc/translations/Translations.java index 5b5b6b91..12d230f6 100644 --- a/src/main/java/me/melontini/andromeda/modules/misc/translations/Translations.java +++ b/src/main/java/me/melontini/andromeda/modules/misc/translations/Translations.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.misc.translations; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("autoUpdateTranslations") @ModuleInfo(name = "translations", category = "misc", environment = Environment.CLIENT) public class Translations extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/misc/unknown/Unknown.java b/src/main/java/me/melontini/andromeda/modules/misc/unknown/Unknown.java index 58bb17b0..dac3a03b 100644 --- a/src/main/java/me/melontini/andromeda/modules/misc/unknown/Unknown.java +++ b/src/main/java/me/melontini/andromeda/modules/misc/unknown/Unknown.java @@ -2,11 +2,9 @@ package me.melontini.andromeda.modules.misc.unknown; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; import me.melontini.andromeda.base.annotations.Unscoped; @Unscoped -@OldConfigKey("unknown") @ModuleInfo(name = "unknown", category = "misc") public class Unknown extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/world/auto_planting/AutoPlanting.java b/src/main/java/me/melontini/andromeda/modules/world/auto_planting/AutoPlanting.java index 51907bc6..429ec50e 100644 --- a/src/main/java/me/melontini/andromeda/modules/world/auto_planting/AutoPlanting.java +++ b/src/main/java/me/melontini/andromeda/modules/world/auto_planting/AutoPlanting.java @@ -1,16 +1,11 @@ package me.melontini.andromeda.modules.world.auto_planting; import com.google.common.collect.Lists; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; import me.melontini.andromeda.base.annotations.Origin; -import me.melontini.andromeda.base.events.LegacyConfigEvent; -import me.melontini.andromeda.util.JsonOps; -import java.util.ArrayList; import java.util.List; @Origin(mod = "TinyTweaks", author = "HephaestusDev") @@ -18,22 +13,6 @@ import java.util.List; public class AutoPlanting extends Module { AutoPlanting() { - LegacyConfigEvent.BUS.listen(config -> { - if (config.has("autoPlanting")) { - JsonObject ap = config.getAsJsonObject("autoPlanting"); - - JsonOps.ifPresent(ap, "enabled", e -> this.config().enabled = e.getAsBoolean()); - JsonOps.ifPresent(ap, "blacklistMode", e -> this.config().blacklistMode = e.getAsBoolean()); - - JsonOps.ifPresent(ap, "idList", element -> { - List ids = new ArrayList<>(); - for (JsonElement e : element.getAsJsonArray()) { - ids.add(e.getAsString()); - } - this.config().idList = ids; - }); - } - }); } public static class Config extends BaseConfig { diff --git a/src/main/java/me/melontini/andromeda/modules/world/crop_temperature/PlantTemperature.java b/src/main/java/me/melontini/andromeda/modules/world/crop_temperature/PlantTemperature.java index fc899a98..9bf29fe4 100644 --- a/src/main/java/me/melontini/andromeda/modules/world/crop_temperature/PlantTemperature.java +++ b/src/main/java/me/melontini/andromeda/modules/world/crop_temperature/PlantTemperature.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.world.crop_temperature; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("temperatureBasedCropGrowthSpeed") @ModuleInfo(name = "crop_temperature", category = "world", environment = Environment.SERVER) public class PlantTemperature extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/world/falling_beenests/CanBeeNestsFall.java b/src/main/java/me/melontini/andromeda/modules/world/falling_beenests/CanBeeNestsFall.java index 9df8a810..c6a119ff 100644 --- a/src/main/java/me/melontini/andromeda/modules/world/falling_beenests/CanBeeNestsFall.java +++ b/src/main/java/me/melontini/andromeda/modules/world/falling_beenests/CanBeeNestsFall.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.world.falling_beenests; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("canBeeNestsFall") @ModuleInfo(name = "falling_beenests", category = "world", environment = Environment.SERVER) public class CanBeeNestsFall extends Module { diff --git a/src/main/java/me/melontini/andromeda/modules/world/quick_fire/QuickFire.java b/src/main/java/me/melontini/andromeda/modules/world/quick_fire/QuickFire.java index 2cb3be9a..718bbe20 100644 --- a/src/main/java/me/melontini/andromeda/modules/world/quick_fire/QuickFire.java +++ b/src/main/java/me/melontini/andromeda/modules/world/quick_fire/QuickFire.java @@ -3,9 +3,7 @@ package me.melontini.andromeda.modules.world.quick_fire; import me.melontini.andromeda.base.Environment; import me.melontini.andromeda.base.Module; import me.melontini.andromeda.base.annotations.ModuleInfo; -import me.melontini.andromeda.base.annotations.OldConfigKey; -@OldConfigKey("quickFire") @ModuleInfo(name = "quick_fire", category = "world", environment = Environment.SERVER) public class QuickFire extends Module { -- 2.51.2 From 2469cd5a73a4dcad9160cfde316aa3d1e23d8fb2 Mon Sep 17 00:00:00 2001 From: melontini <104443436+melontini@users.noreply.github.com> Date: Thu, 15 Feb 2024 01:09:06 +0700 Subject: [PATCH 7/8] Clean up downloaders --- .../misc/translations/client/Client.java | 47 ++++++++++--------- .../melontini/andromeda/util/GitTracker.java | 32 ++++++------- 2 files changed, 38 insertions(+), 41 deletions(-) diff --git a/src/main/java/me/melontini/andromeda/modules/misc/translations/client/Client.java b/src/main/java/me/melontini/andromeda/modules/misc/translations/client/Client.java index 85227647..20ea97d5 100644 --- a/src/main/java/me/melontini/andromeda/modules/misc/translations/client/Client.java +++ b/src/main/java/me/melontini/andromeda/modules/misc/translations/client/Client.java @@ -1,6 +1,7 @@ package me.melontini.andromeda.modules.misc.translations.client; import com.google.common.collect.Sets; +import lombok.experimental.ExtensionMethod; import me.melontini.andromeda.util.AndromedaLog; import me.melontini.andromeda.util.CommonValues; import me.melontini.andromeda.util.GitTracker; @@ -14,16 +15,18 @@ import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.attribute.FileTime; import java.time.Instant; import java.time.temporal.ChronoUnit; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ForkJoinPool; +@ExtensionMethod(Files.class) public class Client { public static final Path TRANSLATION_PACK = CommonValues.hiddenPath().resolve("andromeda_translations"); public static final Path LANG_PATH = TRANSLATION_PACK.resolve("assets/andromeda/lang"); + private static final Path EN_US = LANG_PATH.resolve("en_us.json"); private static final Path OPTIONS = FabricLoader.getInstance().getGameDir().resolve("options.txt"); private static final String URL = GitTracker.RAW_URL + "/" + GitTracker.OWNER + "/" + GitTracker.REPO + "/" + GitTracker.getDefaultBranch() + "/src/main/resources/assets/andromeda/lang/"; @@ -32,25 +35,24 @@ public class Client { private static String languageCode = "en_us"; Client() { - boolean shouldUpdate = true; - if (Files.exists(Client.LANG_PATH.resolve("en_us.json"))) { - try { - FileTime lastModifiedTime = Files.getLastModifiedTime(Client.LANG_PATH.resolve("en_us.json")); - shouldUpdate = ChronoUnit.HOURS.between(lastModifiedTime.toInstant(), Instant.now()) >= 24; - } catch (Exception ignored) {} - } - if (!shouldUpdate) shouldUpdate = CommonValues.updated(); - - if (shouldUpdate) { + if (shouldUpdate()) { Set languages = Sets.newHashSet("en_us"); - String s = Client.getSelectedLanguage(); - if (!s.isEmpty()) languages.add(s); + Client.getSelectedLanguage().ifPresent(languages::add); ForkJoinPool.commonPool().submit(() -> Client.downloadTranslations(languages)); - } else { - AndromedaLog.info("Skipped translations update."); } } + public boolean shouldUpdate() { + if (EN_US.exists()) { + try { + if (ChronoUnit.HOURS.between(EN_US.getLastModifiedTime().toInstant(), Instant.now()) >= 24) + return true; + } catch (Exception ignored) { + } + } else return true; + return CommonValues.updated(); + } + public static void onResourceReload(String code) { if (!languageCode.equals(code)) { languageCode = code; @@ -65,8 +67,8 @@ public class Client { String file = downloadLang(language); if (!file.isEmpty()) { try { - if (!Files.exists(LANG_PATH)) Files.createDirectories(LANG_PATH); - Files.writeString(LANG_PATH.resolve(language + ".json"), file); + if (!LANG_PATH.exists()) LANG_PATH.createDirectories(); + LANG_PATH.resolve(language + ".json").writeString(file); } catch (IOException e) { throw new RuntimeException(e); } @@ -96,13 +98,12 @@ public class Client { } } - public static String getSelectedLanguage() { + public static Optional getSelectedLanguage() { try { - if (!Files.exists(OPTIONS)) return ""; - for (String line : Files.readAllLines(OPTIONS)) { + if (!OPTIONS.exists()) return Optional.empty(); + for (String line : OPTIONS.readAllLines()) { if (line.matches("^lang:\\w+_\\w+")) { - languageCode = line.replace("lang:", ""); - return languageCode; + return Optional.of(line.replace("lang:", "")); } } throw AndromedaException.builder() @@ -110,7 +111,7 @@ public class Client { .build(); } catch (Throwable e) { AndromedaLog.error("Couldn't determine selected language!", e); - return ""; + return Optional.empty(); } } } diff --git a/src/main/java/me/melontini/andromeda/util/GitTracker.java b/src/main/java/me/melontini/andromeda/util/GitTracker.java index 8b1d5268..759ce2a1 100644 --- a/src/main/java/me/melontini/andromeda/util/GitTracker.java +++ b/src/main/java/me/melontini/andromeda/util/GitTracker.java @@ -3,6 +3,7 @@ package me.melontini.andromeda.util; import com.google.common.collect.Sets; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import lombok.experimental.ExtensionMethod; import java.io.IOException; import java.net.URI; @@ -11,13 +12,13 @@ import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.attribute.FileTime; import java.time.Duration; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.HashSet; import java.util.Set; +@ExtensionMethod(Files.class) public class GitTracker { public static final String OWNER = "melontini"; @@ -38,29 +39,24 @@ public class GitTracker { static { Path lastResponse = CommonValues.hiddenPath().resolve("git-response.json"); + if (shouldUpdate(lastResponse)) tryUpdateGitInfo(lastResponse); + if (lastResponse.exists()) tryUpdateInfoFromJson(lastResponse); + } - boolean shouldUpdate = true; - if (Files.exists(lastResponse)) { + public static boolean shouldUpdate(Path lastResponse) { + if (lastResponse.exists()) { try { - FileTime lastModifiedTime = Files.getLastModifiedTime(lastResponse); - shouldUpdate = ChronoUnit.HOURS.between(lastModifiedTime.toInstant(), Instant.now()) >= 24; + if (ChronoUnit.HOURS.between(lastResponse.getLastModifiedTime().toInstant(), Instant.now()) >= 24) + return true; } catch (Exception ignored) { } - } - if (!shouldUpdate) shouldUpdate = CommonValues.updated(); - - if (shouldUpdate) { - tryUpdateGitInfo(lastResponse); - } else AndromedaLog.info("Skipped git info update."); - - if (Files.exists(lastResponse)) { - tryUpdateInfoFromJson(lastResponse); - } + } else return true; + return CommonValues.updated(); } private static void tryUpdateInfoFromJson(Path lastResponse) { try { - JsonObject object = (JsonObject) JsonParser.parseString(Files.readString(lastResponse)); + JsonObject object = (JsonObject) JsonParser.parseString(lastResponse.readString()); if (object.has("default_branch")) { DEFAULT_BRANCH = object.get("default_branch").getAsString(); @@ -87,8 +83,8 @@ public class GitTracker { if (!PRESERVE_KEYS.contains(s)) jsonResponse.remove(s); } - if (!Files.exists(lastResponse)) Files.createDirectories(lastResponse.getParent()); - Files.writeString(lastResponse, jsonResponse.toString()); + if (!lastResponse.exists()) lastResponse.getParent().createDirectories(); + lastResponse.writeString(jsonResponse.toString()); } catch (Exception e) { AndromedaLog.warn("Couldn't update git info", e); } -- 2.51.2 From 1197967d1ba1bdeca0da5ab76450e246690d299c Mon Sep 17 00:00:00 2001 From: melontini <104443436+melontini@users.noreply.github.com> Date: Thu, 15 Feb 2024 01:13:58 +0700 Subject: [PATCH 8/8] CHANGELOG.md and bump version. --- CHANGELOG.md | 13 +++++++++++-- gradle.properties | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea6f1725..ebe1c520 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ ### What's New: -[`misc/recipe_advancements_generation`]: +[`mechanics/dragon_fight`]: -* Moved generation to `SERVER_STARTING`. \ No newline at end of file +* Fixed null pointer crash caused by broken initialization. + +[`mechanics/trading_goat_horn`]: + +* Fixed manager's initializer never being called. + +[`general`]: + +* Removed legacy config migration. +* Cleaned up downloaders. \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 7fae6eb3..ad143d79 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ minecraft_version=1.20.1 yarn_mappings=1.20.1+build.2 loader_version=0.15.6 # Mod Properties -mod_version=1.6.1-1.20.1 +mod_version=1.6.2-1.20.1 maven_group=me.melontini archives_base_name=andromeda # Dependencies -- 2.51.2