Skip to content

Commit 95026e6

Browse files
committed
improved spears dmg detection and fixed more errors with Excellent Enchants
1 parent 7738c45 commit 95026e6

File tree

4 files changed

+26
-76
lines changed

4 files changed

+26
-76
lines changed

Changelog.txt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
Version 2.2.050
2-
Further improved compatibility with Excellent Enchants
2+
Minimum supported Minecraft version raised to 1.20.4 (see notes)
3+
Improved Spears damage detection (see notes)
4+
Spear abilities can now trigger from off-hand attacks with the Spear
5+
Further improved compatibility with Excellent Enchants (fixed more errors)
6+
7+
NOTES:
8+
From 2.2.050 onwards, mcMMO will require Minecraft versions 1.20.4 or newer.
9+
Every now and then I raise the minimum supported Minecraft version to reduce maintenance burden of supporting older versions.
10+
mcMMO no longer monitors PlayerAnimationEvent, it turns out Spigot has a DamageType just for Spear damage, avoiding the need to track player arm swings.
311

412
Version 2.2.049
513
Combat abilities work with spear in off-hand again (see notes)

src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@
8181
import org.jetbrains.annotations.VisibleForTesting;
8282

8383
public class McMMOPlayer implements Identified {
84-
private static final long NO_SWING = 0L;
8584
private final @NotNull Identity identity;
8685

8786
//Hacky fix for now, redesign later
@@ -98,7 +97,6 @@ public class McMMOPlayer implements Identified {
9897
private Party invite;
9998
private Party allianceInvite;
10099
private int itemShareModifier;
101-
private long lastSwingTimestamp = NO_SWING;
102100

103101
private PartyTeleportRecord ptpRecord;
104102

@@ -1281,11 +1279,4 @@ public void setChatMode(@NotNull ChatChannel chatChannel) {
12811279
this.chatChannel = chatChannel;
12821280
}
12831281

1284-
public long getLastSwingTimestamp() {
1285-
return lastSwingTimestamp;
1286-
}
1287-
1288-
public void setLastSwingTimestamp(long lastSwingTimestamp) {
1289-
this.lastSwingTimestamp = lastSwingTimestamp;
1290-
}
12911282
}

src/main/java/com/gmail/nossr50/listeners/PlayerListener.java

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@
6363
import org.bukkit.event.entity.EntityPickupItemEvent;
6464
import org.bukkit.event.entity.PlayerDeathEvent;
6565
import org.bukkit.event.player.AsyncPlayerChatEvent;
66-
import org.bukkit.event.player.PlayerAnimationEvent;
67-
import org.bukkit.event.player.PlayerAnimationType;
6866
import org.bukkit.event.player.PlayerChangedWorldEvent;
6967
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
7068
import org.bukkit.event.player.PlayerDropItemEvent;
@@ -1123,23 +1121,4 @@ public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) {
11231121
SkillUtils.removeAbilityBuff(event.getMainHandItem());
11241122
SkillUtils.removeAbilityBuff(event.getOffHandItem());
11251123
}
1126-
1127-
@EventHandler(ignoreCancelled = false, priority = EventPriority.MONITOR)
1128-
public void onPlayerAnimation(PlayerAnimationEvent event) {
1129-
if (event.getAnimationType() != PlayerAnimationType.ARM_SWING) {
1130-
return;
1131-
}
1132-
1133-
final Player player = event.getPlayer();
1134-
1135-
if (!UserManager.hasPlayerDataKey(player)) {
1136-
return;
1137-
}
1138-
1139-
final McMMOPlayer mmoPlayer = UserManager.getPlayer(player);
1140-
1141-
if (mmoPlayer != null) {
1142-
mmoPlayer.setLastSwingTimestamp(System.currentTimeMillis());
1143-
}
1144-
}
11451124
}

src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java

Lines changed: 17 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import static com.gmail.nossr50.datatypes.experience.XPGainReason.PVP;
44
import static com.gmail.nossr50.util.AttributeMapper.MAPPED_MOVEMENT_SPEED;
5-
import static com.gmail.nossr50.util.ItemUtils.isSpear;
65
import static com.gmail.nossr50.util.MobMetadataUtils.hasMobFlag;
76
import static com.gmail.nossr50.util.Permissions.canUseSubSkill;
87
import static com.gmail.nossr50.util.skills.ProjectileUtils.isCrossbowProjectile;
@@ -132,11 +131,6 @@ private static void processSwordCombat(@NotNull LivingEntity target, @NotNull Pl
132131
return;
133132
}
134133

135-
// Hack to avoid other combat abilities applying to off-hand spear attacks
136-
if (isSpear(player.getInventory().getItemInOffHand()) && isNotSwinging(mmoPlayer)) {
137-
return;
138-
}
139-
140134
SwordsManager swordsManager = mmoPlayer.getSwordsManager();
141135
double boostedDamage = event.getDamage();
142136

@@ -203,11 +197,6 @@ private static void processTridentCombatMelee(@NotNull LivingEntity target,
203197
return;
204198
}
205199

206-
// Hack to avoid other combat abilities applying to off-hand spear attacks
207-
if (isSpear(player.getInventory().getItemInOffHand()) && isNotSwinging(mmoPlayer)) {
208-
return;
209-
}
210-
211200
final TridentsManager tridentsManager = mmoPlayer.getTridentsManager();
212201

213202
// if (tridentsManager.canActivateAbility()) {
@@ -321,11 +310,6 @@ private static void processMacesCombat(@NotNull LivingEntity target,
321310
return;
322311
}
323312

324-
// Hack to avoid other combat abilities applying to off-hand spear attacks
325-
if (isSpear(player.getInventory().getItemInOffHand()) && isNotSwinging(mmoPlayer)) {
326-
return;
327-
}
328-
329313
final MacesManager macesManager = mmoPlayer.getMacesManager();
330314

331315
// Apply Limit Break DMG
@@ -404,11 +388,6 @@ private static void processAxeCombat(@NotNull LivingEntity target, @NotNull Play
404388
return;
405389
}
406390

407-
// Hack to avoid other combat abilities applying to off-hand spear attacks
408-
if (isSpear(player.getInventory().getItemInOffHand()) && isNotSwinging(mmoPlayer)) {
409-
return;
410-
}
411-
412391
final AxesManager axesManager = mmoPlayer.getAxesManager();
413392

414393
if (axesManager.canActivateAbility()) {
@@ -461,11 +440,6 @@ private static void processUnarmedCombat(@NotNull LivingEntity target, @NotNull
461440
return;
462441
}
463442

464-
// Hack to avoid other combat abilities applying to off-hand spear attacks
465-
if (isSpear(player.getInventory().getItemInOffHand()) && isNotSwinging(mmoPlayer)) {
466-
return;
467-
}
468-
469443
final UnarmedManager unarmedManager = mmoPlayer.getUnarmedManager();
470444

471445
if (unarmedManager.canActivateAbility()) {
@@ -598,8 +572,12 @@ private static void processArcheryCombat(@NotNull LivingEntity target, @NotNull
598572
public static void processCombatAttack(@NotNull EntityDamageByEntityEvent event,
599573
@NotNull Entity painSourceRoot,
600574
@NotNull LivingEntity target) {
601-
Entity painSource = event.getDamager();
602-
EntityType entityType = painSource.getType();
575+
final Entity painSource = event.getDamager();
576+
final EntityType entityType = painSource.getType();
577+
final String damageType = event.getDamageSource().getDamageType().getKey().getKey();
578+
579+
boolean isDamageTypeSpear =
580+
damageType.equalsIgnoreCase("SPEAR");
603581

604582
if (target instanceof ArmorStand) {
605583
return;
@@ -642,7 +620,7 @@ public static void processCombatAttack(@NotNull EntityDamageByEntityEvent event,
642620
return;
643621
}
644622

645-
ItemStack heldItem = player.getInventory().getItemInMainHand();
623+
final ItemStack heldItem = player.getInventory().getItemInMainHand();
646624

647625
if (target instanceof Tameable) {
648626
if (heldItem.getType() == Material.BONE) {
@@ -660,7 +638,16 @@ public static void processCombatAttack(@NotNull EntityDamageByEntityEvent event,
660638
}
661639
}
662640

663-
if (ItemUtils.isSword(heldItem)) {
641+
if (isDamageTypeSpear) {
642+
if (!mcMMO.p.getSkillTools()
643+
.canCombatSkillsTrigger(PrimarySkillType.SPEARS, target)) {
644+
return;
645+
}
646+
if (mcMMO.p.getSkillTools()
647+
.doesPlayerHaveSkillPermission(player, PrimarySkillType.SPEARS)) {
648+
processSpearsCombat(target, player, event);
649+
}
650+
} if (ItemUtils.isSword(heldItem)) {
664651
if (!mcMMO.p.getSkillTools()
665652
.canCombatSkillsTrigger(PrimarySkillType.SWORDS, target)) {
666653
return;
@@ -710,15 +697,6 @@ public static void processCombatAttack(@NotNull EntityDamageByEntityEvent event,
710697
.doesPlayerHaveSkillPermission(player, PrimarySkillType.MACES)) {
711698
processMacesCombat(target, player, event);
712699
}
713-
} else if (isSpear(heldItem)) {
714-
if (!mcMMO.p.getSkillTools()
715-
.canCombatSkillsTrigger(PrimarySkillType.SPEARS, target)) {
716-
return;
717-
}
718-
if (mcMMO.p.getSkillTools()
719-
.doesPlayerHaveSkillPermission(player, PrimarySkillType.SPEARS)) {
720-
processSpearsCombat(target, player, event);
721-
}
722700
}
723701
} else if (entityType == EntityType.WOLF) {
724702
Wolf wolf = (Wolf) painSource;
@@ -1225,10 +1203,4 @@ public static void delayArrowMetaCleanup(@NotNull AbstractArrow arrow) {
12251203
mcMMO.p.getFoliaLib().getScheduler()
12261204
.runLater(() -> ProjectileUtils.cleanupProjectileMetadata(arrow), 20 * 120);
12271205
}
1228-
1229-
public static boolean isNotSwinging(McMMOPlayer mmoPlayer) {
1230-
// If player has swung in the last second, it's extremely unlikely the damage originates
1231-
// from an off-hand spear charge attack
1232-
return mmoPlayer.getLastSwingTimestamp() + 500L < System.currentTimeMillis();
1233-
}
12341206
}

0 commit comments

Comments
 (0)