Fixed possible NPE in our events, and BrewingStands now remember who last interacted with them, this allows for hoppers to be used with Alchemy Fixes #5004 Fixes #4958 Fixes #4641

This commit is contained in:
nossr50
2024-05-12 14:09:00 -07:00
parent 17052861d1
commit 3ba6b93135
80 changed files with 1137 additions and 797 deletions

View File

@@ -1,5 +1,6 @@
package com.gmail.nossr50.events.skills;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.entity.Player;
@@ -7,19 +8,35 @@ import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
import org.jetbrains.annotations.NotNull;
import static java.util.Objects.requireNonNull;
/**
* Generic event for mcMMO skill handling.
*/
public abstract class McMMOPlayerSkillEvent extends PlayerEvent {
protected @NotNull PrimarySkillType skill;
protected int skillLevel;
protected McMMOPlayer mmoPlayer;
@Deprecated(forRemoval = true, since = "2.2.010")
protected McMMOPlayerSkillEvent(@NotNull Player player, @NotNull PrimarySkillType skill) {
super(player);
McMMOPlayer mmoPlayer = UserManager.getPlayer(player);
requireNonNull(mmoPlayer, "Player not found in UserManager," +
"contact the dev and tell them to use the constructor for" +
" McMMOPlayerSkillEvent(McMMOPlayer, PrimarySkillType) instead");
this.skill = skill;
this.skillLevel = UserManager.getPlayer(player).getSkillLevel(skill);
}
protected McMMOPlayerSkillEvent(@NotNull McMMOPlayer mmoPlayer, @NotNull PrimarySkillType primarySkillType) {
super(mmoPlayer.getPlayer());
requireNonNull(mmoPlayer, "mmoPlayer cannot be null");
requireNonNull(primarySkillType, "primarySkillType cannot be null");
this.skill = primarySkillType;
this.skillLevel = mmoPlayer.getSkillLevel(primarySkillType);
}
/**
* @return The skill involved in this event
*/
@@ -37,6 +54,15 @@ public abstract class McMMOPlayerSkillEvent extends PlayerEvent {
/** Rest of file is required boilerplate for custom events **/
private static final HandlerList handlers = new HandlerList();
/**
* Returns the {@link McMMOPlayer} associated with this event.
*
* @return The {@link McMMOPlayer} associated with this event.
*/
public @NotNull McMMOPlayer getMcMMOPlayer() {
return mmoPlayer;
}
@Override
public @NotNull HandlerList getHandlers() {
return handlers;

View File

@@ -1,14 +1,24 @@
package com.gmail.nossr50.events.skills.abilities;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import java.util.Objects;
public class McMMOPlayerAbilityActivateEvent extends McMMOPlayerAbilityEvent implements Cancellable {
private boolean cancelled;
@Deprecated(forRemoval = true, since = "2.2.010")
public McMMOPlayerAbilityActivateEvent(Player player, PrimarySkillType skill) {
super(player, skill);
super(Objects.requireNonNull(UserManager.getPlayer(player)), skill);
cancelled = false;
}
public McMMOPlayerAbilityActivateEvent(McMMOPlayer mmoPlayer, PrimarySkillType skill) {
super(mmoPlayer, skill);
cancelled = false;
}

View File

@@ -1,10 +1,20 @@
package com.gmail.nossr50.events.skills.abilities;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import static java.util.Objects.requireNonNull;
public class McMMOPlayerAbilityDeactivateEvent extends McMMOPlayerAbilityEvent {
public McMMOPlayerAbilityDeactivateEvent(Player player, PrimarySkillType skill) {
super(player, skill);
@Deprecated(forRemoval = true, since = "2.2.010")
public McMMOPlayerAbilityDeactivateEvent(@NotNull Player player, @NotNull PrimarySkillType skill) {
this(requireNonNull(UserManager.getPlayer(player)), skill);
}
public McMMOPlayerAbilityDeactivateEvent(@NotNull McMMOPlayer mmoPlayer, @NotNull PrimarySkillType skill) {
super(mmoPlayer, skill);
}
}

View File

@@ -1,16 +1,38 @@
package com.gmail.nossr50.events.skills.abilities;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
import com.gmail.nossr50.events.skills.McMMOPlayerSkillEvent;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.entity.Player;
import java.util.Objects;
public class McMMOPlayerAbilityEvent extends McMMOPlayerSkillEvent {
private final SuperAbilityType ability;
/**
* Create a new McMMOPlayerAbilityEvent.
*
* @param player The player involved in this event
* @param skill The skill involved in this event
* @deprecated Use {@link #McMMOPlayerAbilityEvent(McMMOPlayer, PrimarySkillType)} instead
*/
@Deprecated(forRemoval = true, since = "2.2.010")
protected McMMOPlayerAbilityEvent(Player player, PrimarySkillType skill) {
super(player, skill);
super(Objects.requireNonNull(UserManager.getPlayer(player)), skill);
ability = mcMMO.p.getSkillTools().getSuperAbility(skill);
}
/**
* Create a new McMMOPlayerAbilityEvent.
* @param mmoPlayer The McMMOPlayer involved in this event
* @param skill The skill involved in this event
*/
protected McMMOPlayerAbilityEvent(McMMOPlayer mmoPlayer, PrimarySkillType skill) {
super(mmoPlayer, skill);
ability = mcMMO.p.getSkillTools().getSuperAbility(skill);
}

View File

@@ -1,24 +1,36 @@
package com.gmail.nossr50.events.skills.alchemy;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.events.skills.McMMOPlayerSkillEvent;
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.BrewingStand;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.jetbrains.annotations.NotNull;
import static java.util.Objects.requireNonNull;
public class McMMOPlayerBrewEvent extends McMMOPlayerSkillEvent implements Cancellable {
private final BlockState brewingStand;
private boolean cancelled;
@Deprecated(forRemoval = true, since = "2.2.010")
public McMMOPlayerBrewEvent(Player player, BlockState brewingStand) {
super(player, PrimarySkillType.ALCHEMY);
super(requireNonNull(UserManager.getPlayer(player)), PrimarySkillType.ALCHEMY);
this.brewingStand = brewingStand;
cancelled = false;
}
public McMMOPlayerBrewEvent(@NotNull McMMOPlayer mmoPlayer, @NotNull BlockState brewingStand) {
super(mmoPlayer, PrimarySkillType.ALCHEMY);
this.brewingStand = requireNonNull(brewingStand);
cancelled = false;
}
public boolean isCancelled() {
return cancelled;
}

View File

@@ -1,17 +1,28 @@
package com.gmail.nossr50.events.skills.alchemy;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.events.skills.McMMOPlayerSkillEvent;
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import static java.util.Objects.requireNonNull;
public class McMMOPlayerCatalysisEvent extends McMMOPlayerSkillEvent implements Cancellable {
private double speed;
private boolean cancelled;
@Deprecated(forRemoval = true, since = "2.2.010")
public McMMOPlayerCatalysisEvent(Player player, double speed) {
super(player, PrimarySkillType.ALCHEMY);
super(requireNonNull(UserManager.getPlayer(player)), PrimarySkillType.ALCHEMY);
this.speed = speed;
cancelled = false;
}
public McMMOPlayerCatalysisEvent(McMMOPlayer mmoPlayer, double speed) {
super(mmoPlayer, PrimarySkillType.ALCHEMY);
this.speed = speed;
cancelled = false;
}

View File

@@ -1,15 +1,23 @@
package com.gmail.nossr50.events.skills.fishing;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.events.skills.McMMOPlayerSkillEvent;
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
public class McMMOPlayerFishingEvent extends McMMOPlayerSkillEvent implements Cancellable {
private boolean cancelled;
@Deprecated(forRemoval = true, since = "2.2.010")
protected McMMOPlayerFishingEvent(Player player) {
super(player, PrimarySkillType.FISHING);
super(UserManager.getPlayer(player), PrimarySkillType.FISHING);
cancelled = false;
}
protected McMMOPlayerFishingEvent(McMMOPlayer mmoPlayer) {
super(mmoPlayer, PrimarySkillType.FISHING);
cancelled = false;
}

View File

@@ -1,23 +1,34 @@
package com.gmail.nossr50.events.skills.fishing;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static java.util.Objects.requireNonNull;
public class McMMOPlayerFishingTreasureEvent extends McMMOPlayerFishingEvent {
private ItemStack treasure;
private int xp;
@Deprecated(forRemoval = true, since = "2.2.010")
public McMMOPlayerFishingTreasureEvent(Player player, ItemStack treasure, int xp) {
super(player);
this(requireNonNull(UserManager.getPlayer(player)), treasure, xp);
}
public McMMOPlayerFishingTreasureEvent(@NotNull McMMOPlayer mmoPlayer, @Nullable ItemStack treasure, int xp) {
super(mmoPlayer);
this.treasure = treasure;
this.xp = xp;
}
public ItemStack getTreasure() {
public @Nullable ItemStack getTreasure() {
return treasure;
}
public void setTreasure(ItemStack item) {
public void setTreasure(@Nullable ItemStack item) {
this.treasure = item;
}

View File

@@ -1,20 +1,32 @@
package com.gmail.nossr50.events.skills.fishing;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
public class McMMOPlayerMagicHunterEvent extends McMMOPlayerFishingTreasureEvent {
private final Map<Enchantment, Integer> enchants;
import static java.util.Objects.requireNonNull;
public McMMOPlayerMagicHunterEvent(Player player, ItemStack treasure, int xp, Map<Enchantment, Integer> enchants) {
super(player, treasure, xp);
this.enchants = enchants;
public class McMMOPlayerMagicHunterEvent extends McMMOPlayerFishingTreasureEvent {
private final Map<Enchantment, Integer> enchants = new HashMap<>();
@Deprecated(forRemoval = true, since = "2.2.010")
public McMMOPlayerMagicHunterEvent(@NotNull Player player, @NotNull ItemStack treasure, int xp, @NotNull Map<Enchantment, Integer> enchants) {
this(requireNonNull(UserManager.getPlayer(player)), treasure, xp, enchants);
}
public Map<Enchantment, Integer> getEnchantments() {
public McMMOPlayerMagicHunterEvent(@NotNull McMMOPlayer mmoPlayer, @NotNull ItemStack treasure, int xp, @NotNull Map<Enchantment, Integer> enchants) {
super(mmoPlayer, treasure, xp);
requireNonNull(enchants, "enchants cannot be null");
this.enchants.putAll(enchants);
}
public @NotNull Map<Enchantment, Integer> getEnchantments() {
return enchants;
}
}

View File

@@ -1,11 +1,16 @@
package com.gmail.nossr50.events.skills.secondaryabilities;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.SubSkillType;
import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
import com.gmail.nossr50.events.skills.McMMOPlayerSkillEvent;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.jetbrains.annotations.NotNull;
import static java.util.Objects.requireNonNull;
public class SubSkillEvent extends McMMOPlayerSkillEvent implements Cancellable {
private SubSkillType subSkillType;
@@ -16,9 +21,20 @@ public class SubSkillEvent extends McMMOPlayerSkillEvent implements Cancellable
* Only skills using the old system will fire this event
* @param player target player
* @param subSkillType target subskill
* @deprecated Use {@link #SubSkillEvent(McMMOPlayer, SubSkillType)} instead
*/
public SubSkillEvent(Player player, SubSkillType subSkillType) {
super(player, mcMMO.p.getSkillTools().getPrimarySkillBySubSkill(subSkillType));
@Deprecated(forRemoval = true, since = "2.2.010")
public SubSkillEvent(@NotNull Player player, @NotNull SubSkillType subSkillType) {
this(requireNonNull(UserManager.getPlayer(player)), subSkillType);
}
/**
* Only skills using the old system will fire this event
* @param mmoPlayer target player
* @param subSkillType target subskill
*/
public SubSkillEvent(@NotNull McMMOPlayer mmoPlayer, @NotNull SubSkillType subSkillType) {
super(mmoPlayer, mcMMO.p.getSkillTools().getPrimarySkillBySubSkill(subSkillType));
this.subSkillType = subSkillType;
}
@@ -28,15 +44,30 @@ public class SubSkillEvent extends McMMOPlayerSkillEvent implements Cancellable
* @param subSkillType target subskill
* @param resultModifier a value multiplied against the final result of the dice roll, typically between 0-1.0
*/
public SubSkillEvent(Player player, SubSkillType subSkillType, double resultModifier) {
@Deprecated(forRemoval = true, since = "2.2.010")
public SubSkillEvent(@NotNull Player player, @NotNull SubSkillType subSkillType, double resultModifier) {
this(requireNonNull(UserManager.getPlayer(player)), subSkillType, resultModifier);
}
/**
* Only skills using the old system will fire this event
* @param player target player
* @param subSkillType target subskill
* @param resultModifier a value multiplied against the final result of the dice roll, typically between 0-1.0
*/
public SubSkillEvent(@NotNull McMMOPlayer player, @NotNull SubSkillType subSkillType, double resultModifier) {
super(player, mcMMO.p.getSkillTools().getPrimarySkillBySubSkill(subSkillType));
this.subSkillType = subSkillType;
this.subSkillType = requireNonNull(subSkillType, "subSkillType cannot be null");
this.resultModifier = resultModifier;
}
public SubSkillEvent(Player player, AbstractSubSkill abstractSubSkill)
{
super(player, abstractSubSkill.getPrimarySkill());
@Deprecated(forRemoval = true, since = "2.2.010")
public SubSkillEvent(@NotNull Player player, @NotNull AbstractSubSkill abstractSubSkill) {
this(requireNonNull(UserManager.getPlayer(player)), abstractSubSkill);
}
public SubSkillEvent(@NotNull McMMOPlayer mmoPlayer, @NotNull AbstractSubSkill abstractSubSkill) {
super(mmoPlayer, abstractSubSkill.getPrimarySkill());
}
public double getResultModifier() {