From 8a3b531a06bcb4a2aef23739d4b36f26085360dc Mon Sep 17 00:00:00 2001
From: samczsun
Date: Sat, 21 Jan 2017 18:17:03 -0500
Subject: [PATCH] Bawk Bawk Battles rewrite
---
.../ui/page/AchievementMainPage.java | 2 +-
.../nautilus/game/arcade/ArcadeManager.java | 2 +-
.../src/nautilus/game/arcade/game/Game.java | 24 +
.../game/games/mineware/BawkBawkBattles.java | 425 +++++++-----------
.../games/mineware/challenge/Challenge.java | 105 +++--
.../mineware/challenge/TeamChallenge.java | 2 +-
.../type/ChallengeBouncingBlock.java | 2 +-
.../challenge/type/ChallengeBuildRace.java | 2 +-
.../challenge/type/ChallengeColorChange.java | 53 ++-
.../challenge/type/ChallengeEggSmash.java | 1 -
.../challenge/type/ChallengeFastFood.java | 2 +-
.../challenge/type/ChallengeLavaRun.java | 31 +-
.../challenge/type/ChallengeWaterHorror.java | 9 +-
.../games/mineware/effect/ChickenAttack.java | 7 +-
.../game/arcade/managers/GameFlagManager.java | 22 +-
15 files changed, 348 insertions(+), 341 deletions(-)
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/ui/page/AchievementMainPage.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/ui/page/AchievementMainPage.java
index 68f377459..e2825bfde 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/ui/page/AchievementMainPage.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/ui/page/AchievementMainPage.java
@@ -102,7 +102,7 @@ public class AchievementMainPage extends ShopPageBase lore, int max)
{
int achievementCount = 0;
- for (int i = 0; i < Achievement.values().length && achievementCount < max; i++)
+ for (int i = 0; i < Achievement.values().length; i++)
{
Achievement achievement = Achievement.values()[i];
if (achievement.getCategory() == category)
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java
index bf853ef6e..cd838343e 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java
@@ -899,7 +899,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
{
_specList.remove(event.getPlayer());
if (_game.GetTeam(event.getPlayer()) != null)
- _game.GetTeam(event.getPlayer()).SetPlayerState(event.getPlayer(), PlayerState.IN);
+ _game.SetPlayerState(event.getPlayer(), PlayerState.IN);
}
if (isSpectator(event.getPlayer()))
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java
index 1f0b18f71..d16299e05 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java
@@ -1161,6 +1161,25 @@ public abstract class Game extends ListenerComponent implements Lifetimed
return GetKit(player).GetName().equals(kit.GetName());
}
+ public void disqualify(Player player)
+ {
+ RemoveTeamPreference(player);
+ GetPlayerKits().remove(player);
+ GetPlayerGems().remove(player);
+
+ //Remove Team
+ GameTeam team = GetTeam(player);
+ if (team != null)
+ {
+ if (InProgress())
+ SetPlayerState(player, PlayerState.OUT);
+ else
+ team.RemovePlayer(player);
+ }
+
+ Manager.addSpectator(player, false);
+ }
+
public boolean SetPlayerState(Player player, PlayerState state)
{
GameTeam team = GetTeam(player);
@@ -1227,6 +1246,11 @@ public abstract class Game extends ListenerComponent implements Lifetimed
return false;
}
+ public boolean shouldHeal(Player player)
+ {
+ return true;
+ }
+
public ArrayList GetPlayers(boolean aliveOnly)
{
ArrayList players = new ArrayList();
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/BawkBawkBattles.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/BawkBawkBattles.java
index d027e68ac..2a6636c1b 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/BawkBawkBattles.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/BawkBawkBattles.java
@@ -5,10 +5,15 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.UUID;
-import mineplex.core.common.Pair;
+import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -42,11 +47,13 @@ import org.bukkit.scheduler.BukkitRunnable;
import com.google.common.collect.Lists;
+import mineplex.core.common.Pair;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
+import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
@@ -60,12 +67,12 @@ import mineplex.core.common.util.UtilTime;
import mineplex.core.projectile.IThrown;
import mineplex.core.projectile.ProjectileUser;
import mineplex.core.recharge.Recharge;
-import mineplex.core.teleport.event.MineplexTeleportEvent;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.condition.Condition.ConditionType;
import mineplex.minecraft.game.core.condition.events.ConditionApplyEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
+
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.GamePrepareCountdownCommence;
@@ -197,9 +204,9 @@ public class BawkBawkBattles extends TeamGame implements IThrown
private BawkBawkBattlesSettings _settings = new BawkBawkBattlesSettings();
private ChallengeList _list = new ChallengeList();
- private Map _lives = new HashMap<>();
- private List _winners = new ArrayList();
- private GameTeam _playerTeam, _chickenTeam;
+ private Map _lives = new HashMap<>();
+ private LinkedList _winners = new LinkedList<>();
+ private GameTeam _playerTeam;
private DeathEffect _deathEffect = new DeathEffect(this);
private ChickenAttack _chickenAttack;
private Location _chickenAttackCenter;
@@ -207,25 +214,27 @@ public class BawkBawkBattles extends TeamGame implements IThrown
private List _lastChallengeBlocks;
private long _delay;
+ public final Set _beingAttacked = new HashSet<>();
+
private List _countdown = Arrays.asList(
- C.cRed + C.Bold + "3",
- C.cYellow + C.Bold + "2",
- C.cGreen + C.Bold + "1",
- C.cWhite + C.Bold + "GO!");
+ C.cRed + C.Bold + "3",
+ C.cYellow + C.Bold + "2",
+ C.cGreen + C.Bold + "1",
+ C.cWhite + C.Bold + "GO!");
@SuppressWarnings("unchecked")
public BawkBawkBattles(ArcadeManager manager)
{
super(manager,
- GameType.BawkBawkBattles,
- new Kit[] { new KitBawksFood(manager) },
- new String[] {
- "Follow Bawk Bawk's instructions in chat.",
- "Complete a task first or be the last one to stay alive.",
- "If you fail a challenge, you lose one life.",
- "If you run out of lives, chickens will attack you.",
- "Last player with lives wins.",
- });
+ GameType.BawkBawkBattles,
+ new Kit[]{new KitBawksFood(manager)},
+ new String[]{
+ "Follow Bawk Bawk's instructions in chat.",
+ "Complete a task first or be the last one to stay alive.",
+ "If you fail a challenge, you lose one life.",
+ "If you run out of lives, chickens will attack you.",
+ "Last player with lives wins.",
+ });
DamagePvP = false;
DamagePvE = false;
@@ -243,57 +252,54 @@ public class BawkBawkBattles extends TeamGame implements IThrown
DeathMessages = false;
FixSpawnFacing = false;
- TeleportsDisqualify = false;
- GiveClock = false;
-
Manager.GetCreature().SetDisableCustomDrops(true);
populateChallenges();
registerStatTrackers(
- new BouncingShadowTracker(this),
- new DragonKingTracker(this),
- new EliteArcherTracker(this),
- new MilkManTracker(this),
- new PinataMasterTracker(this),
- new PixelNinjaTracker(this),
- new SpeedyBuildersTracker(this),
- new SurfUpTracker(this),
- new TagMasterTracker(this),
- new VeteranTracker(this));
+ new BouncingShadowTracker(this),
+ new DragonKingTracker(this),
+ new EliteArcherTracker(this),
+ new MilkManTracker(this),
+ new PinataMasterTracker(this),
+ new PixelNinjaTracker(this),
+ new SpeedyBuildersTracker(this),
+ new SurfUpTracker(this),
+ new TagMasterTracker(this),
+ new VeteranTracker(this));
}
public void populateChallenges()
{
_list.add(
- new ChallengeAnvilDance(this),
- new ChallengeArrowRampage(this),
- new ChallengeBlockLobbers(this),
- new ChallengeBouncingBlock(this),
- new ChallengeBuildRace(this),
- new ChallengeColorChange(this),
- new ChallengeChickenShooting(this),
- new ChallengeDeadlyTnt(this),
- new ChallengeDiamondHunt(this),
- new ChallengeEggSmash(this),
- new ChallengeFallingBlocks(this),
- new ChallengeFastFood(this),
- new ChallengeWaterHorror(this),
- new ChallengeKangarooJump(this),
- new ChallengeKingOfTheLadder(this),
- new ChallengeLavaRun(this),
- new ChallengeMilkACow(this),
- new ChallengeOreRun(this),
- new ChallengeMinecartDance(this),
- new ChallengeMiniOneInTheQuiver(this),
- new ChallengePickASide(this),
- new ChallengePunchThePig(this),
- new ChallengeRedLightGreenLight(this),
- new ChallengeReverseTag(this),
- new ChallengeRushPush(this),
- new ChallengeSmashOff(this),
- new ChallengeTreasureDigger(this),
- new ChallengeWaveCrush(this));
+ new ChallengeAnvilDance(this),
+ new ChallengeArrowRampage(this),
+ new ChallengeBlockLobbers(this),
+ new ChallengeBouncingBlock(this),
+ new ChallengeBuildRace(this),
+ new ChallengeColorChange(this),
+ new ChallengeChickenShooting(this),
+ new ChallengeDeadlyTnt(this),
+ new ChallengeDiamondHunt(this),
+ new ChallengeEggSmash(this),
+ new ChallengeFallingBlocks(this),
+ new ChallengeFastFood(this),
+ new ChallengeWaterHorror(this),
+ new ChallengeKangarooJump(this),
+ new ChallengeKingOfTheLadder(this),
+ new ChallengeLavaRun(this),
+ new ChallengeMilkACow(this),
+ new ChallengeOreRun(this),
+ new ChallengeMinecartDance(this),
+ new ChallengeMiniOneInTheQuiver(this),
+ new ChallengePickASide(this),
+ new ChallengePunchThePig(this),
+ new ChallengeRedLightGreenLight(this),
+ new ChallengeReverseTag(this),
+ new ChallengeRushPush(this),
+ new ChallengeSmashOff(this),
+ new ChallengeTreasureDigger(this),
+ new ChallengeWaveCrush(this));
/*
* Removed:
@@ -313,40 +319,17 @@ public class BawkBawkBattles extends TeamGame implements IThrown
_chickenAttackCenter = WorldData.GetDataLocs("WHITE").get(0);
}
- /*
- * Team creation
- */
-
@EventHandler(priority = EventPriority.HIGHEST)
public void createTeams(GameStateChangeEvent event)
{
if (event.GetState() == GameState.Recruit)
{
- createPlayerTeam();
- }
- else if (event.GetState() == GameState.Live)
- {
- createChickenTeam();
+ GetTeamList().clear();
+ _playerTeam = new GameTeam(this, "Players", ChatColor.YELLOW, new ArrayList<>());
+ AddTeam(_playerTeam);
}
}
- private void createPlayerTeam()
- {
- _playerTeam = new GameTeam(this, "Players", ChatColor.YELLOW, new ArrayList<>());
- AddTeam(_playerTeam);
- }
-
- private void createChickenTeam()
- {
- _chickenTeam = new GameTeam(this, "Chickens", ChatColor.GRAY, _playerTeam.GetSpawns());
- _chickenTeam.SetVisible(false);
- AddTeam(_chickenTeam);
- }
-
- /*
- * Preparing for start
- */
-
@EventHandler(priority = EventPriority.HIGH)
public void prepare(GameStateChangeEvent event)
{
@@ -370,7 +353,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown
{
for (Player player : GetPlayers(true))
{
- _lives.put(player, MAX_LIVES);
+ _lives.put(player.getUniqueId(), MAX_LIVES);
}
}
@@ -439,7 +422,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown
_challenge.getData().setSpawns(selected);
_playerTeam.SetSpawns(selected);
- SpectatorSpawn = _challenge.getCenter().add(0, SPECTATOR_SPAWN_HEIGHT, 0);
+ SpectatorSpawn = _challenge.getCenter().add(0.5, SPECTATOR_SPAWN_HEIGHT, 0.5);
return selected;
}
@@ -450,13 +433,14 @@ public class BawkBawkBattles extends TeamGame implements IThrown
resetPlayers();
addEffectsToPlayers();
teleportSpectatorsToSpawn();
+ clearInventories();
}
private void resetPlayers()
{
- for (Player player : GetPlayers(false))
+ for (Player player : GetPlayers(true))
{
- if (_lives.get(player) > 0)
+ if (_lives.containsKey(player.getUniqueId()) && _lives.get(player.getUniqueId()) > 0)
{
Manager.Clear(player);
Scoreboard.setPlayerTeam(player, _playerTeam);
@@ -468,7 +452,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown
{
for (Player player : GetPlayers(false))
{
- if (!IsAlive(player))
+ if (!IsAlive(player) && !_beingAttacked.contains(player.getUniqueId()))
{
player.teleport(GetSpectatorLocation());
}
@@ -543,7 +527,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown
if (!IsAlive(player))
return;
- if (!getPlayersAlive().contains(player))
+ if (!IsAlive(player))
return;
if (!PrepareFreeze)
@@ -663,6 +647,14 @@ public class BawkBawkBattles extends TeamGame implements IThrown
}
}
+ private void clearInventories()
+ {
+ for (Player player : GetPlayers(true))
+ {
+ UtilInv.Clear(player);
+ }
+ }
+
private void addEffectsToPlayers()
{
for (Player player : GetPlayers(true))
@@ -885,36 +877,33 @@ public class BawkBawkBattles extends TeamGame implements IThrown
if (getPlayersWithRemainingLives() <= 1)
{
- if (getPlayersAlive().size() > 0)
+ if (GetPlayers(true).size() > 0)
{
- Player additional = getPlayersAlive().get(0);
- _winners.add(0, additional);
+ Player additional = GetPlayers(true).get(0);
+ _winners.addFirst(additional);
}
- if (_winners.size() > 2)
- {
- Collections.swap(_winners, SEMIFINAL_INDEX, FINAL_INDEX);
- }
+ List actualWinners = _winners.subList(0, Math.min(_winners.size(), 3));
- if (_winners.size() >= 1)
+ if (actualWinners.size() >= 1)
{
- AddGems(_winners.get(FIRST_WINNER_INDEX), FIRST_PLACE_GEM_REWARD, "First Place", false, false);
+ AddGems(actualWinners.get(FIRST_WINNER_INDEX), FIRST_PLACE_GEM_REWARD, "First Place", false, false);
- if (_winners.size() >= 2)
+ if (actualWinners.size() >= 2)
{
- AddGems(_winners.get(SECOND_WINNER_INDEX), SECOND_PLACE_GEM_REWARD, "Second Place", false, false);
+ AddGems(actualWinners.get(SECOND_WINNER_INDEX), SECOND_PLACE_GEM_REWARD, "Second Place", false, false);
- if (_winners.size() >= 3)
+ if (actualWinners.size() >= 3)
{
- AddGems(_winners.get(THIRD_WINNER_INDEX), THIRD_PLACE_GEM_REWARD, "Third Place", false, false);
+ AddGems(actualWinners.get(THIRD_WINNER_INDEX), THIRD_PLACE_GEM_REWARD, "Third Place", false, false);
}
}
}
- for (Player player : super.GetPlayers(false))
+ for (Player player : GetPlayers(false))
AddGems(player, PARTICIPATION_GEMS, "Participation", false, false);
- AnnounceEnd(_winners);
+ AnnounceEnd(actualWinners);
SetState(GameState.End);
}
}
@@ -937,19 +926,16 @@ public class BawkBawkBattles extends TeamGame implements IThrown
private boolean canStartCrumbling()
{
int lost = _challenge.getData().getLostPlayers().size();
- int current = getPlayersAlive().size();
+ int current = GetPlayers(true).size();
return !_settings.isCrumbling() && lost > current / CRUMBLE_DIVIDER;
}
private void announceCrumbling()
{
- for (Player player : UtilServer.getPlayers())
+ for (Player player : GetPlayers(true))
{
- if (!_chickenTeam.HasPlayer(player))
- {
- UtilPlayer.message(player, F.main("Game", "The map has started to crumble."));
- }
+ UtilPlayer.message(player, F.main("Game", "The map has started to crumble."));
}
}
@@ -1006,13 +992,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown
if (event.getType() != UpdateType.SEC)
return;
- if (_chickenTeam == null)
- return;
-
- if (_chickenTeam.GetSize() == 0)
- return;
-
- for (Player player : _chickenTeam.GetPlayers(true))
+ _beingAttacked.stream().map(Bukkit::getPlayer).filter(Objects::nonNull).forEach(player ->
{
Chicken chicken = UtilMath.randomElement(_chickenAttack.getChickens());
Material feetType = chicken.getLocation().getBlock().getType();
@@ -1022,18 +1002,18 @@ public class BawkBawkBattles extends TeamGame implements IThrown
UtilEnt.CreatureLook(chicken, player);
player.playSound(chicken.getLocation(), Sound.BAT_TAKEOFF, CHICKEN_ATTACK_SOUND_VOLUME, CHICKEN_ATTACK_SOUND_PITCH);
UtilAction.velocity(
- chicken,
- UtilAlg.getTrajectory2d(chicken, player),
- UtilAlg.calculateVelocity(chicken.getLocation().toVector(), player.getLocation().toVector(), CHICKEN_VELOCITY_HEIGHT).length() + CHICKEN_VELOCITY_ADD,
- false,
- 0,
- CHICKEN_VELOCITY_HEIGHT,
- CHICKEN_VELOCITY_HEIGHT + 1,
- false);
+ chicken,
+ UtilAlg.getTrajectory2d(chicken, player),
+ UtilAlg.calculateVelocity(chicken.getLocation().toVector(), player.getLocation().toVector(), CHICKEN_VELOCITY_HEIGHT).length() + CHICKEN_VELOCITY_ADD,
+ false,
+ 0,
+ CHICKEN_VELOCITY_HEIGHT,
+ CHICKEN_VELOCITY_HEIGHT + 1,
+ false);
Manager.GetProjectile().AddThrow(chicken, null, this, -1, true, false, false, true, CHICKEN_ATTACK_HITBOX_GROW);
}
- }
+ });
}
@EventHandler
@@ -1068,12 +1048,39 @@ public class BawkBawkBattles extends TeamGame implements IThrown
Player player = event.getEntity();
- if (!_chickenTeam.HasPlayer(player))
+ if (IsAlive(player))
return;
_chickenAttack.kill(player, true);
}
+ @Override
+ public void disqualify(Player player)
+ {
+ RemoveTeamPreference(player);
+ GetPlayerKits().remove(player);
+ GetPlayerGems().remove(player);
+
+ //Remove Team
+ GameTeam team = GetTeam(player);
+ if (team != null)
+ {
+ if (InProgress())
+ {
+ getPlayerTeam().SetPlayerState(player, GameTeam.PlayerState.OUT);
+
+ int alive = getPlayersWithRemainingLives();
+
+ if (alive > Challenge.CHICKEN_ATTACK_CRITERIA)
+ getChickenAttack().start(player);
+ else
+ getChickenAttack().kill(player, true);
+ }
+ else
+ team.RemovePlayer(player);
+ }
+ }
+
@EventHandler
public void blockChickenAttackMemberDamage(EntityDamageEvent event)
{
@@ -1107,8 +1114,14 @@ public class BawkBawkBattles extends TeamGame implements IThrown
for (Player player : GetPlayers(true))
{
- for (Player other : _chickenTeam.GetPlayers(false))
+ for (Player other : GetPlayers(false))
{
+ if (IsAlive(other))
+ continue;
+
+ if (_beingAttacked.contains(other.getUniqueId()))
+ continue;
+
if (player.equals(other))
continue;
@@ -1139,7 +1152,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown
Player player = event.getPlayer();
- if (_challenge.getData().isDone(player) && !_chickenTeam.HasPlayer(player.getName(), false))
+ if (_challenge.getData().isDone(player) && IsAlive(player))
{
if (event.getTo().getY() <= 0)
{
@@ -1199,7 +1212,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown
{
Player player = event.getPlayer();
- _lives.remove(player);
+ _lives.remove(player.getUniqueId());
_winners.remove(player);
}
@@ -1219,19 +1232,16 @@ public class BawkBawkBattles extends TeamGame implements IThrown
// }
// }
+ @Override
+ public boolean shouldHeal(Player player)
+ {
+ return !_beingAttacked.contains(player.getUniqueId());
+ }
+
/*
* Miscellaneous
*/
- @EventHandler
- public void blockTeleport(MineplexTeleportEvent event)
- {
- if (!IsLive())
- return;
-
- event.setCancelled(true);
- }
-
@EventHandler
public void blockDeathEffectHeadModification(PlayerArmorStandManipulateEvent event)
{
@@ -1349,6 +1359,9 @@ public class BawkBawkBattles extends TeamGame implements IThrown
if (event.getType() != UpdateType.FAST)
return;
+ if (!IsLive())
+ return;
+
Scoreboard.reset();
if (getPlayersWithRemainingLives() >= GENERIC_SCOREBOARD_PLAYER_COUNT)
@@ -1430,7 +1443,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown
{
Scoreboard.writeNewLine();
- Scoreboard.writeGroup(super.GetPlayers(true), player ->
+ Scoreboard.writeGroup(GetPlayers(true), player ->
{
int lives = lives(player);
String state = definePlayerState(player);
@@ -1477,74 +1490,6 @@ public class BawkBawkBattles extends TeamGame implements IThrown
return "";
}
- // @EventHandler
- // public void debugCommands(PlayerCommandPreprocessEvent event)
- // {
- // Player player = event.getPlayer();
- // String message = event.getMessage();
- //
- // if (Manager.GetClients().hasRank(player, Rank.SNR_MODERATOR))
- // {
- // if (message.startsWith("/restrict"))
- // {
- // String[] pieces = message.split(" ");
- //
- // if (pieces.length > 1)
- // {
- // String challenge = F.combine(pieces, 1, null, false).trim();
- //
- // if (_list.restrict(challenge))
- // {
- // UtilPlayer.message(player, F.main("Game", "Restricted to " + F.elem(challenge) + " challenge."));
- // }
- // else
- // {
- // UtilPlayer.message(player, F.main("Game", "Could not find any challenge by that name."));
- // }
- // }
- // else
- // {
- // UtilPlayer.message(player, F.main("Game", "All challenge restrictions were cleared."));
- // _list.unrestrict();
- // }
- //
- // event.setCancelled(true);
- // }
- // else if (message.startsWith("/skip"))
- // {
- // if (IsLive())
- // {
- // endCurrentChallenge();
- //
- // Announce(C.cAqua + C.Bold + player.getName() + " skipped this challenge.");
- // }
- // else
- // {
- // UtilPlayer.message(player, F.main("Game", "You cannot skip a challenge if the game is not started."));
- // }
- //
- // event.setCancelled(true);
- // }
- // else if (message.startsWith("/lose"))
- // {
- // if (IsLive() && _challenge != null && IsAlive(player))
- // {
- // setLives(player, 0);
- // _challenge.getData().addLostPlayer(player);
- // _deathEffect.playDeath(player, player.getLocation());
- // GetScoreboard().ResetScore(player.getName());
- // _chickenAttack.start(player);
- // }
- // else
- // {
- // UtilPlayer.message(player, F.main("Game", "You cannot lose at this time."));
- // }
- //
- // event.setCancelled(true);
- // }
- // }
- // }
-
/*
* Helper methods
*/
@@ -1562,10 +1507,12 @@ public class BawkBawkBattles extends TeamGame implements IThrown
public int lives(Player player)
{
- if (!_lives.containsKey(player))
+ if (!_lives.containsKey(player.getUniqueId()))
+ {
return 0;
+ }
- return _lives.get(player);
+ return _lives.get(player.getUniqueId());
}
/*
@@ -1574,7 +1521,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown
public void setLives(Player player, int amount)
{
- _lives.put(player, amount);
+ _lives.put(player.getUniqueId(), amount);
}
/*
@@ -1586,11 +1533,6 @@ public class BawkBawkBattles extends TeamGame implements IThrown
return _playerTeam;
}
- public GameTeam getChickenTeam()
- {
- return _chickenTeam;
- }
-
public Challenge getCurrentChallenge()
{
return _challenge;
@@ -1602,14 +1544,17 @@ public class BawkBawkBattles extends TeamGame implements IThrown
}
@Override
- public List getWinners()
+ public LinkedList getWinners()
{
return _winners;
}
- public Map getLives()
+ @Override
+ public List getLosers()
{
- return _lives;
+ List players = new ArrayList<>(UtilServer.getPlayersCollection());
+ players.removeAll(getWinners());
+ return players;
}
public BawkBawkBattlesSettings getSettings()
@@ -1636,40 +1581,6 @@ public class BawkBawkBattles extends TeamGame implements IThrown
* Player related getter methods
*/
- /**
- * Returns the list of players contained on the player's team.
- *
- * @param aliveOnly Whether or not to select all players.
- */
- @Override
- public ArrayList GetPlayers(boolean aliveOnly)
- {
- if (_playerTeam != null)
- return _playerTeam.GetPlayers(aliveOnly);
- else
- return super.GetPlayers(aliveOnly);
- }
-
- /**
- * Returns the list of players that are alive.
- *
- * Players are considered to be alive after they are teleported to challenge spawn locations.
- */
- public ArrayList getPlayersAlive()
- {
- ArrayList list = new ArrayList();
-
- for (Player player : GetPlayers(true))
- {
- if (!UtilPlayer.isSpectator(player))
- {
- list.add(player);
- }
- }
-
- return list;
- }
-
/**
* Returns the amount of players with more than one life.
*/
@@ -1677,7 +1588,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown
{
int amount = 0;
- for (Player player : _lives.keySet())
+ for (Player player : GetPlayers(true))
{
if (lives(player) > 0)
{
@@ -1709,7 +1620,7 @@ public class BawkBawkBattles extends TeamGame implements IThrown
{
Player player = (Player) target;
- if (_chickenTeam.HasPlayer(player) && IsAlive(player))
+ if (_beingAttacked.contains(player.getUniqueId()))
{
player.playSound(player.getLocation(), Sound.CHICKEN_HURT, CHICKEN_HIT_PLAYER_SOUND_VOLUME, CHICKEN_HIT_PLAYER_SOUND_PITCH);
player.damage(CHICKEN_HIT_PLAYER_DAMAGE);
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/Challenge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/Challenge.java
index c6fdc6a31..50f25aa42 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/Challenge.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/Challenge.java
@@ -4,6 +4,13 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
+import net.minecraft.server.v1_8_R3.BlockPosition;
+import net.minecraft.server.v1_8_R3.Blocks;
+import net.minecraft.server.v1_8_R3.ChunkSection;
+import net.minecraft.server.v1_8_R3.EnumSkyBlock;
+import net.minecraft.server.v1_8_R3.IBlockData;
+import net.minecraft.server.v1_8_R3.WorldServer;
+
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Effect;
@@ -12,8 +19,10 @@ import org.bukkit.FireworkEffect.Type;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
+import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
+import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
@@ -34,6 +43,7 @@ import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilInv;
+import mineplex.core.common.util.UtilItem;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
@@ -49,6 +59,8 @@ import mineplex.core.projectile.ProjectileUser;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.condition.Condition.ConditionType;
+
+import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.game.games.mineware.BawkBawkBattles;
import nautilus.game.arcade.game.games.mineware.events.ChallengeEndEvent;
import nautilus.game.arcade.game.games.mineware.events.ChallengeStartEvent;
@@ -61,7 +73,7 @@ import nautilus.game.arcade.world.WorldData;
* All challenges should trigger any functionality inside
* {@link #createSpawns()}, {@link #createMap()}, {@link #onStart()} and {@link #onEnd()}.
*
- *
+ *
* Additionally, {@link #onTimerFinish()} and {@link #onCollide(LivingEntity, Block, ProjectileUser)} can be overrided.
*/
public abstract class Challenge implements Listener
@@ -79,8 +91,8 @@ public abstract class Challenge implements Listener
private static final int BORDER_MAX_Z = 100;
private static final int COMPLETE_COUNT_DIVIDER = 2;
- private static final int WINNER_ADD_CRITERIA = 3; // players
- private static final int CHICKEN_ATTACK_CRITERIA = 2; // players
+ public static final int WINNER_ADD_CRITERIA = 3; // players
+ public static final int CHICKEN_ATTACK_CRITERIA = 2; // players
private static final int CHALLENGE_CLOAK_DURATION = 7777;
private static final int COMPLETION_GEMS = 3;
@@ -146,7 +158,7 @@ public abstract class Challenge implements Listener
/**
* The list of spawn locations where players will be teleported.
- *
+ *
* @return ArrayList
*/
public abstract ArrayList createSpawns();
@@ -174,7 +186,7 @@ public abstract class Challenge implements Listener
{
if (firstRun)
{
- ArrayList players = Host.GetPlayers(false);
+ ArrayList players = Host.GetPlayers(true);
for (int i = 0; i < players.size(); i++)
{
@@ -192,7 +204,7 @@ public abstract class Challenge implements Listener
}
else
{
- Host.getPlayerTeam().SpawnTeleport(false);
+ Host.getPlayerTeam().SpawnTeleport(true);
}
}
@@ -305,7 +317,7 @@ public abstract class Challenge implements Listener
@EventHandler(priority = EventPriority.MONITOR)
public void death(PlayerDeathEvent event)
{
- if (!Host.IsLive() || Host.getChickenTeam().HasPlayer(event.getEntity()))
+ if (!Host.IsLive() || !Host.IsAlive(event.getEntity()))
return;
Player player = event.getEntity();
@@ -319,17 +331,21 @@ public abstract class Challenge implements Listener
private void handleDeath(Player player)
{
- int alive = Host.getPlayersWithRemainingLives();
int lives = loseLife(player);
- if (lives <= 0 && alive <= WINNER_ADD_CRITERIA)
+ if (lives <= 0)
{
- Host.getWinners().add(player);
- }
+ Host.getPlayerTeam().SetPlayerState(player, GameTeam.PlayerState.OUT);
- if (lives <= 0 && alive > CHICKEN_ATTACK_CRITERIA)
- {
- Host.getChickenAttack().start(player);
+ int alive = Host.getPlayersWithRemainingLives();
+ if (Host.lives(player) <= 0)
+ {
+ Host.getWinners().addFirst(player);
+ if (alive > Challenge.CHICKEN_ATTACK_CRITERIA)
+ Host.getChickenAttack().start(player);
+ else
+ Host.getChickenAttack().kill(player, true);
+ }
}
else
{
@@ -355,6 +371,8 @@ public abstract class Challenge implements Listener
UtilPlayer.message(player, F.main("Game", C.cRed + "You failed to complete the task."));
Host.showLivesLeft(player);
Host.Manager.addSpectator(player, true);
+ if (UtilItem.matchesMaterial(player.getInventory().getItem(8), Material.WATCH))
+ player.getInventory().setItem(8, null);
Host.Manager.GetCondition().Factory().Cloak("Challenge Death", player, player, CHALLENGE_CLOAK_DURATION, true, true);
}
@@ -400,7 +418,7 @@ public abstract class Challenge implements Listener
for (Player player : players)
{
- if (!Host.getChickenTeam().HasPlayer(player) && Host.lives(player) > 0)
+ if (!Host.IsAlive(player) && Host.lives(player) > 0)
{
UtilTextBottom.display(C.Bold + "Next challenge will begin shortly.", player);
}
@@ -523,30 +541,14 @@ public abstract class Challenge implements Listener
setCompleted(player, false);
}
- protected void setLost(Player player, boolean cloak)
+ protected void setLost(Player player)
{
if (Data.isDone(player))
return;
Data.addLostPlayer(player);
- loseLife(player);
- if (cloak)
- {
- cloak(player, false);
- }
-
- UtilPlayer.message(player, F.main("Game", C.cRed + "You failed to complete the task."));
- Host.showLivesLeft(player);
- player.playSound(player.getLocation(), Sound.NOTE_BASS, LOST_SOUND_VOLUME, LOST_SOUND_PITCH);
-
- UtilPlayer.clearPotionEffects(player);
- UtilInv.Clear(player);
- }
-
- protected void setLost(Player player)
- {
- setLost(player, false);
+ handleDeath(player);
}
private void cloak(Player player, boolean completed)
@@ -578,6 +580,39 @@ public abstract class Challenge implements Listener
UtilBlock.setQuick(block.getWorld(), block.getX(), block.getY(), block.getZ(), type.getId(), data);
}
+ public void setBlockReallyQuicklyAndDangerously(Block block, Material type, byte data)
+ {
+ World world = block.getWorld();
+ int x = block.getLocation().getBlockX();
+ int y = block.getLocation().getBlockY();
+ int z = block.getLocation().getBlockZ();
+ int i = x & 15;
+ int j = y;
+ int k = z & 15;
+ int cx = block.getX() >> 4;
+ int cz = block.getZ() >> 4;
+ if (!world.isChunkLoaded(cx, cz))
+ {
+ world.loadChunk(cx, cz, true);
+ }
+
+ WorldServer nmsWorld = ((CraftWorld) world).getHandle();
+
+ net.minecraft.server.v1_8_R3.Chunk chunk = nmsWorld.getChunkAt(x >> 4, z >> 4);
+ BlockPosition pos = new BlockPosition(x, y, z);
+ IBlockData ibd = net.minecraft.server.v1_8_R3.Block.getById(type.getId()).fromLegacyData(data);
+ ChunkSection chunksection = chunk.getSections()[y >> 4];
+ if (chunksection == null)
+ {
+ if (block != Blocks.AIR)
+ {
+ chunksection = chunk.getSections()[y >> 4] = new ChunkSection(y >> 4 << 4, !nmsWorld.worldProvider.o());
+ }
+ }
+ chunksection.setType(i, j & 15, k, ibd);
+ nmsWorld.notify(pos);
+ }
+
public void setBlock(Block block, Material type)
{
setBlock(block, type, (byte) 0);
@@ -819,7 +854,7 @@ public abstract class Challenge implements Listener
public ArrayList getPlayersAlive()
{
- return Host.getPlayersAlive();
+ return Host.GetPlayers(true);
}
public ArrayList getPlayersIn(boolean ignoreCompleted)
@@ -864,7 +899,7 @@ public abstract class Challenge implements Listener
public int getArenaSize(int minBlocks)
{
int size = (int) (minBlocks + Math.ceil(Host.getPlayersWithRemainingLives() / ARENA_SIZE_DIVIDER));
- return size > ARENA_SIZE_LIMIT ? ARENA_SIZE_LIMIT : size;
+ return Math.min(size, ARENA_SIZE_LIMIT);
}
public BawkBawkBattles getHost()
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/TeamChallenge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/TeamChallenge.java
index 7c7ca7665..d8b33577c 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/TeamChallenge.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/TeamChallenge.java
@@ -140,7 +140,7 @@ public abstract class TeamChallenge extends Challenge
*/
protected void autoSelectTeams()
{
- ArrayList players = Host.GetPlayers(false);
+ ArrayList players = Host.GetPlayers(true);
Collections.shuffle(players);
int size = 0;
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBouncingBlock.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBouncingBlock.java
index dbe302bbc..0b463033a 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBouncingBlock.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBouncingBlock.java
@@ -74,7 +74,7 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker
"Bouncing Block",
"Jump and punch floating wool blocks.",
"Avoid landing on red wool.",
- "First to " + SCORE_GOAL + " wins!");
+ "Get to " + SCORE_GOAL + " to win!");
Settings.setUseMapHeight();
}
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBuildRace.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBuildRace.java
index b2829b1b3..64fd9ed59 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBuildRace.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeBuildRace.java
@@ -57,7 +57,7 @@ public class ChallengeBuildRace extends Challenge implements LogicTracker
ChallengeType.FirstComplete,
"Build Race",
"Your inventory is filled with blocks.",
- "Place them all in the ground!");
+ "Place them all on the ground!");
Settings.setUseMapHeight();
}
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeColorChange.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeColorChange.java
index 67f62bdcf..31509c80b 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeColorChange.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeColorChange.java
@@ -13,6 +13,8 @@ import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.potion.PotionEffect;
+import org.bukkit.potion.PotionEffectType;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTextBottom;
@@ -32,8 +34,9 @@ public class ChallengeColorChange extends Challenge
private static final int MAP_HEIGHT = 1;
private static final long TIME_DELAY = 5000;
- private static final int TIME_DELAY_DECREMENT_RATE = 100;
- private static final int RESET_DELAY = 4000;
+ private static final int RESET_DELAY = 3750;
+ private static final int TIME_DELAY_DECREMENT_RATE = 600;
+ private static final int TIME_DELAY_MIN = 1500;
private static final int PLATFORM_MULTIPLIER = 2;
private static final int PLATFORM_SHIFT = 2;
@@ -96,6 +99,12 @@ public class ChallengeColorChange extends Challenge
_stageDelay = System.currentTimeMillis() + _modifiedTimeDelay;
_currentColor = UtilMath.randomElement(_colors);
+ for (Player player : Host.GetPlayers(false))
+ {
+ PotionEffect nightVision = new PotionEffect(PotionEffectType.NIGHT_VISION, 100000, 1, true, false);
+ player.addPotionEffect(nightVision);
+ }
+
fillItem(new ItemStack(Material.STAINED_CLAY, 1, (short) _currentColor));
}
@@ -105,6 +114,11 @@ public class ChallengeColorChange extends Challenge
_isFalling = false;
_lastSound = 0;
_lastGeneratedPlatforms.clear();
+
+ for (Player player : Host.GetPlayers(false))
+ {
+ player.removePotionEffect(PotionEffectType.NIGHT_VISION);
+ }
}
@EventHandler
@@ -124,22 +138,26 @@ public class ChallengeColorChange extends Challenge
if (_isFalling)
{
+ removeAllPlatforms();
playFallSound();
_isFalling = false;
- _modifiedTimeDelay -= TIME_DELAY_DECREMENT_RATE;
- _stageDelay = System.currentTimeMillis() + _modifiedTimeDelay;
_currentColor = UtilMath.randomElement(_colors);
createMap();
addCurrentColorToInventory();
+
+ _modifiedTimeDelay -= TIME_DELAY_DECREMENT_RATE;
+ _modifiedTimeDelay = Math.max(_modifiedTimeDelay, TIME_DELAY_MIN);
+ _stageDelay = System.currentTimeMillis() + _modifiedTimeDelay;
}
else
{
_isFalling = true;
- _stageDelay = System.currentTimeMillis() + RESET_DELAY;
removeDifferentColorPlatforms();
+
+ _stageDelay = System.currentTimeMillis() + RESET_DELAY;
}
}
else if (!_isFalling)
@@ -210,7 +228,7 @@ public class ChallengeColorChange extends Challenge
for (int z = 0; z <= 1; z++)
{
Block block = getCenter().getBlock().getRelative(platformX + x, 0, platformZ + z);
- setBlock(block, Material.STAINED_CLAY, color);
+ setBlockReallyQuicklyAndDangerously(block, Material.STAINED_CLAY, color);
addBlock(block);
}
}
@@ -242,7 +260,28 @@ public class ChallengeColorChange extends Challenge
if (block.getData() != _currentColor)
{
- resetBlock(block);
+ setBlockReallyQuicklyAndDangerously(block, Material.AIR, (byte) 0);
+ }
+ }
+ }
+
+ }
+ }
+
+ @SuppressWarnings("deprecation")
+ private void removeAllPlatforms()
+ {
+ for (Entry platform : _lastGeneratedPlatforms)
+ {
+ for (int x = 0; x <= 1; x++)
+ {
+ for (int z = 0; z <= 1; z++)
+ {
+ Block block = getCenter().getBlock().getRelative(platform.getKey() + x, 0, platform.getValue() + z);
+
+ if (block.getType() != Material.AIR)
+ {
+ setBlockReallyQuicklyAndDangerously(block, Material.AIR, (byte) 0);
}
}
}
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeEggSmash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeEggSmash.java
index bf137e70a..603dcfe76 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeEggSmash.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeEggSmash.java
@@ -121,7 +121,6 @@ public class ChallengeEggSmash extends Challenge implements NumberTracker
remove(EntityType.FALLING_BLOCK);
}
- @SuppressWarnings("deprecation")
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event)
{
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeFastFood.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeFastFood.java
index 221ca144d..9f42ac4e1 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeFastFood.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeFastFood.java
@@ -74,7 +74,7 @@ public class ChallengeFastFood extends Challenge
ChallengeType.FirstComplete,
"Fast Food",
"Your inventory is full of food.",
- "Punch to throw it in the ground.");
+ "Punch to throw it on the ground.");
Settings.setUseMapHeight();
}
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeLavaRun.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeLavaRun.java
index 49037ba6f..10adc6e26 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeLavaRun.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeLavaRun.java
@@ -14,6 +14,8 @@ import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockFromToEvent;
+import org.bukkit.potion.PotionEffect;
+import org.bukkit.potion.PotionEffectType;
import mineplex.core.common.util.UtilMath;
import mineplex.core.disguise.disguises.DisguiseMagmaCube;
@@ -103,6 +105,11 @@ public class ChallengeLavaRun extends Challenge
_disappearingBlocks = DISSAPEARING_BLOCKS;
createLava();
disguisePlayers();
+ for (Player player : Host.GetPlayers(false))
+ {
+ PotionEffect nightVision = new PotionEffect(PotionEffectType.NIGHT_VISION, 100000, 1, true, false);
+ player.addPotionEffect(nightVision);
+ }
}
@Override
@@ -123,6 +130,11 @@ public class ChallengeLavaRun extends Challenge
Host.Manager.GetDisguise().undisguise(player);
}
}
+
+ for (Player player : Host.GetPlayers(false))
+ {
+ player.removePotionEffect(PotionEffectType.NIGHT_VISION);
+ }
}
@EventHandler
@@ -139,7 +151,7 @@ public class ChallengeLavaRun extends Challenge
if (_shouldMoveObsidian)
{
- resetBlock(_obsidian);
+ setBlockReallyQuicklyAndDangerously(_obsidian, Material.AIR, (byte) 0);
generatePlatform();
_obsidian = createObsidianBlock();
blockBreakEffect(_obsidian, false);
@@ -209,7 +221,7 @@ public class ChallengeLavaRun extends Challenge
for (int z = -getArenaSize(); z <= getArenaSize(); z++)
{
Block block = getCenter().getBlock().getRelative(x, MAP_HEIGHT, z);
- setBlock(block, Material.GLASS);
+ setBlockReallyQuicklyAndDangerously(block, Material.GLASS, (byte) 0);
_platform.add(block);
addBlock(block);
}
@@ -227,7 +239,7 @@ public class ChallengeLavaRun extends Challenge
for (int y = 0; y < MAP_HEIGHT; y++)
{
Block block = getCenter().getBlock().getRelative(x, y, z);
- setBlock(block, Material.STATIONARY_LAVA);
+ setBlockReallyQuicklyAndDangerously(block, Material.STATIONARY_LAVA, (byte) 0);
addBlock(block);
}
}
@@ -237,7 +249,7 @@ public class ChallengeLavaRun extends Challenge
private Block createObsidianBlock()
{
Block block = getCenter().add(UtilMath.r(_arenaStartSize), MAP_HEIGHT, UtilMath.r(_arenaStartSize)).getBlock();
- setBlock(block, Material.OBSIDIAN);
+ setBlockReallyQuicklyAndDangerously(block, Material.OBSIDIAN, (byte) 0);
return block;
}
@@ -283,14 +295,7 @@ public class ChallengeLavaRun extends Challenge
distance.put(part, part.getLocation().add(DISTANCE_XZ_ADD, 0, DISTANCE_XZ_ADD).distance(_obsidian.getLocation()));
}
- Collections.sort(_platform, new Comparator()
- {
- @Override
- public int compare(Block o1, Block o2)
- {
- return distance.get(o2).compareTo(distance.get(o1));
- }
- });
+ _platform.sort((o1, o2) -> distance.get(o2).compareTo(distance.get(o1)));
for (int i = 0; i < Math.min(_disappearingBlocks, _platform.size()); i++)
{
@@ -299,7 +304,7 @@ public class ChallengeLavaRun extends Challenge
if (!block.equals(_obsidian)) // We do not want to remove the obsidian block.
{
_platform.remove(0);
- resetBlock(block);
+ setBlockReallyQuicklyAndDangerously(block, Material.AIR, (byte) 0);
}
}
}
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeWaterHorror.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeWaterHorror.java
index e6d5609bd..6647a83bc 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeWaterHorror.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeWaterHorror.java
@@ -386,10 +386,17 @@ public class ChallengeWaterHorror extends Challenge
TNTPrimed explosive = dropsite.getWorld().spawn(dropsite, TNTPrimed.class);
explosive.setFuseTicks(TNT_EXPLODE_AFTER * TICK_MULTIPLIER);
+ double str = UtilAlg.calculateVelocity(dropsite.toVector(), target.toVector(), TNT_VELOCITY_HEIGHT).length() + TNT_VELOCITY_POWER_MIN;
+
+ if (((dropsite.getX() - target.getX()) * (dropsite.getX() - target.getX()) + (dropsite.getY() - target.getY()) * (dropsite.getY() - target.getY())) < 16)
+ {
+ str = 0;
+ }
+
UtilAction.velocity(
explosive,
UtilAlg.getTrajectory2d(dropsite, target),
- UtilAlg.calculateVelocity(dropsite.toVector(), target.toVector(), TNT_VELOCITY_HEIGHT).length() + TNT_VELOCITY_POWER_MIN,
+ str,
true,
0,
TNT_VELOCITY_HEIGHT,
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/effect/ChickenAttack.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/effect/ChickenAttack.java
index 7599ab638..91cf2d583 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/effect/ChickenAttack.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/effect/ChickenAttack.java
@@ -70,8 +70,7 @@ public class ChickenAttack
public void start(Player player)
{
- _host.getPlayerTeam().RemovePlayer(player);
- _host.getChickenTeam().AddPlayer(player, true);
+ _host._beingAttacked.add(player.getUniqueId());
UtilInv.Clear(player);
_host.Manager.Clear(player);
@@ -96,7 +95,7 @@ public class ChickenAttack
@Override
public void run()
{
- if (_host.IsLive() && _host.getChickenTeam().HasPlayer(player) && _host.IsAlive(player))
+ if (_host.IsLive() && _host._beingAttacked.contains(player.getUniqueId()))
{
UtilPlayer.message(player, F.main("Game", "You have been moved to spectators."));
kill(player, false);
@@ -112,6 +111,7 @@ public class ChickenAttack
public void kill(Player player, boolean inform)
{
_host.Manager.Clear(player);
+ _host._beingAttacked.remove(player.getUniqueId());
if (inform)
{
@@ -123,7 +123,6 @@ public class ChickenAttack
@Override
public void run()
{
- _host.SetPlayerState(player, PlayerState.OUT);
DisguiseChicken disguise = new DisguiseChicken(player);
disguise.setBaby();
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java
index 44746a8db..b7a2119d0 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java
@@ -857,7 +857,7 @@ public class GameFlagManager implements Listener
if (team != null)
{
if (game.InProgress())
- team.SetPlayerState(event.getPlayer(), PlayerState.OUT);
+ game.SetPlayerState(event.getPlayer(), PlayerState.OUT);
else
team.RemovePlayer(event.getPlayer());
}
@@ -896,7 +896,7 @@ public class GameFlagManager implements Listener
//Not Playing
for (Player player : UtilServer.getPlayers())
{
- if (game == null || game.GetState() == GameState.Recruit || !game.IsAlive(player))
+ if (game == null || game.GetState() == GameState.Recruit || (!game.IsAlive(player) && game.shouldHeal(player)))
{
player.setMaxHealth(20);
player.setHealth(20);
@@ -1033,21 +1033,9 @@ public class GameFlagManager implements Listener
return;
//Remove Kit
- game.RemoveTeamPreference(event.getPlayer());
- game.GetPlayerKits().remove(event.getPlayer());
- game.GetPlayerGems().remove(event.getPlayer());
-
- //Remove Team
- GameTeam team = game.GetTeam(event.getPlayer());
- if (team != null)
- {
- if (game.InProgress())
- team.SetPlayerState(event.getPlayer(), PlayerState.OUT);
- else
- team.RemovePlayer(event.getPlayer());
- }
-
- Manager.addSpectator(event.getPlayer(), false);
+ game.disqualify(event.getPlayer());
+
+ event.setCancelled(true);
}
@EventHandler