changes to monster maze!
This commit is contained in:
parent
859a7e07d5
commit
549435224f
|
@ -49,9 +49,16 @@ public class Maze implements Listener
|
|||
private HashSet<Block> _disabledWaypoints;
|
||||
private ArrayList<Location> _borders;
|
||||
|
||||
private Location _safeZoneCenter;
|
||||
private ArrayList<Block> _safeZoneGlass = new ArrayList<>(); // game start safe zone stuff
|
||||
|
||||
private ArrayList<Location> _playerContainmentUnitLocations = new ArrayList<>(); // probably could use a longer variable name...
|
||||
|
||||
private SafePad _safePad = null;
|
||||
private SafePad _oldSafePad = null;
|
||||
|
||||
private int _zoneDecayTimer = 6;
|
||||
|
||||
private ArrayList<Player> _playersOnPad = new ArrayList<Player>();
|
||||
|
||||
private int _phaseTimer = -1;
|
||||
|
@ -59,7 +66,7 @@ public class Maze implements Listener
|
|||
|
||||
private HashMap<Entity, MazeMobWaypoint> _ents = new HashMap<Entity, MazeMobWaypoint>();
|
||||
|
||||
public Maze(MonsterMaze host, ArrayList<Location> map, ArrayList<Location> spawns, ArrayList<Location> goals)
|
||||
public Maze(MonsterMaze host, ArrayList<Location> map, ArrayList<Location> spawns, ArrayList<Location> goals, Location safeZone, ArrayList<Location> _glassBounds)
|
||||
{
|
||||
Host = host;
|
||||
|
||||
|
@ -87,6 +94,15 @@ public class Maze implements Listener
|
|||
{
|
||||
loc.getBlock().getRelative(BlockFace.DOWN).setType(Material.GOLD_BLOCK);
|
||||
}
|
||||
|
||||
|
||||
for (Location loc : _glassBounds)
|
||||
{
|
||||
_playerContainmentUnitLocations.add(loc.clone().add(0, -1, 0));
|
||||
loc.getBlock().getRelative(BlockFace.DOWN).setType(Material.STAINED_GLASS);
|
||||
loc.getBlock().getRelative(BlockFace.DOWN).setData((byte)3);
|
||||
}
|
||||
_safeZoneCenter = safeZone;
|
||||
}
|
||||
|
||||
public void update()
|
||||
|
@ -99,7 +115,7 @@ public class Maze implements Listener
|
|||
bump();
|
||||
if(_phaseTimer <= -1)
|
||||
{
|
||||
UtilTextTop.display(C.cAqua + C.Bold + "Be the first player to get to the safe pad!", Host.GetPlayers(true).toArray(new Player[Host.GetPlayers(false).size()]));
|
||||
UtilTextTop.display(C.cAqua + C.Bold + "Be the first player to get to the safe pad!", Host.GetPlayers(false).toArray(new Player[Host.GetPlayers(false).size()]));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -137,9 +153,9 @@ public class Maze implements Listener
|
|||
UtilAction.velocity(player, UtilAlg.getTrajectory(ent, player), 1, false, 0, 0.75, 1.2, true);
|
||||
|
||||
//Damage Event
|
||||
Host.Manager.GetDamage().NewDamageEvent(player, (LivingEntity)ent, null,
|
||||
/*Host.Manager.GetDamage().NewDamageEvent(player, (LivingEntity)ent, null,
|
||||
DamageCause.ENTITY_ATTACK, 6, false, false, false,
|
||||
"Monster", "Monster Attack");
|
||||
"Monster", "Monster Attack");*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -272,7 +288,17 @@ public class Maze implements Listener
|
|||
|
||||
while(spawned <= numToSpawn)
|
||||
{
|
||||
Location loc = UtilAlg.Random(_map);
|
||||
ArrayList<Location> validSpawns = new ArrayList<>(_map);
|
||||
|
||||
Iterator<Location> iter = validSpawns.iterator();
|
||||
while (iter.hasNext()) {
|
||||
Location b = iter.next();
|
||||
if(UtilMath.offset(b, _safeZoneCenter) < 7.5)
|
||||
{
|
||||
iter.remove();
|
||||
}
|
||||
}
|
||||
Location loc = UtilAlg.Random(validSpawns);
|
||||
Host.CreatureAllowOverride = true;
|
||||
Entity ent = null;
|
||||
if(Host.getMonsterType() == EntityType.ZOMBIE)
|
||||
|
@ -393,7 +419,7 @@ public class Maze implements Listener
|
|||
if(_padDecayTimer == -1) return;
|
||||
|
||||
_padDecayTimer--;
|
||||
|
||||
// 5
|
||||
if(_oldSafePad != null)
|
||||
{
|
||||
if(_padDecayTimer == 4)
|
||||
|
@ -421,6 +447,37 @@ public class Maze implements Listener
|
|||
}
|
||||
}
|
||||
|
||||
public void decrementZoneTime()
|
||||
{
|
||||
if(_zoneDecayTimer == -1) return;
|
||||
|
||||
_zoneDecayTimer--;
|
||||
|
||||
if(_safeZoneGlass.size() > 0)
|
||||
{
|
||||
if(_zoneDecayTimer == 4)
|
||||
{
|
||||
setSafeZoneColor((byte)4);
|
||||
}
|
||||
else if(_zoneDecayTimer == 3)
|
||||
{
|
||||
setSafeZoneColor((byte)1);
|
||||
}
|
||||
else if(_zoneDecayTimer == 2)
|
||||
{
|
||||
setSafeZoneColor((byte)14);
|
||||
}
|
||||
else if(_zoneDecayTimer == 1)
|
||||
{
|
||||
destroySafeZone();
|
||||
}
|
||||
}
|
||||
if(_padDecayTimer == 1)
|
||||
{
|
||||
_padDecayTimer = -1;
|
||||
}
|
||||
}
|
||||
|
||||
public void decrementPhaseTime()
|
||||
{
|
||||
if(_phaseTimer == -1) return;
|
||||
|
@ -493,6 +550,51 @@ public class Maze implements Listener
|
|||
}
|
||||
}
|
||||
|
||||
private void setSafeZoneColor(byte data)
|
||||
{
|
||||
if(_safeZoneGlass.size() <= 0) return;
|
||||
for(Block bl : _safeZoneGlass)
|
||||
{
|
||||
bl.setData(data);
|
||||
}
|
||||
}
|
||||
|
||||
private void destroySafeZone()
|
||||
{
|
||||
if(_safeZoneGlass.size() <= 0) return;
|
||||
for(Block bl : _safeZoneGlass)
|
||||
{
|
||||
bl.setType(Material.AIR);
|
||||
}
|
||||
_safeZoneGlass.clear();
|
||||
}
|
||||
|
||||
public void removePlayerContainmentUnit()
|
||||
{
|
||||
for(Location loc : _playerContainmentUnitLocations)
|
||||
{
|
||||
loc.getBlock().setType(Material.AIR);
|
||||
}
|
||||
}
|
||||
|
||||
public void createSafeZone()
|
||||
{
|
||||
System.out.println("creating safe zone");
|
||||
_safeZoneGlass = UtilBlock.getInBoundingBox(_safeZoneCenter.clone().add(5, 0, 5), _safeZoneCenter.clone().add(-5, 0, -5), false);
|
||||
Iterator<Block> iter = _safeZoneGlass.iterator();
|
||||
while (iter.hasNext()) {
|
||||
Block b = iter.next();
|
||||
if(b.getType() == Material.AIR)
|
||||
{
|
||||
b.setType(Material.STAINED_GLASS);
|
||||
b.setData((byte)5);
|
||||
}
|
||||
else iter.remove();
|
||||
}
|
||||
|
||||
// TODO bounds
|
||||
}
|
||||
|
||||
public Set<Entity> getMonsters()
|
||||
{
|
||||
return _ents.keySet();
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
package nautilus.game.arcade.game.games.monstermaze;
|
||||
|
||||
import org.bukkit.entity.Egg;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Skeleton;
|
||||
import org.bukkit.entity.Zombie;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityCombustEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
|
@ -65,14 +62,20 @@ public class MonsterMaze extends SoloGame
|
|||
if(event.GetState() == GameState.Prepare)
|
||||
{
|
||||
//if(WorldData.MapName.contains("MonsterTest")) _monsterType = EntityType.CREEPER;
|
||||
_monsterType = EntityType.SNOWMAN; // TODO map-specific monster type
|
||||
_maze = new Maze(this, WorldData.GetDataLocs("GRAY"), WorldData.GetDataLocs("YELLOW"), WorldData.GetDataLocs("RED"));
|
||||
UtilServer.getServer().getPluginManager().registerEvents(_maze, getArcadeManager().getPlugin());
|
||||
_maze.fillSpawn(135);
|
||||
} else if(event.GetState() == GameState.Live)
|
||||
}
|
||||
else if(event.GetState() == GameState.Live)
|
||||
{
|
||||
|
||||
_maze.spawnSafePad();
|
||||
_maze.removePlayerContainmentUnit();
|
||||
}
|
||||
else if(event.GetState() == GameState.Recruit)
|
||||
{
|
||||
_monsterType = EntityType.SNOWMAN; // TODO map-specific monster type
|
||||
_maze = new Maze(this, WorldData.GetDataLocs("GRAY"), WorldData.GetDataLocs("YELLOW"), WorldData.GetDataLocs("RED"), WorldData.GetDataLocs("ORANGE").get(0), WorldData.GetDataLocs("PINK"));
|
||||
|
||||
UtilServer.getServer().getPluginManager().registerEvents(_maze, getArcadeManager().getPlugin());
|
||||
_maze.createSafeZone();
|
||||
_maze.fillSpawn(200);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -92,6 +95,7 @@ public class MonsterMaze extends SoloGame
|
|||
if(!IsLive()) return;
|
||||
_maze.decrementPhaseTime();
|
||||
_maze.decrementSafePadTime();
|
||||
_maze.decrementZoneTime();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
|
Loading…
Reference in New Issue