From ea355d9bb612a72c1d2787063512e038dffcfcad Mon Sep 17 00:00:00 2001 From: Jonathing Date: Mon, 23 Dec 2024 22:15:03 -0500 Subject: [PATCH] Add optional fix of use item duration, disabled by default (#10246) --- .../minecraft/world/entity/LivingEntity.java.patch | 2 +- .../java/net/minecraftforge/common/ForgeConfig.java | 11 +++++++++++ .../event/entity/living/LivingEntityUseItemEvent.java | 2 +- src/main/resources/assets/forge/lang/en_us.json | 2 ++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch index c963687ea3..0c3ee08fe7 100644 --- a/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch @@ -574,7 +574,7 @@ ItemStack itemstack = this.m_21120_(p_21159_); if (!itemstack.m_41619_() && !this.m_6117_()) { + int duration = net.minecraftforge.event.ForgeEventFactory.onItemUseStart(this, itemstack, itemstack.m_41779_()); -+ if (duration <= 0) return; ++ if (duration < net.minecraftforge.common.ForgeConfig.SERVER.getUseItemDuration()) return; this.f_20935_ = itemstack; - this.f_20936_ = itemstack.m_41779_(); + this.f_20936_ = duration; diff --git a/src/main/java/net/minecraftforge/common/ForgeConfig.java b/src/main/java/net/minecraftforge/common/ForgeConfig.java index 61153442e3..3512b8af2b 100644 --- a/src/main/java/net/minecraftforge/common/ForgeConfig.java +++ b/src/main/java/net/minecraftforge/common/ForgeConfig.java @@ -30,6 +30,8 @@ public class ForgeConfig { public final BooleanValue advertiseDedicatedServerToLan; + public final BooleanValue useItemWithDurationZero; + Server(ForgeConfigSpec.Builder builder) { builder.comment("Server configuration settings") .push("server"); @@ -74,8 +76,17 @@ public class ForgeConfig { .translation("forge.configgui.advertiseDedicatedServerToLan") .define("advertiseDedicatedServerToLan", true); + useItemWithDurationZero = builder + .comment("Set this to true to enable living entities to use items with durations of 0. Fixes being able to use Eyes of Ender repeatedly by holding down the use button. Disabled by default as it could change interactions with items of existing mods.") + .translation("forge.configgui.useItemWithDurationZero") + .define("useItemWithDurationZero", false); + builder.pop(); } + + public final int getUseItemDuration() { + return useItemWithDurationZero.get() ? 0 : 1; + } } /** diff --git a/src/main/java/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent.java b/src/main/java/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent.java index be4875808d..6650ee6c98 100644 --- a/src/main/java/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent.java +++ b/src/main/java/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent.java @@ -46,7 +46,7 @@ public class LivingEntityUseItemEvent extends LivingEvent * Drinking Potions/Milk * Guarding with a sword * - * Cancel the event, or set the duration or {@literal <=} 0 to prevent it from processing. + * Cancel the event, or set the duration or {@literal <} 0 to prevent it from processing. * */ @Cancelable diff --git a/src/main/resources/assets/forge/lang/en_us.json b/src/main/resources/assets/forge/lang/en_us.json index f49962e808..2b79ddd324 100644 --- a/src/main/resources/assets/forge/lang/en_us.json +++ b/src/main/resources/assets/forge/lang/en_us.json @@ -170,6 +170,8 @@ "forge.configgui.skipEmptyShapelessCheck": "Skip checking for empty ingredients in Shapeless Recipe Deserialization", "forge.configgui.forceSystemNanoTime.tooltip": "Force the use of System.nanoTime instead of glfwGetTime as the main client Time provider.", "forge.configgui.forceSystemNanoTime": "Force System.nanoTime", + "forge.configgui.useItemWithDurationZero": "Allow Use Item with Duration of 0", + "forge.configgui.useItemWithDurationZero.tooltip": "Set this to true to enable living entities to use items with durations of 0. Fixes being able to use Eyes of Ender repeatedly by holding down the use button. Disabled by default as it could change interactions with items of existing mods.", "forge.configgui.zoomInMissingModelTextInGui.tooltip": "Toggle off to make missing model text in the gui fit inside the slot.", "forge.configgui.zoomInMissingModelTextInGui": "Zoom in Missing model text in the GUI",