diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/BoosterRing.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/BoosterRing.java index 0607c8cae..c73449e2e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/BoosterRing.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/BoosterRing.java @@ -41,8 +41,8 @@ import nautilus.game.arcade.game.Game.GameState; */ public class BoosterRing extends Crumbleable implements Listener { - private static int MAX_RING_BOUNDS = 15; - private static int SEARCH_OUTER_RING_RANGE = 10; + private static int MAX_RING_BOUNDS = 18; + private static int SEARCH_OUTER_RING_RANGE = 12; private Game _host; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/Crumbleable.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/Crumbleable.java index ef9ef539c..eb1f5d2b9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/Crumbleable.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/Crumbleable.java @@ -5,6 +5,7 @@ import java.util.HashSet; import net.minecraft.server.v1_8_R3.Chunk; +import org.bukkit.DyeColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -125,8 +126,6 @@ public abstract class Crumbleable crumblePercentage(); - Material material = replacements[UtilMath.r(replacements.length)]; - if (_realBlocks.isEmpty()) { crumbledAway(); @@ -148,6 +147,7 @@ public abstract class Crumbleable for (int i = 0; i < blocks; i++) { + Material material = replacements[UtilMath.r(replacements.length)]; if (_realBlocks.isEmpty()) { crumbledAway(); @@ -168,7 +168,16 @@ public abstract class Crumbleable || toRemove.getBlock().getType() == Material.STATIONARY_LAVA) continue; - MapUtil.ChunkBlockChange(toRemove, material.getId(), (byte) 0, false); + byte id = 0; + + if (toRemove.getBlock().getType() == Material.STAINED_GLASS || + toRemove.getBlock().getType() == Material.GLASS) + { + material = Material.STAINED_GLASS; + id = DyeColor.BLACK.getData(); + } + + MapUtil.ChunkBlockChange(toRemove, material.getId(), id, false); _chunksToUpdate.add(((CraftChunk) toRemove.getChunk()).getHandle()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/Island.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/Island.java index e2d37b93e..55d3f74ed 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/Island.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/Island.java @@ -212,7 +212,7 @@ public class Island extends Crumbleable if (UtilMath.offset2d(location, _location) > _bounds + 1) return false; - for (int y = ((int) (Math.round(_location.getY()) - _height)); y <= _location.getBlockY(); y++) + for (int y = (_location.getBlockY() - _height); y <= _location.getBlockY(); y++) { if (location.getBlockY() == y) return true; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/Skyfall.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/Skyfall.java index b1d270fa1..d2f9223e6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/Skyfall.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/skyfall/Skyfall.java @@ -42,6 +42,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import com.avaje.ebeaninternal.server.persist.dml.UpdatePlan; import com.mineplex.anticheat.checks.move.Glide; import com.mineplex.anticheat.checks.move.HeadRoll; import com.mineplex.anticheat.checks.move.Speed; @@ -105,8 +106,10 @@ public abstract class Skyfall extends Game private static final long CHEST_REFILL_TIME = 1000*60*3; // 3 minutes private static final long CHEST_REFILL_ANNOUNCE_TIME = 1000*60*3; // 3 minutes private static final long ELYTRA_TAKEAWAY = 1000; + private static final int ROT_START = 256; + private static final int ROT_Y_OFFSET = 25; - private static final long ISLAND_ROT_TIME = 1000*60*5; // 3 Minutes + private static final long ISLAND_ROT_TIME = 1000*60*5; // 5 Minutes private static final int RING_CRUMBLE_RATE = 10; @@ -157,6 +160,8 @@ public abstract class Skyfall extends Game private boolean _supplyOpened; + private double _rotY; + //private int _ringCrumbleRate; public Skyfall(ArcadeManager manager, GameType type) @@ -238,6 +243,8 @@ public abstract class Skyfall extends Game _bigIslandBounds = 25; _bigIslandHeight = 15; + + _rotY = ROT_START; } @EventHandler @@ -246,6 +253,9 @@ public abstract class Skyfall extends Game if(GetState() != GameState.Live) return; + if (!UtilServer.isTestServer()) + return; + if(event.getMessage().contains("/Rate")) { int rate = Integer.parseInt(event.getMessage().split(" ")[1]); @@ -255,6 +265,13 @@ public abstract class Skyfall extends Game return; } + if(event.getMessage().contains("/Rot")) + { + UtilPlayer.message(event.getPlayer(), "Current Rot value " + _rotY); + event.setCancelled(true); + return; + } + if(event.getMessage().contains("/Boost")) { float rate = Float.parseFloat(event.getMessage().split(" ")[1]); @@ -398,55 +415,87 @@ public abstract class Skyfall extends Game } } + @EventHandler + public void lowerRot(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC_05) + return; + + if (!IsLive()) + return; + + if (_rotY <= (0 - ROT_Y_OFFSET)) + return; + + long startTime = GetStateTime() + MAP_CRUMBLE_DELAY; + //System.out.println("starttime " + startTime); + double current = System.currentTimeMillis() - startTime; + //System.out.println("current " + current); + + double percentage = current/((double) ISLAND_ROT_TIME); + //System.out.println("precentage " + percentage); + double value = ROT_START * percentage; + //System.out.println("value " + value); + + _rotY = (ROT_START - value); + } + public ArrayList islandCrumble() { ArrayList islands = new ArrayList<>(); + + for (Island island : _islands.get(_upperIsland).keySet()) { if (island.isCrumbledAway()) islands.add(island); - Material[] mats = new Material[]{Material.COAL_BLOCK, Material.ENDER_STONE}; -// if (island.getLocation().getBlockY() >= GetTeamList().get(0).GetSpawns().get(0).getBlockY()) -// mats = new Material[] {Material.AIR}; + if (island.getLocation().getBlockY() < (_rotY + ROT_Y_OFFSET)) + continue; - if (!island.crumble(_islandCrumbleRate, mats)) - { - return islands; - } + island.crumble(_islandCrumbleRate, Material.COAL_BLOCK, Material.ENDER_STONE); } + + if (_upperIsland.isCrumbledAway()) islands.add(_upperIsland); - if (!_upperIsland.crumble(_islandCrumbleRate, Material.COAL_BLOCK, Material.ENDER_STONE)) + + if (_upperIsland.getLocation().getBlockY() > (_rotY + ROT_Y_OFFSET)) { - return islands; - } - else - { - while (!_upperIsland.getBoosterRing().isCrumbledAway()) + if (_upperIsland.crumble(_islandCrumbleRate, Material.COAL_BLOCK, Material.ENDER_STONE)) { - _upperIsland.getBoosterRing().crumble(RING_CRUMBLE_RATE, Material.COAL_BLOCK, Material.ENDER_STONE); + while (!_upperIsland.getBoosterRing().isCrumbledAway()) + { + _upperIsland.getBoosterRing().crumble(RING_CRUMBLE_RATE, Material.COAL_BLOCK, Material.ENDER_STONE); + } } } + + for (Island island : _islands.get(_lowerIsland).keySet()) { if (island.isCrumbledAway()) islands.add(island); - if (!island.crumble(_islandCrumbleRate, Material.COAL_BLOCK, Material.ENDER_STONE)) - { - return islands; - } + if (island.getLocation().getBlockY() < (_rotY + ROT_Y_OFFSET)) + continue; + + island.crumble(_islandCrumbleRate, Material.COAL_BLOCK, Material.ENDER_STONE); } + + if (_lowerIsland.isCrumbledAway()) islands.add(_lowerIsland); - - if (_lowerIsland.crumble(_islandCrumbleRate, Material.COAL_BLOCK, Material.ENDER_STONE)) + + if (_lowerIsland.getLocation().getBlockY() > (_rotY + ROT_Y_OFFSET)) { - while (!_lowerIsland.getBoosterRing().isCrumbledAway()) + if (_lowerIsland.crumble(_islandCrumbleRate, Material.COAL_BLOCK, Material.ENDER_STONE)) { - _lowerIsland.getBoosterRing().crumble(RING_CRUMBLE_RATE, Material.COAL_BLOCK, Material.ENDER_STONE); + while (!_lowerIsland.getBoosterRing().isCrumbledAway()) + { + _lowerIsland.getBoosterRing().crumble(RING_CRUMBLE_RATE, Material.COAL_BLOCK, Material.ENDER_STONE); + } } } return islands; @@ -932,6 +981,8 @@ public abstract class Skyfall extends Game if (_islandCrumbleRate < 1) _islandCrumbleRate = 1; + + _islandCrumbleRate = _islandCrumbleRate * 3; } public Island getCurrentIsland(Player player)