From 13ce5ce283f7901c04628f068b1a28b1037b7ac3 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 9 Jan 2025 19:31:29 -0800 Subject: [PATCH] Infinity bow settings --- .../server/0091-Infinity-bow-settings.patch | 47 ------------------- .../minecraft/world/item/BowItem.java.patch | 23 +++++++++ .../purpurmc/purpur/PurpurWorldConfig.java | 5 ++ 3 files changed, 28 insertions(+), 47 deletions(-) delete mode 100644 patches/server/0091-Infinity-bow-settings.patch create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/world/item/BowItem.java.patch diff --git a/patches/server/0091-Infinity-bow-settings.patch b/patches/server/0091-Infinity-bow-settings.patch deleted file mode 100644 index dec76b5fd..000000000 --- a/patches/server/0091-Infinity-bow-settings.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Sun, 4 Oct 2020 19:08:53 -0500 -Subject: [PATCH] Infinity bow settings - - -diff --git a/net/minecraft/world/item/BowItem.java b/net/minecraft/world/item/BowItem.java -index bb593209c95c9cf1f9c5d52d52fab4a33ddbabcf..1d4d0799a86b9940b5e3b614c5a188ade5133f7e 100644 ---- a/net/minecraft/world/item/BowItem.java -+++ b/net/minecraft/world/item/BowItem.java -@@ -28,6 +28,11 @@ public class BowItem extends ProjectileWeaponItem { - return false; - } else { - ItemStack itemStack = player.getProjectile(stack); -+ // Purpur start -+ if (world.purpurConfig.infinityWorksWithoutArrows && itemStack.isEmpty() && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.INFINITY, stack) > 0) { -+ itemStack = new ItemStack(Items.ARROW); -+ } -+ // Purpur end - if (itemStack.isEmpty()) { - return false; - } else { -@@ -89,7 +94,7 @@ public class BowItem extends ProjectileWeaponItem { - public InteractionResult use(Level world, Player user, InteractionHand hand) { - ItemStack itemStack = user.getItemInHand(hand); - boolean bl = !user.getProjectile(itemStack).isEmpty(); -- if (!user.hasInfiniteMaterials() && !bl) { -+ if (!user.hasInfiniteMaterials() && !bl && !(world.purpurConfig.infinityWorksWithoutArrows && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.INFINITY, itemStack) > 0)) { // Purpur - return InteractionResult.FAIL; - } else { - user.startUsingItem(hand); -diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fea279b9fbd7f989bf26f0fc1254b1ecb8ac4342..0716bd2728be4fcaa4f13485591008ce270ecf82 100644 ---- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -135,6 +135,11 @@ public class PurpurWorldConfig { - entityLifeSpan = getInt("gameplay-mechanics.entity-lifespan", entityLifeSpan); - } - -+ public boolean infinityWorksWithoutArrows = false; -+ private void infinityArrowsSettings() { -+ infinityWorksWithoutArrows = getBoolean("gameplay-mechanics.infinity-bow.works-without-arrows", infinityWorksWithoutArrows); -+ } -+ - public List itemImmuneToCactus = new ArrayList<>(); - public List itemImmuneToExplosion = new ArrayList<>(); - public List itemImmuneToFire = new ArrayList<>(); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/BowItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/BowItem.java.patch new file mode 100644 index 000000000..7983a8f53 --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/BowItem.java.patch @@ -0,0 +1,23 @@ +--- a/net/minecraft/world/item/BowItem.java ++++ b/net/minecraft/world/item/BowItem.java +@@ -28,6 +_,11 @@ + return false; + } else { + ItemStack projectile = player.getProjectile(stack); ++ // Purpur start - Infinity bow settings ++ if (level.purpurConfig.infinityWorksWithoutArrows && projectile.isEmpty() && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.INFINITY, stack) > 0) { ++ projectile = new ItemStack(Items.ARROW); ++ } ++ // Purpur end - Infinity bow settings + if (projectile.isEmpty()) { + return false; + } else { +@@ -89,7 +_,7 @@ + public InteractionResult use(Level level, Player player, InteractionHand hand) { + ItemStack itemInHand = player.getItemInHand(hand); + boolean flag = !player.getProjectile(itemInHand).isEmpty(); +- if (!player.hasInfiniteMaterials() && !flag) { ++ if (!player.hasInfiniteMaterials() && !flag && !(level.purpurConfig.infinityWorksWithoutArrows && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.INFINITY, itemInHand) > 0)) { // Purpur - Infinity bow settings + return InteractionResult.FAIL; + } else { + player.startUsingItem(hand); diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index a5bb8ad73..e5a6d7d8b 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -126,6 +126,11 @@ public class PurpurWorldConfig { entityLifeSpan = getInt("gameplay-mechanics.entity-lifespan", entityLifeSpan); } + public boolean infinityWorksWithoutArrows = false; + private void infinityArrowsSettings() { + infinityWorksWithoutArrows = getBoolean("gameplay-mechanics.infinity-bow.works-without-arrows", infinityWorksWithoutArrows); + } + public List itemImmuneToCactus = new ArrayList<>(); public List itemImmuneToExplosion = new ArrayList<>(); public List itemImmuneToFire = new ArrayList<>();