mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-01-30 22:29:36 +01:00
Add event for players taming an entity (#5142)
* Add event for players taming an entity
This commit is contained in:
parent
b36848bd47
commit
0637446cd5
@ -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.config.experience.ExperienceConfig;
|
||||||
import com.gmail.nossr50.datatypes.experience.XPGainReason;
|
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.interactions.NotificationType;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.subskills.taming.CallOfTheWildType;
|
import com.gmail.nossr50.datatypes.skills.subskills.taming.CallOfTheWildType;
|
||||||
import com.gmail.nossr50.datatypes.skills.subskills.taming.TamingSummon;
|
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.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.metadata.MobMetaFlagType;
|
import com.gmail.nossr50.metadata.MobMetaFlagType;
|
||||||
@ -136,7 +138,13 @@ public class TamingManager extends SkillManager {
|
|||||||
* @param entity The LivingEntity to award XP for
|
* @param entity The LivingEntity to award XP for
|
||||||
*/
|
*/
|
||||||
public void awardTamingXP(@NotNull LivingEntity entity) {
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user