UHC prep for s4

Draw updates
This commit is contained in:
Chiss 2013-11-30 20:40:09 +11:00
parent fee559a892
commit c8fc792fdd
4 changed files with 271 additions and 108 deletions

View File

@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.draw;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import org.bukkit.Bukkit;
@ -57,6 +58,8 @@ public class Draw extends SoloGame
private byte _brushColor = 15;
private Location _brushPrevious = null;
private boolean _lockDrawer = true;
//Round
private int _roundCount = 0;
private int _roundMax = 0;
@ -71,6 +74,7 @@ public class Draw extends SoloGame
private Collection<Block> _textBlocks = null;
private String[] _words;
private HashSet<String> _usedWords = new HashSet<String>();
public Draw(ArcadeManager manager)
{
@ -198,7 +202,7 @@ public class Draw extends SoloGame
if (_round != null && (_round.IsDone() || _drawers.GetPlayers(true).isEmpty() || _round.AllGuessed(_guessers.GetPlayers(true))))
{
Announce(C.cGold + C.Bold + "Round " + (_roundCount+1) + " Ended: " + C.cYellow + C.Bold + "The word was " + _round.Word + "!");
_textBlocks = UtilText.MakeText(_round.Word, _textLocation, BlockFace.NORTH, 159, (byte)15, TextAlign.CENTER);
_textBlocks = UtilText.MakeText(_round.Word, _textLocation, BlockFace.WEST, 159, (byte)15, TextAlign.CENTER);
_roundTime = System.currentTimeMillis();
_round = null;
@ -212,6 +216,7 @@ public class Draw extends SoloGame
player.setAllowFlight(false);
player.setFlying(false);
player.setFlySpeed(0.1f);
player.teleport(_guessers.GetSpawn());
}
@ -230,16 +235,23 @@ public class Draw extends SoloGame
_guessers.RemovePlayer(drawer);
_drawers.AddPlayer(drawer);
//Get Word
String word = _words[UtilMath.r(_words.length)];
while (!_usedWords.add(word))
word = _words[UtilMath.r(_words.length)];
//Create Round
_round = new DrawRound(this, drawer, _words[UtilMath.r(_words.length)]);
_round = new DrawRound(this, drawer, word);
//Prep Drawer
drawer.teleport(_drawerLocation);
drawer.setAllowFlight(true);
drawer.setFlying(true);
drawer.setFlySpeed(0.4f);
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.WOOD_SWORD, (byte)0, 1, "Paint Brush"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.WOOD_SWORD, (byte)0, 1, "Thin Paint Brush"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, "Thick Paint Brush"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BUCKET, (byte)0, 1, "Paint Bucket"));
drawer.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.TNT, (byte)0, 1, "Clear Canvas"));
@ -328,6 +340,9 @@ public class Draw extends SoloGame
if (!IsLive())
return;
if (!_lockDrawer)
return;
if (!_drawers.HasPlayer(event.getPlayer()))
return;
@ -372,6 +387,18 @@ public class Draw extends SoloGame
//Color
block.setData(_brushColor);
//Thick Brush
if (UtilGear.isMat(player.getItemInHand(), Material.IRON_SWORD))
{
for (Block other : UtilBlock.getSurrounding(block, false))
{
if (!_canvas.contains(other))
continue;
other.setData(_brushColor);
}
}
//Join Dots
if (_brushPrevious != null)
{
@ -385,16 +412,31 @@ public class Draw extends SoloGame
continue;
fixBlock.setData(_brushColor);
//Thick Brush
if (UtilGear.isMat(player.getItemInHand(), Material.IRON_SWORD))
{
for (Block other : UtilBlock.getSurrounding(fixBlock, false))
{
if (!_canvas.contains(other))
continue;
other.setData(_brushColor);
}
}
}
}
for (Player other : UtilServer.getPlayers())
other.playSound(other.getLocation(), Sound.FIZZ, 0.2f, 2f);
_lockDrawer = false;
_brushPrevious = block.getLocation().add(0.5, 0.5, 0.5);
}
}
@EventHandler
public void PaintReset(PlayerInteractEvent event)
{
@ -416,7 +458,9 @@ public class Draw extends SoloGame
Reset();
//Restore
_brushColor = color;
_lockDrawer = false;
for (Player other : UtilServer.getPlayers())
other.playSound(other.getLocation(), Sound.EXPLODE, 0.5f, 1.5f);
@ -506,6 +550,8 @@ public class Draw extends SoloGame
_textBlocks.clear();
_textBlocks = null;
}
_lockDrawer = true;
}
public void AddScore(Player player, double amount)

View File

@ -261,7 +261,7 @@ public class HideSeek extends TeamGame
player.getInventory().setItem(28, ItemStackFactory.Instance.CreateStack(Material.ARROW));
//Meower
player.getInventory().setItem(4, ItemStackFactory.Instance.CreateStack(Material.SUGAR, (byte)0, 1, C.cYellow + C.Bold + "Meow" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "+0.5 Gems"));
player.getInventory().setItem(4, ItemStackFactory.Instance.CreateStack(Material.SUGAR, (byte)0, 1, C.cYellow + C.Bold + "Meow" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "+0.25 Gems"));
//Firework
ItemStack firework = ItemStackFactory.Instance.CreateStack(Material.FIREWORK, (byte)0, 5, C.cYellow + C.Bold + "Firework" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "+2 Gems");

View File

@ -1,11 +1,14 @@
package nautilus.game.arcade.game.games.uhc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import org.bukkit.ChatColor;
import org.bukkit.Chunk;
import org.bukkit.Difficulty;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
@ -15,7 +18,9 @@ import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.CaveSpider;
import org.bukkit.entity.EnderDragon;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Ghast;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Monster;
@ -25,6 +30,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
@ -82,9 +88,6 @@ import nautilus.game.arcade.managers.GameLobbyManager;
public class UHC extends TeamGame
{
//private Objective _listHealth;
private Map _map;
private NautHashMap<String, Long> _deathTime = new NautHashMap<String, Long>();
private NautHashMap<String, Long> _rejoinTime = new NautHashMap<String, Long>();
@ -96,6 +99,13 @@ public class UHC extends TeamGame
private long _lastMinute = System.currentTimeMillis();
private boolean _soloGame = false;
private boolean _timerStarted = false;
private boolean _ended = false;
private ArrayList<Location> _portalBlock = null;
private ArrayList<Location> _portal = null;
private boolean _portalCreated = false;
private GameTeam _lastDragonDamager = null;
public UHC(ArcadeManager manager)
{
@ -140,18 +150,12 @@ public class UHC extends TeamGame
this.SoupEnabled = false;
this.IdleKick = true;
this.AutoStart = true;
this.CompassEnabled = true;
this.IdleKick = false;
this.AutoStart = false;
this.CompassEnabled = false;
CraftRecipes();
///_listHealth = this.GetScoreboard().registerNewObjective("Health", "health");
//_listHealth.setDisplaySlot(DisplaySlot.PLAYER_LIST);
_map = new Map(manager.GetPlugin());
_map.SetDefaultUrl("http://chivebox.com/img/mc/uhc.png");
//Disable Custom Mob Drops (and EXP Disable)
Manager.GetCreature().SetDisableCustomDrops(true);
@ -159,10 +163,28 @@ public class UHC extends TeamGame
Manager.GetAntiStack().SetEnabled(false);
}
@Override
public void ParseData()
{
_portalBlock = WorldData.GetDataLocs("YELLOW");
_portal = WorldData.GetDataLocs("BLACK");
//Set Portal Blocks
for (int i=0 ; i<_portalBlock.size() ; i++)
{
if (i<6)
_portalBlock.get(i).getBlock().setTypeIdAndData(Material.ENDER_PORTAL_FRAME.getId(), (byte)4, true);
else
_portalBlock.get(i).getBlock().setTypeIdAndData(Material.ENDER_PORTAL_FRAME.getId(), (byte)0, true);
}
}
@EventHandler
public void TimeUpdate(UpdateEvent event)
{
if (!_timerStarted)
return;
if (!IsLive())
return;
@ -578,8 +600,6 @@ public class UHC extends TeamGame
{
Player player = event.getPlayer();
GameTeam team = GetTeam(player);
if (team == null) return;
@ -593,7 +613,7 @@ public class UHC extends TeamGame
if (player.isDead())
return;
/* XXX
if (true)
{
//Announcement
@ -602,6 +622,7 @@ public class UHC extends TeamGame
player.damage(5000);
return;
}
*/
if (_combatTime.containsKey(player.getName()) && !UtilTime.elapsed(_combatTime.get(player.getName()), 15000))
{
@ -618,7 +639,7 @@ public class UHC extends TeamGame
GetLocationStore().put(player.getName(), player.getLocation());
//Announcement
Announce(team.GetColor() + C.Bold + player.getName() + " has disconnected! 10 minutes to reconnect.");
Announce(team.GetColor() + C.Bold + player.getName() + " has disconnected! 30 minutes to reconnect.");
}
@EventHandler
@ -685,6 +706,42 @@ public class UHC extends TeamGame
}
}
@EventHandler
public void CreatureCull(UpdateEvent event)
{
if (!InProgress())
return;
if (event.getType() != UpdateType.SLOW)
return;
HashMap<EntityType, ArrayList<Entity>> ents = new HashMap<EntityType, ArrayList<Entity>>();
for (Entity ent : WorldData.World.getEntities())
{
if (!ents.containsKey(ent.getType()))
ents.put(ent.getType(), new ArrayList<Entity>());
ents.get(ent.getType()).add(ent);
}
for (EntityType type : ents.keySet())
{
ArrayList<Entity> entList = ents.get(type);
int count = 0;
while (entList.size() > 300)
{
Entity ent = entList.remove(UtilMath.r(entList.size()));
ent.remove();
count++;
}
if (count > 0)
System.out.println("Removed " + count + " " + type);
}
}
@EventHandler
public void PlayerRejoinExpire(UpdateEvent event)
{
@ -697,7 +754,7 @@ public class UHC extends TeamGame
{
String name = rejoinIterator.next();
if (!UtilTime.elapsed(_rejoinTime.get(name), 600000))
if (!UtilTime.elapsed(_rejoinTime.get(name), 1800000))
continue;
rejoinIterator.remove();
@ -705,7 +762,7 @@ public class UHC extends TeamGame
//Get Team (By Name)
GameTeam team = _rejoinTeam.remove(name);
if (team != null)
Announce(team.GetColor() + C.Bold + name + " did not reconnent in time!");
Announce(team.GetColor() + C.Bold + name + " did not reconnect in time!");
}
}
@ -886,6 +943,14 @@ public class UHC extends TeamGame
if (event.getMessage().startsWith("/kill"))
event.setCancelled(true);
if (event.getMessage().startsWith("/uhc timer start"))
{
event.setCancelled(true);
_timerStarted = true;
Announce(event.getPlayer().getName() + " started the 20 minute timer!");
}
if (event.getMessage().startsWith("/uhc game start"))
{
this.SetCountdownForce(true);
@ -926,8 +991,6 @@ public class UHC extends TeamGame
Announce(event.getPlayer().getName() + " set time to Day and Night!");
}
}
@EventHandler
@ -1027,6 +1090,18 @@ public class UHC extends TeamGame
}
}
@EventHandler(priority = EventPriority.LOWEST)
public void clearCreeperExplode(EntityExplodeEvent event)
{
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void clearCreeperExplodeReenable(EntityExplodeEvent event)
{
event.setCancelled(false);
}
@EventHandler
public void SpecialDamage(EntityDamageEvent event)
{
@ -1066,38 +1141,6 @@ public class UHC extends TeamGame
}
}
@EventHandler
public void SpiderPoison(EntityDamageEvent event)
{
if (event.isCancelled())
return;
if (!(event.getEntity() instanceof LivingEntity))
return;
//Damager
LivingEntity damagerEnt = UtilEvent.GetDamagerEntity(event, true);
if (damagerEnt != null)
{
if (damagerEnt instanceof CaveSpider)
{
Manager.GetCondition().Factory().Poison("Cave Spider", (LivingEntity)event.getEntity(), damagerEnt, 7, 0, false, false, false);
}
}
}
@EventHandler(priority = EventPriority.LOWEST)
public void clearCreeperExplode(EntityExplodeEvent event)
{
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void clearCreeperExplodeReenable(EntityExplodeEvent event)
{
event.setCancelled(false);
}
@EventHandler
public void SpecialCloak(UpdateEvent event)
{
@ -1116,30 +1159,6 @@ public class UHC extends TeamGame
}
}
boolean hungerHurt = false;
@EventHandler
public void HungerHurt(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC)
return;
if (!InProgress())
return;
hungerHurt = !hungerHurt;
if (!hungerHurt)
return;
for (Player player : GetPlayers(true))
{
if (player.getHealth() <= 10 && player.getFoodLevel() == 0)
{
player.damage(1);
}
}
}
@EventHandler
public void TabHealth(UpdateEvent event)
{
@ -1209,7 +1228,7 @@ public class UHC extends TeamGame
if (_soloGame)
return (team.GetPlayers(true).isEmpty());
return (team.GetPlayers(true).size() < 3);
return (team.GetPlayers(true).size() < 4);
}
@Override
@ -1299,24 +1318,36 @@ public class UHC extends TeamGame
return true;
}
@Override
public void Announce(String message)
{
for (Player player : UtilServer.getPlayers())
{
UtilPlayer.message(player, message);
}
System.out.println("[Announcement] " + message);
}
@Override
public void EndCheck()
{
if (!IsLive())
return;
if (_ended)
return;
ArrayList<GameTeam> teamsAlive = new ArrayList<GameTeam>();
//Online Teams
for (GameTeam team : this.GetTeamList())
if (team.GetColor() != ChatColor.DARK_GRAY)
if (team.GetPlayers(true).size() > 0)
teamsAlive.add(team);
if (team.GetPlayers(true).size() > 0)
teamsAlive.add(team);
//Offline Player Team
for (GameTeam team : _rejoinTeam.values())
if (team.GetColor() != ChatColor.DARK_GRAY)
teamsAlive.add(team);
teamsAlive.add(team);
if (teamsAlive.size() <= 1)
{
@ -1324,21 +1355,107 @@ public class UHC extends TeamGame
if (teamsAlive.size() > 0)
AnnounceEnd(teamsAlive.get(0));
for (GameTeam team : GetTeamList())
{
if (WinnerTeam != null && team.equals(WinnerTeam))
{
for (Player player : team.GetPlayers(false))
AddGems(player, 10, "Winning Team", false);
}
for (Player player : team.GetPlayers(false))
if (player.isOnline())
AddGems(player, 10, "Participation", false);
}
//End
SetState(GameState.End);
_ended = true;
//SetState(GameState.End);
}
}
@EventHandler
public void DragonDamage(EntityDamageEvent event)
{
if (!IsLive())
return;
if (_ended)
return;
if (!(event.getEntity() instanceof EnderDragon))
return;
//Damager
LivingEntity damagerEnt = UtilEvent.GetDamagerEntity(event, true);
if (damagerEnt != null)
{
if (damagerEnt instanceof Player)
{
Player damager = (Player)damagerEnt;
GameTeam team = GetTeam(damager);
if (team != null && team.GetColor() == ChatColor.DARK_GRAY)
{
if (_lastDragonDamager == null || !_lastDragonDamager.equals(team))
{
_lastDragonDamager = team;
Announce(team.GetColor() + C.Bold + team.GetName() + " are attacking the Ender Dragon!");
}
}
}
}
}
@EventHandler
public void DragonDeath(EntityDeathEvent event)
{
if (!IsLive())
return;
if (_ended)
return;
if (_lastDragonDamager == null)
return;
AnnounceEnd(_lastDragonDamager);
_ended = true;
}
@EventHandler
public void PortalCreate(UpdateEvent event)
{
if (!InProgress())
return;
if (event.getType() != UpdateType.SEC)
return;
boolean complete = true;
for (Location loc : _portalBlock)
{
if (loc.getBlock().getType() != Material.ENDER_PORTAL_FRAME)
loc.getBlock().setType(Material.ENDER_PORTAL_FRAME);
if (loc.getBlock().getData() < 4)
complete = false;
}
if (complete)
{
if (!_portalCreated)
{
for (Player player : UtilServer.getPlayers())
player.playSound(player.getLocation(), Sound.ZOMBIE_UNFECT, 2f, 1f);
Announce(ChatColor.WHITE + C.Bold + "The portal to The End has been opened!");
}
_portalCreated = true;
for (Location loc : _portal)
loc.getBlock().setTypeIdAndData(Material.ENDER_PORTAL.getId(), (byte)0, false);
}
else
{
for (Location loc : _portal)
loc.getBlock().setType(Material.AIR);
}
}
@EventHandler
public void PortalBreak(BlockBreakEvent event)
{
if (event.getBlock().getType() == Material.ENDER_PORTAL_FRAME)
event.setCancelled(true);
}
}

View File

@ -292,8 +292,8 @@ public class GameManager implements Listener
if (game.GetTeamList().size() == 2) color = ChatColor.GREEN;
if (game.GetTeamList().size() == 3) color = ChatColor.AQUA;
if (game.GetTeamList().size() == 4) color = ChatColor.GOLD;
if (game.GetTeamList().size() == 5) color = ChatColor.DARK_BLUE;
if (game.GetTeamList().size() == 6) color = ChatColor.LIGHT_PURPLE;
if (game.GetTeamList().size() == 5) color = ChatColor.LIGHT_PURPLE;
if (game.GetTeamList().size() == 6) color = ChatColor.DARK_BLUE;
if (game.GetTeamList().size() == 7) color = ChatColor.WHITE;
if (game.GetTeamList().size() == 8) color = ChatColor.BLUE;
if (game.GetTeamList().size() == 9) color = ChatColor.DARK_GREEN;