139 lines
4.5 KiB
Java
139 lines
4.5 KiB
Java
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<Player> 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;
|
|
|
|
}
|