mcMMO/src/main/java/com/gmail/nossr50/util/EventUtils.java

290 lines
13 KiB
Java
Raw Normal View History

package com.gmail.nossr50.util;
import com.gmail.nossr50.datatypes.party.Party;
2013-10-18 14:31:00 +02:00
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.player.PlayerProfile;
2018-12-29 14:24:55 +01:00
import com.gmail.nossr50.datatypes.skills.SuperAbility;
import com.gmail.nossr50.datatypes.skills.PrimarySkill;
import com.gmail.nossr50.datatypes.skills.SubSkill;
2014-05-18 17:06:50 +02:00
import com.gmail.nossr50.datatypes.skills.XPGainReason;
2013-10-18 14:31:00 +02:00
import com.gmail.nossr50.events.experience.McMMOPlayerLevelChangeEvent;
import com.gmail.nossr50.events.experience.McMMOPlayerLevelDownEvent;
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
2013-10-18 14:31:00 +02:00
import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent;
import com.gmail.nossr50.events.fake.FakeBlockBreakEvent;
import com.gmail.nossr50.events.fake.FakeBlockDamageEvent;
import com.gmail.nossr50.events.fake.FakePlayerAnimationEvent;
2013-10-18 14:31:00 +02:00
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;
import com.gmail.nossr50.events.party.McMMOPartyLevelUpEvent;
2013-10-18 14:31:00 +02:00
import com.gmail.nossr50.events.party.McMMOPartyTeleportEvent;
import com.gmail.nossr50.events.party.McMMOPartyXpGainEvent;
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityActivateEvent;
2013-10-18 14:31:00 +02:00
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityDeactivateEvent;
import com.gmail.nossr50.events.skills.fishing.McMMOPlayerFishingTreasureEvent;
import com.gmail.nossr50.events.skills.fishing.McMMOPlayerMagicHunterEvent;
import com.gmail.nossr50.events.skills.repair.McMMOPlayerRepairCheckEvent;
2018-12-29 14:24:55 +01:00
import com.gmail.nossr50.events.skills.secondaryabilities.SubSkillEvent;
2013-10-18 14:31:00 +02:00
import com.gmail.nossr50.events.skills.unarmed.McMMOPlayerDisarmEvent;
2018-04-02 18:59:00 +02:00
import com.gmail.nossr50.events.skills.salvage.McMMOPlayerSalvageCheckEvent;
2013-10-18 14:31:00 +02:00
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.mcMMO;
2013-10-18 14:31:00 +02:00
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.block.Block;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.FishHook;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerFishEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginManager;
import java.util.HashMap;
import java.util.Map;
public class EventUtils {
2018-12-29 14:24:55 +01:00
public static McMMOPlayerAbilityActivateEvent callPlayerAbilityActivateEvent(Player player, PrimarySkill skill) {
McMMOPlayerAbilityActivateEvent event = new McMMOPlayerAbilityActivateEvent(player, skill);
mcMMO.p.getServer().getPluginManager().callEvent(event);
return event;
}
2018-12-29 14:24:55 +01:00
public static SubSkillEvent callSubSkillEvent(Player player, SubSkill subSkill) {
SubSkillEvent event = new SubSkillEvent(player, subSkill);
mcMMO.p.getServer().getPluginManager().callEvent(event);
return event;
}
public static FakePlayerAnimationEvent callFakeArmSwingEvent(Player player) {
FakePlayerAnimationEvent event = new FakePlayerAnimationEvent(player);
mcMMO.p.getServer().getPluginManager().callEvent(event);
return event;
}
2018-12-29 14:24:55 +01:00
public static boolean handleLevelChangeEvent(Player player, PrimarySkill skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason) {
McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
mcMMO.p.getServer().getPluginManager().callEvent(event);
2013-10-18 14:31:00 +02:00
boolean isCancelled = event.isCancelled();
if (isCancelled) {
PlayerProfile profile = UserManager.getPlayer(player).getProfile();
profile.modifySkill(skill, profile.getSkillLevel(skill) - (isLevelUp ? levelsChanged : -levelsChanged));
profile.addXp(skill, xpRemoved);
2013-10-18 14:31:00 +02:00
}
return !isCancelled;
}
/**
* Simulate a block break event.
*
* @param block The block to break
* @param player The player breaking the block
* @param shouldArmSwing true if an armswing event should be fired, false otherwise
* @return true if the event wasn't cancelled, false otherwise
*/
public static boolean simulateBlockBreak(Block block, Player player, boolean shouldArmSwing) {
PluginManager pluginManager = mcMMO.p.getServer().getPluginManager();
// Support for NoCheat
if (shouldArmSwing) {
callFakeArmSwingEvent(player);
}
FakeBlockDamageEvent damageEvent = new FakeBlockDamageEvent(player, block, player.getInventory().getItemInMainHand(), true);
pluginManager.callEvent(damageEvent);
FakeBlockBreakEvent breakEvent = new FakeBlockBreakEvent(block, player);
pluginManager.callEvent(breakEvent);
return !damageEvent.isCancelled() && !breakEvent.isCancelled();
}
2013-10-18 14:31:00 +02:00
public static void handlePartyTeleportEvent(Player teleportingPlayer, Player targetPlayer) {
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(teleportingPlayer);
McMMOPartyTeleportEvent event = new McMMOPartyTeleportEvent(teleportingPlayer, targetPlayer, mcMMOPlayer.getParty().getName());
mcMMO.p.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
teleportingPlayer.teleport(targetPlayer);
teleportingPlayer.sendMessage(LocaleLoader.getString("Party.Teleport.Player", targetPlayer.getName()));
targetPlayer.sendMessage(LocaleLoader.getString("Party.Teleport.Target", teleportingPlayer.getName()));
2013-10-28 20:47:47 +01:00
mcMMOPlayer.getPartyTeleportRecord().actualizeLastUse();
2013-10-18 14:31:00 +02:00
}
public static boolean handlePartyXpGainEvent(Party party, float xpGained) {
McMMOPartyXpGainEvent event = new McMMOPartyXpGainEvent(party, xpGained);
mcMMO.p.getServer().getPluginManager().callEvent(event);
boolean isCancelled = event.isCancelled();
if (!isCancelled) {
party.addXp(event.getRawXpGained());
}
return !isCancelled;
}
public static boolean handlePartyLevelChangeEvent(Party party, int levelsChanged, float xpRemoved) {
McMMOPartyLevelUpEvent event = new McMMOPartyLevelUpEvent(party, levelsChanged);
mcMMO.p.getServer().getPluginManager().callEvent(event);
boolean isCancelled = event.isCancelled();
if (isCancelled) {
party.setLevel(party.getLevel() + levelsChanged);
party.addXp(xpRemoved);
}
return !isCancelled;
}
2018-12-29 14:24:55 +01:00
public static boolean handleXpGainEvent(Player player, PrimarySkill skill, float xpGained, XPGainReason xpGainReason) {
McMMOPlayerXpGainEvent event = new McMMOPlayerXpGainEvent(player, skill, xpGained, xpGainReason);
2013-10-18 14:31:00 +02:00
mcMMO.p.getServer().getPluginManager().callEvent(event);
boolean isCancelled = event.isCancelled();
if (!isCancelled) {
UserManager.getPlayer(player).addXp(skill, event.getRawXpGained());
UserManager.getPlayer(player).getProfile().registerXpGain(skill, event.getRawXpGained());
2013-10-18 14:31:00 +02:00
}
return !isCancelled;
2013-10-18 14:31:00 +02:00
}
public static boolean handleStatsLossEvent(Player player, HashMap<String, Integer> levelChanged, HashMap<String, Float> experienceChanged) {
McMMOPlayerStatLossEvent event = new McMMOPlayerStatLossEvent(player, levelChanged, experienceChanged);
mcMMO.p.getServer().getPluginManager().callEvent(event);
boolean isCancelled = event.isCancelled();
if (!isCancelled) {
levelChanged = event.getLevelChanged();
experienceChanged = event.getExperienceChanged();
PlayerProfile playerProfile = UserManager.getPlayer(player).getProfile();
2018-12-29 14:24:55 +01:00
for (PrimarySkill primarySkill : PrimarySkill.NON_CHILD_SKILLS) {
String skillName = primarySkill.toString();
int playerSkillLevel = playerProfile.getSkillLevel(primarySkill);
2018-12-29 14:24:55 +01:00
playerProfile.modifySkill(primarySkill, playerSkillLevel - levelChanged.get(skillName));
playerProfile.removeXp(primarySkill, experienceChanged.get(skillName));
2018-12-29 14:24:55 +01:00
if (playerProfile.getSkillXpLevel(primarySkill) < 0) {
playerProfile.setSkillXpLevel(primarySkill, 0);
}
2018-12-29 14:24:55 +01:00
if (playerProfile.getSkillLevel(primarySkill) < 0) {
playerProfile.modifySkill(primarySkill, 0);
}
}
}
return !isCancelled;
}
public static boolean handleVampirismEvent(Player killer, Player victim, HashMap<String, Integer> levelChanged, HashMap<String, Float> experienceChanged) {
McMMOPlayerVampirismEvent eventKiller = new McMMOPlayerVampirismEvent(killer, false, levelChanged, experienceChanged);
McMMOPlayerVampirismEvent eventVictim = new McMMOPlayerVampirismEvent(victim, true, levelChanged, experienceChanged);
mcMMO.p.getServer().getPluginManager().callEvent(eventKiller);
mcMMO.p.getServer().getPluginManager().callEvent(eventVictim);
boolean isCancelled = eventKiller.isCancelled() || eventVictim.isCancelled();
if (!isCancelled) {
HashMap<String, Integer> levelChangedKiller = eventKiller.getLevelChanged();
HashMap<String, Float> experienceChangedKiller = eventKiller.getExperienceChanged();
HashMap<String, Integer> levelChangedVictim = eventVictim.getLevelChanged();
HashMap<String, Float> experienceChangedVictim = eventVictim.getExperienceChanged();
McMMOPlayer killerPlayer = UserManager.getPlayer(killer);
PlayerProfile victimProfile = UserManager.getPlayer(victim).getProfile();
2018-12-29 14:24:55 +01:00
for (PrimarySkill primarySkill : PrimarySkill.NON_CHILD_SKILLS) {
String skillName = primarySkill.toString();
int victimSkillLevel = victimProfile.getSkillLevel(primarySkill);
2018-12-29 14:24:55 +01:00
killerPlayer.addLevels(primarySkill, levelChangedKiller.get(skillName));
killerPlayer.beginUnsharedXpGain(primarySkill, experienceChangedKiller.get(skillName), XPGainReason.VAMPIRISM);
2018-12-29 14:24:55 +01:00
victimProfile.modifySkill(primarySkill, victimSkillLevel - levelChangedVictim.get(skillName));
victimProfile.removeXp(primarySkill, experienceChangedVictim.get(skillName));
2018-12-29 14:24:55 +01:00
if (victimProfile.getSkillXpLevel(primarySkill) < 0) {
victimProfile.setSkillXpLevel(primarySkill, 0);
}
2018-12-29 14:24:55 +01:00
if (victimProfile.getSkillLevel(primarySkill) < 0) {
victimProfile.modifySkill(primarySkill, 0);
}
}
}
return !isCancelled;
}
2018-12-29 14:24:55 +01:00
public static McMMOPlayerAbilityDeactivateEvent callAbilityDeactivateEvent(Player player, SuperAbility ability) {
McMMOPlayerAbilityDeactivateEvent event = new McMMOPlayerAbilityDeactivateEvent(player, PrimarySkill.byAbility(ability));
2013-10-18 14:31:00 +02:00
mcMMO.p.getServer().getPluginManager().callEvent(event);
return event;
}
public static McMMOPlayerFishingTreasureEvent callFishingTreasureEvent(Player player, ItemStack treasureDrop, int treasureXp, Map<Enchantment, Integer> enchants) {
McMMOPlayerFishingTreasureEvent event = enchants.isEmpty() ? new McMMOPlayerFishingTreasureEvent(player, treasureDrop, treasureXp) : new McMMOPlayerMagicHunterEvent(player, treasureDrop, treasureXp, enchants);
mcMMO.p.getServer().getPluginManager().callEvent(event);
return event;
}
public static FakePlayerFishEvent callFakeFishEvent(Player player, FishHook hook) {
2013-10-18 14:31:00 +02:00
FakePlayerFishEvent event = new FakePlayerFishEvent(player, null, hook, PlayerFishEvent.State.FISHING);
mcMMO.p.getServer().getPluginManager().callEvent(event);
return event;
}
public static McMMOPlayerRepairCheckEvent callRepairCheckEvent(Player player, short durability, ItemStack repairMaterial, ItemStack repairedObject) {
McMMOPlayerRepairCheckEvent event = new McMMOPlayerRepairCheckEvent(player, durability, repairMaterial, repairedObject);
mcMMO.p.getServer().getPluginManager().callEvent(event);
return event;
}
public static McMMOPlayerPreDeathPenaltyEvent callPreDeathPenaltyEvent(Player player) {
McMMOPlayerPreDeathPenaltyEvent event = new McMMOPlayerPreDeathPenaltyEvent(player);
2013-10-18 14:31:00 +02:00
mcMMO.p.getServer().getPluginManager().callEvent(event);
return event;
}
public static McMMOPlayerDisarmEvent callDisarmEvent(Player defender) {
McMMOPlayerDisarmEvent event = new McMMOPlayerDisarmEvent(defender);
mcMMO.p.getServer().getPluginManager().callEvent(event);
return event;
}
2018-04-02 18:59:00 +02:00
public static McMMOPlayerSalvageCheckEvent callSalvageCheckEvent(Player player, ItemStack salvageMaterial, ItemStack salvageResults, ItemStack enchantedBook) {
McMMOPlayerSalvageCheckEvent event = new McMMOPlayerSalvageCheckEvent(player, salvageMaterial, salvageResults, enchantedBook);
mcMMO.p.getServer().getPluginManager().callEvent(event);
return event;
}
2013-10-18 14:31:00 +02:00
}