mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-12-17 14:28:46 +01:00
Crossbow trickshot no longer rewards archery xp
Fixes #5153 Fixes #5144
This commit is contained in:
@@ -39,6 +39,7 @@ import java.util.List;
|
||||
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.MobMetadataUtils.hasMobFlag;
|
||||
import static com.gmail.nossr50.util.skills.ProjectileUtils.isCrossbowProjectile;
|
||||
|
||||
public final class CombatUtils {
|
||||
|
||||
@@ -567,9 +568,8 @@ public final class CombatUtils {
|
||||
}
|
||||
} else if (painSource instanceof Arrow arrow) {
|
||||
ProjectileSource projectileSource = arrow.getShooter();
|
||||
boolean isCrossbow = arrow.isShotFromCrossbow();
|
||||
boolean isCrossbow = isCrossbowProjectile(arrow);
|
||||
if (projectileSource instanceof Player player) {
|
||||
|
||||
if (!Misc.isNPCEntityExcludingVillagers(player)) {
|
||||
if (!isCrossbow && mcMMO.p.getSkillTools().canCombatSkillsTrigger(PrimarySkillType.ARCHERY, target)) {
|
||||
processArcheryCombat(target, player, event, arrow);
|
||||
|
||||
@@ -9,6 +9,8 @@ import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.util.Vector;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static com.gmail.nossr50.util.MetadataConstants.MCMMO_METADATA_VALUE;
|
||||
|
||||
public class ProjectileUtils {
|
||||
public static Vector getNormal(BlockFace blockFace) {
|
||||
return switch (blockFace) {
|
||||
@@ -27,7 +29,6 @@ public class ProjectileUtils {
|
||||
*
|
||||
* @param arrow projectile
|
||||
*/
|
||||
// TODO: Add test
|
||||
public static void cleanupProjectileMetadata(@NotNull Arrow arrow) {
|
||||
if (arrow.hasMetadata(MetadataConstants.METADATA_KEY_INF_ARROW)) {
|
||||
arrow.removeMetadata(MetadataConstants.METADATA_KEY_INF_ARROW, mcMMO.p);
|
||||
@@ -52,6 +53,10 @@ public class ProjectileUtils {
|
||||
if (arrow.hasMetadata(MetadataConstants.METADATA_KEY_BOUNCE_COUNT)) {
|
||||
arrow.removeMetadata(MetadataConstants.METADATA_KEY_BOUNCE_COUNT, mcMMO.p);
|
||||
}
|
||||
|
||||
if (arrow.hasMetadata(MetadataConstants.METADATA_KEY_CROSSBOW_PROJECTILE)) {
|
||||
arrow.removeMetadata(MetadataConstants.METADATA_KEY_CROSSBOW_PROJECTILE, mcMMO.p);
|
||||
}
|
||||
}
|
||||
|
||||
public static void copyArrowMetadata(@NotNull Plugin pluginRef, @NotNull Arrow arrowToCopy, @NotNull Arrow newArrow) {
|
||||
@@ -80,5 +85,14 @@ public class ProjectileUtils {
|
||||
newArrow.setMetadata(MetadataConstants.METADATA_KEY_MULTI_SHOT_ARROW,
|
||||
arrowToCopy.getMetadata(MetadataConstants.METADATA_KEY_MULTI_SHOT_ARROW).get(0));
|
||||
}
|
||||
|
||||
if (arrowToCopy.hasMetadata(MetadataConstants.METADATA_KEY_CROSSBOW_PROJECTILE)) {
|
||||
newArrow.setMetadata(MetadataConstants.METADATA_KEY_CROSSBOW_PROJECTILE, MCMMO_METADATA_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isCrossbowProjectile(@NotNull Arrow arrow) {
|
||||
return arrow.isShotFromCrossbow()
|
||||
|| arrow.hasMetadata(MetadataConstants.METADATA_KEY_CROSSBOW_PROJECTILE);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user