Skip to content

Commit

Permalink
Add max enchantment override configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
ds58 committed Dec 26, 2020
1 parent b3e6033 commit 7d87e11
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {

Expand All @@ -19,5 +21,7 @@ public abstract class PConfig {
public List<String> nbtWhitelist = new ArrayList<>();
public List<String> disabledWorlds = new ArrayList<>();
public int maxNonMinecraftNbtKeys = 16;
public boolean overrideMinecraftMaxEnchantmentLevels = false;
public Map<String, Integer> minecraftMaxEnchantmentLevelOverrides = new HashMap<>();

}
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
allprojects {
group = 'com.ruinscraft'
version = '1.6.1'
version = '1.6.2'
}

subprojects {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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();
}
Expand All @@ -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
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down Expand Up @@ -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<String, Integer> 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) {
Expand All @@ -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) {
Expand Down
11 changes: 11 additions & 0 deletions bukkit/src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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.
#
Expand Down

0 comments on commit 7d87e11

Please sign in to comment.