Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-11-14 20:10:05 +01:00
Add AnvilView#bypassEnchantmentLevelRestriction (#11475)
Dieser Commit ist enthalten in:
Ursprung
b16c0ae023
Commit
4430e96e1b
@ -0,0 +1,42 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Doc <nachito94@msn.com>
|
||||||
|
Date: Sun, 6 Oct 2024 16:45:20 -0300
|
||||||
|
Subject: [PATCH] Add AnvilView#bypassEnchantmentLevelRestriction
|
||||||
|
|
||||||
|
Anvils, by default, limit applied enchantment levels to their respective
|
||||||
|
maximum level. The added API enables plugins to disable this behaviour,
|
||||||
|
allowing enchantments that are overleveled to be applied via the anvil.
|
||||||
|
|
||||||
|
diff --git a/src/main/java/org/bukkit/inventory/view/AnvilView.java b/src/main/java/org/bukkit/inventory/view/AnvilView.java
|
||||||
|
index 0344b3db789baf1da0b59f2d2cd66154b69b38a9..cc5ffd28a6d6244b99a94e52c6f5a0f73a64aed7 100644
|
||||||
|
--- a/src/main/java/org/bukkit/inventory/view/AnvilView.java
|
||||||
|
+++ b/src/main/java/org/bukkit/inventory/view/AnvilView.java
|
||||||
|
@@ -59,4 +59,28 @@ public interface AnvilView extends InventoryView {
|
||||||
|
* @param levels the levels to set
|
||||||
|
*/
|
||||||
|
void setMaximumRepairCost(int levels);
|
||||||
|
+
|
||||||
|
+ // Paper start - bypass anvil level restrictions
|
||||||
|
+ /**
|
||||||
|
+ * Returns whether this view will bypass the vanilla enchantment level restriction
|
||||||
|
+ * when applying enchantments to an item or not.
|
||||||
|
+ * <p>
|
||||||
|
+ * By default, vanilla will limit enchantments applied to items to the respective
|
||||||
|
+ * {@link org.bukkit.enchantments.Enchantment#getMaxLevel()}, even if the applied enchantment itself is above said
|
||||||
|
+ * limit.
|
||||||
|
+ * Disabling this limit via {@link AnvilView#bypassEnchantmentLevelRestriction(boolean)} allows for, e.g., enchanted
|
||||||
|
+ * books to be applied fully, even if their enchantments are beyond the limit.
|
||||||
|
+ *
|
||||||
|
+ * @return {@code true} if this view bypasses the vanilla restrictions.
|
||||||
|
+ */
|
||||||
|
+ boolean bypassesEnchantmentLevelRestriction();
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets if enchantments applied via this anvil view may bypass vanilla's level restrictions.
|
||||||
|
+ *
|
||||||
|
+ * @param bypassEnchantmentLevelRestriction if this view bypasses the vanilla level restrictions.
|
||||||
|
+ * @see AnvilView#bypassesEnchantmentLevelRestriction()
|
||||||
|
+ */
|
||||||
|
+ void bypassEnchantmentLevelRestriction(boolean bypassEnchantmentLevelRestriction);
|
||||||
|
+ // Paper end - bypass anvil level restrictions
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Doc <nachito94@msn.com>
|
||||||
|
Date: Sun, 6 Oct 2024 16:46:36 -0300
|
||||||
|
Subject: [PATCH] Add AnvilView#bypassEnchantmentLevelRestriction
|
||||||
|
|
||||||
|
Anvils, by default, limit applied enchantment levels to their respective
|
||||||
|
maximum level. The added API enables plugins to disable this behaviour,
|
||||||
|
allowing enchantments that are overleveled to be applied via the anvil.
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||||
|
index d685511104ac552dfc9ae2111e1bfb60fa812102..362278407679f245ebcea778f2199b357339e1fe 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||||
|
@@ -53,6 +53,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||||
|
public int maximumRepairCost = 40;
|
||||||
|
private CraftAnvilView bukkitEntity;
|
||||||
|
// CraftBukkit end
|
||||||
|
+ public boolean bypassEnchantmentLevelRestriction = false; // Paper - bypass anvil level restrictions
|
||||||
|
|
||||||
|
public AnvilMenu(int syncId, Inventory inventory) {
|
||||||
|
this(syncId, inventory, ContainerLevelAccess.NULL);
|
||||||
|
@@ -231,7 +232,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||||
|
flag2 = true;
|
||||||
|
} else {
|
||||||
|
flag1 = true;
|
||||||
|
- if (i2 > enchantment.getMaxLevel()) {
|
||||||
|
+ if (i2 > enchantment.getMaxLevel() && !this.bypassEnchantmentLevelRestriction) { // Paper - bypass anvil level restrictions
|
||||||
|
i2 = enchantment.getMaxLevel();
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/view/CraftAnvilView.java b/src/main/java/org/bukkit/craftbukkit/inventory/view/CraftAnvilView.java
|
||||||
|
index e2d8d69c5ae8feb6840462ba8332344972658d83..59f0b1207931a2a10d559f43e2926b17e6991257 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/inventory/view/CraftAnvilView.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/view/CraftAnvilView.java
|
||||||
|
@@ -50,6 +50,18 @@ public class CraftAnvilView extends CraftInventoryView<AnvilMenu> implements Anv
|
||||||
|
this.container.maximumRepairCost = cost;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // Paper start
|
||||||
|
+ @Override
|
||||||
|
+ public boolean bypassesEnchantmentLevelRestriction() {
|
||||||
|
+ return this.container.bypassEnchantmentLevelRestriction;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void bypassEnchantmentLevelRestriction(final boolean bypassEnchantmentLevelRestriction) {
|
||||||
|
+ this.container.bypassEnchantmentLevelRestriction = bypassEnchantmentLevelRestriction;
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
+
|
||||||
|
public void updateFromLegacy(CraftInventoryAnvil legacy) {
|
||||||
|
if (legacy.isRepairCostSet()) {
|
||||||
|
this.setRepairCost(legacy.getRepairCost());
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren