mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-03 18:43:43 +01:00 
			
		
		
		
	Add event for players taming an entity (#5142)
* Add event for players taming an entity
This commit is contained in:
		@@ -0,0 +1,76 @@
 | 
			
		||||
package com.gmail.nossr50.events.skills.taming;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.experience.XPGainReason;
 | 
			
		||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 | 
			
		||||
import com.gmail.nossr50.events.experience.McMMOPlayerExperienceEvent;
 | 
			
		||||
import com.google.common.base.Preconditions;
 | 
			
		||||
import org.bukkit.entity.Entity;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when a player has tamed an entity, and we are about to award them experience for it.
 | 
			
		||||
 */
 | 
			
		||||
public class McMMOPlayerTameEntityEvent extends McMMOPlayerExperienceEvent {
 | 
			
		||||
    private static final HandlerList HANDLER_LIST = new HandlerList();
 | 
			
		||||
 | 
			
		||||
    private final McMMOPlayer mmoPlayer;
 | 
			
		||||
    private float xpGained;
 | 
			
		||||
    private final Entity tamedEntity;
 | 
			
		||||
 | 
			
		||||
    public McMMOPlayerTameEntityEvent(@NotNull McMMOPlayer mmoPlayer, float xp, @NotNull Entity tamedEntity) {
 | 
			
		||||
        super(mmoPlayer.getPlayer(), PrimarySkillType.TAMING, XPGainReason.PVE);
 | 
			
		||||
        this.mmoPlayer = mmoPlayer;
 | 
			
		||||
        this.xpGained = xp;
 | 
			
		||||
        this.tamedEntity = tamedEntity;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return The {@link McMMOPlayer} associated with this event.
 | 
			
		||||
     */
 | 
			
		||||
    @NotNull
 | 
			
		||||
    public McMMOPlayer getMcMMOPlayer() {
 | 
			
		||||
        return mmoPlayer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return The raw experience that the player will receive.
 | 
			
		||||
     */
 | 
			
		||||
    public float getXpGained() {
 | 
			
		||||
        return this.xpGained;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param xpGained The raw experience that the player will receive.
 | 
			
		||||
     * @throws IllegalArgumentException if xpGained is NaN, infinite, or not positive.
 | 
			
		||||
     */
 | 
			
		||||
    public void setXpGained(float xpGained) {
 | 
			
		||||
        Preconditions.checkArgument(Float.isFinite(xpGained), "new gained xp must be a number");
 | 
			
		||||
        Preconditions.checkArgument(xpGained > 0, "new gained xp must be a positive number");
 | 
			
		||||
 | 
			
		||||
        this.xpGained = xpGained;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NotNull
 | 
			
		||||
    public Entity getTamedEntity() {
 | 
			
		||||
        return tamedEntity;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @apiNote Cancelling this event prevents experience from being awarded, but the entity will remain tamed.
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setCancelled(boolean cancelled) {
 | 
			
		||||
        super.setCancelled(cancelled);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return HANDLER_LIST;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public @NotNull HandlerList getHandlers() {
 | 
			
		||||
        return HANDLER_LIST;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -2,12 +2,14 @@ package com.gmail.nossr50.skills.taming;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
 | 
			
		||||
import com.gmail.nossr50.datatypes.experience.XPGainReason;
 | 
			
		||||
import com.gmail.nossr50.datatypes.experience.XPGainSource;
 | 
			
		||||
import com.gmail.nossr50.datatypes.interactions.NotificationType;
 | 
			
		||||
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.datatypes.skills.subskills.taming.CallOfTheWildType;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.subskills.taming.TamingSummon;
 | 
			
		||||
import com.gmail.nossr50.events.skills.taming.McMMOPlayerTameEntityEvent;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.metadata.MobMetaFlagType;
 | 
			
		||||
@@ -136,7 +138,13 @@ public class TamingManager extends SkillManager {
 | 
			
		||||
     * @param entity The LivingEntity to award XP for
 | 
			
		||||
     */
 | 
			
		||||
    public void awardTamingXP(@NotNull LivingEntity entity) {
 | 
			
		||||
        applyXpGain(ExperienceConfig.getInstance().getTamingXP(entity.getType()), XPGainReason.PVE);
 | 
			
		||||
        int xp = ExperienceConfig.getInstance().getTamingXP(entity.getType());
 | 
			
		||||
 | 
			
		||||
        final McMMOPlayerTameEntityEvent event = new McMMOPlayerTameEntityEvent(mmoPlayer, xp, entity);
 | 
			
		||||
        mcMMO.p.getServer().getPluginManager().callEvent(event);
 | 
			
		||||
 | 
			
		||||
        if (!event.isCancelled())
 | 
			
		||||
            applyXpGain(event.getXpGained(), XPGainReason.PVE, XPGainSource.SELF);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user