diff options
| author | Yasin <a.piri@hotmail.de> | 2023-10-09 12:58:02 +0200 |
|---|---|---|
| committer | Yasin <a.piri@hotmail.de> | 2023-10-09 12:58:02 +0200 |
| commit | bd3f0329d0e391bd84b5f9e3ff207d9dd9815853 (patch) | |
| tree | 2fd1d1ef625f57acc2e4916c967d8d2393844798 /src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud | |
| parent | 2315b90da8117f28f66348927afdb621ee4fc815 (diff) | |
| download | Skyblocker-bd3f0329d0e391bd84b5f9e3ff207d9dd9815853.tar.gz Skyblocker-bd3f0329d0e391bd84b5f9e3ff207d9dd9815853.tar.bz2 Skyblocker-bd3f0329d0e391bd84b5f9e3ff207d9dd9815853.zip | |
new pr because fixing merge conflict would take too long
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud')
67 files changed, 0 insertions, 4198 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java deleted file mode 100644 index 8f18e367..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java +++ /dev/null @@ -1,39 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud; - -import org.lwjgl.glfw.GLFW; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; -import net.minecraft.client.option.KeyBinding; -import net.minecraft.client.util.InputUtil; - -public class TabHud { - - public static KeyBinding toggleB; - public static KeyBinding toggleA; - // public static KeyBinding mapTgl; - public static KeyBinding defaultTgl; - - public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Tab HUD"); - - public static void init() { - - toggleB = KeyBindingHelper.registerKeyBinding( - new KeyBinding("key.skyblocker.toggleB", - InputUtil.Type.KEYSYM, - GLFW.GLFW_KEY_B, - "key.categories.skyblocker")); - toggleA = KeyBindingHelper.registerKeyBinding( - new KeyBinding("key.skyblocker.toggleA", - InputUtil.Type.KEYSYM, - GLFW.GLFW_KEY_N, - "key.categories.skyblocker")); - defaultTgl = KeyBindingHelper.registerKeyBinding( - new KeyBinding("key.skyblocker.defaultTgl", - InputUtil.Type.KEYSYM, - GLFW.GLFW_KEY_M, - "key.categories.skyblocker")); - - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java deleted file mode 100644 index f02c7dc6..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java +++ /dev/null @@ -1,179 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder; - -import java.io.BufferedReader; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.NoSuchElementException; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.AlignStage; -import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.CollideStage; -import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.PipelineStage; -import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.PlaceStage; -import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.StackStage; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPlayerWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ErrorWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.util.Identifier; - -public class ScreenBuilder { - - // layout pipeline - private final ArrayList<PipelineStage> layoutPipeline = new ArrayList<>(); - - // all widget instances this builder knows - private final ArrayList<Widget> instances = new ArrayList<>(); - // maps alias -> widget instance - private final HashMap<String, Widget> objectMap = new HashMap<>(); - - private final String builderName; - - /** - * Create a ScreenBuilder from a json. - */ - public ScreenBuilder(Identifier ident) { - - try (BufferedReader reader = MinecraftClient.getInstance().getResourceManager().openAsReader(ident)) { - this.builderName = ident.getPath(); - - JsonObject json = JsonParser.parseReader(reader).getAsJsonObject(); - - JsonArray widgets = json.getAsJsonArray("widgets"); - JsonArray layout = json.getAsJsonArray("layout"); - - for (JsonElement w : widgets) { - JsonObject widget = w.getAsJsonObject(); - String name = widget.get("name").getAsString(); - String alias = widget.get("alias").getAsString(); - - Widget wid = instanceFrom(name, widget); - objectMap.put(alias, wid); - instances.add(wid); - } - - for (JsonElement l : layout) { - PipelineStage ps = createStage(l.getAsJsonObject()); - layoutPipeline.add(ps); - } - } catch (Exception ex) { - // rethrow as unchecked exception so that I don't have to catch anything in the ScreenMaster - throw new IllegalStateException("Failed to load file " + ident + ". Reason: " + ex.getMessage()); - } - } - - /** - * Try to find a class in the widget package that has the supplied name and - * call it's constructor. Manual work is required if the class has arguments. - */ - public Widget instanceFrom(String name, JsonObject widget) { - - // do widgets that require args the normal way - JsonElement arg; - switch (name) { - case "EventWidget" -> { - return new EventWidget(widget.get("inGarden").getAsBoolean()); - } - case "DungeonPlayerWidget" -> { - return new DungeonPlayerWidget(widget.get("player").getAsInt()); - } - case "ErrorWidget" -> { - arg = widget.get("text"); - if (arg == null) { - return new ErrorWidget(); - } else { - return new ErrorWidget(arg.getAsString()); - } - } - case "Widget" -> - // clown case sanity check. don't instantiate the superclass >:| - throw new NoSuchElementException(builderName + "[ERROR]: No such Widget type \"Widget\"!"); - } - - // reflect something together for the "normal" ones. - - // list all packages that might contain widget classes - // using Package isn't reliable, as some classes might not be loaded yet, - // causing the packages not to show. - String packbase = "me.xmrvizzy.skyblocker.skyblock.tabhud.widget"; - String[] packnames = { - packbase, - packbase + ".rift" - }; - - // construct the full class name and try to load. - Class<?> clazz = null; - for (String pn : packnames) { - try { - clazz = Class.forName(pn + "." + name); - } catch (LinkageError | ClassNotFoundException ex) { - continue; - } - } - - // load failed. - if (clazz == null) { - throw new NoSuchElementException(builderName + "/[ERROR]: No such Widget type \"" + name + "\"!"); - } - - // return instance of that class. - try { - Constructor<?> ctor = clazz.getConstructor(); - return (Widget) ctor.newInstance(); - } catch (NoSuchMethodException | InstantiationException | IllegalAccessException - | IllegalArgumentException | InvocationTargetException | SecurityException ex) { - throw new IllegalStateException(builderName + "/" + name + ": Internal error..."); - } - } - - /** - * Create a PipelineStage from a json object. - */ - public PipelineStage createStage(JsonObject descr) throws NoSuchElementException { - - String op = descr.get("op").getAsString(); - - return switch (op) { - case "place" -> new PlaceStage(this, descr); - case "stack" -> new StackStage(this, descr); - case "align" -> new AlignStage(this, descr); - case "collideAgainst" -> new CollideStage(this, descr); - default -> throw new NoSuchElementException("No such op " + op + " as requested by " + this.builderName); - }; - } - - /** - * Lookup Widget instance from alias name - */ - public Widget getInstance(String name) { - if (!this.objectMap.containsKey(name)) { - throw new NoSuchElementException("No widget with alias " + name + " in screen " + builderName); - } - return this.objectMap.get(name); - } - - /** - * Run the pipeline to build a Screen - */ - public void run(DrawContext context, int screenW, int screenH) { - - for (Widget w : instances) { - w.update(); - } - for (PipelineStage ps : layoutPipeline) { - ps.run(screenW, screenH); - } - for (Widget w : instances) { - w.render(context); - } - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java deleted file mode 100644 index 194ab3d4..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java +++ /dev/null @@ -1,144 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder; - -import java.io.BufferedReader; -import java.util.HashMap; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerLocator; -import net.fabricmc.fabric.api.resource.ResourceManagerHelper; -import net.fabricmc.fabric.api.resource.ResourcePackActivationType; -import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener; -import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.resource.Resource; -import net.minecraft.resource.ResourceManager; -import net.minecraft.resource.ResourceType; -import net.minecraft.util.Identifier; - -public class ScreenMaster { - - private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker"); - - private static final int VERSION = 1; - - private static final HashMap<String, ScreenBuilder> standardMap = new HashMap<>(); - private static final HashMap<String, ScreenBuilder> screenAMap = new HashMap<>(); - private static final HashMap<String, ScreenBuilder> screenBMap = new HashMap<>(); - - /** - * Load a screen mapping from an identifier - */ - public static void load(Identifier ident) { - - String path = ident.getPath(); - String[] parts = path.split("/"); - String screenType = parts[parts.length - 2]; - String location = parts[parts.length - 1]; - location = location.replace(".json", ""); - - ScreenBuilder sb = new ScreenBuilder(ident); - switch (screenType) { - case "standard" -> standardMap.put(location, sb); - case "screen_a" -> screenAMap.put(location, sb); - case "screen_b" -> screenBMap.put(location, sb); - } - } - - /** - * Top level render method. - * Calls the appropriate ScreenBuilder with the screen's dimensions - */ - public static void render(DrawContext context, int w, int h) { - String location = PlayerLocator.getPlayerLocation().internal; - HashMap<String, ScreenBuilder> lookup; - if (TabHud.toggleA.isPressed()) { - lookup = screenAMap; - } else if (TabHud.toggleB.isPressed()) { - lookup = screenBMap; - } else { - lookup = standardMap; - } - - ScreenBuilder sb = lookup.get(location); - // seems suboptimal, maybe load the default first into all possible values - // and then override? - if (sb == null) { - sb = lookup.get("default"); - } - - sb.run(context, w, h); - - } - - public static void init() { - - // WHY MUST IT ALWAYS BE SUCH NESTED GARBAGE MINECRAFT KEEP THAT IN DFU FFS - - FabricLoader.getInstance() - .getModContainer("skyblocker") - .ifPresent(container -> ResourceManagerHelper.registerBuiltinResourcePack( - new Identifier("skyblocker", "top_aligned"), - container, - ResourcePackActivationType.NORMAL)); - - ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener( - // ...why are we instantiating an interface again? - new SimpleSynchronousResourceReloadListener() { - @Override - public Identifier getFabricId() { - return new Identifier("skyblocker", "tabhud"); - } - - @Override - public void reload(ResourceManager manager) { - - standardMap.clear(); - screenAMap.clear(); - screenBMap.clear(); - - int excnt = 0; - - for (Map.Entry< |
