- Everything except maps [probably should've committed sooner]
This commit is contained in:
parent
fc0cae8e0f
commit
430de10008
@ -68,6 +68,8 @@ public enum GameDisplay
|
|||||||
Lobbers("Bomb Lobbers", Material.FIREBALL, (byte) 0, GameCategory.ARCADE, 54),
|
Lobbers("Bomb Lobbers", Material.FIREBALL, (byte) 0, GameCategory.ARCADE, 54),
|
||||||
|
|
||||||
ChampionsCTF("Champions CTF", "Champions", Material.BANNER, DyeColor.RED.getDyeData(), GameCategory.CHAMPIONS, 56),
|
ChampionsCTF("Champions CTF", "Champions", Material.BANNER, DyeColor.RED.getDyeData(), GameCategory.CHAMPIONS, 56),
|
||||||
|
|
||||||
|
Minecraft_League("Minecraft League", Material.DIAMOND_SWORD, (byte)0, GameCategory.SURVIVAL, 57),
|
||||||
|
|
||||||
Event("Mineplex Event", Material.CAKE, (byte)0, GameCategory.EVENT, 999);
|
Event("Mineplex Event", Material.CAKE, (byte)0, GameCategory.EVENT, 999);
|
||||||
|
|
||||||
|
@ -243,6 +243,11 @@ public class Arcade extends JavaPlugin
|
|||||||
|
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ArcadeManager getArcadeManager()
|
||||||
|
{
|
||||||
|
return _gameManager;
|
||||||
|
}
|
||||||
|
|
||||||
private void DeleteFolders()
|
private void DeleteFolders()
|
||||||
{
|
{
|
||||||
|
@ -33,6 +33,7 @@ import nautilus.game.arcade.game.games.horsecharge.Horse;
|
|||||||
import nautilus.game.arcade.game.games.lobbers.BombLobbers;
|
import nautilus.game.arcade.game.games.lobbers.BombLobbers;
|
||||||
import nautilus.game.arcade.game.games.micro.Micro;
|
import nautilus.game.arcade.game.games.micro.Micro;
|
||||||
import nautilus.game.arcade.game.games.milkcow.MilkCow;
|
import nautilus.game.arcade.game.games.milkcow.MilkCow;
|
||||||
|
import nautilus.game.arcade.game.games.minecraftleague.MinecraftLeague;
|
||||||
import nautilus.game.arcade.game.games.minestrike.MineStrike;
|
import nautilus.game.arcade.game.games.minestrike.MineStrike;
|
||||||
import nautilus.game.arcade.game.games.mineware.MineWare;
|
import nautilus.game.arcade.game.games.mineware.MineWare;
|
||||||
import nautilus.game.arcade.game.games.monstermaze.MonsterMaze;
|
import nautilus.game.arcade.game.games.monstermaze.MonsterMaze;
|
||||||
@ -92,6 +93,7 @@ public enum GameType
|
|||||||
Lobbers(BombLobbers.class, GameDisplay.Lobbers),
|
Lobbers(BombLobbers.class, GameDisplay.Lobbers),
|
||||||
Micro(Micro.class, GameDisplay.Micro),
|
Micro(Micro.class, GameDisplay.Micro),
|
||||||
MilkCow(MilkCow.class, GameDisplay.MilkCow),
|
MilkCow(MilkCow.class, GameDisplay.MilkCow),
|
||||||
|
MinecraftLeague(MinecraftLeague.class, GameDisplay.Minecraft_League),
|
||||||
MineStrike(MineStrike.class, GameDisplay.MineStrike, "http://chivebox.com/mineplex/ResMinestrike.zip", true),
|
MineStrike(MineStrike.class, GameDisplay.MineStrike, "http://chivebox.com/mineplex/ResMinestrike.zip", true),
|
||||||
MineWare(MineWare.class, GameDisplay.MineWare),
|
MineWare(MineWare.class, GameDisplay.MineWare),
|
||||||
OldMineWare(OldMineWare.class, GameDisplay.OldMineWare),
|
OldMineWare(OldMineWare.class, GameDisplay.OldMineWare),
|
||||||
|
@ -855,7 +855,7 @@ public abstract class Game implements Listener
|
|||||||
public void RespawnPlayer(final Player player)
|
public void RespawnPlayer(final Player player)
|
||||||
{
|
{
|
||||||
player.eject();
|
player.eject();
|
||||||
player.teleport(GetTeam(player).GetSpawn());
|
RespawnPlayerTeleport(player);
|
||||||
|
|
||||||
Manager.Clear(player);
|
Manager.Clear(player);
|
||||||
|
|
||||||
@ -872,6 +872,11 @@ public abstract class Game implements Listener
|
|||||||
}
|
}
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RespawnPlayerTeleport(Player player)
|
||||||
|
{
|
||||||
|
player.teleport(GetTeam(player).GetSpawn());
|
||||||
|
}
|
||||||
|
|
||||||
public boolean IsPlaying(Player player)
|
public boolean IsPlaying(Player player)
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,561 @@
|
|||||||
|
package nautilus.game.arcade.game.games.minecraftleague;
|
||||||
|
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
import mineplex.core.common.Rank;
|
||||||
|
import mineplex.core.common.util.C;
|
||||||
|
import mineplex.core.common.util.UtilAction;
|
||||||
|
import mineplex.core.common.util.UtilEnt;
|
||||||
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
|
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.events.GameStateChangeEvent;
|
||||||
|
import nautilus.game.arcade.events.PlayerGameRespawnEvent;
|
||||||
|
import nautilus.game.arcade.game.GameTeam;
|
||||||
|
import nautilus.game.arcade.game.GameTeam.PlayerState;
|
||||||
|
import nautilus.game.arcade.game.TeamGame;
|
||||||
|
import nautilus.game.arcade.game.games.minecraftleague.data.PlayerRespawnPoint;
|
||||||
|
import nautilus.game.arcade.game.games.minecraftleague.data.TeamCrystal;
|
||||||
|
import nautilus.game.arcade.game.games.minecraftleague.kit.KitPlayer;
|
||||||
|
import nautilus.game.arcade.kit.Kit;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
||||||
|
import org.bukkit.enchantments.Enchantment;
|
||||||
|
import org.bukkit.entity.Arrow;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.Projectile;
|
||||||
|
import org.bukkit.entity.TNTPrimed;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.block.Action;
|
||||||
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
|
import org.bukkit.event.block.BlockIgniteEvent;
|
||||||
|
import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
|
||||||
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
public class MinecraftLeague extends TeamGame
|
||||||
|
{
|
||||||
|
private ConcurrentHashMap<GameTeam, TeamCrystal> _crystals = new ConcurrentHashMap<GameTeam, TeamCrystal>();
|
||||||
|
private ConcurrentHashMap<Player, PlayerRespawnPoint> _customRespawns = new ConcurrentHashMap<Player, PlayerRespawnPoint>();
|
||||||
|
private long _liveTime = 0;
|
||||||
|
|
||||||
|
public MinecraftLeague(ArcadeManager manager)
|
||||||
|
{
|
||||||
|
super(manager, GameType.MinecraftLeague,
|
||||||
|
|
||||||
|
new Kit[]
|
||||||
|
{
|
||||||
|
new KitPlayer(manager)
|
||||||
|
},
|
||||||
|
|
||||||
|
new String[]
|
||||||
|
{
|
||||||
|
C.cWhite + "Gather resources for battle.",
|
||||||
|
C.cWhite + "Destroy the enemy's Crystal to",
|
||||||
|
C.cWhite + "Prevent them from respawning",
|
||||||
|
" ",
|
||||||
|
C.cWhite + "Last team standing wins",
|
||||||
|
});
|
||||||
|
|
||||||
|
this.DeathOut = false;
|
||||||
|
this.DamageSelf = false;
|
||||||
|
this.DeathSpectateSecs = 0;
|
||||||
|
this.WorldBoundaryKill = false;
|
||||||
|
this.DeathDropItems = true;
|
||||||
|
this.CreatureAllow = true;
|
||||||
|
|
||||||
|
this.BlockBreak = true;
|
||||||
|
this.BlockPlace = true;
|
||||||
|
this.ItemPickup = true;
|
||||||
|
this.ItemDrop = true;
|
||||||
|
|
||||||
|
this.InventoryClick = true;
|
||||||
|
this.InventoryOpenBlock = true;
|
||||||
|
this.InventoryOpenChest = true;
|
||||||
|
|
||||||
|
this.WorldWeatherEnabled = true;
|
||||||
|
this.WorldBlockBurn = true;
|
||||||
|
this.WorldBlockGrow = true;
|
||||||
|
this.WorldBoneMeal = true;
|
||||||
|
this.WorldFireSpread = true;
|
||||||
|
this.WorldLeavesDecay = true;
|
||||||
|
this.WorldSoilTrample = true;
|
||||||
|
|
||||||
|
this.StrictAntiHack = true;
|
||||||
|
this.AllowParticles = false;
|
||||||
|
this.SoupEnabled = false;
|
||||||
|
Manager.GetCreature().SetForce(true);
|
||||||
|
|
||||||
|
_help = new String[]
|
||||||
|
{
|
||||||
|
"Team Crystals have 500 health! Hit them with tnt to deal 1.5 damage.",
|
||||||
|
"The better the sword you have, the more damage you deal to Team Crystals!",
|
||||||
|
"Right-click a bed in order to change your personal spawn location."
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
registerStatTrackers(
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
Manager.GetDamage().disable();
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum DamageAmount
|
||||||
|
{
|
||||||
|
NONE(1),
|
||||||
|
WOOD(4),
|
||||||
|
STONE(5),
|
||||||
|
GOLD(4),
|
||||||
|
IRON(6),
|
||||||
|
DIAMOND(7);
|
||||||
|
|
||||||
|
private double _amount;
|
||||||
|
|
||||||
|
private DamageAmount(int amount)
|
||||||
|
{
|
||||||
|
_amount = amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getDamage(int sharpnessLevel, DamageType type)
|
||||||
|
{
|
||||||
|
if (type.getDamageReduction() == null)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return _amount + (sharpnessLevel / 2) - type.getDamageReduction();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DamageAmount getDamageAmount(Material material)
|
||||||
|
{
|
||||||
|
for (DamageAmount da : DamageAmount.values())
|
||||||
|
{
|
||||||
|
if (da == DamageAmount.NONE)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (material.toString().contains(da.toString() + "_"))
|
||||||
|
return da;
|
||||||
|
}
|
||||||
|
|
||||||
|
return DamageAmount.NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum DamageType
|
||||||
|
{
|
||||||
|
NONE(null),
|
||||||
|
PICKAXE(2),
|
||||||
|
AXE(1),
|
||||||
|
SWORD(0),
|
||||||
|
SPADE(3);
|
||||||
|
|
||||||
|
private Integer _reduction;
|
||||||
|
|
||||||
|
private DamageType(Integer reduction)
|
||||||
|
{
|
||||||
|
_reduction = reduction;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getDamageReduction()
|
||||||
|
{
|
||||||
|
return _reduction;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DamageType getDamageType(Material material)
|
||||||
|
{
|
||||||
|
for (DamageType dt : DamageType.values())
|
||||||
|
{
|
||||||
|
if (dt == DamageType.NONE)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (material.toString().contains("_" + dt.toString()))
|
||||||
|
return dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
return DamageType.NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ParseData()
|
||||||
|
{
|
||||||
|
Location redLoc = WorldData.GetDataLocs("RED").get(0);
|
||||||
|
Location blueLoc = WorldData.GetDataLocs("BLUE").get(0);
|
||||||
|
|
||||||
|
_crystals.put(GetTeam(ChatColor.RED), new TeamCrystal(this, GetTeam(ChatColor.RED), redLoc));
|
||||||
|
_crystals.put(GetTeam(ChatColor.AQUA), new TeamCrystal(this, GetTeam(ChatColor.AQUA), blueLoc));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@EventHandler
|
||||||
|
public void ScoreboardUpdate(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (event.getType() != UpdateType.FAST)
|
||||||
|
return;
|
||||||
|
|
||||||
|
scoreboardWrite();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void scoreboardWrite()
|
||||||
|
{
|
||||||
|
if (!InProgress())
|
||||||
|
return;
|
||||||
|
|
||||||
|
GameTeam red = GetTeam(ChatColor.RED);
|
||||||
|
GameTeam blue = GetTeam(ChatColor.AQUA);
|
||||||
|
TeamCrystal redc = _crystals.get(red);
|
||||||
|
TeamCrystal bluec = _crystals.get(blue);
|
||||||
|
|
||||||
|
if (IsLive())
|
||||||
|
_liveTime = Math.max(System.currentTimeMillis() - GetStateTime(), 0);
|
||||||
|
|
||||||
|
Scoreboard.Reset();
|
||||||
|
|
||||||
|
Scoreboard.WriteBlank();
|
||||||
|
Scoreboard.Write(C.cYellowB + "Time Elapsed");
|
||||||
|
Scoreboard.Write(UtilTime.MakeStr(_liveTime));
|
||||||
|
|
||||||
|
Scoreboard.WriteBlank();
|
||||||
|
Scoreboard.Write(C.cRedB + "Red Team");
|
||||||
|
Scoreboard.Write("Crystal: " + redc.formatHealth(redc.getHealth()));
|
||||||
|
Scoreboard.Write("Players Alive: " + red.GetPlayers(true).size());
|
||||||
|
|
||||||
|
Scoreboard.WriteBlank();
|
||||||
|
Scoreboard.Write(C.cAquaB + "Blue Team");
|
||||||
|
Scoreboard.Write("Crystal: " + bluec.formatHealth(bluec.getHealth()));
|
||||||
|
Scoreboard.Write("Players Alive: " + blue.GetPlayers(true).size());
|
||||||
|
|
||||||
|
Scoreboard.Draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void RespawnPlayerTeleport(Player player)
|
||||||
|
{
|
||||||
|
if (_customRespawns.containsKey(player))
|
||||||
|
{
|
||||||
|
PlayerRespawnPoint point = _customRespawns.get(player);
|
||||||
|
if (point.respawnPlayer())
|
||||||
|
return;
|
||||||
|
|
||||||
|
_customRespawns.remove(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
player.teleport(GetTeam(player).GetSpawn());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onEnd(GameStateChangeEvent event)
|
||||||
|
{
|
||||||
|
if (event.GetGame() != this)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.GetState() == GameState.End)
|
||||||
|
Manager.GetDamage().enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onUpdate(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (!IsLive())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.getType() == UpdateType.FASTEST)
|
||||||
|
{
|
||||||
|
for (TeamCrystal crystal : _crystals.values())
|
||||||
|
{
|
||||||
|
crystal.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void crystalDmg(EntityDamageEvent event)
|
||||||
|
{
|
||||||
|
if (!InProgress())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.getEntity().getType() != EntityType.ENDER_CRYSTAL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (TeamCrystal cryst : _crystals.values())
|
||||||
|
{
|
||||||
|
if (cryst.isEntity(event.getEntity()))
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void crystalDmg(EntityDamageByEntityEvent event)
|
||||||
|
{
|
||||||
|
if (!IsLive())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.getEntity().getType() != EntityType.ENDER_CRYSTAL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TeamCrystal crystal = null;
|
||||||
|
for (TeamCrystal cryst : _crystals.values())
|
||||||
|
{
|
||||||
|
if (cryst.isEntity(event.getEntity()))
|
||||||
|
crystal = cryst;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (crystal == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
Player player;
|
||||||
|
|
||||||
|
if (event.getDamager() instanceof Projectile)
|
||||||
|
{
|
||||||
|
if (((Projectile)event.getDamager()).getShooter() instanceof Player)
|
||||||
|
{
|
||||||
|
if (event.getDamager() instanceof Arrow)
|
||||||
|
{
|
||||||
|
player = (Player) ((Projectile)event.getDamager()).getShooter();
|
||||||
|
|
||||||
|
if (!crystal.canDamage(player))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!crystal.damage(event.getDamage(), player))
|
||||||
|
player.playSound(crystal.getLocation(), Sound.ORB_PICKUP, 100, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.getDamager() instanceof Player)
|
||||||
|
{
|
||||||
|
player = (Player)event.getDamager();
|
||||||
|
if (!crystal.canDamage(player))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (player.getItemInHand() == null || player.getItemInHand().getType() == Material.AIR)
|
||||||
|
{
|
||||||
|
if (!crystal.damage(1, player))
|
||||||
|
player.playSound(crystal.getLocation(), Sound.ZOMBIE_WOODBREAK, 1, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Material type = player.getItemInHand().getType();
|
||||||
|
int level = player.getItemInHand().getEnchantmentLevel(Enchantment.DAMAGE_ALL);
|
||||||
|
double damage = DamageAmount.getDamageAmount(type).getDamage(level, DamageType.getDamageType(type));
|
||||||
|
|
||||||
|
if (!crystal.damage(damage, player))
|
||||||
|
player.playSound(crystal.getLocation(), Sound.ZOMBIE_WOODBREAK, 1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void placeBed(PlayerInteractEvent event)
|
||||||
|
{
|
||||||
|
if (!IsLive())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.getClickedBlock() == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.getClickedBlock().getType() != Material.BED_BLOCK)
|
||||||
|
return;
|
||||||
|
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
if (_customRespawns.containsKey(player))
|
||||||
|
_customRespawns.get(player).overWrite(event.getClickedBlock().getLocation());
|
||||||
|
else
|
||||||
|
_customRespawns.put(player, new PlayerRespawnPoint(player, event.getClickedBlock().getLocation()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void breakBed(BlockBreakEvent event)
|
||||||
|
{
|
||||||
|
if (!IsLive())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.getBlock().getType() != Material.BED_BLOCK)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (Player player : _customRespawns.keySet())
|
||||||
|
{
|
||||||
|
PlayerRespawnPoint point = _customRespawns.get(player);
|
||||||
|
|
||||||
|
if (point.breakBed(event.getBlock()))
|
||||||
|
_customRespawns.remove(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onRespawn(PlayerGameRespawnEvent event)
|
||||||
|
{
|
||||||
|
if (event.GetGame() != this)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Player player = event.GetPlayer();
|
||||||
|
|
||||||
|
if (!_crystals.get(GetTeam(player)).Alive)
|
||||||
|
{
|
||||||
|
SetPlayerState(player, PlayerState.OUT);
|
||||||
|
|
||||||
|
Manager.GetCondition().Factory().Blind("PermDead", player, player, 1.5, 0, false, false, false);
|
||||||
|
Manager.GetCondition().Factory().Cloak("PermDead", player, player, 9999, false, false);
|
||||||
|
|
||||||
|
player.setAllowFlight(true);
|
||||||
|
player.setFlying(true);
|
||||||
|
((CraftPlayer)player).getHandle().spectating = true;
|
||||||
|
((CraftPlayer)player).getHandle().k = false;
|
||||||
|
|
||||||
|
UtilAction.velocity(player, new Vector(0,1.2,0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onTNT(BlockIgniteEvent event)
|
||||||
|
{
|
||||||
|
if (event.getBlock().getType() == Material.TNT)
|
||||||
|
{
|
||||||
|
if (event.getCause() != IgniteCause.FLINT_AND_STEEL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.getPlayer() == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
final Location loc = event.getBlock().getLocation();
|
||||||
|
final Player player = event.getPlayer();
|
||||||
|
|
||||||
|
Bukkit.getScheduler().runTaskLater(Manager.getPlugin(), new Runnable()
|
||||||
|
{
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
for (Entity e : UtilEnt.getAllInRadius(loc, 2).keySet())
|
||||||
|
{
|
||||||
|
if (e instanceof TNTPrimed)
|
||||||
|
{
|
||||||
|
e.setCustomName(player.getName());
|
||||||
|
e.setCustomNameVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}, 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onDebug(PlayerCommandPreprocessEvent event)
|
||||||
|
{
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
|
String message = event.getMessage().replaceFirst("/", "");
|
||||||
|
String[] rawArgs = message.split(" ");
|
||||||
|
String cmd = rawArgs[0];
|
||||||
|
message = message.replaceFirst(cmd + " ", "");
|
||||||
|
String[] args = message.split(" ");
|
||||||
|
|
||||||
|
if (!cmd.equalsIgnoreCase("vanilla"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Manager.GetClients().Get(player).GetRank().has(Rank.JNR_DEV))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
if (args.length == 0)
|
||||||
|
{
|
||||||
|
UtilPlayer.message(player, C.cGray + "Usage: /vanilla <kill/spawn/damage/status> [team] [damage]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String sub = args[0];
|
||||||
|
if (sub.equalsIgnoreCase("kill"))
|
||||||
|
{
|
||||||
|
if (args.length < 2)
|
||||||
|
{
|
||||||
|
UtilPlayer.message(player, C.cGray + "Usage: /vanilla kill <red/blue>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String team = args[1];
|
||||||
|
if (!team.equalsIgnoreCase("red") && !team.equalsIgnoreCase("blue"))
|
||||||
|
{
|
||||||
|
UtilPlayer.message(player, C.cGray + "Usage: /vanilla kill <red/blue>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (team.equalsIgnoreCase("red"))
|
||||||
|
_crystals.get(GetTeam(ChatColor.RED)).handleDebug(player, null, true);
|
||||||
|
else if (team.equalsIgnoreCase("blue"))
|
||||||
|
_crystals.get(GetTeam(ChatColor.AQUA)).handleDebug(player, null, true);
|
||||||
|
}
|
||||||
|
else if (sub.equalsIgnoreCase("spawn"))
|
||||||
|
{
|
||||||
|
if (args.length < 2)
|
||||||
|
{
|
||||||
|
UtilPlayer.message(player, C.cGray + "Usage: /vanilla spawn <red/blue>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String team = args[1];
|
||||||
|
if (!team.equalsIgnoreCase("red") && !team.equalsIgnoreCase("blue"))
|
||||||
|
{
|
||||||
|
UtilPlayer.message(player, C.cGray + "Usage: /vanilla spawn <red/blue>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (team.equalsIgnoreCase("red"))
|
||||||
|
_crystals.get(GetTeam(ChatColor.RED)).handleDebug(player, null, false);
|
||||||
|
else if (team.equalsIgnoreCase("blue"))
|
||||||
|
_crystals.get(GetTeam(ChatColor.AQUA)).handleDebug(player, null, false);
|
||||||
|
}
|
||||||
|
else if (sub.equalsIgnoreCase("damage"))
|
||||||
|
{
|
||||||
|
if (args.length < 3)
|
||||||
|
{
|
||||||
|
UtilPlayer.message(player, C.cGray + "Usage: /vanilla damage <red/blue> <damage>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String team = args[1];
|
||||||
|
if (!team.equalsIgnoreCase("red") && !team.equalsIgnoreCase("blue"))
|
||||||
|
{
|
||||||
|
UtilPlayer.message(player, C.cGray + "Usage: /vanilla damage <red/blue> <damage>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Double damage;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
damage = Double.parseDouble(args[2]);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
UtilPlayer.message(player, C.cGray + "Usage: /vanilla damage <red/blue> <damage>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (team.equalsIgnoreCase("red"))
|
||||||
|
_crystals.get(GetTeam(ChatColor.RED)).handleDebug(player, damage, false);
|
||||||
|
else if (team.equalsIgnoreCase("blue"))
|
||||||
|
_crystals.get(GetTeam(ChatColor.AQUA)).handleDebug(player, damage, false);
|
||||||
|
}
|
||||||
|
else if (sub.equalsIgnoreCase("status"))
|
||||||
|
{
|
||||||
|
for (GameTeam team : _crystals.keySet())
|
||||||
|
{
|
||||||
|
Bukkit.broadcastMessage(team.GetName());
|
||||||
|
TeamCrystal crystal = _crystals.get(team);
|
||||||
|
Bukkit.broadcastMessage(crystal.getHealth() + "");
|
||||||
|
Bukkit.broadcastMessage(crystal.Alive + "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
UtilPlayer.message(player, C.cGray + "Usage: /vanilla <kill/spawn/damage/status> [team] [damage]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,107 @@
|
|||||||
|
package nautilus.game.arcade.game.games.minecraftleague.data;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.F;
|
||||||
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class PlayerRespawnPoint
|
||||||
|
{
|
||||||
|
private Player _owner;
|
||||||
|
private Location _loc;
|
||||||
|
|
||||||
|
public PlayerRespawnPoint(Player owner, Location loc)
|
||||||
|
{
|
||||||
|
_owner = owner;
|
||||||
|
_loc = loc;
|
||||||
|
UtilPlayer.message(owner, F.main("Game", "You have set your bed respawn point. The next time you die you will respawn here!"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
private boolean isBedType(Block bedBlock, boolean foot)
|
||||||
|
{
|
||||||
|
boolean head = (bedBlock.getData() & 0x8) != 0;
|
||||||
|
|
||||||
|
if (foot)
|
||||||
|
return !head;
|
||||||
|
else
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Block getOtherBedBlock(Block b1)
|
||||||
|
{
|
||||||
|
if (b1.getType() != Material.BED_BLOCK)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
boolean lookingForFoot = isBedType(b1, false);
|
||||||
|
|
||||||
|
for (int x = -1; x <= 1; x++)
|
||||||
|
{
|
||||||
|
for (int z = -1; z <= 1; z++)
|
||||||
|
{
|
||||||
|
Block b2 = b1.getRelative(x, 0, z);
|
||||||
|
if (!(b1.getLocation().equals(b2.getLocation())))
|
||||||
|
{
|
||||||
|
if (b2.getType().equals(Material.BED_BLOCK))
|
||||||
|
{
|
||||||
|
if (lookingForFoot && isBedType(b2, true))
|
||||||
|
return b2;
|
||||||
|
|
||||||
|
if (!lookingForFoot && isBedType(b2, false))
|
||||||
|
return b2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean respawnPlayer()
|
||||||
|
{
|
||||||
|
if (_loc.getBlock().getType() != Material.BED_BLOCK)
|
||||||
|
{
|
||||||
|
UtilPlayer.message(_owner, F.main("Game", "Your bed has been destroyed, and your respawn point has been reset!"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_owner.teleport(_loc.clone().add(0.5, 1.5, 0.5));
|
||||||
|
UtilPlayer.message(_owner, F.main("Game", "You have been respawned at your bed location!"));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean breakBed(Block block)
|
||||||
|
{
|
||||||
|
boolean isOther = false;
|
||||||
|
|
||||||
|
if (getOtherBedBlock(_loc.getBlock()) != null)
|
||||||
|
if (getOtherBedBlock(_loc.getBlock()).equals(block))
|
||||||
|
isOther = true;
|
||||||
|
|
||||||
|
if (block.getLocation().equals(_loc) || isOther)
|
||||||
|
{
|
||||||
|
UtilPlayer.message(_owner, F.main("Game", "Your bed respawn point has been broken!"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void overWrite(Location newLocation)
|
||||||
|
{
|
||||||
|
if (newLocation.distance(_loc) <= .2)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (getOtherBedBlock(_loc.getBlock()) != null)
|
||||||
|
if (getOtherBedBlock(_loc.getBlock()).getLocation().distance(newLocation) <= .2)
|
||||||
|
return;
|
||||||
|
|
||||||
|
UtilPlayer.message(_owner, F.main("Game", "You have set your bed respawn point. The next time you die you will respawn here!"));
|
||||||
|
if (_loc.getBlock().getType() == Material.BED_BLOCK)
|
||||||
|
_loc.getBlock().breakNaturally();
|
||||||
|
|
||||||
|
_loc = newLocation;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,182 @@
|
|||||||
|
package nautilus.game.arcade.game.games.minecraftleague.data;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.C;
|
||||||
|
import mineplex.core.common.util.UtilAlg;
|
||||||
|
import mineplex.core.common.util.UtilMath;
|
||||||
|
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.UtilServer;
|
||||||
|
import mineplex.core.common.util.UtilTextMiddle;
|
||||||
|
import mineplex.core.hologram.Hologram;
|
||||||
|
import nautilus.game.arcade.game.GameTeam;
|
||||||
|
import nautilus.game.arcade.game.games.minecraftleague.MinecraftLeague;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.entity.EnderCrystal;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
public class TeamCrystal
|
||||||
|
{
|
||||||
|
private MinecraftLeague _host;
|
||||||
|
private Location _spawn;
|
||||||
|
private GameTeam _team;
|
||||||
|
private Double _health;
|
||||||
|
private EnderCrystal _entity;
|
||||||
|
private Hologram _name, _healthTag;
|
||||||
|
public boolean Alive;
|
||||||
|
|
||||||
|
public TeamCrystal(MinecraftLeague host, GameTeam team, Location spawn)
|
||||||
|
{
|
||||||
|
_host = host;
|
||||||
|
_spawn = spawn.clone().add(0.5, 1.5, 0.5);
|
||||||
|
_team = team;
|
||||||
|
_health = 500D;
|
||||||
|
_name = new Hologram(_host.getArcadeManager().getHologramManager(), _spawn.clone().add(0, 3, 0), team.GetColor() + team.getDisplayName() + "'s Respawn Crystal");
|
||||||
|
_healthTag = new Hologram(_host.getArcadeManager().getHologramManager(), _spawn.clone().add(0, 2, 0), formatHealth(_health));
|
||||||
|
|
||||||
|
spawn();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void spawn()
|
||||||
|
{
|
||||||
|
_name.start();
|
||||||
|
_healthTag.start();
|
||||||
|
_entity = (EnderCrystal) _host.getArcadeManager().GetCreature().SpawnEntity(_spawn, EntityType.ENDER_CRYSTAL);
|
||||||
|
_health = 500D;
|
||||||
|
Alive = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void kill(Player player)
|
||||||
|
{
|
||||||
|
String message = "";
|
||||||
|
if (player != null)
|
||||||
|
message = C.cRedB + player.getName() + " has destroyed " + _team.getDisplayName() + "'s " + C.cDPurpleB + "Crystal" + C.cRedB + "!";
|
||||||
|
else
|
||||||
|
message = C.cRedB + _team.getDisplayName() + "'s " + C.cDPurpleB + "Respawn Crystal" + C.cRedB + " has been destroyed!";
|
||||||
|
|
||||||
|
Bukkit.broadcastMessage(message);
|
||||||
|
|
||||||
|
for (Player inform : _team.GetPlayers(true))
|
||||||
|
UtilTextMiddle.display(C.cRedB + "Team Crystal Destroyed", C.cRed + "You will no longer respawn!", inform);
|
||||||
|
|
||||||
|
Alive = false;
|
||||||
|
_entity.remove();
|
||||||
|
_healthTag.stop();
|
||||||
|
_name.stop();
|
||||||
|
playDeathAnimation(_spawn);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void playDeathAnimation(Location loc)
|
||||||
|
{
|
||||||
|
_spawn.getWorld().playSound(loc, Sound.EXPLODE, 10, 0);
|
||||||
|
//GFX subject to change
|
||||||
|
Location loc1 = loc.clone().add(-2, 3, -2);
|
||||||
|
Location loc2 = loc.clone().add(2, 0, 2);
|
||||||
|
Location loc3 = loc.clone().add(2, 3, 2);
|
||||||
|
Location loc4 = loc.clone().add(-2, 0, -2);
|
||||||
|
Location particle1 = loc2.clone();
|
||||||
|
Location particle2 = loc4.clone();
|
||||||
|
while (UtilMath.offset(loc1, loc) >= UtilMath.offset(particle1, loc))
|
||||||
|
{
|
||||||
|
Vector v = UtilAlg.getTrajectory(particle1, loc1);
|
||||||
|
//UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, particle, v, 0, 1, ViewDist.NORMAL, UtilServer.getPlayers());
|
||||||
|
UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, particle1, v, 0, 5, ViewDist.MAX, UtilServer.getPlayers());
|
||||||
|
particle1.add(v);
|
||||||
|
}
|
||||||
|
while (UtilMath.offset(loc3, loc) >= UtilMath.offset(particle2, loc))
|
||||||
|
{
|
||||||
|
Vector v = UtilAlg.getTrajectory(particle2, loc3);
|
||||||
|
UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, particle2, v, 0, 5, ViewDist.MAX, UtilServer.getPlayers());
|
||||||
|
particle2.add(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEntity(Entity e)
|
||||||
|
{
|
||||||
|
return e.getEntityId() == _entity.getEntityId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canDamage(Player player)
|
||||||
|
{
|
||||||
|
if (UtilPlayer.isSpectator(player))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (_host.GetTeam(player) == _team)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!_host.IsPlaying(player))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getHealth()
|
||||||
|
{
|
||||||
|
if (!Alive)
|
||||||
|
return 0D;
|
||||||
|
|
||||||
|
return _health;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String formatHealth(Double healthNumber)
|
||||||
|
{
|
||||||
|
String tag = healthNumber.toString();
|
||||||
|
|
||||||
|
if (healthNumber > 450)
|
||||||
|
tag = C.cGreen + tag;
|
||||||
|
else if (healthNumber < 225)
|
||||||
|
tag = C.cRed + tag;
|
||||||
|
else
|
||||||
|
tag = C.cYellow + tag;
|
||||||
|
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean damage(double damage, Player player)
|
||||||
|
{
|
||||||
|
Double newHealth = Math.max(_health - damage, 0);
|
||||||
|
|
||||||
|
if (newHealth == 0)
|
||||||
|
{
|
||||||
|
kill(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
_health = newHealth;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Location getLocation()
|
||||||
|
{
|
||||||
|
return _spawn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update()
|
||||||
|
{
|
||||||
|
_healthTag.setText(formatHealth(_health));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleDebug(Player dev, Double damage, boolean kill)
|
||||||
|
{
|
||||||
|
if (damage != null)
|
||||||
|
{
|
||||||
|
damage(damage, dev);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (kill)
|
||||||
|
kill(dev);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
spawn();
|
||||||
|
dev.sendMessage(C.cGray + "Spawned!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package nautilus.game.arcade.game.games.minecraftleague.kit;
|
||||||
|
|
||||||
|
import nautilus.game.arcade.ArcadeManager;
|
||||||
|
import nautilus.game.arcade.kit.Kit;
|
||||||
|
import nautilus.game.arcade.kit.KitAvailability;
|
||||||
|
import nautilus.game.arcade.kit.Perk;
|
||||||
|
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class KitPlayer extends Kit
|
||||||
|
{
|
||||||
|
public KitPlayer(ArcadeManager manager)
|
||||||
|
{
|
||||||
|
super(manager, "Player", KitAvailability.Free,
|
||||||
|
|
||||||
|
new String[]
|
||||||
|
{
|
||||||
|
"",
|
||||||
|
"Entirely vanilla combat!",
|
||||||
|
""
|
||||||
|
},
|
||||||
|
|
||||||
|
new Perk[]
|
||||||
|
{
|
||||||
|
|
||||||
|
}, EntityType.ZOMBIE, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void GiveItems(Player player)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void SpawnCustom(LivingEntity ent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user