diff --git a/Plugins/.idea/artifacts/Mineplex_Hub_jar.xml b/Plugins/.idea/artifacts/Mineplex_Hub_jar.xml
index a90117bcf..150c21bc3 100644
--- a/Plugins/.idea/artifacts/Mineplex_Hub_jar.xml
+++ b/Plugins/.idea/artifacts/Mineplex_Hub_jar.xml
@@ -19,6 +19,7 @@
+
\ No newline at end of file
diff --git a/Plugins/.idea/codeStyleSettings.xml b/Plugins/.idea/codeStyleSettings.xml
index a206a6aca..8e890f86b 100644
--- a/Plugins/.idea/codeStyleSettings.xml
+++ b/Plugins/.idea/codeStyleSettings.xml
@@ -37,7 +37,6 @@
-
+
-
-
+
\ No newline at end of file
diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilMath.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilMath.java
index 2ba63686b..c3513308c 100644
--- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilMath.java
+++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilMath.java
@@ -1,6 +1,9 @@
package mineplex.core.common.util;
import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.NumberFormat;
+import java.util.Locale;
import java.util.Random;
import org.bukkit.Location;
@@ -15,8 +18,9 @@ public class UtilMath
for (int i=1 ; i
@Override
protected void Help(Player caller, String[] args)
{
-
+ UtilPlayer.message(caller, F.main(Plugin.getName(), "Commands List:"));
+ UtilPlayer.message(caller, F.help("/game start", "Start the current game", Rank.ADMIN));
+ UtilPlayer.message(caller, F.help("/game stop", "Stop the current game", Rank.ADMIN));
+ UtilPlayer.message(caller, F.help("/game set (Map)", "Set the current game or next game", Rank.ADMIN));
+ UtilPlayer.message(caller, F.main("Tip", "Use TAB for games/maps!"));
}
}
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/SetCommand.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/SetCommand.java
index e49c88b6d..7db88b496 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/SetCommand.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/SetCommand.java
@@ -1,19 +1,18 @@
package nautilus.game.arcade.command;
-import java.util.ArrayList;
-import java.util.List;
-
+import mineplex.core.command.CommandBase;
+import mineplex.core.common.Rank;
+import mineplex.core.common.util.C;
+import mineplex.core.common.util.F;
+import mineplex.core.common.util.UtilPlayer;
+import nautilus.game.arcade.ArcadeManager;
+import nautilus.game.arcade.GameType;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-import nautilus.game.arcade.ArcadeManager;
-import nautilus.game.arcade.GameType;
-import nautilus.game.arcade.game.Game.GameState;
-import mineplex.core.command.CommandBase;
-import mineplex.core.common.Rank;
-import mineplex.core.common.util.C;
-import mineplex.core.common.util.UtilPlayer;
+import java.util.ArrayList;
+import java.util.List;
public class SetCommand extends CommandBase
{
@@ -28,9 +27,9 @@ public class SetCommand extends CommandBase
if (Plugin.GetGame() == null)
return;
- if (args.length == 0)
+ if (args == null || args.length == 0)
{
- caller.sendMessage("/game set (Map)");
+ caller.sendMessage(F.help("/game set (Map)", "Set the current game or next game", Rank.ADMIN));
return;
}
@@ -43,7 +42,7 @@ public class SetCommand extends CommandBase
}
//Parse Game
- ArrayList matches = new ArrayList();
+ ArrayList matches = new ArrayList<>();
for (GameType type : GameType.values())
{
if (type.toString().toLowerCase().equals(game))
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 4ae370d96..abe4d740c 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
@@ -498,7 +498,11 @@ public abstract class Game implements Listener
UtilServer.getServer().getPluginManager().registerEvents(kit, Manager.getPlugin());
for (Perk perk : kit.GetPerks())
- UtilServer.getServer().getPluginManager().registerEvents(perk, Manager.getPlugin());
+ {
+ UtilServer.getServer().getPluginManager()
+ .registerEvents(perk, Manager.getPlugin());
+ perk.registeredEvents();
+ }
}
}
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/MineWare.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/MineWare.java
index 10682c0ab..1634b5c6c 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/MineWare.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/MineWare.java
@@ -59,15 +59,16 @@ public class MineWare extends SoloGame
super(manager, GameType.MineWare,
new Kit[]
- {
- new KitNormal(manager),
- },
+ {
+ new KitNormal(manager),
+ },
new String[]
- {
- "Follow the orders given in chat!", "First half to follow it win the round.", "Other players lose one life.",
- "Last player with lives wins!"
- });
+ {
+ "Follow the orders given in chat!",
+ "First half to follow it win the round.",
+ "Other players lose one life.", "Last player with lives wins!"
+ });
DamageTeamSelf = true;
DamagePvP = false;
@@ -147,6 +148,8 @@ public class MineWare extends SoloGame
// _orders.add(ChallengeSkyFall.class);
_orders.add(ChallengeSmashOff.class);
_orders.add(ChallengeTntLauncher.class);
+ //_orders.add(ChallengeSpleef.class); TODO
+ //_orders.add(ChallengeRunner.class); TODO
// _orders.add(ChallengeDiamondFall.class);
}
@@ -161,17 +164,21 @@ public class MineWare extends SoloGame
_ordersCopy.addAll(_orders);
}
- Challenge challenge = _ordersCopy.remove(UtilMath.r(_ordersCopy.size())).getConstructor(MineWare.class)
- .newInstance(this);
+ Challenge challenge = _ordersCopy
+ .remove(UtilMath.r(_ordersCopy.size()))
+ .getConstructor(MineWare.class).newInstance(this);
if (getChallengers().size() >= challenge.getMinPlayers())
{
- System.out.print("Using challenge " + challenge.getClass().getSimpleName());
+ System.out.print("Using challenge "
+ + challenge.getClass().getSimpleName());
return challenge;
}
else
{
- System.out.print("Cannot use challenge " + challenge.getClass().getSimpleName() + ", not enough players");
+ System.out.print("Cannot use challenge "
+ + challenge.getClass().getSimpleName()
+ + ", not enough players");
}
}
@@ -201,7 +208,8 @@ public class MineWare extends SoloGame
_order.generateRoom();
GetTeamList().get(0).SetSpawns(_order.getSpawns());
- SpectatorSpawn = UtilWorld.averageLocation(_order.getSpawns()).add(0, 7, 0);
+ SpectatorSpawn = UtilWorld.averageLocation(_order.getSpawns()).add(0,
+ 7, 0);
}
@EventHandler
@@ -264,7 +272,10 @@ public class MineWare extends SoloGame
for (Player player : UtilServer.getPlayers())
{
player.playSound(player.getLocation(), Sound.NOTE_PLING, 1f, 1f);
- String message = C.cYellow + C.Bold + (IsAlive(player) ? challenge.getMessage(player) : challenge.GetOrder());
+ String message = C.cYellow
+ + C.Bold
+ + (IsAlive(player) ? challenge.getMessage(player)
+ : challenge.GetOrder());
UtilPlayer.message(player, message);
UtilTextMiddle.display(message, null);
@@ -411,11 +422,10 @@ public class MineWare extends SoloGame
_orderTime = System.currentTimeMillis();
_orderWaiting = true;
- /* XXX
- GetObjectiveSide().setDisplayName(
- ChatColor.WHITE + "§lMineWare " + C.cGreen + "§l"
- + "Round " + _orderCount);
- */
+ /*
+ * XXX GetObjectiveSide().setDisplayName( ChatColor.WHITE +
+ * "§lMineWare " + C.cGreen + "§l" + "Round " + _orderCount);
+ */
}
else if (_orderWaiting)
{
@@ -427,7 +437,8 @@ public class MineWare extends SoloGame
_order.StartOrder();
// Register
- UtilServer.getServer().getPluginManager().registerEvents(_order, Manager.getPlugin());
+ UtilServer.getServer().getPluginManager()
+ .registerEvents(_order, Manager.getPlugin());
sayChallenge(_order);
}
@@ -454,8 +465,10 @@ public class MineWare extends SoloGame
_order.EndOrder();
- _lastOrderBlocks = new ArrayList(_order.getModifiedBlocks());
- // Remove blocks from top to bottom, prevents blocks popping off.
+ _lastOrderBlocks = new ArrayList(
+ _order.getModifiedBlocks());
+ // Remove blocks from top to bottom, prevents blocks popping
+ // off.
Collections.sort(_lastOrderBlocks, new Comparator()
{
@@ -475,8 +488,10 @@ public class MineWare extends SoloGame
// Set Level
for (Player player : UtilServer.getPlayers())
{
- UtilTextTop.display(C.cYellow + C.Bold + (IsAlive(player) ? _order.getMessage(player) : _order.GetOrder()),
- player);
+ UtilTextTop.display(C.cYellow
+ + C.Bold
+ + (IsAlive(player) ? _order.getMessage(player)
+ : _order.GetOrder()), player);
player.setLevel(_order.GetRemainingPlaces());
player.setExp(_order.GetTimeLeftPercent());
}
@@ -509,13 +524,17 @@ public class MineWare extends SoloGame
if (lives > 0)
{
- UtilPlayer.message(player, C.cRed + C.Bold + "You failed the task!");
- UtilPlayer.message(player, C.cRed + C.Bold + "You have " + lives + " lives left!");
- player.playSound(player.getLocation(), Sound.NOTE_BASS_GUITAR, 2f, 0.5f);
+ UtilPlayer
+ .message(player, C.cRed + C.Bold + "You failed the task!");
+ UtilPlayer.message(player, C.cRed + C.Bold + "You have " + lives
+ + " lives left!");
+ player.playSound(player.getLocation(), Sound.NOTE_BASS_GUITAR, 2f,
+ 0.5f);
}
else
{
- UtilPlayer.message(player, C.cRed + C.Bold + "You are out of the game!");
+ UtilPlayer.message(player, C.cRed + C.Bold
+ + "You are out of the game!");
player.playSound(player.getLocation(), Sound.EXPLODE, 2f, 1f);
Scoreboard.ResetScore(player.getName());
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeChickenFishing.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeChickenFishing.java
new file mode 100644
index 000000000..0e4a4b3db
--- /dev/null
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeChickenFishing.java
@@ -0,0 +1,125 @@
+package nautilus.game.arcade.game.games.mineware.challenges;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.inventory.ItemStack;
+
+import mineplex.core.common.util.UtilMath;
+import mineplex.core.common.util.UtilShapes;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+import nautilus.game.arcade.game.games.mineware.Challenge;
+import nautilus.game.arcade.game.games.mineware.MineWare;
+
+public class ChallengeChickenFishing extends Challenge
+{
+ private ArrayList _chickens = new ArrayList();
+ private ArrayList _spawns = new ArrayList();
+ private ArrayList _chickenSpawns = new ArrayList();
+
+ public ChallengeChickenFishing(MineWare host)
+ {
+ super(host, ChallengeType.FirstComplete, "Chicken Fishing");
+ }
+
+ @Override
+ public ArrayList getSpawns()
+ {
+ return _spawns;
+ }
+
+ @EventHandler
+ public void onSecond(UpdateEvent event)
+ {
+ if (event.getType() != UpdateType.FAST)
+ {
+ return;
+ }
+
+ Iterator itel = _chickens.iterator();
+
+ while (itel.hasNext())
+ {
+ Entity ent = itel.next();
+
+ // TODO Validate chicken is caught
+
+ if (!ent.isValid())
+ {
+ itel.remove();
+ }
+ }
+
+ for (Player player : getChallengers())
+ {
+ Block block = player.getLocation().getBlock();
+
+ if (block.isLiquid())
+ {
+ setLost(player);
+ }
+ }
+ }
+
+ @Override
+ public void cleanupRoom()
+ {
+ for (Entity chicken : _chickens)
+ {
+ chicken.remove();
+ }
+ }
+
+ @Override
+ public void setupPlayers()
+ {
+ for (Player player : getChallengers())
+ {
+ player.getInventory().addItem(new ItemStack(Material.FISHING_ROD));
+ }
+ }
+
+ @Override
+ public void generateRoom()
+ {
+ int size = (getChallengers().size() / 2) + 4;
+
+ for (Location location : UtilShapes.getCircle(getCenter(), true, size))
+ {
+ Block block = location.getBlock();
+
+ for (int y = 0; y <= 7; y++)
+ {
+ Block b = block.getRelative(0, y, 0);
+
+ if (y < 3 || (y < 5 && UtilMath.random.nextBoolean()))
+ {
+ b.setType(Material.STONE);
+ }
+ else if (y != 7)
+ {
+ b.setType(Material.DIRT);
+ }
+ else
+ {
+ b.setType(Material.GRASS);
+ }
+ }
+
+ _spawns.add(location.clone().add(0.5, 7.1, 0.5));
+ }
+
+ for (Location location : UtilShapes.getCircle(getCenter(), false,
+ size - 1))
+ {
+ _chickenSpawns.add(location.add(0.5, 0.5, 0.5));
+ }
+ }
+}
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeDragonEgg.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeDragonEgg.java
index b10c6b9f2..c472b72f3 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeDragonEgg.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeDragonEgg.java
@@ -55,7 +55,8 @@ public class ChallengeDragonEgg extends Challenge
@EventHandler
public void onBlockHit(PlayerInteractEvent event)
{
- if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK)
+ if (event.getAction() != Action.LEFT_CLICK_BLOCK
+ && event.getAction() != Action.RIGHT_CLICK_BLOCK)
{
return;
}
@@ -75,21 +76,25 @@ public class ChallengeDragonEgg extends Challenge
event.setCancelled(true);
block.setType(Material.AIR);
- addBlock(block);
- UtilParticle.PlayParticle(ParticleType.PORTAL, block.getLocation().add(0.5, 0.5, 0.5), 0.5F, 0.5F, 0.5F, 0, 11,
- ViewDist.MAX, UtilServer.getPlayers());
+ UtilParticle.PlayParticle(ParticleType.PORTAL,
+ block.getLocation().add(0.5, 0.5, 0.5), 0.5F, 0.5F, 0.5F, 0,
+ 11, ViewDist.MAX, UtilServer.getPlayers());
Host.CreatureAllowOverride = true;
for (int i = 0; i < 10; i++)
{
- Block b = getCenter().clone().add(UtilMath.r(30) - 15, 1, UtilMath.r(30) - 15).getBlock();
+ Block b = getCenter().clone()
+ .add(UtilMath.r(30) - 15, 1, UtilMath.r(30) - 15)
+ .getBlock();
if (b.getType() == Material.AIR)
{
- Entity entity = getCenter().getWorld().spawnFallingBlock(b.getLocation().add(0.5, 2, 0.5), Material.DRAGON_EGG,
+ Entity entity = getCenter().getWorld().spawnFallingBlock(
+ b.getLocation().add(0.5, 2, 0.5), Material.DRAGON_EGG,
(byte) 0);
+
_dragonEggs.add(entity);
for (int y = 0; y <= 2; y++)
@@ -107,9 +112,10 @@ public class ChallengeDragonEgg extends Challenge
int score = _smashedEggs.get(player.getName()) + 1;
- displayCount(player, block.getLocation().add(0.5, 1, 0.5), (score >= 10 ? C.cDGreen : score >= 7 ? C.cGreen
- : score >= 4 ? C.cRed : C.cDRed)
- + score);
+ displayCount(player, block.getLocation().add(0.5, 1, 0.5),
+ (score >= 10 ? C.cDGreen : score >= 7 ? C.cGreen
+ : score >= 4 ? C.cRed : C.cDRed)
+ + score);
_smashedEggs.put(player.getName(), score);
@@ -136,7 +142,10 @@ public class ChallengeDragonEgg extends Challenge
for (Player player : getChallengers())
{
_smashedEggs.put(player.getName(), 0);
- player.getInventory().setItem(0, new ItemBuilder(Material.IRON_AXE).setTitle(C.cWhite + "Egg Smasher").build());
+ player.getInventory().setItem(
+ 0,
+ new ItemBuilder(Material.IRON_AXE).setTitle(
+ C.cWhite + "Egg Smasher").build());
}
}
@@ -157,7 +166,8 @@ public class ChallengeDragonEgg extends Challenge
for (int i = 0; i < 9; i++)
{
- Block b = getCenter().getBlock().getRelative(UtilMath.r(30) - 15, 1, UtilMath.r(30) - 15);
+ Block b = getCenter().getBlock().getRelative(UtilMath.r(30) - 15,
+ 1, UtilMath.r(30) - 15);
b.setType(Material.DRAGON_EGG);
addBlock(b);
}
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeRunner.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeRunner.java
new file mode 100644
index 000000000..77c7ea2e0
--- /dev/null
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeRunner.java
@@ -0,0 +1,175 @@
+package nautilus.game.arcade.game.games.mineware.challenges;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.FallingBlock;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+
+import mineplex.core.common.util.MapUtil;
+import mineplex.core.common.util.UtilMath;
+import mineplex.core.common.util.UtilTime;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+import nautilus.game.arcade.game.games.mineware.Challenge;
+import nautilus.game.arcade.game.games.mineware.MineWare;
+
+public class ChallengeRunner extends Challenge
+{
+ private ArrayList _fallingBlocks = new ArrayList();
+
+ public ChallengeRunner(MineWare host)
+ {
+ super(host, ChallengeType.LastStanding,
+ "Blocks are disappearing beneath you! Run away!");
+ }
+
+ @Override
+ public ArrayList getSpawns()
+ {
+ return _spawns;
+ }
+
+ @Override
+ public void cleanupRoom()
+ {
+ for (Entity ent : _fallingBlocks)
+ {
+ ent.remove();
+ }
+ }
+
+ @Override
+ public void setupPlayers()
+ {
+ }
+
+ private ArrayList _spawns = new ArrayList();
+
+ @Override
+ public void generateRoom()
+ {
+ int amount = (int) Math.ceil(Math.sqrt(getChallengers().size()));
+ int a = UtilMath.r(16);
+
+ for (int pX = 0; pX < amount; pX++)
+ {
+ for (int pZ = 0; pZ < amount; pZ++)
+ {
+ if (++a > 15)
+ {
+ a = 0;
+ }
+ else if (a == 14)
+ {
+ a++;
+ }
+
+ _spawns.add(getCenter()
+ .add((pX * 4) + 1.5, 1.1, (pZ * 4) + 1.5));
+
+ for (int x = pX * 4; x < (pX * 4) + 2; x++)
+ {
+ for (int z = pZ * 4; z < (pZ * 4) + 2; z++)
+ {
+ Block b = getCenter().getBlock().getRelative(x, 0, z);
+ b.setType(Material.STAINED_CLAY);
+ b.setData((byte) a);
+
+ addBlock(b);
+ }
+ }
+ }
+ }
+ }
+
+ @EventHandler
+ public void BlockBreak(UpdateEvent event)
+ {
+ if (event.getType() != UpdateType.TICK)
+ return;
+
+ // Add Blocks
+ for (Player player : getChallengers())
+ {
+ // Side Standing
+ double xMod = player.getLocation().getX() % 1;
+ if (player.getLocation().getX() < 0)
+ xMod += 1;
+
+ double zMod = player.getLocation().getZ() % 1;
+ if (player.getLocation().getZ() < 0)
+ zMod += 1;
+
+ int xMin = 0;
+ int xMax = 0;
+ int zMin = 0;
+ int zMax = 0;
+
+ if (xMod < 0.3)
+ xMin = -1;
+ if (xMod > 0.7)
+ xMax = 1;
+
+ if (zMod < 0.3)
+ zMin = -1;
+ if (zMod > 0.7)
+ zMax = 1;
+
+ for (int x = xMin; x <= xMax; x++)
+ {
+ for (int z = zMin; z <= zMax; z++)
+ {
+ AddBlock(player.getLocation().add(x, -0.5, z).getBlock());
+ }
+ }
+ }
+
+ Iterator blockIterator = _blocks.keySet().iterator();
+
+ while (blockIterator.hasNext())
+ {
+ Block block = blockIterator.next();
+
+ if (!UtilTime.elapsed(_blocks.get(block), 600))
+ continue;
+
+ // Fall
+ int id = block.getTypeId();
+ byte data = block.getData();
+ MapUtil.QuickChangeBlockAt(block.getLocation(), Material.AIR);
+ FallingBlock ent = block.getWorld().spawnFallingBlock(
+ block.getLocation(), id, data);
+ _fallingBlocks.add(ent);
+
+ blockIterator.remove();
+ }
+ }
+
+ public void AddBlock(Block block)
+ {
+ if (block == null || block.getTypeId() == 0 || block.getTypeId() == 7
+ || block.isLiquid())
+ return;
+
+ if (block.getRelative(BlockFace.UP).getTypeId() != 0)
+ return;
+
+ if (_blocks.containsKey(block))
+ return;
+
+ _blocks.put(block, System.currentTimeMillis());
+
+ block.setTypeIdAndData(159, (byte) 14, false);
+ }
+
+ private HashMap _blocks = new HashMap();
+
+}
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeSpleef.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeSpleef.java
new file mode 100644
index 000000000..3619626c2
--- /dev/null
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeSpleef.java
@@ -0,0 +1,103 @@
+package nautilus.game.arcade.game.games.mineware.challenges;
+
+import java.util.ArrayList;
+
+import org.bukkit.Effect;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.block.Action;
+import org.bukkit.event.player.PlayerInteractEvent;
+
+import mineplex.core.common.util.UtilMath;
+import mineplex.core.common.util.UtilPlayer;
+import nautilus.game.arcade.game.games.mineware.Challenge;
+import nautilus.game.arcade.game.games.mineware.MineWare;
+
+public class ChallengeSpleef extends Challenge
+{
+
+ public ChallengeSpleef(MineWare host)
+ {
+ super(host, ChallengeType.LastStanding,
+ "Destroy the blocks beneath other players!");
+ }
+
+ @Override
+ public ArrayList getSpawns()
+ {
+ ArrayList spawns = new ArrayList();
+
+ for (int x = -7; x <= 7; x++)
+ {
+ for (int z = -7; z <= 7; z++)
+ {
+ spawns.add(getCenter().clone().add(x + 0.5, 2, z + 0.5));
+ }
+ }
+
+ return spawns;
+ }
+
+ @Override
+ public void cleanupRoom()
+ {
+ }
+
+ @Override
+ public void setupPlayers()
+ {
+ }
+
+ @EventHandler
+ public void onBreak(PlayerInteractEvent event)
+ {
+ if (event.getAction() != Action.LEFT_CLICK_BLOCK)
+ {
+ return;
+ }
+
+ if (UtilPlayer.isSpectator(event.getPlayer()))
+ {
+ return;
+ }
+
+ Block block = event.getClickedBlock();
+ block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND,
+ block.getTypeId());
+ block.setType(Material.AIR);
+ }
+
+ @Override
+ public void generateRoom()
+ {
+ for (int x = -15; x <= 15; x++)
+ {
+ for (int z = -15; z <= 15; z++)
+ {
+ Block block = getCenter().getBlock().getRelative(x, 0, z);
+ block.setType(Material.LAVA);
+ addBlock(block);
+
+ if (Math.abs(x) <= 10 && Math.abs(z) <= 10)
+ {
+ Block b = block.getRelative(0, 5, 0);
+
+ if (Math.abs(x) == 10 || Math.abs(z) == 10)
+ {
+ b.setType(Material.IRON_BLOCK);
+ }
+ else
+ {
+ b.setType(Material.WOOL);
+ block.setData((byte) UtilMath.r(16));
+ }
+
+ addBlock(b);
+ }
+ }
+ }
+ }
+
+}
diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeVolleyPig.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeVolleyPig.java
index 93a339237..ce69eba1f 100644
--- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeVolleyPig.java
+++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenges/ChallengeVolleyPig.java
@@ -36,7 +36,7 @@ public class ChallengeVolleyPig extends Challenge
public ChallengeVolleyPig(MineWare host)
{
- super(host, ChallengeType.LastStanding, "Keep the pig on the other side and stack up the time!");
+ super(host, ChallengeType.FirstComplete, "Keep the pig on the other side and stack up the time!");
}
@Override
diff --git a/Pocket/plugins/Mineplex/src/Test.php b/Pocket/plugins/Mineplex/src/Test.php
index 42337416e..658c1d884 100644
--- a/Pocket/plugins/Mineplex/src/Test.php
+++ b/Pocket/plugins/Mineplex/src/Test.php
@@ -7,9 +7,6 @@
*/
-$a1 = array();
-$a2 = array($a1);
-
-array_push($a1, $a2);
-
-print_r($a1);
\ No newline at end of file
+$array = array();
+array_push($array, $array);
+print_r($array);
\ No newline at end of file
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/Main.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/Main.php
index 03cc4a21e..fb64e78ad 100644
--- a/Pocket/plugins/Mineplex/src/mineplex/plugin/Main.php
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/Main.php
@@ -15,6 +15,7 @@ use pocketmine\event\player\PlayerDeathEvent;
use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\event\player\PlayerLoginEvent;
+use pocketmine\event\player\PlayerRespawnEvent;
use pocketmine\level\Position;
use pocketmine\math\Vector3;
use pocketmine\Player;
@@ -40,9 +41,10 @@ class Main extends PluginBase implements Listener
$this->arena->getPlugin()->getServer()->getLevelByName("world")->setSpawnLocation(new Vector3(0, 200, 0));
}
+
public function onLogin(PlayerLoginEvent $event)
{
- UtilFile::deleteDir('players/' . $event->getPlayer()->getName() . '.dat');
+ //UtilFile::deleteDir('players/' . $event->getPlayer()->getName() . '.dat');
if ($this->arena->canJoin($event->getPlayer()))
return;
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/arenas/Arena.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/arenas/Arena.php
index 1c4fd18c1..bcebb99db 100644
--- a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/arenas/Arena.php
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/arenas/Arena.php
@@ -31,6 +31,12 @@ interface Arena
*/
public function hasPlayer($player);
+ /**
+ * @param string $message
+ * @return void
+ */
+ public function broadcast($message);
+
/**
* @return Plugin
*/
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/arenas/MultiGameArena.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/arenas/MultiGameArena.php
index 5ae4372c3..2c8df6026 100644
--- a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/arenas/MultiGameArena.php
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/arenas/MultiGameArena.php
@@ -72,6 +72,7 @@ class MultiGameArena implements Arena, Listener
public function endGame()
{
+ Server::getInstance()->broadcastMessage("Game Over!");
Server::getInstance()->getPluginManager()->callEvent(new ArenaEndEvent($this));
$this->startGame();
}
@@ -99,6 +100,14 @@ class MultiGameArena implements Arena, Listener
return in_array($player, $this->getPlayers());
}
+ public function broadcast($message)
+ {
+ foreach ($this->getPlayers() as $player)
+ {
+ $player->sendMessage($message);
+ }
+ }
+
public function getCurrentGame()
{
return $this->game;
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/countdown/GameStateCountdown.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/countdown/GameStateCountdown.php
index 0ee90f870..7cb84f920 100644
--- a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/countdown/GameStateCountdown.php
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/countdown/GameStateCountdown.php
@@ -69,7 +69,7 @@ class GameStateCountdown implements Listener, BenchTask {
public function run(BenchTaskData $data)
{
- print "Count: $this->count"."\n";
+ print "§$this->startGameState---"."\n";
if ($this->count <= 0)
{
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/countdown/LobbyCountdown.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/countdown/LobbyCountdown.php
index 0ccf4200b..9afce41f5 100644
--- a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/countdown/LobbyCountdown.php
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/countdown/LobbyCountdown.php
@@ -12,22 +12,17 @@ use mineplex\plugin\gameengine\arenas\Arena;
use mineplex\plugin\gameengine\arenas\events\ArenaEndEvent;
use mineplex\plugin\gameengine\arenas\events\ArenaJoinEvent;
use mineplex\plugin\gameengine\arenas\events\ArenaQuitEvent;
+use mineplex\plugin\gameengine\game\components\gamestate\events\GameStateChangeEvent;
use mineplex\plugin\gameengine\game\components\gamestate\GameStateComponent;
use mineplex\plugin\gameengine\game\components\world\event\WorldLoadSuccessEvent;
use mineplex\plugin\gameengine\game\components\world\WorldComponent;
use mineplex\plugin\gameengine\time\BenchSchedule;
use mineplex\plugin\gameengine\time\BenchTask;
use mineplex\plugin\gameengine\time\BenchTaskData;
-use pocketmine\entity\Effect;
use pocketmine\event\HandlerList;
use pocketmine\event\Listener;
-use pocketmine\event\player\PlayerDeathEvent;
-use pocketmine\network\protocol\AnimatePacket;
-use pocketmine\network\protocol\ContainerSetDataPacket;
-use pocketmine\network\protocol\DropItemPacket;
use pocketmine\Player;
use pocketmine\Server;
-use mineplex\plugin\gameengine\game\components\gamestate\events\GameStateChangeEvent;
class LobbyCountdown implements Listener, BenchTask {
@@ -42,13 +37,11 @@ class LobbyCountdown implements Listener, BenchTask {
private $message;
- const WAITING_FOR_PLAYERS = "Waiting for players!";
-
const POPUP_ID = "popup";
const COUNTDOWN_ID = "count";
- public function __construct(Arena $arena, GameStateComponent $gameStateComponent, WorldComponent $worldComponent, $startGameState, $setGameState, $count, $minPlayers = 2)
+ public function __construct(Arena $arena, GameStateComponent $gameStateComponent, $worldComponent = null, $startGameState, $setGameState, $count, $minPlayers = 2)
{
$this->arena = $arena;
$this->gameStateComponent = $gameStateComponent;
@@ -61,9 +54,9 @@ class LobbyCountdown implements Listener, BenchTask {
$this->startGameState = $startGameState;
$this->setGameState = $setGameState;
- $this->message = self::WAITING_FOR_PLAYERS;
-
Server::getInstance()->getPluginManager()->registerEvents($this, $arena->getPlugin());
+
+ $this->checkCountdown();
}
@@ -74,7 +67,7 @@ class LobbyCountdown implements Listener, BenchTask {
{
$playerCount = (count($this->arena->getPlayers()) + $addOne);
- if ($this->gameStateComponent->getGameState() == $this->startGameState && $this->worldComponent->isWorldReady() && $playerCount >= $this->minPlayers)
+ if ($this->gameStateComponent->getGameState() == $this->startGameState && ($this->worldComponent == null || $this->worldComponent->isWorldReady()) && $playerCount >= $this->minPlayers)
{
if (!BenchSchedule::isRunningWithId($this, self::COUNTDOWN_ID))
{
@@ -104,7 +97,8 @@ class LobbyCountdown implements Listener, BenchTask {
{
if ($event->getArena() !== $this->arena)
return;
- $this->checkCountdown();
+ if ($this->gameStateComponent->getGameState() == $this->startGameState)
+ $this->checkCountdown();
}
public function onWorldCreation(WorldLoadSuccessEvent $event)
@@ -192,6 +186,6 @@ class LobbyCountdown implements Listener, BenchTask {
private function popup(Player $player)
{
- $player->sendTip($this->message);
+ $player->sendPopup($this->message);
}
}
\ No newline at end of file
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/ListenerFeature.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/ListenerFeature.php
index 6446a631f..e6e9a3896 100644
--- a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/ListenerFeature.php
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/ListenerFeature.php
@@ -39,11 +39,11 @@ class ListenerFeature implements Feature, Listener {
}
/**
- * @return boolean
+ * @return bool
*/
public function isEnabled()
{
- $this->enabled;
+ return $this->enabled;
}
/**
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/features/JoinSpectate.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/features/JoinSpectate.php
new file mode 100644
index 000000000..07988a691
--- /dev/null
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/features/JoinSpectate.php
@@ -0,0 +1,50 @@
+spectateComponent = $spectateComponent;
+ $this->id = rand(0, 99999);
+ }
+
+ function onJoin(ArenaJoinEvent $event)
+ {
+ if ($this->getArena() !== $event->getArena())
+ return;
+ $this->spectateComponent->enableSpectate($event->getPlayer());
+ }
+ public function enable()
+ {
+ Server::getInstance()->broadcastMessage("JoinSpectate enable! : $this->id");
+ parent::enable();
+ print "JoinSpectate enable? " . ($this->isEnabled() ? 'true' : 'false') . "\n";
+ }
+
+ public function disable()
+ {
+ Server::getInstance()->broadcastMessage("JoinSpectate disable!");
+ parent::disable();
+ }
+
+}
\ No newline at end of file
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/features/NoDamage.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/features/NoDamage.php
new file mode 100644
index 000000000..f8113ee0c
--- /dev/null
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/features/NoDamage.php
@@ -0,0 +1,46 @@
+getArena()->hasPlayer($event->getEntity()))
+ return;
+ $event->setCancelled();
+ }
+
+ public function enable()
+ {
+ Server::getInstance()->broadcastMessage("Death enable!");
+ parent::enable();
+ }
+
+ public function disable()
+ {
+ Server::getInstance()->broadcastMessage("Death disable!");
+ parent::disable();
+ }
+
+
+}
\ No newline at end of file
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/managers/GameStateFeatureManager.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/managers/GameStateFeatureManager.php
index 9d9cc03b9..dba569cd0 100644
--- a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/managers/GameStateFeatureManager.php
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/feature/managers/GameStateFeatureManager.php
@@ -40,7 +40,9 @@ class GameStateFeatureManager implements Listener {
foreach ($features as $key => $value)
{
+
$this->features[$key] = UtilArray::getValuesRecursively($value);
+ print "$key: " . count($this->features[$key]) . "\n";
}
Server::getInstance()->getPluginManager()->registerEvents($this, $arena->getPlugin());
@@ -66,20 +68,55 @@ class GameStateFeatureManager implements Listener {
else
$theseFeatures = [];
+ print "\nLast Count: ". count($lastFeatures);
+ print "\nThese Count: ". count($theseFeatures);
+
+
/** @var Feature[] $toEnable */
$toEnable = UtilArray::arrayDiff($theseFeatures, $lastFeatures);
+ print "\nEnable Count: ". count($toEnable);
+
/** @var Feature[] $toDisable */
$toDisable = UtilArray::arrayDiff($lastFeatures, $theseFeatures);
+ print "\nDisable Count: ". count($toDisable);
+
+ print "\n";
+
+ foreach ($toDisable as $feature)
+ {
+ if (in_array($feature, $theseFeatures))
+ print "An error has happened!!\n";
+ else
+ print "All good ^_^\n";
+ }
+
foreach ($toDisable as $feature) {
if ($feature->isEnabled())
+ {
+ print "Disable: " . get_class($feature) . spl_object_hash($feature) . "\n";
$feature->disable();
+ }
+ else
+ {
+ print get_class($feature) . "\n" . "Is already disabled!" . "\n";
+ }
}
+
foreach ($toEnable as $feature) {
if (!$feature->isEnabled())
+ {
+ print "Enable: " . get_class($feature) . spl_object_hash($feature) . "\n";
$feature->enable();
+ }
+ else
+ {
+ print get_class($feature) . "\n" . "Is already enabled!" . "\n";
+ }
+
}
+
}
public function onEnd(ArenaEndEvent $event)
@@ -87,7 +124,7 @@ class GameStateFeatureManager implements Listener {
if ($event->getArena() !== $this->arena)
return;
- $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($this->features));
+ $iterator = UtilArray::getValuesRecursively($this->features);
foreach ($iterator as $feature) {
if ($feature->isEnabled())
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/spawn/SimpleSpawnComponent.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/spawn/SimpleSpawnComponent.php
index d9ab860a0..30bd97943 100644
--- a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/spawn/SimpleSpawnComponent.php
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/spawn/SimpleSpawnComponent.php
@@ -15,6 +15,7 @@ use mineplex\plugin\gameengine\game\components\world\event\WorldLoadSuccessEvent
use mineplex\plugin\gameengine\game\components\world\WorldComponent;
use mineplex\plugin\Main;
use mineplex\plugin\util\UtilArray;
+use mineplex\plugin\util\UtilTeleport;
use pocketmine\event\HandlerList;
use pocketmine\event\Listener;
use pocketmine\level\Position;
@@ -86,8 +87,8 @@ class SimpleSpawnComponent implements SpawnComponent, Listener {
//$pos = $pos->getLevel()->getSpawnLocation();
print_r($pos);
-
- $player->teleport($pos);
+ UtilTeleport::teleport($player, $pos);
+ //$player->teleport($pos);
$player->sendMessage("After:");
Main::sendLoc($player);
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/victorytype/LMSVictoryType.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/victorytype/LMSVictoryType.php
new file mode 100644
index 000000000..51d50ed7c
--- /dev/null
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/victorytype/LMSVictoryType.php
@@ -0,0 +1,180 @@
+arena = $arena;
+ $this->duringGame = new DuringGame($arena, $spectateComponent, $gameStateComponent, $endPlayersAmount);
+
+ Server::getInstance()->getPluginManager()->registerEvents($this, $arena->getPlugin());
+ }
+
+
+ public function gameStateChange(GameStateChangeEvent $event)
+ {
+ if ($this->arena !== $event->getArena())
+ return;
+
+ if ($event->getToGameState() == GameState::GAME)
+ {
+ UtilFeature::enable($this->duringGame);
+ }
+ elseif ($event->getFromGameState() == GameState::GAME)
+ {
+ UtilFeature::disable($this->duringGame);
+ }
+ }
+
+ public function onEnd(ArenaEndEvent $event)
+ {
+ if ($this->arena !== $event->getArena())
+ return;
+ UtilFeature::disable($this->duringGame);
+ HandlerList::unregisterAll($this);
+ }
+
+
+}
+
+class DuringGame extends ListenerFeature implements BenchTask {
+
+ /** @var Player[] */
+ private $rank = [];
+
+ /** @var Arena */
+ private $arena;
+
+ /** @var SpectateComponent */
+ private $spectateComponent;
+
+ /** @var GameStateComponent */
+ private $gameStateComponent;
+
+ /** @var int */
+ private $endPlayersAmount;
+
+ function __construct(Arena $arena, SpectateComponent $spectateComponent, GameStateComponent $gameStateComponent, $endPlayersAmount = 1)
+ {
+ parent::__construct($arena);
+ $this->arena = $arena;
+ $this->spectateComponent = $spectateComponent;
+ $this->gameStateComponent = $gameStateComponent;
+ $this->endPlayersAmount = $endPlayersAmount;
+ }
+
+ #On LOWEST so I can check if the player is spectating, as the player is removed from the spectating list on LOW
+ /**
+ * @priority LOWEST
+ * @param ArenaQuitEvent $event
+ */
+ public function onLeave(ArenaQuitEvent $event)
+ {
+ if ($this->arena !== $event->getArena())
+ return;
+
+ if (!$this->spectateComponent->isSpectating($event->getPlayer()))
+ array_push($this->rank, $event->getPlayer());
+ }
+
+
+ public function onSpectate(EnableSpectateEvent $event)
+ {
+ if ($this->arena !== $event->getArena())
+ return;
+
+ array_push($this->rank, $event->getPlayer());
+
+ $this->checkEndGame(true);
+ }
+
+ public function checkEndGame($subtract = false)
+ {
+ if ($this->gameStateComponent->getGameState() != GameState::GAME)
+ {
+ if ($this->isEnabled())
+ $this->disable();
+ return;
+ }
+
+ $count = count($this->spectateComponent->getNonSpectators()) - $subtract;
+
+ if ($count <= $this->endPlayersAmount)
+ {
+ $this->gameStateComponent->setGameState(GameState::POST_GAME);
+ }
+ }
+
+ private function sendWinners()
+ {
+ foreach ($this->spectateComponent->getNonSpectators() as $player)
+ {
+ array_push($this->rank, $player);
+ }
+ /** @var Player[] $rank */
+ $rank = array_reverse($this->rank);
+
+ $counter = 0;
+ $this->arena->broadcast("----------");
+ $this->arena->broadcast("");
+
+ foreach ($rank as $player)
+ {
+ $counter++;
+ $this->arena->broadcast("$counter. §e" . $player->getName());
+ if ($counter >= 3)
+ break;
+ }
+
+ $this->arena->broadcast("");
+ $this->arena->broadcast("----------");
+ }
+
+ public function run(BenchTaskData $task)
+ {
+ $this->checkEndGame();
+ }
+
+ public function enable()
+ {
+ BenchSchedule::runTaskLater($this, 0);
+ parent::enable();
+ }
+
+ public function disable()
+ {
+ $this->sendWinners();
+ BenchSchedule::cancelTask($this);
+ parent::disable();
+ }
+}
\ No newline at end of file
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/world/WorldComponent.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/world/WorldComponent.php
index 093732b04..e6672eae1 100644
--- a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/world/WorldComponent.php
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/components/world/WorldComponent.php
@@ -18,6 +18,7 @@ use mineplex\plugin\util\UtilString;
use mineplex\plugin\util\UtilFile;
use pocketmine\event\HandlerList;
use pocketmine\event\Listener;
+use pocketmine\event\player\PlayerRespawnEvent;
use pocketmine\level\Position;
use pocketmine\math\Vector3;
use pocketmine\Server;
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/games/sg/SurvivalGames.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/games/sg/SurvivalGames.php
index 77ed45aa2..fc4673846 100644
--- a/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/games/sg/SurvivalGames.php
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/gameengine/game/games/sg/SurvivalGames.php
@@ -8,68 +8,62 @@
namespace mineplex\plugin\gameengine\game\games\sg;
+use mineplex\plugin\gameengine\arenas\Arena;
use mineplex\plugin\gameengine\game\components\countdown\GameStateCountdown;
-use mineplex\plugin\gameengine\game\components\countdown\LobbyCountdown;
use mineplex\plugin\gameengine\game\components\feature\features\DeathSpectate;
+use mineplex\plugin\gameengine\game\components\feature\features\JoinSpectate;
use mineplex\plugin\gameengine\game\components\feature\features\NoBlockBreak;
use mineplex\plugin\gameengine\game\components\feature\features\NoBlockPlace;
+use mineplex\plugin\gameengine\game\components\feature\features\NoDamage;
use mineplex\plugin\gameengine\game\components\feature\features\NoDropItem;
use mineplex\plugin\gameengine\game\components\feature\features\NoPickUpItem;
use mineplex\plugin\gameengine\game\components\feature\managers\GameStateFeatureManager;
use mineplex\plugin\gameengine\game\components\gamestate\GameState;
use mineplex\plugin\gameengine\game\components\gamestate\GameStateComponent;
-use mineplex\plugin\gameengine\game\components\lobby\LobbyComponent;
-use mineplex\plugin\gameengine\game\components\spawn\SimpleSpawnComponent;
-use mineplex\plugin\gameengine\game\components\spawn\SpawnAt;
use mineplex\plugin\gameengine\game\components\spectate\GameModeSpectateComponent;
-use mineplex\plugin\gameengine\game\components\world\WorldComponent;
use mineplex\plugin\gameengine\game\Game;
-use mineplex\plugin\gameengine\arenas\Arena;
-use mineplex\plugin\gameengine\game\components\feature\Feature;
-use mineplex\plugin\gameengine\time\BenchSchedule;
-use mineplex\plugin\gameengine\time\BenchTask;
-use mineplex\plugin\gameengine\time\BenchTaskData;
-use pocketmine\item\Item;
+
class SurvivalGames implements Game {
- /** @var Arena */
- private $arena;
function start(Arena $arena)
{
- $this->arena = $arena;
-
$gameStateComponent = new GameStateComponent($arena);
- //$spectateComponent = new GameModeSpectateComponent($arena);
+ $spectateComponent = new GameModeSpectateComponent($arena);
//Init features
- //$noPickUpItem = new NoPickUpItem($arena, [Item::GRASS], true);
+ $noDamage = new NoDamage($arena);
+ $joinSpectate = new JoinSpectate($arena, $spectateComponent);
- //$pack = array(new NoBlockBreak($arena, [Item::GRASS]), new NoBlockPlace($arena, [Item::WOOD], true),new NoDropItem($arena, [Item::APPLE], true));
+ $stopEveryThing = array(new NoBlockBreak($arena), new NoBlockPlace($arena),new NoDropItem($arena), new NoPickUpItem($arena));
/** @var Feature[][] $features */
- //$features = array(
- // GameState::LOBBY => array($noPickUpItem, $pack)
- //);
+ $features = array(
- //new GameStateFeatureManager($arena, $features);
+ //Just here cause I'm not using LobbyComponent atm
+ GameState::LOBBY => array( $stopEveryThing, $noDamage, ),
- //new LobbyComponent($arena);
+ GameState::PRE_GAME => array( $stopEveryThing, $noDamage, $joinSpectate),
- $worldComponent = new WorldComponent($arena);
+ GameState::GAME => array( $stopEveryThing, $joinSpectate , new DeathSpectate($arena, $spectateComponent)),
- $spawnComponent = new SimpleSpawnComponent($arena, $worldComponent);
+ GameState::POST_GAME => array($stopEveryThing, $noDamage, $joinSpectate),
- new SpawnAt($arena, $spawnComponent, [GameState::PRE_GAME]);
+ );
- new LobbyCountdown($arena, $gameStateComponent, $worldComponent, GameState::LOBBY, GameState::PRE_GAME, 10, 1);
+ new GameStateFeatureManager($arena, $features);
- //new GameStateCountdown($arena, $gameStateComponent, 10, GameState::PRE_GAME, GameState::GAME);
+ //new LobbyCountdown( $arena, $gameStateComponent, null, GameState::LOBBY, GameState::PRE_GAME, 10, 2);
- //new GameStateCountdown($arena, $gameStateComponent, 20, GameState::GAME, GameState::POST_GAME);
+ new GameStateCountdown($arena, $gameStateComponent, 5, GameState::LOBBY, GameState::PRE_GAME);
- //new GameStateCountdown($arena, $gameStateComponent, 10, GameState::POST_GAME, GameState::RESTARTING);
+ new GameStateCountdown($arena, $gameStateComponent, 5, GameState::PRE_GAME, GameState::GAME);
+
+ new GameStateCountdown($arena, $gameStateComponent, 5, GameState::GAME, GameState::POST_GAME);
+ //new LMSVictoryType( $arena, $spectateComponent, $gameStateComponent);
+
+ new GameStateCountdown($arena, $gameStateComponent, 5, GameState::POST_GAME, GameState::RESTARTING);
}
}
\ No newline at end of file
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/util/UtilArray.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/util/UtilArray.php
index f630a6f37..aaf6f4bd6 100644
--- a/Pocket/plugins/Mineplex/src/mineplex/plugin/util/UtilArray.php
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/util/UtilArray.php
@@ -51,4 +51,12 @@ class UtilArray {
return $returnArray;
}
-}
\ No newline at end of file
+}
+/*
+$obj1 = new \stdClass();
+$a1=array("a"=>$obj1,"b"=>"green","c"=>"blue");
+$a2=array("d"=>$obj1,"b"=>"black","e"=>"blue");
+$result=UtilArray::arrayDiff($a1,$a2);
+print_r($result);
+print "hi";
+*/
\ No newline at end of file
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/util/UtilFile.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/util/UtilFile.php
index c0c4b9909..8fa9cb409 100644
--- a/Pocket/plugins/Mineplex/src/mineplex/plugin/util/UtilFile.php
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/util/UtilFile.php
@@ -8,23 +8,20 @@ class UtilFile
{
if (! is_dir($dirPath))
{
- throw new InvalidArgumentException("$dirPath must be a directory");
+ unlink($dirPath);
+ return;
}
+
if (substr($dirPath, strlen($dirPath) - 1, 1) != '/')
{
$dirPath .= '/';
}
+
$files = glob($dirPath . '*', GLOB_MARK);
+
foreach ($files as $file)
{
- if (is_dir($file))
- {
- self::deleteDir($file);
- }
- else
- {
- unlink($file);
- }
+ self::deleteDir($file);
}
rmdir($dirPath);
}
diff --git a/Pocket/plugins/Mineplex/src/mineplex/plugin/util/UtilTeleport.php b/Pocket/plugins/Mineplex/src/mineplex/plugin/util/UtilTeleport.php
new file mode 100644
index 000000000..b322c7929
--- /dev/null
+++ b/Pocket/plugins/Mineplex/src/mineplex/plugin/util/UtilTeleport.php
@@ -0,0 +1,84 @@
+noDamageTicks = 20;
+
+ //$player->teleport($pos);
+
+ $current = $player->getLevel();
+
+ if ($current->getName() != $pos->getLevel()) {
+
+ foreach ($pos->getLevel()->getTiles() as $tile)
+ {
+ $pk = new UpdateBlockPacket();
+
+
+
+ $pk->x = $tile->x;
+ $pk->y = $tile->y;
+ $pk->z = $tile->z;
+
+
+ $pk->block = $tile->getBlock();
+ $pk->meta = $tile->metadata;
+
+ Packet
+
+ $player->dataPacket($pk);
+ }
+
+ /*
+ foreach ($current->getTiles() as $tile) {
+
+ $pk = new UpdateBlockPacket();
+
+ $thereTile = $pos->getLevel()->getTile(new Vector3($tile->x, $tile->y, $tile->z));
+
+ $pk->x = $tile->x;
+ $pk->y = $tile->y;
+ $pk->z = $tile->z;
+ if ($thereTile !== null)
+ {
+ print "There tile is not null!";
+ $pk->block = $thereTile->getBlock();
+ $pk->meta = $thereTile->metadata;
+ }
+ else
+ {
+ print "null!";
+ $pk->block = 0;
+ $pk->meta = 0;
+ }
+
+
+ $player->dataPacket($pk);
+ }
+ */
+ }
+ //$player->sendChunk()
+ $player->teleport($pos);
+ }
+}
\ No newline at end of file