Skip to content

Commit

Permalink
merge master
Browse files Browse the repository at this point in the history
  • Loading branch information
nossr50 committed Feb 18, 2024
2 parents 2271bd5 + 85f27fd commit 70383b7
Show file tree
Hide file tree
Showing 9 changed files with 77 additions and 91 deletions.
8 changes: 8 additions & 0 deletions Changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,14 @@ Version 2.2.000
Currently these skills scale up to a maximum 50% chance if a player has 10,000 skill, you can adjust this in advanced.yml


Version 2.1.228
Fixed a stack trace due to Spigot API break on EntityDamageEvent and EntityDamageByEntity event
(API) - Removed FakeEntityDamageEvent and FakeEntityDamageByEntityEvent
(API) - Reworked McMMOEntityDamageByRuptureEvent, this no longer extends EntityDamageByEntityEvent, instead it extends EntityEvent

Notes:
Some care went into keeping mcMMO compatible with older versions despite a big API break from Spigot, this may introduce some new bugs, so please report them if you run into any.

Version 2.1.227
Fixed bug where some text would not be displayed to players (Adventure dependency update)
Repair sound effect from mcMMO can now be adjusted in Minecraft sound options (Thanks MithicSpirit)
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,56 @@

import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.entity.EntityEvent;
import org.jetbrains.annotations.NotNull;

public class McMMOEntityDamageByRuptureEvent extends EntityDamageByEntityEvent {
private final McMMOPlayer mcMMODamager;
public class McMMOEntityDamageByRuptureEvent extends EntityEvent implements Cancellable {
private final McMMOPlayer damager;
private final Entity damagee;
private double damage;
private boolean isCancelled = false;
private static final HandlerList handlers = new HandlerList();

public McMMOEntityDamageByRuptureEvent(@NotNull McMMOPlayer damager, @NotNull Entity damagee, double damage) {
super(damager.getPlayer(), damagee, DamageCause.CUSTOM, damage);
this.mcMMODamager = damager;
super(damagee);
this.damager = damager;
this.damagee = damagee;
this.damage = damage;
}

@NotNull
@Deprecated
public McMMOPlayer getMcMMODamager() {
return mcMMODamager;
return damager;
}

public McMMOPlayer getDamager() {
return damager;
}

public double getDamage() {
return damage;
}

public void setDamage(double damage) {
this.damage = Math.max(0, damage);
}

@Override
public boolean isCancelled() {
return isCancelled;
}

@Override
public void setCancelled(boolean cancel) {
isCancelled = cancel;
}

@NotNull
@Override
public HandlerList getHandlers() {
return handlers;
}
}
31 changes: 8 additions & 23 deletions src/main/java/com/gmail/nossr50/listeners/EntityListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.SubSkillType;
import com.gmail.nossr50.datatypes.skills.subskills.interfaces.InteractType;
import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
import com.gmail.nossr50.events.fake.FakeEntityDamageEvent;
import com.gmail.nossr50.events.fake.FakeEntityTameEvent;
import com.gmail.nossr50.events.skills.rupture.McMMOEntityDamageByRuptureEvent;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.metadata.MobMetaFlagType;
import com.gmail.nossr50.metadata.MobMetadataService;
Expand Down Expand Up @@ -261,8 +258,10 @@ public void onEntityCombustByEntityEvent(EntityCombustByEntityEvent event) {
*/
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event instanceof FakeEntityDamageByEntityEvent || event instanceof McMMOEntityDamageByRuptureEvent) {
return;
if (event.getEntity() instanceof LivingEntity livingEntity) {
if (CombatUtils.hasIgnoreDamageMetadata(livingEntity)) {
return;
}
}

double damage = event.getFinalDamage();
Expand Down Expand Up @@ -422,14 +421,6 @@ public void onEntityDamageMonitor(EntityDamageByEntityEvent entityDamageEvent) {

player.sendMessage("Final damage: " + entityDamageEvent.getFinalDamage());

if(entityDamageEvent instanceof FakeEntityDamageByEntityEvent) {
player.sendMessage("This report is for a fake damage event used by mcMMO to test a players permission to hurt another");
}

if(entityDamageEvent instanceof McMMOEntityDamageByRuptureEvent) {
player.sendMessage("This report is for a Rupture damage event, which is sent out by mcMMO");
}

if(entityDamageEvent.isCancelled()) {
player.sendMessage("Event was cancelled, which means no damage should be done.");
}
Expand All @@ -456,14 +447,6 @@ public void onEntityDamageMonitor(EntityDamageByEntityEvent entityDamageEvent) {
player.sendMessage("Target players max health: "+otherPlayer.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue());
player.sendMessage("Target players current health: "+otherPlayer.getHealth());

if(entityDamageEvent instanceof FakeEntityDamageByEntityEvent) {
player.sendMessage("This report is for a fake damage event used by mcMMO to test a players permission to hurt another");
}

if(entityDamageEvent instanceof McMMOEntityDamageByRuptureEvent) {
player.sendMessage("This report is for a Rupture damage event, which is sent out by mcMMO");
}

if(entityDamageEvent.isCancelled()) {
player.sendMessage("Event was cancelled, which means no damage should be done.");
}
Expand Down Expand Up @@ -533,8 +516,10 @@ public void onEntityDamage(EntityDamageEvent event) {
* Old code
*/

if (event instanceof FakeEntityDamageEvent) {
return;
if (event.getEntity() instanceof LivingEntity livingEntity) {
if (CombatUtils.hasIgnoreDamageMetadata(livingEntity)) {
return;
}
}

double damage = event.getFinalDamage();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.gmail.nossr50.runnables.skills;

import com.gmail.nossr50.datatypes.MobHealthbarType;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.events.skills.rupture.McMMOEntityDamageByRuptureEvent;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.util.CancellableRunnable;
import com.gmail.nossr50.util.MetadataConstants;
import com.gmail.nossr50.util.MobHealthbarUtils;
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
import com.google.common.base.Objects;
import org.bukkit.entity.LivingEntity;
Expand Down Expand Up @@ -84,7 +86,8 @@ private boolean applyRupture() {
//Ensure victim has health
if (healthBeforeRuptureIsApplied > 0.01) {
//Send a fake damage event
McMMOEntityDamageByRuptureEvent event = new McMMOEntityDamageByRuptureEvent(ruptureSource, targetEntity, calculateAdjustedTickDamage());
McMMOEntityDamageByRuptureEvent event =
new McMMOEntityDamageByRuptureEvent(ruptureSource, targetEntity, calculateAdjustedTickDamage());
mcMMO.p.getServer().getPluginManager().callEvent(event);

//Ensure the event wasn't cancelled and damage is still greater than 0
Expand All @@ -96,6 +99,7 @@ private boolean applyRupture() {
double damagedHealth = healthBeforeRuptureIsApplied - damage;

targetEntity.setHealth(damagedHealth); //Hurt entity without the unwanted side effects of damage()}
MobHealthbarUtils.handleMobHealthbars(targetEntity, damage, mcMMO.p);
}

return false;
Expand Down
16 changes: 4 additions & 12 deletions src/main/java/com/gmail/nossr50/util/EventUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
import com.gmail.nossr50.events.experience.McMMOPlayerLevelDownEvent;
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent;
import com.gmail.nossr50.events.fake.*;
import com.gmail.nossr50.events.fake.FakeBlockBreakEvent;
import com.gmail.nossr50.events.fake.FakeBlockDamageEvent;
import com.gmail.nossr50.events.fake.FakeEvent;
import com.gmail.nossr50.events.fake.FakePlayerFishEvent;
import com.gmail.nossr50.events.hardcore.McMMOPlayerPreDeathPenaltyEvent;
import com.gmail.nossr50.events.hardcore.McMMOPlayerStatLossEvent;
import com.gmail.nossr50.events.hardcore.McMMOPlayerVampirismEvent;
Expand Down Expand Up @@ -83,17 +86,6 @@ public static boolean isFakeEvent(@NotNull Event event) {
return event instanceof FakeEvent;
}

/**
* Checks to see if damage is from natural sources
* This cannot be used to determine if damage is from vanilla MC, it just checks to see if the damage is from a complex behaviour in mcMMO such as bleed.
*
* @param event this event
* @return true if damage is NOT from an unnatural mcMMO skill (such as bleed DOTs)
*/
public static boolean isDamageFromMcMMOComplexBehaviour(@NotNull Event event) {
return event instanceof FakeEntityDamageEvent;
}

/**
* This little method is just to make the code more readable
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public static void handleMobHealthbars(LivingEntity target, double damage, mcMMO
return;
}

if (isBoss(target)) {
if (isBoss(target) || target instanceof Player) {
return;
}

Expand Down
28 changes: 8 additions & 20 deletions src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.datatypes.skills.SubSkillType;
import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
import com.gmail.nossr50.events.fake.FakeEntityDamageEvent;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.metadata.MobMetaFlagType;
import com.gmail.nossr50.metadata.MobMetadataService;
Expand All @@ -30,7 +28,6 @@
import org.bukkit.attribute.AttributeInstance;
import org.bukkit.entity.*;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.MetadataValue;
Expand Down Expand Up @@ -624,7 +621,6 @@ public static boolean canUseLimitBreak(@NotNull Player player, LivingEntity targ
* @param target LivingEntity which to attempt to damage
* @param damage Amount of damage to attempt to do
*/
@Deprecated
public static void dealDamage(@NotNull LivingEntity target, double damage) {
dealDamage(target, damage, DamageCause.CUSTOM, null);
}
Expand Down Expand Up @@ -669,10 +665,15 @@ public static void dealDamage(@NotNull LivingEntity target, double damage, @NotN
if (target.isDead()) {
return;
}

if(canDamage(attacker, target, cause, damage)) {
try {
// TODO: Check for Spigot API for DamageSource, if DamageSource is found then send out a damage() with a custom damage source
applyIgnoreDamageMetadata(target);
target.damage(damage);
if (attacker != null) {
target.damage(damage, attacker);
} else {
target.damage(damage);
}
} finally {
removeIgnoreDamageMetadata(target);
}
}
Expand Down Expand Up @@ -955,19 +956,6 @@ public static boolean isFriendlyPet(@NotNull Player attacker, @NotNull Tameable
return false;
}

public static boolean canDamage(@Nullable Entity attacker, @NotNull Entity target, @NotNull DamageCause damageCause, double damage) {
EntityDamageEvent damageEvent;
if (attacker != null) {
damageEvent = new FakeEntityDamageByEntityEvent(attacker, target, damageCause, damage);
} else {
damageEvent = new FakeEntityDamageEvent(target, damageCause, damage);
}

mcMMO.p.getServer().getPluginManager().callEvent(damageEvent);

return !damageEvent.isCancelled();
}

/**
* Get the upgrade tier of the item in hand.
*
Expand Down

0 comments on commit 70383b7

Please sign in to comment.