1
0
mirror of https://github.com/mcMMO-Dev/mcMMO.git synced 2026-02-17 17:32:36 +01:00

improved spears dmg detection and fixed more errors with Excellent Enchants

This commit is contained in:
nossr50
2026-01-31 11:20:35 -08:00
parent 7738c45b72
commit 95026e6016
4 changed files with 26 additions and 76 deletions

View File

@@ -1,5 +1,13 @@
Version 2.2.050
Further improved compatibility with Excellent Enchants
Minimum supported Minecraft version raised to 1.20.4 (see notes)
Improved Spears damage detection (see notes)
Spear abilities can now trigger from off-hand attacks with the Spear
Further improved compatibility with Excellent Enchants (fixed more errors)
NOTES:
From 2.2.050 onwards, mcMMO will require Minecraft versions 1.20.4 or newer.
Every now and then I raise the minimum supported Minecraft version to reduce maintenance burden of supporting older versions.
mcMMO no longer monitors PlayerAnimationEvent, it turns out Spigot has a DamageType just for Spear damage, avoiding the need to track player arm swings.
Version 2.2.049
Combat abilities work with spear in off-hand again (see notes)

View File

@@ -81,7 +81,6 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.VisibleForTesting;
public class McMMOPlayer implements Identified {
private static final long NO_SWING = 0L;
private final @NotNull Identity identity;
//Hacky fix for now, redesign later
@@ -98,7 +97,6 @@ public class McMMOPlayer implements Identified {
private Party invite;
private Party allianceInvite;
private int itemShareModifier;
private long lastSwingTimestamp = NO_SWING;
private PartyTeleportRecord ptpRecord;
@@ -1281,11 +1279,4 @@ public class McMMOPlayer implements Identified {
this.chatChannel = chatChannel;
}
public long getLastSwingTimestamp() {
return lastSwingTimestamp;
}
public void setLastSwingTimestamp(long lastSwingTimestamp) {
this.lastSwingTimestamp = lastSwingTimestamp;
}
}

View File

@@ -63,8 +63,6 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerAnimationEvent;
import org.bukkit.event.player.PlayerAnimationType;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
@@ -1123,23 +1121,4 @@ public class PlayerListener implements Listener {
SkillUtils.removeAbilityBuff(event.getMainHandItem());
SkillUtils.removeAbilityBuff(event.getOffHandItem());
}
@EventHandler(ignoreCancelled = false, priority = EventPriority.MONITOR)
public void onPlayerAnimation(PlayerAnimationEvent event) {
if (event.getAnimationType() != PlayerAnimationType.ARM_SWING) {
return;
}
final Player player = event.getPlayer();
if (!UserManager.hasPlayerDataKey(player)) {
return;
}
final McMMOPlayer mmoPlayer = UserManager.getPlayer(player);
if (mmoPlayer != null) {
mmoPlayer.setLastSwingTimestamp(System.currentTimeMillis());
}
}
}

View File

@@ -2,7 +2,6 @@ package com.gmail.nossr50.util.skills;
import static com.gmail.nossr50.datatypes.experience.XPGainReason.PVP;
import static com.gmail.nossr50.util.AttributeMapper.MAPPED_MOVEMENT_SPEED;
import static com.gmail.nossr50.util.ItemUtils.isSpear;
import static com.gmail.nossr50.util.MobMetadataUtils.hasMobFlag;
import static com.gmail.nossr50.util.Permissions.canUseSubSkill;
import static com.gmail.nossr50.util.skills.ProjectileUtils.isCrossbowProjectile;
@@ -132,11 +131,6 @@ public final class CombatUtils {
return;
}
// Hack to avoid other combat abilities applying to off-hand spear attacks
if (isSpear(player.getInventory().getItemInOffHand()) && isNotSwinging(mmoPlayer)) {
return;
}
SwordsManager swordsManager = mmoPlayer.getSwordsManager();
double boostedDamage = event.getDamage();
@@ -203,11 +197,6 @@ public final class CombatUtils {
return;
}
// Hack to avoid other combat abilities applying to off-hand spear attacks
if (isSpear(player.getInventory().getItemInOffHand()) && isNotSwinging(mmoPlayer)) {
return;
}
final TridentsManager tridentsManager = mmoPlayer.getTridentsManager();
// if (tridentsManager.canActivateAbility()) {
@@ -321,11 +310,6 @@ public final class CombatUtils {
return;
}
// Hack to avoid other combat abilities applying to off-hand spear attacks
if (isSpear(player.getInventory().getItemInOffHand()) && isNotSwinging(mmoPlayer)) {
return;
}
final MacesManager macesManager = mmoPlayer.getMacesManager();
// Apply Limit Break DMG
@@ -404,11 +388,6 @@ public final class CombatUtils {
return;
}
// Hack to avoid other combat abilities applying to off-hand spear attacks
if (isSpear(player.getInventory().getItemInOffHand()) && isNotSwinging(mmoPlayer)) {
return;
}
final AxesManager axesManager = mmoPlayer.getAxesManager();
if (axesManager.canActivateAbility()) {
@@ -461,11 +440,6 @@ public final class CombatUtils {
return;
}
// Hack to avoid other combat abilities applying to off-hand spear attacks
if (isSpear(player.getInventory().getItemInOffHand()) && isNotSwinging(mmoPlayer)) {
return;
}
final UnarmedManager unarmedManager = mmoPlayer.getUnarmedManager();
if (unarmedManager.canActivateAbility()) {
@@ -598,8 +572,12 @@ public final class CombatUtils {
public static void processCombatAttack(@NotNull EntityDamageByEntityEvent event,
@NotNull Entity painSourceRoot,
@NotNull LivingEntity target) {
Entity painSource = event.getDamager();
EntityType entityType = painSource.getType();
final Entity painSource = event.getDamager();
final EntityType entityType = painSource.getType();
final String damageType = event.getDamageSource().getDamageType().getKey().getKey();
boolean isDamageTypeSpear =
damageType.equalsIgnoreCase("SPEAR");
if (target instanceof ArmorStand) {
return;
@@ -642,7 +620,7 @@ public final class CombatUtils {
return;
}
ItemStack heldItem = player.getInventory().getItemInMainHand();
final ItemStack heldItem = player.getInventory().getItemInMainHand();
if (target instanceof Tameable) {
if (heldItem.getType() == Material.BONE) {
@@ -660,7 +638,16 @@ public final class CombatUtils {
}
}
if (ItemUtils.isSword(heldItem)) {
if (isDamageTypeSpear) {
if (!mcMMO.p.getSkillTools()
.canCombatSkillsTrigger(PrimarySkillType.SPEARS, target)) {
return;
}
if (mcMMO.p.getSkillTools()
.doesPlayerHaveSkillPermission(player, PrimarySkillType.SPEARS)) {
processSpearsCombat(target, player, event);
}
} if (ItemUtils.isSword(heldItem)) {
if (!mcMMO.p.getSkillTools()
.canCombatSkillsTrigger(PrimarySkillType.SWORDS, target)) {
return;
@@ -710,15 +697,6 @@ public final class CombatUtils {
.doesPlayerHaveSkillPermission(player, PrimarySkillType.MACES)) {
processMacesCombat(target, player, event);
}
} else if (isSpear(heldItem)) {
if (!mcMMO.p.getSkillTools()
.canCombatSkillsTrigger(PrimarySkillType.SPEARS, target)) {
return;
}
if (mcMMO.p.getSkillTools()
.doesPlayerHaveSkillPermission(player, PrimarySkillType.SPEARS)) {
processSpearsCombat(target, player, event);
}
}
} else if (entityType == EntityType.WOLF) {
Wolf wolf = (Wolf) painSource;
@@ -1225,10 +1203,4 @@ public final class CombatUtils {
mcMMO.p.getFoliaLib().getScheduler()
.runLater(() -> ProjectileUtils.cleanupProjectileMetadata(arrow), 20 * 120);
}
public static boolean isNotSwinging(McMMOPlayer mmoPlayer) {
// If player has swung in the last second, it's extremely unlikely the damage originates
// from an off-hand spear charge attack
return mmoPlayer.getLastSwingTimestamp() + 500L < System.currentTimeMillis();
}
}