EventUtils.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. package com.gmail.nossr50.util;
  2. import com.gmail.nossr50.datatypes.experience.XPGainReason;
  3. import com.gmail.nossr50.datatypes.experience.XPGainSource;
  4. import com.gmail.nossr50.datatypes.party.Party;
  5. import com.gmail.nossr50.datatypes.player.McMMOPlayer;
  6. import com.gmail.nossr50.datatypes.player.PlayerProfile;
  7. import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
  8. import com.gmail.nossr50.datatypes.skills.SubSkillType;
  9. import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
  10. import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
  11. import com.gmail.nossr50.events.experience.McMMOPlayerLevelChangeEvent;
  12. import com.gmail.nossr50.events.experience.McMMOPlayerLevelDownEvent;
  13. import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
  14. import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent;
  15. import com.gmail.nossr50.events.fake.*;
  16. import com.gmail.nossr50.events.hardcore.McMMOPlayerPreDeathPenaltyEvent;
  17. import com.gmail.nossr50.events.hardcore.McMMOPlayerStatLossEvent;
  18. import com.gmail.nossr50.events.hardcore.McMMOPlayerVampirismEvent;
  19. import com.gmail.nossr50.events.party.McMMOPartyLevelUpEvent;
  20. import com.gmail.nossr50.events.party.McMMOPartyTeleportEvent;
  21. import com.gmail.nossr50.events.party.McMMOPartyXpGainEvent;
  22. import com.gmail.nossr50.events.players.McMMOPlayerProfileLoadEvent;
  23. import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityActivateEvent;
  24. import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityDeactivateEvent;
  25. import com.gmail.nossr50.events.skills.fishing.McMMOPlayerFishingTreasureEvent;
  26. import com.gmail.nossr50.events.skills.fishing.McMMOPlayerMagicHunterEvent;
  27. import com.gmail.nossr50.events.skills.repair.McMMOPlayerRepairCheckEvent;
  28. import com.gmail.nossr50.events.skills.salvage.McMMOPlayerSalvageCheckEvent;
  29. import com.gmail.nossr50.events.skills.secondaryabilities.SubSkillBlockEvent;
  30. import com.gmail.nossr50.events.skills.secondaryabilities.SubSkillEvent;
  31. import com.gmail.nossr50.events.skills.unarmed.McMMOPlayerDisarmEvent;
  32. import com.gmail.nossr50.locale.LocaleLoader;
  33. import com.gmail.nossr50.mcMMO;
  34. import com.gmail.nossr50.util.player.NotificationManager;
  35. import com.gmail.nossr50.util.player.UserManager;
  36. import com.gmail.nossr50.util.skills.CombatUtils;
  37. import com.gmail.nossr50.util.skills.SkillTools;
  38. import org.bukkit.block.Block;
  39. import org.bukkit.enchantments.Enchantment;
  40. import org.bukkit.entity.Entity;
  41. import org.bukkit.entity.FishHook;
  42. import org.bukkit.entity.LivingEntity;
  43. import org.bukkit.entity.Player;
  44. import org.bukkit.event.Event;
  45. import org.bukkit.event.entity.EntityDamageEvent;
  46. import org.bukkit.event.player.PlayerAnimationType;
  47. import org.bukkit.event.player.PlayerFishEvent;
  48. import org.bukkit.inventory.ItemStack;
  49. import org.bukkit.plugin.Plugin;
  50. import org.bukkit.plugin.PluginManager;
  51. import org.jetbrains.annotations.NotNull;
  52. import java.util.HashMap;
  53. import java.util.Map;
  54. /**
  55. * This class is meant to help make event related code less boilerplate
  56. */
  57. public final class EventUtils {
  58. /**
  59. * This is a static utility class, therefore we don't want any instances of
  60. * this class. Making the constructor private prevents accidents like that.
  61. */
  62. private EventUtils() {}
  63. /*
  64. * Quality of Life methods
  65. */
  66. /**
  67. * This is a simple check to see if an {@link Event} is fake or not.
  68. * {@link FakeEvent FakeEvents} should not be processed like normally and maybe even
  69. * be ignored by other {@link Plugin plugins} completely.
  70. *
  71. * @param event The {@link Event} in question
  72. * @return Whether this {@link Event} has been faked by mcMMO and should not be processed normally.
  73. */
  74. public static boolean isFakeEvent(@NotNull Event event) {
  75. return event instanceof FakeEvent;
  76. }
  77. /**
  78. * Checks to see if damage is from natural sources
  79. * This cannot be used to determine if damage is from vanilla MC, it just checks to see if the damage is from a complex behaviour in mcMMO such as bleed.
  80. *
  81. * @param event this event
  82. * @return true if damage is NOT from an unnatural mcMMO skill (such as bleed DOTs)
  83. */
  84. public static boolean isDamageFromMcMMOComplexBehaviour(@NotNull Event event) {
  85. return event instanceof FakeEntityDamageEvent;
  86. }
  87. /**
  88. * This little method is just to make the code more readable
  89. *
  90. * @param entity target entity
  91. * @return the associated McMMOPlayer for this entity
  92. */
  93. public static McMMOPlayer getMcMMOPlayer(@NotNull Entity entity)
  94. {
  95. return UserManager.getPlayer((Player)entity);
  96. }
  97. /**
  98. * Checks to see if a Player was damaged in this EntityDamageEvent
  99. *
  100. * This method checks for the following things and if they are all true it returns true
  101. *
  102. * 1) The player is real and not an NPC
  103. * 2) The player is not in god mode
  104. * 3) The damage dealt is above 0
  105. * 4) The player is loaded into our mcMMO user profiles
  106. *
  107. * @param entityDamageEvent
  108. * @return
  109. */
  110. public static boolean isRealPlayerDamaged(@NotNull EntityDamageEvent entityDamageEvent)
  111. {
  112. //Make sure the damage is above 0
  113. double damage = entityDamageEvent.getFinalDamage();
  114. if (damage <= 0) {
  115. return false;
  116. }
  117. Entity entity = entityDamageEvent.getEntity();
  118. //Check to make sure the entity is not an NPC
  119. if(Misc.isNPCEntityExcludingVillagers(entity))
  120. return false;
  121. if (!entity.isValid() || !(entity instanceof LivingEntity livingEntity)) {
  122. return false;
  123. }
  124. if (CombatUtils.isInvincible(livingEntity, damage)) {
  125. return false;
  126. }
  127. if (livingEntity instanceof Player) {
  128. Player player = (Player) entity;
  129. if (!UserManager.hasPlayerDataKey(player)) {
  130. return true;
  131. }
  132. McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
  133. if(mcMMOPlayer == null)
  134. {
  135. return true;
  136. }
  137. /* Check for invincibility */
  138. if (mcMMOPlayer.getGodMode()) {
  139. entityDamageEvent.setCancelled(true);
  140. return false;
  141. }
  142. return true;
  143. } else {
  144. return false;
  145. }
  146. }
  147. /*
  148. * Others
  149. */
  150. public static @NotNull McMMOPlayerAbilityActivateEvent callPlayerAbilityActivateEvent(@NotNull Player player, @NotNull PrimarySkillType skill) {
  151. McMMOPlayerAbilityActivateEvent event = new McMMOPlayerAbilityActivateEvent(player, skill);
  152. mcMMO.p.getServer().getPluginManager().callEvent(event);
  153. return event;
  154. }
  155. public static @NotNull McMMOPlayerProfileLoadEvent callPlayerProfileLoadEvent(@NotNull Player player, @NotNull PlayerProfile profile){
  156. McMMOPlayerProfileLoadEvent event = new McMMOPlayerProfileLoadEvent(player, profile);
  157. mcMMO.p.getServer().getPluginManager().callEvent(event);
  158. return event;
  159. }
  160. /**
  161. * Calls a new SubSkillEvent for this SubSkill and then returns it
  162. * @param player target player
  163. * @param subSkillType target subskill
  164. * @return the event after it has been fired
  165. */
  166. @Deprecated
  167. public static @NotNull SubSkillEvent callSubSkillEvent(Player player, SubSkillType subSkillType) {
  168. SubSkillEvent event = new SubSkillEvent(player, subSkillType);
  169. mcMMO.p.getServer().getPluginManager().callEvent(event);
  170. return event;
  171. }
  172. /**
  173. * Calls a new SubSkillBlockEvent for this SubSkill and its related block and then returns it
  174. * @param player target player
  175. * @param subSkillType target subskill
  176. * @param block associated block
  177. * @return the event after it has been fired
  178. */
  179. @Deprecated
  180. public static @NotNull SubSkillBlockEvent callSubSkillBlockEvent(@NotNull Player player, @NotNull SubSkillType subSkillType, @NotNull Block block) {
  181. SubSkillBlockEvent event = new SubSkillBlockEvent(player, subSkillType, block);
  182. mcMMO.p.getServer().getPluginManager().callEvent(event);
  183. return event;
  184. }
  185. /**
  186. * Calls a new SubSkillEvent for this SubSkill and then returns it
  187. * @param player target player
  188. * @param abstractSubSkill target subskill
  189. * @return the event after it has been fired
  190. */
  191. public static SubSkillEvent callSubSkillEvent(Player player, AbstractSubSkill abstractSubSkill) {
  192. SubSkillEvent event = new SubSkillEvent(player, abstractSubSkill);
  193. mcMMO.p.getServer().getPluginManager().callEvent(event);
  194. return event;
  195. }
  196. public static FakePlayerAnimationEvent callFakeArmSwingEvent(Player player) {
  197. FakePlayerAnimationEvent event = new FakePlayerAnimationEvent(player, PlayerAnimationType.ARM_SWING);
  198. mcMMO.p.getServer().getPluginManager().callEvent(event);
  199. return event;
  200. }
  201. public static boolean tryLevelChangeEvent(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason) {
  202. McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
  203. mcMMO.p.getServer().getPluginManager().callEvent(event);
  204. boolean isCancelled = event.isCancelled();
  205. if (isCancelled) {
  206. PlayerProfile profile = UserManager.getPlayer(player).getProfile();
  207. profile.modifySkill(skill, profile.getSkillLevel(skill) - (isLevelUp ? levelsChanged : -levelsChanged));
  208. profile.addXp(skill, xpRemoved);
  209. }
  210. return isCancelled;
  211. }
  212. public static boolean tryLevelChangeEvent(@NotNull McMMOPlayer mmoPlayer, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason) {
  213. McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(mmoPlayer.getPlayer(), skill, levelsChanged, xpGainReason) : new McMMOPlayerLevelDownEvent(mmoPlayer.getPlayer(), skill, levelsChanged, xpGainReason);
  214. mcMMO.p.getServer().getPluginManager().callEvent(event);
  215. boolean isCancelled = event.isCancelled();
  216. if (isCancelled) {
  217. mmoPlayer.modifySkill(skill, mmoPlayer.getSkillLevel(skill) - (isLevelUp ? levelsChanged : -levelsChanged));
  218. mmoPlayer.addXp(skill, xpRemoved);
  219. } else {
  220. if (isLevelUp) {
  221. NotificationManager.processLevelUpBroadcasting(mmoPlayer, skill, mmoPlayer.getSkillLevel(skill));
  222. NotificationManager.processPowerLevelUpBroadcasting(mmoPlayer, mmoPlayer.getPowerLevel());
  223. }
  224. }
  225. return isCancelled;
  226. }
  227. public static boolean tryLevelEditEvent(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason, int oldLevel) {
  228. McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged - oldLevel, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
  229. mcMMO.p.getServer().getPluginManager().callEvent(event);
  230. boolean isCancelled = event.isCancelled();
  231. if (isCancelled) {
  232. PlayerProfile profile = UserManager.getPlayer(player).getProfile();
  233. profile.modifySkill(skill, profile.getSkillLevel(skill) - (isLevelUp ? levelsChanged : -levelsChanged));
  234. profile.addXp(skill, xpRemoved);
  235. }
  236. return isCancelled;
  237. }
  238. public static boolean tryLevelEditEvent(@NotNull McMMOPlayer mmoPlayer, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason, int oldLevel) {
  239. McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(mmoPlayer.getPlayer(), skill, levelsChanged - oldLevel, xpGainReason) : new McMMOPlayerLevelDownEvent(mmoPlayer.getPlayer(), skill, levelsChanged, xpGainReason);
  240. mcMMO.p.getServer().getPluginManager().callEvent(event);
  241. boolean isCancelled = event.isCancelled();
  242. if (isCancelled) {
  243. mmoPlayer.modifySkill(skill, mmoPlayer.getSkillLevel(skill) - (isLevelUp ? levelsChanged : -levelsChanged));
  244. mmoPlayer.addXp(skill, xpRemoved);
  245. } else {
  246. if (isLevelUp) {
  247. NotificationManager.processLevelUpBroadcasting(mmoPlayer, skill, mmoPlayer.getSkillLevel(skill));
  248. NotificationManager.processPowerLevelUpBroadcasting(mmoPlayer, mmoPlayer.getPowerLevel());
  249. }
  250. }
  251. return isCancelled;
  252. }
  253. /**
  254. * Simulate a block break event.
  255. *
  256. * @param block The block to break
  257. * @param player The player breaking the block
  258. * @param shouldArmSwing true if an armswing event should be fired, false otherwise
  259. * @return true if the event wasn't cancelled, false otherwise
  260. */
  261. public static boolean simulateBlockBreak(Block block, Player player, boolean shouldArmSwing) {
  262. PluginManager pluginManager = mcMMO.p.getServer().getPluginManager();
  263. // Support for NoCheat
  264. if (shouldArmSwing) {
  265. callFakeArmSwingEvent(player);
  266. }
  267. FakeBlockDamageEvent damageEvent = new FakeBlockDamageEvent(player, block, player.getInventory().getItemInMainHand(), true);
  268. pluginManager.callEvent(damageEvent);
  269. FakeBlockBreakEvent breakEvent = new FakeBlockBreakEvent(block, player);
  270. pluginManager.callEvent(breakEvent);
  271. return !damageEvent.isCancelled() && !breakEvent.isCancelled();
  272. }
  273. public static void handlePartyTeleportEvent(Player teleportingPlayer, Player targetPlayer) {
  274. McMMOPlayer mcMMOPlayer = UserManager.getPlayer(teleportingPlayer);
  275. if(mcMMOPlayer == null)
  276. return;
  277. McMMOPartyTeleportEvent event = new McMMOPartyTeleportEvent(teleportingPlayer, targetPlayer, mcMMOPlayer.getParty().getName());
  278. mcMMO.p.getServer().getPluginManager().callEvent(event);
  279. if (event.isCancelled()) {
  280. return;
  281. }
  282. teleportingPlayer.teleport(targetPlayer);
  283. teleportingPlayer.sendMessage(LocaleLoader.getString("Party.Teleport.Player", targetPlayer.getName()));
  284. targetPlayer.sendMessage(LocaleLoader.getString("Party.Teleport.Target", teleportingPlayer.getName()));
  285. mcMMOPlayer.getPartyTeleportRecord().actualizeLastUse();
  286. }
  287. public static boolean handlePartyXpGainEvent(Party party, float xpGained) {
  288. McMMOPartyXpGainEvent event = new McMMOPartyXpGainEvent(party, xpGained);
  289. mcMMO.p.getServer().getPluginManager().callEvent(event);
  290. boolean isCancelled = event.isCancelled();
  291. if (!isCancelled) {
  292. party.addXp(event.getRawXpGained());
  293. }
  294. return !isCancelled;
  295. }
  296. public static boolean handlePartyLevelChangeEvent(Party party, int levelsChanged, float xpRemoved) {
  297. McMMOPartyLevelUpEvent event = new McMMOPartyLevelUpEvent(party, levelsChanged);
  298. mcMMO.p.getServer().getPluginManager().callEvent(event);
  299. boolean isCancelled = event.isCancelled();
  300. if (isCancelled) {
  301. party.setLevel(party.getLevel() + levelsChanged);
  302. party.addXp(xpRemoved);
  303. }
  304. return !isCancelled;
  305. }
  306. public static boolean handleXpGainEvent(Player player, PrimarySkillType skill, float xpGained, XPGainReason xpGainReason) {
  307. McMMOPlayer mmoPlayer = UserManager.getPlayer(player);
  308. if(mmoPlayer == null)
  309. return true;
  310. McMMOPlayerXpGainEvent event = new McMMOPlayerXpGainEvent(player, skill, xpGained, xpGainReason);
  311. mcMMO.p.getServer().getPluginManager().callEvent(event);
  312. boolean isCancelled = event.isCancelled();
  313. if (!isCancelled) {
  314. mmoPlayer.addXp(skill, event.getRawXpGained());
  315. mmoPlayer.getProfile().registerXpGain(skill, event.getRawXpGained());
  316. }
  317. return !isCancelled;
  318. }
  319. public static boolean handleStatsLossEvent(Player player, HashMap<String, Integer> levelChanged, HashMap<String, Float> experienceChanged) {
  320. if(UserManager.getPlayer(player) == null)
  321. return true;
  322. McMMOPlayerStatLossEvent event = new McMMOPlayerStatLossEvent(player, levelChanged, experienceChanged);
  323. mcMMO.p.getServer().getPluginManager().callEvent(event);
  324. boolean isCancelled = event.isCancelled();
  325. if (!isCancelled) {
  326. levelChanged = event.getLevelChanged();
  327. experienceChanged = event.getExperienceChanged();
  328. PlayerProfile playerProfile = UserManager.getPlayer(player).getProfile();
  329. for (PrimarySkillType primarySkillType : SkillTools.NON_CHILD_SKILLS) {
  330. String skillName = primarySkillType.toString();
  331. int playerSkillLevel = playerProfile.getSkillLevel(primarySkillType);
  332. int threshold = mcMMO.p.getGeneralConfig().getHardcoreDeathStatPenaltyLevelThreshold();
  333. if(playerSkillLevel > threshold) {
  334. playerProfile.modifySkill(primarySkillType, Math.max(threshold, playerSkillLevel - levelChanged.get(skillName)));
  335. playerProfile.removeXp(primarySkillType, experienceChanged.get(skillName));
  336. if (playerProfile.getSkillXpLevel(primarySkillType) < 0) {
  337. playerProfile.setSkillXpLevel(primarySkillType, 0);
  338. }
  339. if (playerProfile.getSkillLevel(primarySkillType) < 0) {
  340. playerProfile.modifySkill(primarySkillType, 0);
  341. }
  342. }
  343. }
  344. }
  345. return !isCancelled;
  346. }
  347. public static boolean handleVampirismEvent(Player killer, Player victim, HashMap<String, Integer> levelChanged, HashMap<String, Float> experienceChanged) {
  348. McMMOPlayerVampirismEvent eventKiller = new McMMOPlayerVampirismEvent(killer, false, levelChanged, experienceChanged);
  349. McMMOPlayerVampirismEvent eventVictim = new McMMOPlayerVampirismEvent(victim, true, levelChanged, experienceChanged);
  350. mcMMO.p.getServer().getPluginManager().callEvent(eventKiller);
  351. mcMMO.p.getServer().getPluginManager().callEvent(eventVictim);
  352. boolean isCancelled = eventKiller.isCancelled() || eventVictim.isCancelled();
  353. if (!isCancelled) {
  354. HashMap<String, Integer> levelChangedKiller = eventKiller.getLevelChanged();
  355. HashMap<String, Float> experienceChangedKiller = eventKiller.getExperienceChanged();
  356. HashMap<String, Integer> levelChangedVictim = eventVictim.getLevelChanged();
  357. HashMap<String, Float> experienceChangedVictim = eventVictim.getExperienceChanged();
  358. McMMOPlayer killerPlayer = UserManager.getPlayer(killer);
  359. //Not loaded
  360. if(killerPlayer == null)
  361. return true;
  362. //Not loaded
  363. if(UserManager.getPlayer(victim) == null)
  364. return true;
  365. PlayerProfile victimProfile = UserManager.getPlayer(victim).getProfile();
  366. for (PrimarySkillType primarySkillType : SkillTools.NON_CHILD_SKILLS) {
  367. String skillName = primarySkillType.toString();
  368. int victimSkillLevel = victimProfile.getSkillLevel(primarySkillType);
  369. killerPlayer.addLevels(primarySkillType, levelChangedKiller.get(skillName));
  370. killerPlayer.beginUnsharedXpGain(primarySkillType, experienceChangedKiller.get(skillName), XPGainReason.VAMPIRISM, XPGainSource.VAMPIRISM);
  371. victimProfile.modifySkill(primarySkillType, victimSkillLevel - levelChangedVictim.get(skillName));
  372. victimProfile.removeXp(primarySkillType, experienceChangedVictim.get(skillName));
  373. if (victimProfile.getSkillXpLevel(primarySkillType) < 0) {
  374. victimProfile.setSkillXpLevel(primarySkillType, 0);
  375. }
  376. if (victimProfile.getSkillLevel(primarySkillType) < 0) {
  377. victimProfile.modifySkill(primarySkillType, 0);
  378. }
  379. }
  380. }
  381. return !isCancelled;
  382. }
  383. public static McMMOPlayerAbilityDeactivateEvent callAbilityDeactivateEvent(Player player, SuperAbilityType ability) {
  384. McMMOPlayerAbilityDeactivateEvent event = new McMMOPlayerAbilityDeactivateEvent(player, mcMMO.p.getSkillTools().getPrimarySkillBySuperAbility(ability));
  385. mcMMO.p.getServer().getPluginManager().callEvent(event);
  386. return event;
  387. }
  388. public static McMMOPlayerFishingTreasureEvent callFishingTreasureEvent(Player player, ItemStack treasureDrop, int treasureXp, Map<Enchantment, Integer> enchants) {
  389. McMMOPlayerFishingTreasureEvent event = enchants.isEmpty() ? new McMMOPlayerFishingTreasureEvent(player, treasureDrop, treasureXp) : new McMMOPlayerMagicHunterEvent(player, treasureDrop, treasureXp, enchants);
  390. mcMMO.p.getServer().getPluginManager().callEvent(event);
  391. return event;
  392. }
  393. public static FakePlayerFishEvent callFakeFishEvent(Player player, FishHook hook) {
  394. FakePlayerFishEvent event = new FakePlayerFishEvent(player, null, hook, PlayerFishEvent.State.FISHING);
  395. mcMMO.p.getServer().getPluginManager().callEvent(event);
  396. return event;
  397. }
  398. public static McMMOPlayerRepairCheckEvent callRepairCheckEvent(Player player, short durability, ItemStack repairMaterial, ItemStack repairedObject) {
  399. McMMOPlayerRepairCheckEvent event = new McMMOPlayerRepairCheckEvent(player, durability, repairMaterial, repairedObject);
  400. mcMMO.p.getServer().getPluginManager().callEvent(event);
  401. return event;
  402. }
  403. public static McMMOPlayerPreDeathPenaltyEvent callPreDeathPenaltyEvent(Player player) {
  404. McMMOPlayerPreDeathPenaltyEvent event = new McMMOPlayerPreDeathPenaltyEvent(player);
  405. mcMMO.p.getServer().getPluginManager().callEvent(event);
  406. return event;
  407. }
  408. public static McMMOPlayerDisarmEvent callDisarmEvent(Player defender) {
  409. McMMOPlayerDisarmEvent event = new McMMOPlayerDisarmEvent(defender);
  410. mcMMO.p.getServer().getPluginManager().callEvent(event);
  411. return event;
  412. }
  413. public static McMMOPlayerSalvageCheckEvent callSalvageCheckEvent(Player player, ItemStack salvageMaterial, ItemStack salvageResults, ItemStack enchantedBook) {
  414. McMMOPlayerSalvageCheckEvent event = new McMMOPlayerSalvageCheckEvent(player, salvageMaterial, salvageResults, enchantedBook);
  415. mcMMO.p.getServer().getPluginManager().callEvent(event);
  416. return event;
  417. }
  418. }