From c26480a5f8d536fb92ccb358fa5d9d7bc3d38f1c Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 14 Apr 2024 07:05:38 -0400 Subject: Refactor HandledScreenProviderMixin with pattern matching Also reformatted to use tabs because changing the tabs I used for the switch cases to spaces would've taken ages --- .../mixin/HandledScreenProviderMixin.java | 131 ++++++++++++--------- 1 file changed, 75 insertions(+), 56 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java index bf330d80..40534a43 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java @@ -23,60 +23,79 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(HandledScreens.Provider.class) public interface HandledScreenProviderMixin { - @Inject(method = "open", at = @At("HEAD"), cancellable = true) - default void skyblocker$open(Text name, ScreenHandlerType type, MinecraftClient client, int id, CallbackInfo ci) { - ClientPlayerEntity player = client.player; - if (player == null) return; - if (!Utils.isOnSkyblock()) return; - T screenHandler = type.create(id, player.getInventory()); - if (!(screenHandler instanceof GenericContainerScreenHandler containerScreenHandler)) return; - String nameLowercase = name.getString().toLowerCase(); - // Better party finder - if (SkyblockerConfigManager.get().general.betterPartyFinder && PartyFinderScreen.possibleInventoryNames.contains(nameLowercase)) { - if (client.currentScreen != null) { - String lowerCase = client.currentScreen.getTitle().getString().toLowerCase(); - if (lowerCase.contains("group builder")) return; - if (lowerCase.contains("select tier")) { - PartyFinderScreen.isInKuudraPartyFinder = true; - } else if (lowerCase.contains("catacombs")) { - PartyFinderScreen.isInKuudraPartyFinder = false; - } - } - if (PartyFinderScreen.isInKuudraPartyFinder) return; - client.player.currentScreenHandler = containerScreenHandler; - if (client.currentScreen instanceof PartyFinderScreen screen) { - screen.updateHandler(containerScreenHandler, name); - } else { - client.setScreen(new PartyFinderScreen(containerScreenHandler, player.getInventory(), name)); - } - - ci.cancel(); - // Fancy AH - } else if (SkyblockerConfigManager.get().general.fancyAuctionHouse.enabled && (nameLowercase.contains("auctions browser") || nameLowercase.contains("auctions: "))) { - AuctionHouseScreenHandler auctionHouseScreenHandler = AuctionHouseScreenHandler.of(containerScreenHandler, false); - client.player.currentScreenHandler = auctionHouseScreenHandler; - if (client.currentScreen instanceof AuctionBrowserScreen auctionBrowserScreen) { - auctionBrowserScreen.changeHandler(auctionHouseScreenHandler); - } else client.setScreen(new AuctionBrowserScreen(auctionHouseScreenHandler, client.player.getInventory())); - ci.cancel(); - } else if (SkyblockerConfigManager.get().general.fancyAuctionHouse.enabled && nameLowercase.contains("auction view")) { - AuctionHouseScreenHandler auctionHouseScreenHandler = AuctionHouseScreenHandler.of(containerScreenHandler, true); - client.player.currentScreenHandler = auctionHouseScreenHandler; - if (client.currentScreen instanceof AuctionViewScreen auctionViewScreen) { - auctionViewScreen.changeHandler(auctionHouseScreenHandler); - } else - client.setScreen(new AuctionViewScreen(auctionHouseScreenHandler, client.player.getInventory(), name)); - ci.cancel(); - } else if (SkyblockerConfigManager.get().general.fancyAuctionHouse.enabled && (nameLowercase.contains("confirm purchase") || nameLowercase.contains("confirm bid")) && client.currentScreen instanceof AuctionViewScreen auctionViewScreen) { - client.setScreen(auctionViewScreen.getConfirmPurchasePopup(name)); - client.player.currentScreenHandler = containerScreenHandler; - ci.cancel(); - // Fancy crafting table - } else if (SkyblockerConfigManager.get().general.fancyCraftingTable && name.getString().toLowerCase().contains("craft item")) { - SkyblockCraftingTableScreenHandler skyblockCraftingTableScreenHandler = new SkyblockCraftingTableScreenHandler(containerScreenHandler, player.getInventory()); - client.player.currentScreenHandler = skyblockCraftingTableScreenHandler; - client.setScreen(new SkyblockCraftingTableScreen(skyblockCraftingTableScreenHandler, player.getInventory(), Text.literal("Craft Item"))); - ci.cancel(); - } - } + + @Inject(method = "open", at = @At("HEAD"), cancellable = true) + default void skyblocker$open(Text name, ScreenHandlerType type, MinecraftClient client, int id, CallbackInfo ci) { + ClientPlayerEntity player = client.player; + if (player == null) return; + if (!Utils.isOnSkyblock()) return; + T screenHandler = type.create(id, player.getInventory()); + String nameLowercase = name.getString().toLowerCase(); + + switch (screenHandler) { + // Better party finder + case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().general.betterPartyFinder && PartyFinderScreen.possibleInventoryNames.contains(nameLowercase) -> { + if (client.currentScreen != null) { + String lowerCase = client.currentScreen.getTitle().getString().toLowerCase(); + if (lowerCase.contains("group builder")) return; + if (lowerCase.contains("select tier")) { + PartyFinderScreen.isInKuudraPartyFinder = true; + } else if (lowerCase.contains("catacombs")) { + PartyFinderScreen.isInKuudraPartyFinder = false; + } + } + + if (PartyFinderScreen.isInKuudraPartyFinder) return; + client.player.currentScreenHandler = containerScreenHandler; + + switch (client.currentScreen) { + case PartyFinderScreen screen -> screen.updateHandler(containerScreenHandler, name); + case null, default -> client.setScreen(new PartyFinderScreen(containerScreenHandler, player.getInventory(), name)); + } + + ci.cancel(); + } + + // Fancy AH + case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().general.fancyAuctionHouse.enabled && (nameLowercase.contains("auctions browser") || nameLowercase.contains("auctions: ")) -> { + AuctionHouseScreenHandler auctionHouseScreenHandler = AuctionHouseScreenHandler.of(containerScreenHandler, false); + client.player.currentScreenHandler = auctionHouseScreenHandler; + + switch (client.currentScreen) { + case AuctionBrowserScreen auctionBrowserScreen -> auctionBrowserScreen.changeHandler(auctionHouseScreenHandler); + case null, default -> client.setScreen(new AuctionBrowserScreen(auctionHouseScreenHandler, client.player.getInventory())); + } + + ci.cancel(); + } + + case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().general.fancyAuctionHouse.enabled && nameLowercase.contains("auction view") -> { + AuctionHouseScreenHandler auctionHouseScreenHandler = AuctionHouseScreenHandler.of(containerScreenHandler, true); + client.player.currentScreenHandler = auctionHouseScreenHandler; + + switch (client.currentScreen) { + case AuctionViewScreen auctionViewScreen -> auctionViewScreen.changeHandler(auctionHouseScreenHandler); + case null, default -> client.setScreen(new AuctionViewScreen(auctionHouseScreenHandler, client.player.getInventory(), name)); + } + + ci.cancel(); + } + + case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().general.fancyAuctionHouse.enabled && (nameLowercase.contains("confirm purchase") || nameLowercase.contains("confirm bid")) && client.currentScreen instanceof AuctionViewScreen auctionViewScreen -> { + client.setScreen(auctionViewScreen.getConfirmPurchasePopup(name)); + client.player.currentScreenHandler = containerScreenHandler; + ci.cancel(); + } + + // Fancy crafting table + case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().general.fancyCraftingTable && name.getString().toLowerCase().contains("craft item") -> { + SkyblockCraftingTableScreenHandler skyblockCraftingTableScreenHandler = new SkyblockCraftingTableScreenHandler(containerScreenHandler, player.getInventory()); + client.player.currentScreenHandler = skyblockCraftingTableScreenHandler; + client.setScreen(new SkyblockCraftingTableScreen(skyblockCraftingTableScreenHandler, player.getInventory(), Text.literal("Craft Item"))); + ci.cancel(); + } + + case null, default -> {} + } + } } -- cgit