Merge branch 'MortensRawBugFixes' of http://184.154.0.242:7990/scm/min/mineplex into MortensRawBugFixes

This commit is contained in:
Thanos paravantis 2015-12-12 10:12:42 +02:00
commit 2773518e30
10 changed files with 138 additions and 46 deletions

View File

@ -28,6 +28,7 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
public abstract class Challenge implements Listener public abstract class Challenge implements Listener
@ -43,7 +44,7 @@ public abstract class Challenge implements Listener
protected long Duration; protected long Duration;
protected HashSet<Player> Completed = new HashSet<Player>(); protected HashSet<Player> Completed = new HashSet<Player>();
protected HashSet<Player> Lost = new HashSet<Player>(); protected HashSet<Player> Lost = new HashSet<Player>();
protected HashSet<Player> currentPlaying; protected HashSet<Player> CurrentPlaying;
private boolean _teamBased; private boolean _teamBased;
private boolean _crumble; private boolean _crumble;
@ -80,6 +81,17 @@ public abstract class Challenge implements Listener
setBorder(-100, 100, 0, 256, -100, 100); setBorder(-100, 100, 0, 256, -100, 100);
} }
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event)
{
if(!Host.IsLive())
{
return;
}
removePlayerFromAllLists(event.getPlayer());
}
public long getMaxTime() public long getMaxTime()
{ {
return 60000; return 60000;
@ -119,7 +131,7 @@ public abstract class Challenge implements Listener
public void StartOrder() public void StartOrder()
{ {
currentPlaying = new HashSet<Player>(getChallengers()); CurrentPlaying = new HashSet<Player>(getChallengers());
setupPlayers(); setupPlayers();
Completed.clear(); Completed.clear();
@ -352,7 +364,7 @@ public abstract class Challenge implements Listener
public ArrayList<Player> getCurrentyAlive(boolean ignoreAlreadyWon) public ArrayList<Player> getCurrentyAlive(boolean ignoreAlreadyWon)
{ {
ArrayList<Player> currentlyAlive = new ArrayList<Player>(); ArrayList<Player> currentlyAlive = new ArrayList<Player>();
for(Player player: currentPlaying) for(Player player: CurrentPlaying)
{ {
if(isLost(player)) if(isLost(player))
{ {
@ -396,6 +408,26 @@ public abstract class Challenge implements Listener
return false; return false;
} }
public void removePlayerFromAllLists(Player player)
{
if(Lost.contains(player))
{
Lost.remove(player);
}
if(Completed.contains(player))
{
Completed.remove(player);
}
if(_invisPlayers.contains(player))
{
_invisPlayers.remove(player);
}
if(CurrentPlaying.contains(player))
{
CurrentPlaying.remove(player);
}
}
public String getChallengeName() public String getChallengeName()
{ {
return _challengeName; return _challengeName;

View File

@ -37,6 +37,7 @@ import nautilus.game.arcade.game.games.mineware.challenges.ChallengeArrowRampage
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeBlockLobbers; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeBlockLobbers;
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeBlockRunner; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeBlockRunner;
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeBouncingBlock; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeBouncingBlock;
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeBuildRace;
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeChestLoot; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeChestLoot;
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeCloudFall; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeCloudFall;
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeDogvsCat; import nautilus.game.arcade.game.games.mineware.challenges.ChallengeDogvsCat;
@ -113,6 +114,7 @@ public class MineWare extends SoloGame implements IThrown
private ArrayList<Class<? extends Challenge>> _challenges = new ArrayList<Class<? extends Challenge>>(); private ArrayList<Class<? extends Challenge>> _challenges = new ArrayList<Class<? extends Challenge>>();
private ArrayList<Class<? extends Challenge>> _challengesCopy = new ArrayList<Class<? extends Challenge>>(); private ArrayList<Class<? extends Challenge>> _challengesCopy = new ArrayList<Class<? extends Challenge>>();
@SuppressWarnings("unchecked")
public MineWare(ArcadeManager manager) public MineWare(ArcadeManager manager)
{ {
super(manager, GameType.MineWare, super(manager, GameType.MineWare,
@ -224,7 +226,7 @@ public class MineWare extends SoloGame implements IThrown
_challenges.add(ChallengeCloudFall.class); _challenges.add(ChallengeCloudFall.class);
_challenges.add(ChallengeInfestation.class); _challenges.add(ChallengeInfestation.class);
_challenges.add(ChallengeBouncingBlock.class); _challenges.add(ChallengeBouncingBlock.class);
_challenges.add(ChallengeBlockRunner.class); _challenges.add(ChallengeBuildRace.class);
_challenges.add(ChallengeFastFood.class); _challenges.add(ChallengeFastFood.class);
_challenges.add(ChallengeMinecartDance.class); _challenges.add(ChallengeMinecartDance.class);
_challenges.add(ChallengeRedLightGreenLight.class); _challenges.add(ChallengeRedLightGreenLight.class);
@ -432,6 +434,11 @@ public class MineWare extends SoloGame implements IThrown
public void onQuit(PlayerQuitEvent event) public void onQuit(PlayerQuitEvent event)
{ {
_lives.remove(event.getPlayer()); _lives.remove(event.getPlayer());
if(_challenge != null)
{
_challenge.CurrentPlaying.remove(event.getPlayer());
}
} }
public ArrayList<Player> getChallengers() public ArrayList<Player> getChallengers()
@ -675,7 +682,7 @@ public class MineWare extends SoloGame implements IThrown
{ {
if(_challenge.getCrumble() && !_challenge.getModifiedBlocks().isEmpty()) if(_challenge.getCrumble() && !_challenge.getModifiedBlocks().isEmpty())
{ {
if(_currentCrumble == false && _challenge.Lost.size() >= _challenge.currentPlaying.size() / 2) if(_currentCrumble == false && _challenge.Lost.size() >= _challenge.CurrentPlaying.size() / 2)
{ {
_currentCrumble = true; _currentCrumble = true;
for(Player player : UtilServer.getPlayers()) for(Player player : UtilServer.getPlayers())
@ -689,7 +696,7 @@ public class MineWare extends SoloGame implements IThrown
} }
else else
{ {
if((_challenge.currentPlaying.size() - _challenge.Lost.size()) <= 1 && _currentCrumble) if((_challenge.CurrentPlaying.size() - _challenge.Lost.size()) <= 1 && _currentCrumble)
{ {
endCurrentChallenge(); endCurrentChallenge();
_currentCrumble = false; _currentCrumble = false;
@ -743,7 +750,7 @@ public class MineWare extends SoloGame implements IThrown
{ {
return; return;
} }
if(event.getMessage().equalsIgnoreCase("/tp") || event.getMessage().equalsIgnoreCase("/teleport")) if(event.getMessage().contains("/tp") || event.getMessage().contains("/teleport"))
{ {
CoreClient staff = getArcadeManager().GetClients().Get(event.getPlayer()); CoreClient staff = getArcadeManager().GetClients().Get(event.getPlayer());
@ -758,7 +765,6 @@ public class MineWare extends SoloGame implements IThrown
Manager.addSpectator(player, true); Manager.addSpectator(player, true);
} }
} }
} }
@ -850,7 +856,7 @@ public class MineWare extends SoloGame implements IThrown
} }
Scoreboard.Reset(); Scoreboard.Reset();
if(GetPlayers(false).size() > 14) if(GetPlayers(true).size() > 14)
{ {
int alive = 0; int alive = 0;
for(Player cAlive : _lives.keySet()) for(Player cAlive : _lives.keySet())
@ -860,17 +866,26 @@ public class MineWare extends SoloGame implements IThrown
alive++; alive++;
} }
} }
if(_challenge != null && _isChallengeStarted)
{
Scoreboard.Write(C.cGreen + "Players Currently Alive");
Scoreboard.Write("" + _challenge.getCurrentyAlive(false).size());
Scoreboard.WriteBlank();
Scoreboard.Write(C.cRed + "Players Currently Out");
Scoreboard.Write("" + _challenge.Lost.size());
Scoreboard.WriteBlank();
}
Scoreboard.WriteBlank(); Scoreboard.WriteBlank();
Scoreboard.Write(C.cGreen + "Players Alive"); Scoreboard.Write(C.cGreen + "Players In");
Scoreboard.Write(alive + " "); Scoreboard.Write(alive + " ");
Scoreboard.WriteBlank(); Scoreboard.WriteBlank();
Scoreboard.Write(C.cRed + "Players out: "); Scoreboard.Write(C.cRed + "Players Out");
Scoreboard.Write((GetPlayers(false).size() - alive) + " "); Scoreboard.Write((GetPlayers(false).size() - alive) + " ");
} }
else else
{ {
Scoreboard.WriteBlank(); Scoreboard.WriteBlank();
for(Player player : GetPlayers(false)) for(Player player : GetPlayers(true))
{ {
int currentLives = GetLives(player); int currentLives = GetLives(player);

View File

@ -4,13 +4,6 @@ import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import mineplex.core.common.util.UtilFirework;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilShapes;
import nautilus.game.arcade.game.games.mineware.Challenge;
import nautilus.game.arcade.game.games.mineware.MineWare;
import org.bukkit.Color; import org.bukkit.Color;
import org.bukkit.FireworkEffect.Type; import org.bukkit.FireworkEffect.Type;
import org.bukkit.Location; import org.bukkit.Location;
@ -26,8 +19,16 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import mineplex.core.common.util.UtilFirework;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilShapes;
import nautilus.game.arcade.game.games.mineware.Challenge;
import nautilus.game.arcade.game.games.mineware.MineWare;
public class ChallengeAnvilDance extends Challenge public class ChallengeAnvilDance extends Challenge
{ {
// The amount of seconds until the anvils start to dance. // The amount of seconds until the anvils start to dance.
@ -50,6 +51,8 @@ public class ChallengeAnvilDance extends Challenge
// The amount of anvils that have yet to land in the platform or are launched in air. // The amount of anvils that have yet to land in the platform or are launched in air.
private HashSet<FallingBlock> _fallingAnvils = new HashSet<FallingBlock>(); private HashSet<FallingBlock> _fallingAnvils = new HashSet<FallingBlock>();
private BukkitTask _fireworkTask;
public ChallengeAnvilDance(MineWare host) public ChallengeAnvilDance(MineWare host)
{ {
@ -105,6 +108,7 @@ public class ChallengeAnvilDance extends Challenge
@Override @Override
public void cleanupRoom() public void cleanupRoom()
{ {
_fireworkTask.cancel();
_paused = false; _paused = false;
for(Block block : _landedAnvils) for(Block block : _landedAnvils)
@ -289,7 +293,7 @@ public class ChallengeAnvilDance extends Challenge
private void playFireworksTask() private void playFireworksTask()
{ {
new BukkitRunnable() _fireworkTask = new BukkitRunnable()
{ {
int height = _fireworkHeight; int height = _fireworkHeight;
int times = 0; int times = 0;

View File

@ -215,7 +215,7 @@ public class ChallengeBouncingBlock extends Challenge
if(b.getType() == Material.AIR || b.getType() == null) if(b.getType() == Material.AIR || b.getType() == null)
{ {
if(UtilMath.r(200) == 50) if(UtilMath.r(50) == 0)
{ {
Byte color = (byte) UtilMath.r(16); Byte color = (byte) UtilMath.r(16);
while(color == 14) while(color == 14)

View File

@ -173,7 +173,7 @@ public class ChallengeDogvsCat extends Challenge
@EventHandler @EventHandler
public void checkForWinner(UpdateEvent event) public void checkForWinner(UpdateEvent event)
{ {
if(event.getType() != UpdateType.FASTEST) if(event.getType() != UpdateType.TICK)
{ {
return; return;
} }
@ -187,8 +187,8 @@ public class ChallengeDogvsCat extends Challenge
int dogScore = calculateScore("dog"); int dogScore = calculateScore("dog");
UtilTextMiddle.display(C.cBlue + C.Bold + "Dog's: " + C.cGreen + _dogScore + "/" + dogScore + " - " + C.cRed + C.Bold UtilTextMiddle.display(C.cBlue + C.Bold + "Dogs: " + C.cGreen + _dogScore + "/" + dogScore + " - " + C.cRed + C.Bold
+ "Cat's: " + C.cGreen + _catScore + "/" + catScore, ""); + "Cats: " + C.cGreen + _catScore + "/" + catScore, "");
if(_catScore >= catScore) if(_catScore >= catScore)
{ {

View File

@ -125,7 +125,7 @@ public class ChallengeFishingDay extends Challenge
} }
else else
{ {
if(y == 5) if(y == 5 && !getSpawns().contains(block.getLocation()))
{ {
block.setType(Material.GRASS); block.setType(Material.GRASS);
@ -379,12 +379,15 @@ public class ChallengeFishingDay extends Challenge
// Check if the player is retracting the hook. // Check if the player is retracting the hook.
// Once hook is retracted, the entity is valid but not on ground. // Once hook is retracted, the entity is valid but not on ground.
return _fishing.get(fisher) && hook.isValid() && !hook.isOnGround(); Location droppedHook = hook.getLocation();
Block below = droppedHook.getBlock().getRelative(BlockFace.DOWN);
return _fishing.get(fisher) && hook.isValid() && !hook.isOnGround() && below.getType() == Material.STATIONARY_WATER;
} }
private void createExplosion(Player target, Location dropsite) private void createExplosion(Player target, Location dropsite)
{ {
if (Recharge.Instance.use(target, "TNT Spawn", 700, false, false)) if(Recharge.Instance.use(target, "TNT Spawn", 700, false, false))
{ {
World world = dropsite.getWorld(); World world = dropsite.getWorld();

View File

@ -8,6 +8,10 @@ import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.disguise.disguises.DisguiseVillager; import mineplex.core.disguise.disguises.DisguiseVillager;
import mineplex.core.hologram.Hologram;
import mineplex.core.hologram.Hologram.HologramTarget;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.games.mineware.Challenge; import nautilus.game.arcade.game.games.mineware.Challenge;
import nautilus.game.arcade.game.games.mineware.MineWare; import nautilus.game.arcade.game.games.mineware.MineWare;
@ -33,6 +37,7 @@ public class ChallengeMilkACow extends Challenge
private Villager _villager; private Villager _villager;
private HashMap<Entity, ArrayList<String>> _milked = new HashMap<Entity, ArrayList<String>>(); private HashMap<Entity, ArrayList<String>> _milked = new HashMap<Entity, ArrayList<String>>();
private HashMap<Player, Integer> _score = new HashMap<Player, Integer>(); private HashMap<Player, Integer> _score = new HashMap<Player, Integer>();
private HashMap<Entity, Hologram> _cowIndicator = new HashMap<Entity, Hologram>();
public ChallengeMilkACow(MineWare host) public ChallengeMilkACow(MineWare host)
{ {
@ -44,9 +49,11 @@ public class ChallengeMilkACow extends Challenge
{ {
for (Entity cow : _milked.keySet()) for (Entity cow : _milked.keySet())
{ {
Hologram holo = _cowIndicator.get(cow);
holo.stop();
cow.remove(); cow.remove();
} }
_villager.remove(); _villager.remove();
} }
@ -72,8 +79,6 @@ public class ChallengeMilkACow extends Challenge
@Override @Override
public void setupPlayers() public void setupPlayers()
{ {
setBorder(-16, 16, 0, 10, -16, 16);
for (Player player : Host.GetPlayers(true)) for (Player player : Host.GetPlayers(true))
{ {
DisguiseVillager disguise = new DisguiseVillager(player); DisguiseVillager disguise = new DisguiseVillager(player);
@ -135,7 +140,7 @@ public class ChallengeMilkACow extends Challenge
String[] names = new String[] String[] names = new String[]
{ {
"Tom", "Steve", "John", "Harry", "Andrew", "Daniel", "Jorge", "Jim" "Tom", "Steve", "John", "Harry", "Andrew", "Daniel", "Bobbae", "Jim"
}; };
if (UtilMath.r(5) == 0) if (UtilMath.r(5) == 0)
@ -155,11 +160,42 @@ public class ChallengeMilkACow extends Challenge
cow.setCustomNameVisible(true); cow.setCustomNameVisible(true);
_milked.put(cow, new ArrayList<String>()); _milked.put(cow, new ArrayList<String>());
_cowIndicator.put(cow, new Hologram(Host.Manager.getHologramManager(), cow.getLocation().clone().add(0, 2.5, 0), C.cRed + "Already Milked!"));
Hologram holo = _cowIndicator.get(cow);
holo.setHologramTarget(HologramTarget.WHITELIST);
holo.setFollowEntity(cow);
holo.start();
} }
Host.CreatureAllowOverride = false; Host.CreatureAllowOverride = false;
} }
@EventHandler
public void cowIndicator(UpdateEvent event)
{
if(!Host.IsLive())
{
return;
}
if(event.getType() != UpdateType.SEC)
{
return;
}
for(Entity entCow: _milked.keySet())
{
for(String playerName: _milked.get(entCow))
{
Hologram holo = _cowIndicator.get(entCow);
if(!holo.containsPlayer(playerName))
{
holo.addPlayer(playerName);
}
}
}
}
@EventHandler @EventHandler
public void onEntityInteract(PlayerInteractEntityEvent event) public void onEntityInteract(PlayerInteractEntityEvent event)
{ {
@ -190,6 +226,7 @@ public class ChallengeMilkACow extends Challenge
{ {
p.setItemInHand(new ItemStack(Material.MILK_BUCKET)); p.setItemInHand(new ItemStack(Material.MILK_BUCKET));
_milked.get(ent).add(p.getName()); _milked.get(ent).add(p.getName());
Cow cow = (Cow) ent;
} }
else else
{ {

View File

@ -244,7 +244,7 @@ public class ChallengeMinecartDance extends Challenge
} }
} }
for(int i = 0; i < getCurrentyAlive(true).size() - 1; i++) for(int i = 0; i < getCurrentyAlive(true).size()*0.66; i++)
{ {
Minecart minecart = Host.WorldData.World.spawn(new Location(Host.WorldData.World, Minecart minecart = Host.WorldData.World.spawn(new Location(Host.WorldData.World,
UtilMath.r(getArenaSize(7) * 2) - (getArenaSize(7)), 2, UtilMath.r(getArenaSize(7) * 2) - (getArenaSize(7))), Minecart.class); UtilMath.r(getArenaSize(7) * 2) - (getArenaSize(7)), 2, UtilMath.r(getArenaSize(7) * 2) - (getArenaSize(7))), Minecart.class);

View File

@ -207,24 +207,13 @@ public class ChallengeReverseTag extends Challenge
} }
} }
private void removeTagged(final Player player) private void removeTagged(Player player)
{ {
if(_tagged.contains(player.getName())) if(_tagged.contains(player.getName()))
{ {
UtilPlayer.message(player, C.cYellow + C.Bold + "You are " + C.cRed + "NO LONGER" + C.cYellow + " tagged!"); UtilPlayer.message(player, C.cYellow + C.Bold + "You are " + C.cRed + "NO LONGER" + C.cYellow + " tagged!");
player.getInventory().setHelmet(new ItemStack(Material.AIR)); player.getInventory().setHelmet(new ItemStack(Material.AIR));
_tagged.remove(player.getName()); _tagged.remove(player.getName());
_cooldowned.add(player.getName());
new BukkitRunnable()
{
@Override
public void run()
{
_cooldowned.remove(player.getName());
}
}.runTaskLater(Host.Manager.getPlugin(), 20*_cooldown);
if(_nonTaggedPlayers.contains(player)) if(_nonTaggedPlayers.contains(player))
{ {
@ -238,13 +227,25 @@ public class ChallengeReverseTag extends Challenge
} }
} }
private void addTagged(Player player) private void addTagged(final Player player)
{ {
if(!_tagged.contains(player.getName())) if(!_tagged.contains(player.getName()))
{ {
UtilPlayer.message(player, C.cYellow + C.Bold + "You are " + C.cGreen + "NOW" + C.cYellow + " tagged! Keep it up!"); UtilPlayer.message(player, C.cYellow + C.Bold + "You are " + C.cGreen + "NOW" + C.cYellow + " tagged! Keep it up!");
player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(35, (byte) 5)); player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(35, (byte) 5));
_tagged.add(player.getName()); _tagged.add(player.getName());
_cooldowned.add(player.getName());
new BukkitRunnable()
{
@Override
public void run()
{
_cooldowned.remove(player.getName());
}
}.runTaskLater(Host.Manager.getPlugin(), 20*_cooldown);
for(int i = 0; i <= 8; i++) for(int i = 0; i <= 8; i++)
{ {

View File

@ -257,7 +257,7 @@ public class ChallengeWaveCrush extends Challenge
FallingBlock fBlock = Host.WorldData.World.spawnFallingBlock(theBlock.getLocation().clone().add(0, 1, 0), theBlock.getType(), FallingBlock fBlock = Host.WorldData.World.spawnFallingBlock(theBlock.getLocation().clone().add(0, 1, 0), theBlock.getType(),
theBlock.getData()); theBlock.getData());
Host.Manager.GetProjectile().AddThrow(fBlock, null, Host, -1, true, false, true, true, 0.4f); Host.Manager.GetProjectile().AddThrow(fBlock, null, Host, -1, true, false, true, true, 0.7f);
fBlock.setVelocity(new Vector(0, 10, 0).normalize()); fBlock.setVelocity(new Vector(0, 10, 0).normalize());
theBlock.setType(Material.AIR); theBlock.setType(Material.AIR);
theBlock = Host.WorldData.World.getBlockAt(theBlock.getX() - 1, theBlock.getY(), theBlock.getZ()); theBlock = Host.WorldData.World.getBlockAt(theBlock.getX() - 1, theBlock.getY(), theBlock.getZ());