diff --git a/gradle.properties b/gradle.properties index c90ad742b..85565592d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ name=OneConfig mod_id=oneconfig version_major=1 version_minor=0 -version_patch=0-alpha.58 +version_patch=0-alpha.59 polyfrost.defaults.loom=3 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5e3a208e9..4b6e0fe05 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ kotlin = "2.0.20" kotlinx-coroutines = "1.8.1" kotlinx-atomicfu = "0.24.0" fabric-language-kotlin = "1.12.2+kotlin.2.0.20" -polyui = "1.7.33" +polyui = "1.7.36" annotations = "24.1.0" hypixel-modapi = "1.0" hypixel-data = "0.1.2" # Dep of hypixel-modapi diff --git a/modules/config-impl/src/main/java/org/polyfrost/oneconfig/api/config/v1/backend/impl/FileBackend.java b/modules/config-impl/src/main/java/org/polyfrost/oneconfig/api/config/v1/backend/impl/FileBackend.java index 070548ab3..5c39346d6 100644 --- a/modules/config-impl/src/main/java/org/polyfrost/oneconfig/api/config/v1/backend/impl/FileBackend.java +++ b/modules/config-impl/src/main/java/org/polyfrost/oneconfig/api/config/v1/backend/impl/FileBackend.java @@ -261,7 +261,7 @@ protected FileSerializer getSerializer(Path p) { String path = p.toString(); int i = path.lastIndexOf('.'); if (i == -1) { - LOGGER.warn("no serializer set for file {}, using YAML", path); + //LOGGER.warn("no serializer set for file {}, using YAML", path); return serializers.get(".yml"); } return serializers.get(path.substring(i)); diff --git a/modules/events/src/main/java/org/polyfrost/oneconfig/api/event/v1/EventManager.java b/modules/events/src/main/java/org/polyfrost/oneconfig/api/event/v1/EventManager.java index 02c2a1ad2..a1f4be7cc 100644 --- a/modules/events/src/main/java/org/polyfrost/oneconfig/api/event/v1/EventManager.java +++ b/modules/events/src/main/java/org/polyfrost/oneconfig/api/event/v1/EventManager.java @@ -28,10 +28,15 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; import org.polyfrost.oneconfig.api.event.v1.events.Event; +import org.polyfrost.oneconfig.api.event.v1.events.InitializationEvent; import org.polyfrost.oneconfig.api.event.v1.invoke.EventCollector; import org.polyfrost.oneconfig.api.event.v1.invoke.EventHandler; import org.polyfrost.oneconfig.api.event.v1.invoke.impl.AnnotationEventMapper; +import org.polyfrost.oneconfig.api.platform.v1.Platform; +import org.polyfrost.oneconfig.utils.v1.TableHelper; import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; @@ -49,10 +54,40 @@ public final class EventManager { private final Deque collectors = new ArrayDeque<>(2); private final Map>> cache = new WeakHashMap<>(5); private final Map, List>> handlers = new HashMap<>(8); - + @ApiStatus.Internal + @Nullable + public static final List> devUnregistered; + + static { + if (Platform.loader().isDevelopment()) { + devUnregistered = new ArrayList<>(5); + } else devUnregistered = null; + } private EventManager() { registerCollector(new AnnotationEventMapper()); + if (Platform.loader().isDevelopment()) { + register(EventHandler.of(InitializationEvent.class, () -> { + if (devUnregistered != null && !devUnregistered.isEmpty()) { + LOGGER.warn("Found {} handlers that were created but not registered: ", devUnregistered.size()); + for (EventHandler handler : devUnregistered) { + LOGGER.warn(handler); + } + } + if (!handlers.isEmpty()) { + String[] classes = new String[handlers.size() + 1]; + String[] handles = new String[handlers.size() + 1]; + classes[0] = "Event Class"; + handles[0] = "Handlers"; + int i = 1; + for (Map.Entry, List>> entry : handlers.entrySet()) { + handles[i] = String.valueOf(entry.getValue().size()); + classes[i++] = entry.getKey().getName().replace("org.polyfrost.oneconfig.api.event.v1.events.", "builtin."); + } + LOGGER.info(TableHelper.makeTableFromColumns("Registered Event Handlers:", classes, handles)); + } + })); + } } /** @@ -113,6 +148,10 @@ public final void register(EventHandler... handlers) { * @param handler The handler to register. */ public void register(EventHandler handler) { + if (devUnregistered != null) { + devUnregistered.remove(handler); + } + List> handles = handlers.computeIfAbsent(handler.getEventClass(), k -> new CopyOnWriteArrayList<>()); if (handles.isEmpty()) { handles.add(handler); diff --git a/modules/events/src/main/java/org/polyfrost/oneconfig/api/event/v1/invoke/EventHandler.java b/modules/events/src/main/java/org/polyfrost/oneconfig/api/event/v1/invoke/EventHandler.java index 4e0d642c2..1baffd523 100644 --- a/modules/events/src/main/java/org/polyfrost/oneconfig/api/event/v1/invoke/EventHandler.java +++ b/modules/events/src/main/java/org/polyfrost/oneconfig/api/event/v1/invoke/EventHandler.java @@ -44,6 +44,12 @@ public abstract class EventHandler implements Comparable * println("Key event: $event") - * }.register() + * } * ``` */ @OverloadResolutionByLambdaReturnType @@ -49,7 +49,7 @@ inline fun eventHandler(crossinline handler: (E) -> Boolean) override fun handle(event: E) = handler(event) override fun getEventClass() = E::class.java -} +}.register() /** * Kotlin specific API for registering of event handlers. Intended usage: @@ -57,7 +57,7 @@ inline fun eventHandler(crossinline handler: (E) -> Boolean) * ``` * eventHandler { event: KeyInputEvent -> * println("Key event: $event") - * }.register() + * } * ``` */ @OverloadResolutionByLambdaReturnType @@ -69,7 +69,7 @@ inline fun eventHandler(crossinline handler: (E) -> Unit) = } override fun getEventClass() = E::class.java -} +}.register() /** makes code colored!! */ @DslMarker diff --git a/modules/hud/src/main/kotlin/org/polyfrost/oneconfig/api/hud/v1/HudManager.kt b/modules/hud/src/main/kotlin/org/polyfrost/oneconfig/api/hud/v1/HudManager.kt index be3fd2e02..8e5b768cf 100644 --- a/modules/hud/src/main/kotlin/org/polyfrost/oneconfig/api/hud/v1/HudManager.kt +++ b/modules/hud/src/main/kotlin/org/polyfrost/oneconfig/api/hud/v1/HudManager.kt @@ -123,7 +123,7 @@ object HudManager { val size = Vec2(if (sizeFile.exists()) sizeFile.readText().toLongOrNull() ?: 0L else 0L) val prevSize: Vec2 if (size.isPositive) { - LOGGER.info("Size to restore: $size") + LOGGER.info("Found a size to restore: $size") prevSize = polyUI.size polyUI.resize(size.x, size.y) } else { @@ -138,6 +138,7 @@ object HudManager { // } val loader = HudManager::class.java.classLoader val used = HashSet>>(hudProviders.size) + val failed = HashMap(8) var i = 0 ConfigManager.active().gatherAll("huds").forEach { data -> try { @@ -156,13 +157,18 @@ object HudManager { theHud.y = y - (hud.get().y - theHud.y) i++ } catch (e: ClassNotFoundException) { - LOGGER.warn("Didn't load HUD from ${data.id} as it's provider (${e.message?.substringAfter(':')}) wasn't found, was the mod removed?") + val cls = e.message?.substringAfter(':') ?: "unknown" + failed[cls] = failed.getOrDefault(cls, 0) + 1 } catch (e: Exception) { LOGGER.error("Failed to load HUD from ${data.id}", e) } } + if (failed.isNotEmpty()) { + LOGGER.warn("Failed to load HUDs from ${failed.size} providers as they weren't found: (maybe the mods were removed?)") + failed.forEach { (cls, amount) -> LOGGER.warn(" $cls: $amount HUDs") } + } if (prevSize.isPositive) polyUI.resize(prevSize.x, prevSize.y) - LOGGER.info("successfully loaded {} HUDs from {} providers", i, hudProviders.size) + LOGGER.info("successfully loaded {} HUDs from {} providers (total {} registered providers)", i, used.size, hudProviders.size) hudProviders.forEach { (cls, h) -> if (cls in used) return@forEach val default = h.defaultPosition() diff --git a/modules/internal/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/OneConfigUI.kt b/modules/internal/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/OneConfigUI.kt index 72b7168b1..5810df893 100644 --- a/modules/internal/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/OneConfigUI.kt +++ b/modules/internal/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/OneConfigUI.kt @@ -196,6 +196,10 @@ object OneConfigUI { size = Vec2(54f, 18f), ).setPalette { brand.fg } + fun invalidateCache() { + window = null + } + private val sidebarBtnAlign = Align(pad = Vec2(16f, 6f)) diff --git a/modules/ui/src/main/java/org/polyfrost/oneconfig/api/ui/v1/OCPolyUIBuilder.java b/modules/ui/src/main/java/org/polyfrost/oneconfig/api/ui/v1/OCPolyUIBuilder.java index f2c593f66..1c8d87676 100644 --- a/modules/ui/src/main/java/org/polyfrost/oneconfig/api/ui/v1/OCPolyUIBuilder.java +++ b/modules/ui/src/main/java/org/polyfrost/oneconfig/api/ui/v1/OCPolyUIBuilder.java @@ -44,7 +44,7 @@ private OCPolyUIBuilder() { Settings s = getSettings(); s.enableInitCleanup(false); s.enableForceSettingInitialSize(true); - s.enableDebugMode(Platform.loader().isDevelopmentEnvironment()); + s.enableDebugMode(Platform.loader().isDevelopment()); } public OCPolyUIBuilder onClose(Consumer onClose) { diff --git a/modules/ui/src/main/kotlin/org/polyfrost/oneconfig/api/ui/v1/keybind/KeybindManager.kt b/modules/ui/src/main/kotlin/org/polyfrost/oneconfig/api/ui/v1/keybind/KeybindManager.kt index c2943e38e..ac4810b63 100644 --- a/modules/ui/src/main/kotlin/org/polyfrost/oneconfig/api/ui/v1/keybind/KeybindManager.kt +++ b/modules/ui/src/main/kotlin/org/polyfrost/oneconfig/api/ui/v1/keybind/KeybindManager.kt @@ -55,13 +55,16 @@ object KeybindManager { eventHandler { (key, char, state): KeyInputEvent -> if (state == 2) return@eventHandler translateKey(inputManager, key, char, state == 1) - }.register() + } eventHandler { _: TickEvent.End -> keyBinder.update(50_000L, inputManager.mods, true) - }.register() + } + + // asm: this is an old fix which will be kept so that in the (rare) event that the keybind system fails for whatever reason, + // the user can try to fix it by opening a screen and trying again, and it should fix the issue. eventHandler { (screen): ScreenOpenEvent -> if (screen == null) keyBinder.release() - }.register() + } val m = Int2IntMap(8) m[UKeyboard.KEY_LSHIFT] = KeyModifiers.LSHIFT.value.toInt() @@ -117,8 +120,8 @@ object KeybindManager { if (character != '\u0000' && !character.isISOControl() && character.isDefined()) { if (state) { inputManager.keyTyped(character) - inputManager.keyDown(character.code) - } else inputManager.keyUp(character.code) + inputManager.keyDown(character.lowercaseChar().code) + } else inputManager.keyUp(character.lowercaseChar().code) return } diff --git a/modules/utils/src/main/java/org/polyfrost/oneconfig/api/platform/v1/LoaderPlatform.java b/modules/utils/src/main/java/org/polyfrost/oneconfig/api/platform/v1/LoaderPlatform.java index a734e1f5b..0ec4b7ec5 100644 --- a/modules/utils/src/main/java/org/polyfrost/oneconfig/api/platform/v1/LoaderPlatform.java +++ b/modules/utils/src/main/java/org/polyfrost/oneconfig/api/platform/v1/LoaderPlatform.java @@ -79,7 +79,10 @@ default String getLoaderString() { return sb.toString(); } - boolean isDevelopmentEnvironment(); + /** + * @return true if the current instance is in development mode. + */ + boolean isDevelopment(); Loaders getLoader(); diff --git a/modules/utils/src/main/java/org/polyfrost/oneconfig/utils/v1/LogScanner.java b/modules/utils/src/main/java/org/polyfrost/oneconfig/utils/v1/LogScanner.java index 70bf77c6f..e51cc8d71 100644 --- a/modules/utils/src/main/java/org/polyfrost/oneconfig/utils/v1/LogScanner.java +++ b/modules/utils/src/main/java/org/polyfrost/oneconfig/utils/v1/LogScanner.java @@ -193,7 +193,7 @@ public static Set identifyFromClass(Class clazz) { String s = uri.toString(); uri = new URL(s.substring(4, s.lastIndexOf("!"))).toURI(); } - if (uri.toString().endsWith(".class") && Platform.loader().isDevelopmentEnvironment()) { + if (uri.toString().endsWith(".class") && Platform.loader().isDevelopment()) { LOGGER.error("The mod you are currently developing caused this issue, or another class file. Returning 'this'."); LOGGER.error("Class: {}", clazz.getName()); return Collections.singleton(new LoaderPlatform.ActiveMod("this", "this", "Unknown", null)); @@ -208,7 +208,7 @@ public static Set identifyFromClass(Class clazz) { private static Set getModsAt(Path path, List modMap) { Set mods = modMap.stream().filter(m -> m.source.equals(path)).collect(Collectors.toSet()); if (!mods.isEmpty()) return mods; - else if (Platform.loader().isDevelopmentEnvironment()) { + else if (Platform.loader().isDevelopment()) { // For some reason, in dev, the mod being tested has the 'resources' folder as the origin instead of the 'classes' folder. String resourcesPathString = path.toString().replace("\\", "/") // Make it work with Architectury as well diff --git a/modules/utils/src/main/java/org/polyfrost/oneconfig/utils/v1/TableHelper.java b/modules/utils/src/main/java/org/polyfrost/oneconfig/utils/v1/TableHelper.java new file mode 100644 index 000000000..0fa5c3ab8 --- /dev/null +++ b/modules/utils/src/main/java/org/polyfrost/oneconfig/utils/v1/TableHelper.java @@ -0,0 +1,58 @@ +package org.polyfrost.oneconfig.utils.v1; + +public final class TableHelper { + public static String makeTableFromRows(String message, String[]... rows) { + int[] widths = new int[rows[0].length]; + for (String[] row : rows) { + for (int i = 0; i < row.length; i++) { + widths[i] = Math.max(widths[i], row[i].length()); + } + } + int maxSize = 1; + for (int width : widths) { + maxSize += width + 3; + } + int cap = message.length() + maxSize * (rows.length + 4); + StringBuilder sb = new StringBuilder(cap); + sb.append(message).append('\n'); + + for (int i = 0; i < maxSize; i++) { + sb.append('-'); + } + sb.append('\n'); + boolean first = true; + for (String[] row : rows) { + sb.append("| "); + for (int i = 0; i < row.length; i++) { + sb.append(row[i]); + for (int j = 0; j < widths[i] - row[i].length(); j++) { + sb.append(' '); + } + sb.append(" | "); + } + sb.append('\n'); + if (first) { + for (int i = 0; i < maxSize; i++) { + sb.append('-'); + } + sb.append('\n'); + first = false; + } + } + for (int i = 0; i < maxSize; i++) { + sb.append('-'); + } + + return sb.toString(); + } + + public static String makeTableFromColumns(String message, String[]... columns) { + String[][] rows = new String[columns[0].length][columns.length]; + for (int i = 0; i < columns.length; i++) { + for (int j = 0; j < columns[i].length; j++) { + rows[j][i] = columns[i][j]; + } + } + return makeTableFromRows(message, rows); + } +} diff --git a/modules/utils/src/main/java/org/polyfrost/oneconfig/utils/v1/WrappingUtils.java b/modules/utils/src/main/java/org/polyfrost/oneconfig/utils/v1/WrappingUtils.java index f776e692b..98d30cc9c 100644 --- a/modules/utils/src/main/java/org/polyfrost/oneconfig/utils/v1/WrappingUtils.java +++ b/modules/utils/src/main/java/org/polyfrost/oneconfig/utils/v1/WrappingUtils.java @@ -37,7 +37,7 @@ * Various utilities for wrapping and unboxing of arrays, lists, etc. * see {@link ArrayCastUtils} for some more info. */ -public class WrappingUtils { +public final class WrappingUtils { private static final Map, Class> prim2Wrapper; private static final Map, Class> wrapper2Prim; diff --git a/settings.gradle.kts b/settings.gradle.kts index 1312bfd06..ac377cecc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -29,7 +29,7 @@ rootProject.name = name if (rootDir.name != name) { logger.error(""" Root directory name (${rootDir.absolutePath}) does not match project name ($name)! - This may cause issues with indexing and other tools (see https://youtrack.jetbrains.com/issue/IDEA-317606/Changing-only-the-case-of-the-Gradle-root-project-name-causes-exception-while-importing-project-java.lang.IllegalStateException#focus=Comments-27-7257761.0-0 and https://stackoverflow.com/questions/77878944/what-to-do-when-the-java-lang-illegalsateexception-module-entity-with-name ). + This may cause issues with indexing and other tools (see https://youtrack.jetbrains.com/issue/IDEA-317606#focus=Comments-27-7257761.0-0 and https://stackoverflow.com/questions/77878944 ). If you are experiencing issues, please rename the root directory to match the project name, re-import the project, and invalidate caches if you are on IntelliJ. """.trimIndent()) } diff --git a/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/Mixin_ExecuteCommandsFromScreen.java b/versions/1.8.9-fabric/src/main/java/org/polyfrost/oneconfig/internal/mixin/commands/Mixin_ExecuteCommandsFromScreen.java similarity index 54% rename from versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/Mixin_ExecuteCommandsFromScreen.java rename to versions/1.8.9-fabric/src/main/java/org/polyfrost/oneconfig/internal/mixin/commands/Mixin_ExecuteCommandsFromScreen.java index b4b62541f..cca530a4d 100644 --- a/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/Mixin_ExecuteCommandsFromScreen.java +++ b/versions/1.8.9-fabric/src/main/java/org/polyfrost/oneconfig/internal/mixin/commands/Mixin_ExecuteCommandsFromScreen.java @@ -24,24 +24,22 @@ * */ -package org.polyfrost.oneconfig.internal.mixin; +package org.polyfrost.oneconfig.internal.mixin.commands; -//#if MC <= 1.13 && FABRIC -//$$ import net.minecraft.client.gui.screen.Screen; -//$$ import org.spongepowered.asm.mixin.Mixin; -//$$ import org.spongepowered.asm.mixin.injection.At; -//$$ import org.spongepowered.asm.mixin.injection.Inject; -//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -//$$ -//$$ @Mixin(Screen.class) -//$$ public abstract class Mixin_ExecuteCommandsFromScreen { -//$$ -//$$ @Inject(method = "sendMessage(Ljava/lang/String;Z)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/ClientPlayerEntity;sendChatMessage(Ljava/lang/String;)V"), cancellable = true) -//$$ private void commands$execute(String text, boolean toHud, CallbackInfo ci) { -//$$ if (org.polyfrost.oneconfig.api.commands.v1.internal.ClientCommandHandler.instance.execute(net.minecraft.client.MinecraftClient.getInstance().player, text) != 0) { -//$$ ci.cancel(); -//$$ } -//$$ } -//$$ -//$$ } -//#endif +import net.minecraft.client.gui.screen.Screen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Screen.class) +public abstract class Mixin_ExecuteCommandsFromScreen { + + @Inject(method = "sendMessage(Ljava/lang/String;Z)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/ClientPlayerEntity;sendChatMessage(Ljava/lang/String;)V"), cancellable = true) + private void commands$execute(String text, boolean toHud, CallbackInfo ci) { + if (org.polyfrost.oneconfig.api.commands.v1.internal.ClientCommandHandler.instance.execute(net.minecraft.client.MinecraftClient.getInstance().player, text) != 0) { + ci.cancel(); + } + } + +} diff --git a/versions/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/LoaderPlatformImpl.java b/versions/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/LoaderPlatformImpl.java index 76a352cfe..7747d2662 100644 --- a/versions/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/LoaderPlatformImpl.java +++ b/versions/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/LoaderPlatformImpl.java @@ -93,7 +93,7 @@ public int getMinecraftVersion() { //#endif @Override - public boolean isDevelopmentEnvironment() { + public boolean isDevelopment() { //#if FORGE && MC<11300 return isDev; //#elseif FABRIC diff --git a/versions/src/main/java/org/polyfrost/oneconfig/api/ui/v1/internal/BlurHandler.java b/versions/src/main/java/org/polyfrost/oneconfig/api/ui/v1/internal/BlurHandler.java index 76eb7abe3..a22367674 100644 --- a/versions/src/main/java/org/polyfrost/oneconfig/api/ui/v1/internal/BlurHandler.java +++ b/versions/src/main/java/org/polyfrost/oneconfig/api/ui/v1/internal/BlurHandler.java @@ -35,11 +35,12 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.polyfrost.oneconfig.api.event.v1.EventManager; -import org.polyfrost.oneconfig.api.event.v1.events.RenderEvent; import org.polyfrost.oneconfig.api.event.v1.events.ScreenOpenEvent; +import org.polyfrost.oneconfig.api.event.v1.events.TickEvent; import org.polyfrost.oneconfig.api.event.v1.invoke.EventHandler; import org.polyfrost.oneconfig.api.ui.v1.screen.BlurScreen; import org.polyfrost.oneconfig.internal.mixin.Mixin_ShaderListAccessor; +import org.polyfrost.polyui.animate.Animation; import java.util.List; @@ -57,16 +58,14 @@ public final class BlurHandler { public static final BlurHandler INSTANCE = new BlurHandler(); private static final Logger LOGGER = LogManager.getLogger("OneConfig/Blur"); private final ResourceLocation blurShader = new ResourceLocation("shaders/post/fade_in_blur.json"); + private final Animation animation = Animation.Type.Default.create(2_000_000_000, 0f, 5f); private ShaderUniform su; - private long start; - private float progress = 0; private BlurHandler() { EventHandler.ofRemoving(ScreenOpenEvent.class, e -> reloadBlur(e.getScreen())).register(); - EventManager.register(RenderEvent.End.class, () -> { + EventManager.register(TickEvent.End.class, () -> { if (su == null) return; - if (progress >= 5f) return; - su.set(getBlurStrengthProgress()); + su.set(animation.update(50_000_000L)); }); } @@ -115,13 +114,13 @@ private boolean reloadBlur(Object gui) { ShaderUniform su = sm.getShaderUniform("Progress"); if (su == null) continue; this.su = su; + animation.reset(); + return false; } if (su == null) { LOGGER.error("Failed to get ShaderUniform for blur on GUI {}. It has been disabled. Please report this!", gui.getClass().getName()); return true; } - this.start = System.currentTimeMillis(); - this.progress = 0; } catch (Exception ex) { LOGGER.error("An error occurred while updating OneConfig's blur. It has been disabled. Please report this!", ex); return true; @@ -146,15 +145,6 @@ private void tryStop() { Minecraft.getMinecraft().entityRenderer.stopUseShader(); } - /** - * Returns the strength of the blur as determined by the duration the effect of the blur. - *

- * The strength of the blur does not go above 5.0F. - */ - private float getBlurStrengthProgress() { - return Math.min((System.currentTimeMillis() - this.start) / 50F, 5.0F); - } - @SuppressWarnings("BooleanMethodIsAlwaysInverted") public boolean isShaderActive() { return Minecraft.getMinecraft().entityRenderer.getShaderGroup() != null diff --git a/versions/src/main/java/org/polyfrost/oneconfig/internal/OneConfig.java b/versions/src/main/java/org/polyfrost/oneconfig/internal/OneConfig.java index 4645125b2..2bc06d216 100644 --- a/versions/src/main/java/org/polyfrost/oneconfig/internal/OneConfig.java +++ b/versions/src/main/java/org/polyfrost/oneconfig/internal/OneConfig.java @@ -84,12 +84,12 @@ private void onInit(net.minecraftforge.fml.common.event.FMLPostInitializationEve //#else //$$ @Override //$$ public void onInitializeClient() { - //$$ // Uhhhhhhhhhhhhhhhhhhhhhhhhhhh...................... + //$$ init(); //$$ } //#endif - public void init() { + private void init() { //#if FABRIC //$$ try { //$$ Class.forName("org.polyfrost.oneconfig.test.TestMod_Test", false, getClass().getClassLoader()); @@ -114,17 +114,21 @@ public void init() { } private static void registerCommands() { - CommandBuilder b = CommandBuilder.command("oneconfig", "ocfg", "ocfgv1").description("OneConfig main command"); + CommandBuilder b = CommandBuilder.command("oneconfig", "ocfg", "twoconfig").description("OneConfig main command"); b.then(runs().does((Runnable) OneConfigUI.INSTANCE::open).description("Opens the OneConfig GUI")); b.then(runs("updateCheck").does(() -> Multithreading.submit(() -> UChat.chat(MavenUpdateChecker.oneconfig().hasUpdate() ? "Update available!" : "No updates available"))).description("Check for updates")); b.then(runs("locraw").does(() -> UChat.chat(HypixelUtils.getLocation()))).description("Get your current location on Hypixel"); b.then(runs("hud").does(() -> Platform.screen().display(HudManager.INSTANCE.getWithEditor())).description("Opens the OneConfig HUD editor")); + b.then(runs("delete").does(() -> { + OneConfigUI.INSTANCE.invalidateCache(); + UChat.chat("OK"); + })).description("Invalidate the OneConfig UI, forcing a reload. Use this if it is bugged and make sure to report an issue!"); CommandManager.registerCommand(b.build()); } private static void registerKeybinds() { OCKeybindHelper builder = OCKeybindHelper.builder(); - if (Platform.loader().isDevelopmentEnvironment()) builder.inScreens(); + if (Platform.loader().isDevelopment()) builder.inScreens(); builder.mods(KeyModifiers.RSHIFT).does((s) -> { if (s) OneConfigUI.INSTANCE.open(); return Unit.INSTANCE; diff --git a/versions/src/main/java/org/polyfrost/oneconfig/internal/OneConfigMixinInit.java b/versions/src/main/java/org/polyfrost/oneconfig/internal/OneConfigMixinInit.java index b0193b06a..accd72edf 100644 --- a/versions/src/main/java/org/polyfrost/oneconfig/internal/OneConfigMixinInit.java +++ b/versions/src/main/java/org/polyfrost/oneconfig/internal/OneConfigMixinInit.java @@ -68,19 +68,18 @@ public List getMixins() { if (version < 11300) { // legacy forge mixins.add("compat.OneConfigV0CompatMixin"); - mixins.add("forge.Mixin_ASMModParser_IgnoreForgeJava9Spam"); - mixins.add("forge.Mixin_JarDiscoverer_IgnoreForgeJava9Spam"); + mixins.add("fixes.Mixin_ASMModParser_IgnoreForgeJava9Spam"); + mixins.add("fixes.Mixin_JarDiscoverer_IgnoreForgeJava9Spam"); mixins.add("hidpi.Mixin_FixLoadingScreenHiDPI"); } } else { // fabric specific - mixins.add("Mixin_ModernEntrypoint"); mixins.add("fabric.Mixin_LoadShaderInvoker"); mixins.add("fabric.Mixin_ChatReceiveEvent_Fabric"); if (version <= 11300) { // legacy fabric + mixins.add("commands.Mixin_ExecuteCommandsFromScreen"); mixins.add("commands.Mixin_IncludeCommandSuggestions"); - mixins.add("Mixin_ExecuteCommandsFromScreen"); } if (version > 12000) { diff --git a/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/Mixin_ModernEntrypoint.java b/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/Mixin_ModernEntrypoint.java deleted file mode 100644 index 62ac0b9b8..000000000 --- a/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/Mixin_ModernEntrypoint.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.polyfrost.oneconfig.internal.mixin; - -//#if FABRIC -//$$ import net.minecraft.client.MinecraftClient; -//$$ import org.polyfrost.oneconfig.internal.OneConfig; -//$$ import org.spongepowered.asm.mixin.Mixin; -//$$ import org.spongepowered.asm.mixin.Unique; -//$$ import org.spongepowered.asm.mixin.injection.At; -//$$ import org.spongepowered.asm.mixin.injection.Inject; -//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -//$$ -//$$ @Mixin(MinecraftClient.class) -//$$ public class Mixin_ModernEntrypoint { -//$$ -//$$ @Unique -//$$ private boolean ocfg$initialized = false; -//$$ -//$$ @Inject(method = "", at = @At("RETURN")) -//$$ private void ocfg$entrypoint(CallbackInfo ci) { -//$$ if (ocfg$initialized) { -//$$ return; -//$$ } -//$$ -//$$ OneConfig.INSTANCE.init(); -//$$ ocfg$initialized = true; -//$$ } -//$$ -//$$ } -//#endif diff --git a/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/forge/Mixin_ASMModParser_IgnoreForgeJava9Spam.java b/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/fixes/Mixin_ASMModParser_IgnoreForgeJava9Spam.java similarity index 97% rename from versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/forge/Mixin_ASMModParser_IgnoreForgeJava9Spam.java rename to versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/fixes/Mixin_ASMModParser_IgnoreForgeJava9Spam.java index a54d0f5bd..952de65c3 100644 --- a/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/forge/Mixin_ASMModParser_IgnoreForgeJava9Spam.java +++ b/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/fixes/Mixin_ASMModParser_IgnoreForgeJava9Spam.java @@ -25,7 +25,7 @@ */ //#if FORGE && MC <= 1.12.2 -package org.polyfrost.oneconfig.internal.mixin.forge; +package org.polyfrost.oneconfig.internal.mixin.fixes; //#if MC >= 1.12.2 //$$ import org.apache.logging.log4j.Logger; diff --git a/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/forge/Mixin_JarDiscoverer_IgnoreForgeJava9Spam.java b/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/fixes/Mixin_JarDiscoverer_IgnoreForgeJava9Spam.java similarity index 96% rename from versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/forge/Mixin_JarDiscoverer_IgnoreForgeJava9Spam.java rename to versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/fixes/Mixin_JarDiscoverer_IgnoreForgeJava9Spam.java index 90c1299df..83528a33e 100644 --- a/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/forge/Mixin_JarDiscoverer_IgnoreForgeJava9Spam.java +++ b/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/fixes/Mixin_JarDiscoverer_IgnoreForgeJava9Spam.java @@ -25,7 +25,7 @@ */ //#if FORGE && MC <= 1.12.2 -package org.polyfrost.oneconfig.internal.mixin.forge; +package org.polyfrost.oneconfig.internal.mixin.fixes; //#if MC >= 1.12.2 //$$ import org.apache.logging.log4j.Logger; @@ -36,7 +36,6 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import net.minecraftforge.fml.common.LoaderException; import net.minecraftforge.fml.common.discovery.JarDiscoverer; -import org.apache.logging.log4j.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/hidpi/Mixin_FixDisplaySizeHiDPI.java b/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/hidpi/Mixin_FixDisplaySizeHiDPI.java index 3d42f8b81..37de6bdcd 100644 --- a/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/hidpi/Mixin_FixDisplaySizeHiDPI.java +++ b/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/hidpi/Mixin_FixDisplaySizeHiDPI.java @@ -2,6 +2,7 @@ //#if MC < 1.13 import net.minecraft.client.Minecraft; +import org.apache.logging.log4j.LogManager; import org.lwjgl.opengl.Display; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -33,6 +34,7 @@ private int hiDpiFixResizeH(int value) { @Inject(method = "startGame", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;createDisplay()V", shift = At.Shift.AFTER)) private void hiDpiFixDisplaySizes(CallbackInfo ci) { float scale = Display.getPixelScaleFactor(); + LogManager.getLogger("OneConfig/HiDPI").info("got window scale factor of {}", scale); this.displayWidth = (int) (this.displayWidth * scale); this.displayHeight = (int) (this.displayHeight * scale); this.tempDisplayWidth = (int) (this.tempDisplayWidth * scale);