BetterTridents/src/main/java/de/jeff_media/notridentvoid/listeners/ProjectileListener.java

67 lines
2.7 KiB
Java

package de.jeff_media.notridentvoid.listeners;
import de.jeff_media.notridentvoid.Main;
import de.jeff_media.notridentvoid.config.Config;
import de.jeff_media.notridentvoid.tasks.WatchTrident;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Trident;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.scheduler.BukkitRunnable;
public class ProjectileListener implements Listener {
private final Main main = Main.getInstance();
/*private boolean hasLoyalty(Entity trident) {
return trident.getPersistentDataContainer().has(Main.LOYALTY_TAG, PersistentDataType.BYTE);
}
private void addLoyalty(Entity trident) {
trident.getPersistentDataContainer().set(Main.LOYALTY_TAG,PersistentDataType.BYTE, (byte) 1);
}*/
private boolean hasLoyalty(ItemStack item) {
if(!item.hasItemMeta()) return false;
ItemMeta meta = item.getItemMeta();
return meta.hasEnchant(Enchantment.LOYALTY);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onShoot(ProjectileLaunchEvent event) {
if(event.getEntityType() != EntityType.TRIDENT) return;
Trident trident = (Trident) event.getEntity();
if(main.isRegistered(trident)) return;
//if(!hasLoyalty(trident)) return;
if(!(trident.getShooter() instanceof Player)) return;
Player player = (Player) trident.getShooter();
ItemStack tridentItem = null;
if(player.getInventory().getItemInMainHand() != null) {
if(player.getInventory().getItemInMainHand().getType() == Material.TRIDENT) {
tridentItem = player.getInventory().getItemInMainHand();
}
} else if(player.getInventory().getItemInOffHand() != null) {
if(player.getInventory().getItemInOffHand().getType() == Material.TRIDENT) {
tridentItem = player.getInventory().getItemInOffHand();
}
}
if(tridentItem == null) return;
if(!hasLoyalty(tridentItem)) return;
if(!main.getConfig().getBoolean(Config.VOID_SAVING)) return;
main.register(trident);
new WatchTrident(trident).runTaskTimer(main,1,1);
Bukkit.getScheduler().runTaskLater(main,() ->main.unregister(trident),20);
}
}