Added infrastructure code for game summaries
This commit is contained in:
parent
894b5464dd
commit
c63e4badf4
@ -5,6 +5,7 @@ import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
|||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
import eu.mhsl.minenet.minigames.message.Icon;
|
import eu.mhsl.minenet.minigames.message.Icon;
|
||||||
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
||||||
|
import eu.mhsl.minenet.minigames.score.Score;
|
||||||
import eu.mhsl.minenet.minigames.util.CommonEventHandles;
|
import eu.mhsl.minenet.minigames.util.CommonEventHandles;
|
||||||
import eu.mhsl.minenet.minigames.instance.Spawnable;
|
import eu.mhsl.minenet.minigames.instance.Spawnable;
|
||||||
import eu.mhsl.minenet.minigames.instance.room.Room;
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
@ -27,6 +28,7 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
public abstract class Game extends MineNetInstance implements Spawnable {
|
public abstract class Game extends MineNetInstance implements Spawnable {
|
||||||
|
|
||||||
|
protected Room parentRoom;
|
||||||
protected boolean isRunning = false;
|
protected boolean isRunning = false;
|
||||||
protected boolean isBeforeBeginning = true;
|
protected boolean isBeforeBeginning = true;
|
||||||
|
|
||||||
@ -48,10 +50,15 @@ public abstract class Game extends MineNetInstance implements Spawnable {
|
|||||||
.addListener(ItemDropEvent.class, this::onItemDrop);
|
.addListener(ItemDropEvent.class, this::onItemDrop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Game setParent(Room parentRoom) {
|
||||||
|
this.parentRoom = parentRoom;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public static void initialize(GameFactory factory, List<Option<?>> options, Player owner) {
|
public static void initialize(GameFactory factory, List<Option<?>> options, Player owner) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
Game game = factory.manufacture(options);
|
Game game = factory.manufacture(Room.getRoom(owner).orElseThrow(), options);
|
||||||
game.load();
|
game.load();
|
||||||
Room.getRoom(owner).orElseThrow().moveMembersToGame(game);
|
Room.getRoom(owner).orElseThrow().moveMembersToGame(game);
|
||||||
|
|
||||||
@ -138,6 +145,10 @@ public abstract class Game extends MineNetInstance implements Spawnable {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void publishScore(Score score) {
|
||||||
|
this.parentRoom.getTournament().addScore(score);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isRunning() {
|
public boolean isRunning() {
|
||||||
return isRunning;
|
return isRunning;
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
|
|
||||||
public class StatelessGame extends Game {
|
public class StatelessGame extends Game {
|
||||||
private final String name;
|
private final String name;
|
||||||
private Score score;
|
private final Score score;
|
||||||
|
|
||||||
private int timeLimit = 0;
|
private int timeLimit = 0;
|
||||||
private int timePlayed = 0;
|
private int timePlayed = 0;
|
||||||
@ -93,11 +93,12 @@ public class StatelessGame extends Game {
|
|||||||
public void stop() {
|
public void stop() {
|
||||||
isRunning = false;
|
isRunning = false;
|
||||||
this.onStop();
|
this.onStop();
|
||||||
|
this.publishScore(getScore());
|
||||||
|
|
||||||
countdownUnload();
|
countdownUnload();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void countdownUnload() {
|
private void countdownUnload() {
|
||||||
new TitleMessage(Duration.ofSeconds(1)).appendStatic("Finish").send(getPlayers());
|
new TitleMessage(Duration.ofSeconds(1)).appendStatic("Finish").send(getPlayers());
|
||||||
scheduler().scheduleTask(this::unload, TaskSchedule.seconds(5), TaskSchedule.stop());
|
scheduler().scheduleTask(this::unload, TaskSchedule.seconds(5), TaskSchedule.stop());
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.config;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionHandler;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionHandler;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
@ -25,20 +26,20 @@ public interface GameFactory {
|
|||||||
return TranslatedComponent.byId("GameFactory#missingDescription");
|
return TranslatedComponent.byId("GameFactory#missingDescription");
|
||||||
}
|
}
|
||||||
|
|
||||||
StatelessGame manufacture(Map<String, Option<?>> configuration) throws Exception;
|
Game manufacture(Room parent, Map<String, Option<?>> configuration) throws Exception;
|
||||||
|
|
||||||
default StatelessGame manufacture(List<Option<?>> configuration) throws Exception {
|
default Game manufacture(Room parent, List<Option<?>> configuration) throws Exception {
|
||||||
if(configuration == null) return manufacture();
|
if(configuration == null) return manufacture(parent);
|
||||||
|
|
||||||
Map<String, Option<?>> cnf = new HashMap<>();
|
Map<String, Option<?>> cnf = new HashMap<>();
|
||||||
configuration.forEach(option -> cnf.put(option.getId(), option));
|
configuration.forEach(option -> cnf.put(option.getId(), option));
|
||||||
|
|
||||||
return manufacture(cnf);
|
return manufacture(parent, cnf);
|
||||||
}
|
}
|
||||||
|
|
||||||
default StatelessGame manufacture() throws Exception {
|
default Game manufacture(Room parent) throws Exception {
|
||||||
if(this.configuration() == null) return manufacture(List.of());
|
if(this.configuration() == null) return manufacture(parent, List.of());
|
||||||
|
|
||||||
return manufacture(this.configuration().getAll());
|
return manufacture(parent, this.configuration().getAll());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.acidRain;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.types.acidRain;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
@ -20,7 +21,7 @@ public class AcidRainFactory implements GameFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) throws Exception {
|
public Game manufacture(Room parent, Map<String, Option<?>> configuration) throws Exception {
|
||||||
return new AcidRain();
|
return new AcidRain().setParent(parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.backrooms;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.types.backrooms;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -14,7 +15,7 @@ public class BackroomsFactory implements GameFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) throws Exception {
|
public Game manufacture(Room parent, Map<String, Option<?>> configuration) throws Exception {
|
||||||
return new Backrooms();
|
return new Backrooms().setParent(parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.bedwars;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.types.bedwars;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionHandler;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionHandler;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common.MinimalPlayeramountGameRestriction;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common.MinimalPlayeramountGameRestriction;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ public class BedwarsFactory implements GameFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) throws Exception {
|
public Game manufacture(Room parent, Map<String, Option<?>> configuration) throws Exception {
|
||||||
return new Bedwars();
|
return new Bedwars().setParent(parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.bowSpleef;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.types.bowSpleef;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
@ -20,7 +21,7 @@ public class BowSpleefFactory implements GameFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) throws Exception {
|
public Game manufacture(Room parent, Map<String, Option<?>> configuration) throws Exception {
|
||||||
return new BowSpleef();
|
return new BowSpleef().setParent(parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.deathcube;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.types.deathcube;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
@ -32,8 +33,8 @@ public class DeathcubeFactory implements GameFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) {
|
public Game manufacture(Room parent, Map<String, Option<?>> configuration) {
|
||||||
return new Deathcube(configuration.get("radius").getAsInt(), configuration.get("height").getAsInt(), configuration.get("percentage").getAsInt(), configuration.get("pvpEnabled").getAsInt());
|
return new Deathcube(configuration.get("radius").getAsInt(), configuration.get("height").getAsInt(), configuration.get("percentage").getAsInt(), configuration.get("pvpEnabled").getAsInt()).setParent(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.elytraRace;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.types.elytraRace;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
@ -28,7 +29,7 @@ public class ElytraRaceFactory implements GameFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) throws Exception {
|
public Game manufacture(Room parent, Map<String, Option<?>> configuration) throws Exception {
|
||||||
return new ElytraRace(configuration.get("ringCount").getAsInt());
|
return new ElytraRace(configuration.get("ringCount").getAsInt()).setParent(parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.minerun;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.types.minerun;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
@ -25,8 +26,8 @@ public class MinerunFactory implements GameFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) {
|
public Game manufacture(Room parent, Map<String, Option<?>> configuration) {
|
||||||
return new Minerun(configuration.get("width").getAsInt(), configuration.get("length").getAsInt(), configuration.get("percentage").getAsInt());
|
return new Minerun(configuration.get("width").getAsInt(), configuration.get("length").getAsInt(), configuration.get("percentage").getAsInt()).setParent(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.spleef;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.types.spleef;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionHandler;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionHandler;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common.MinimalPlayeramountGameRestriction;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common.MinimalPlayeramountGameRestriction;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class SpleefFactory implements GameFactory {
|
public class SpleefFactory implements GameFactory {
|
||||||
@ -43,7 +43,7 @@ public class SpleefFactory implements GameFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) throws Exception {
|
public Game manufacture(Room parent, Map<String, Option<?>> configuration) throws Exception {
|
||||||
return new Spleef(configuration.get("radius").getAsInt(), configuration.get("stackCount").getAsInt());
|
return new Spleef(configuration.get("radius").getAsInt(), configuration.get("stackCount").getAsInt()).setParent(parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.stickfight;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.types.stickfight;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
@ -8,6 +8,7 @@ import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOp
|
|||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionHandler;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionHandler;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common.MaximalPlayeramountGameRestriction;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common.MaximalPlayeramountGameRestriction;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common.MinimalPlayeramountGameRestriction;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common.MinimalPlayeramountGameRestriction;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
@ -38,8 +39,8 @@ public class StickFightFactory implements GameFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) {
|
public Game manufacture(Room parent, Map<String, Option<?>> configuration) {
|
||||||
return new Stickfight();
|
return new Stickfight().setParent(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.tntrun;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.types.tntrun;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
@ -29,7 +30,7 @@ public class TntRunFactory implements GameFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) throws Exception {
|
public Game manufacture(Room parent, Map<String, Option<?>> configuration) throws Exception {
|
||||||
return new TntRun(configuration.get("radius").getAsInt(), configuration.get("levels").getAsInt());
|
return new TntRun(configuration.get("radius").getAsInt(), configuration.get("levels").getAsInt()).setParent(parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.towerdefense;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.types.towerdefense;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
@ -24,7 +25,7 @@ public class TowerdefenseFactory implements GameFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) {
|
public Game manufacture(Room parent, Map<String, Option<?>> configuration) {
|
||||||
return new Towerdefense();
|
return new Towerdefense().setParent(parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.trafficlightrace;
|
package eu.mhsl.minenet.minigames.instance.game.stateless.types.trafficlightrace;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
||||||
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
@ -24,8 +25,8 @@ public class TrafficLightRaceFactory implements GameFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) {
|
public Game manufacture(Room parent, Map<String, Option<?>> configuration) {
|
||||||
return new TrafficLightRace(configuration.get("width").getAsInt(), configuration.get("length").getAsInt());
|
return new TrafficLightRace(configuration.get("width").getAsInt(), configuration.get("length").getAsInt()).setParent(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -5,6 +5,7 @@ import eu.mhsl.minenet.minigames.instance.MineNetInstance;
|
|||||||
import eu.mhsl.minenet.minigames.instance.game.Game;
|
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||||
import eu.mhsl.minenet.minigames.message.Icon;
|
import eu.mhsl.minenet.minigames.message.Icon;
|
||||||
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
||||||
|
import eu.mhsl.minenet.minigames.score.tournament.Tournament;
|
||||||
import eu.mhsl.minenet.minigames.util.CommonEventHandles;
|
import eu.mhsl.minenet.minigames.util.CommonEventHandles;
|
||||||
import eu.mhsl.minenet.minigames.util.MoveInstance;
|
import eu.mhsl.minenet.minigames.util.MoveInstance;
|
||||||
import eu.mhsl.minenet.minigames.instance.Spawnable;
|
import eu.mhsl.minenet.minigames.instance.Spawnable;
|
||||||
@ -83,6 +84,7 @@ public class Room extends MineNetInstance implements Spawnable {
|
|||||||
public final UUID uuid = UUID.randomUUID();
|
public final UUID uuid = UUID.randomUUID();
|
||||||
public final boolean apiDriven;
|
public final boolean apiDriven;
|
||||||
private GameSelector gameSelector;
|
private GameSelector gameSelector;
|
||||||
|
private final Tournament tournament = new Tournament();
|
||||||
private Room(Player owner) {
|
private Room(Player owner) {
|
||||||
super(Dimension.THE_END.DIMENSION);
|
super(Dimension.THE_END.DIMENSION);
|
||||||
this.apiDriven = false;
|
this.apiDriven = false;
|
||||||
@ -152,6 +154,10 @@ public class Room extends MineNetInstance implements Spawnable {
|
|||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Tournament getTournament() {
|
||||||
|
return this.tournament;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Pos getSpawn() {
|
public Pos getSpawn() {
|
||||||
return new Pos(0.5, 50, 0.5);
|
return new Pos(0.5, 50, 0.5);
|
||||||
|
@ -18,7 +18,7 @@ public abstract class Score {
|
|||||||
private int ignoreLastPlayers = 0;
|
private int ignoreLastPlayers = 0;
|
||||||
private boolean isClosed = false;
|
private boolean isClosed = false;
|
||||||
protected Game instance;
|
protected Game instance;
|
||||||
private List<Set<Player>> scores = new ArrayList<>();
|
private final List<Set<Player>> scores = new ArrayList<>();
|
||||||
|
|
||||||
public Score() {}
|
public Score() {}
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ public abstract class Score {
|
|||||||
if(instance.getPlayers().isEmpty()) return;
|
if(instance.getPlayers().isEmpty()) return;
|
||||||
if(resultCount() >= instance.getPlayers().size() - ignoreLastPlayers) {
|
if(resultCount() >= instance.getPlayers().size() - ignoreLastPlayers) {
|
||||||
if(ignoreLastPlayers > 0) {
|
if(ignoreLastPlayers > 0) {
|
||||||
insertRemainingPlayers(instance.getPlayers().stream().filter(player -> !hasResult(player)).collect(Collectors.toSet()));
|
insertRemainingPlayers(instance.getPlayers());
|
||||||
}
|
}
|
||||||
setDone();
|
setDone();
|
||||||
}
|
}
|
||||||
@ -55,9 +55,8 @@ public abstract class Score {
|
|||||||
this.checkGameEnd();
|
this.checkGameEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void insertRemainingPlayers(Set<Player> p) {
|
private void insertRemainingPlayers(Set<Player> players) {
|
||||||
if(p.stream().anyMatch(this::hasResult)) return;
|
this.insertResultImplementation(players.stream().filter(p -> !hasResult(p)).collect(Collectors.toSet()));
|
||||||
this.insertResultImplementation((p));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasResult(Player p) {
|
public boolean hasResult(Player p) {
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
package eu.mhsl.minenet.minigames.score.tournament;
|
||||||
|
|
||||||
|
import eu.mhsl.minenet.minigames.score.Score;
|
||||||
|
import net.minestom.server.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class Tournament {
|
||||||
|
private final List<Score> scores = new ArrayList<>();
|
||||||
|
|
||||||
|
public void addScore(Score score) {
|
||||||
|
this.scores.add(score);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getScoreCount() {
|
||||||
|
return this.scores.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reset() {
|
||||||
|
this.scores.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Map<Player, Integer>> getScores() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user