Skip to content

Commit

Permalink
Add compat for new enchantment names
Browse files Browse the repository at this point in the history
  • Loading branch information
kernitus committed Jun 3, 2024
1 parent 204980a commit fd9df63
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
package kernitus.plugin.OldCombatMechanics.module;

import kernitus.plugin.OldCombatMechanics.OCMMain;
import kernitus.plugin.OldCombatMechanics.versions.enchantments.EnchantmentCompat;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
Expand Down Expand Up @@ -48,7 +48,7 @@ public void onItemDamage(PlayerItemDamageEvent e) {
final List<ItemStack> armour = explosionDamaged.get(uuid);
// ItemStack.equals() checks material, durability and quantity to make sure nothing changed in the meantime
// We're checking all the pieces this way just in case they're wearing two helmets or something strange
final List<ItemStack> matchedPieces = armour.stream().filter(piece -> piece.equals(item)).collect(Collectors.toList());
final List<ItemStack> matchedPieces = armour.stream().filter(piece -> piece.equals(item)).toList();
armour.removeAll(matchedPieces);
debug("Item matched explosion, ignoring...", player);
if (!matchedPieces.isEmpty()) return;
Expand All @@ -57,7 +57,7 @@ public void onItemDamage(PlayerItemDamageEvent e) {
int reduction = module().getInt("reduction");

// 60 + (40 / (level + 1) ) % chance that durability is reduced (for each point of durability)
final int damageChance = 60 + (40 / (item.getEnchantmentLevel(Enchantment.UNBREAKING) + 1));
final int damageChance = 60 + (40 / (item.getEnchantmentLevel(EnchantmentCompat.UNBREAKING.get()) + 1));
final Random random = new Random();
final int randomInt = random.nextInt(100); // between 0 (inclusive) and 100 (exclusive)
if (randomInt >= damageChance)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import kernitus.plugin.OldCombatMechanics.utilities.reflection.Reflector;
import kernitus.plugin.OldCombatMechanics.utilities.reflection.SpigotFunctionChooser;
import kernitus.plugin.OldCombatMechanics.utilities.reflection.VersionCompatUtils;
import kernitus.plugin.OldCombatMechanics.versions.enchantments.EnchantmentCompat;
import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
Expand Down Expand Up @@ -261,7 +262,7 @@ private enum EnchantmentType {

return damageCauses;
},
0.75, Enchantment.PROTECTION),
0.75, EnchantmentCompat.PROTECTION.get()),
FIRE_PROTECTION(() -> {
EnumSet<EntityDamageEvent.DamageCause> damageCauses = EnumSet.of(
EntityDamageEvent.DamageCause.FIRE,
Expand All @@ -274,17 +275,17 @@ private enum EnchantmentType {
}

return damageCauses;
}, 1.25, Enchantment.FIRE_PROTECTION),
}, 1.25, EnchantmentCompat.FIRE_PROTECTION.get()),
BLAST_PROTECTION(() -> EnumSet.of(
EntityDamageEvent.DamageCause.ENTITY_EXPLOSION,
EntityDamageEvent.DamageCause.BLOCK_EXPLOSION
), 1.5, Enchantment.BLAST_PROTECTION),
), 1.5, EnchantmentCompat.BLAST_PROTECTION.get()),
PROJECTILE_PROTECTION(() -> EnumSet.of(
EntityDamageEvent.DamageCause.PROJECTILE
), 1.5, Enchantment.PROJECTILE_PROTECTION),
), 1.5, EnchantmentCompat.PROJECTILE_PROTECTION.get()),
FALL_PROTECTION(() -> EnumSet.of(
EntityDamageEvent.DamageCause.FALL
), 2.5, Enchantment.FEATHER_FALLING);
), 2.5, EnchantmentCompat.FEATHER_FALLING.get());

private final Set<EntityDamageEvent.DamageCause> protection;
private final double typeModifier;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package kernitus.plugin.OldCombatMechanics.utilities.damage;

import com.google.common.collect.ImmutableMap;
import kernitus.plugin.OldCombatMechanics.versions.enchantments.EnchantmentCompat;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack;
Expand All @@ -15,31 +16,32 @@
public class MobDamage {

private static final Map<EntityType, Enchantment> enchants;
private static final Enchantment SMITE = EnchantmentCompat.SMITE.get();
private static final Enchantment BANE_OF_ARTHROPODS = EnchantmentCompat.BANE_OF_ARTHROPODS.get();

static {
Map<String, Enchantment> allMobs = ImmutableMap.<String, Enchantment>builder()

// Undead (https://minecraft.gamepedia.com/Undead)
.put("SKELETON", Enchantment.SMITE)
.put("ZOMBIE", Enchantment.SMITE)
.put("WITHER", Enchantment.SMITE)
.put("WITHER_SKELETON", Enchantment.SMITE)
.put("ZOMBIFIED_PIGLIN", Enchantment.SMITE)
.put("SKELETON_HORSE", Enchantment.SMITE)
.put("STRAY", Enchantment.SMITE)
.put("HUSK", Enchantment.SMITE)
.put("PHANTOM", Enchantment.SMITE)
.put("DROWNED", Enchantment.SMITE)
.put("ZOGLIN", Enchantment.SMITE)
.put("ZOMBIE_HORSE", Enchantment.SMITE)
.put("ZOMBIE_VILLAGER", Enchantment.SMITE)
.put("SKELETON", SMITE)
.put("ZOMBIE", SMITE)
.put("WITHER", SMITE)
.put("WITHER_SKELETON", SMITE)
.put("ZOMBIFIED_PIGLIN", SMITE)
.put("SKELETON_HORSE", SMITE)
.put("STRAY", SMITE)
.put("HUSK", SMITE)
.put("PHANTOM", SMITE)
.put("DROWNED", SMITE)
.put("ZOGLIN", SMITE)
.put("ZOMBIE_HORSE", SMITE)
.put("ZOMBIE_VILLAGER", SMITE)

// Arthropods (https://minecraft.gamepedia.com/Arthropod)
.put("SPIDER", Enchantment.BANE_OF_ARTHROPODS)
.put("CAVE_SPIDER", Enchantment.BANE_OF_ARTHROPODS)
.put("BEE", Enchantment.BANE_OF_ARTHROPODS)
.put("SILVERFISH", Enchantment.BANE_OF_ARTHROPODS)
.put("ENDERMITE", Enchantment.BANE_OF_ARTHROPODS)
.put("SPIDER", BANE_OF_ARTHROPODS)
.put("CAVE_SPIDER", BANE_OF_ARTHROPODS)
.put("BEE", BANE_OF_ARTHROPODS)
.put("SILVERFISH", BANE_OF_ARTHROPODS)
.put("ENDERMITE", BANE_OF_ARTHROPODS)

.build();

Expand Down Expand Up @@ -67,7 +69,7 @@ public class MobDamage {
public static double getEntityEnchantmentsDamage(EntityType entity, ItemStack item) {
final Enchantment enchantment = enchants.get(entity);

if (enchantment == null || enchantment != Enchantment.SMITE || enchantment != Enchantment.BANE_OF_ARTHROPODS)
if (enchantment == null || enchantment != SMITE || enchantment != BANE_OF_ARTHROPODS)
return 0;

return 2.5 * item.getEnchantmentLevel(enchantment);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@

import kernitus.plugin.OldCombatMechanics.utilities.potions.PotionEffectTypeCompat;
import kernitus.plugin.OldCombatMechanics.utilities.potions.PotionEffects;
import kernitus.plugin.OldCombatMechanics.versions.enchantments.EnchantmentCompat;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.*;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
Expand Down Expand Up @@ -116,7 +116,7 @@ however we only do this for DamageByEntity, so there could still be environmenta


mobEnchantmentsDamage = MobDamage.getEntityEnchantmentsDamage(damageeType, weapon);
sharpnessLevel = weapon.getEnchantmentLevel(Enchantment.SHARPNESS);
sharpnessLevel = weapon.getEnchantmentLevel(EnchantmentCompat.SHARPNESS.get());
sharpnessDamage = DamageUtils.getNewSharpnessDamage(sharpnessLevel);

// Scale enchantment damage by attack cooldown
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public PotionEffectType get() {
/**
* Gets correct PotionEffectType for currently-running server version given new name.
* @param newName The PotionEffectType >=1.20.6 name
* @return The PotionEffectType for the currently-running server version, if found
* @return The PotionEffectType for the currently-running server version, or null if not found.
*/
public static @Nullable PotionEffectType fromNewName(String newName) {
try {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/

package kernitus.plugin.OldCombatMechanics.versions.enchantments;

import org.bukkit.enchantments.Enchantment;
import org.jetbrains.annotations.Nullable;

import java.util.Locale;

public enum EnchantmentCompat {
UNBREAKING("DURABILITY"),
PROTECTION("PROTECTION_ENVIRONMENTAL"),
FIRE_PROTECTION("PROTECTION_FIRE"),
BLAST_PROTECTION("PROTECTION_EXPLOSIONS"),
PROJECTILE_PROTECTION("PROTECTION_PROJECTILE"),
FEATHER_FALLING("PROTECTION_FALL"),
SMITE("DAMAGE_UNDEAD"),
BANE_OF_ARTHROPODS("DAMAGE_ARTHROPODS"),
SHARPNESS("DAMAGE_ALL");

private Enchantment enchantment;

EnchantmentCompat(String oldName) {
// Try loading the new name first
// This only happens once per enum name
enchantment = Enchantment.getByName(name());
// If the new name doesn't exist, fall back to the old name
if (enchantment == null) {
enchantment = Enchantment.getByName(oldName);
}

if (enchantment == null) {
throw new IllegalStateException("PotionEffectType not found for: " + name() + " or " + oldName);
}
}

public Enchantment get() {
return enchantment;
}

/**
* Gets correct {@link Enchantment} for currently-running server version given new name.
*
* @param newName The {@link Enchantment} >=1.20.6 name
* @return The {@link Enchantment} for the currently-running server version, or null if not found.
*/
public static @Nullable Enchantment fromNewName(String newName) {
try {
// See if new name needs mapping to old
return valueOf(newName.toUpperCase(Locale.ROOT)).get();
} catch (IllegalArgumentException e) {
// Otherwise use new name directly
return Enchantment.getByName(newName);
}
}
}

0 comments on commit fd9df63

Please sign in to comment.