From f9a6f61985ce5441b1e749a1296912c6a21e8a5f Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 22 Dec 2024 04:50:46 -0500 Subject: Consumable Protection (#1090) --- .../config/categories/GeneralCategory.java | 8 +++++ .../skyblocker/config/configs/GeneralConfig.java | 3 ++ .../skyblock/item/ConsumableProtection.java | 38 ++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/ConsumableProtection.java (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java index f7b0fead..b041a9fe 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java @@ -323,6 +323,14 @@ public class GeneralCategory { newValue -> config.general.itemProtection.slotLockStyle = newValue) .controller(ConfigUtils::createEnumCyclingListController) .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.general.itemProtection.protectValuableConsumables")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemProtection.protectValuableConsumables.@Tooltip"))) + .binding(defaults.general.itemProtection.protectValuableConsumables, + () -> config.general.itemProtection.protectValuableConsumables, + newValue -> config.general.itemProtection.protectValuableConsumables = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) .build()) //Wiki Lookup diff --git a/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java index f2396284..912dd769 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java @@ -212,6 +212,9 @@ public class GeneralConfig { public static class ItemProtection { @SerialEntry public SlotLockStyle slotLockStyle = SlotLockStyle.FANCY; + + @SerialEntry + public boolean protectValuableConsumables = true; } public enum SlotLockStyle { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/ConsumableProtection.java b/src/main/java/de/hysky/skyblocker/skyblock/item/ConsumableProtection.java new file mode 100644 index 00000000..ce4e1514 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/ConsumableProtection.java @@ -0,0 +1,38 @@ +package de.hysky.skyblocker.skyblock.item; + +import java.util.Set; + +import de.hysky.skyblocker.annotations.Init; +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.event.player.UseBlockCallback; +import net.fabricmc.fabric.api.event.player.UseItemCallback; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.world.World; + +public class ConsumableProtection { + private static final Set PROTECTED_CONSUMABLES = Set.of("NEW_BOTTLE_OF_JYRRE", "DARK_CACAO_TRUFFLE", "DISCRITE"); + + @Init + public static void init() { + UseItemCallback.EVENT.register(ConsumableProtection::onInteract); + //Prevents placing the items when they are player heads (counts for consuming them) + UseBlockCallback.EVENT.register((player, world, hand, hitResult) -> onInteract(player, world, hand)); + } + + private static ActionResult onInteract(PlayerEntity player, World world, Hand hand) { + if (world.isClient() && SkyblockerConfigManager.get().general.itemProtection.protectValuableConsumables && Utils.isOnSkyblock()) { + ItemStack stack = player.getStackInHand(hand); + String skyblockId = stack.getSkyblockId(); + + if (!skyblockId.isEmpty() && PROTECTED_CONSUMABLES.contains(skyblockId)) { + return ActionResult.FAIL; + } + } + + return ActionResult.PASS; + } +} -- cgit