Wizards: More changes as per demand.
This commit is contained in:
parent
073c7d16c2
commit
8803941bd8
@ -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"),
|
||||
|
||||
|
@ -41,6 +41,7 @@ public class SpellButton implements IButton
|
||||
|
||||
_spellPage.getWizards().drawUtilTextBottom(player);
|
||||
_spellPage.getWizards().changeWandsTitles(player);
|
||||
|
||||
player.closeInventory();
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
||||
|
@ -97,7 +97,7 @@ public class SpellLightningStrike extends Spell implements SpellClick
|
||||
}
|
||||
}
|
||||
|
||||
}, 8);
|
||||
}, 20);
|
||||
|
||||
charge(p);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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[]
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user