Skip to content

Commit

Permalink
Prelim NoCheatPlus fix
Browse files Browse the repository at this point in the history
The damage action conflicted with NoCheatPlus. To counter this, the
plugin temporarily exempts the player from checks, then does the damage,
then unexempts.
  • Loading branch information
CoolLord22 committed May 27, 2018
1 parent 8332045 commit d040e94
Showing 1 changed file with 55 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

import com.gmail.zariust.common.Verbosity;
import com.gmail.zariust.otherdrops.ConfigurationNode;
import com.gmail.zariust.otherdrops.Dependencies;
import com.gmail.zariust.otherdrops.EntityWrapper;
import com.gmail.zariust.otherdrops.Log;
import com.gmail.zariust.otherdrops.OtherDrops;
Expand All @@ -26,6 +27,9 @@
import com.gmail.zariust.otherdrops.parameters.Action;
import com.gmail.zariust.otherdrops.subject.CreatureSubject;

import fr.neatmonster.nocheatplus.checks.CheckType;
import fr.neatmonster.nocheatplus.hooks.NCPExemptionManager;

public class DamageAction extends Action {
// "potioneffect: "
// message.player, message.radius@<r>, message.world, message.server
Expand Down Expand Up @@ -122,26 +126,36 @@ public boolean act(CustomDrop drop, OccurredEvent occurence) {
return false;
}

private void processDamage(CustomDrop drop, OccurredEvent occurence,
DoubleRange damageRange, DamageType damageType) {
private void processDamage(CustomDrop drop, OccurredEvent occurence, DoubleRange damageRange, DamageType damageType) {

switch (damageActionType) {
case ATTACKER:
if (occurence.getPlayerAttacker() != null) {
damage(occurence.getPlayerAttacker(), damageRange, damageType,
drop, null);
if(Dependencies.hasNCP()) {
NCPExemptionManager.exemptPermanently(occurence.getPlayerAttacker(), CheckType.FIGHT_SELFHIT);
damage(occurence.getPlayerAttacker(), damageRange, damageType, drop, null);
NCPExemptionManager.unexempt(occurence.getPlayerAttacker(), CheckType.FIGHT_SELFHIT);
}
else {
damage(occurence.getPlayerAttacker(), damageRange, damageType, drop, null);
}
}
break;
case VICTIM:
if (occurence.getPlayerVictim() != null)
damage(occurence.getPlayerVictim(), damageRange, damageType,
drop, occurence.getAttacker());
if (occurence.getPlayerVictim() != null) {
if(Dependencies.hasNCP()) {
NCPExemptionManager.exemptPermanently(occurence.getPlayerVictim(), CheckType.FIGHT_SELFHIT);
damage(occurence.getPlayerVictim(), damageRange, damageType, drop, occurence.getAttacker());
NCPExemptionManager.unexempt(occurence.getPlayerVictim(), CheckType.FIGHT_SELFHIT);
}
else {
damage(occurence.getPlayerVictim(), damageRange, damageType, drop, occurence.getAttacker());
}
}
else if (occurence.getTarget() instanceof CreatureSubject) {
Entity ent = ((CreatureSubject) occurence.getTarget())
.getEntity();
Entity ent = ((CreatureSubject) occurence.getTarget()).getEntity();
if (ent instanceof LivingEntity) {
damage((LivingEntity) ent, damageRange, damageType, drop,
occurence.getAttacker());
damage((LivingEntity) ent, damageRange, damageType, drop, occurence.getAttacker());
}
}

Expand All @@ -151,28 +165,43 @@ else if (occurence.getTarget() instanceof CreatureSubject) {
// players around radius without an entity?
Location loc = occurence.getLocation();
for (Player player : loc.getWorld().getPlayers()) {
if (player.getLocation().getX() > (loc.getX() - radius)
|| player.getLocation().getX() < (loc.getX() + radius))
if (player.getLocation().getY() > (loc.getY() - radius)
|| player.getLocation().getY() < (loc.getY() + radius))
if (player.getLocation().getZ() > (loc.getZ() - radius)
|| player.getLocation().getZ() < (loc.getZ() + radius))
damage(player, damageRange, damageType, drop,
occurence.getAttacker());
if (player.getLocation().getX() > (loc.getX() - radius) || player.getLocation().getX() < (loc.getX() + radius))
if (player.getLocation().getY() > (loc.getY() - radius) || player.getLocation().getY() < (loc.getY() + radius))
if (player.getLocation().getZ() > (loc.getZ() - radius) || player.getLocation().getZ() < (loc.getZ() + radius)) {
if(Dependencies.hasNCP()) {
NCPExemptionManager.exemptPermanently(player, CheckType.FIGHT_SELFHIT);
damage(player, damageRange, damageType, drop, occurence.getAttacker());
NCPExemptionManager.unexempt(player, CheckType.FIGHT_SELFHIT);
}
else {
damage(player, damageRange, damageType, drop, occurence.getAttacker());
}
}
}

break;
case SERVER:
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
damage(player, damageRange, damageType, drop,
occurence.getAttacker());
if(Dependencies.hasNCP()) {
NCPExemptionManager.exemptPermanently(player, CheckType.FIGHT_SELFHIT);
damage(player, damageRange, damageType, drop, occurence.getAttacker());
NCPExemptionManager.unexempt(player, CheckType.FIGHT_SELFHIT);
}
else {
damage(player, damageRange, damageType, drop, occurence.getAttacker());
}
}
break;
case WORLD:
for (Player player : occurence.getLocation().getWorld()
.getPlayers()) {
damage(player, damageRange, damageType, drop,
occurence.getAttacker());
for (Player player : occurence.getLocation().getWorld().getPlayers()) {
if(Dependencies.hasNCP()) {
NCPExemptionManager.exemptPermanently(player, CheckType.FIGHT_SELFHIT);
damage(player, damageRange, damageType, drop, occurence.getAttacker());
NCPExemptionManager.unexempt(player, CheckType.FIGHT_SELFHIT);
}
else {
damage(player, damageRange, damageType, drop, occurence.getAttacker());
}
}
break;
case TOOL:
Expand All @@ -185,8 +214,7 @@ else if (occurence.getTarget() instanceof CreatureSubject) {

}

private void damage(LivingEntity ent, DoubleRange damageRange,
DamageType damageType, CustomDrop drop, LivingEntity attacker) {
private void damage(LivingEntity ent, DoubleRange damageRange, DamageType damageType, CustomDrop drop, LivingEntity attacker) {
Double damageVal = damageRange.getRandomIn(OtherDrops.rng);
Log.logInfo("Damaging entity: " + ent.toString() + " range="
+ damageRange.toString() + " value=" + damageVal + " ("
Expand Down

0 comments on commit d040e94

Please sign in to comment.