Wizards: More changes as per demand.

This commit is contained in:
libraryaddict 2015-04-16 05:51:08 +12:00
parent 073c7d16c2
commit 8803941bd8
13 changed files with 274 additions and 252 deletions

View File

@ -96,7 +96,7 @@ public class UtilParticle
PORTAL("portal"),
/**
* Can be colored if count is 0, color is RGB and depends on the offset of xyz
* Can be colored if count is 0, color is RGB and depends on the offset of xyz. Offset y if 0 will default to 1, counter by making it 0.0001
*/
RED_DUST("reddust"),

View File

@ -41,6 +41,7 @@ public class SpellButton implements IButton
_spellPage.getWizards().drawUtilTextBottom(player);
_spellPage.getWizards().changeWandsTitles(player);
player.closeInventory();
}
}

View File

@ -15,94 +15,103 @@ import org.bukkit.entity.Player;
public class SpellMenuPage extends ShopPageBase<WizardSpellMenu, WizardSpellMenuShop>
{
private Wizards _wizard;
private Wizards _wizard;
public SpellMenuPage(WizardSpellMenu plugin, WizardSpellMenuShop shop, CoreClientManager clientManager,
DonationManager donationManager, Player player, Wizards wizard)
{
super(plugin, shop, clientManager, donationManager, "Spell Menu", player);
_wizard = wizard;
buildPage();
}
public SpellMenuPage(WizardSpellMenu plugin, WizardSpellMenuShop shop, CoreClientManager clientManager,
DonationManager donationManager, Player player, Wizards wizard)
{
super(plugin, shop, clientManager, donationManager, "Spell Menu", player);
_wizard = wizard;
buildPage();
}
@Override
protected void buildPage()
{
Wizard wizard = getWizards().getWizard(getPlayer());
@Override
protected void buildPage()
{
Wizard wizard = getWizards().getWizard(getPlayer());
ArrayList<Integer> usedNumbers = new ArrayList<Integer>();
ArrayList<Integer> usedNumbers = new ArrayList<Integer>();
for (SpellElement ele : SpellElement.values())
{
addItem(ele.getSlot(), new ShopItem(ele.getIcon(), ele.name(), ele.name(), 1, true, true));
for (SpellElement ele : SpellElement.values())
{
addItem(ele.getSlot(), new ShopItem(ele.getIcon(), ele.name(), ele.name(), 1, true, true));
for (int i = ele.getFirstSlot(); i <= ele.getSecondSlot(); i++)
{
usedNumbers.add(i);
}
}
for (int i = ele.getFirstSlot(); i <= ele.getSecondSlot(); i++)
{
usedNumbers.add(i);
}
}
for (int i = 0; i < 54; i++)
{
SpellType spell = null;
for (SpellType spells : SpellType.values())
{
if (spells.getSlot() == i)
{
spell = spells;
break;
}
}
for (int i = 0; i < 54; i++)
{
SpellType spell = null;
for (SpellType spells : SpellType.values())
{
if (spells.getSlot() == i)
{
spell = spells;
break;
}
}
if (usedNumbers.contains(i % 9) && spell != null)
{
if (usedNumbers.contains(i % 9) && spell != null)
{
int spellLevel = wizard == null ? 1 : wizard.getSpellLevel(spell);
int spellLevel = wizard == null ? 1 : wizard.getSpellLevel(spell);
if (spellLevel > 0)
{
ItemBuilder builder = new ItemBuilder(spell.getSpellItem());
builder.setTitle(spell.getElement().getColor() + spell.getSpellName());
builder.addLore("");
builder.addLore(C.cBlue + C.Bold + "Spell Level: " + C.cWhite + spellLevel);
builder.addLore(C.cBlue + C.Bold + "Mana Cost: " + C.cWhite
+ (wizard == null ? spell.getBaseManaCost() : spell.getManaCost(wizard)));
builder.addLore(C.cBlue + C.Bold + "Cooldown: " + C.cWhite
+ (wizard == null ? spell.getBaseCooldown() : spell.getSpellCooldown(wizard)) + " seconds");
builder.addLore("");
if (spellLevel > 0)
{
ItemBuilder builder = new ItemBuilder(spell.getSpellItem());
for (String lore : spell.getDesc())
{
builder.addLore(C.cGray + lore, 35);
}
builder.setTitle(spell.getElement().getColor() + spell.getSpellName());
if (wizard == null)
{
addItem(i, new ShopItem(builder.build(), spell.name(), spell.name(), 1, true, true));
}
else
{
addButton(i, new ShopItem(builder.build(), spell.name(), spell.name(), 1, true, true), new SpellButton(
this, spell));
}
}
else
{
addItem(i, new ShopItem(new ItemBuilder(Material.INK_SACK, 1, (byte) 8).setTitle(C.cRed + C.Bold + "Unknown")
.build(), "Unknown", "Unknown", 1, true, true));
}
}
else if (!usedNumbers.contains(i % 9))
{
addItem(i, new ShopItem(new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (byte) 15).setTitle(C.cRed + "").build(),
"No Item", "No Item", 1, true, true));
}
}
}
builder.addLore("");
builder.addLore(C.cBlue + C.Bold + "Spell Level: " + C.cWhite + spellLevel);
builder.addLore(C.cBlue + C.Bold + "Mana Cost: " + C.cWhite
+ (wizard == null ? spell.getBaseManaCost() : spell.getManaCost(wizard)));
builder.addLore(C.cBlue + C.Bold + "Cooldown: " + C.cWhite
+ (wizard == null ? spell.getBaseCooldown() : spell.getSpellCooldown(wizard)) + " seconds");
builder.addLore("");
public Wizards getWizards()
{
return _wizard;
}
for (String lore : spell.getDesc())
{
builder.addLore(C.cGray + lore, 40);
}
if (wizard == null)
{
addItem(i, new ShopItem(builder.build(), spell.name(), spell.name(), 1, true, true));
}
else
{
builder.addLore("");
builder.addLore(C.cPurple + C.Bold + "LEFT CLICK" + C.cDGreen + " Bind to Wand");
builder.addLore(C.cGreen + C.Bold + "RIGHT CLICK" + C.cBlue + " Quickcast Spell");
addButton(i, new ShopItem(builder.build(), spell.name(), spell.name(), 1, true, true), new SpellButton(
this, spell));
}
}
else
{
addItem(i, new ShopItem(new ItemBuilder(Material.INK_SACK, 1, (byte) 8).setTitle(C.cRed + C.Bold + "Unknown")
.build(), "Unknown", "Unknown", 1, true, true));
}
}
else if (!usedNumbers.contains(i % 9))
{
addItem(i, new ShopItem(new ItemBuilder(Material.STAINED_GLASS_PANE, 1, (byte) 15).setTitle(C.cRed + "").build(),
"No Item", "No Item", 1, true, true));
}
}
}
public Wizards getWizards()
{
return _wizard;
}
}

View File

@ -122,25 +122,6 @@ public enum SpellType // ❤
"Use this! Heal yourself up!"),
/*Drain(SpellElement.MISC, // Spell element
"Drain", // Spell name
new ItemStack(Material.BUCKET), // Spell icon
SpellDrain.class, // Spell class
3, // Spell max level
30, // Mana cost
20, // Spell cooldown
-3, // Mana cost change per level
-4, // Cooldown change per level
3, // Item amount in loot
"",
"Right click other players with this spell",
"to empty their mana reserves!", TODO Make this area based and drain completely of mana or a rune and drain passively.
"You gain a third of the absorbed mana!"),*/
IcePrison(SpellElement.MISC, // Spell element
"Ice Prison", // Spell name
new ItemStack(Material.ICE), // Spell icon
@ -178,11 +159,11 @@ public enum SpellType // ❤
"",
"Overwhelm your opponent with shards!",
"Each shard is fired half a second after",
"the last allowing you to pummel your",
"enemies senseless!"),
Implode(SpellElement.MISC, // Spell element
@ -246,9 +227,8 @@ public enum SpellType // ❤
"",
"The basic spell all beginner mages are taught.",
"This creates a magic missile that is commonly attributed to the magic profession."),
"Basic spell all beginner mages are taught," + " this creates a magic missile commonly attributed towards "
+ "the magic profession and homes in towards the closest target!"),
Napalm(SpellElement.ATTACK, // Spell element
"Napalm", // Spell name
@ -288,11 +268,15 @@ public enum SpellType // ❤
"",
"Finally you too can be a",
"Firing rainbow beams of love and hope!",
"magical girl of love and hope!",
"This spell damages the target instantly!",
"* Damage lowers after 30 blocks!"),
"The thing is, to make this fit in with our",
"budget the damage will decrease after",
"30 blocks by 0.2 damage per block!"),
RainbowRoad(SpellElement.MISC, // Spell element
"Rainbow Road", // Spell name
@ -319,16 +303,14 @@ public enum SpellType // ❤
SpellRumble.class, // Spell class
5, // Spell max level
30, // Mana cost
5, // Spell cooldown
15, // Spell cooldown
0, // Mana cost change per level
0, // Cooldown change per level
-1, // Cooldown change per level
10, // Item amount in loot
C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 2",
C.cGold + C.Bold + "Explosion Damage:",
C.Bold + C.cWhite + "((Spell Level / 4) + 1) x (1 - (Distance / 2))",
C.cGold + C.Bold + "Explosion Damage: " + C.Bold + C.cWhite + "Spell Level / 4",
C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "Spell Level x 10",
@ -645,7 +627,11 @@ public enum SpellType // ❤
public ItemStack getSpellBook(Wizards wizards)
{
return makeSpell(wizards, new ItemBuilder(Material.ENCHANTED_BOOK).addLore(C.cAqua + "Click to level up this spell")
return makeSpell(wizards,
new ItemBuilder(_item)
.addLore(C.cAqua + "Click to level up this spell")
.build());
}
@ -681,7 +667,9 @@ public enum SpellType // ❤
public ItemStack makeSpell(Wizards wizards, ItemStack item)
{
ItemBuilder builder = new ItemBuilder(item);
builder.setTitle(C.cDBlue + C.Bold + "Spell: " + _type._chatColor + getSpellName() + wizards.buildTime());
return builder.build();
}
}

View File

@ -314,7 +314,6 @@ public class Wizards extends SoloGame
if (item != null && item.getType() == Material.BLAZE_ROD)
{
ItemMeta meta = item.getItemMeta();
String display;
if (type != null)
@ -332,6 +331,8 @@ public class Wizards extends SoloGame
display = C.cWhite + "Right click to set a spell";
}
ItemMeta meta = item.getItemMeta();
if (!meta.hasDisplayName() || !meta.getDisplayName().equals(display))
{
meta.setDisplayName(display);
@ -686,15 +687,17 @@ public class Wizards extends SoloGame
Entry<ItemStack, Integer> entry = _randomItems.get(UtilMath.r(_randomItems.size()));
ItemStack item = entry.getKey().clone();
SpellType spellType = getSpell(item);
// Every chest has a spell.
if (i > 5 && item.getType() != Material.ENCHANTED_BOOK)
if (i > 5 && spellType == null)
{
continue;
}
if (!containsSpell)
{
containsSpell = item.getType() == Material.ENCHANTED_BOOK;
containsSpell = spellType != null;
}
item.setAmount(item.getAmount() + UtilMath.r(entry.getValue() + 1));
@ -710,12 +713,16 @@ public class Wizards extends SoloGame
if (item.hasItemMeta() && item.getItemMeta().hasDisplayName())
{
String title = item.getItemMeta().getDisplayName();
title = ChatColor.stripColor(title.substring(title.split(" ")[0].length() + 1));
for (SpellType spell : SpellType.values())
if (title.contains(" "))
{
if (spell.getSpellName().equals(title))
return spell;
title = ChatColor.stripColor(title.substring(title.split(" ")[0].length() + 1));
for (SpellType spell : SpellType.values())
{
if (spell.getSpellName().equals(title))
return spell;
}
}
}
@ -768,6 +775,7 @@ public class Wizards extends SoloGame
public ItemStack makeUnusedWand()
{
ItemBuilder builder = new ItemBuilder(Material.BLAZE_ROD);
builder.setTitle(ChatColor.WHITE + "Spell Wand" + buildTime());
builder.addLore(
@ -868,21 +876,18 @@ public class Wizards extends SoloGame
if (event.getInventory().getHolder() instanceof Chest || event.getInventory().getHolder() instanceof DoubleChest)
{
if (item != null && item.getType() == Material.ENCHANTED_BOOK)
SpellType spell = getSpell(item);
if (spell != null)
{
onSpellLearn(p, spell);
SpellType spell = getSpell(item);
event.setCancelled(true);
event.setCurrentItem(new ItemStack(Material.AIR));
if (spell != null)
{
onSpellLearn(p, spell);
event.setCancelled(true);
event.setCurrentItem(new ItemStack(Material.AIR));
p.playSound(p.getLocation(), Sound.NOTE_STICKS, 0.7F, 0);
}
p.playSound(p.getLocation(), Sound.NOTE_STICKS, 0.7F, 0);
}
}
if (item.getType() == Material.BLAZE_ROD
@ -956,31 +961,26 @@ public class Wizards extends SoloGame
{
ItemStack item = event.getEntity().getItemStack();
if (item.getType() == Material.ENCHANTED_BOOK)
SpellType spell = getSpell(item);
if (spell != null)
{
Hologram holo = new Hologram(getArcadeManager().getHologramManager(),
SpellType spell = getSpell(item);
event.getEntity().getLocation().add(0, 1, 0),
if (spell != null)
{
C.cDPurple + C.Bold + "Spellbook",
Hologram holo = new Hologram(getArcadeManager().getHologramManager(),
spell.getElement().getColor() + spell.getSpellName());
event.getEntity().getLocation().add(0, 1, 0),
holo.setFollowEntity(event.getEntity());
C.cDPurple + C.Bold + "Spellbook",
holo.setRemoveOnEntityDeath();
spell.getElement().getColor() + spell.getSpellName());
holo.start();
holo.setFollowEntity(event.getEntity());
_droppedWandsBooks.add(event.getEntity());
holo.setRemoveOnEntityDeath();
holo.start();
_droppedWandsBooks.add(event.getEntity());
}
}
else if (item.getType() == Material.BLAZE_ROD)
{
@ -1230,18 +1230,15 @@ public class Wizards extends SoloGame
}
}
else if (item.getType() == Material.ENCHANTED_BOOK)
else if (getSpell(item) != null)
{
SpellType spell = getSpell(item);
if (spell != null)
{
onSpellLearn(p, spell);
onSpellLearn(p, spell);
event.setCancelled(true);
event.getItem().remove();
}
event.setCancelled(true);
event.getItem().remove();
}
else if (item.getType() == Material.NETHER_STAR)

View File

@ -6,6 +6,7 @@ import mineplex.core.common.util.UtilPlayer;
import nautilus.game.arcade.game.games.wizards.Spell;
import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
@ -14,27 +15,38 @@ public class SpellGust extends Spell implements SpellClick
{
@Override
public void castSpell(Player player)
public void castSpell(final Player player)
{
Vector vector = player.getLocation().getDirection().setY(0).normalize().multiply(1.5).setY(0.3)
final Vector vector = player.getLocation().getDirection().setY(0).normalize().multiply(1.5).setY(0.3)
.multiply(1.2 + (getSpellLevel(player) * 0.4D));
HashMap<Player, Double> effected = UtilPlayer.getPlayersInPyramid(player, 45, 10 * getSpellLevel(player));
for (Player target : effected.keySet())
{
Wizards.getArcadeManager().GetCondition().Factory().Falling("Gust", target, player, 10, false, true);
target.setVelocity(vector);
target.getWorld().playSound(target.getLocation(), Sound.BAT_TAKEOFF, 1, 0.7F);
}
final HashMap<Player, Double> effected = UtilPlayer.getPlayersInPyramid(player, 45, 10 * getSpellLevel(player));
if (!effected.isEmpty())
{
player.playSound(player.getLocation(), Sound.BAT_TAKEOFF, 1, 0.7F);
charge(player);
Bukkit.getScheduler().scheduleSyncDelayedTask(Wizards.getArcadeManager().getPlugin(), new Runnable()
{
public void run()
{
for (Player target : effected.keySet())
{
if (!Wizards.IsAlive(target))
{
continue;
}
Wizards.getArcadeManager().GetCondition().Factory().Falling("Gust", target, player, 10, false, true);
target.setVelocity(vector);
target.getWorld().playSound(target.getLocation(), Sound.BAT_TAKEOFF, 1, 0.7F);
}
player.playSound(player.getLocation(), Sound.BAT_TAKEOFF, 1, 0.7F);
}
});
}
}
}

View File

@ -1,11 +1,16 @@
package nautilus.game.arcade.game.games.wizards.spells;
import java.util.HashMap;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilShapes;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.projectile.IThrown;
import mineplex.core.projectile.ProjectileUser;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.game.games.wizards.Spell;
import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick;
@ -14,23 +19,19 @@ import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
public class SpellIceShards extends Spell implements SpellClick, IThrown
{
// private HashMap<ArrayList, Long> _shardsExpire = new HashMap<ArrayList, Long>();
// private HashMap<ArrayList<Entity>, HashMap<String, Integer>> _hitShards = new HashMap<ArrayList<Entity>, HashMap<String,
// Integer>>();
private HashMap<Entity, Location> _lastParticles = new HashMap<Entity, Location>();
@Override
public void castSpell(final Player player)
{
// final ArrayList<Entity> firedShards = new ArrayList<Entity>();
// _shardsExpire.put(firedShards, System.currentTimeMillis() + 60000);
// _hitShards.put(firedShards, new HashMap<String, Integer>());
shoot(player);
for (int i = 1; i <= getSpellLevel(player); i++)
@ -51,31 +52,6 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown
charge(player);
}
/*@EventHandler
public void onSecond(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC)
{
return;
}
if (!Wizards.IsLive())
return;
Iterator<Entry<ArrayList, Long>> itel = _shardsExpire.entrySet().iterator();
while (itel.hasNext())
{
Entry<ArrayList, Long> entry = itel.next();
if (entry.getValue() < System.currentTimeMillis())
{
itel.remove();
_hitShards.remove(entry.getKey());
}
}
}*/
private void shoot(Player player)
{
@ -88,13 +64,13 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown
ItemStackFactory.Instance.CreateStack(Material.GHAST_TEAR, (byte) 0, 1, "Ice Shard " + player.getName() + " "
+ System.currentTimeMillis()));
// firedShards.add(ent);
UtilAction.velocity(ent, player.getLocation().getDirection(), 2.3, false, 0, 0.2, 10, false);
UtilAction.velocity(ent, player.getLocation().getDirection(), 2, false, 0, 0.2, 10, false);
Wizards.getArcadeManager().GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 2f);
player.getWorld().playSound(player.getLocation(), Sound.CLICK, 1.2F, 0.8F);
_lastParticles.put(ent, ent.getLocation());
}
}
@ -103,25 +79,6 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown
{
if (target != null && target instanceof Player)
{
/*String name = ((Player) target).getName();
int timesHit = 0;
for (Entry<ArrayList<Entity>, HashMap<String, Integer>> entry : _hitShards.entrySet())
{
if (entry.getKey().contains(data.GetThrown()))
{
HashMap<String, Integer> map = entry.getValue();
if (map.containsKey(name))
{
timesHit = map.get(name);
}
map.put(name, timesHit + 1);
break;
}
}*/
// Damage Event
Wizards.getArcadeManager()
@ -129,11 +86,6 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown
.NewDamageEvent(target, data.GetThrower(), null, DamageCause.PROJECTILE, 4 /*+ (timesHit * 2)*/, true, true,
false, "Ice Shard", "Ice Shard");
/*if (timesHit > 0)
{
UtilPlayer.message(data.GetThrower(), "Ice Shards" + ": " + F.elem(timesHit + " Consecutive Hits") + C.cGray
+ " (" + F.skill("+" + timesHit + " Damage") + C.cGray + ")");
}*/
}
handleShard(data);
@ -151,6 +103,27 @@ public class SpellIceShards extends Spell implements SpellClick, IThrown
{
loc.getBlock().setType(Material.AIR);
}
_lastParticles.remove(data.GetThrown());
}
@EventHandler
public void onTick(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
{
return;
}
for (Entity entity : _lastParticles.keySet())
{
for (Location loc : UtilShapes.getLinesDistancedPoints(_lastParticles.get(entity), entity.getLocation(), 0.3))
{
UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(Material.SNOW_BLOCK, 0), loc, 0, 0, 0, 0, 1);
}
_lastParticles.put(entity, entity.getLocation());
}
}
@Override

View File

@ -128,7 +128,7 @@ public class SpellImplode extends Spell implements SpellClick
{
cancel();
}
else if (timesRan++ >= 28)
else if (timesRan++ >= 20)
{
Iterator<Block> itel = effectedBlocks.iterator();

View File

@ -97,7 +97,7 @@ public class SpellLightningStrike extends Spell implements SpellClick
}
}
}, 8);
}, 20);
charge(p);
}

View File

@ -1,9 +1,13 @@
package nautilus.game.arcade.game.games.wizards.spells;
import java.util.ArrayList;
import java.util.Random;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilShapes;
import nautilus.game.arcade.game.games.wizards.Spell;
import nautilus.game.arcade.game.games.wizards.spellinterfaces.SpellClick;
@ -31,6 +35,7 @@ public class SpellMagicMissile extends Spell implements SpellClick
new BukkitRunnable()
{
private int dingsDone;
private Location previousLocation = missileLocation;
private void burst()
{
@ -54,14 +59,33 @@ public class SpellMagicMissile extends Spell implements SpellClick
if (entity != player && (!(entity instanceof Player) || Wizards.IsAlive(entity)))
{
Wizards.Manager.GetDamage().NewDamageEvent(entity, player, null, DamageCause.MAGIC, damage,
true, true, false, "Magic Missile", "Magic Missile");
Wizards.Manager.GetDamage().NewDamageEvent(entity, player, null, DamageCause.MAGIC, damage, true,
true, false, "Magic Missile", "Magic Missile");
}
}
}
}
UtilParticle.PlayParticle(ParticleType.MAGIC_CRIT, missileLocation, 0.5F, 0.5F, 0.5F, 0, 40);
playParticle(missileLocation, previousLocation);
for (int i = 0; i < 120; i++)
{
Vector vector = new Vector(new Random().nextFloat() - 0.5F, new Random().nextFloat() - 0.5F,
new Random().nextFloat() - 0.5F);
if (vector.length() >= 1)
{
i--;
continue;
}
Location loc = missileLocation.clone();
loc.add(vector.multiply(2));
UtilParticle.PlayParticle(ParticleType.RED_DUST, loc, -1, 1, 1, 1, 0);
}
missileLocation.getWorld().playSound(missileLocation, Sound.BAT_TAKEOFF, 1.2F, 1);
cancel();
}
@ -150,10 +174,12 @@ public class SpellMagicMissile extends Spell implements SpellClick
return;
}
playParticle(missileLocation, previousLocation);
previousLocation = missileLocation.clone();
dingsDone++;
}
UtilParticle.PlayParticle(ParticleType.MAGIC_CRIT, missileLocation, 0, 0, 0, 0, 1);
missileLocation.getWorld().playSound(missileLocation, Sound.ORB_PICKUP, 0.7F, 0);
}
}
@ -161,4 +187,27 @@ public class SpellMagicMissile extends Spell implements SpellClick
charge(player);
}
private void playParticle(Location start, Location end)
{
final ArrayList<Location> locations = UtilShapes.getLinesDistancedPoints(start, end, 0.1);
new BukkitRunnable()
{
int timesRan;
public void run()
{
for (Location loc : locations)
{
UtilParticle.PlayParticle(ParticleType.RED_DUST, loc, -1, 1, 1, 1, 0);
}
if (timesRan++ > 1)
{
cancel();
}
}
}.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 0, 0);
}
}

View File

@ -46,7 +46,7 @@ public class SpellNapalm extends Spell implements SpellClick
{
final int length = 5 + (10 * getSpellLevel(player));
final Vector vector = player.getLocation().getDirection().normalize().multiply(0.12);
final Vector vector = player.getLocation().getDirection().normalize().multiply(0.15);
final Location playerLoc = player.getLocation().add(0, 2, 0);
final Location napalmLoc = playerLoc.clone().add(playerLoc.getDirection().normalize().multiply(2));
@ -232,7 +232,7 @@ public class SpellNapalm extends Spell implements SpellClick
size = Math.min(8, size + 0.06);
}
blocksTravelled += 0.12;
blocksTravelled += 0.15;
if (lastTick++ % 8 == 0)
{

View File

@ -28,8 +28,11 @@ public class SpellSpectralArrow extends Spell implements SpellClick
public void castSpell(Player player)
{
Arrow arrow = player.launchProjectile(Arrow.class);
arrow.setVelocity(arrow.getVelocity().multiply(3));
arrow.setVelocity(arrow.getVelocity().multiply(2.3));
arrow.setMetadata("SpellLevel", new FixedMetadataValue(Wizards.getArcadeManager().getPlugin(), getSpellLevel(player)));
((CraftArrow) arrow).getHandle().fromPlayer = 0;
_spectralArrows.put(arrow, new Location[]

View File

@ -29,7 +29,6 @@ public class SpellWizardsCompass extends Spell implements SpellClick
public void castSpell(Player p)
{
Location loc = p.getEyeLocation().subtract(0, 1, 0);
ArrayList<Player> players = Wizards.GetPlayers(true);
final ArrayList<Integer[]> colors = new ArrayList<Integer[]>();
@ -51,21 +50,19 @@ public class SpellWizardsCompass extends Spell implements SpellClick
Collections.shuffle(colors);
boolean foundSomeone = false;
for (Player enemy : players)
for (Player enemy : Wizards.GetPlayers(true))
{
if (UtilMath.offset(p, enemy) <= 10)
if (enemy == p)
{
continue;
}
foundSomeone = true;
final double playerDist = Math.min(7, UtilMath.offset(enemy, p));
final Vector traj = UtilAlg.getTrajectory(p.getLocation(), enemy.getEyeLocation()).multiply(0.1);
final Hologram hologram = new Hologram(Wizards.getArcadeManager().getHologramManager(), loc.clone().add(0, 0.3, 0)
.add(traj.clone().normalize().multiply(7)), enemy.getName());
.add(traj.clone().normalize().multiply(playerDist)), enemy.getName());
hologram.setHologramTarget(HologramTarget.WHITELIST);
hologram.addPlayer(p);
@ -103,7 +100,7 @@ public class SpellWizardsCompass extends Spell implements SpellClick
}
}
if (dist <= 7 * 10)
if (dist <= playerDist * 10)
{
for (int a = 0; a < 2; a++)
{
@ -125,15 +122,8 @@ public class SpellWizardsCompass extends Spell implements SpellClick
}.runTaskTimer(Wizards.getArcadeManager().getPlugin(), 0, 0);
}
if (!foundSomeone)
{
p.sendMessage(C.cRed + "All players are less than 10 blocks from you!");
}
else
{
p.playSound(p.getLocation(), Sound.ZOMBIE_UNFECT, 1.5F, 1);
p.playSound(p.getLocation(), Sound.ZOMBIE_UNFECT, 1.5F, 1);
charge(p);
}
charge(p);
}
}