parent
118bde5484
commit
fe933913e8
|
@ -0,0 +1,106 @@
|
|||
package mineplex.core.map;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.map.MapView;
|
||||
import org.bukkit.map.MapView.Scale;
|
||||
|
||||
public class TeamMap
|
||||
{
|
||||
List<Player> _players;
|
||||
final ItemStack _map;
|
||||
|
||||
public TeamMap(List<Player> display, Location loc, Scale scale)
|
||||
{
|
||||
_players = display;
|
||||
MapView view = Bukkit.createMap(loc.getWorld());
|
||||
view.setCenterX(loc.getBlockX());
|
||||
view.setCenterZ(loc.getBlockZ());
|
||||
view.setScale(scale);
|
||||
|
||||
_map = new ItemStack(Material.MAP);
|
||||
_map.setDurability(view.getId());
|
||||
}
|
||||
|
||||
public void update(Player... forceRemove)
|
||||
{
|
||||
if (forceRemove != null)
|
||||
{
|
||||
for (Player remove : forceRemove)
|
||||
{
|
||||
_players.remove(remove);
|
||||
}
|
||||
}
|
||||
|
||||
List<Player> confirmed = new ArrayList<Player>();
|
||||
|
||||
for (Player check : _players)
|
||||
{
|
||||
if (!UtilPlayer.isOnline(check.getName()))
|
||||
continue;
|
||||
|
||||
if (UtilPlayer.isSpectator(check))
|
||||
continue;
|
||||
|
||||
confirmed.add(check);
|
||||
}
|
||||
|
||||
_players.clear();
|
||||
for (Player add : confirmed)
|
||||
_players.add(add);
|
||||
}
|
||||
|
||||
public void giveMaps()
|
||||
{
|
||||
update(null);
|
||||
|
||||
for (Player player : _players)
|
||||
{
|
||||
UtilInv.insert(player, _map);
|
||||
UtilInv.Update(player);
|
||||
}
|
||||
}
|
||||
|
||||
public void giveMap(Player player)
|
||||
{
|
||||
giveMap(player, true, "");
|
||||
}
|
||||
|
||||
public void giveMap(Player player, boolean add, String displayName, String... lore)
|
||||
{
|
||||
if (!_players.contains(player))
|
||||
{
|
||||
if (add)
|
||||
{
|
||||
_players.add(player);
|
||||
}
|
||||
}
|
||||
|
||||
ItemStack map = _map.clone();
|
||||
ItemMeta im = map.getItemMeta();
|
||||
if (!displayName.equalsIgnoreCase(""))
|
||||
im.setDisplayName(displayName);
|
||||
|
||||
List<String> lores = new ArrayList<String>();
|
||||
for (String s : lore)
|
||||
lores.add(s);
|
||||
|
||||
if (!lores.isEmpty())
|
||||
im.setLore(lores);
|
||||
|
||||
map.setItemMeta(im);
|
||||
|
||||
UtilInv.insert(player, map);
|
||||
UtilInv.Update(player);
|
||||
}
|
||||
}
|
|
@ -1,13 +1,19 @@
|
|||
package nautilus.game.arcade.game.games.minecraftleague;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import mineplex.core.common.Rank;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilTextMiddle;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.common.util.UtilTime.TimeUnit;
|
||||
import mineplex.core.map.TeamMap;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
|
@ -18,6 +24,7 @@ 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.Spawner;
|
||||
import nautilus.game.arcade.game.games.minecraftleague.data.TeamCrystal;
|
||||
import nautilus.game.arcade.game.games.minecraftleague.kit.KitPlayer;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
|
@ -30,27 +37,42 @@ 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.ItemFrame;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
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.CreatureSpawnEvent;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.inventory.PrepareItemCraftEvent;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.map.MapView.Scale;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import com.google.common.base.Objects;
|
||||
|
||||
public class MinecraftLeague extends TeamGame
|
||||
{
|
||||
private ConcurrentHashMap<GameTeam, TeamCrystal> _crystals = new ConcurrentHashMap<GameTeam, TeamCrystal>();
|
||||
private ConcurrentHashMap<Player, PlayerRespawnPoint> _customRespawns = new ConcurrentHashMap<Player, PlayerRespawnPoint>();
|
||||
private ConcurrentHashMap<GameTeam, TeamMap> _maps = new ConcurrentHashMap<GameTeam, TeamMap>();
|
||||
private List<Spawner> _spawners = new ArrayList<Spawner>();
|
||||
|
||||
private long _liveTime = 0;
|
||||
private boolean _overTime = false;
|
||||
|
||||
public MinecraftLeague(ArcadeManager manager)
|
||||
{
|
||||
|
@ -188,6 +210,11 @@ public class MinecraftLeague extends TeamGame
|
|||
}
|
||||
}
|
||||
|
||||
public TeamMap getMap(GameTeam team)
|
||||
{
|
||||
return _maps.get(team);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void ParseData()
|
||||
{
|
||||
|
@ -196,6 +223,12 @@ public class MinecraftLeague extends TeamGame
|
|||
|
||||
_crystals.put(GetTeam(ChatColor.RED), new TeamCrystal(this, GetTeam(ChatColor.RED), redLoc));
|
||||
_crystals.put(GetTeam(ChatColor.AQUA), new TeamCrystal(this, GetTeam(ChatColor.AQUA), blueLoc));
|
||||
|
||||
_maps.put(GetTeam(ChatColor.RED), new TeamMap(new ArrayList<Player>(), redLoc, Scale.CLOSE));
|
||||
_maps.put(GetTeam(ChatColor.AQUA), new TeamMap(new ArrayList<Player>(), redLoc, Scale.CLOSE));
|
||||
|
||||
_spawners.add(new Spawner(this, WorldData.GetDataLocs("GREEN").get(0), EntityType.CREEPER));
|
||||
_spawners.add(new Spawner(this, WorldData.GetDataLocs("BLACK").get(0), EntityType.SKELETON));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -226,6 +259,8 @@ public class MinecraftLeague extends TeamGame
|
|||
Scoreboard.WriteBlank();
|
||||
Scoreboard.Write(C.cYellowB + "Time Elapsed");
|
||||
Scoreboard.Write(UtilTime.MakeStr(_liveTime));
|
||||
if (_overTime)
|
||||
Scoreboard.Write(C.cDRedB + "Overtime");
|
||||
|
||||
Scoreboard.WriteBlank();
|
||||
Scoreboard.Write(C.cRedB + "Red Team");
|
||||
|
@ -277,6 +312,22 @@ public class MinecraftLeague extends TeamGame
|
|||
{
|
||||
crystal.update();
|
||||
}
|
||||
|
||||
for (TeamMap map : _maps.values())
|
||||
{
|
||||
map.update(null);
|
||||
}
|
||||
|
||||
for (Spawner spawner : _spawners)
|
||||
{
|
||||
spawner.update();
|
||||
}
|
||||
|
||||
if (UtilTime.elapsed(GetStateTime(), UtilTime.convert(15, TimeUnit.MINUTES, TimeUnit.MILLISECONDS)))
|
||||
{
|
||||
_overTime = true;
|
||||
UtilTextMiddle.display(C.cDRed + "Overtime", C.cDRed + "Dying will now cause your crystal to lose 20 health!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -352,9 +403,15 @@ public class MinecraftLeague extends TeamGame
|
|||
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);
|
||||
|
||||
if (DamageAmount.getDamageAmount(type) != DamageAmount.NONE)
|
||||
{
|
||||
player.getItemInHand().setDurability((short) (player.getItemInHand().getDurability() + 1));
|
||||
UtilInv.Update(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -421,39 +478,127 @@ public class MinecraftLeague extends TeamGame
|
|||
((CraftPlayer)player).getHandle().k = false;
|
||||
|
||||
UtilAction.velocity(player, new Vector(0,1.2,0));
|
||||
|
||||
getMap(GetTeam(player)).update(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (_overTime)
|
||||
_crystals.get(GetTeam(player)).damage(20, null);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onTNT(BlockIgniteEvent event)
|
||||
public void onDrop(PlayerDropItemEvent event)
|
||||
{
|
||||
if (event.getBlock().getType() == Material.TNT)
|
||||
if (!IsLive())
|
||||
return;
|
||||
|
||||
ItemStack item = event.getItemDrop().getItemStack();
|
||||
|
||||
if (item.getType() != Material.MAP)
|
||||
return;
|
||||
|
||||
event.setCancelled(true);
|
||||
UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot drop your team map!"));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void preventMapMoveInventories(InventoryClickEvent event)
|
||||
{
|
||||
if (!IsLive())
|
||||
return;
|
||||
|
||||
if (event.getWhoClicked() instanceof Player)
|
||||
{
|
||||
if (event.getCause() != IgniteCause.FLINT_AND_STEEL)
|
||||
Player p = (Player)event.getWhoClicked();
|
||||
if (p.getOpenInventory().getTopInventory().getType() == InventoryType.PLAYER)
|
||||
return;
|
||||
|
||||
if (event.getPlayer() == null)
|
||||
if (p.getOpenInventory().getTopInventory().getType() == InventoryType.CREATIVE)
|
||||
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);
|
||||
}
|
||||
|
||||
Inventory inv = event.getClickedInventory();
|
||||
|
||||
if (inv == null)
|
||||
return;
|
||||
|
||||
for (ItemStack item : new ItemStack[]
|
||||
{
|
||||
event.getCurrentItem(), event.getCursor()
|
||||
})
|
||||
{
|
||||
if (item == null || item.getType() != Material.MAP)
|
||||
continue;
|
||||
|
||||
if (inv.getHolder() instanceof Player ? !event.isShiftClick() : Objects.equal(event.getCurrentItem(), item))
|
||||
continue;
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
UtilPlayer.message(event.getWhoClicked(), F.main("Game", "You cannot store team maps inside containers!"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onDie(PlayerDeathEvent event)
|
||||
{
|
||||
if (!IsLive())
|
||||
return;
|
||||
|
||||
List<ItemStack> newDrops = new ArrayList<ItemStack>();
|
||||
|
||||
for (ItemStack item : event.getDrops())
|
||||
{
|
||||
if (item.getType() == Material.MAP)
|
||||
continue;
|
||||
|
||||
newDrops.add(item);
|
||||
}
|
||||
|
||||
event.getDrops().clear();
|
||||
for (ItemStack item : newDrops)
|
||||
event.getDrops().add(item);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void preventMapInItemFrame(PlayerInteractEntityEvent event)
|
||||
{
|
||||
if (!IsLive())
|
||||
return;
|
||||
|
||||
if (!(event.getRightClicked() instanceof ItemFrame))
|
||||
return;
|
||||
|
||||
ItemStack item = event.getPlayer().getItemInHand();
|
||||
|
||||
if (item == null || item.getType() != Material.MAP)
|
||||
return;
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void craftMap(PrepareItemCraftEvent event)
|
||||
{
|
||||
if (!IsLive())
|
||||
return;
|
||||
|
||||
if (event.getInventory().getResult().getType() == Material.EMPTY_MAP || event.getInventory().getResult().getType() == Material.MAP)
|
||||
event.getInventory().setResult(new ItemStack(Material.AIR));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onSpawnerActivate(CreatureSpawnEvent event)
|
||||
{
|
||||
if (!IsLive())
|
||||
return;
|
||||
|
||||
if (event.getSpawnReason() != SpawnReason.SPAWNER)
|
||||
return;
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
package nautilus.game.arcade.game.games.minecraftleague.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.common.util.UtilTime.TimeUnit;
|
||||
import nautilus.game.arcade.game.games.minecraftleague.MinecraftLeague;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
public class Spawner
|
||||
{
|
||||
protected MinecraftLeague Host;
|
||||
private Location _spawnerBlock;
|
||||
private EntityType _toSpawn;
|
||||
private long _lastSpawned;
|
||||
private boolean _canSpawn = true;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public Spawner(MinecraftLeague host, Location spawnerBlock, EntityType toSpawn)
|
||||
{
|
||||
Host = host;
|
||||
_spawnerBlock = spawnerBlock;
|
||||
_toSpawn = toSpawn;
|
||||
_lastSpawned = System.currentTimeMillis();
|
||||
spawnerBlock.getBlock().setTypeIdAndData(Material.MOB_SPAWNER.getId(), (byte)toSpawn.getTypeId(), false);
|
||||
}
|
||||
|
||||
private List<Location> getLocations(Location base, int changeX, int changeY, int changeZ)
|
||||
{
|
||||
List<Location> locs = new ArrayList<Location>();
|
||||
for(int x = (base.getBlockX() - changeX); x <= (base.getBlockX() + changeX); x++)
|
||||
{
|
||||
for(int y = (base.getBlockY() - changeY); y <= (base.getBlockY() + changeY); y++)
|
||||
{
|
||||
for(int z = (base.getBlockZ() - changeZ); z <= (base.getBlockZ() + changeZ); z++)
|
||||
{
|
||||
Location loc = new Location(base.getWorld(), x, y, z);
|
||||
locs.add(loc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return locs;
|
||||
}
|
||||
|
||||
private boolean canSpawnMob(Location l)
|
||||
{
|
||||
Block b = l.getBlock();
|
||||
if ((b.getType() != Material.AIR) && !b.getType().toString().contains("WATER") && !UtilBlock.airFoliage(b))
|
||||
return false;
|
||||
|
||||
Block b2 = b.getRelative(BlockFace.UP);
|
||||
if ((b2.getType() != Material.AIR) && !b2.getType().toString().contains("WATER") && !UtilBlock.airFoliage(b2))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void spawn()
|
||||
{
|
||||
if (!_canSpawn)
|
||||
return;
|
||||
|
||||
List<Location> possible = getLocations(_spawnerBlock, 2, 1, 2);
|
||||
boolean spawned = false;
|
||||
int i = UtilMath.r(possible.size());
|
||||
while (!spawned)
|
||||
{
|
||||
Location l = possible.get(i);
|
||||
if (canSpawnMob(l))
|
||||
{
|
||||
Host.getArcadeManager().GetCreature().SpawnEntity(l, _toSpawn);
|
||||
spawned = true;
|
||||
_lastSpawned = System.currentTimeMillis();
|
||||
continue;
|
||||
}
|
||||
|
||||
int newi = 0;
|
||||
if (i == (possible.size() - 1))
|
||||
i = newi;
|
||||
else
|
||||
i++;
|
||||
}
|
||||
for (Location l : possible)
|
||||
{
|
||||
if (!spawned)
|
||||
{
|
||||
if (canSpawnMob(l))
|
||||
{
|
||||
Host.getArcadeManager().GetCreature().SpawnEntity(l, _toSpawn);
|
||||
spawned = true;
|
||||
_lastSpawned = System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void update()
|
||||
{
|
||||
if (_spawnerBlock.getBlock().getType() != Material.MOB_SPAWNER)
|
||||
_canSpawn = false;
|
||||
else
|
||||
_canSpawn = true;
|
||||
|
||||
if (_canSpawn)
|
||||
{
|
||||
if (!UtilTime.elapsed(_lastSpawned, UtilTime.convert(20, TimeUnit.SECONDS, TimeUnit.MILLISECONDS)))
|
||||
_canSpawn = false;
|
||||
else
|
||||
_canSpawn = true;
|
||||
}
|
||||
|
||||
spawn();
|
||||
}
|
||||
}
|
|
@ -1,13 +1,18 @@
|
|||
package nautilus.game.arcade.game.games.minecraftleague.kit;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.map.TeamMap;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.games.minecraftleague.MinecraftLeague;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class KitPlayer extends Kit
|
||||
{
|
||||
|
@ -25,13 +30,18 @@ public class KitPlayer extends Kit
|
|||
new Perk[]
|
||||
{
|
||||
|
||||
}, EntityType.ZOMBIE, null);
|
||||
}, EntityType.PLAYER, new ItemStack(Material.DIAMOND_SWORD));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
TeamMap tmap = ((MinecraftLeague)Manager.GetGame()).getMap(Manager.GetGame().GetTeam(player));
|
||||
|
||||
if (tmap == null)
|
||||
return;
|
||||
|
||||
tmap.giveMap(player, true, C.cGold + "Team Map", C.cGray + "This map contains", C.cGray + "the locations of", C.cGray + "your teammates.");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue