This commit is contained in:
Mysticate 2015-07-28 08:41:35 -04:00
parent 0e00086b9e
commit c5cf306097
4 changed files with 192 additions and 39 deletions

View File

@ -5,15 +5,19 @@ import java.util.Collections;
import mineplex.core.common.util.C;
import mineplex.core.common.util.NautHashMap;
import mineplex.core.common.util.UtilFirework;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
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.games.evolution.events.EvolutionBeginEvent;
import nautilus.game.arcade.game.games.evolution.events.EvolutionEndEvent;
import nautilus.game.arcade.game.games.evolution.events.EvolutionPostEvolveEvent;
import nautilus.game.arcade.game.games.evolution.evolve.EvolveManager;
import nautilus.game.arcade.game.games.evolution.kits.KitAgility;
import nautilus.game.arcade.game.games.evolution.kits.KitHealth;
import nautilus.game.arcade.game.games.evolution.kits.KitRecharge;
@ -29,8 +33,6 @@ import nautilus.game.arcade.game.games.evolution.mobs.KitSpider;
import nautilus.game.arcade.game.games.evolution.mobs.KitWolf;
import nautilus.game.arcade.kit.Kit;
import org.bukkit.Color;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -39,6 +41,8 @@ import org.bukkit.scoreboard.Objective;
public class Evolution extends SoloGame
{
private EvolveManager _evolve;
private ArrayList<Kit> _boosterKits = new ArrayList<Kit>();
private ArrayList<EvoKit> _mobKits = new ArrayList<EvoKit>();
@ -57,7 +61,7 @@ public class Evolution extends SoloGame
"Each evolution has unique skills.",
"First to get through 10 evolutions wins!"
});
//Custom kit stuff to make other things easier
_boosterKits.add(new KitHealth(manager));
_boosterKits.add(new KitAgility(manager));
@ -112,6 +116,11 @@ public class Evolution extends SoloGame
_evoObj.setDisplaySlot(DisplaySlot.BELOW_NAME);
}
public EvolveManager getEvolve()
{
return _evolve;
}
//Double Kit
@EventHandler(priority = EventPriority.MONITOR)
public void storeTokens(GameStateChangeEvent event)
@ -128,7 +137,35 @@ public class Evolution extends SoloGame
_evoObj.getScore(GetTeam(player).GetColor() + player.getName()).setScore(0);
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void endNoEvolve(GameStateChangeEvent event)
{
if (event.GetState() != GameState.Prepare)
return;
if (WorldData.GetCustomLocs("RED").size() <= 0)
{
Announce(C.cWhite + C.Bold + GetName() + " ended, map not set up properly!");
SetState(GameState.Dead);
return;
}
_evolve = new EvolveManager(this, WorldData.GetCustomLocs("RED").get(0));
}
@EventHandler
public void tickEvolve(UpdateEvent event)
{
if (!IsLive())
return;
if (event.getType() != UpdateType.FASTER)
return;
_evolve.tick();
}
@Override
public boolean HasKit(Player player, Kit kit)
{
@ -144,6 +181,38 @@ public class Evolution extends SoloGame
return false;
}
@EventHandler(priority = EventPriority.MONITOR)
public void onEvolveDamage(CustomDamageEvent event)
{
if (!IsLive())
return;
if (!(event.GetDamageeEntity() instanceof Player))
return;
if (_evolve.isEvolving(event.GetDamageePlayer()))
event.SetCancelled("Player is evolving!");
}
@EventHandler
public void startEvolve(EvolutionBeginEvent event)
{
Manager.GetCondition().Factory().Cloak("Evolution", event.getPlayer(), null, Double.MAX_VALUE, false, false);
}
@EventHandler
public void stopEvolve(EvolutionEndEvent event)
{
upgradeKit(event.getPlayer(), true);
}
@EventHandler
public void endEvolve(EvolutionPostEvolveEvent event)
{
Manager.GetCondition().Clean(event.getPlayer());
event.getPlayer().teleport(GetTeam(event.getPlayer()).GetSpawn());
}
@EventHandler
public void onKill(CombatDeathEvent event)
{
@ -174,36 +243,21 @@ public class Evolution extends SoloGame
End();
return;
}
if (upgradeKit(killer, true))
return;
killer.teleport(GetTeam(killer).GetSpawn());
UtilFirework.playFirework(killer.getEyeLocation(), Type.BALL, Color.GREEN, false, false);
}
//Boolean ending
public boolean upgradeKit(Player player, boolean give)
public void upgradeKit(Player player, boolean give)
{
if (!IsAlive(player))
return false;
return;
try
{
EvoKit newKit = _mobKits.get(getScore(player));
SetKit(player, newKit, false);
EvoKit newKit = _mobKits.get(getScore(player));
if (give)
{
newKit.upgradeGive(player);
}
return false;
}
catch (IndexOutOfBoundsException ex)
SetKit(player, newKit, false);
if (give)
{
End();
return true;
newKit.upgradeGive(player);
}
}

View File

@ -0,0 +1,26 @@
package nautilus.game.arcade.game.games.evolution.events;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
public class EvolutionPostEvolveEvent extends PlayerEvent
{
private static HandlerList _handlers = new HandlerList();
public EvolutionPostEvolveEvent(Player who)
{
super(who);
}
public static HandlerList getHandlerList()
{
return _handlers;
}
@Override
public HandlerList getHandlers()
{
return getHandlerList();
}
}

View File

@ -1,11 +1,15 @@
package nautilus.game.arcade.game.games.evolution.evolve;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilFirework;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.evolution.events.EvolutionBeginEvent;
import nautilus.game.arcade.game.games.evolution.events.EvolutionEndEvent;
import nautilus.game.arcade.game.games.evolution.events.EvolutionPostEvolveEvent;
import net.minecraft.server.v1_7_R4.EntityBlaze;
import net.minecraft.server.v1_7_R4.EntityChicken;
import net.minecraft.server.v1_7_R4.EntityCreeper;
@ -22,11 +26,13 @@ import net.minecraft.server.v1_7_R4.PacketPlayOutEntityDestroy;
import net.minecraft.server.v1_7_R4.PacketPlayOutSpawnEntityLiving;
import net.minecraft.server.v1_7_R4.World;
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Location;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.craftbukkit.v1_7_R4.CraftWorld;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class EvolveData
{
@ -34,6 +40,8 @@ public class EvolveData
private final EvolveManager _manager;
private boolean _active = true;
private final Player _player;
private final EntityType _from;
@ -54,17 +62,37 @@ public class EvolveData
_from = from;
_to = to;
Bukkit.getServer().getPluginManager().callEvent(new EvolutionBeginEvent(_player));
}
//Boolean completed
public boolean tick()
{
teleport();
if (!_active)
{
if (!UtilTime.elapsed(_curtime, 4000))
return false;
Bukkit.getServer().getPluginManager().callEvent(new EvolutionPostEvolveEvent(_player));
return true;
}
_stage++;
if (_stage > 12)
return true;
{
_active = false;
Bukkit.getServer().getPluginManager().callEvent(new EvolutionEndEvent(_player));
_curtime = System.currentTimeMillis();
UtilFirework.playFirework(_manager.getLocation().clone().add(0.0, 1.5, 0.0), Type.BALL, Color.GREEN, false, false);
return false;
}
if (!UtilTime.elapsed(_curtime, 1000 * (6 - (_stage / 2))))
return false;
@ -93,18 +121,13 @@ public class EvolveData
private void teleport()
{
Location newLoc = UtilAlg.getTrajectory(_player.getLocation(), newLoc).normalize().toLocation(_player.getWorld());
double lead = i * ((2d * Math.PI)/game.GetTeamList().size());
double sizeMod = 4;
double oX = -Math.sin(lead) * sizeMod;
double oZ = Math.cos(lead) * sizeMod;
//Location
Location entLoc = spawn.clone().add(oX, 0, oZ);
_player.setFlying(true);
_player.setHealth(20.0);
_player.teleport(_manager.getLocation());
Location newLoc = UtilAlg.getTrajectory(_player.getLocation(), _manager.getLocation()).normalize().toLocation(_player.getWorld());
newLoc.add(Math.cos((Math.PI / 14) * _player.getTicksLived()) * 4.0, .1, Math.sin((Math.PI / 14) * _player.getTicksLived()) * 4.0);
_player.teleport(_manager.getLocation());
}
private EntityInsentient spawn(EntityType type)

View File

@ -1,15 +1,24 @@
package nautilus.game.arcade.game.games.evolution.evolve;
import java.util.Iterator;
import java.util.Map.Entry;
import mineplex.core.common.util.NautHashMap;
import mineplex.core.common.util.UtilPlayer;
import nautilus.game.arcade.game.games.evolution.Evolution;
import org.bukkit.Location;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
public class EvolveManager
{
private Evolution _host;
private final Evolution _host;
private final Location _evolveLoc;
private NautHashMap<String, EvolveData> _data = new NautHashMap<String, EvolveData>();
public EvolveManager(Evolution evolution, Location evolveLoc)
{
_host = evolution;
@ -21,4 +30,45 @@ public class EvolveManager
return _evolveLoc;
}
public boolean isEvolving(Player player)
{
return _data.containsKey(player.getName());
}
public void addEvolve(Player player, EntityType from, EntityType to)
{
if (!_data.containsKey(player.getName()))
return;
_data.put(player.getName(), new EvolveData(this, player, from, to));
}
public void tick()
{
Iterator<Entry<String, EvolveData>> iterator = _data.entrySet().iterator();
while (iterator.hasNext())
{
Entry<String, EvolveData> entry = iterator.next();
Player player = UtilPlayer.searchExact(entry.getKey());
if (player == null || !player.isOnline())
{
iterator.remove();
continue;
}
if (!_host.IsAlive(player))
{
iterator.remove();
continue;
}
if (entry.getValue().tick())
{
iterator.remove();
continue;
}
}
}
}