93 lines
3.7 KiB
Java
93 lines
3.7 KiB
Java
package de.jeff_media.bettertridents.listeners;
|
|
|
|
import de.jeff_media.bettertridents.Main;
|
|
import de.jeff_media.bettertridents.config.Config;
|
|
import de.jeff_media.bettertridents.config.Permissions;
|
|
import de.jeff_media.bettertridents.tasks.WatchTrident;
|
|
import de.jeff_media.bettertridents.utils.EnchantmentUtils;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.enchantments.Enchantment;
|
|
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.persistence.PersistentDataType;
|
|
|
|
public class TridentThrowListener implements Listener {
|
|
|
|
private final Main main = Main.getInstance();
|
|
|
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
|
public void onTridentThrow(ProjectileLaunchEvent event) {
|
|
if (event.getEntityType() != EntityType.TRIDENT) return;
|
|
main.debug("Trident throw Listener: ProjectileLaunchEvent");
|
|
|
|
Trident trident = (Trident) event.getEntity();
|
|
if (!(trident.getShooter() instanceof Player)) {
|
|
main.debug("This trident wasn't thrown by a player.");
|
|
return;
|
|
}
|
|
Player player = (Player) trident.getShooter();
|
|
|
|
// Impaling
|
|
int impaling = EnchantmentUtils.getLevelFromTrident(player, Enchantment.IMPALING);
|
|
main.debug("Applying impaling level " + impaling);
|
|
EnchantmentUtils.registerImpaling((Trident) event.getEntity(), impaling);
|
|
|
|
// Offhand
|
|
if (player.getInventory().getItemInMainHand().getType() == Material.TRIDENT) return;
|
|
if (player.getInventory().getItemInOffHand().getType() != Material.TRIDENT) return;
|
|
trident.getPersistentDataContainer().set(Main.OFFHAND_TAG, PersistentDataType.BYTE, (byte) 1);
|
|
main.debug("This trident was thrown by the offhand.");
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
|
public void applyLoyalty(ProjectileLaunchEvent event) {
|
|
main.debug("VoidListener");
|
|
if (event.getEntityType() != EntityType.TRIDENT) {
|
|
main.debug("Not a trident");
|
|
return;
|
|
}
|
|
Trident trident = (Trident) event.getEntity();
|
|
if (!(trident.getShooter() instanceof Player)) {
|
|
main.debug("Not shot by player");
|
|
return;
|
|
}
|
|
Player player = (Player) trident.getShooter();
|
|
if(!player.hasPermission(Permissions.SAVE_VOID)) return;
|
|
ItemStack tridentItem = null;
|
|
if (player.getInventory().getItemInOffHand() != null) {
|
|
if (player.getInventory().getItemInOffHand().getType() == Material.TRIDENT) {
|
|
tridentItem = player.getInventory().getItemInOffHand();
|
|
}
|
|
}
|
|
if (player.getInventory().getItemInMainHand() != null) {
|
|
if (player.getInventory().getItemInMainHand().getType() == Material.TRIDENT) {
|
|
tridentItem = player.getInventory().getItemInMainHand();
|
|
}
|
|
}
|
|
if (tridentItem == null) {
|
|
main.debug("tridentItem not found");
|
|
return;
|
|
}
|
|
if (!EnchantmentUtils.hasLoyalty(tridentItem)) {
|
|
main.debug("No loyalty");
|
|
return;
|
|
}
|
|
if(!main.getConfig().getBoolean(Config.VOID_SAVING)) {
|
|
main.debug("Void Saving disabled");
|
|
return;
|
|
}
|
|
//main.setLoyal(trident);
|
|
main.debug("New task: WatchTrident");
|
|
new WatchTrident(trident).runTaskTimer(main,1,1);
|
|
//Bukkit.getScheduler().runTaskLater(main,() ->main.removeLoyal(trident),1200);
|
|
}
|
|
|
|
}
|