Skip to content

Commit

Permalink
Add event for players taming an entity
Browse files Browse the repository at this point in the history
  • Loading branch information
Warriorrrr committed Jan 19, 2025
1 parent dab4e77 commit 381bdd3
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package com.gmail.nossr50.events.skills.taming;

import com.gmail.nossr50.datatypes.experience.XPGainReason;
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.entity.Player;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.ApiStatus;
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 float xpGained;
private final Entity tamedEntity;

@ApiStatus.Internal
public McMMOPlayerTameEntityEvent(@NotNull Player player, float xp, @NotNull Entity tamedEntity) {
super(player, PrimarySkillType.TAMING, XPGainReason.PVE);
this.xpGained = xp;
this.tamedEntity = tamedEntity;
}

/**
* @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 or infinite.
*/
public void setXpGained(float xpGained) {
Preconditions.checkArgument(Float.isFinite(xpGained), "new gained xp must be a 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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

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;
Expand Down Expand Up @@ -136,7 +138,13 @@ public boolean canUseBeastLore() {
* @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(getPlayer(), xp, entity);
mcMMO.p.getServer().getPluginManager().callEvent(event);

if (!event.isCancelled())
applyXpGain(event.getXpGained(), XPGainReason.PVE, XPGainSource.SELF);
}

/**
Expand Down

0 comments on commit 381bdd3

Please sign in to comment.