diff --git a/api/src/main/java/com/ruinscraft/panilla/api/EnchantmentCompat.java b/api/src/main/java/com/ruinscraft/panilla/api/EnchantmentCompat.java index 17ea219e..0e71c99b 100644 --- a/api/src/main/java/com/ruinscraft/panilla/api/EnchantmentCompat.java +++ b/api/src/main/java/com/ruinscraft/panilla/api/EnchantmentCompat.java @@ -27,7 +27,7 @@ public enum EnchantmentCompat { PROJECTILE_PROTECTION("minecraft:projectile_protection", "PROTECTION_PROJECTILE", 4), PROTECTION("minecraft:protection", "PROTECTION_ENVIRONMENTAL", 0), PUNCH("minecraft:punch", "ARROW_KNOCKBACK", 49), - RESPIRATION("minecraft_respiration", "OXYGEN", 5), + RESPIRATION("minecraft:respiration", "OXYGEN", 5), RIPTIDE("minecraft:riptide", "", 67), // 1.13 SHARPNESS("minecraft:sharpness", "DAMAGE_ALL", 16), SILK_TOUCH("minecraft:silk_touch", "SILK_TOUCH", 33), diff --git a/api/src/main/java/com/ruinscraft/panilla/api/config/PConfig.java b/api/src/main/java/com/ruinscraft/panilla/api/config/PConfig.java index b7800533..e5c9ff1d 100644 --- a/api/src/main/java/com/ruinscraft/panilla/api/config/PConfig.java +++ b/api/src/main/java/com/ruinscraft/panilla/api/config/PConfig.java @@ -1,7 +1,9 @@ package com.ruinscraft.panilla.api.config; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public abstract class PConfig { @@ -19,5 +21,7 @@ public abstract class PConfig { public List nbtWhitelist = new ArrayList<>(); public List disabledWorlds = new ArrayList<>(); public int maxNonMinecraftNbtKeys = 16; + public boolean overrideMinecraftMaxEnchantmentLevels = false; + public Map minecraftMaxEnchantmentLevelOverrides = new HashMap<>(); } diff --git a/build.gradle b/build.gradle index 21cb05ba..f700e8d2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ allprojects { group = 'com.ruinscraft' - version = '1.6.1' + version = '1.6.2' } subprojects { diff --git a/bukkit/src/main/java/com/ruinscraft/panilla/bukkit/BukkitEnchantments.java b/bukkit/src/main/java/com/ruinscraft/panilla/bukkit/BukkitEnchantments.java index f67fc9aa..d4c849dc 100644 --- a/bukkit/src/main/java/com/ruinscraft/panilla/bukkit/BukkitEnchantments.java +++ b/bukkit/src/main/java/com/ruinscraft/panilla/bukkit/BukkitEnchantments.java @@ -2,6 +2,7 @@ import com.ruinscraft.panilla.api.EnchantmentCompat; import com.ruinscraft.panilla.api.IEnchantments; +import com.ruinscraft.panilla.api.config.PConfig; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.enchantments.Enchantment; @@ -17,11 +18,22 @@ public class BukkitEnchantments implements IEnchantments { is_legacy = Bukkit.getVersion().contains("1.12") || Bukkit.getVersion().contains("1.8"); } + private PConfig pConfig; + + public BukkitEnchantments(PConfig pConfig) { + this.pConfig = pConfig; + } + @Override public int getMaxLevel(EnchantmentCompat enchCompat) { Enchantment bukkitEnchantment = getBukkitEnchantment(enchCompat); if (bukkitEnchantment == null) { return Integer.MAX_VALUE; // unknown enchantment + } else if (pConfig.overrideMinecraftMaxEnchantmentLevels) { + String enchantmentName = enchCompat.namedKey.split(":")[1]; + if (pConfig.minecraftMaxEnchantmentLevelOverrides.containsKey(enchantmentName)) { + return pConfig.minecraftMaxEnchantmentLevelOverrides.get(enchantmentName); + } } return bukkitEnchantment.getMaxLevel(); } @@ -31,8 +43,9 @@ public int getStartLevel(EnchantmentCompat enchCompat) { Enchantment bukkitEnchantment = getBukkitEnchantment(enchCompat); if (bukkitEnchantment == null) { return Integer.MAX_VALUE; // unknown enchantment + } else { + return bukkitEnchantment.getStartLevel(); } - return bukkitEnchantment.getStartLevel(); } @Override @@ -41,8 +54,9 @@ public boolean conflicting(EnchantmentCompat enchCompat, EnchantmentCompat _ench Enchantment _bukkitEnchantment = getBukkitEnchantment(_enchCompat); if (bukkitEnchantment == null || _bukkitEnchantment == null) { return false; // unknown enchantment + } else { + return bukkitEnchantment.conflictsWith(_bukkitEnchantment); } - return bukkitEnchantment.conflictsWith(_bukkitEnchantment); } private Enchantment getBukkitEnchantment(EnchantmentCompat enchCompat) { diff --git a/bukkit/src/main/java/com/ruinscraft/panilla/bukkit/PanillaPlugin.java b/bukkit/src/main/java/com/ruinscraft/panilla/bukkit/PanillaPlugin.java index 7df53d84..cfe4b879 100644 --- a/bukkit/src/main/java/com/ruinscraft/panilla/bukkit/PanillaPlugin.java +++ b/bukkit/src/main/java/com/ruinscraft/panilla/bukkit/PanillaPlugin.java @@ -13,6 +13,8 @@ import java.io.IOException; import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.Map; public class PanillaPlugin extends JavaPlugin implements IPanilla { @@ -98,6 +100,16 @@ private synchronized void loadConfig() { pConfig.nbtWhitelist = getConfig().getStringList("nbt-whitelist"); pConfig.disabledWorlds = getConfig().getStringList("disabled-worlds"); pConfig.maxNonMinecraftNbtKeys = getConfig().getInt("max-non-minecraft-nbt-keys", pConfig.maxNonMinecraftNbtKeys); + pConfig.overrideMinecraftMaxEnchantmentLevels = getConfig().getBoolean("max-enchantment-levels.override-minecraft-max-enchantment-levels", pConfig.overrideMinecraftMaxEnchantmentLevels); + + Map enchantmentOverrides = new HashMap<>(); + + for (String enchantmentOverride : getConfig().getConfigurationSection("max-enchantment-levels.overrides").getKeys(false)) { + int level = getConfig().getInt("max-enchantment-levels.overrides." + enchantmentOverride); + enchantmentOverrides.put(enchantmentOverride, level); + } + + pConfig.minecraftMaxEnchantmentLevelOverrides = enchantmentOverrides; } private synchronized void loadTranslations(String languageKey) { @@ -114,7 +126,7 @@ public void onEnable() { loadTranslations(pConfig.language); panillaLogger = new BukkitPanillaLogger(this, getLogger()); - enchantments = new BukkitEnchantments(); + enchantments = new BukkitEnchantments(pConfig); imp: switch (SERVER_IMP) { diff --git a/bukkit/src/main/resources/config.yml b/bukkit/src/main/resources/config.yml index 79812a6c..0d7696e7 100644 --- a/bukkit/src/main/resources/config.yml +++ b/bukkit/src/main/resources/config.yml @@ -49,6 +49,17 @@ disabled-worlds: # - world_nether # - some_other_world_name +# Override Minecraft's max enchantment levels +# Useful if you want to manually set a max enchantment level for specific enchantments +# You must use either normal or strict mode for this to work +# Find a list of Minecraft enchantment names here: https://www.digminecraft.com/lists/enchantment_list_pc.php +max-enchantment-levels: + override-minecraft-max-enchantment-levels: false + overrides: + sharpness: 15 + protection: 10 + feather_falling: 10 + # This is to prevent crash items which have an excessive # amount of NBT keys. #