From 97d4244e5072d42e0e76f5229b500e2a478acfb0 Mon Sep 17 00:00:00 2001 From: Yasin <19829407+LifeIsAParadox@users.noreply.github.com> Date: Mon, 23 Jun 2025 06:39:35 +0200 Subject: Small Fixes and Recipe Book Search Persistence (#1276) * Update build.gradle fix gradle error * Update gradle.properties fix modmenu error * Update SkyblockRecipeBookWidget.java recipe book dont forget * Update ItemProtection.java only block protected items to be placed into item frame while in private island and garden * Update PartyFinderScreen.java debug button only in debugging mode --------- Co-authored-by: Aaron <51387595+AzureAaron@users.noreply.github.com> --- .../dungeon/partyfinder/PartyFinderScreen.java | 5 +- .../skyblocker/skyblock/item/ItemProtection.java | 20 ++++--- .../recipebook/SkyblockRecipeBookWidget.java | 62 +++++++++++++--------- 3 files changed, 53 insertions(+), 34 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java index d2cfeac2..4b372558 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java @@ -5,6 +5,7 @@ import com.mojang.authlib.properties.PropertyMap; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.annotations.Init; +import de.hysky.skyblocker.debug.Debug; import de.hysky.skyblocker.utils.ItemUtils; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; import net.minecraft.block.entity.SignBlockEntity; @@ -221,7 +222,9 @@ public class PartyFinderScreen extends Screen { addDrawableChild(settingsButton); addDrawableChild(createPartyButton); addDrawableChild(settingsContainer); - addDrawableChild(ButtonWidget.builder(Text.of("DEBUG"), (a) -> DEBUG = !DEBUG).dimensions(width - 40, 0, 40, 20).build()); + if (Debug.debugEnabled()) { + addDrawableChild(ButtonWidget.builder(Text.of("DEBUG"), (a) -> DEBUG = !DEBUG).dimensions(width - 40, 0, 40, 20).build()); + } dirtiedTime = System.currentTimeMillis(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java index fcf2ae61..c691cc56 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java @@ -2,12 +2,12 @@ package de.hysky.skyblocker.skyblock.item; import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; - import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.annotations.Init; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.ItemUtils; +import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.Utils; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; @@ -27,7 +27,6 @@ import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.Identifier; - import net.minecraft.util.hit.EntityHitResult; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; @@ -50,8 +49,8 @@ public class ItemProtection { public static boolean isItemProtected(ItemStack stack) { if (stack == null) return false; - String itemUuid = ItemUtils.getItemUuid(stack); - return SkyblockerConfigManager.get().general.protectedItems.contains(itemUuid); + String itemUuid = ItemUtils.getItemUuid(stack); + return SkyblockerConfigManager.get().general.protectedItems.contains(itemUuid); } private static void registerCommand(CommandDispatcher dispatcher, CommandRegistryAccess registryAccess) { @@ -92,7 +91,7 @@ public class ItemProtection { public static void handleKeyPressed(ItemStack heldItem) { PlayerEntity playerEntity = MinecraftClient.getInstance().player; - if (playerEntity == null){ + if (playerEntity == null) { return; } if (!Utils.isOnSkyblock()) { @@ -100,10 +99,10 @@ public class ItemProtection { return; } - if (heldItem.isEmpty()) { + if (heldItem.isEmpty()) { playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.itemProtection.noItemUuid")), false); - return; - } + return; + } String itemUuid = ItemUtils.getItemUuid(heldItem); if (!itemUuid.isEmpty()) { @@ -134,6 +133,11 @@ public class ItemProtection { private static ActionResult onEntityInteract(PlayerEntity playerEntity, World world, Hand hand, Entity entity, @Nullable EntityHitResult entityHitResult) { if (!Utils.isOnSkyblock() || !world.isClient) return ActionResult.PASS; + + Location location = Utils.getLocation(); + if (!(location == Location.PRIVATE_ISLAND || location == Location.GARDEN)) { + return ActionResult.PASS; + } if (entity instanceof ItemFrameEntity itemFrame && itemFrame.getHeldItemStack().isEmpty()) { if (isItemProtected(playerEntity.getStackInHand(hand)) || HotbarSlotLock.isLocked(playerEntity.getInventory().getSelectedSlot())) { return ActionResult.FAIL; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/SkyblockRecipeBookWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/SkyblockRecipeBookWidget.java index adc9993b..680af462 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/SkyblockRecipeBookWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/SkyblockRecipeBookWidget.java @@ -1,15 +1,8 @@ package de.hysky.skyblocker.skyblock.itemlist.recipebook; -import java.util.List; -import java.util.Locale; - -import de.hysky.skyblocker.utils.render.gui.CyclingTextureWidget; -import net.minecraft.screen.ScreenHandler; -import org.jetbrains.annotations.Nullable; - import com.google.common.collect.Lists; - import de.hysky.skyblocker.mixins.accessors.RecipeBookWidgetAccessor; +import de.hysky.skyblocker.utils.render.gui.CyclingTextureWidget; import it.unimi.dsi.fastutil.Pair; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; @@ -23,9 +16,14 @@ import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.render.RenderLayer; import net.minecraft.recipe.RecipeFinder; import net.minecraft.recipe.display.RecipeDisplay; +import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.context.ContextParameterMap; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.Locale; /** * Based on {@link net.minecraft.client.gui.screen.recipebook.RecipeBookWidget}. @@ -38,13 +36,14 @@ public class SkyblockRecipeBookWidget extends RecipeBookWidget tabs = List.of( new SkyblockCraftingTab(this, SkyblockCraftingTab.CRAFTING_TABLE, new SkyblockCraftingRecipeResults()), new UpcomingEventsTab() - ); + ); private final List> tabButtons = Lists.newArrayList(); private Pair currentTab; @@ -65,29 +64,41 @@ public class SkyblockRecipeBookWidget extends RecipeBookWidget(this.searchField.getRight() + 4, this.searchField.getY(), 14, 14, FilterOption.ALL); - this.filterOption.setCycleListener(this::refilterSearchResults); - this.filterOption.setTextSupplier(option -> Text.translatable("skyblocker.config.general.itemList.filter." + option.name().toLowerCase(Locale.ENGLISH))); + // Init filter option once + if (this.filterOption == null) { + this.filterOption = new CyclingTextureWidget<>(this.searchField.getRight() + 4, this.searchField.getY(), 14, 14, FilterOption.ALL); + this.filterOption.setCycleListener(this::refilterSearchResults); + this.filterOption.setTextSupplier(option -> Text.translatable("skyblocker.config.general.itemList.filter." + option.name().toLowerCase(Locale.ENGLISH))); + } + + // Always update position of filter option + this.filterOption.setX(this.searchField.getRight() + 4); + this.filterOption.setY(this.searchField.getY()); - //Setup Tabs + // Setup Tabs this.tabButtons.clear(); for (RecipeTab tab : this.tabs) { this.tabButtons.add(Pair.of(tab, new SkyblockRecipeTabButton(tab.icon()))); } - //Since we clear the tabs when this is called, if a tab is set we need to update the instance + // Since we clear the tabs when this is called, if a tab is set we need to update the instance if (this.currentTab != null) { this.currentTab = this.tabButtons.stream() .filter(button -> button.first().equals(this.currentTab.first())) @@ -95,18 +106,17 @@ public class SkyblockRecipeBookWidget extends RecipeBookWidget