Added Dragon Escape
fixed kit availability for runner SSM: wither skel projectile continues after releasing block SSM: nerfed blizzard SSM: reduced gem price of a few kits
This commit is contained in:
parent
9fcda443e1
commit
213b1efb0c
@ -1,6 +1,7 @@
|
|||||||
package mineplex.core.explosion;
|
package mineplex.core.explosion;
|
||||||
|
|
||||||
import java.util.AbstractMap;
|
import java.util.AbstractMap;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -271,4 +272,54 @@ public class Explosion extends MiniPlugin
|
|||||||
{
|
{
|
||||||
return _explosionBlocks;
|
return _explosionBlocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void BlockExplosion(Collection<Block> blockSet, Location mid)
|
||||||
|
{
|
||||||
|
if (blockSet.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Save
|
||||||
|
final HashMap<Block, Entry<Integer, Byte>> blocks = new HashMap<Block, Entry<Integer, Byte>>();
|
||||||
|
|
||||||
|
for (Block cur : blockSet)
|
||||||
|
{
|
||||||
|
if (cur.getTypeId() == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
blocks.put(cur, new AbstractMap.SimpleEntry<Integer, Byte>(cur.getTypeId(), cur.getData()));
|
||||||
|
|
||||||
|
if (cur.getTypeId() != 98 || cur.getData() != 0)
|
||||||
|
cur.setTypeId(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//DELAY
|
||||||
|
final Location fLoc = mid;
|
||||||
|
_plugin.getServer().getScheduler().runTaskLater(_plugin, new Runnable()
|
||||||
|
{
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
//Launch
|
||||||
|
for (Block cur : blocks.keySet())
|
||||||
|
{
|
||||||
|
if (blocks.get(cur).getKey() == 98)
|
||||||
|
if (blocks.get(cur).getValue() == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
double chance = 0.2 + (double)_explosionBlocks.size()/(double)120;
|
||||||
|
if (Math.random() > Math.min(0.85, chance))
|
||||||
|
{
|
||||||
|
FallingBlock fall = cur.getWorld().spawnFallingBlock(cur.getLocation().add(0.5, 0.5, 0.5), blocks.get(cur).getKey(), blocks.get(cur).getValue());
|
||||||
|
|
||||||
|
Vector vec = UtilAlg.getTrajectory(fLoc, fall.getLocation());
|
||||||
|
if (vec.getY() < 0) vec.setY(vec.getY() * -1);
|
||||||
|
|
||||||
|
UtilAction.velocity(fall, vec, 0.5 + 0.25*Math.random(), false, 0, 0.4 + 0.20*Math.random(), 10, false);
|
||||||
|
|
||||||
|
_explosionBlocks.add(fall);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -204,6 +204,11 @@ public class ArcadeManager extends MiniPlugin implements IRelation
|
|||||||
return _donationManager;
|
return _donationManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Explosion GetExplosion()
|
||||||
|
{
|
||||||
|
return _explosionManager;
|
||||||
|
}
|
||||||
|
|
||||||
public Fire GetFire()
|
public Fire GetFire()
|
||||||
{
|
{
|
||||||
return _fire;
|
return _fire;
|
||||||
|
@ -6,6 +6,7 @@ import org.bukkit.ChatColor;
|
|||||||
|
|
||||||
import nautilus.game.arcade.game.Game;
|
import nautilus.game.arcade.game.Game;
|
||||||
import nautilus.game.arcade.game.minigames.dragons.Dragons;
|
import nautilus.game.arcade.game.minigames.dragons.Dragons;
|
||||||
|
import nautilus.game.arcade.game.minigames.escape.DragonEscape;
|
||||||
import nautilus.game.arcade.game.minigames.evolution.Evolution;
|
import nautilus.game.arcade.game.minigames.evolution.Evolution;
|
||||||
import nautilus.game.arcade.game.minigames.mineware.MineWare;
|
import nautilus.game.arcade.game.minigames.mineware.MineWare;
|
||||||
import nautilus.game.arcade.game.minigames.quiver.Quiver;
|
import nautilus.game.arcade.game.minigames.quiver.Quiver;
|
||||||
@ -13,7 +14,6 @@ import nautilus.game.arcade.game.minigames.snowfight.SnowFight;
|
|||||||
import nautilus.game.arcade.game.minigames.runner.Runner;
|
import nautilus.game.arcade.game.minigames.runner.Runner;
|
||||||
import nautilus.game.arcade.game.minigames.spleef.Spleef;
|
import nautilus.game.arcade.game.minigames.spleef.Spleef;
|
||||||
import nautilus.game.arcade.game.minigames.turfforts.TurfForts;
|
import nautilus.game.arcade.game.minigames.turfforts.TurfForts;
|
||||||
import nautilus.game.arcade.game.minigames.undeadescape.UndeadEscape;
|
|
||||||
import nautilus.game.arcade.game.standalone.bridge.Bridge;
|
import nautilus.game.arcade.game.standalone.bridge.Bridge;
|
||||||
import nautilus.game.arcade.game.standalone.castlesiege.CastleSiege;
|
import nautilus.game.arcade.game.standalone.castlesiege.CastleSiege;
|
||||||
import nautilus.game.arcade.game.standalone.smash.SuperSmash;
|
import nautilus.game.arcade.game.standalone.smash.SuperSmash;
|
||||||
@ -41,7 +41,7 @@ public class GameFactory
|
|||||||
else if (gameType == GameType.Smash) return new SuperSmash(_manager);
|
else if (gameType == GameType.Smash) return new SuperSmash(_manager);
|
||||||
else if (gameType == GameType.Spleef) return new Spleef(_manager);
|
else if (gameType == GameType.Spleef) return new Spleef(_manager);
|
||||||
else if (gameType == GameType.TurfForts) return new TurfForts(_manager);
|
else if (gameType == GameType.TurfForts) return new TurfForts(_manager);
|
||||||
else if (gameType == GameType.UndeadEscape) return new UndeadEscape(_manager);
|
else if (gameType == GameType.DragonEscape) return new DragonEscape(_manager);
|
||||||
else if (gameType == GameType.ZombieSurvival) return new ZombieSurvival(_manager);
|
else if (gameType == GameType.ZombieSurvival) return new ZombieSurvival(_manager);
|
||||||
else return null;
|
else return null;
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ public enum GameType
|
|||||||
Evolution("Evolution"),
|
Evolution("Evolution"),
|
||||||
Smash("Super Smash Mobs"),
|
Smash("Super Smash Mobs"),
|
||||||
Spleef("Super Spleef"),
|
Spleef("Super Spleef"),
|
||||||
UndeadEscape("Undead Escape"),
|
DragonEscape("Dragon Escape"),
|
||||||
Quiver("One in the Quiver"),
|
Quiver("One in the Quiver"),
|
||||||
Runner("Runner"),
|
Runner("Runner"),
|
||||||
SnowFight("Snow Fight"),
|
SnowFight("Snow Fight"),
|
||||||
|
@ -129,6 +129,7 @@ public abstract class Game implements Listener
|
|||||||
public boolean CreatureAllowOverride = false;
|
public boolean CreatureAllowOverride = false;
|
||||||
|
|
||||||
public int WorldTimeSet = -1;
|
public int WorldTimeSet = -1;
|
||||||
|
public boolean WorldWeatherEnabled = false;
|
||||||
public int WorldHeightLimit = 0;
|
public int WorldHeightLimit = 0;
|
||||||
|
|
||||||
public int HungerSet = -1;
|
public int HungerSet = -1;
|
||||||
|
@ -75,19 +75,6 @@ public abstract class SoloGame extends Game
|
|||||||
if (_places.size() >= 3)
|
if (_places.size() >= 3)
|
||||||
AddGems(_places.get(2), 10, "3rd Place", false);
|
AddGems(_places.get(2), 10, "3rd Place", false);
|
||||||
|
|
||||||
/*
|
|
||||||
int sections = _places.size()/10;
|
|
||||||
|
|
||||||
|
|
||||||
for (int i=0 ; i<5 ; i++)
|
|
||||||
{
|
|
||||||
for (int j=i*sections ; j < j*sections + sections ; j++)
|
|
||||||
{
|
|
||||||
AddGems(_places.get(j), 5-i, "Top " + ((i+1)*10) + "%", false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
for (Player player : GetPlayers(false))
|
for (Player player : GetPlayers(false))
|
||||||
if (player.isOnline())
|
if (player.isOnline())
|
||||||
AddGems(player, 10, "Participation", false);
|
AddGems(player, 10, "Participation", false);
|
||||||
|
@ -39,7 +39,7 @@ public class DragonData
|
|||||||
Location = dragon.getLocation();
|
Location = dragon.getLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update()
|
public void Move()
|
||||||
{
|
{
|
||||||
Turn();
|
Turn();
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ import nautilus.game.arcade.events.PlayerStateChangeEvent;
|
|||||||
import nautilus.game.arcade.game.SoloGame;
|
import nautilus.game.arcade.game.SoloGame;
|
||||||
import nautilus.game.arcade.game.GameTeam.PlayerState;
|
import nautilus.game.arcade.game.GameTeam.PlayerState;
|
||||||
import nautilus.game.arcade.game.minigames.dragons.kits.*;
|
import nautilus.game.arcade.game.minigames.dragons.kits.*;
|
||||||
|
import nautilus.game.arcade.game.minigames.dragons.DragonData;
|
||||||
import nautilus.game.arcade.kit.Kit;
|
import nautilus.game.arcade.kit.Kit;
|
||||||
import nautilus.game.arcade.kit.Perk;
|
import nautilus.game.arcade.kit.Perk;
|
||||||
import nautilus.game.arcade.kit.perks.PerkSparkler;
|
import nautilus.game.arcade.kit.perks.PerkSparkler;
|
||||||
@ -174,7 +175,7 @@ public class Dragons extends SoloGame
|
|||||||
for (DragonData data : _dragons.values())
|
for (DragonData data : _dragons.values())
|
||||||
{
|
{
|
||||||
data.Target();
|
data.Target();
|
||||||
data.Update();
|
data.Move();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,316 @@
|
|||||||
|
package nautilus.game.arcade.game.minigames.escape;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.EnderDragon;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.FallingBlock;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.C;
|
||||||
|
import mineplex.core.common.util.UtilBlock;
|
||||||
|
import mineplex.core.common.util.UtilMath;
|
||||||
|
import mineplex.core.updater.UpdateType;
|
||||||
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
import nautilus.game.arcade.ArcadeManager;
|
||||||
|
import nautilus.game.arcade.GameType;
|
||||||
|
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||||
|
import nautilus.game.arcade.game.SoloGame;
|
||||||
|
import nautilus.game.arcade.game.Game.GameState;
|
||||||
|
import nautilus.game.arcade.game.GameTeam.PlayerState;
|
||||||
|
import nautilus.game.arcade.game.minigames.escape.DragonEscapeData;
|
||||||
|
import nautilus.game.arcade.game.minigames.quiver.kits.KitBrawler;
|
||||||
|
import nautilus.game.arcade.game.standalone.bridge.kits.KitBeserker;
|
||||||
|
import nautilus.game.arcade.kit.Kit;
|
||||||
|
|
||||||
|
public class DragonEscape extends SoloGame
|
||||||
|
{
|
||||||
|
private ArrayList<DragonScore> _ranks = new ArrayList<DragonScore>();
|
||||||
|
private ArrayList<String> _lastScoreboard = new ArrayList<String>();
|
||||||
|
|
||||||
|
private Location _dragon;
|
||||||
|
private ArrayList<Location> _waypoints;
|
||||||
|
|
||||||
|
private DragonEscapeData _dragonData;
|
||||||
|
|
||||||
|
public DragonEscape(ArcadeManager manager)
|
||||||
|
{
|
||||||
|
super(manager, GameType.DragonEscape,
|
||||||
|
|
||||||
|
new Kit[]
|
||||||
|
{
|
||||||
|
new KitBrawler(manager)
|
||||||
|
},
|
||||||
|
|
||||||
|
new String[]
|
||||||
|
{
|
||||||
|
"Douglas the Dragon is after you!",
|
||||||
|
"RUN!!!!!!!!!!",
|
||||||
|
"Last player alive wins!"
|
||||||
|
});
|
||||||
|
|
||||||
|
this.DamagePvP = false;
|
||||||
|
this.HungerSet = 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ParseData()
|
||||||
|
{
|
||||||
|
_dragon = WorldData.GetDataLocs("RED").get(0);
|
||||||
|
_waypoints = new ArrayList<Location>();
|
||||||
|
|
||||||
|
//Order Waypoints
|
||||||
|
Location last = _dragon;
|
||||||
|
|
||||||
|
while (!WorldData.GetDataLocs("BLACK").isEmpty())
|
||||||
|
{
|
||||||
|
Location best = null;
|
||||||
|
double bestDist = 0;
|
||||||
|
|
||||||
|
//Get Best
|
||||||
|
for (Location loc : WorldData.GetDataLocs("BLACK"))
|
||||||
|
{
|
||||||
|
double dist = UtilMath.offset(loc, last);
|
||||||
|
|
||||||
|
if (best == null || dist < bestDist)
|
||||||
|
{
|
||||||
|
best = loc;
|
||||||
|
bestDist = dist;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_waypoints.add(best);
|
||||||
|
WorldData.GetDataLocs("BLACK").remove(best);
|
||||||
|
best.subtract(new Vector(0,1,0));
|
||||||
|
|
||||||
|
last = best;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void SpawnDragon(GameStateChangeEvent event)
|
||||||
|
{
|
||||||
|
if (event.GetState() != GameState.Prepare)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.CreatureAllowOverride = true;
|
||||||
|
EnderDragon dragon = _dragon.getWorld().spawn(_dragon, EnderDragon.class);
|
||||||
|
this.CreatureAllowOverride = false;
|
||||||
|
|
||||||
|
dragon.setCustomName(ChatColor.YELLOW + C.Bold + "Douglas the Dragon");
|
||||||
|
|
||||||
|
_dragonData = new DragonEscapeData(this, dragon, _waypoints.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void MoveDragon(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (event.getType() != UpdateType.TICK)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (_dragonData == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_dragonData.Target = _waypoints.get(Math.min(_waypoints.size()-1, (GetWaypointIndex(_dragonData.Location) + 1)));
|
||||||
|
|
||||||
|
_dragonData.Move();
|
||||||
|
|
||||||
|
Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(_dragonData.Location, 10d).keySet(), _dragonData.Location);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void UpdateScores(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (event.getType() != UpdateType.FAST)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (_dragonData == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
double dragonScore = GetScore(_dragonData.Dragon);
|
||||||
|
|
||||||
|
for (Player player : GetPlayers(true))
|
||||||
|
{
|
||||||
|
double playerScore = GetScore(player);
|
||||||
|
|
||||||
|
if (player.getLocation().getY() < 50)
|
||||||
|
player.damage(50);
|
||||||
|
|
||||||
|
if (dragonScore > playerScore)
|
||||||
|
{
|
||||||
|
player.damage(50);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
SetScore(player, playerScore);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetScore(Player player, double playerScore)
|
||||||
|
{
|
||||||
|
//Rank
|
||||||
|
for (DragonScore score : _ranks)
|
||||||
|
{
|
||||||
|
if (score.Player.equals(player))
|
||||||
|
{
|
||||||
|
score.Score = playerScore;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_ranks.add(new DragonScore(player, playerScore));
|
||||||
|
}
|
||||||
|
|
||||||
|
public double GetScore(Entity ent)
|
||||||
|
{
|
||||||
|
int index = GetWaypointIndex(ent.getLocation());
|
||||||
|
|
||||||
|
double score = 10000 * index;
|
||||||
|
|
||||||
|
score -= UtilMath.offset(ent.getLocation(), _waypoints.get(Math.min(_waypoints.size()-1, index+1)));
|
||||||
|
|
||||||
|
return score;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public int GetWaypointIndex(Location loc)
|
||||||
|
{
|
||||||
|
int best = -1;
|
||||||
|
double bestDist = 0;
|
||||||
|
|
||||||
|
for (int i=0 ; i<_waypoints.size() ; i++)
|
||||||
|
{
|
||||||
|
Location waypoint = _waypoints.get(i);
|
||||||
|
|
||||||
|
double dist = UtilMath.offset(waypoint, loc);
|
||||||
|
|
||||||
|
if (best == -1 || dist < bestDist)
|
||||||
|
{
|
||||||
|
best = i;
|
||||||
|
bestDist = dist;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return best;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SortScores()
|
||||||
|
{
|
||||||
|
for (int i=0 ; i<_ranks.size() ; i++)
|
||||||
|
{
|
||||||
|
for (int j=_ranks.size()-1 ; j>0 ; j--)
|
||||||
|
{
|
||||||
|
if (_ranks.get(j).Score > _ranks.get(j-1).Score)
|
||||||
|
{
|
||||||
|
DragonScore temp = _ranks.get(j);
|
||||||
|
_ranks.set(j, _ranks.get(j-1));
|
||||||
|
_ranks.set(j-1, temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@EventHandler
|
||||||
|
public void ScoreboardUpdate(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (event.getType() != UpdateType.FAST)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Wipe Last
|
||||||
|
for (String string : _lastScoreboard)
|
||||||
|
GetScoreboard().resetScores(Bukkit.getOfflinePlayer(string));
|
||||||
|
_lastScoreboard.clear();
|
||||||
|
|
||||||
|
SortScores();
|
||||||
|
|
||||||
|
//Write New
|
||||||
|
for (int i=0 ; i<_ranks.size() ; i++)
|
||||||
|
{
|
||||||
|
DragonScore score = _ranks.get(i);
|
||||||
|
|
||||||
|
ChatColor col = ChatColor.GREEN;
|
||||||
|
if (!IsAlive(score.Player))
|
||||||
|
col = ChatColor.RED;
|
||||||
|
|
||||||
|
String out = i+1 + " " + col + score.Player.getName();
|
||||||
|
|
||||||
|
if (out.length() >= 16)
|
||||||
|
out = out.substring(0, 15);
|
||||||
|
|
||||||
|
_lastScoreboard.add(out);
|
||||||
|
|
||||||
|
GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(16-i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Location GetSpectatorLocation()
|
||||||
|
{
|
||||||
|
if (SpectatorSpawn == null)
|
||||||
|
{
|
||||||
|
SpectatorSpawn = new Location(this.WorldData.World, 0,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector vec = new Vector(0,0,0);
|
||||||
|
double count = 0;
|
||||||
|
|
||||||
|
for (Player player : GetPlayers(true))
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
vec.add(player.getLocation().toVector());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count == 0)
|
||||||
|
count++;
|
||||||
|
|
||||||
|
vec.multiply(1d/count);
|
||||||
|
|
||||||
|
SpectatorSpawn.setX(vec.getX());
|
||||||
|
SpectatorSpawn.setY(vec.getY() + 10);
|
||||||
|
SpectatorSpawn.setZ(vec.getZ());
|
||||||
|
|
||||||
|
return SpectatorSpawn;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void EndCheck()
|
||||||
|
{
|
||||||
|
if (!IsLive())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (GetPlayers(true).size() <= 0)
|
||||||
|
{
|
||||||
|
//Announce
|
||||||
|
AnnounceEnd(_places);
|
||||||
|
|
||||||
|
//Gems
|
||||||
|
if (_places.size() >= 1)
|
||||||
|
AddGems(_places.get(0), 20, "1st Place", false);
|
||||||
|
|
||||||
|
if (_places.size() >= 2)
|
||||||
|
AddGems(_places.get(1), 15, "2nd Place", false);
|
||||||
|
|
||||||
|
if (_places.size() >= 3)
|
||||||
|
AddGems(_places.get(2), 10, "3rd Place", false);
|
||||||
|
|
||||||
|
for (Player player : GetPlayers(false))
|
||||||
|
if (player.isOnline())
|
||||||
|
AddGems(player, 10, "Participation", false);
|
||||||
|
|
||||||
|
//End
|
||||||
|
SetState(GameState.End);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,72 @@
|
|||||||
|
package nautilus.game.arcade.game.minigames.escape;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.UtilAlg;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.EnderDragon;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
public class DragonEscapeData
|
||||||
|
{
|
||||||
|
public DragonEscape Host;
|
||||||
|
|
||||||
|
public EnderDragon Dragon;
|
||||||
|
|
||||||
|
public Location Target = null;
|
||||||
|
public Location Location = null;
|
||||||
|
|
||||||
|
public float Pitch = 0;
|
||||||
|
public Vector Velocity = new Vector(0,0,0);
|
||||||
|
|
||||||
|
public DragonEscapeData(DragonEscape host, EnderDragon dragon, Location target)
|
||||||
|
{
|
||||||
|
Host = host;
|
||||||
|
|
||||||
|
Dragon = dragon;
|
||||||
|
|
||||||
|
Location temp = dragon.getLocation();
|
||||||
|
temp.setPitch(UtilAlg.GetPitch(UtilAlg.getTrajectory(dragon.getLocation(), target)));
|
||||||
|
dragon.teleport(temp);
|
||||||
|
|
||||||
|
Velocity = dragon.getLocation().getDirection().setY(0).normalize();
|
||||||
|
Pitch = UtilAlg.GetPitch(dragon.getLocation().getDirection());
|
||||||
|
|
||||||
|
Location = dragon.getLocation();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Move()
|
||||||
|
{
|
||||||
|
Turn();
|
||||||
|
|
||||||
|
double timeSpeed = 0.16 + (System.currentTimeMillis() - Host.GetStateTime())/3000000d;
|
||||||
|
System.out.println(timeSpeed);
|
||||||
|
|
||||||
|
Location.add(Velocity.clone().multiply(timeSpeed));
|
||||||
|
Location.add(0, -Pitch, 0);
|
||||||
|
|
||||||
|
Location.setPitch(-1 * Pitch);
|
||||||
|
Location.setYaw(180 + UtilAlg.GetYaw(Velocity));
|
||||||
|
|
||||||
|
Dragon.teleport(Location);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Turn()
|
||||||
|
{
|
||||||
|
//Pitch
|
||||||
|
float desiredPitch = UtilAlg.GetPitch(UtilAlg.getTrajectory(Location, Target));
|
||||||
|
if (desiredPitch < Pitch) Pitch = (float)(Pitch - 0.05);
|
||||||
|
if (desiredPitch > Pitch) Pitch = (float)(Pitch + 0.05);
|
||||||
|
if (Pitch > 0.5) Pitch = 0.5f;
|
||||||
|
if (Pitch < -0.5) Pitch = -0.5f;
|
||||||
|
|
||||||
|
//Flat
|
||||||
|
Vector desired = UtilAlg.getTrajectory2d(Location, Target);
|
||||||
|
desired.subtract(UtilAlg.Normalize(new Vector(Velocity.getX(), 0, Velocity.getZ())));
|
||||||
|
desired.multiply(0.2);
|
||||||
|
|
||||||
|
Velocity.add(desired);
|
||||||
|
|
||||||
|
//Speed
|
||||||
|
UtilAlg.Normalize(Velocity);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package nautilus.game.arcade.game.minigames.escape;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class DragonScore
|
||||||
|
{
|
||||||
|
public org.bukkit.entity.Player Player;
|
||||||
|
public double Score;
|
||||||
|
|
||||||
|
public DragonScore(Player player, double i)
|
||||||
|
{
|
||||||
|
Player = player;
|
||||||
|
Score = i;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package nautilus.game.arcade.game.minigames.escape.kits;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import mineplex.core.itemstack.ItemStackFactory;
|
||||||
|
import nautilus.game.arcade.ArcadeManager;
|
||||||
|
import nautilus.game.arcade.kit.Kit;
|
||||||
|
import nautilus.game.arcade.kit.KitAvailability;
|
||||||
|
import nautilus.game.arcade.kit.Perk;
|
||||||
|
import nautilus.game.arcade.kit.perks.*;
|
||||||
|
|
||||||
|
public class KitLeaper extends Kit
|
||||||
|
{
|
||||||
|
public KitLeaper(ArcadeManager manager)
|
||||||
|
{
|
||||||
|
super(manager, "Jumper", KitAvailability.Free,
|
||||||
|
|
||||||
|
new String[]
|
||||||
|
{
|
||||||
|
"Leap to avoid falling to your death!"
|
||||||
|
},
|
||||||
|
|
||||||
|
new Perk[]
|
||||||
|
{
|
||||||
|
new PerkLeap("Leap", 1.2, 1.2, 8000)
|
||||||
|
},
|
||||||
|
EntityType.ZOMBIE,
|
||||||
|
new ItemStack(Material.STONE_AXE));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void GiveItems(Player player)
|
||||||
|
{
|
||||||
|
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.STONE_AXE));
|
||||||
|
}
|
||||||
|
}
|
@ -18,16 +18,16 @@ public class KitLeaper extends Kit
|
|||||||
{
|
{
|
||||||
public KitLeaper(ArcadeManager manager)
|
public KitLeaper(ArcadeManager manager)
|
||||||
{
|
{
|
||||||
super(manager, "Leaper", KitAvailability.Free,
|
super(manager, "Jumper", KitAvailability.Free,
|
||||||
|
|
||||||
new String[]
|
new String[]
|
||||||
{
|
{
|
||||||
"Evade and kill using your powerful leap!"
|
"Evade and kill using your double jump!"
|
||||||
},
|
},
|
||||||
|
|
||||||
new Perk[]
|
new Perk[]
|
||||||
{
|
{
|
||||||
new PerkLeap("Leap", 1.2, 1.0, 8000)
|
new PerkDoubleJump("Double Jump", 0.9, 0.9, true)
|
||||||
},
|
},
|
||||||
EntityType.ZOMBIE,
|
EntityType.ZOMBIE,
|
||||||
new ItemStack(Material.IRON_AXE));
|
new ItemStack(Material.IRON_AXE));
|
||||||
|
@ -16,7 +16,7 @@ public class KitArcher extends Kit
|
|||||||
{
|
{
|
||||||
public KitArcher(ArcadeManager manager)
|
public KitArcher(ArcadeManager manager)
|
||||||
{
|
{
|
||||||
super(manager, "Archer", KitAvailability.Free,
|
super(manager, "Archer", KitAvailability.Green,
|
||||||
|
|
||||||
new String[]
|
new String[]
|
||||||
{
|
{
|
||||||
|
@ -19,7 +19,7 @@ public class KitFrosty extends Kit
|
|||||||
{
|
{
|
||||||
public KitFrosty(ArcadeManager manager)
|
public KitFrosty(ArcadeManager manager)
|
||||||
{
|
{
|
||||||
super(manager, "Frosty", KitAvailability.Free,
|
super(manager, "Frosty", KitAvailability.Blue,
|
||||||
|
|
||||||
new String[]
|
new String[]
|
||||||
{
|
{
|
||||||
|
@ -1,152 +0,0 @@
|
|||||||
package nautilus.game.arcade.game.minigames.undeadescape;
|
|
||||||
|
|
||||||
import mineplex.core.common.util.UtilAlg;
|
|
||||||
import mineplex.core.common.util.UtilMath;
|
|
||||||
import mineplex.core.common.util.UtilTime;
|
|
||||||
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.entity.EnderDragon;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class GiantData
|
|
||||||
{
|
|
||||||
public UndeadEscape Host;
|
|
||||||
|
|
||||||
public EnderDragon Dragon;
|
|
||||||
|
|
||||||
public Entity TargetEntity = null;
|
|
||||||
|
|
||||||
public Location Target = null;
|
|
||||||
public Location Location = null;
|
|
||||||
|
|
||||||
public float Pitch = 0;
|
|
||||||
public Vector Velocity = new Vector(0,0,0);
|
|
||||||
|
|
||||||
public double RangeBest = 1000;
|
|
||||||
public long RangeTime = 0;
|
|
||||||
|
|
||||||
public GiantData(UndeadEscape host, EnderDragon dragon)
|
|
||||||
{
|
|
||||||
Host = host;
|
|
||||||
|
|
||||||
Dragon = dragon;
|
|
||||||
|
|
||||||
Velocity = dragon.getLocation().getDirection().setY(0).normalize();
|
|
||||||
Pitch = UtilAlg.GetPitch(dragon.getLocation().getDirection());
|
|
||||||
|
|
||||||
Location = dragon.getLocation();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Update()
|
|
||||||
{
|
|
||||||
Turn();
|
|
||||||
|
|
||||||
Location.add(Velocity);
|
|
||||||
Location.add(0, -Pitch, 0);
|
|
||||||
|
|
||||||
Location.setPitch(-1 * Pitch);
|
|
||||||
Location.setYaw(180 + UtilAlg.GetYaw(Velocity));
|
|
||||||
|
|
||||||
Dragon.teleport(Location);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Turn()
|
|
||||||
{
|
|
||||||
//Pitch
|
|
||||||
float desiredPitch = UtilAlg.GetPitch(UtilAlg.getTrajectory(Location, Target));
|
|
||||||
if (desiredPitch < Pitch) Pitch = (float)(Pitch - 0.05);
|
|
||||||
if (desiredPitch > Pitch) Pitch = (float)(Pitch + 0.05);
|
|
||||||
if (Pitch > 0.5) Pitch = 0.5f;
|
|
||||||
if (Pitch < -0.5) Pitch = -0.5f;
|
|
||||||
|
|
||||||
//Flat
|
|
||||||
Vector desired = UtilAlg.getTrajectory2d(Location, Target);
|
|
||||||
desired.subtract(UtilAlg.Normalize(new Vector(Velocity.getX(), 0, Velocity.getZ())));
|
|
||||||
desired.multiply(0.075);
|
|
||||||
|
|
||||||
Velocity.add(desired);
|
|
||||||
|
|
||||||
//Speed
|
|
||||||
UtilAlg.Normalize(Velocity);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Target()
|
|
||||||
{
|
|
||||||
if (TargetEntity != null)
|
|
||||||
{
|
|
||||||
if (!TargetEntity.isValid())
|
|
||||||
{
|
|
||||||
TargetEntity = null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Target = TargetEntity.getLocation().subtract(0, 8, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Target == null)
|
|
||||||
{
|
|
||||||
TargetSky();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (UtilMath.offset(Location, Target) < 4)
|
|
||||||
{
|
|
||||||
//Target Player
|
|
||||||
if (Target.getY() >= Host.GetSpectatorLocation().getY())
|
|
||||||
{
|
|
||||||
TargetPlayer();
|
|
||||||
}
|
|
||||||
//Target Sky
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TargetSky();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TargetTimeout();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void TargetTimeout()
|
|
||||||
{
|
|
||||||
if (UtilMath.offset(Location, Target)+1 < RangeBest)
|
|
||||||
{
|
|
||||||
RangeTime = System.currentTimeMillis();
|
|
||||||
RangeBest = UtilMath.offset(Location, Target);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (UtilTime.elapsed(RangeTime, 10000))
|
|
||||||
{
|
|
||||||
TargetSky();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void TargetSky()
|
|
||||||
{
|
|
||||||
RangeBest = 9000;
|
|
||||||
RangeTime = System.currentTimeMillis();
|
|
||||||
|
|
||||||
Target = Host.GetSpectatorLocation().clone().add(50 - UtilMath.r(100), 20 + UtilMath.r(30), 50 - UtilMath.r(100));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void TargetPlayer()
|
|
||||||
{
|
|
||||||
RangeBest = 9000;
|
|
||||||
RangeTime = System.currentTimeMillis();
|
|
||||||
|
|
||||||
Player player = Host.GetPlayers(true).get(UtilMath.r(Host.GetPlayers(true).size()));
|
|
||||||
Target = player.getLocation();
|
|
||||||
|
|
||||||
Target.add(UtilAlg.getTrajectory(Location, Target).multiply(4));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void HitByArrow()
|
|
||||||
{
|
|
||||||
TargetSky();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,245 +0,0 @@
|
|||||||
package nautilus.game.arcade.game.minigames.undeadescape;
|
|
||||||
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.Sound;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.Creature;
|
|
||||||
import org.bukkit.entity.FallingBlock;
|
|
||||||
import org.bukkit.entity.Giant;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.entity.EntityCombustEvent;
|
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
|
||||||
import org.bukkit.event.entity.EntityTargetEvent;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
import mineplex.core.common.util.UtilAction;
|
|
||||||
import mineplex.core.common.util.UtilAlg;
|
|
||||||
import mineplex.core.common.util.UtilMath;
|
|
||||||
import mineplex.core.common.util.UtilTime;
|
|
||||||
import mineplex.core.updater.UpdateType;
|
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
|
||||||
import nautilus.game.arcade.ArcadeManager;
|
|
||||||
import nautilus.game.arcade.GameType;
|
|
||||||
import nautilus.game.arcade.game.SoloGame;
|
|
||||||
import nautilus.game.arcade.game.standalone.bridge.kits.KitBeserker;
|
|
||||||
import nautilus.game.arcade.kit.Kit;
|
|
||||||
|
|
||||||
public class UndeadEscape extends SoloGame
|
|
||||||
{
|
|
||||||
private Location _giantStart;
|
|
||||||
private Location _giantEnd;
|
|
||||||
|
|
||||||
private Creature _giant = null;
|
|
||||||
|
|
||||||
public UndeadEscape(ArcadeManager manager)
|
|
||||||
{
|
|
||||||
super(manager, GameType.UndeadEscape,
|
|
||||||
|
|
||||||
new Kit[]
|
|
||||||
{
|
|
||||||
new KitBeserker(manager)
|
|
||||||
},
|
|
||||||
|
|
||||||
new String[]
|
|
||||||
{
|
|
||||||
"RUN!!!!!!!"
|
|
||||||
});
|
|
||||||
|
|
||||||
this.DamagePvP = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void ParseData()
|
|
||||||
{
|
|
||||||
if (!WorldData.GetDataLocs("BLACK").isEmpty())
|
|
||||||
_giantStart = WorldData.GetDataLocs("BLACK").get(0);
|
|
||||||
|
|
||||||
if (!WorldData.GetDataLocs("WHITE").isEmpty())
|
|
||||||
_giantEnd = WorldData.GetDataLocs("WHITE").get(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void GiantTarget(EntityTargetEvent event)
|
|
||||||
{
|
|
||||||
if (_giant == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (event.getEntity().equals(_giant))
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void GiantDamage(EntityDamageEvent event)
|
|
||||||
{
|
|
||||||
if (_giant == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (event.getEntity().equals(_giant))
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void GiantCombust(EntityCombustEvent event)
|
|
||||||
{
|
|
||||||
if (_giant == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (event.getEntity().equals(_giant))
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void GiantMove(UpdateEvent event)
|
|
||||||
{
|
|
||||||
if (event.getType() != UpdateType.TICK)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (GetState() != GameState.Live)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!UtilTime.elapsed(GetStateTime(), 5000))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (_giant == null || !_giant.isValid())
|
|
||||||
{
|
|
||||||
if (_giant != null)
|
|
||||||
_giant.remove();
|
|
||||||
|
|
||||||
CreatureAllowOverride = true;
|
|
||||||
_giant = _giantStart.getWorld().spawn(_giantStart, Giant.class);
|
|
||||||
CreatureAllowOverride = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Move
|
|
||||||
double rate = 0.075 + ((System.currentTimeMillis() - this.GetStateTime())/100000d);
|
|
||||||
|
|
||||||
Location target = _giant.getLocation().add(UtilAlg.getTrajectory(_giantStart, _giantEnd).multiply(rate));
|
|
||||||
_giant.teleport(target);
|
|
||||||
|
|
||||||
/*
|
|
||||||
EntityCreature ec = ((CraftCreature)_giant).getHandle();
|
|
||||||
Navigation nav = ec.getNavigation();
|
|
||||||
Location loc = _giant.getLocation().add(UtilAlg.getTrajectory(_giantStart, _giantEnd).multiply(1));
|
|
||||||
nav.a(loc.getX(), loc.getY(), loc.getZ(), 2f + Math.min(2f, (float)()));
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void GiantGroan(UpdateEvent event)
|
|
||||||
{
|
|
||||||
if (event.getType() != UpdateType.FAST)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (GetState() != GameState.Live)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (_giant == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (Math.random() > 0.75)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_giant.getWorld().playSound(_giant.getEyeLocation(), Sound.ZOMBIE_IDLE, 5f, 0.5f + (float)(Math.random()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void GiantKill(UpdateEvent event)
|
|
||||||
{
|
|
||||||
if (event.getType() != UpdateType.FAST)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (_giant == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (Player player : GetPlayers(true))
|
|
||||||
{
|
|
||||||
if (UtilMath.offset2d(player, _giant) < 7)
|
|
||||||
{
|
|
||||||
player.damage(50);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void GiantBlocks(UpdateEvent event)
|
|
||||||
{
|
|
||||||
if (event.getType() != UpdateType.FAST)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (GetState() != GameState.Live)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (_giant == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (int x=-7 ; x<=7 ; x++)
|
|
||||||
{
|
|
||||||
for (int z=-7 ; z<=7 ; z++)
|
|
||||||
{
|
|
||||||
for (int y=0 ; y<=15 ; y++)
|
|
||||||
{
|
|
||||||
Block block = _giant.getWorld().getBlockAt(
|
|
||||||
_giant.getLocation().getBlockX()+x,
|
|
||||||
_giant.getLocation().getBlockY()+y,
|
|
||||||
_giant.getLocation().getBlockZ()+z);
|
|
||||||
|
|
||||||
if (block.getTypeId() == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
final Material mat = block.getType();
|
|
||||||
final byte data = block.getData();
|
|
||||||
final Location loc = block.getLocation().add(0.5, 0.5, 0.5);
|
|
||||||
|
|
||||||
block.setTypeId(0);
|
|
||||||
|
|
||||||
Manager.GetPlugin().getServer().getScheduler().runTaskLater(Manager.GetPlugin(), new Runnable()
|
|
||||||
{
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
FallingBlock fall = loc.getWorld().spawnFallingBlock(loc, mat, data);
|
|
||||||
|
|
||||||
Vector vec = UtilAlg.getTrajectory(_giant, fall);
|
|
||||||
if (vec.getY() < 0) vec.setY(vec.getY() * -1);
|
|
||||||
|
|
||||||
vec.add(new Vector(0.2 - Math.random()*0.4,0.2 - Math.random()*0.4,0.2 - Math.random()*0.4));
|
|
||||||
|
|
||||||
UtilAction.velocity(fall, vec, 0.75 + 0.25*Math.random(), false, 0, 0.4 + 0.20*Math.random(), 10, false);
|
|
||||||
}
|
|
||||||
}, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Location GetSpectatorLocation()
|
|
||||||
{
|
|
||||||
if (SpectatorSpawn == null)
|
|
||||||
{
|
|
||||||
SpectatorSpawn = new Location(this.WorldData.World, 0,0,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector vec = new Vector(0,0,0);
|
|
||||||
double count = 0;
|
|
||||||
|
|
||||||
for (Player player : GetPlayers(true))
|
|
||||||
{
|
|
||||||
count++;
|
|
||||||
vec.add(player.getLocation().toVector());
|
|
||||||
}
|
|
||||||
|
|
||||||
vec.multiply(1d/count);
|
|
||||||
|
|
||||||
SpectatorSpawn.setX(vec.getX());
|
|
||||||
SpectatorSpawn.setY(vec.getY() + 10);
|
|
||||||
SpectatorSpawn.setZ(vec.getZ());
|
|
||||||
|
|
||||||
return SpectatorSpawn;
|
|
||||||
}
|
|
||||||
|
|
||||||
//@Override
|
|
||||||
//public void EndCheck()
|
|
||||||
//{}
|
|
||||||
}
|
|
@ -77,13 +77,11 @@ public class SuperSmash extends SoloGame
|
|||||||
|
|
||||||
this.HungerSet = 20;
|
this.HungerSet = 20;
|
||||||
|
|
||||||
this.PrepareFreeze = false;
|
|
||||||
|
|
||||||
this.CompassEnabled = true;
|
this.CompassEnabled = true;
|
||||||
|
|
||||||
this.SpawnDistanceRequirement = 16;
|
this.SpawnDistanceRequirement = 16;
|
||||||
|
|
||||||
this.InventoryOpen = true;
|
this.InventoryOpen = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
|
@ -105,6 +105,6 @@ public class KitBlaze extends SmashKit
|
|||||||
@Override
|
@Override
|
||||||
public int GetCost()
|
public int GetCost()
|
||||||
{
|
{
|
||||||
return 8000;
|
return 6000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,9 +32,9 @@ public class KitSnowman extends SmashKit
|
|||||||
|
|
||||||
new Perk[]
|
new Perk[]
|
||||||
{
|
{
|
||||||
new PerkSmashStats(6, 1.4, 0.4, 6),
|
new PerkSmashStats(5, 1.4, 0.4, 6),
|
||||||
new PerkDoubleJump("Double Jump", 0.9, 0.9, false),
|
new PerkDoubleJump("Double Jump", 0.9, 0.9, false),
|
||||||
new PerkDamageSnow(3, 1.5),
|
new PerkDamageSnow(3, 1.25),
|
||||||
new PerkArcticAura(),
|
new PerkArcticAura(),
|
||||||
new PerkBlizzard(),
|
new PerkBlizzard(),
|
||||||
new PerkIcePath(),
|
new PerkIcePath(),
|
||||||
@ -91,6 +91,6 @@ public class KitSnowman extends SmashKit
|
|||||||
@Override
|
@Override
|
||||||
public int GetCost()
|
public int GetCost()
|
||||||
{
|
{
|
||||||
return 6000;
|
return 5000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ public class KitWitherSkeleton extends SmashKit
|
|||||||
|
|
||||||
new Perk[]
|
new Perk[]
|
||||||
{
|
{
|
||||||
new PerkSmashStats(6, 1.1, 0.3, 6),
|
new PerkSmashStats(6, 1.2, 0.3, 6),
|
||||||
new PerkDoubleJump("Double Jump", 0.9, 0.9, false),
|
new PerkDoubleJump("Double Jump", 0.9, 0.9, false),
|
||||||
new PerkWitherSkull(),
|
new PerkWitherSkull(),
|
||||||
new PerkWitherImage(),
|
new PerkWitherImage(),
|
||||||
|
@ -46,7 +46,7 @@ public class PerkBlizzard extends Perk
|
|||||||
if (!Kit.HasKit(player))
|
if (!Kit.HasKit(player))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
player.setExp((float) Math.min(0.999, player.getExp()+0.008));
|
player.setExp((float) Math.min(0.999, player.getExp()+0.007));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package nautilus.game.arcade.kit.perks;
|
package nautilus.game.arcade.kit.perks;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -15,6 +16,7 @@ import org.bukkit.event.block.Action;
|
|||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import mineplex.core.common.util.C;
|
import mineplex.core.common.util.C;
|
||||||
import mineplex.core.common.util.F;
|
import mineplex.core.common.util.F;
|
||||||
@ -32,7 +34,8 @@ import nautilus.game.arcade.kit.Perk;
|
|||||||
|
|
||||||
public class PerkWitherSkull extends Perk
|
public class PerkWitherSkull extends Perk
|
||||||
{
|
{
|
||||||
private HashMap<WitherSkull, Player> _active = new HashMap<WitherSkull, Player>();
|
private HashMap<WitherSkull, Vector> _active = new HashMap<WitherSkull, Vector>();
|
||||||
|
private HashSet<Player> _ignoreControl = new HashSet<Player>();
|
||||||
|
|
||||||
public PerkWitherSkull()
|
public PerkWitherSkull()
|
||||||
{
|
{
|
||||||
@ -70,13 +73,16 @@ public class PerkWitherSkull extends Perk
|
|||||||
WitherSkull skull = player.launchProjectile(WitherSkull.class);
|
WitherSkull skull = player.launchProjectile(WitherSkull.class);
|
||||||
skull.setDirection(player.getLocation().getDirection());
|
skull.setDirection(player.getLocation().getDirection());
|
||||||
|
|
||||||
_active.put(skull, player);
|
_active.put(skull, player.getLocation().getDirection());
|
||||||
|
|
||||||
//Sound
|
//Sound
|
||||||
player.getWorld().playSound(player.getLocation(), Sound.WITHER_SHOOT, 1f, 1f);
|
player.getWorld().playSound(player.getLocation(), Sound.WITHER_SHOOT, 1f, 1f);
|
||||||
|
|
||||||
//Inform
|
//Inform
|
||||||
UtilPlayer.message(player, F.main("Skill", "You launched " + F.skill(GetName()) + "."));
|
UtilPlayer.message(player, F.main("Skill", "You launched " + F.skill(GetName()) + "."));
|
||||||
|
|
||||||
|
//Control
|
||||||
|
_ignoreControl.remove(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -90,7 +96,7 @@ public class PerkWitherSkull extends Perk
|
|||||||
while (skullIterator.hasNext())
|
while (skullIterator.hasNext())
|
||||||
{
|
{
|
||||||
WitherSkull skull = skullIterator.next();
|
WitherSkull skull = skullIterator.next();
|
||||||
Player player = _active.get(skull);
|
Player player = (Player)skull.getShooter();
|
||||||
|
|
||||||
if (!skull.isValid())
|
if (!skull.isValid())
|
||||||
{
|
{
|
||||||
@ -99,18 +105,17 @@ public class PerkWitherSkull extends Perk
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player.isBlocking())
|
if (player.isBlocking() && !_ignoreControl.contains(player))
|
||||||
{
|
{
|
||||||
skull.setDirection(player.getLocation().getDirection());
|
skull.setDirection(player.getLocation().getDirection());
|
||||||
skull.setVelocity(player.getLocation().getDirection().multiply(0.6));
|
skull.setVelocity(player.getLocation().getDirection().multiply(0.6));
|
||||||
|
_active.put(skull, player.getLocation().getDirection().multiply(0.6));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Explode(skull, skull.getLocation(), player);
|
_ignoreControl.add(player);
|
||||||
|
skull.setDirection(_active.get(skull));
|
||||||
skullIterator.remove();
|
skull.setVelocity(_active.get(skull));
|
||||||
skull.remove();
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -138,8 +143,6 @@ public class PerkWitherSkull extends Perk
|
|||||||
event.SetCancelled("Wither Skull Cancel");
|
event.SetCancelled("Wither Skull Cancel");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void DirectHitDamage(CustomDamageEvent event)
|
public void DirectHitDamage(CustomDamageEvent event)
|
||||||
{
|
{
|
||||||
|
@ -696,6 +696,28 @@ public class GameFlagManager implements Listener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void WorldWeather(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (event.getType() != UpdateType.SEC)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Game game = Manager.GetGame();
|
||||||
|
if (game == null) return;
|
||||||
|
|
||||||
|
if (!game.WorldWeatherEnabled)
|
||||||
|
{
|
||||||
|
if (game.WorldData != null)
|
||||||
|
{
|
||||||
|
if (game.WorldData.World != null)
|
||||||
|
{
|
||||||
|
game.WorldData.World.setStorm(false);
|
||||||
|
game.WorldData.World.setThundering(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void WorldWaterDamage(UpdateEvent event)
|
public void WorldWaterDamage(UpdateEvent event)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user