From 126b54b9811090cbfb331d100a973dbd3ca39496 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 14 Jun 2020 14:50:04 -0400 Subject: [PATCH] Better built-in shuffle --- .../revisions/BlockUnitUnitEntity/0.json | 1 - .../0.json | 1 - .../revisions/BuilderMechUnitEntity/0.json | 1 - .../BuilderMinerPayloadUnitEntity/0.json | 1 - .../revisions/BuilderMinerUnitEntity/0.json | 1 - .../revisions/BuilderUnitEntity/0.json | 1 - .../resources/revisions/BulletEntity/0.json | 1 - .../CommanderUnitWaterMoveEntity/0.json | 1 - .../resources/revisions/DecalEntity/0.json | 1 - .../resources/revisions/EffectEntity/0.json | 1 - .../resources/revisions/FireEntity/0.json | 1 - .../revisions/LaunchCoreEntity/0.json | 1 - .../revisions/LaunchPayloadEntity/0.json | 1 - .../resources/revisions/LegsUnitEntity/0.json | 1 - .../resources/revisions/MechUnitEntity/0.json | 1 - .../revisions/MinerUnitEntity/0.json | 1 - .../resources/revisions/PlayerEntity/0.json | 1 - .../resources/revisions/PuddleEntity/0.json | 1 - .../resources/revisions/TileEntity/0.json | 1 - .../resources/revisions/UnitEntity/0.json | 1 - .../resources/revisions/WeatherEntity/0.json | 1 - core/src/mindustry/game/Gamemode.java | 2 +- core/src/mindustry/maps/Maps.java | 47 ++++++++++--------- .../src/mindustry/server/ServerControl.java | 28 +++++------ 24 files changed, 41 insertions(+), 57 deletions(-) delete mode 100644 annotations/src/main/resources/revisions/BlockUnitUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/BuilderCommanderMechMinerUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/BuilderMechUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/BuilderMinerPayloadUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/BuilderMinerUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/BuilderUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/BulletEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/CommanderUnitWaterMoveEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/DecalEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/EffectEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/FireEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/LaunchCoreEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/LaunchPayloadEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/LegsUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/MechUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/MinerUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/PlayerEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/PuddleEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/TileEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/UnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/WeatherEntity/0.json diff --git a/annotations/src/main/resources/revisions/BlockUnitUnitEntity/0.json b/annotations/src/main/resources/revisions/BlockUnitUnitEntity/0.json deleted file mode 100644 index a558d32e9c..0000000000 --- a/annotations/src/main/resources/revisions/BlockUnitUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BuilderCommanderMechMinerUnitEntity/0.json b/annotations/src/main/resources/revisions/BuilderCommanderMechMinerUnitEntity/0.json deleted file mode 100644 index 5f0c82df0c..0000000000 --- a/annotations/src/main/resources/revisions/BuilderCommanderMechMinerUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:armor,type:float,size:4},{name:baseRotation,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:requests,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BuilderMechUnitEntity/0.json b/annotations/src/main/resources/revisions/BuilderMechUnitEntity/0.json deleted file mode 100644 index 507ab66b2a..0000000000 --- a/annotations/src/main/resources/revisions/BuilderMechUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:armor,type:float,size:4},{name:baseRotation,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:requests,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BuilderMinerPayloadUnitEntity/0.json b/annotations/src/main/resources/revisions/BuilderMinerPayloadUnitEntity/0.json deleted file mode 100644 index e3ede883ad..0000000000 --- a/annotations/src/main/resources/revisions/BuilderMinerPayloadUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:payloads,type:arc.struct.Seq,size:-1},{name:requests,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BuilderMinerUnitEntity/0.json b/annotations/src/main/resources/revisions/BuilderMinerUnitEntity/0.json deleted file mode 100644 index 718245019c..0000000000 --- a/annotations/src/main/resources/revisions/BuilderMinerUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:requests,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BuilderUnitEntity/0.json b/annotations/src/main/resources/revisions/BuilderUnitEntity/0.json deleted file mode 100644 index 61b59221fa..0000000000 --- a/annotations/src/main/resources/revisions/BuilderUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:requests,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BulletEntity/0.json b/annotations/src/main/resources/revisions/BulletEntity/0.json deleted file mode 100644 index 4904375b03..0000000000 --- a/annotations/src/main/resources/revisions/BulletEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:collided,type:arc.struct.IntSeq,size:-1},{name:damage,type:float,size:4},{name:data,type:java.lang.Object,size:-1},{name:lifetime,type:float,size:4},{name:owner,type:Entityc,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:time,type:float,size:4},{name:type,type:mindustry.entities.bullet.BulletType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/CommanderUnitWaterMoveEntity/0.json b/annotations/src/main/resources/revisions/CommanderUnitWaterMoveEntity/0.json deleted file mode 100644 index a558d32e9c..0000000000 --- a/annotations/src/main/resources/revisions/CommanderUnitWaterMoveEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/DecalEntity/0.json b/annotations/src/main/resources/revisions/DecalEntity/0.json deleted file mode 100644 index df78246160..0000000000 --- a/annotations/src/main/resources/revisions/DecalEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:color,type:arc.graphics.Color,size:-1},{name:lifetime,type:float,size:4},{name:region,type:arc.graphics.g2d.TextureRegion,size:-1},{name:rotation,type:float,size:4},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/EffectEntity/0.json b/annotations/src/main/resources/revisions/EffectEntity/0.json deleted file mode 100644 index 5ce16bf09c..0000000000 --- a/annotations/src/main/resources/revisions/EffectEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:color,type:arc.graphics.Color,size:-1},{name:data,type:java.lang.Object,size:-1},{name:effect,type:mindustry.entities.Effect,size:-1},{name:lifetime,type:float,size:4},{name:offsetX,type:float,size:4},{name:offsetY,type:float,size:4},{name:parent,type:Posc,size:-1},{name:rotation,type:float,size:4},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/FireEntity/0.json b/annotations/src/main/resources/revisions/FireEntity/0.json deleted file mode 100644 index a5423a835b..0000000000 --- a/annotations/src/main/resources/revisions/FireEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:baseFlammability,type:float,size:4},{name:block,type:mindustry.world.Block,size:-1},{name:lifetime,type:float,size:4},{name:puddleFlammability,type:float,size:4},{name:tile,type:mindustry.world.Tile,size:-1},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/LaunchCoreEntity/0.json b/annotations/src/main/resources/revisions/LaunchCoreEntity/0.json deleted file mode 100644 index 86b499e433..0000000000 --- a/annotations/src/main/resources/revisions/LaunchCoreEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:block,type:mindustry.world.Block,size:-1},{name:lifetime,type:float,size:4},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/LaunchPayloadEntity/0.json b/annotations/src/main/resources/revisions/LaunchPayloadEntity/0.json deleted file mode 100644 index feba28804f..0000000000 --- a/annotations/src/main/resources/revisions/LaunchPayloadEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:lifetime,type:float,size:4},{name:stacks,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/LegsUnitEntity/0.json b/annotations/src/main/resources/revisions/LegsUnitEntity/0.json deleted file mode 100644 index a558d32e9c..0000000000 --- a/annotations/src/main/resources/revisions/LegsUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/MechUnitEntity/0.json b/annotations/src/main/resources/revisions/MechUnitEntity/0.json deleted file mode 100644 index 400bcb4975..0000000000 --- a/annotations/src/main/resources/revisions/MechUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:armor,type:float,size:4},{name:baseRotation,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/MinerUnitEntity/0.json b/annotations/src/main/resources/revisions/MinerUnitEntity/0.json deleted file mode 100644 index 438047ff42..0000000000 --- a/annotations/src/main/resources/revisions/MinerUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/PlayerEntity/0.json b/annotations/src/main/resources/revisions/PlayerEntity/0.json deleted file mode 100644 index de2ce4432f..0000000000 --- a/annotations/src/main/resources/revisions/PlayerEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:admin,type:boolean,size:1},{name:boosting,type:boolean,size:1},{name:color,type:arc.graphics.Color,size:-1},{name:mouseX,type:float,size:4},{name:mouseY,type:float,size:4},{name:name,type:java.lang.String,size:-1},{name:shooting,type:boolean,size:1},{name:team,type:mindustry.game.Team,size:-1},{name:typing,type:boolean,size:1},{name:unit,type:Unitc,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/PuddleEntity/0.json b/annotations/src/main/resources/revisions/PuddleEntity/0.json deleted file mode 100644 index 3c4c644549..0000000000 --- a/annotations/src/main/resources/revisions/PuddleEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:amount,type:float,size:4},{name:generation,type:int,size:4},{name:liquid,type:mindustry.type.Liquid,size:-1},{name:tile,type:mindustry.world.Tile,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/TileEntity/0.json b/annotations/src/main/resources/revisions/TileEntity/0.json deleted file mode 100644 index c3a6d143c5..0000000000 --- a/annotations/src/main/resources/revisions/TileEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:cons,type:mindustry.world.modules.ConsumeModule,size:-1},{name:health,type:float,size:4},{name:items,type:mindustry.world.modules.ItemModule,size:-1},{name:liquids,type:mindustry.world.modules.LiquidModule,size:-1},{name:power,type:mindustry.world.modules.PowerModule,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/UnitEntity/0.json b/annotations/src/main/resources/revisions/UnitEntity/0.json deleted file mode 100644 index a558d32e9c..0000000000 --- a/annotations/src/main/resources/revisions/UnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/WeatherEntity/0.json b/annotations/src/main/resources/revisions/WeatherEntity/0.json deleted file mode 100644 index 84ba06dbcd..0000000000 --- a/annotations/src/main/resources/revisions/WeatherEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:intensity,type:float,size:4},{name:life,type:float,size:4},{name:opacity,type:float,size:4},{name:weather,type:mindustry.type.Weather,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/core/src/mindustry/game/Gamemode.java b/core/src/mindustry/game/Gamemode.java index 55bd7e0249..1639ec511d 100644 --- a/core/src/mindustry/game/Gamemode.java +++ b/core/src/mindustry/game/Gamemode.java @@ -21,7 +21,7 @@ public enum Gamemode{ rules.attackMode = true; rules.waves = true; rules.waveTimer = true; - }, map -> map.teams.contains(state.rules.waveTeam.id)), + }, map -> map.teams.contains(state.rules.waveTeam.id) && !map.rules().pvp), pvp(rules -> { rules.pvp = true; rules.enemyCoreBuildRadius = 600f; diff --git a/core/src/mindustry/maps/Maps.java b/core/src/mindustry/maps/Maps.java index 46d79c5db2..b10b8c6fd1 100644 --- a/core/src/mindustry/maps/Maps.java +++ b/core/src/mindustry/maps/Maps.java @@ -31,6 +31,8 @@ import static mindustry.Vars.*; public class Maps{ /** List of all built-in maps. Filenames only. */ private static String[] defaultMapNames = {"maze", "fortress", "labyrinth", "islands", "tendrils", "caldera", "wasteland", "shattered", "fork", "triad", "veins", "glacier"}; + /** Maps tagged as PvP */ + private static final String[] pvpMaps = {"veins", "glacier"}; /** All maps stored in an ordered array. */ private Seq maps = new Seq<>(); /** Serializer for meta. */ @@ -56,8 +58,8 @@ public class Maps{ } /** @return the next map to shuffle to. May be null, in which case the server should be stopped. */ - public @Nullable Map getNextMap(@Nullable Map previous){ - return shuffler != null ? shuffler.next(previous) : shuffleMode.next(previous); + public @Nullable Map getNextMap(Gamemode mode, @Nullable Map previous){ + return shuffleMode.next(mode, previous); } /** Returns a list of all maps, including custom ones. */ @@ -467,26 +469,14 @@ public class Maps{ } public interface MapProvider{ - @Nullable Map next(@Nullable Map previous); + @Nullable Map next(Gamemode mode, @Nullable Map previous); } public enum ShuffleMode implements MapProvider{ - none(map -> null), - all(prev -> { - Seq maps = Seq.withArrays(Vars.maps.defaultMaps(), Vars.maps.customMaps()); - maps.shuffle(); - return maps.find(m -> m != prev || maps.size == 1); - }), - custom(prev -> { - Seq maps = Seq.withArrays(Vars.maps.customMaps().isEmpty() ? Vars.maps.defaultMaps() : Vars.maps.customMaps()); - maps.shuffle(); - return maps.find(m -> m != prev || maps.size == 1); - }), - builtin(prev -> { - Seq maps = Seq.withArrays(Vars.maps.defaultMaps()); - maps.shuffle(); - return maps.find(m -> m != prev || maps.size == 1); - }); + none((mode, map) -> null), + all((mode, prev) -> next(mode, prev, Vars.maps.defaultMaps(), Vars.maps.customMaps())), + custom((mode, prev) -> next(mode, prev, Vars.maps.customMaps().isEmpty() ? Vars.maps.defaultMaps() : Vars.maps.customMaps())), + builtin((mode, prev) -> next(mode, prev, Vars.maps.defaultMaps())); private final MapProvider provider; @@ -494,9 +484,24 @@ public class Maps{ this.provider = provider; } + @SafeVarargs + private static Map next(Gamemode mode, Map prev, Seq... mapArray){ + Seq maps = Seq.withArrays((Object[])mapArray); + maps.shuffle(); + + return maps.find(m -> (m != prev || maps.size == 1) && valid(mode, m)); + } + + private static boolean valid(Gamemode mode, Map map){ + boolean pvp = !map.custom && Structs.contains(pvpMaps, map.file.nameWithoutExtension()); + if(mode == Gamemode.survival || mode == Gamemode.attack || mode == Gamemode.sandbox) return !pvp; + if(mode == Gamemode.pvp) return map.custom || pvp; + return true; + } + @Override - public Map next(@Nullable Map previous){ - return provider.next(previous); + public Map next(Gamemode mode, @Nullable Map previous){ + return provider.next(mode, previous); } } } diff --git a/server/src/mindustry/server/ServerControl.java b/server/src/mindustry/server/ServerControl.java index b3d9dd638e..5fcb4ceece 100644 --- a/server/src/mindustry/server/ServerControl.java +++ b/server/src/mindustry/server/ServerControl.java @@ -134,7 +134,7 @@ public class ServerControl implements ApplicationListener{ } //set next map to be played - Map map = nextMapOverride != null ? nextMapOverride : maps.getNextMap(state.map); + Map map = nextMapOverride != null ? nextMapOverride : maps.getNextMap(lastMode, state.map); nextMapOverride = null; if(map != null){ Call.onInfoMessage((state.rules.pvp @@ -209,19 +209,6 @@ public class ServerControl implements ApplicationListener{ } if(lastTask != null) lastTask.cancel(); - - Map result; - if(arg.length > 0){ - result = maps.all().find(map -> map.name().equalsIgnoreCase(arg[0].replace('_', ' ')) || map.name().equalsIgnoreCase(arg[0])); - - if(result == null){ - err("No map with name &y'@'&lr found.", arg[0]); - return; - } - }else{ - result = maps.getShuffleMode().next(state.map); - info("Randomized next map to be @.", result.name()); - } Gamemode preset = Gamemode.survival; @@ -233,6 +220,19 @@ public class ServerControl implements ApplicationListener{ return; } } + + Map result; + if(arg.length > 0){ + result = maps.all().find(map -> map.name().equalsIgnoreCase(arg[0].replace('_', ' ')) || map.name().equalsIgnoreCase(arg[0])); + + if(result == null){ + err("No map with name &y'@'&lr found.", arg[0]); + return; + } + }else{ + result = maps.getShuffleMode().next(preset, state.map); + info("Randomized next map to be @.", result.name()); + } info("Loading map...");