Skip to content

Commit

Permalink
red ily
Browse files Browse the repository at this point in the history
  • Loading branch information
ImToggle committed Jan 31, 2024
1 parent 799942f commit 084e1e9
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 52 deletions.
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ val shade: Configuration by configurations.creating {
sourceSets {
val dummy by creating
main {
dummy.compileClasspath += compileClasspath
compileClasspath += dummy.output
output.setResourcesDir(java.classesDirectory)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package cc.polyfrost.oneconfig.internal.hud;

import cc.polyfrost.oneconfig.config.elements.BasicOption;
import java.util.ArrayList;

public class HudCore {

public static boolean editing;

public static final ArrayList<BasicOption> hudOptions = new ArrayList<>();
}
96 changes: 45 additions & 51 deletions src/main/java/org/polyfrost/chatting/mixin/HUDUtilsMixin.java
Original file line number Diff line number Diff line change
@@ -1,69 +1,63 @@
package org.polyfrost.chatting.mixin;

import cc.polyfrost.oneconfig.config.Config;
import cc.polyfrost.oneconfig.config.elements.BasicOption;
import cc.polyfrost.oneconfig.hud.HUDUtils;
import cc.polyfrost.oneconfig.hud.Hud;
import org.polyfrost.chatting.chat.ChatHooks;
import cc.polyfrost.oneconfig.config.annotations.HUD;
import cc.polyfrost.oneconfig.config.core.ConfigUtils;
import cc.polyfrost.oneconfig.config.elements.*;
import cc.polyfrost.oneconfig.hud.*;
import cc.polyfrost.oneconfig.internal.hud.HudCore;
import org.polyfrost.chatting.chat.*;
import org.polyfrost.chatting.config.ChattingConfig;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.*;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;
import java.lang.reflect.Field;

@Mixin(HUDUtils.class)
@Mixin(value = HUDUtils.class, remap = false)
public class HUDUtilsMixin {

@Unique
private static boolean isChatWindow, isInputBox;

@Redirect(method = "addHudOptions", at = @At(value = "INVOKE", target = "Lcc/polyfrost/oneconfig/hud/Hud;setConfig(Lcc/polyfrost/oneconfig/config/Config;)V"), remap = false)
private static void detect(Hud instance, Config config) {
isChatWindow = instance.equals(ChattingConfig.INSTANCE.getChatWindow());
isInputBox = instance.equals(ChattingConfig.INSTANCE.getChatInput());
instance.setConfig(config);
@Inject(method = "addHudOptions", at = @At("TAIL"))
private static void hudUtils$modifyOptions(OptionPage page, Field field, Object instance, Config config, CallbackInfo ci) {
Hud hud = (Hud) ConfigUtils.getField(field, instance);
if (!(hud instanceof ChatWindow) && !(hud instanceof ChatInputBox)) return;
HUD hudAnnotation = field.getAnnotation(HUD.class);
HudCore.hudOptions.removeIf(HUDUtilsMixin::hudUtils$shouldRemove);
ConfigUtils.getSubCategory(page, hudAnnotation.category(), hudAnnotation.subcategory()).options.removeIf(HUDUtilsMixin::hudUtils$shouldRemove);
}

@Redirect(method = "addHudOptions", at = @At(value = "INVOKE", target = "Ljava/util/ArrayList;add(Ljava/lang/Object;)Z"), remap = false)
private static boolean paddingY(ArrayList instance, Object e) {
BasicOption option = (BasicOption) e;
if (isChatWindow || isInputBox) {
ArrayList<BasicOption> removeQueue = new ArrayList<>();
for (Object object : instance) {
BasicOption basicOption = (BasicOption) object;
List<String> shows = Arrays.asList("Show in F3 (Debug)", "Show in GUIs", "Enabled", "Position Alignment", "Scale");
if (basicOption.name.equals("Show in Chat") || (isInputBox && shows.contains(basicOption.name))) {
removeQueue.add(basicOption);
}
if (basicOption.name.equals("Input Field Draft")) {
basicOption.addListener(ChatHooks.INSTANCE::resetDraft);
}
if (isChatWindow) {
List<String> height = Arrays.asList("Focused Height (px)", "Unfocused Height (px)");
if (height.contains(basicOption.name)) {
basicOption.addDependency("Custom Chat Height", () -> ChattingConfig.INSTANCE.getChatWindow().getCustomChatHeight());
}
private static boolean hudUtils$shouldRemove(BasicOption option) {
String fieldName = option.getField().getName();
Object hud = option.getParent();
boolean isChatWindow = hud instanceof ChatWindow;
boolean isInputBox = hud instanceof ChatInputBox;
if (!isChatWindow && !isInputBox) return false;
switch (fieldName) {
case "showInChat":
return true;
case "enabled":
if (isInputBox) try {
option.getField().set(hud, true);
} catch (Exception ignored) {
}
}
instance.removeAll(removeQueue);
case "paddingX":
case "paddingY":
case "showInGuis":
case "showInDebug":
case "positionAlignment":
case "scale":
if (isInputBox) return true;
break;
case "inputFieldDraft":
option.addListener(ChatHooks.INSTANCE::resetDraft);
break;
case "focusedHeight":
case "unfocusedHeight":
option.addDependency("Custom Chat Height", () -> ChattingConfig.INSTANCE.getChatWindow().getCustomChatHeight());
break;
}
List<String> paddings = Arrays.asList("X-Padding", "Y-Padding");
if (isInputBox && paddings.contains(option.name)) return false;
return instance.add(option);
}

@Redirect(method = "addHudOptions", at = @At(value = "INVOKE", target = "Lcc/polyfrost/oneconfig/config/elements/BasicOption;addDependency(Ljava/lang/String;Ljava/util/function/Supplier;)V", ordinal = 5), remap = false)
private static void no(BasicOption instance, String optionName, Supplier<Boolean> supplier) {
if (isInputBox) return;
instance.addDependency(optionName, supplier);
return false;
}

@Redirect(method = "addHudOptions", at = @At(value = "INVOKE", target = "Lcc/polyfrost/oneconfig/config/elements/BasicOption;addDependency(Ljava/lang/String;Ljava/util/function/Supplier;)V", ordinal = 6), remap = false)
private static void no1(BasicOption instance, String optionName, Supplier<Boolean> supplier) {
if (isInputBox) return;
instance.addDependency(optionName, supplier);
}
}

0 comments on commit 084e1e9

Please sign in to comment.