1
0
mirror of https://github.com/Zrips/Jobs.git synced 2025-02-27 09:43:22 +01:00

Option to ignore bosses from damage amount check

This commit is contained in:
Zrips 2023-12-19 13:18:52 +02:00
parent a2018cb7c9
commit 99ff0a3400
2 changed files with 35 additions and 15 deletions

View File

@ -105,7 +105,7 @@ public class GeneralConfigManager {
EmptyServerAccountActionBar, ActionBarsMessageByDefault, aBarSilentMode, ShowTotalWorkers, ShowPenaltyBonus, useDynamicPayment, EmptyServerAccountActionBar, ActionBarsMessageByDefault, aBarSilentMode, ShowTotalWorkers, ShowPenaltyBonus, useDynamicPayment,
JobsGUIOpenOnBrowse, JobsGUIShowChatBrowse, JobsGUISwitcheButtons, ShowActionNames, hideItemAttributes, JobsGUIOpenOnBrowse, JobsGUIShowChatBrowse, JobsGUISwitcheButtons, ShowActionNames, hideItemAttributes,
DisableJoiningJobThroughGui, FireworkLevelupUse, UseRandom, UsePerPermissionForLeaving, DisableJoiningJobThroughGui, FireworkLevelupUse, UseRandom, UsePerPermissionForLeaving,
EnableConfirmation, jobsInfoOpensBrowse, MonsterDamageUse, useMaxPaymentCurve, blockOwnershipTakeOver, EnableConfirmation, jobsInfoOpensBrowse, MonsterDamageUse, MonsterDamageIgnoreBosses, useMaxPaymentCurve, blockOwnershipTakeOver,
hideJobsInfoWithoutPermission, UseTaxes, TransferToServerAccount, TakeFromPlayersPayment, AutoJobJoinUse, AllowDelevel, RomanNumbers, hideJobsInfoWithoutPermission, UseTaxes, TransferToServerAccount, TakeFromPlayersPayment, AutoJobJoinUse, AllowDelevel, RomanNumbers,
BossBarEnabled = false, BossBarShowOnEachAction = false, BossBarsMessageByDefault = false, ExploreCompact, ExploreSaveIntoDatabase = false, DBCleaningJobsUse, DBCleaningUsersUse, BossBarEnabled = false, BossBarShowOnEachAction = false, BossBarsMessageByDefault = false, ExploreCompact, ExploreSaveIntoDatabase = false, DBCleaningJobsUse, DBCleaningUsersUse,
DisabledWorldsUse, UseAsWhiteListWorldList, MythicMobsEnabled, DisabledWorldsUse, UseAsWhiteListWorldList, MythicMobsEnabled,
@ -910,6 +910,9 @@ public class GeneralConfigManager {
"This prevents from killing monsters in one hit when they suffer in example fall damage"); "This prevents from killing monsters in one hit when they suffer in example fall damage");
MonsterDamageUse = c.get("ExploitProtections.General.MonsterDamage.Use", false); MonsterDamageUse = c.get("ExploitProtections.General.MonsterDamage.Use", false);
MonsterDamagePercentage = c.get("ExploitProtections.General.MonsterDamage.Percentage", 60); MonsterDamagePercentage = c.get("ExploitProtections.General.MonsterDamage.Percentage", 60);
c.addComment("ExploitProtections.General.MonsterDamage.IgnoreBosses", "When enabled we will avoid checking damage done to ender dragon, wither and warden",
"This can help out in case you have server with custom damage sources which might not be registered and payouts might not be given out");
MonsterDamageIgnoreBosses = c.get("ExploitProtections.General.MonsterDamage.IgnoreBosses", true);
c.addComment("ExploitProtections.McMMO", "McMMO abilities"); c.addComment("ExploitProtections.McMMO", "McMMO abilities");
c.addComment("ExploitProtections.McMMO.TreeFellerMultiplier", "Players will get part of money from cutting trees with treefeller ability enabled.", c.addComment("ExploitProtections.McMMO.TreeFellerMultiplier", "Players will get part of money from cutting trees with treefeller ability enabled.",

View File

@ -153,9 +153,9 @@ public final class JobsPaymentListener implements Listener {
.build(); .build();
private final Cache<UUID, Player> entityLastDamager = CacheBuilder.newBuilder() private final Cache<UUID, Player> entityLastDamager = CacheBuilder.newBuilder()
.expireAfterWrite(5, TimeUnit.MINUTES) .expireAfterWrite(5, TimeUnit.MINUTES)
.weakKeys() .weakKeys()
.build(); .build();
private Cache<UUID, Long> cowMilkingTimer; private Cache<UUID, Long> cowMilkingTimer;
public JobsPaymentListener(Jobs plugin) { public JobsPaymentListener(Jobs plugin) {
@ -1246,7 +1246,8 @@ public final class JobsPaymentListener implements Listener {
//Gross but works //Gross but works
entityLastDamager.put(ent.getUniqueId(), (Player) ((EntityDamageByEntityEvent) event).getDamager()); entityLastDamager.put(ent.getUniqueId(), (Player) ((EntityDamageByEntityEvent) event).getDamager());
if(!Jobs.getGCManager().MonsterDamageUse) return; if (!Jobs.getGCManager().MonsterDamageUse)
return;
double damage = event.getFinalDamage(); double damage = event.getFinalDamage();
double s = ((Damageable) ent).getHealth(); double s = ((Damageable) ent).getHealth();
@ -1296,14 +1297,15 @@ public final class JobsPaymentListener implements Listener {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onEntityDeath(EntityDeathEvent event) { public void onEntityDeath(EntityDeathEvent event) {
if(!Jobs.getGCManager().canPerformActionInWorld(event.getEntity().getWorld())) if (!Jobs.getGCManager().canPerformActionInWorld(event.getEntity().getWorld()))
return; return;
LivingEntity lVictim = event.getEntity(); LivingEntity lVictim = event.getEntity();
Entity killer; Entity killer;
if(!(event.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent)) { if (!(event.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent)) {
if(entityLastDamager.getIfPresent(event.getEntity().getUniqueId()) == null) return; if (entityLastDamager.getIfPresent(event.getEntity().getUniqueId()) == null)
return;
killer = entityLastDamager.getIfPresent(event.getEntity().getUniqueId()); killer = entityLastDamager.getIfPresent(event.getEntity().getUniqueId());
} else { } else {
killer = ((EntityDamageByEntityEvent) event.getEntity().getLastDamageCause()).getDamager(); killer = ((EntityDamageByEntityEvent) event.getEntity().getLastDamageCause()).getDamager();
@ -1324,16 +1326,31 @@ public final class JobsPaymentListener implements Listener {
} }
if (Jobs.getGCManager().MonsterDamageUse) { if (Jobs.getGCManager().MonsterDamageUse) {
UUID lVictimUUID = lVictim.getUniqueId();
Double damage = damageDealtByPlayers.getIfPresent(lVictimUUID);
if (damage != null) { boolean ignore = false;
double perc = (damage * 100D) / Util.getMaxHealth(lVictim); if (Jobs.getGCManager().MonsterDamageIgnoreBosses) {
CMIEntityType etype = CMIEntityType.getByType(lVictim.getType());
switch (etype) {
case ENDER_DRAGON:
case WITHER:
case WARDEN:
ignore = true;
break;
}
}
damageDealtByPlayers.invalidate(lVictimUUID); if (!ignore) {
UUID lVictimUUID = lVictim.getUniqueId();
Double damage = damageDealtByPlayers.getIfPresent(lVictimUUID);
if (perc < Jobs.getGCManager().MonsterDamagePercentage) if (damage != null) {
return; double perc = (damage * 100D) / Util.getMaxHealth(lVictim);
damageDealtByPlayers.invalidate(lVictimUUID);
if (perc < Jobs.getGCManager().MonsterDamagePercentage)
return;
}
} }
} }