Refactoring challenge selection and updating.
This commit is contained in:
parent
0e1a14a0c3
commit
1f22883c13
|
@ -1 +1 @@
|
||||||
[[{"location":"C:\\@Thanos\\Documents\\Minecraft\\Mineplex\\projects\\Mineplex\\Plugins\\Nautilus.Game.Arcade","type":"PROJECT","hints":{"PROJECT_NAME":"Nautilus.Game.Arcade"}},"ABSENT"],[{"location":"C:\\Program Files\\Java\\jre1.8.0_51","type":"JRE","hints":{}},"jre:jre:1.8.0"],[{"location":"C:\\@Thanos\\Documents\\Minecraft\\Mineplex\\projects\\Mineplex\\Plugins\\Libraries\\craftbukkit.jar","type":"JAR","hints":{}},"ABSENT"]]
|
[[{"location":"C:\\@Thanos\\Documents\\Minecraft\\Mineplex\\projects\\Mineplex\\Plugins\\Libraries\\craftbukkit.jar","type":"JAR","hints":{}},"ABSENT"],[{"location":"C:\\@Thanos\\Documents\\Minecraft\\Mineplex\\projects\\Mineplex\\Plugins\\Nautilus.Game.Arcade","type":"PROJECT","hints":{"PROJECT_NAME":"Nautilus.Game.Arcade"}},"ABSENT"],[{"location":"C:\\@Thanos\\Documents\\Minecraft\\Mineplex\\projects\\Mineplex\\Plugins\\Mineplex.Core.Common","type":"PROJECT","hints":{"PROJECT_NAME":"Mineplex.Core.Common"}},"ABSENT"]]
|
|
@ -75,8 +75,8 @@ org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
|
||||||
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
|
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
|
||||||
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
|
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
|
||||||
org.eclipse.jdt.core.formatter.compact_else_if=true
|
org.eclipse.jdt.core.formatter.compact_else_if=true
|
||||||
org.eclipse.jdt.core.formatter.continuation_indentation=2
|
org.eclipse.jdt.core.formatter.continuation_indentation=1
|
||||||
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
|
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=1
|
||||||
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
|
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
|
||||||
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
|
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
|
||||||
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
|
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
|
||||||
|
|
|
@ -145,7 +145,7 @@ public abstract class Challenge implements Listener
|
||||||
_places = (int) Math.ceil(getChallengers().size() / 2D);
|
_places = (int) Math.ceil(getChallengers().size() / 2D);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean finish()
|
public boolean canFinish()
|
||||||
{
|
{
|
||||||
boolean maxTimeReached = UtilTime.elapsed(_startTime, _duration);
|
boolean maxTimeReached = UtilTime.elapsed(_startTime, _duration);
|
||||||
ArrayList<Player> players = getChallengers();
|
ArrayList<Player> players = getChallengers();
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package nautilus.game.arcade.game.games.mineware;
|
package nautilus.game.arcade.game.games.mineware;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -130,7 +131,7 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
private HashMap<Player, Integer> _lives = new HashMap<Player, Integer>();
|
private HashMap<Player, Integer> _lives = new HashMap<Player, Integer>();
|
||||||
|
|
||||||
private boolean _crumbling = false;
|
private boolean _crumbling = false;
|
||||||
private boolean _waitingChallenge = true;
|
private boolean _waiting = true;
|
||||||
private boolean _messagesSent = false;
|
private boolean _messagesSent = false;
|
||||||
private boolean _sendingMessages = false;
|
private boolean _sendingMessages = false;
|
||||||
private boolean _challengeStarted = false;
|
private boolean _challengeStarted = false;
|
||||||
|
@ -142,14 +143,14 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
public MineWare(ArcadeManager manager)
|
public MineWare(ArcadeManager manager)
|
||||||
{
|
{
|
||||||
super(manager,
|
super(manager,
|
||||||
GameType.MineWare,
|
GameType.MineWare,
|
||||||
new Kit[] { new KitBawksFood(manager) },
|
new Kit[] { new KitBawksFood(manager) },
|
||||||
new String[] {
|
new String[] {
|
||||||
"Follow the orders given in chat!",
|
"Follow the orders given in chat!",
|
||||||
"First half to follow it win the round.",
|
"First half to follow it win the round.",
|
||||||
"Other players lose one life.",
|
"Other players lose one life.",
|
||||||
"Last player with lives wins!"
|
"Last player with lives wins!"
|
||||||
});
|
});
|
||||||
|
|
||||||
DamageSelf = false;
|
DamageSelf = false;
|
||||||
DamageTeamSelf = true;
|
DamageTeamSelf = true;
|
||||||
|
@ -172,13 +173,13 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
populateChallenges();
|
populateChallenges();
|
||||||
|
|
||||||
registerStatTrackers(
|
registerStatTrackers(
|
||||||
new MinewareVeteranTracker(this),
|
new MinewareVeteranTracker(this),
|
||||||
new MinewareSurfUpTracker(this),
|
new MinewareSurfUpTracker(this),
|
||||||
new MinewareLauraCraftTracker(this),
|
new MinewareLauraCraftTracker(this),
|
||||||
new MinewareMilkManTracker(this),
|
new MinewareMilkManTracker(this),
|
||||||
new MinewarePinataMasterTracker(this),
|
new MinewarePinataMasterTracker(this),
|
||||||
new MinewareTagMasterTracker(this),
|
new MinewareTagMasterTracker(this),
|
||||||
new MinewareKangarooAtHeart(this));
|
new MinewareKangarooAtHeart(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void populateChallenges()
|
public void populateChallenges()
|
||||||
|
@ -248,42 +249,48 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
{
|
{
|
||||||
for (int i = 0; i < _challenges.size() * 4; i++)
|
for (int i = 0; i < _challenges.size() * 4; i++)
|
||||||
{
|
{
|
||||||
try
|
if (_challengesCopy.isEmpty())
|
||||||
|
_challengesCopy.addAll(_challenges);
|
||||||
|
|
||||||
|
Challenge challenge = getChallengeInstance();
|
||||||
|
|
||||||
|
if (getChallengers().size() >= challenge.getMinPlayers())
|
||||||
{
|
{
|
||||||
if (_challengesCopy.isEmpty())
|
if (getChallengers().size() >= challenge.getMaxPlayers())
|
||||||
_challengesCopy.addAll(_challenges);
|
continue;
|
||||||
|
|
||||||
Challenge challenge = UtilMath.randomElement(_challengesCopy).getConstructor(MineWare.class)
|
if (challenge.isTeamBased())
|
||||||
.newInstance(this);
|
if (!(getChallengers().size() % 2 == 0))
|
||||||
|
|
||||||
if (getChallengers().size() >= challenge.getMinPlayers())
|
|
||||||
{
|
|
||||||
if (getChallengers().size() >= challenge.getMaxPlayers())
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (challenge.isTeamBased())
|
_challengesCopy.remove(challenge.getClass());
|
||||||
if (!(getChallengers().size() % 2 == 0))
|
return challenge;
|
||||||
continue;
|
|
||||||
|
|
||||||
_challengesCopy.remove(challenge.getClass());
|
|
||||||
return challenge;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
else
|
||||||
{
|
{
|
||||||
System.out.println("There was a problem loading a new challenge.");
|
continue;
|
||||||
System.out.println("Error: " + e.getMessage());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
private Challenge getChallengeInstance()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return UtilMath.randomElement(_challengesCopy).getConstructor(MineWare.class).newInstance(this);
|
||||||
|
}
|
||||||
|
catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
|
||||||
|
| SecurityException e)
|
||||||
|
{
|
||||||
|
System.out.println("There was a problem loading a new challenge.");
|
||||||
|
System.out.println("Error: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onChallengeUpdate(UpdateEvent event)
|
public void onChallengeUpdate(UpdateEvent event)
|
||||||
{
|
{
|
||||||
|
@ -305,50 +312,20 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
if (!UtilTime.elapsed(_challengeTime, 1500))
|
if (!UtilTime.elapsed(_challengeTime, 1500))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (Player player : GetPlayers(false))
|
resetDeadPlayers();
|
||||||
if (_lives.containsKey(player) && _lives.get(player) > 0)
|
|
||||||
Manager.Clear(player);
|
|
||||||
|
|
||||||
_challenge = selectChallenge();
|
_challenge = selectChallenge();
|
||||||
|
|
||||||
if (_challenge == null)
|
keepSearchingIfNull(_challenge);
|
||||||
{
|
|
||||||
UtilServer.broadcast(F.main(GetName(),
|
|
||||||
"No suitable challenge, " + _challengesCopy.size() + " challenges remaining."));
|
|
||||||
|
|
||||||
_challengesCopy.clear();
|
resetLastChallengeMap();
|
||||||
_challengesCopy.addAll(_challenges);
|
|
||||||
_challenge = selectChallenge();
|
|
||||||
|
|
||||||
if (_challenge == null)
|
|
||||||
{
|
|
||||||
SetState(GameState.Dead);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Block block : _lastOrderBlocks)
|
|
||||||
{
|
|
||||||
if (block.getState() instanceof InventoryHolder)
|
|
||||||
{
|
|
||||||
InventoryHolder holder = (InventoryHolder) block.getState();
|
|
||||||
holder.getInventory().clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
block.setTypeIdAndData(Material.AIR.getId(), (byte) 0, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// if (_currentCrumble == true)
|
|
||||||
|
|
||||||
_crumbling = false;
|
_crumbling = false;
|
||||||
_deathEffect.removeSpawnedEntities();
|
_deathEffect.removeSpawnedEntities();
|
||||||
_challenge.generateRoom();
|
_challenge.generateRoom();
|
||||||
|
|
||||||
ArrayList<Location> spawns = _challenge.getSpawns();
|
ArrayList<Location> spawns = setupChallengeSpawnLocations();
|
||||||
_playersTeam.SetSpawns(_challenge.getSpawns());
|
ArrayList<Location> selectedSpawnpoints = new ArrayList<Location>();
|
||||||
SpectatorSpawn = UtilWorld.averageLocation(spawns).add(0, 7, 0);
|
|
||||||
|
|
||||||
ArrayList<Location> toTeleport = new ArrayList<Location>();
|
|
||||||
|
|
||||||
for (int i = 0; i < spawns.size(); i++)
|
for (int i = 0; i < spawns.size(); i++)
|
||||||
{
|
{
|
||||||
|
@ -357,12 +334,12 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
|
|
||||||
for (Location spawn : spawns)
|
for (Location spawn : spawns)
|
||||||
{
|
{
|
||||||
if (toTeleport.contains(spawn))
|
if (selectedSpawnpoints.contains(spawn))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
double dist = 0;
|
double dist = 0;
|
||||||
|
|
||||||
for (Location loc : toTeleport)
|
for (Location loc : selectedSpawnpoints)
|
||||||
dist += loc.distance(spawn);
|
dist += loc.distance(spawn);
|
||||||
|
|
||||||
if (furthest == null || furthestDist < dist)
|
if (furthest == null || furthestDist < dist)
|
||||||
|
@ -372,28 +349,11 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
toTeleport.add(furthest);
|
selectedSpawnpoints.add(furthest);
|
||||||
}
|
}
|
||||||
|
|
||||||
int i = 0;
|
teleportPlayersToSpawnpoints(selectedSpawnpoints);
|
||||||
|
teleportSpectatorsToSpawn();
|
||||||
for (Player player : getChallengers())
|
|
||||||
{
|
|
||||||
player.teleport(toTeleport.get(i++));
|
|
||||||
|
|
||||||
if (i >= toTeleport.size())
|
|
||||||
i = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Player player : GetPlayers(false))
|
|
||||||
if (!IsAlive(player))
|
|
||||||
{
|
|
||||||
if (_chickenTeam != null)
|
|
||||||
if (_chickenTeam.HasPlayer(player))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
player.teleport(SpectatorSpawn);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_challenge instanceof ChallengeSeperateRooms)
|
if (_challenge instanceof ChallengeSeperateRooms)
|
||||||
{
|
{
|
||||||
|
@ -402,46 +362,24 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
}
|
}
|
||||||
|
|
||||||
_challengeTime = System.currentTimeMillis();
|
_challengeTime = System.currentTimeMillis();
|
||||||
_waitingChallenge = true;
|
_waiting = true;
|
||||||
}
|
}
|
||||||
else if (_waitingChallenge)
|
else if (_waiting)
|
||||||
{
|
{
|
||||||
if (!UtilTime.elapsed(_challengeTime, 1000))
|
if (!UtilTime.elapsed(_challengeTime, 1000))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!_sendingMessages && !_messagesSent)
|
if (!_sendingMessages && !_messagesSent)
|
||||||
{
|
{
|
||||||
for (Player player : GetPlayers(true))
|
startChallengeDescriptionThread();
|
||||||
{
|
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, Integer.MAX_VALUE, 1));
|
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
Thread newThread = new Thread(new Runnable()
|
// return;
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
showChallengeDescription(_challenge);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
newThread.start();
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
else if (_messagesSent)
|
||||||
if (_messagesSent)
|
|
||||||
{
|
{
|
||||||
for (Player player : GetPlayers(true))
|
removeEffectsFromPlayers();
|
||||||
{
|
|
||||||
if (player.hasPotionEffect(PotionEffectType.BLINDNESS))
|
|
||||||
{
|
|
||||||
player.removePotionEffect(PotionEffectType.BLINDNESS);
|
|
||||||
player.removePotionEffect(PotionEffectType.NIGHT_VISION);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_waitingChallenge = false;
|
_waiting = false;
|
||||||
_challengeStarted = true;
|
_challengeStarted = true;
|
||||||
|
|
||||||
_challenge.start();
|
_challenge.start();
|
||||||
|
@ -453,11 +391,11 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_challenge.finish())
|
if (_challenge.canFinish())
|
||||||
{
|
{
|
||||||
if (_challenge.canCrumble() && !_challenge.getModifiedBlocks().isEmpty())
|
if (canStartCrumbling())
|
||||||
{
|
{
|
||||||
if (!_crumbling && _challenge.getLost().size() >= _challenge.getCurrentPlaying().size() / 2)
|
if (justStartedCrumbling())
|
||||||
{
|
{
|
||||||
_crumbling = true;
|
_crumbling = true;
|
||||||
|
|
||||||
|
@ -466,15 +404,12 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
for (Player player : UtilServer.getPlayers())
|
for (Player player : UtilServer.getPlayers())
|
||||||
if (IsAlive(player))
|
if (IsAlive(player))
|
||||||
UtilPlayer.message(player,
|
UtilPlayer.message(player,
|
||||||
F.main(GetName(), "Challenge ends when there's only 1 player alive."));
|
F.main(GetName(), "Challenge ends when there's only 1 player alive."));
|
||||||
}
|
}
|
||||||
else
|
else if (canEndChallengeFromCrumble())
|
||||||
{
|
{
|
||||||
if ((_challenge.getCurrentPlaying().size() - _challenge.getLost().size()) <= 1 && _crumbling)
|
endCurrentChallenge();
|
||||||
{
|
_crumbling = false;
|
||||||
endCurrentChallenge();
|
|
||||||
_crumbling = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -484,22 +419,144 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (Player player : UtilServer.getPlayers())
|
updateChallengeTimer();
|
||||||
{
|
}
|
||||||
if (_challenge instanceof ChallengeSeperateRooms)
|
}
|
||||||
{
|
}
|
||||||
UtilTextTop.display(C.cYellow + C.Bold + _challenge.getGameMessages()[0], player);
|
|
||||||
player.setLevel(_challenge.getRemainingPlaces());
|
private void resetDeadPlayers()
|
||||||
player.setExp(_challenge.getTimeLeftPercent());
|
{
|
||||||
}
|
for (Player player : GetPlayers(false))
|
||||||
else
|
if (_lives.containsKey(player) && _lives.get(player) > 0)
|
||||||
{
|
Manager.Clear(player);
|
||||||
UtilTextTop.displayTextBar(player, _challenge.getTimeLeftPercent(),
|
}
|
||||||
C.cYellow + C.Bold + _challenge.getName());
|
|
||||||
player.setLevel(_challenge.getRemainingPlaces());
|
@SuppressWarnings("deprecation")
|
||||||
player.setExp(_challenge.getTimeLeftPercent());
|
private void resetLastChallengeMap()
|
||||||
}
|
{
|
||||||
}
|
for (Block block : _lastOrderBlocks)
|
||||||
|
{
|
||||||
|
if (block.getState() instanceof InventoryHolder)
|
||||||
|
{
|
||||||
|
InventoryHolder holder = (InventoryHolder) block.getState();
|
||||||
|
holder.getInventory().clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
block.setTypeIdAndData(Material.AIR.getId(), (byte) 0, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArrayList<Location> setupChallengeSpawnLocations()
|
||||||
|
{
|
||||||
|
ArrayList<Location> spawns = _challenge.getSpawns();
|
||||||
|
_playersTeam.SetSpawns(spawns);
|
||||||
|
SpectatorSpawn = UtilWorld.averageLocation(spawns).add(0, 7.0D, 0);
|
||||||
|
return spawns;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void teleportSpectatorsToSpawn()
|
||||||
|
{
|
||||||
|
for (Player player : GetPlayers(false))
|
||||||
|
{
|
||||||
|
if (!IsAlive(player))
|
||||||
|
{
|
||||||
|
if (_chickenTeam != null)
|
||||||
|
if (_chickenTeam.HasPlayer(player))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
player.teleport(SpectatorSpawn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void keepSearchingIfNull(Challenge challenge)
|
||||||
|
{
|
||||||
|
if (_challenge == null)
|
||||||
|
{
|
||||||
|
UtilServer.broadcast(F.main(GetName(), "No suitable challenge was found."));
|
||||||
|
|
||||||
|
_challengesCopy.clear();
|
||||||
|
_challengesCopy.addAll(_challenges);
|
||||||
|
_challenge = selectChallenge();
|
||||||
|
|
||||||
|
if (_challenge == null)
|
||||||
|
{
|
||||||
|
SetState(GameState.Dead);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void teleportPlayersToSpawnpoints(ArrayList<Location> spawnpoints)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for (Player player : getChallengers())
|
||||||
|
{
|
||||||
|
player.teleport(spawnpoints.get(i++));
|
||||||
|
|
||||||
|
if (i >= spawnpoints.size())
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startChallengeDescriptionThread()
|
||||||
|
{
|
||||||
|
Thread thread = new Thread(new Runnable()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
showChallengeDescription(_challenge);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
thread.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeEffectsFromPlayers()
|
||||||
|
{
|
||||||
|
for (Player player : GetPlayers(true))
|
||||||
|
{
|
||||||
|
if (player.hasPotionEffect(PotionEffectType.BLINDNESS) && player.hasPotionEffect(PotionEffectType.NIGHT_VISION))
|
||||||
|
{
|
||||||
|
player.removePotionEffect(PotionEffectType.BLINDNESS);
|
||||||
|
player.removePotionEffect(PotionEffectType.NIGHT_VISION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean canStartCrumbling()
|
||||||
|
{
|
||||||
|
return _challenge.canCrumble() && !_challenge.getModifiedBlocks().isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean justStartedCrumbling()
|
||||||
|
{
|
||||||
|
return !_crumbling && _challenge.getLost().size() >= _challenge.getCurrentPlaying().size() / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean canEndChallengeFromCrumble()
|
||||||
|
{
|
||||||
|
return (_challenge.getCurrentPlaying().size() - _challenge.getLost().size()) <= 1 && _crumbling;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateChallengeTimer()
|
||||||
|
{
|
||||||
|
for (Player player : UtilServer.getPlayers())
|
||||||
|
{
|
||||||
|
if (_challenge instanceof ChallengeSeperateRooms)
|
||||||
|
{
|
||||||
|
UtilTextTop.display(C.cYellow + C.Bold + _challenge.getGameMessages()[0], player);
|
||||||
|
player.setLevel(_challenge.getRemainingPlaces());
|
||||||
|
player.setExp(_challenge.getTimeLeftPercent());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UtilTextTop.displayTextBar(player, _challenge.getTimeLeftPercent(),
|
||||||
|
C.cYellow + C.Bold + _challenge.getName());
|
||||||
|
player.setLevel(_challenge.getRemainingPlaces());
|
||||||
|
player.setExp(_challenge.getTimeLeftPercent());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -508,6 +565,22 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
{
|
{
|
||||||
_challengeTime = System.currentTimeMillis();
|
_challengeTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
resetPlayersOnChallengeEnding();
|
||||||
|
|
||||||
|
Manager.getPluginManager().callEvent(new ChallengeEndEvent(_challenge));
|
||||||
|
HandlerList.unregisterAll(_challenge);
|
||||||
|
|
||||||
|
_challenge.end();
|
||||||
|
_challengeStarted = false;
|
||||||
|
|
||||||
|
sortLastChallengeBlocks();
|
||||||
|
|
||||||
|
_challenge = null;
|
||||||
|
EndCheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resetPlayersOnChallengeEnding()
|
||||||
|
{
|
||||||
for (Player player : getChallengers())
|
for (Player player : getChallengers())
|
||||||
{
|
{
|
||||||
Manager.GetDisguise().undisguise(player);
|
Manager.GetDisguise().undisguise(player);
|
||||||
|
@ -519,13 +592,10 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
if (_challenge.isCompleted(player))
|
if (_challenge.isCompleted(player))
|
||||||
AddGems(player, 3, "Completed Challenge", true, true);
|
AddGems(player, 3, "Completed Challenge", true, true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Manager.getPluginManager().callEvent(new ChallengeEndEvent(_challenge));
|
private void sortLastChallengeBlocks()
|
||||||
HandlerList.unregisterAll(_challenge);
|
{
|
||||||
|
|
||||||
_challenge.end();
|
|
||||||
_challengeStarted = false;
|
|
||||||
|
|
||||||
_lastOrderBlocks = new ArrayList<Block>(_challenge.getModifiedBlocks());
|
_lastOrderBlocks = new ArrayList<Block>(_challenge.getModifiedBlocks());
|
||||||
|
|
||||||
Collections.sort(_lastOrderBlocks, new Comparator<Block>()
|
Collections.sort(_lastOrderBlocks, new Comparator<Block>()
|
||||||
|
@ -536,9 +606,6 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
return new Integer(o2.getY()).compareTo(o1.getY());
|
return new Integer(o2.getY()).compareTo(o1.getY());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
_challenge = null;
|
|
||||||
EndCheck();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -550,7 +617,7 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
if (_challenge == null)
|
if (_challenge == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_waitingChallenge)
|
if (_waiting)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Manager.getPluginManager().callEvent(new ChallengeEndEvent(_challenge));
|
Manager.getPluginManager().callEvent(new ChallengeEndEvent(_challenge));
|
||||||
|
@ -716,10 +783,10 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
int looped = 0;
|
int looped = 0;
|
||||||
|
|
||||||
List<String> messages = Arrays.asList(
|
List<String> messages = Arrays.asList(
|
||||||
C.cRed + C.Bold + "3",
|
C.cRed + C.Bold + "3",
|
||||||
C.cYellow + C.Bold + "2",
|
C.cYellow + C.Bold + "2",
|
||||||
C.cGreen + C.Bold + "1",
|
C.cGreen + C.Bold + "1",
|
||||||
C.cGreen + C.Bold + "GO!");
|
C.cGreen + C.Bold + "GO!");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
|
@ -762,7 +829,7 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 1));
|
player.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerMove(PlayerMoveEvent event)
|
public void onPlayerMove(PlayerMoveEvent event)
|
||||||
{
|
{
|
||||||
|
@ -775,7 +842,7 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
if (!PrepareFreeze)
|
if (!PrepareFreeze)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!_waitingChallenge)
|
if (!_waiting)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Location from = event.getFrom();
|
Location from = event.getFrom();
|
||||||
|
@ -879,7 +946,7 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
if (GetState() == GameState.Recruit && GetCountdown() >= 0 && GetPlayers(false).size() < 2)
|
if (GetState() == GameState.Recruit && GetCountdown() >= 0 && GetPlayers(false).size() < 2)
|
||||||
{
|
{
|
||||||
UtilServer
|
UtilServer
|
||||||
.broadcast(F.main(GetName(), C.cRed + "This game requires at least 2 players to start."));
|
.broadcast(F.main(GetName(), C.cRed + "This game requires at least 2 players to start."));
|
||||||
SetCountdown(-1);
|
SetCountdown(-1);
|
||||||
Manager.GetLobby().DisplayWaiting();
|
Manager.GetLobby().DisplayWaiting();
|
||||||
}
|
}
|
||||||
|
@ -931,7 +998,7 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Class<? extends Challenge> result = (Class<? extends Challenge>) Class
|
Class<? extends Challenge> result = (Class<? extends Challenge>) Class
|
||||||
.forName("nautilus.game.arcade.game.games.mineware.challenges.Challenge" + rawClass);
|
.forName("nautilus.game.arcade.game.games.mineware.challenges.Challenge" + rawClass);
|
||||||
|
|
||||||
Announce(C.cAqua + C.Bold + GetName() + " restricted to " + rawClass + " challenge.");
|
Announce(C.cAqua + C.Bold + GetName() + " restricted to " + rawClass + " challenge.");
|
||||||
|
|
||||||
|
@ -941,12 +1008,12 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
catch (ClassNotFoundException e)
|
catch (ClassNotFoundException e)
|
||||||
{
|
{
|
||||||
UtilPlayer.message(player, F.main(GetName(),
|
UtilPlayer.message(player, F.main(GetName(),
|
||||||
"Could not match " + F.elem(rawClass) + " with any challenges."));
|
"Could not match " + F.elem(rawClass) + " with any challenges."));
|
||||||
}
|
}
|
||||||
catch (ClassCastException e)
|
catch (ClassCastException e)
|
||||||
{
|
{
|
||||||
UtilPlayer.message(player,
|
UtilPlayer.message(player,
|
||||||
F.main(GetName(), F.elem(rawClass) + "is not a challenge!"));
|
F.main(GetName(), F.elem(rawClass) + "is not a challenge!"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -970,7 +1037,7 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UtilPlayer.message(player,
|
UtilPlayer.message(player,
|
||||||
F.main(GetName(), "You cannot skip a challenge if the game is not started."));
|
F.main(GetName(), "You cannot skip a challenge if the game is not started."));
|
||||||
}
|
}
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -1040,10 +1107,10 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
// TODO: Retrieve center and corners from map data.
|
// TODO: Retrieve center and corners from map data.
|
||||||
|
|
||||||
_chickenAttack = new ChickenAttack(
|
_chickenAttack = new ChickenAttack(
|
||||||
this,
|
this,
|
||||||
new Location(WorldData.World, 50, 0, 0),
|
new Location(WorldData.World, 50, 0, 0),
|
||||||
new Location(WorldData.World, 47, 0, -3),
|
new Location(WorldData.World, 47, 0, -3),
|
||||||
new Location(WorldData.World, 53, 0, 3));
|
new Location(WorldData.World, 53, 0, 3));
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -1076,7 +1143,7 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerInteract(PlayerInteractEvent event)
|
public void onPlayerInteract(PlayerInteractEvent event)
|
||||||
{
|
{
|
||||||
if (!_waitingChallenge)
|
if (!_waiting)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -1097,7 +1164,7 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
@Override
|
@Override
|
||||||
public boolean isInsideMap(Player player)
|
public boolean isInsideMap(Player player)
|
||||||
{
|
{
|
||||||
if (_challenge != null && !_waitingChallenge)
|
if (_challenge != null && !_waiting)
|
||||||
return _challenge.isInsideMap(player);
|
return _challenge.isInsideMap(player);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -1218,7 +1285,7 @@ public class MineWare extends TeamGame implements IThrown
|
||||||
|
|
||||||
public boolean isWaitingChallenge()
|
public boolean isWaitingChallenge()
|
||||||
{
|
{
|
||||||
return _waitingChallenge;
|
return _waiting;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean areMessagesSent()
|
public boolean areMessagesSent()
|
||||||
|
|
Loading…
Reference in New Issue