diff --git a/src/main/java/org/auraclient/auracloaks/AuraCloaks.java b/src/main/java/org/auraclient/auraclient/AuraClient.java similarity index 92% rename from src/main/java/org/auraclient/auracloaks/AuraCloaks.java rename to src/main/java/org/auraclient/auraclient/AuraClient.java index 2181aab..b7c4ceb 100644 --- a/src/main/java/org/auraclient/auracloaks/AuraCloaks.java +++ b/src/main/java/org/auraclient/auraclient/AuraClient.java @@ -1,10 +1,10 @@ -package org.auraclient.auracloaks; +package org.auraclient.auraclient; import at.dhyan.open_imaging.GifDecoder; -import org.auraclient.auracloaks.event.KeyInputHandler; -import org.auraclient.auracloaks.utils.AnimatedCapeData; -import org.auraclient.auracloaks.utils.IdentifierUtils; -import org.auraclient.auracloaks.utils.RandomUtils; +import org.auraclient.auraclient.event.KeyInputHandler; +import org.auraclient.auraclient.utils.AnimatedCapeData; +import org.auraclient.auraclient.utils.IdentifierUtils; +import org.auraclient.auraclient.utils.RandomUtils; import net.fabricmc.api.ModInitializer; import net.minecraft.client.MinecraftClient; import net.minecraft.util.Identifier; @@ -25,8 +25,8 @@ import java.util.Objects; * Massive thank you to IIpho3nix for making this mod, i (leo) have modified it to fit Aura Client */ -public class AuraCloaks implements ModInitializer { - public static final String MOD_ID = "auracloaks"; +public class AuraClient implements ModInitializer { + public static final String MOD_ID = "auraclient"; public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); private static final File capesFolder = new File(MinecraftClient.getInstance().runDirectory, "Capes"); public static final List list = new ArrayList<>(); diff --git a/src/main/java/org/auraclient/auraclient/event/KeyInputHandler.java b/src/main/java/org/auraclient/auraclient/event/KeyInputHandler.java new file mode 100644 index 0000000..4455e30 --- /dev/null +++ b/src/main/java/org/auraclient/auraclient/event/KeyInputHandler.java @@ -0,0 +1,27 @@ +package org.auraclient.auraclient.event; + +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.minecraft.client.option.KeyBinding; +import net.minecraft.client.util.InputUtil; +import org.auraclient.auraclient.menus.MainMenu; +import org.lwjgl.glfw.GLFW; + +public class KeyInputHandler { + public static final String KEY_CATEGORY_CAPES = "key.category.auraclient"; + public static final String KEY_MAIN_MENU = "key.auraclient.main_menu"; + public static KeyBinding mainMenuKey; + + public static void register() { + mainMenuKey = KeyBindingHelper.registerKeyBinding(new KeyBinding( + KEY_MAIN_MENU, InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_SHIFT, KEY_CATEGORY_CAPES + )); + + ClientTickEvents.END_CLIENT_TICK.register(client -> { + if (mainMenuKey.wasPressed()) { + client.setScreen(new MainMenu()); + } + }); + } +} + diff --git a/src/main/java/org/auraclient/auraclient/menus/MainMenu.java b/src/main/java/org/auraclient/auraclient/menus/MainMenu.java new file mode 100644 index 0000000..35c832b --- /dev/null +++ b/src/main/java/org/auraclient/auraclient/menus/MainMenu.java @@ -0,0 +1,25 @@ +package org.auraclient.auraclient.menus; + +import net.minecraft.client.gui.DrawContext; +import net.minecraft.text.Text; +import org.auraclient.auraclient.AuraClient; +import org.auraclient.auraclient.ui.AuraUi; +import org.auraclient.auraclient.ui.Button; + +public class MainMenu extends AuraUi { + public MainMenu() { + super(Text.of("Main Menu")); + } + + @Override + public void ui(DrawContext context) { + widgets.add(new Button("Cloaks", (context.getScaledWindowWidth() - 50) / 2, (context.getScaledWindowHeight() - 20) / 2, 50, 20, () -> { + if (AuraClient.list.indexOf(AuraClient.cape) + 1 == AuraClient.list.size()) { + AuraClient.cape = AuraClient.list.get(0); + AuraClient.capeCacheIdentifier = null; + } else { + AuraClient.cape = AuraClient.list.get(AuraClient.list.indexOf(AuraClient.cape) + 1); + }; + })); + } +} diff --git a/src/main/java/org/auraclient/auracloaks/mixin/AbstractClientPlayerEntityMixin.java b/src/main/java/org/auraclient/auraclient/mixin/AbstractClientPlayerEntityMixin.java similarity index 85% rename from src/main/java/org/auraclient/auracloaks/mixin/AbstractClientPlayerEntityMixin.java rename to src/main/java/org/auraclient/auraclient/mixin/AbstractClientPlayerEntityMixin.java index 8fd5917..502c7da 100644 --- a/src/main/java/org/auraclient/auracloaks/mixin/AbstractClientPlayerEntityMixin.java +++ b/src/main/java/org/auraclient/auraclient/mixin/AbstractClientPlayerEntityMixin.java @@ -1,6 +1,6 @@ -package org.auraclient.auracloaks.mixin; +package org.auraclient.auraclient.mixin; -import org.auraclient.auracloaks.AuraCloaks; +import org.auraclient.auraclient.AuraClient; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.network.AbstractClientPlayerEntity; @@ -16,12 +16,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; public class AbstractClientPlayerEntityMixin { @Inject(at = @At("RETURN"), method = "getSkinTextures", cancellable = true) private void getSkinTextures(CallbackInfoReturnable cir) { - if (((AbstractClientPlayerEntity) (Object) this) instanceof ClientPlayerEntity && AuraCloaks.capeCacheIdentifier != null) { + if (((AbstractClientPlayerEntity) (Object) this) instanceof ClientPlayerEntity && AuraClient.capeCacheIdentifier != null) { SkinTextures textures = cir.getReturnValue(); cir.setReturnValue(new SkinTextures( textures.texture(), textures.textureUrl(), - AuraCloaks.capeCacheIdentifier, + AuraClient.capeCacheIdentifier, textures.elytraTexture(), textures.model(), textures.secure() diff --git a/src/main/java/org/auraclient/auracloaks/mixin/MinecraftClientMixin.java b/src/main/java/org/auraclient/auraclient/mixin/MinecraftClientMixin.java similarity index 82% rename from src/main/java/org/auraclient/auracloaks/mixin/MinecraftClientMixin.java rename to src/main/java/org/auraclient/auraclient/mixin/MinecraftClientMixin.java index 42fa321..0f0ee98 100644 --- a/src/main/java/org/auraclient/auracloaks/mixin/MinecraftClientMixin.java +++ b/src/main/java/org/auraclient/auraclient/mixin/MinecraftClientMixin.java @@ -1,6 +1,6 @@ -package org.auraclient.auracloaks.mixin; +package org.auraclient.auraclient.mixin; -import org.auraclient.auracloaks.AuraCloaks; +import org.auraclient.auraclient.AuraClient; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; @@ -14,6 +14,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public class MinecraftClientMixin { @Inject(at = @At("HEAD"), method = "tick") private void tick(CallbackInfo ci) { - AuraCloaks.tick(); + AuraClient.tick(); } } diff --git a/src/main/java/org/auraclient/auraclient/ui/AuraUi.java b/src/main/java/org/auraclient/auraclient/ui/AuraUi.java new file mode 100644 index 0000000..17ada68 --- /dev/null +++ b/src/main/java/org/auraclient/auraclient/ui/AuraUi.java @@ -0,0 +1,49 @@ +package org.auraclient.auraclient.ui; + +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.text.Text; + +import java.util.ArrayList; + +public abstract class AuraUi extends Screen { + public final ArrayList widgets = new ArrayList<>(); + + protected AuraUi(Text title) { + super(title); + } + + @Override + protected void init() {} + + public void ui(DrawContext context) {} + + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + widgets.clear(); + + ui(context); + + for (AuraWidget widget : widgets) { + widget.client = client; + widget.render(context, isInside(mouseX, mouseY, widget.x1, widget.y1, widget.x2, widget.y2)); + } + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int button) { + if (button == 0) { + for (AuraWidget widget : widgets) { + if (isInside(mouseX, mouseY, widget.x1, widget.y1, widget.x2, widget.y2)) { + widget.mouseClicked(); + } + } + } + + return super.mouseClicked(mouseX, mouseY, button); + } + + private boolean isInside(double mouseX, double mouseY, int x1, int y1, int x2, int y2) { + return mouseX >= x1 && mouseX <= x2 && mouseY >= y1 && mouseY <= y2; + } +} diff --git a/src/main/java/org/auraclient/auraclient/ui/AuraWidget.java b/src/main/java/org/auraclient/auraclient/ui/AuraWidget.java new file mode 100644 index 0000000..037bb71 --- /dev/null +++ b/src/main/java/org/auraclient/auraclient/ui/AuraWidget.java @@ -0,0 +1,19 @@ +package org.auraclient.auraclient.ui; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; + +public abstract class AuraWidget { + public int x1; + public int y1; + public int x2; + public int y2; + public MinecraftClient client; + + public static int background = 0x5F000000; + public static int foreground = 0xFFFFFFFF; + + void render(DrawContext context, boolean hover) {} + + void mouseClicked() {} +} diff --git a/src/main/java/org/auraclient/auraclient/ui/Box.java b/src/main/java/org/auraclient/auraclient/ui/Box.java new file mode 100644 index 0000000..d24709f --- /dev/null +++ b/src/main/java/org/auraclient/auraclient/ui/Box.java @@ -0,0 +1,17 @@ +package org.auraclient.auraclient.ui; + +import net.minecraft.client.gui.DrawContext; + +public class Box extends AuraWidget { + public Box(int x, int y, int width, int height) { + x1 = x; + y1 = y; + + x2 = x + width; + y2 = y + height; + } + + public void render(DrawContext context, boolean hover) { + context.fill(x1, y1, x2, y2, background); + } +} diff --git a/src/main/java/org/auraclient/auraclient/ui/Button.java b/src/main/java/org/auraclient/auraclient/ui/Button.java new file mode 100644 index 0000000..75baace --- /dev/null +++ b/src/main/java/org/auraclient/auraclient/ui/Button.java @@ -0,0 +1,35 @@ +package org.auraclient.auraclient.ui; + +import net.minecraft.client.gui.DrawContext; + +public class Button extends AuraWidget { + public Runnable onClick; + public String text; + public static int hoverBorder = 0xFFFFFFFF; + + public Button(String button_text, int x, int y, int width, int height, Runnable on_click) { + x1 = x; + y1 = y; + + x2 = x + width; + y2 = y + height; + + onClick = on_click; + text = button_text; + } + + public void render(DrawContext context, boolean hover) { + + context.fill(x1, y1, x2, y2, background); + + context.drawText(client.textRenderer, text, (((x2 - x1) - client.textRenderer.getWidth(text)) / 2) + x1, (((y2 - y1) - 6) / 2) + y1, foreground, false); + + if (hover) { + context.drawBorder(x1 - 1, y1 - 1, x2 - x1 + 2, y2 - y1 + 2, hoverBorder); + } + } + + public void mouseClicked() { + onClick.run(); + } +} \ No newline at end of file diff --git a/src/main/java/org/auraclient/auracloaks/utils/AnimatedCapeData.java b/src/main/java/org/auraclient/auraclient/utils/AnimatedCapeData.java similarity index 89% rename from src/main/java/org/auraclient/auracloaks/utils/AnimatedCapeData.java rename to src/main/java/org/auraclient/auraclient/utils/AnimatedCapeData.java index 3b0694c..69b954e 100644 --- a/src/main/java/org/auraclient/auracloaks/utils/AnimatedCapeData.java +++ b/src/main/java/org/auraclient/auraclient/utils/AnimatedCapeData.java @@ -1,4 +1,4 @@ -package org.auraclient.auracloaks.utils; +package org.auraclient.auraclient.utils; import net.minecraft.util.Identifier; diff --git a/src/main/java/org/auraclient/auracloaks/utils/IdentifierUtils.java b/src/main/java/org/auraclient/auraclient/utils/IdentifierUtils.java similarity index 96% rename from src/main/java/org/auraclient/auracloaks/utils/IdentifierUtils.java rename to src/main/java/org/auraclient/auraclient/utils/IdentifierUtils.java index e6e8fe3..325ab3b 100644 --- a/src/main/java/org/auraclient/auracloaks/utils/IdentifierUtils.java +++ b/src/main/java/org/auraclient/auraclient/utils/IdentifierUtils.java @@ -1,4 +1,4 @@ -package org.auraclient.auracloaks.utils; +package org.auraclient.auraclient.utils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.texture.NativeImage; diff --git a/src/main/java/org/auraclient/auracloaks/utils/RandomUtils.java b/src/main/java/org/auraclient/auraclient/utils/RandomUtils.java similarity index 95% rename from src/main/java/org/auraclient/auracloaks/utils/RandomUtils.java rename to src/main/java/org/auraclient/auraclient/utils/RandomUtils.java index af16b36..219d3df 100644 --- a/src/main/java/org/auraclient/auracloaks/utils/RandomUtils.java +++ b/src/main/java/org/auraclient/auraclient/utils/RandomUtils.java @@ -1,4 +1,4 @@ -package org.auraclient.auracloaks.utils; +package org.auraclient.auraclient.utils; import java.util.Random; diff --git a/src/main/java/org/auraclient/auracloaks/event/KeyInputHandler.java b/src/main/java/org/auraclient/auracloaks/event/KeyInputHandler.java deleted file mode 100644 index 6b49ee7..0000000 --- a/src/main/java/org/auraclient/auracloaks/event/KeyInputHandler.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.auraclient.auracloaks.event; - -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; -import net.minecraft.client.option.KeyBinding; -import org.auraclient.auracloaks.AuraCloaks; -import net.minecraft.client.util.InputUtil; -import org.lwjgl.glfw.GLFW; - -public class KeyInputHandler { - public static final String KEY_CATEGORY_CAPES = "key.category.auracloaks"; - public static final String KEY_CHANGE_CAPE = "key.auracloaks.change_cape"; - - public static KeyBinding changeCapeKey; - - public static void register() { - changeCapeKey = KeyBindingHelper.registerKeyBinding(new KeyBinding( - KEY_CHANGE_CAPE, InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_N, KEY_CATEGORY_CAPES - )); - - ClientTickEvents.END_CLIENT_TICK.register(client -> { - if (changeCapeKey.wasPressed()) { - if (AuraCloaks.list.indexOf(AuraCloaks.cape) + 1 == AuraCloaks.list.size()) { - AuraCloaks.cape = AuraCloaks.list.get(0); - AuraCloaks.capeCacheIdentifier = null; - }else{ - AuraCloaks.cape = AuraCloaks.list.get(AuraCloaks.list.indexOf(AuraCloaks.cape) + 1); - }; - } - }); - } -} - diff --git a/src/main/resources/assets/auracloaks/icon.png b/src/main/resources/assets/auraclient/icon.png similarity index 100% rename from src/main/resources/assets/auracloaks/icon.png rename to src/main/resources/assets/auraclient/icon.png diff --git a/src/main/resources/auracloaks.mixins.json b/src/main/resources/auraclient.mixins.json similarity index 81% rename from src/main/resources/auracloaks.mixins.json rename to src/main/resources/auraclient.mixins.json index 86f78f6..74ec70d 100644 --- a/src/main/resources/auracloaks.mixins.json +++ b/src/main/resources/auraclient.mixins.json @@ -1,7 +1,7 @@ { "required": true, "minVersion": "0.8", - "package": "org.auraclient.auracloaks.mixin", + "package": "org.auraclient.auraclient.mixin", "compatibilityLevel": "JAVA_17", "client": [ "AbstractClientPlayerEntityMixin", diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 42c8bf0..7e84c46 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,8 +1,8 @@ { "schemaVersion": 1, - "id": "auracloaks", + "id": "auraclient", "version": "${version}", - "name": "Auracloaks", + "name": "auraclient", "description": "A local cape mod for fabric with support for animated capes", "authors": [ "IIpho3nix", @@ -13,15 +13,15 @@ "sources": "https://github.com/IIpho3nix/IIpho3nix-s-Capes-Mod" }, "license": "GPL-3.0", - "icon": "assets/auracloaks/icon.png", + "icon": "assets/auraclient/icon.png", "environment": "client", "entrypoints": { "main": [ - "org.auraclient.auracloaks.AuraCloaks" + "org.auraclient.auraclient.AuraClient" ] }, "mixins": [ - "auracloaks.mixins.json" + "auraclient.mixins.json" ], "depends": { "fabricloader": ">=${loader_version}",