added new 'Disconnect' client message and updated 'Player' and 'Game' classes
This commit is contained in:
@@ -1,17 +0,0 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="MdgaApp" type="Application" factoryName="Application" singleton="false" nameIsGenerated="true">
|
||||
<option name="MAIN_CLASS_NAME" value="pp.mdga.client.MdgaApp" />
|
||||
<module name="Projekte.mdga.client.main" />
|
||||
<option name="VM_PARAMETERS" value="-Djava.util.logging.config.file=logging.properties -ea" />
|
||||
<option name="WORKING_DIRECTORY" value="$MODULE_WORKING_DIR$" />
|
||||
<extension name="coverage">
|
||||
<pattern>
|
||||
<option name="PATTERN" value="pp.mdga.client.board.Outline.*" />
|
||||
<option name="ENABLED" value="true" />
|
||||
</pattern>
|
||||
</extension>
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
||||
@@ -8,29 +8,29 @@
|
||||
* The game state is updated by the game logic.
|
||||
*/
|
||||
public class Game {
|
||||
/**
|
||||
* Constants.
|
||||
*/
|
||||
public static final int MAX_PLAYERS = 4;
|
||||
public static final int AMOUNT_OF_TURBO_CARDS = 16;
|
||||
public static final int AMOUNT_OF_SHIELD_AND_SWAP_CARDS = 12;
|
||||
|
||||
/**
|
||||
* Attributes.
|
||||
*/
|
||||
private int diceModifier = 1;
|
||||
private int diceEyes;
|
||||
private Map<Color, Player> players = new EnumMap<>(Color.class);
|
||||
private Map<Integer, Player> players = new HashMap<>();
|
||||
private Statistic gameStatistics;
|
||||
private List<BonusCard> drawPile;
|
||||
private List<BonusCard> discardPile = new ArrayList<>();
|
||||
private Board board;
|
||||
private Color activeColor;
|
||||
private List<Color> order;
|
||||
private final ArrayList<Player> playerList = new ArrayList<>(4);
|
||||
|
||||
private final ArrayList<Observer> observers = new ArrayList<>();
|
||||
private Player startPlayer;
|
||||
private Boolean gameHasStarted = false;
|
||||
private Boolean playerHasDisconnected = false;
|
||||
private Boolean gameIsInterrupted = false;
|
||||
private Boolean allRanked = false;
|
||||
private Boolean movablePieces = false;
|
||||
|
||||
private Boolean allReady = false;
|
||||
|
||||
private static final int AMOUNT_OF_TURBO_CARDS = 16;
|
||||
private static final int AMOUNT_OF_SHIELD_AND_SWAP_CARDS = 12;
|
||||
private Player currentPlayer;
|
||||
private boolean allRanked = false;
|
||||
private boolean movablePieces = false;
|
||||
private boolean allReady = false;
|
||||
|
||||
/**
|
||||
* This constructor creates a new Game object.
|
||||
@@ -48,185 +48,23 @@ public Game() {
|
||||
board = new Board();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the dice modifier.
|
||||
*
|
||||
* @return the dice modifier
|
||||
*/
|
||||
public int getDiceModifier() {
|
||||
return diceModifier;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the dice modifier.
|
||||
*
|
||||
* @param diceModifier the new dice modifier
|
||||
*/
|
||||
public void setDiceModifier(int diceModifier) {
|
||||
this.diceModifier = diceModifier;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the dice eyes.
|
||||
*
|
||||
* @return the dice eyes
|
||||
*/
|
||||
public int getDiceEyes() {
|
||||
return diceEyes;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the dice eyes.
|
||||
*
|
||||
* @param diceEyes the new dice eyes
|
||||
*/
|
||||
public void setDiceEyes(int diceEyes) {
|
||||
this.diceEyes = diceEyes;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the players.
|
||||
*
|
||||
* @return the players
|
||||
*/
|
||||
public Map<Color, Player> getPlayers() {
|
||||
return players;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the players.
|
||||
*
|
||||
* @param players the new players
|
||||
*/
|
||||
public void setPlayers(Map<Color, Player> players) {
|
||||
this.players = players;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the game statistics.
|
||||
*
|
||||
* @return the game statistics
|
||||
*/
|
||||
public Statistic getGameStatistics() {
|
||||
return gameStatistics;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the game statistics.
|
||||
*
|
||||
* @param gameStatistics the new game statistics
|
||||
*/
|
||||
public void setGameStatistics(Statistic gameStatistics) {
|
||||
this.gameStatistics = gameStatistics;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the draw pile.
|
||||
*
|
||||
* @return the draw pile
|
||||
*/
|
||||
public List<BonusCard> getDrawPile() {
|
||||
return drawPile;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the draw pile.
|
||||
*
|
||||
* @param drawPile the new draw pile
|
||||
*/
|
||||
public void setDrawPile(List<BonusCard> drawPile) {
|
||||
this.drawPile = drawPile;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the discard pile.
|
||||
*
|
||||
* @return the discard pile
|
||||
*/
|
||||
public List<BonusCard> getDiscardPile() {
|
||||
return discardPile;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the discard pile.
|
||||
*
|
||||
* @param discardPile the new discard pile
|
||||
*/
|
||||
public void setDiscardPile(List<BonusCard> discardPile) {
|
||||
this.discardPile = discardPile;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the board.
|
||||
*
|
||||
* @return the board
|
||||
*/
|
||||
public Board getBoard() {
|
||||
return board;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the board.
|
||||
*
|
||||
* @param board the new board
|
||||
*/
|
||||
public void setBoard(Board board) {
|
||||
this.board = board;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the active color.
|
||||
*
|
||||
* @return the active color
|
||||
*/
|
||||
public Color getActiveColor() {
|
||||
return activeColor;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the active color.
|
||||
*
|
||||
* @param activeColor the new active color
|
||||
*/
|
||||
public void setActiveColor(Color activeColor) {
|
||||
this.activeColor = activeColor;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the order of the players.
|
||||
*
|
||||
* @return the order of the players
|
||||
*/
|
||||
public List<Color> getOrder() {
|
||||
return order;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the order of the players.
|
||||
*
|
||||
* @param order the new order of the players
|
||||
*/
|
||||
public void setOrder(List<Color> order) {
|
||||
this.order = order;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method adds a player to the game.
|
||||
*
|
||||
* @param color the color of the player
|
||||
* @param id the id of the player
|
||||
* @param player the player to be added
|
||||
*/
|
||||
public void addPlayer(Color color, Player player) {
|
||||
players.put(color, player);
|
||||
public void addPlayer(int id, Player player) {
|
||||
players.put(id, player);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method removes a player from the game.
|
||||
*
|
||||
* @param color the color of the player
|
||||
* @param id the color of the player
|
||||
*/
|
||||
public void removePlayer(Color color) {
|
||||
players.remove(color);
|
||||
public void removePlayer(int id) {
|
||||
players.remove(id);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -248,49 +86,129 @@ public void removeObserver(Observer observer) {
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the game has started.
|
||||
*
|
||||
* @return the game has started
|
||||
* @param id
|
||||
* @param active
|
||||
*/
|
||||
public Boolean getGameHasStarted() {
|
||||
return gameHasStarted;
|
||||
public void updatePlayerActiveState(int id, boolean active) {
|
||||
this.players.get(id).setActive(active);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the game has started.
|
||||
* This method will be used to return the player which has the given id parameter.
|
||||
*
|
||||
* @param gameHasStarted the new game has started
|
||||
* @param id as the unique id of a player as an Integer.
|
||||
* @return the player with the given id as a Player object.
|
||||
*/
|
||||
public void setGameHasStarted(Boolean gameHasStarted) {
|
||||
this.gameHasStarted = gameHasStarted;
|
||||
public Player getPlayerById(int id) {
|
||||
return this.players.get(id);
|
||||
}
|
||||
|
||||
public Player getCurrentPlayer(Color color) {
|
||||
for (Map.Entry<Integer, Player> entry : this.players.entrySet()) {
|
||||
if (entry.getValue().getColor() == color) {
|
||||
return entry.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the player has disconnected.
|
||||
* This method will be used to return the number of active players of this game.
|
||||
*
|
||||
* @return the player has disconnected
|
||||
* @return activePlayers as an Integer.
|
||||
*/
|
||||
public Boolean playerHasDisconnected() {
|
||||
return playerHasDisconnected;
|
||||
public int getNumberOfActivePlayers() {
|
||||
int activePlayers = 0;
|
||||
for (Map.Entry<Integer, Player> entry : this.players.entrySet()) {
|
||||
if (entry.getValue().isActive()) {
|
||||
activePlayers++;
|
||||
}
|
||||
}
|
||||
|
||||
return activePlayers;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the game interruption state.
|
||||
*
|
||||
* @param gameIsInterrupted the new game interruption state
|
||||
* This method notifies the observers.
|
||||
*/
|
||||
public void setGameIsInterrupted(Boolean gameIsInterrupted) {
|
||||
this.gameIsInterrupted = gameIsInterrupted;
|
||||
if (Boolean.FALSE.equals(gameIsInterrupted)) notifyObservers();
|
||||
public void notifyObservers() {
|
||||
for (Observer observer : new ArrayList<>(observers)) {
|
||||
observer.update();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns whether the game is interrupted.
|
||||
* This method returns the dice modifier.
|
||||
*
|
||||
* @return true if the game is interrupted, false otherwise
|
||||
* @return the dice modifier
|
||||
*/
|
||||
public Boolean gameIsInterrupted() {
|
||||
return gameIsInterrupted;
|
||||
public int getDiceModifier() {
|
||||
return diceModifier;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the dice eyes.
|
||||
*
|
||||
* @return the dice eyes
|
||||
*/
|
||||
public int getDiceEyes() {
|
||||
return diceEyes;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the players.
|
||||
*
|
||||
* @return the players
|
||||
*/
|
||||
public Map<Integer, Player> getPlayers() {
|
||||
return players;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the game statistics.
|
||||
*
|
||||
* @return the game statistics
|
||||
*/
|
||||
public Statistic getGameStatistics() {
|
||||
return gameStatistics;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the draw pile.
|
||||
*
|
||||
* @return the draw pile
|
||||
*/
|
||||
public List<BonusCard> getDrawPile() {
|
||||
return drawPile;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the discard pile.
|
||||
*
|
||||
* @return the discard pile
|
||||
*/
|
||||
public List<BonusCard> getDiscardPile() {
|
||||
return discardPile;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the board.
|
||||
*
|
||||
* @return the board
|
||||
*/
|
||||
public Board getBoard() {
|
||||
return board;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the active color.
|
||||
*
|
||||
* @return the active color
|
||||
*/
|
||||
public Color getActiveColor() {
|
||||
return activeColor;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -302,6 +220,78 @@ public Boolean getMovablePieces() {
|
||||
return movablePieces;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the dice modifier.
|
||||
*
|
||||
* @param diceModifier the new dice modifier
|
||||
*/
|
||||
public void setDiceModifier(int diceModifier) {
|
||||
this.diceModifier = diceModifier;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the dice eyes.
|
||||
*
|
||||
* @param diceEyes the new dice eyes
|
||||
*/
|
||||
public void setDiceEyes(int diceEyes) {
|
||||
this.diceEyes = diceEyes;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the players.
|
||||
*
|
||||
* @param players the new players
|
||||
*/
|
||||
public void setPlayers(Map<Integer, Player> players) {
|
||||
this.players = players;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the game statistics.
|
||||
*
|
||||
* @param gameStatistics the new game statistics
|
||||
*/
|
||||
public void setGameStatistics(Statistic gameStatistics) {
|
||||
this.gameStatistics = gameStatistics;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the draw pile.
|
||||
*
|
||||
* @param drawPile the new draw pile
|
||||
*/
|
||||
public void setDrawPile(List<BonusCard> drawPile) {
|
||||
this.drawPile = drawPile;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the discard pile.
|
||||
*
|
||||
* @param discardPile the new discard pile
|
||||
*/
|
||||
public void setDiscardPile(List<BonusCard> discardPile) {
|
||||
this.discardPile = discardPile;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the board.
|
||||
*
|
||||
* @param board the new board
|
||||
*/
|
||||
public void setBoard(Board board) {
|
||||
this.board = board;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the active color.
|
||||
*
|
||||
* @param activeColor the new active color
|
||||
*/
|
||||
public void setActiveColor(Color activeColor) {
|
||||
this.activeColor = activeColor;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the game interruption state.
|
||||
*
|
||||
@@ -312,16 +302,6 @@ public void setMovablePieces(Boolean movablePieces) {
|
||||
if (Boolean.FALSE.equals(movablePieces)) notifyObservers();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the player has disconnected.
|
||||
*
|
||||
* @param playerHasDisconnected the new player has disconnected
|
||||
*/
|
||||
public void setPlayerHasDisconnected(Boolean playerHasDisconnected) {
|
||||
this.playerHasDisconnected = playerHasDisconnected;
|
||||
if (Boolean.TRUE.equals(playerHasDisconnected)) notifyObservers();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns whether all players have ranked.
|
||||
*
|
||||
@@ -341,24 +321,6 @@ public void setAllRanked(Boolean allRanked) {
|
||||
if (Boolean.TRUE.equals(allRanked)) notifyObservers();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the start player.
|
||||
*
|
||||
* @return the start player
|
||||
*/
|
||||
public Player getStartPlayer() {
|
||||
return startPlayer;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the start player.
|
||||
*
|
||||
* @param startPlayer the new start player
|
||||
*/
|
||||
public void setStartPlayer(Player startPlayer) {
|
||||
this.startPlayer = startPlayer;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the all ready state.
|
||||
*
|
||||
@@ -371,53 +333,10 @@ public Boolean allReady() {
|
||||
/**
|
||||
* This method sets the all ready state.
|
||||
*
|
||||
* @param allReady the new all ready state
|
||||
* @param allReady the new all-ready state
|
||||
*/
|
||||
public void setAllReady(Boolean allReady) {
|
||||
this.allReady = allReady;
|
||||
if (Boolean.TRUE.equals(allReady)) notifyObservers();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method notifies the observers.
|
||||
*/
|
||||
public void notifyObservers() {
|
||||
for (Observer observer : new ArrayList<>(observers)) {
|
||||
observer.update();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the piece through its identifier.
|
||||
*
|
||||
* @param identifier the identifier of the piece
|
||||
* @return the piece
|
||||
*/
|
||||
public Piece getPieceThroughIdentifier(String identifier) {
|
||||
String[] parts = identifier.split("-");
|
||||
Color color = Color.valueOf(parts[0]);
|
||||
int index = Integer.parseInt(parts[1]);
|
||||
return board.getPlayerData().get(color).getPieces()[index];
|
||||
}
|
||||
|
||||
public ArrayList<Player> getPlayerList() {
|
||||
return playerList;
|
||||
}
|
||||
|
||||
public void addPlayerToList(Player player) {
|
||||
playerList.add(player);
|
||||
}
|
||||
|
||||
public void removePlayerFromList(Player player) {
|
||||
playerList.remove(player);
|
||||
}
|
||||
|
||||
public Player getPlayerFromList(String name) {
|
||||
for (Player player : playerList) {
|
||||
if (player.getName().equals(name)) {
|
||||
return player;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,18 +10,9 @@ public class Player {
|
||||
private String name;
|
||||
private Statistic playerStatistic;
|
||||
private ArrayList<BonusCard> handCards;
|
||||
private final int id;
|
||||
private Color color;
|
||||
private boolean isReady;
|
||||
|
||||
/**
|
||||
* This constructor constructs a new Player object
|
||||
*/
|
||||
public Player(int id) {
|
||||
this.id = id;
|
||||
playerStatistic = new Statistic();
|
||||
handCards = new ArrayList<>();
|
||||
}
|
||||
private boolean active = true;
|
||||
|
||||
/**
|
||||
* This constructor constructs a new Player object
|
||||
@@ -32,7 +23,13 @@ public Player(String name) {
|
||||
this.name = name;
|
||||
playerStatistic = new Statistic();
|
||||
handCards = new ArrayList<>();
|
||||
id = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public Player() {
|
||||
super("");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -94,15 +91,6 @@ public BonusCard removeHandCard(BonusCard card) {
|
||||
return cardToRemove;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the id of the connection to the client represented by this player.
|
||||
*
|
||||
* @return the id
|
||||
*/
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the color of the player
|
||||
*
|
||||
@@ -130,6 +118,15 @@ public boolean isReady() {
|
||||
return isReady;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will be used to return active attribute of Player class.
|
||||
*
|
||||
* @return active as a Boolean.
|
||||
*/
|
||||
public boolean isActive() {
|
||||
return this.active;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the player to ready
|
||||
*
|
||||
@@ -138,4 +135,13 @@ public boolean isReady() {
|
||||
public void setReady(boolean ready) {
|
||||
isReady = ready;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will be used to set active attribute of Player class to the given active parameter.
|
||||
*
|
||||
* @param active as the new active value as a Boolean.
|
||||
*/
|
||||
public void setActive(boolean active) {
|
||||
this.active = active;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package pp.mdga.message.client;
|
||||
|
||||
import com.jme3.network.serializing.Serializable;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Serializable
|
||||
public class Disconnected extends ClientMessage {
|
||||
public Disconnected() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of this message.
|
||||
*
|
||||
* @return a string representation of this message
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ClientStartGame{}";
|
||||
}
|
||||
|
||||
/**
|
||||
* Accepts a visitor to process this message.
|
||||
*
|
||||
* @param interpreter the visitor to process this message
|
||||
* @param from the connection ID from which the message was received
|
||||
*/
|
||||
@Override
|
||||
public void accept(ClientInterpreter interpreter, int from) {
|
||||
interpreter.received(this, from);
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
* A message sent by the server to the client to inform about the dice roll.
|
||||
*/
|
||||
@Serializable
|
||||
public class Dice extends ServerMessage {
|
||||
public class Die extends ServerMessage {
|
||||
/**
|
||||
* The eye of the dice
|
||||
*/
|
||||
@@ -25,7 +25,7 @@ public class Dice extends ServerMessage {
|
||||
* @param diceEye the eye of the dice
|
||||
* @param moveablePieces the pieces that can be moved
|
||||
*/
|
||||
public Dice(int diceEye, List<String> moveablePieces) {
|
||||
public Die(int diceEye, List<String> moveablePieces) {
|
||||
super();
|
||||
this.diceEye = diceEye;
|
||||
this.moveablePieces = moveablePieces;
|
||||
@@ -34,7 +34,7 @@ public Dice(int diceEye, List<String> moveablePieces) {
|
||||
/**
|
||||
* Default constructor for serialization purposes.
|
||||
*/
|
||||
private Dice() {
|
||||
private Die() {
|
||||
diceEye = 0;
|
||||
moveablePieces = null;
|
||||
}
|
||||
@@ -45,8 +45,8 @@ private Dice() {
|
||||
* @param diceEye the eye of the dice
|
||||
* @return a new Dice object
|
||||
*/
|
||||
public static Dice inactivePlayer(int diceEye) {
|
||||
return new Dice(diceEye, null);
|
||||
public static Die inactivePlayer(int diceEye) {
|
||||
return new Die(diceEye, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -56,8 +56,8 @@ public static Dice inactivePlayer(int diceEye) {
|
||||
* @param moveablePieces the pieces that can be moved
|
||||
* @return a new Dice object
|
||||
*/
|
||||
public static Dice activePlayer(int diceEye, List<String> moveablePieces) {
|
||||
return new Dice(diceEye, moveablePieces);
|
||||
public static Die activePlayer(int diceEye, List<String> moveablePieces) {
|
||||
return new Die(diceEye, moveablePieces);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1,7 +0,0 @@
|
||||
package pp.mdga.server;
|
||||
|
||||
public class Game extends ServerState {
|
||||
public Game(ServerGameLogic logic) {
|
||||
super(logic);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user