More CC stuff
This commit is contained in:
parent
faf0ebd1ef
commit
f00b774056
@ -32,6 +32,7 @@ import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.explosion.ExplosionEvent;
|
||||
import mineplex.core.packethandler.IPacketHandler;
|
||||
import mineplex.core.packethandler.PacketInfo;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
@ -52,7 +53,7 @@ public class ChristmasCommon extends SoloGame
|
||||
{
|
||||
|
||||
private static final int BARRIER_BREAK_SQUARED = 400;
|
||||
private static final int MAX_FALL_DISTANCE = 20;
|
||||
private static final int MIN_Y = 50;
|
||||
|
||||
protected final List<Section> _sections;
|
||||
private Section _currentSection;
|
||||
@ -187,11 +188,17 @@ public class ChristmasCommon extends SoloGame
|
||||
|
||||
UtilServer.RegisterEvents(_currentSection);
|
||||
_currentSection.start();
|
||||
onNextSection(_currentSection);
|
||||
|
||||
getSleigh().SetTarget(_currentSection.getSleighTarget());
|
||||
}
|
||||
}
|
||||
|
||||
public void onNextSection(Section section)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private Section getNext()
|
||||
{
|
||||
return _sections.isEmpty() ? null : _sections.remove(0);
|
||||
@ -269,13 +276,23 @@ public class ChristmasCommon extends SoloGame
|
||||
|
||||
if (event.GetCause() == DamageCause.FALL)
|
||||
{
|
||||
if (event.GetDamageeEntity().getFallDistance() > MAX_FALL_DISTANCE)
|
||||
event.SetCancelled("Fall Damage");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateDeath(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SEC || !IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : GetPlayers(true))
|
||||
{
|
||||
if (player.getLocation().getY() < MIN_Y)
|
||||
{
|
||||
event.AddMod("Fall Damage", 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
event.SetCancelled("Fall Damage");
|
||||
Manager.GetDamage().NewDamageEvent(player, null, null, DamageCause.CUSTOM, 100, false, true, true, GetName(), "Falling");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -370,9 +387,15 @@ public class ChristmasCommon extends SoloGame
|
||||
event.setDroppedExp(0);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void explosion(ExplosionEvent event)
|
||||
{
|
||||
event.GetBlocks().clear();
|
||||
}
|
||||
|
||||
public void sendSantaMessage(String message, ChristmasNewAudio audio)
|
||||
{
|
||||
GetPlayers(true).forEach(player -> sendSantaMessage(player, message, audio));
|
||||
GetPlayers(false).forEach(player -> sendSantaMessage(player, message, audio));
|
||||
}
|
||||
|
||||
public void sendSantaMessage(Player player, String message, ChristmasNewAudio audio)
|
||||
|
@ -13,8 +13,10 @@ import nautilus.game.arcade.GameType;
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.games.christmas.ChristmasCommon;
|
||||
import nautilus.game.arcade.game.games.christmas.kits.KitPlayer;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.five.Section5;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.four.Section4;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.one.Section1;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.six.Section6;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.three.Section3;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.two.Section2;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
@ -46,10 +48,12 @@ public class ChristmasNew extends ChristmasCommon
|
||||
{
|
||||
new KitPlayer(manager)
|
||||
}, DESCRIPTION);
|
||||
|
||||
WorldTimeSet = 4000;
|
||||
}
|
||||
|
||||
// Take the parse at the purple bridge
|
||||
// /parse600 129 87 88 137 165 14 110 179
|
||||
// /parse600 129 88 137 165 14 110 179 21 22 121
|
||||
@Override
|
||||
public void ParseData()
|
||||
{
|
||||
@ -64,7 +68,9 @@ public class ChristmasNew extends ChristmasCommon
|
||||
_sections.add(new Section1(this, targets.remove(0), presents.remove(0), presents.remove(0)));
|
||||
_sections.add(new Section2(this, targets.remove(0), presents.remove(0), presents.remove(0)));
|
||||
_sections.add(new Section3(this, targets.remove(0), presents.remove(0)));
|
||||
_sections.add(new Section4(this, targets.remove(0), presents.remove(0)));
|
||||
_sections.add(new Section4(this, targets.remove(0), presents.remove(0), presents.remove(0)));
|
||||
_sections.add(new Section5(this, targets.remove(0), presents.remove(0), presents.remove(0)));
|
||||
_sections.add(new Section6(this, targets.remove(0), presents.remove(0)));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
@ -22,7 +22,7 @@ public abstract class SectionChallenge extends ListenerComponent implements Sect
|
||||
protected final WorldData _worldData;
|
||||
|
||||
private final Present _present;
|
||||
private final Section _section;
|
||||
protected final Section _section;
|
||||
|
||||
protected final List<Entity> _entities;
|
||||
|
||||
|
@ -0,0 +1,128 @@
|
||||
package nautilus.game.arcade.game.games.christmasnew.section.five;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import mineplex.core.common.util.MapUtil;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
|
||||
import nautilus.game.arcade.game.games.christmasnew.ChristmasNew;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.Section;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.SectionChallenge;
|
||||
|
||||
public class Section5 extends Section
|
||||
{
|
||||
|
||||
private static final byte[] COLOURS = { 14, 1, 4, 5, 3, 9, 11, 10, 6 };
|
||||
|
||||
private final List<Location> _bridgeBlocks;
|
||||
private final Set<FallingBlock> _fallingBlocks;
|
||||
private final int _solidifyAt;
|
||||
|
||||
private int _colourIndex;
|
||||
|
||||
public Section5(ChristmasNew host, Location sleighTarget, Location... presents)
|
||||
{
|
||||
super(host, sleighTarget);
|
||||
|
||||
_bridgeBlocks = _worldData.GetDataLocs("PURPLE");
|
||||
_fallingBlocks = new HashSet<>();
|
||||
_solidifyAt = _bridgeBlocks.get(0).getBlockY();
|
||||
|
||||
registerChallenges(
|
||||
new SnowmenKong(host, presents[1], this)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRegister()
|
||||
{
|
||||
AtomicInteger lowestZ = new AtomicInteger(Integer.MAX_VALUE);
|
||||
|
||||
for (Location location : _bridgeBlocks)
|
||||
{
|
||||
if (lowestZ.get() > location.getBlockZ())
|
||||
{
|
||||
lowestZ.set(location.getBlockZ());
|
||||
}
|
||||
}
|
||||
|
||||
_host.getArcadeManager().runSyncTimer(new BukkitRunnable()
|
||||
{
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if (++_colourIndex == COLOURS.length)
|
||||
{
|
||||
_colourIndex = 0;
|
||||
}
|
||||
|
||||
byte colour = COLOURS[_colourIndex];
|
||||
int z = lowestZ.getAndIncrement();
|
||||
|
||||
_bridgeBlocks.removeIf(location ->
|
||||
{
|
||||
if (location.getBlockZ() == z)
|
||||
{
|
||||
FallingBlock fallingBlock = location.getWorld().spawnFallingBlock(location.add(0, 8, 0), Material.WOOL, colour);
|
||||
fallingBlock.setDropItem(false);
|
||||
fallingBlock.setHurtEntities(false);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
if (_bridgeBlocks.isEmpty())
|
||||
{
|
||||
cancel();
|
||||
}
|
||||
}
|
||||
}, 10, 3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUnregister()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateFallingBlocks(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_fallingBlocks.removeIf(block ->
|
||||
{
|
||||
Location location = block.getLocation();
|
||||
|
||||
if (location.getBlockY() <= _solidifyAt)
|
||||
{
|
||||
MapUtil.QuickChangeBlockAt(location, block.getMaterial(), block.getBlockData());
|
||||
|
||||
if (Math.random() > 0.8)
|
||||
{
|
||||
location.getWorld().playEffect(location, Effect.STEP_SOUND, block.getMaterial(), block.getBlockData());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package nautilus.game.arcade.game.games.christmasnew.section.five;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
import nautilus.game.arcade.game.games.christmasnew.ChristmasNew;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.Section;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.SectionChallenge;
|
||||
|
||||
class SnowmenKong extends SectionChallenge
|
||||
{
|
||||
|
||||
SnowmenKong(ChristmasNew host, Location present, Section section)
|
||||
{
|
||||
super(host, present, section);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPresentCollect()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRegister()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUnregister()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package nautilus.game.arcade.game.games.christmasnew.section.one;
|
||||
package nautilus.game.arcade.game.games.christmasnew.section.five;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -15,31 +15,42 @@ import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.MapUtil;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.hologram.Hologram;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
|
||||
import nautilus.game.arcade.game.games.christmasnew.ChristmasNew;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.Section;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.SectionChallenge;
|
||||
|
||||
class TreeParkour extends SectionChallenge
|
||||
class SwitchParkour extends SectionChallenge
|
||||
{
|
||||
|
||||
private final List<Location> _black;
|
||||
private final List<Location> _white;
|
||||
|
||||
private boolean _blackSolid;
|
||||
private boolean _removeTick;
|
||||
|
||||
private final Location _checkpointTrigger;
|
||||
private final Hologram _checkpointHologram;
|
||||
private final List<Location> _checkpoint;
|
||||
|
||||
private boolean _hasCheckpointed;
|
||||
|
||||
TreeParkour(ChristmasNew host, Location present, Section section)
|
||||
SwitchParkour(ChristmasNew host, Location present, Section section)
|
||||
{
|
||||
super(host, present, section);
|
||||
|
||||
_black = _worldData.GetDataLocs("BLACK");
|
||||
_white = _worldData.GetDataLocs("WHITE");
|
||||
|
||||
_checkpointTrigger = _worldData.GetCustomLocs(String.valueOf(Material.LAPIS_BLOCK.getId())).get(0).getBlock().getLocation();
|
||||
_checkpointHologram = new Hologram(host.getArcadeManager().getHologramManager(), _checkpointTrigger.clone().add(0.5, 1, 0.5), C.cGoldB + "Checkpoint")
|
||||
.setInteraction((player, clickType) -> activateCheckpoint());
|
||||
_checkpoint = _worldData.GetCustomLocs(String.valueOf(Material.LAPIS_ORE.getId()));
|
||||
_checkpoint.forEach(location -> MapUtil.QuickChangeBlockAt(location, Material.AIR));
|
||||
|
||||
MapUtil.QuickChangeBlockAt(_checkpointTrigger, Material.LEVER, (byte) 4);
|
||||
MapUtil.QuickChangeBlockAt(_checkpointTrigger, Material.LEVER, (byte) 3);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -60,6 +71,42 @@ class TreeParkour extends SectionChallenge
|
||||
_checkpointHologram.stop();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateSolids(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SLOW)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_removeTick)
|
||||
{
|
||||
if (_blackSolid)
|
||||
{
|
||||
_white.forEach(location -> MapUtil.QuickChangeBlockAt(location, Material.AIR));
|
||||
}
|
||||
else
|
||||
{
|
||||
_black.forEach(location -> MapUtil.QuickChangeBlockAt(location, Material.AIR));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_blackSolid)
|
||||
{
|
||||
_white.forEach(location -> MapUtil.QuickChangeBlockAt(location, Material.WOOL, (byte) 14));
|
||||
}
|
||||
else
|
||||
{
|
||||
_black.forEach(location -> MapUtil.QuickChangeBlockAt(location, Material.WOOL, (byte) 13));
|
||||
}
|
||||
|
||||
_blackSolid = !_blackSolid;
|
||||
}
|
||||
|
||||
_removeTick = !_removeTick;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void checkpointInteract(PlayerInteractEvent event)
|
||||
{
|
||||
@ -106,7 +153,7 @@ class TreeParkour extends SectionChallenge
|
||||
if (location.getY() > y)
|
||||
{
|
||||
location.getWorld().playSound(location, Sound.PISTON_RETRACT, 1, 0.6F);
|
||||
MapUtil.QuickChangeBlockAt(location, Material.WOOD_STAIRS, (byte) 1);
|
||||
MapUtil.QuickChangeBlockAt(location, Material.COBBLESTONE_STAIRS, (byte) 1);
|
||||
return true;
|
||||
}
|
||||
|
@ -0,0 +1,184 @@
|
||||
package nautilus.game.arcade.game.games.christmasnew.section.four;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Blaze;
|
||||
import org.bukkit.entity.Creature;
|
||||
import org.bukkit.entity.Creeper;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Golem;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Monster;
|
||||
import org.bukkit.entity.Skeleton;
|
||||
import org.bukkit.entity.Zombie;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
|
||||
import nautilus.game.arcade.game.games.christmasnew.ChristmasNew;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.Section;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.SectionChallenge;
|
||||
|
||||
class MobDefense extends SectionChallenge
|
||||
{
|
||||
|
||||
private static final int GENERATOR_HEALTH = 100;
|
||||
private static final long WAVE_TIME = TimeUnit.SECONDS.toMillis(30);
|
||||
private static final int WAVES = 4;
|
||||
private static final int GENERATOR_RANGE_SQUARED = 36;
|
||||
|
||||
private final List<Location> _mobSpawns;
|
||||
private final Location _generator;
|
||||
|
||||
private int _generatorHealth;
|
||||
private long _start;
|
||||
private long _lastWave;
|
||||
private int _wave;
|
||||
|
||||
MobDefense(ChristmasNew host, Location present, Section section, List<Location> mobSpawns, Location generator)
|
||||
{
|
||||
super(host, present, section);
|
||||
|
||||
_mobSpawns = mobSpawns;
|
||||
_generator = generator;
|
||||
_generatorHealth = GENERATOR_HEALTH;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPresentCollect()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRegister()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUnregister()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
boolean isComplete()
|
||||
{
|
||||
return _wave == WAVES;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateMobs(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SLOW || _wave == WAVES)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_start == 0)
|
||||
{
|
||||
if (UtilMath.offsetSquared(_host.getSleigh().GetLocation(), _section.getSleighTarget()) < 36)
|
||||
{
|
||||
_start = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilTime.elapsed(_lastWave, WAVE_TIME))
|
||||
{
|
||||
_lastWave = System.currentTimeMillis();
|
||||
|
||||
_wave++;
|
||||
_host.sendSantaMessage("Wave: " + _wave, null);
|
||||
}
|
||||
|
||||
int zombies = 0, skeletons = 0, creepers = 0, blazes = 0, golems = 0;
|
||||
|
||||
switch (_wave)
|
||||
{
|
||||
case 1:
|
||||
zombies = 1;
|
||||
break;
|
||||
case 2:
|
||||
zombies = 2;
|
||||
skeletons = 1;
|
||||
break;
|
||||
case 3:
|
||||
zombies = 1;
|
||||
creepers = 2;
|
||||
break;
|
||||
case 4:
|
||||
zombies = 2;
|
||||
blazes = 1;
|
||||
|
||||
if (Math.random() < 0.2)
|
||||
{
|
||||
golems = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
spawnMob(Zombie.class, zombies);
|
||||
spawnMob(Skeleton.class, skeletons);
|
||||
spawnMob(Creeper.class, creepers);
|
||||
spawnMob(Blaze.class, blazes);
|
||||
spawnMob(Golem.class, golems);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateTracking(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.FASTER)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Entity entity : _entities)
|
||||
{
|
||||
if (!(entity instanceof Monster))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Creature creature = (Creature) entity;
|
||||
LivingEntity target = creature.getTarget();
|
||||
Location targetLocation;
|
||||
|
||||
if (target == null)
|
||||
{
|
||||
targetLocation = _generator;
|
||||
}
|
||||
else if (_generatorHealth > 0)
|
||||
{
|
||||
targetLocation = target.getLocation();
|
||||
}
|
||||
else
|
||||
{
|
||||
targetLocation = _host.getSleigh().GetLocation();
|
||||
}
|
||||
|
||||
if (UtilMath.offsetSquared(creature.getLocation(), _generator) < GENERATOR_RANGE_SQUARED)
|
||||
{
|
||||
_generatorHealth--;
|
||||
}
|
||||
|
||||
UtilEnt.CreatureMove(creature, targetLocation, 1.2F);
|
||||
}
|
||||
}
|
||||
|
||||
private void spawnMob(Class<? extends Entity> clazz, int amount)
|
||||
{
|
||||
for (int i = 0; i < amount; i++)
|
||||
{
|
||||
spawn(UtilAlg.Random(_mobSpawns), clazz);
|
||||
}
|
||||
}
|
||||
}
|
@ -2,9 +2,10 @@ package nautilus.game.arcade.game.games.christmasnew.section.four;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
import mineplex.core.lifetimes.Component;
|
||||
|
||||
import nautilus.game.arcade.game.games.christmasnew.ChristmasNew;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.Section;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.SectionChallenge;
|
||||
|
||||
public class Section4 extends Section
|
||||
{
|
||||
@ -13,26 +14,10 @@ public class Section4 extends Section
|
||||
{
|
||||
super(host, sleighTarget);
|
||||
|
||||
registerChallenges(new SectionChallenge(host, presents[0], this)
|
||||
{
|
||||
@Override
|
||||
public void onPresentCollect()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRegister()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUnregister()
|
||||
{
|
||||
|
||||
}
|
||||
});
|
||||
registerChallenges(
|
||||
new MobDefense(host, presents[0], this, _worldData.GetDataLocs("SILVER"), _worldData.GetCustomLocs("GEN LEFT").get(0)),
|
||||
new MobDefense(host, presents[1], this, _worldData.GetDataLocs("GRAY"), _worldData.GetCustomLocs("GEN RIGHT").get(0))
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -46,4 +31,23 @@ public class Section4 extends Section
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isComplete()
|
||||
{
|
||||
for (Component component : _components)
|
||||
{
|
||||
if (component instanceof MobDefense)
|
||||
{
|
||||
boolean complete = ((MobDefense) component).isComplete();
|
||||
|
||||
if (!complete)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return super.isComplete();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,80 @@
|
||||
package nautilus.game.arcade.game.games.christmasnew.section.six;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import mineplex.core.common.util.MapUtil;
|
||||
|
||||
import nautilus.game.arcade.game.games.christmasnew.ChristmasNew;
|
||||
import nautilus.game.arcade.game.games.christmasnew.section.Section;
|
||||
|
||||
public class Section6 extends Section
|
||||
{
|
||||
|
||||
private static final int GATE_OPEN_DELAY = 200;
|
||||
|
||||
private final List<Location> _gate;
|
||||
|
||||
public Section6(ChristmasNew host, Location sleighTarget, Location... presents)
|
||||
{
|
||||
super(host, sleighTarget);
|
||||
|
||||
_gate = _worldData.GetCustomLocs(String.valueOf(Material.ENDER_STONE.getId()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRegister()
|
||||
{
|
||||
AtomicInteger lowestY = new AtomicInteger(Integer.MAX_VALUE);
|
||||
|
||||
for (Location location : _gate)
|
||||
{
|
||||
if (lowestY.get() > location.getBlockY())
|
||||
{
|
||||
lowestY.set(location.getBlockY());
|
||||
}
|
||||
}
|
||||
|
||||
_host.getArcadeManager().runSyncTimer(new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
int y = lowestY.getAndIncrement();
|
||||
|
||||
_gate.removeIf(location ->
|
||||
{
|
||||
if (location.getBlockY() == y)
|
||||
{
|
||||
MapUtil.QuickChangeBlockAt(location, Material.AIR);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
if (_gate.isEmpty())
|
||||
{
|
||||
cancel();
|
||||
}
|
||||
else
|
||||
{
|
||||
Location location = _gate.get(0);
|
||||
|
||||
location.getWorld().playSound(location, Sound.PISTON_RETRACT, 1.5F, 0.8F);
|
||||
}
|
||||
}
|
||||
}, GATE_OPEN_DELAY, 4);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUnregister()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user