EpicEnchants/src/main/java/com/songoda/epicenchants/listeners/PlayerListener.java

109 lines
5.5 KiB
Java
Raw Normal View History

2019-01-19 14:54:00 +01:00
package com.songoda.epicenchants.listeners;
import com.songoda.epicenchants.EpicEnchants;
import com.songoda.epicenchants.events.ArmorEquipEvent;
2021-07-10 23:41:20 +02:00
import com.songoda.epicenchants.events.HeldItemChangedEvent;
2019-01-19 14:54:00 +01:00
import com.songoda.epicenchants.objects.Enchant;
2021-07-10 23:41:20 +02:00
import org.bukkit.Material;
2019-01-19 14:54:00 +01:00
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
2019-01-24 13:09:57 +01:00
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerItemHeldEvent;
import org.bukkit.event.player.PlayerJoinEvent;
2021-07-10 23:41:20 +02:00
import org.bukkit.inventory.ItemStack;
2019-01-19 14:54:00 +01:00
import java.util.Arrays;
2019-01-19 14:54:00 +01:00
import java.util.Map;
2019-08-04 23:49:57 +02:00
import static com.songoda.epicenchants.enums.EventType.OFF;
import static com.songoda.epicenchants.enums.EventType.ON;
2019-02-11 11:49:22 +01:00
import static com.songoda.epicenchants.enums.TriggerType.*;
2019-01-19 14:54:00 +01:00
public class PlayerListener implements Listener {
private final EpicEnchants instance;
public PlayerListener(EpicEnchants instance) {
this.instance = instance;
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
public void onArmorEquip(ArmorEquipEvent event) {
Map<Enchant, Integer> oldArmorMap = instance.getEnchantUtils().getEnchants(event.getOldArmorPiece());
Map<Enchant, Integer> newArmorMap = instance.getEnchantUtils().getEnchants(event.getNewArmorPiece());
oldArmorMap.forEach((enchant, level) -> enchant.onAction(event.getPlayer(), null, event, level, STATIC_EFFECT, OFF));
newArmorMap.forEach((enchant, level) -> enchant.onAction(event.getPlayer(), null, event, level, STATIC_EFFECT, ON));
2019-01-19 14:54:00 +01:00
}
2021-07-10 23:41:20 +02:00
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
public void onHeldItemChanged(HeldItemChangedEvent event) {
Map<Enchant, Integer> oldItemMap = instance.getEnchantUtils().getEnchants(event.getOldItem());
Map<Enchant, Integer> newItemMap = instance.getEnchantUtils().getEnchants(event.getNewItem());
oldItemMap.forEach((enchant, level) -> enchant.onAction(event.getPlayer(), null, event, level, HELD_ITEM, OFF));
newItemMap.forEach((enchant, level) -> enchant.onAction(event.getPlayer(), null, event, level, HELD_ITEM, ON));
}
2019-01-19 14:54:00 +01:00
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void onPlayerItemHeld(PlayerItemHeldEvent event) {
instance.getEnchantUtils().getEnchants(event.getPlayer().getInventory().getItem(event.getPreviousSlot()))
.forEach((enchant, level) -> enchant.onAction(event.getPlayer(), null, event, level, HELD_ITEM, OFF));
instance.getEnchantUtils().getEnchants(event.getPlayer().getInventory().getItem(event.getNewSlot()))
.forEach((enchant, level) -> enchant.onAction(event.getPlayer(), null, event, level, HELD_ITEM, ON));
2019-01-19 14:54:00 +01:00
}
2019-01-24 13:09:57 +01:00
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void onPlayerDeath(PlayerDeathEvent event) {
instance.getEnchantUtils().handlePlayer(event.getEntity(), event.getEntity().getKiller(), event, DEATH);
2019-01-24 13:09:57 +01:00
if (event.getEntity().getKiller() != null) {
instance.getEnchantUtils().handlePlayer(event.getEntity().getKiller(), event.getEntity(), event, KILLED_PLAYER);
2019-01-24 13:09:57 +01:00
}
}
@EventHandler(priority = EventPriority.HIGHEST)
2019-01-24 13:09:57 +01:00
public void onPlayerInteract(PlayerInteractEvent event) {
2019-08-05 21:28:32 +02:00
if (event.getAction() == Action.RIGHT_CLICK_AIR) {
instance.getEnchantUtils().handlePlayer(event.getPlayer(), null, event, RIGHT_CLICK);
2019-08-05 21:28:32 +02:00
} else if (event.getAction() == Action.LEFT_CLICK_AIR) {
instance.getEnchantUtils().handlePlayer(event.getPlayer(), null, event, LEFT_CLICK);
2019-01-24 13:09:57 +01:00
}
2019-08-05 21:28:32 +02:00
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
instance.getEnchantUtils().handlePlayer(event.getPlayer(), null, event, RIGHT_CLICK_BLOCK);
} else if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
instance.getEnchantUtils().handlePlayer(event.getPlayer(), null, event, LEFT_CLICK_BLOCK);
}
2019-01-24 13:09:57 +01:00
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void onBlockBreak(BlockBreakEvent event) {
instance.getEnchantUtils().handlePlayer(event.getPlayer(), null, event, BLOCK_BREAK);
2019-08-05 18:57:06 +02:00
if (event.getExpToDrop() != 0)
instance.getEnchantUtils().handlePlayer(event.getPlayer(), null, event, EXPERIENCE_BLOCK_BREAK);
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void onPlayerJoin(PlayerJoinEvent event) {
event.getPlayer().getActivePotionEffects().stream().filter(potion -> potion.getDuration() >= 32760)
.forEach(potionEffect -> event.getPlayer().removePotionEffect(potionEffect.getType()));
Arrays.stream(event.getPlayer().getInventory().getArmorContents()).forEach(itemStack -> {
instance.getEnchantUtils().getEnchants(itemStack).forEach((enchant, level)
-> enchant.onAction(event.getPlayer(), null, event, level, STATIC_EFFECT, ON));
});
ItemStack mainhand = event.getPlayer().getInventory().getItem(event.getPlayer().getInventory().getHeldItemSlot());
if (isItem(mainhand))
instance.getEnchantUtils().getEnchants(mainhand).forEach((enchant, level)
-> enchant.onAction(event.getPlayer(), null, event, level, HELD_ITEM, ON));
}
private boolean isItem(ItemStack is) {
return is != null && is.getType() != Material.AIR && is.getAmount() > 0;
2019-01-24 13:09:57 +01:00
}
2019-01-19 14:54:00 +01:00
}