package de.leafbla.meinkraft.roleplay.wizard; import de.leafbla.meinkraft.Main; import de.leafbla.meinkraft.roleplay.ManaAble; import de.leafbla.meinkraft.roleplay.PlayerRole; import de.leafbla.meinkraft.roleplay.Role; import de.leafbla.meinkraft.roleplay.Utils; import de.leafbla.meinkraft.util.Pair; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.craftbukkit.v1_16_R2.entity.CraftSnowball; import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.entity.Snowball; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemHeldEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.projectiles.ProjectileSource; import org.bukkit.scheduler.BukkitRunnable; import java.util.*; public class WizardRole extends PlayerRole implements ManaAble, EventListener { BukkitRunnable refillMana; Set transmorphedPlayers = new HashSet<>(); private int mana; public WizardRole(Main plugin, Player player) { super(plugin, player, Role.WIZARD); } private WizardSpell currentSpell; @Override public int getMana() { return this.mana; } @Override public void setManaRaw(int mana) { this.mana = mana; } @Override public void onUpdateMana() { player.setExp((this.mana * 1.0f) / 100f); } @Override public void onStart() { for (WizardSpell wizardSpell : WizardSpell.values()) this.registerRightClickAction(wizardSpell.getIcon(), wizardSpell.displayName(), () -> wizardSpell.cast(this)); this.currentSpell = WizardSpell.values()[0]; this.mana = 33; refillMana = new BukkitRunnable() { @Override public void run() { addMana(1); } }; refillMana.runTaskTimer(plugin, 0, 5); } private void setupInventory() { ItemStack wand = new ItemStack(Material.STICK); player.getInventory().clear(); player.getInventory().setHeldItemSlot(0); player.getInventory().addItem(Utils.namedItem(Material.STICK, "Wand")); for (WizardSpell wizardSpell : WizardSpell.values()) { player.getInventory().addItem(Utils.namedItem(wizardSpell.getIcon(), wizardSpell.displayName())); } } @Override public void onEnd() { refillMana.cancel(); } @Override public Role getRole() { return Role.WIZARD; } public void onInteractOldTestStuffs(PlayerInteractEvent event) { Player player = event.getPlayer(); if (event.getAction().name().contains("RIGHT")) { ItemStack knife = event.getPlayer().getInventory().getItemInMainHand(); if (knife.getType() == Material.IRON_INGOT) { ItemStack oneknife = knife.clone(); oneknife.setAmount(1); Snowball ball = player.launchProjectile(Snowball.class); ball.setVelocity(ball.getVelocity().multiply(1.2)); ball.setBounce(false); ((CraftSnowball) ball).getHandle().setItem(CraftItemStack.asNMSCopy(oneknife)); int amt = knife.getAmount(); knife.setAmount(amt - 1); player.setItemInHand(knife); } else if (knife.getType() == Material.STICK) { ItemStack oneknife = new ItemStack(Material.FEATHER, 1); Snowball ball = player.launchProjectile(Snowball.class); ball.setVelocity(ball.getVelocity().multiply(3)); ((CraftSnowball) ball).getHandle().setItem(CraftItemStack.asNMSCopy(oneknife)); int amt = knife.getAmount(); flying = true; new BukkitRunnable() { int i = 0; @Override public void run() { if (flying) ball.getWorld().spawnParticle(Particle.FLAME, ball.getLocation(), 0); else this.cancel(); } }.runTaskTimerAsynchronously(this.plugin, 0, 1); //knife.setAmount(amt - 1); //player.setItemInHand(knife); } } } private boolean flying = false; }