13
0
geforkt von Mirrors/Paper

Add AnvilView#bypassEnchantmentLevelRestriction (#11475)

Dieser Commit ist enthalten in:
Pedro 2024-10-12 18:10:05 -03:00
Ursprung 4286dff3d0
Commit a0cb2d37ed
2 geänderte Dateien mit 95 neuen und 0 gelöschten Zeilen

Datei anzeigen

@ -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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/inventory/view/AnvilView.java
+++ b/src/main/java/org/bukkit/inventory/view/AnvilView.java
@@ -0,0 +0,0 @@ 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
}

Datei anzeigen

@ -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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
@@ -0,0 +0,0 @@ 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);
@@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/view/CraftAnvilView.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/view/CraftAnvilView.java
@@ -0,0 +0,0 @@ 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());