mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@5436d44 Deprecate several Keyed#getKey methods (#10357) PaperMC/Paper@a7f1dc6 Change online mode default for Velocity configuration (#10413) PaperMC/Paper@37db2d7 [ci skip] Update book page/char limit for book meta doc (#10415) PaperMC/Paper@526795b Update patches to handle vineflower decompiler (#10406) PaperMC/Paper@8fe90de [ci skip] Referenced InventoryDragEvent in documentation of InventoryClickEvent (#10395) PaperMC/Paper@46d462b Fix StackOverflowException thrown on shutdown (Fixes #10404) (#10408) PaperMC/Paper@f061e76 Fix hit criteria advancement triggered before changing state (#10409) PaperMC/Paper@3263470 Add color transition and clone functions to ParticleBuilder (#10342) PaperMC/Paper@4445d23 Deprecate ItemStack#setType & add ItemStack#withType (#10290)
99 lines
5.9 KiB
Diff
99 lines
5.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Ben Kerllenevich <ben@omega24.dev>
|
|
Date: Thu, 18 Mar 2021 12:25:29 -0400
|
|
Subject: [PATCH] Allow infinity on crossbows
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java
|
|
index f3a428f80c265639250114498b10067b4bf1ada1..f9a9bc27670bb7ec82a609f202edbde6b5a4fd46 100644
|
|
--- a/src/main/java/net/minecraft/world/item/CrossbowItem.java
|
|
+++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java
|
|
@@ -114,7 +114,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable {
|
|
// Paper end - Add EntityLoadCrossbowEvent
|
|
int i = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, crossbow);
|
|
int j = i == 0 ? 1 : 3;
|
|
- boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild; // Paper - Add EntityLoadCrossbowEvent
|
|
+ boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild || (org.purpurmc.purpur.PurpurConfig.allowCrossbowInfinity && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.INFINITY_ARROWS, crossbow) > 0); // Paper - Add EntityLoadCrossbowEvent // Purpur
|
|
ItemStack itemstack1 = shooter.getProjectile(crossbow);
|
|
ItemStack itemstack2 = itemstack1.copy();
|
|
|
|
@@ -300,7 +300,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable {
|
|
|
|
for (int i = 0; i < list.size(); ++i) {
|
|
ItemStack itemstack1 = (ItemStack) list.get(i);
|
|
- boolean flag = entity instanceof Player && ((Player) entity).getAbilities().instabuild;
|
|
+ boolean flag = entity instanceof Player && ((Player) entity).getAbilities().instabuild || (org.purpurmc.purpur.PurpurConfig.allowCrossbowInfinity && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.INFINITY_ARROWS, stack) > 0); // Purpur
|
|
|
|
if (!itemstack1.isEmpty()) {
|
|
if (i == 0) {
|
|
diff --git a/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java b/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java
|
|
index 01796071135d27e0b8801f585a6d96b8f3a31f6c..127950c54ae057b3d0eb62e8f81d5eef6f11a36c 100644
|
|
--- a/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java
|
|
+++ b/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java
|
|
@@ -7,6 +7,14 @@ public class ArrowInfiniteEnchantment extends Enchantment {
|
|
super(weight, EnchantmentCategory.BOW, slotTypes);
|
|
}
|
|
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ public boolean canEnchant(net.minecraft.world.item.ItemStack stack) {
|
|
+ // we have to cheat the system because this class is loaded before purpur's config is loaded
|
|
+ return (org.purpurmc.purpur.PurpurConfig.allowCrossbowInfinity ? EnchantmentCategory.BOW_AND_CROSSBOW : EnchantmentCategory.BOW).canEnchant(stack.getItem());
|
|
+ }
|
|
+ // Purpur end
|
|
+
|
|
@Override
|
|
public int getMinCost(int level) {
|
|
return 20;
|
|
diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentCategory.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentCategory.java
|
|
index afd74b274aa46b1e2187935ebeb2a8824a133867..cc83aa539f8538fbaed8a3e52d9d9d8901e4793d 100644
|
|
--- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentCategory.java
|
|
+++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentCategory.java
|
|
@@ -113,6 +113,14 @@ public enum EnchantmentCategory {
|
|
public boolean canEnchant(Item item) {
|
|
return item instanceof Vanishable || Block.byItem(item) instanceof Vanishable || BREAKABLE.canEnchant(item);
|
|
}
|
|
+ // Purpur start
|
|
+ },
|
|
+ BOW_AND_CROSSBOW {
|
|
+ @Override
|
|
+ public boolean canEnchant(Item item) {
|
|
+ return item instanceof BowItem || item instanceof CrossbowItem;
|
|
+ }
|
|
+ // Purpur end
|
|
};
|
|
|
|
public abstract boolean canEnchant(Item item);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java
|
|
index a151b5d7c6e41b08e57c806bc43e067af48263ed..c1be4eb145e1a7e7749d24958bfed5c8268f1131 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java
|
|
@@ -71,6 +71,7 @@ public class CraftEnchantment extends Enchantment implements Handleable<net.mine
|
|
case TRIDENT -> EnchantmentTarget.TRIDENT;
|
|
case CROSSBOW -> EnchantmentTarget.CROSSBOW;
|
|
case VANISHABLE -> EnchantmentTarget.VANISHABLE;
|
|
+ case BOW_AND_CROSSBOW -> EnchantmentTarget.BOW_AND_CROSSBOW; // Purpur
|
|
};
|
|
}
|
|
|
|
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
|
index 6714c095714c3a34464b9190be964ceaac718d45..0e254b7b1709f745a7d7c0e3cefda96d726de556 100644
|
|
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
|
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
|
@@ -284,6 +284,7 @@ public class PurpurConfig {
|
|
}
|
|
|
|
public static boolean allowInfinityMending = false;
|
|
+ public static boolean allowCrossbowInfinity = false;
|
|
private static void enchantmentSettings() {
|
|
if (version < 5) {
|
|
boolean oldValue = getBoolean("settings.enchantment.allow-infinite-and-mending-together", false);
|
|
@@ -291,6 +292,7 @@ public class PurpurConfig {
|
|
set("settings.enchantment.allow-infinite-and-mending-together", null);
|
|
}
|
|
allowInfinityMending = getBoolean("settings.enchantment.allow-infinity-and-mending-together", allowInfinityMending);
|
|
+ allowCrossbowInfinity = getBoolean("settings.enchantment.allow-infinity-on-crossbow", allowCrossbowInfinity);
|
|
}
|
|
|
|
public static boolean endermanShortHeight = false;
|