From 4d8e146384a6d7f11b3126ffc8e43451e993c506 Mon Sep 17 00:00:00 2001 From: KonaeAkira Date: Fri, 28 Jan 2022 16:01:18 +0100 Subject: Merge upstream --- .../skyblock/quicknav/QuickNavButton.java | 86 ++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java new file mode 100644 index 00000000..8e79b08e --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java @@ -0,0 +1,86 @@ +package me.xmrvizzy.skyblocker.skyblock.quicknav; + +import com.mojang.blaze3d.systems.RenderSystem; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; +import net.minecraft.client.gui.widget.ClickableWidget; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; +import net.minecraft.text.LiteralText; +import net.minecraft.util.Identifier; + +@Environment(value=EnvType.CLIENT) +public class QuickNavButton extends ClickableWidget { + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + private static final Identifier BUTTON_TEXTURE = new Identifier("textures/gui/container/creative_inventory/tabs.png"); + + @Override + public void appendNarrations(NarrationMessageBuilder builder) { + + } + + public enum Type { + TOP, + BOTTOM, + } + + private final Type type; + private boolean toggled; + private int u; + private int v; + private final String command; + private final ItemStack icon; + + public QuickNavButton(int x, int y, Type type, boolean toggled, String command, ItemStack icon) { + super(x, y, 28, 32, LiteralText.EMPTY); + this.type = type; + if (type == Type.BOTTOM) { + this.u = 28; + this.v = 64; + } else { + this.u = 28; + this.v = 0; + } + this.toggled = toggled; + if (toggled) this.v += 32; + this.command = command; + this.icon = icon; + } + + @Override + public void onClick(double mouseX, double mouseY) { + if (!this.toggled) { + this.toggled = true; + this.v += 32; + CLIENT.player.sendChatMessage(command); + } + } + + @Override + public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) { + RenderSystem.setShaderTexture(0, BUTTON_TEXTURE); + RenderSystem.disableDepthTest(); + // render button background + if (!this.toggled) { + if (this.type == Type.BOTTOM) + this.drawTexture(matrices, this.x, this.y + 4, this.u, this.v + 4, this.width, this.height - 4); + else + this.drawTexture(matrices, this.x, this.y, this.u, this.v, this.width, this.height - 4); + } else this.drawTexture(matrices, this.x, this.y, this.u, this.v, this.width, this.height); + // render button icon + if (!this.toggled) { + if (this.type == Type.BOTTOM) + CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 6); + else + CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 9); + } else { + if (this.type == Type.BOTTOM) + CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 9); + else + CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 6); + } + RenderSystem.enableDepthTest(); + } +} -- cgit From d81a655b095175396a13dc6d9a2a60cde2f844a0 Mon Sep 17 00:00:00 2001 From: KonaeAkira Date: Fri, 28 Jan 2022 17:13:58 +0100 Subject: Fix quicknav buttons not updating positions when opening recipe book --- .../skyblocker/mixin/HandledScreenAccessor.java | 17 ++++++++ .../skyblocker/skyblock/quicknav/QuickNav.java | 24 +++++------ .../skyblock/quicknav/QuickNavButton.java | 47 ++++++++++++---------- src/main/resources/skyblocker.mixins.json | 3 +- 4 files changed, 56 insertions(+), 35 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenAccessor.java (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenAccessor.java new file mode 100644 index 00000000..ea497b75 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenAccessor.java @@ -0,0 +1,17 @@ +package me.xmrvizzy.skyblocker.mixin; + +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(HandledScreen.class) +public interface HandledScreenAccessor { + @Accessor + int getX(); + @Accessor + int getY(); + @Accessor + int getBackgroundWidth(); + @Accessor + int getBackgroundHeight(); +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java index b86e6e32..ced2b783 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java @@ -11,25 +11,23 @@ import java.util.List; public class QuickNav { public static List init(String title, int left_x, int right_x, int top_y, int bottom_y) { List buttons = new ArrayList<>(); + try { + buttons.add(new QuickNavButton(0, title.contains("Your Skills"), "/skills", new ItemStack(Items.DIAMOND_SWORD))); + buttons.add(new QuickNavButton(1, title.contains("Collection"), "/collection", new ItemStack(Items.PAINTING))); - buttons.add(new QuickNavButton(left_x + 29 * 0, top_y, QuickNavButton.Type.TOP, title.contains("Your Skills"), "/skills", new ItemStack(Items.DIAMOND_SWORD))); - buttons.add(new QuickNavButton(left_x + 29 * 1, top_y, QuickNavButton.Type.TOP, title.contains("Collection"), "/collection", new ItemStack(Items.PAINTING))); - - buttons.add(new QuickNavButton(right_x - 29 * 1, bottom_y, QuickNavButton.Type.BOTTOM, title.contains("Craft Item"), "/craft", new ItemStack(Items.CRAFTING_TABLE))); - buttons.add(new QuickNavButton(right_x - 29 * 2, bottom_y, QuickNavButton.Type.BOTTOM, title.contains("Anvil"), "/anvil", new ItemStack(Items.ANVIL))); - buttons.add(new QuickNavButton(right_x - 29 * 3, bottom_y, QuickNavButton.Type.BOTTOM, title.contains("Enchant Item"), "/etable", new ItemStack(Items.ENCHANTING_TABLE))); + buttons.add(new QuickNavButton(3, title.contains("Pets"), "/pets", new ItemStack(Items.BONE))); + buttons.add(new QuickNavButton(4, title.contains("Wardrobe"), "/wardrobe", ItemStack.fromNbt(StringNbtReader.parse("{id:\"minecraft:leather_chestplate\", Count:1, tag:{display:{color:8991416}}}")))); + buttons.add(new QuickNavButton(5, title.contains("Storage"), "/storage", new ItemStack(Items.ENDER_CHEST))); - buttons.add(new QuickNavButton(left_x + 29 * 0, bottom_y, QuickNavButton.Type.BOTTOM, false, "/warp hub", new ItemStack(Items.COMPASS))); - buttons.add(new QuickNavButton(left_x + 29 * 1, bottom_y, QuickNavButton.Type.BOTTOM, false, "/warp dungeon_hub", new ItemStack(Items.WITHER_SKELETON_SKULL))); + buttons.add(new QuickNavButton(6, false, "/warp hub", new ItemStack(Items.COMPASS))); + buttons.add(new QuickNavButton(7, false, "/warp dungeon_hub", new ItemStack(Items.WITHER_SKELETON_SKULL))); - buttons.add(new QuickNavButton(right_x - 29 * 1, top_y, QuickNavButton.Type.TOP, title.contains("Storage"), "/storage", new ItemStack(Items.ENDER_CHEST))); - try { - buttons.add(new QuickNavButton(right_x - 29 * 2, top_y, QuickNavButton.Type.TOP, title.contains("Wardrobe"), "/wardrobe", ItemStack.fromNbt(StringNbtReader.parse("{id:\"minecraft:leather_chestplate\", Count:1, tag:{display:{color:8991416}}}")))); + buttons.add(new QuickNavButton(9, title.contains("Enchant Item"), "/etable", new ItemStack(Items.ENCHANTING_TABLE))); + buttons.add(new QuickNavButton(10, title.contains("Anvil"), "/anvil", new ItemStack(Items.ANVIL))); + buttons.add(new QuickNavButton(11, title.contains("Craft Item"), "/craft", new ItemStack(Items.CRAFTING_TABLE))); } catch (CommandSyntaxException e) { e.printStackTrace(); } - buttons.add(new QuickNavButton(right_x - 29 * 3, top_y, QuickNavButton.Type.TOP, title.contains("Pets"), "/pets", new ItemStack(Items.BONE))); - return buttons; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java index 8e79b08e..77181332 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java @@ -1,9 +1,12 @@ package me.xmrvizzy.skyblocker.skyblock.quicknav; import com.mojang.blaze3d.systems.RenderSystem; +import me.xmrvizzy.skyblocker.mixin.HandledScreenAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.util.math.MatrixStack; @@ -21,62 +24,64 @@ public class QuickNavButton extends ClickableWidget { } - public enum Type { - TOP, - BOTTOM, - } - - private final Type type; + private int index; private boolean toggled; private int u; private int v; private final String command; private final ItemStack icon; - public QuickNavButton(int x, int y, Type type, boolean toggled, String command, ItemStack icon) { - super(x, y, 28, 32, LiteralText.EMPTY); - this.type = type; - if (type == Type.BOTTOM) { - this.u = 28; - this.v = 64; - } else { - this.u = 28; - this.v = 0; - } + public QuickNavButton(int index, boolean toggled, String command, ItemStack icon) { + super(0, 0, 28, 32, LiteralText.EMPTY); + this.index = index; this.toggled = toggled; - if (toggled) this.v += 32; this.command = command; this.icon = icon; } + private void updateCoordinates() { + Screen screen = MinecraftClient.getInstance().currentScreen; + if (screen instanceof HandledScreen) { + HandledScreen handledScreen = (HandledScreen) screen; + int x = ((HandledScreenAccessor)handledScreen).getX(); + int y = ((HandledScreenAccessor)handledScreen).getY(); + int w = ((HandledScreenAccessor)handledScreen).getBackgroundWidth(); + int h = ((HandledScreenAccessor)handledScreen).getBackgroundHeight(); + this.x = x + this.index % 6 * 28 + 4; + this.y = this.index < 6 ? y - 28 : y + h - 4; + this.u = 28; + this.v = (index < 6 ? 0 : 64) + (toggled ? 32 : 0); + } + } + @Override public void onClick(double mouseX, double mouseY) { if (!this.toggled) { this.toggled = true; - this.v += 32; CLIENT.player.sendChatMessage(command); } } @Override public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) { + this.updateCoordinates(); RenderSystem.setShaderTexture(0, BUTTON_TEXTURE); RenderSystem.disableDepthTest(); // render button background if (!this.toggled) { - if (this.type == Type.BOTTOM) + if (this.index >= 6) this.drawTexture(matrices, this.x, this.y + 4, this.u, this.v + 4, this.width, this.height - 4); else this.drawTexture(matrices, this.x, this.y, this.u, this.v, this.width, this.height - 4); } else this.drawTexture(matrices, this.x, this.y, this.u, this.v, this.width, this.height); // render button icon if (!this.toggled) { - if (this.type == Type.BOTTOM) + if (this.index >= 6) CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 6); else CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 9); } else { - if (this.type == Type.BOTTOM) + if (this.index >= 6) CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 9); else CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 6); diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 3bf7625e..f07fbfc8 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -15,7 +15,8 @@ "GenericContainerScreenHandlerMixin", "HandledScreenMixin", "InventoryScreenMixin", - "RecipeBookWidgetAccessor" + "RecipeBookWidgetAccessor", + "HandledScreenAccessor" ], "injectors": { "defaultRequire": 1 -- cgit From 4e8c2829717c6d220d4c0300f0f881ad0d702c6c Mon Sep 17 00:00:00 2001 From: KonaeAkira Date: Fri, 28 Jan 2022 17:28:24 +0100 Subject: Change hub and dungeon_hub warp quicknav icons --- .../skyblocker/mixin/HandledScreenMixin.java | 9 ++------ .../skyblocker/skyblock/quicknav/QuickNav.java | 24 ++++++++++++---------- .../skyblock/quicknav/QuickNavButton.java | 1 + 3 files changed, 16 insertions(+), 18 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 9ae5bf92..7dae036d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -28,13 +28,8 @@ public abstract class HandledScreenMixin extends Screen { private void init(CallbackInfo ci) { // quicknav if (Utils.isSkyblock && SkyblockerConfig.get().general.quicknav.enableQuicknav) { - String title = super.getTitle().getString().trim(); - int left_x = (super.width - this.backgroundWidth) / 2 + 4; - int right_x = (super.width + this.backgroundWidth) / 2 - 3; - int top_y = (super.height - this.backgroundHeight) / 2 - 28; - int bottom_y = (super.height + this.backgroundHeight) / 2 - 4; - if (this.backgroundHeight > 166) --bottom_y; // why is this even a thing - List buttons = QuickNav.init(title, left_x, right_x, top_y, bottom_y); + String screenTitle = super.getTitle().getString().trim(); + List buttons = QuickNav.init(screenTitle); for (QuickNavButton button : buttons) super.addDrawableChild(button); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java index ced2b783..bcc57a00 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java @@ -9,22 +9,24 @@ import java.util.ArrayList; import java.util.List; public class QuickNav { - public static List init(String title, int left_x, int right_x, int top_y, int bottom_y) { + private static final String skyblockHubIconNbt = "{id:\"minecraft:player_head\",Count:1,tag:{SkullOwner:{Id:[I;-300151517,-631415889,-1193921967,-1821784279],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}}}}"; + private static final String dungeonHubIconNbt = "{id:\"minecraft:player_head\",Count:1,tag:{SkullOwner:{Id:[I;1605800870,415127827,-1236127084,15358548],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg5MWQ1YjI3M2ZmMGJjNTBjOTYwYjJjZDg2ZWVmMWM0MGExYjk0MDMyYWU3MWU3NTQ3NWE1NjhhODI1NzQyMSJ9fX0=\"}]}}}}"; + public static List init(String screenTitle) { List buttons = new ArrayList<>(); try { - buttons.add(new QuickNavButton(0, title.contains("Your Skills"), "/skills", new ItemStack(Items.DIAMOND_SWORD))); - buttons.add(new QuickNavButton(1, title.contains("Collection"), "/collection", new ItemStack(Items.PAINTING))); + buttons.add(new QuickNavButton(0, screenTitle.contains("Your Skills"), "/skills", new ItemStack(Items.DIAMOND_SWORD))); + buttons.add(new QuickNavButton(1, screenTitle.contains("Collection"), "/collection", new ItemStack(Items.PAINTING))); - buttons.add(new QuickNavButton(3, title.contains("Pets"), "/pets", new ItemStack(Items.BONE))); - buttons.add(new QuickNavButton(4, title.contains("Wardrobe"), "/wardrobe", ItemStack.fromNbt(StringNbtReader.parse("{id:\"minecraft:leather_chestplate\", Count:1, tag:{display:{color:8991416}}}")))); - buttons.add(new QuickNavButton(5, title.contains("Storage"), "/storage", new ItemStack(Items.ENDER_CHEST))); + buttons.add(new QuickNavButton(3, screenTitle.contains("Pets"), "/pets", new ItemStack(Items.BONE))); + buttons.add(new QuickNavButton(4, screenTitle.contains("Wardrobe"), "/wardrobe", ItemStack.fromNbt(StringNbtReader.parse("{id:\"minecraft:leather_chestplate\", Count:1, tag:{display:{color:8991416}}}")))); + buttons.add(new QuickNavButton(5, screenTitle.contains("Storage"), "/storage", new ItemStack(Items.ENDER_CHEST))); - buttons.add(new QuickNavButton(6, false, "/warp hub", new ItemStack(Items.COMPASS))); - buttons.add(new QuickNavButton(7, false, "/warp dungeon_hub", new ItemStack(Items.WITHER_SKELETON_SKULL))); + buttons.add(new QuickNavButton(6, false, "/warp hub", ItemStack.fromNbt(StringNbtReader.parse(skyblockHubIconNbt)))); + buttons.add(new QuickNavButton(7, false, "/warp dungeon_hub", ItemStack.fromNbt(StringNbtReader.parse(dungeonHubIconNbt)))); - buttons.add(new QuickNavButton(9, title.contains("Enchant Item"), "/etable", new ItemStack(Items.ENCHANTING_TABLE))); - buttons.add(new QuickNavButton(10, title.contains("Anvil"), "/anvil", new ItemStack(Items.ANVIL))); - buttons.add(new QuickNavButton(11, title.contains("Craft Item"), "/craft", new ItemStack(Items.CRAFTING_TABLE))); + buttons.add(new QuickNavButton(9, screenTitle.contains("Enchant Item"), "/etable", new ItemStack(Items.ENCHANTING_TABLE))); + buttons.add(new QuickNavButton(10, screenTitle.contains("Anvil"), "/anvil", new ItemStack(Items.ANVIL))); + buttons.add(new QuickNavButton(11, screenTitle.contains("Craft Item"), "/craft", new ItemStack(Items.CRAFTING_TABLE))); } catch (CommandSyntaxException e) { e.printStackTrace(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java index 77181332..c31fa653 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java @@ -47,6 +47,7 @@ public class QuickNavButton extends ClickableWidget { int y = ((HandledScreenAccessor)handledScreen).getY(); int w = ((HandledScreenAccessor)handledScreen).getBackgroundWidth(); int h = ((HandledScreenAccessor)handledScreen).getBackgroundHeight(); + if (h > 166) --h; // why is this even a thing this.x = x + this.index % 6 * 28 + 4; this.y = this.index < 6 ? y - 28 : y + h - 4; this.u = 28; -- cgit