mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-06-28 03:34:43 +02:00
Players who used unarmed combat are still considered using unarmed while not holding weapons for a brief time period
This commit is contained in:
@ -2,6 +2,7 @@ package com.gmail.nossr50.util;
|
||||
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.config.party.ItemWeightConfig;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.treasure.EnchantmentWrapper;
|
||||
import com.gmail.nossr50.datatypes.treasure.FishingTreasureBook;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
@ -178,18 +179,12 @@ public final class ItemUtils {
|
||||
return mcMMO.getMaterialMapStore().isPickAxe(item.getType().getKey().getKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the item counts as unarmed.
|
||||
*
|
||||
* @param item Item to check
|
||||
* @return true if the item counts as unarmed, false otherwise
|
||||
*/
|
||||
public static boolean isUnarmed(ItemStack item) {
|
||||
public static boolean isUnarmed(@NotNull ItemStack itemInMainHand) {
|
||||
if (mcMMO.p.getGeneralConfig().getUnarmedItemsAsUnarmed()) {
|
||||
return !isMinecraftTool(item);
|
||||
return !isMinecraftTool(itemInMainHand);
|
||||
}
|
||||
|
||||
return item.getType() == Material.AIR;
|
||||
return itemInMainHand.getType() == Material.AIR;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -40,6 +40,8 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.gmail.nossr50.util.ItemUtils.isMinecraftTool;
|
||||
|
||||
public final class CombatUtils {
|
||||
|
||||
private CombatUtils() {}
|
||||
@ -166,47 +168,45 @@ public final class CombatUtils {
|
||||
printFinalDamageDebug(player, event, mcMMOPlayer);
|
||||
}
|
||||
|
||||
private static void processUnarmedCombat(@NotNull LivingEntity target, @NotNull Player player, @NotNull EntityDamageByEntityEvent event) {
|
||||
private static void processUnarmedCombat(@NotNull LivingEntity target, @NotNull McMMOPlayer mmoPlayer, @NotNull EntityDamageByEntityEvent event) {
|
||||
if (event.getCause() == DamageCause.THORNS) {
|
||||
return;
|
||||
}
|
||||
|
||||
double boostedDamage = event.getDamage();
|
||||
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||
UnarmedManager unarmedManager = mmoPlayer.getUnarmedManager();
|
||||
|
||||
//Make sure the profiles been loaded
|
||||
if(mcMMOPlayer == null) {
|
||||
return;
|
||||
}
|
||||
if(isUsingUnarmedCombat(mmoPlayer)) {
|
||||
if (unarmedManager.canActivateAbility()) {
|
||||
mmoPlayer.checkAbilityActivation(PrimarySkillType.UNARMED);
|
||||
}
|
||||
|
||||
UnarmedManager unarmedManager = mcMMOPlayer.getUnarmedManager();
|
||||
if (unarmedManager.canUseSteelArm()) {
|
||||
boostedDamage+=(unarmedManager.calculateSteelArmStyleDamage() * mmoPlayer.getAttackStrength());
|
||||
}
|
||||
|
||||
if (unarmedManager.canActivateAbility()) {
|
||||
mcMMOPlayer.checkAbilityActivation(PrimarySkillType.UNARMED);
|
||||
}
|
||||
if (unarmedManager.canUseBerserk()) {
|
||||
boostedDamage+=(unarmedManager.berserkDamage(boostedDamage) * mmoPlayer.getAttackStrength());
|
||||
}
|
||||
|
||||
if (unarmedManager.canUseSteelArm()) {
|
||||
boostedDamage+=(unarmedManager.calculateSteelArmStyleDamage() * mcMMOPlayer.getAttackStrength());
|
||||
}
|
||||
if (unarmedManager.canDisarm(target)) {
|
||||
unarmedManager.disarmCheck((Player) target);
|
||||
}
|
||||
|
||||
if (unarmedManager.canUseBerserk()) {
|
||||
boostedDamage+=(unarmedManager.berserkDamage(boostedDamage) * mcMMOPlayer.getAttackStrength());
|
||||
}
|
||||
|
||||
if (unarmedManager.canDisarm(target)) {
|
||||
unarmedManager.disarmCheck((Player) target);
|
||||
}
|
||||
|
||||
if(canUseLimitBreak(player, target, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK))
|
||||
{
|
||||
boostedDamage+=(getLimitBreakDamage(player, target, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK) * mcMMOPlayer.getAttackStrength());
|
||||
if(canUseLimitBreak(mmoPlayer.getPlayer(), target, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK))
|
||||
{
|
||||
boostedDamage+=(getLimitBreakDamage(mmoPlayer.getPlayer(), target, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK) * mmoPlayer.getAttackStrength());
|
||||
}
|
||||
}
|
||||
|
||||
event.setDamage(boostedDamage);
|
||||
processCombatXP(mcMMOPlayer, target, PrimarySkillType.UNARMED);
|
||||
processCombatXP(mmoPlayer, target, PrimarySkillType.UNARMED);
|
||||
printFinalDamageDebug(mmoPlayer.getPlayer(), event, mmoPlayer);
|
||||
|
||||
printFinalDamageDebug(player, event, mcMMOPlayer);
|
||||
if (ItemUtils.isUnarmed(mmoPlayer.getPlayer().getInventory().getItemInMainHand())) {
|
||||
mmoPlayer.getUnarmedManager().updateLastUsedUnarmed();
|
||||
}
|
||||
}
|
||||
|
||||
private static void processTamingCombat(@NotNull LivingEntity target, @Nullable Player master, @NotNull Wolf wolf, @NotNull EntityDamageByEntityEvent event) {
|
||||
@ -335,6 +335,7 @@ public final class CombatUtils {
|
||||
}
|
||||
|
||||
if (painSourceRoot instanceof Player player && entityType == EntityType.PLAYER) {
|
||||
McMMOPlayer mmoPlayer = UserManager.getPlayer(player);
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
return;
|
||||
@ -377,13 +378,13 @@ public final class CombatUtils {
|
||||
processAxeCombat(target, player, event);
|
||||
}
|
||||
}
|
||||
else if (ItemUtils.isUnarmed(heldItem)) {
|
||||
else if (mmoPlayer != null && (mmoPlayer.getUnarmedManager().usedUnarmedCombatRecently() || ItemUtils.isUnarmed(heldItem))) {
|
||||
if (!mcMMO.p.getSkillTools().canCombatSkillsTrigger(PrimarySkillType.UNARMED, target)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mcMMO.p.getSkillTools().doesPlayerHaveSkillPermission(player, PrimarySkillType.UNARMED)) {
|
||||
processUnarmedCombat(target, player, event);
|
||||
processUnarmedCombat(target, mmoPlayer, event);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -977,4 +978,21 @@ public final class CombatUtils {
|
||||
public static void delayArrowMetaCleanup(@NotNull Projectile entity) {
|
||||
Bukkit.getServer().getScheduler().runTaskLater(mcMMO.p, () -> cleanupArrowMetadata(entity), 20*60);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a player is considered "unarmed"
|
||||
*
|
||||
* @param mmoPlayer target player
|
||||
* @return true if the item counts as unarmed, false otherwise
|
||||
*/
|
||||
public static boolean isUsingUnarmedCombat(@NotNull McMMOPlayer mmoPlayer) {
|
||||
ItemStack itemInMainHand = mmoPlayer.getPlayer().getInventory().getItemInMainHand();
|
||||
|
||||
// player has to have been unarmed recently or config allows items as unarmed
|
||||
if (mmoPlayer.getUnarmedManager().usedUnarmedCombatRecently() || mcMMO.p.getGeneralConfig().getUnarmedItemsAsUnarmed()) {
|
||||
return !isMinecraftTool(itemInMainHand);
|
||||
}
|
||||
|
||||
return itemInMainHand.getType() == Material.AIR;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user