diff --git a/.github/workflows/maven-publish.yml b/.github/workflows/maven-publish.yml
index bc15d30..30d5ee5 100644
--- a/.github/workflows/maven-publish.yml
+++ b/.github/workflows/maven-publish.yml
@@ -18,10 +18,10 @@ jobs:
steps:
- uses: actions/checkout@v2
- - name: Set up JDK 11
+ - name: Set up JDK 16
uses: actions/setup-java@v2
with:
- java-version: '11'
+ java-version: '16'
distribution: 'adopt'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 61064f4..a5c3bc3 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -16,10 +16,10 @@ jobs:
steps:
- uses: actions/checkout@v2
- - name: Set up JDK 11
+ - name: Set up JDK 16
uses: actions/setup-java@v2
with:
- java-version: '11'
+ java-version: '16'
distribution: 'adopt'
- name: Build with Maven
run: mvn -B package --file pom.xml
diff --git a/README.md b/README.md
index 91e032f..856df95 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ Made by [The Asgard](https://asgrad.fun/) with love 💙
[discord]: https://img.shields.io/badge/Our-discord-blue?style=for-the-badge&logo=discord
-[version]: https://img.shields.io/badge/Version-v1.2.0-success?style=for-the-badge&logo=wiki
+[version]: https://img.shields.io/badge/Version-UNSTABLE-success?style=for-the-badge&logo=wiki
[download]: #how-to-use
[wiki]: https://img.shields.io/badge/-Our%20wiki-yellow?style=for-the-badge&logo=wiki
@@ -18,7 +18,7 @@ Made by [The Asgard](https://asgrad.fun/) with love 💙
[docs]: https://img.shields.io/badge/Our%20documentation-v1.2.0-important?style=for-the-badge&logo=wiki
[docs-url]: https://github.com/TheAsgard/TAGA/wiki/Documentation
-[minecraft]: https://img.shields.io/badge/Minecraft-1.16.5-red?style=for-the-badge&logo=mojang-studios
+[minecraft]: https://img.shields.io/badge/Minecraft-1.16.5+-red?style=for-the-badge&logo=mojang-studios
[minecraft-url]: https://www.minecraft.net/
[![version][]][download]
@@ -43,7 +43,7 @@ Works with [PaperMC][papermc-url], [SpigotMC][spigotmc-url], [MohistMC][mohist-u
fun.asgard
TAGA
- v1.2.0
+ UNSTABLE
```
@@ -58,7 +58,7 @@ repositories {
```
```gradle
dependencies {
- implementation 'fun.asgard:TAGA:v1.2.0'
+ implementation 'fun.asgard:TAGA:UNSTABLE'
}
```
diff --git a/pom.xml b/pom.xml
index 97821f4..7673a3b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,82 +1,88 @@
-
-
- 4.0.0
-
- fun.asgard
- TAGA
- v1.2.0
- jar
-
- TAGA
-
-
- 11
- UTF-8
-
-
-
-
- github
- GitHub TheAsgard Apache Maven Packages
- https://maven.pkg.github.com/TheAsgard/TAGA
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.8.1
-
- ${java.version}
- ${java.version}
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
- 3.2.4
-
-
- package
-
- shade
-
-
- false
-
-
-
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
- papermc-repo
- https://papermc.io/repo/repository/maven-public/
-
-
- sonatype
- https://oss.sonatype.org/content/groups/public/
-
-
-
-
-
- com.destroystokyo.paper
- paper-api
- 1.16.5-R0.1-SNAPSHOT
- provided
-
-
-
+
+
+ 4.0.0
+
+ fun.asgard
+ TAGA
+ v1.2.0
+ jar
+
+ TAGA
+
+
+ 16
+ UTF-8
+
+
+
+
+
+ maven-assembly-plugin
+
+
+
+ fun.asgard.TAGA
+
+
+
+ jar-with-dependencies
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+
+ package
+
+ shade
+
+
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ 15
+ 15
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+ papermc-repo
+ https://papermc.io/repo/repository/maven-public/
+
+
+ sonatype
+ https://oss.sonatype.org/content/groups/public/
+
+
+
+
+
+ com.destroystokyo.paper
+ paper-api
+ 1.16.5-R0.1-SNAPSHOT
+ provided
+
+
+
+
diff --git a/src/main/java/fun/asgard/Handler.java b/src/main/java/fun/asgard/Handler.java
index 8ea6b05..b8f1f46 100644
--- a/src/main/java/fun/asgard/Handler.java
+++ b/src/main/java/fun/asgard/Handler.java
@@ -1,7 +1,7 @@
package fun.asgard;
-import fun.asgard.api.events.GamePlayerDeathEvent;
-import fun.asgard.api.objects.GamePlayer;
+import fun.asgard.api.events.gameplayerevents.GamePlayerDeathEvent;
+import fun.asgard.api.objects.game.GamePlayer;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@@ -23,8 +23,8 @@ protected Handler(TAGA taga, Plugin client) {
public void onPlayerKick(PlayerKickEvent event) {
this.pl.getGameManager().getGames().forEach((name, game) -> {
if (game.isLeaveOnKick()
- && game.getPlayers().containsKey(event.getPlayer())) {
- game.disconnectPlayer(game.getPlayers().get(event.getPlayer()));
+ && game.getPlayersManager().getPlayers().containsKey(event.getPlayer())) {
+ game.getPlayersManager().disconnectPlayer(game.getPlayersManager().getPlayers().get(event.getPlayer()));
}
});
}
@@ -32,8 +32,8 @@ public void onPlayerKick(PlayerKickEvent event) {
@EventHandler
public void onPlayerDeath(PlayerDeathEvent event) {
this.pl.getGameManager().getGames().forEach((name, game) -> {
- if (game.getPlayers().containsKey(event.getEntity())) {
- GamePlayer gp = game.getPlayers().get(event.getEntity());
+ if (game.getPlayersManager().getPlayers().containsKey(event.getEntity())) {
+ GamePlayer gp = game.getPlayersManager().getPlayers().get(event.getEntity());
gp.setDied(true);
this.client.getServer().getPluginManager()
.callEvent(new GamePlayerDeathEvent(game, gp));
diff --git a/src/main/java/fun/asgard/TAGA.java b/src/main/java/fun/asgard/TAGA.java
index 2f1e7c7..ac05eed 100644
--- a/src/main/java/fun/asgard/TAGA.java
+++ b/src/main/java/fun/asgard/TAGA.java
@@ -1,17 +1,18 @@
package fun.asgard;
-import fun.asgard.internal.managers.GameManager;
-import fun.asgard.internal.managers.TaskManager;
-
+import fun.asgard.api.objects.managers.GamesManager;
+import fun.asgard.api.objects.managers.TaskManager;
+import fun.asgard.internal.managers.gamemanager.EGameManager;
+import fun.asgard.internal.managers.taskmanager.ETaskManager;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
public final class TAGA implements Listener {
- private final GameManager gm;
+ private final GamesManager gm;
private final TaskManager tm;
- private static final String VERSION = "v1.2.0";
+ private static final String VERSION = "v1.3.0";
public TAGA (Plugin client) {
if (client == null)
@@ -19,12 +20,12 @@ public TAGA (Plugin client) {
client.getServer().getLogger().info("[TAGA] Starting TAGA-" + getVersion() + " on " + client.getServer().getVersion());
- this.gm = new GameManager(this, client);
- this.tm = new TaskManager(this, client);
+ this.gm = new EGameManager(this, client);
+ this.tm = new ETaskManager(this, client);
client.getServer().getPluginManager().registerEvents(new Handler(this, client), client);
}
- public GameManager getGameManager() {
+ public GamesManager getGameManager() {
return gm;
}
diff --git a/src/main/java/fun/asgard/api/events/GamePlayerDeathEvent.java b/src/main/java/fun/asgard/api/events/GamePlayerDeathEvent.java
deleted file mode 100644
index 95e2a35..0000000
--- a/src/main/java/fun/asgard/api/events/GamePlayerDeathEvent.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package fun.asgard.api.events;
-
-import fun.asgard.api.objects.Game;
-
-import fun.asgard.api.objects.GamePlayer;
-import org.bukkit.event.Event;
-import org.bukkit.event.HandlerList;
-
-import org.jetbrains.annotations.NotNull;
-
-public class GamePlayerDeathEvent extends Event {
-
- private static final HandlerList handlers = new HandlerList();
-
- private final GamePlayer player;
- private final Game game;
-
- /**
- *
- * @param game Game
- * @param player Game player
- */
- public GamePlayerDeathEvent(Game game, GamePlayer player) {
- this.player = player;
- this.game = game;
- }
-
- public GamePlayer getPlayer() {
- return player;
- }
-
- public Game getGame() {
- return game;
- }
-
- public @NotNull HandlerList getHandlers() {
- return handlers;
- }
-
- public static HandlerList getHandlerList() {
- return handlers;
- }
-
-}
diff --git a/src/main/java/fun/asgard/api/events/GameStartEvent.java b/src/main/java/fun/asgard/api/events/GameStartEvent.java
deleted file mode 100644
index 8d740b7..0000000
--- a/src/main/java/fun/asgard/api/events/GameStartEvent.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package fun.asgard.api.events;
-
-import fun.asgard.api.objects.Game;
-
-import fun.asgard.api.objects.GamePlayer;
-import org.bukkit.event.Event;
-import org.bukkit.event.HandlerList;
-
-import org.jetbrains.annotations.NotNull;
-
-import java.util.Arrays;
-import java.util.HashSet;
-
-public class GameStartEvent extends Event {
-
- private static final HandlerList handlers = new HandlerList();
-
- private final HashSet players = new HashSet<>();
- private final Game game;
-
- /**
- *
- * @param game Game
- * @param players Game players
- */
- public GameStartEvent(Game game, GamePlayer[] players) {
- this.players.addAll(Arrays.asList(players));
- this.game = game;
- }
-
- /**
- *
- * @param game Game
- * @param players Game players
- */
- public GameStartEvent(Game game, HashSet players) {
- this.players.addAll(players);
- this.game = game;
- }
-
- public HashSet getPlayers() {
- return players;
- }
-
- public Game getGame() {
- return game;
- }
-
- public @NotNull HandlerList getHandlers() {
- return handlers;
- }
-
- public static HandlerList getHandlerList() {
- return handlers;
- }
-
-}
diff --git a/src/main/java/fun/asgard/api/events/GameStopEvent.java b/src/main/java/fun/asgard/api/events/GameStopEvent.java
deleted file mode 100644
index 141dcd3..0000000
--- a/src/main/java/fun/asgard/api/events/GameStopEvent.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package fun.asgard.api.events;
-
-import fun.asgard.api.objects.Game;
-
-import fun.asgard.api.objects.GamePlayer;
-import org.bukkit.event.Event;
-import org.bukkit.event.HandlerList;
-
-import org.jetbrains.annotations.NotNull;
-
-import java.util.Arrays;
-import java.util.HashSet;
-
-public class GameStopEvent extends Event {
-
- private static final HandlerList handlers = new HandlerList();
-
- private final Game game;
- private final HashSet winners = new HashSet<>();
- private final HashSet losers = new HashSet<>();
- private final HashSet players = new HashSet<>();
-
- /**
- *
- * @param game Game
- * @param players Game players
- */
- public GameStopEvent(Game game, GamePlayer[] players) {
- this.players.addAll(Arrays.asList(players));
- this.game = game;
- }
-
- /**
- *
- * @param game Game
- * @param players Game players
- * @param winner Winner of the game
- * @param loser Loser of the game
- */
- public GameStopEvent(Game game, GamePlayer[] players, GamePlayer winner, GamePlayer loser) {
- this.players.addAll(Arrays.asList(players));
- this.game = game;
- this.winners.add(winner);
- this.losers.add(loser);
- }
-
- /**
- *
- * @param game Game
- * @param players Game players
- * @param winners Winners of the game
- * @param losers Losers of the game
- */
- public GameStopEvent(Game game, GamePlayer[] players, GamePlayer[] winners, GamePlayer[] losers) {
- this.players.addAll(Arrays.asList(players));
- this.game = game;
-
- this.winners.addAll(Arrays.asList(winners));
- this.losers.addAll(Arrays.asList(losers));
- }
-
- /**
- *
- * @param game Game
- * @param players Game players
- * @param winners Winners of the game
- * @param losers Losers of the game
- */
- public GameStopEvent(Game game, HashSet players, HashSet winners, HashSet losers) {
- this.players.addAll(players);
- this.game = game;
-
- this.winners.addAll(winners);
- this.losers.addAll(losers);
- }
-
- public HashSet getLosers() {
- return losers;
- }
-
- public HashSet getWinners() {
- return winners;
- }
-
- public HashSet getPlayers() {
- return players;
- }
-
- public Game getGame() {
- return game;
- }
-
- public @NotNull HandlerList getHandlers() {
- return handlers;
- }
-
- public static HandlerList getHandlerList() {
- return handlers;
- }
-
-}
diff --git a/src/main/java/fun/asgard/api/events/PlayerConnectEvent.java b/src/main/java/fun/asgard/api/events/PlayerConnectEvent.java
deleted file mode 100644
index 9702030..0000000
--- a/src/main/java/fun/asgard/api/events/PlayerConnectEvent.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package fun.asgard.api.events;
-
-import fun.asgard.api.objects.Game;
-
-import org.bukkit.entity.Player;
-import org.bukkit.event.Event;
-import org.bukkit.event.HandlerList;
-
-import org.jetbrains.annotations.NotNull;
-
-public class PlayerConnectEvent extends Event {
-
- private static final HandlerList handlers = new HandlerList();
-
- private final Player player;
- private final Game game;
-
- /**
- *
- * @param game Game
- * @param player Game player
- */
- public PlayerConnectEvent(Game game, Player player) {
- this.player = player;
- this.game = game;
- }
-
- public Player getPlayer() {
- return player;
- }
-
- public Game getGame() {
- return game;
- }
-
- public @NotNull HandlerList getHandlers() {
- return handlers;
- }
-
- public static HandlerList getHandlerList() {
- return handlers;
- }
-
-}
diff --git a/src/main/java/fun/asgard/api/events/PlayerDisconnectEvent.java b/src/main/java/fun/asgard/api/events/PlayerDisconnectEvent.java
deleted file mode 100644
index de4ce21..0000000
--- a/src/main/java/fun/asgard/api/events/PlayerDisconnectEvent.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package fun.asgard.api.events;
-
-import fun.asgard.api.objects.Game;
-
-import org.bukkit.entity.Player;
-import org.bukkit.event.Event;
-import org.bukkit.event.HandlerList;
-
-import org.jetbrains.annotations.NotNull;
-
-public class PlayerDisconnectEvent extends Event {
-
- private static final HandlerList handlers = new HandlerList();
-
- private final Player player;
- private final Game game;
-
- /**
- *
- * @param game Game
- * @param player Game player
- */
- public PlayerDisconnectEvent(Game game, Player player) {
- this.player = player;
- this.game = game;
- }
-
- public Player getPlayer() {
- return player;
- }
-
- public Game getGame() {
- return game;
- }
-
- public @NotNull HandlerList getHandlers() {
- return handlers;
- }
-
- public static HandlerList getHandlerList() {
- return handlers;
- }
-
-}
diff --git a/src/main/java/fun/asgard/api/events/gameevents/GameEvent.java b/src/main/java/fun/asgard/api/events/gameevents/GameEvent.java
new file mode 100644
index 0000000..a3f128a
--- /dev/null
+++ b/src/main/java/fun/asgard/api/events/gameevents/GameEvent.java
@@ -0,0 +1,70 @@
+package fun.asgard.api.events.gameevents;
+
+import fun.asgard.api.objects.game.Game;
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.event.Event;
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.HashSet;
+
+public class GameEvent extends Event {
+
+ private static HandlerList handlers = null;
+
+ private final TeamGame teamGame;
+ private final Game game;
+ private final HashSet winners = new HashSet<>();
+ private final HashSet losers = new HashSet<>();
+ private final HashSet players = new HashSet<>();
+
+ /**
+ *
+ * @param game Game
+ */
+ protected GameEvent(Game game, HashSet winners, HashSet losers, HashSet players) {
+ handlers = new HandlerList();
+ this.game = game;
+ this.teamGame = null;
+ }
+
+ /**
+ *
+ * @param teamGame Game
+ */
+ protected GameEvent(TeamGame teamGame, HashSet winners, HashSet losers, HashSet players) {
+ handlers = new HandlerList();
+ this.teamGame = teamGame;
+ this.game = null;
+ }
+
+ public HashSet getLosers() {
+ return losers;
+ }
+
+ public HashSet getPlayers() {
+ return players;
+ }
+
+ public HashSet getWinners() {
+ return winners;
+ }
+
+ public TeamGame getTeamGame() {
+ return teamGame;
+ }
+
+ public Game getGame() {
+ return game;
+ }
+
+ public @NotNull HandlerList getHandlers() {
+ return handlers;
+ }
+
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/fun/asgard/api/events/gameevents/GameStartEvent.java b/src/main/java/fun/asgard/api/events/gameevents/GameStartEvent.java
new file mode 100644
index 0000000..1e07dc6
--- /dev/null
+++ b/src/main/java/fun/asgard/api/events/gameevents/GameStartEvent.java
@@ -0,0 +1,49 @@
+package fun.asgard.api.events.gameevents;
+
+import fun.asgard.api.objects.game.Game;
+
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.TeamGame;
+
+import java.util.Arrays;
+import java.util.HashSet;
+
+public class GameStartEvent extends GameEvent {
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ */
+ public GameStartEvent(Game game, GamePlayer[] players) {
+ super(game, null, null, new HashSet<>(Arrays.asList(players)));
+ }
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ */
+ public GameStartEvent(Game game, HashSet players) {
+ super(game, null, null, players);
+ }
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ */
+ public GameStartEvent(TeamGame game, GamePlayer[] players) {
+ super(game, null, null, new HashSet<>(Arrays.asList(players)));
+ }
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ */
+ public GameStartEvent(TeamGame game, HashSet players) {
+ super(game, null, null, players);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/api/events/gameevents/GameStopEvent.java b/src/main/java/fun/asgard/api/events/gameevents/GameStopEvent.java
new file mode 100644
index 0000000..f013487
--- /dev/null
+++ b/src/main/java/fun/asgard/api/events/gameevents/GameStopEvent.java
@@ -0,0 +1,102 @@
+package fun.asgard.api.events.gameevents;
+
+import fun.asgard.api.objects.game.Game;
+
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.TeamGame;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+
+public class GameStopEvent extends GameEvent {
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ */
+ public GameStopEvent(Game game, GamePlayer[] players) {
+ super(game, null, null, new HashSet<>(Arrays.asList(players)));
+ }
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ * @param winner Winner of the game
+ * @param loser Loser of the game
+ */
+ public GameStopEvent(Game game, GamePlayer[] players, GamePlayer winner, GamePlayer loser) {
+ super(game, new HashSet<>(Collections.singletonList(winner)), new HashSet<>(Collections.singletonList(loser)),
+ new HashSet<>(Arrays.asList(players)));
+ }
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ * @param winners Winners of the game
+ * @param losers Losers of the game
+ */
+ public GameStopEvent(Game game, GamePlayer[] players, GamePlayer[] winners, GamePlayer[] losers) {
+ super(game, new HashSet<>(Arrays.asList(winners)), new HashSet<>(Arrays.asList(losers)),
+ new HashSet<>(Arrays.asList(players)));
+ }
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ * @param winners Winners of the game
+ * @param losers Losers of the game
+ */
+ public GameStopEvent(Game game, HashSet players, HashSet winners, HashSet losers) {
+ super(game, winners, losers, players);
+ }
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ */
+ public GameStopEvent(TeamGame game, GamePlayer[] players) {
+ super(game, null, null, new HashSet<>(Arrays.asList(players)));
+ }
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ * @param winner Winner of the game
+ * @param loser Loser of the game
+ */
+ public GameStopEvent(TeamGame game, GamePlayer[] players, GamePlayer winner, GamePlayer loser) {
+ super(game, new HashSet<>(Collections.singletonList(winner)), new HashSet<>(Collections.singletonList(loser)),
+ new HashSet<>(Arrays.asList(players)));
+ }
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ * @param winners Winners of the game
+ * @param losers Losers of the game
+ */
+ public GameStopEvent(TeamGame game, GamePlayer[] players, GamePlayer[] winners, GamePlayer[] losers) {
+ super(game, new HashSet<>(Arrays.asList(winners)), new HashSet<>(Arrays.asList(losers)),
+ new HashSet<>(Arrays.asList(players)));
+ }
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ * @param winners Winners of the game
+ * @param losers Losers of the game
+ */
+ public GameStopEvent(TeamGame game, HashSet players, HashSet winners, HashSet losers) {
+ super(game, winners, losers, players);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerConnectEvent.java b/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerConnectEvent.java
new file mode 100644
index 0000000..aa590c4
--- /dev/null
+++ b/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerConnectEvent.java
@@ -0,0 +1,29 @@
+package fun.asgard.api.events.gameplayerevents;
+
+import fun.asgard.api.objects.game.Game;
+
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.entity.Player;
+
+public class GamePlayerConnectEvent extends GamePlayerEvent {
+
+ /**
+ *
+ * @param game Game
+ * @param player Game player
+ */
+ public GamePlayerConnectEvent(Game game, Player player, GamePlayer gamePlayer) {
+ super(game, player, gamePlayer);
+ }
+
+ /**
+ *
+ * @param teamGame Team game
+ * @param player Game player
+ */
+ public GamePlayerConnectEvent(TeamGame teamGame, Player player, GamePlayer gamePlayer) {
+ super(teamGame, player, gamePlayer);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerDeathEvent.java b/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerDeathEvent.java
new file mode 100644
index 0000000..78184eb
--- /dev/null
+++ b/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerDeathEvent.java
@@ -0,0 +1,30 @@
+package fun.asgard.api.events.gameplayerevents;
+
+import fun.asgard.api.objects.game.Game;
+
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.entity.Player;
+
+public class GamePlayerDeathEvent extends GamePlayerEvent {
+
+ /**
+ *
+ * @param game Game
+ * @param player Game player
+ */
+ public GamePlayerDeathEvent(Game game, GamePlayer player) {
+ super(game, null, player);
+ }
+
+
+ /**
+ *
+ * @param teamGame Team game
+ * @param player Game player
+ */
+ public GamePlayerDeathEvent(TeamGame teamGame, Player player) {
+ super(teamGame, player, null);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerDisconnectEvent.java b/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerDisconnectEvent.java
new file mode 100644
index 0000000..2131956
--- /dev/null
+++ b/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerDisconnectEvent.java
@@ -0,0 +1,28 @@
+package fun.asgard.api.events.gameplayerevents;
+
+import fun.asgard.api.objects.game.Game;
+
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.entity.Player;
+
+public class GamePlayerDisconnectEvent extends GamePlayerEvent {
+
+ /**
+ *
+ * @param game Game
+ * @param player Game player
+ */
+ public GamePlayerDisconnectEvent(Game game, Player player) {
+ super(game, player, null);
+ }
+
+ /**
+ *
+ * @param game Game
+ * @param player Game player
+ */
+ public GamePlayerDisconnectEvent(TeamGame game, Player player) {
+ super(game, player, null);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerEvent.java b/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerEvent.java
new file mode 100644
index 0000000..4b1bd7c
--- /dev/null
+++ b/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerEvent.java
@@ -0,0 +1,70 @@
+package fun.asgard.api.events.gameplayerevents;
+
+import fun.asgard.api.objects.game.Game;
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Event;
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull;
+
+public class GamePlayerEvent extends Event {
+
+ private static HandlerList handlers = null;
+
+ private final Player player;
+ private final GamePlayer gp;
+ private final TeamGame teamGame;
+ private final Game game;
+
+ /**
+ *
+ * @param game Game
+ * @param player Game player
+ */
+ protected GamePlayerEvent(Game game, Player player, GamePlayer gp) {
+ handlers = new HandlerList();
+ this.gp = gp;
+ this.player = player;
+ this.game = game;
+ this.teamGame = null;
+ }
+
+ /**
+ *
+ * @param teamGame Game
+ * @param player Game player
+ */
+ protected GamePlayerEvent(TeamGame teamGame, Player player, GamePlayer gp) {
+ handlers = new HandlerList();
+ this.gp = gp;
+ this.player = player;
+ this.teamGame = teamGame;
+ this.game = null;
+ }
+
+ public GamePlayer getGamePlayer() {
+ return gp;
+ }
+
+ public Player getPlayer() {
+ return player;
+ }
+
+ public TeamGame getTeamGame() {
+ return teamGame;
+ }
+
+ public Game getGame() {
+ return game;
+ }
+
+ public @NotNull HandlerList getHandlers() {
+ return handlers;
+ }
+
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerJoinedTeamEvent.java b/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerJoinedTeamEvent.java
new file mode 100644
index 0000000..0d16960
--- /dev/null
+++ b/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerJoinedTeamEvent.java
@@ -0,0 +1,13 @@
+package fun.asgard.api.events.gameplayerevents;
+
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.entity.Player;
+
+public class GamePlayerJoinedTeamEvent extends GamePlayerEvent {
+
+ public GamePlayerJoinedTeamEvent(TeamGame teamGame, Player player, GamePlayer gp) {
+ super(teamGame, player, gp);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerLeftTeamEvent.java b/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerLeftTeamEvent.java
new file mode 100644
index 0000000..5820e67
--- /dev/null
+++ b/src/main/java/fun/asgard/api/events/gameplayerevents/GamePlayerLeftTeamEvent.java
@@ -0,0 +1,13 @@
+package fun.asgard.api.events.gameplayerevents;
+
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.entity.Player;
+
+public class GamePlayerLeftTeamEvent extends GamePlayerEvent {
+
+ public GamePlayerLeftTeamEvent(TeamGame teamGame, Player player, GamePlayer gp) {
+ super(teamGame, player, gp);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/api/events/gameteamevents/GameTeamDisconnectEvent.java b/src/main/java/fun/asgard/api/events/gameteamevents/GameTeamDisconnectEvent.java
new file mode 100644
index 0000000..9031c18
--- /dev/null
+++ b/src/main/java/fun/asgard/api/events/gameteamevents/GameTeamDisconnectEvent.java
@@ -0,0 +1,19 @@
+package fun.asgard.api.events.gameteamevents;
+
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.entity.Player;
+
+import java.util.Set;
+
+public class GameTeamDisconnectEvent extends GameTeamEvent {
+
+ /**
+ *
+ * @param game Game
+ * @param players Game players
+ */
+ public GameTeamDisconnectEvent(TeamGame game, Set players) {
+ super(game, players, null);
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/fun/asgard/api/events/gameteamevents/GameTeamEvent.java b/src/main/java/fun/asgard/api/events/gameteamevents/GameTeamEvent.java
new file mode 100644
index 0000000..54287c4
--- /dev/null
+++ b/src/main/java/fun/asgard/api/events/gameteamevents/GameTeamEvent.java
@@ -0,0 +1,52 @@
+package fun.asgard.api.events.gameteamevents;
+
+import fun.asgard.api.objects.game.GameTeam;
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Event;
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Set;
+
+public class GameTeamEvent extends Event {
+
+ private static HandlerList handlers = null;
+
+ private final Set players;
+ private final TeamGame game;
+ private final GameTeam team;
+
+ /**
+ *
+ * @param game Team game
+ * @param players Game players
+ */
+ protected GameTeamEvent(TeamGame game, Set players, GameTeam team) {
+ handlers = new HandlerList();
+ this.players = players;
+ this.game = game;
+ this.team = team;
+ }
+
+ public Set getPlayers() {
+ return players;
+ }
+
+ public TeamGame getTeamGame() {
+ return game;
+ }
+
+ public GameTeam getTeam() {
+ return team;
+ }
+
+ public @NotNull HandlerList getHandlers() {
+ return handlers;
+ }
+
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+
+}
diff --git a/src/main/java/fun/asgard/api/objects/GameTask.java b/src/main/java/fun/asgard/api/objects/GameTask.java
deleted file mode 100644
index 6998231..0000000
--- a/src/main/java/fun/asgard/api/objects/GameTask.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package fun.asgard.api.objects;
-
-public interface GameTask {
-
- void cancel();
-
- Game getGame();
-
-}
diff --git a/src/main/java/fun/asgard/api/objects/Game.java b/src/main/java/fun/asgard/api/objects/game/BaseGame.java
similarity index 58%
rename from src/main/java/fun/asgard/api/objects/Game.java
rename to src/main/java/fun/asgard/api/objects/game/BaseGame.java
index 7267cf4..f8b6b77 100644
--- a/src/main/java/fun/asgard/api/objects/Game.java
+++ b/src/main/java/fun/asgard/api/objects/game/BaseGame.java
@@ -1,13 +1,10 @@
-package fun.asgard.api.objects;
+package fun.asgard.api.objects.game;
-import org.bukkit.Location;
import org.bukkit.World;
-import org.bukkit.entity.Player;
-import java.util.HashMap;
import java.util.HashSet;
-public interface Game {
+public interface BaseGame {
/**
* After calling the method, GameStartEvent will be triggered
@@ -39,36 +36,21 @@ public interface Game {
*/
void shutdown(boolean saveWorld);
- void connectPlayer(Player player);
-
- void connectPlayer(Player player, Location location);
-
- void connectPlayer(Player player, double x, double y, double z);
-
- void disconnectPlayer(GamePlayer player);
-
- void disconnectPlayer(GamePlayer player, Location location);
-
- void disconnectPlayer(GamePlayer player, double x, double y, double z);
-
- HashSet getTasks();
long getWhenStarted();
- HashMap getPlayers();
-
long getTime();
String getGameName();
World getWorld();
- GameTask getTask();
-
void setTime(long time);
- void setKickOnLeave(boolean kickOnLeave);
+ void setLeaveOnKick(boolean kickOnLeave);
boolean isLeaveOnKick();
+ boolean isTeamGame();
+
}
diff --git a/src/main/java/fun/asgard/api/objects/game/Game.java b/src/main/java/fun/asgard/api/objects/game/Game.java
new file mode 100644
index 0000000..b0a34e0
--- /dev/null
+++ b/src/main/java/fun/asgard/api/objects/game/Game.java
@@ -0,0 +1,22 @@
+package fun.asgard.api.objects.game;
+
+import fun.asgard.api.objects.managers.PlayersManager;
+import java.util.HashSet;
+
+public interface Game extends BaseGame {
+
+ void start();
+
+ void stop(boolean saveWorld);
+
+ void stop(GamePlayer winner, GamePlayer loser, boolean saveWorld);
+
+ void stop(GamePlayer[] winners, GamePlayer[] losers, boolean saveWorld);
+
+ void stop(HashSet winners, HashSet losers, boolean saveWorld);
+
+ void shutdown(boolean saveWorld);
+
+ PlayersManager getPlayersManager();
+
+}
diff --git a/src/main/java/fun/asgard/api/objects/GamePlayer.java b/src/main/java/fun/asgard/api/objects/game/GamePlayer.java
similarity index 58%
rename from src/main/java/fun/asgard/api/objects/GamePlayer.java
rename to src/main/java/fun/asgard/api/objects/game/GamePlayer.java
index f4d1c7a..3327c07 100644
--- a/src/main/java/fun/asgard/api/objects/GamePlayer.java
+++ b/src/main/java/fun/asgard/api/objects/game/GamePlayer.java
@@ -1,4 +1,4 @@
-package fun.asgard.api.objects;
+package fun.asgard.api.objects.game;
import org.bukkit.entity.Player;
@@ -6,14 +6,18 @@ public interface GamePlayer {
Player getPlayer();
- Game getGame();
+ BaseGame getGame();
int getScore();
+ GameTeam getTeam();
+
boolean isDied();
void setScore(int score);
void setDied(boolean isDied);
+ void setTeam(GameTeam team);
+
}
diff --git a/src/main/java/fun/asgard/api/objects/game/GameTeam.java b/src/main/java/fun/asgard/api/objects/game/GameTeam.java
new file mode 100644
index 0000000..8b63ecc
--- /dev/null
+++ b/src/main/java/fun/asgard/api/objects/game/GameTeam.java
@@ -0,0 +1,29 @@
+package fun.asgard.api.objects.game;
+
+import org.bukkit.Color;
+
+import java.util.HashSet;
+
+public interface GameTeam {
+
+ HashSet getPlayers();
+
+ BaseGame getTeamGame();
+
+ int getScore();
+
+ boolean isLost();
+
+ Color getColor();
+
+ String getName();
+
+ void setScore(int score);
+
+ void setLost(boolean isLost);
+
+ void setColor(Color color);
+
+ void setName(String name);
+
+}
diff --git a/src/main/java/fun/asgard/api/objects/game/TeamGame.java b/src/main/java/fun/asgard/api/objects/game/TeamGame.java
new file mode 100644
index 0000000..2877de9
--- /dev/null
+++ b/src/main/java/fun/asgard/api/objects/game/TeamGame.java
@@ -0,0 +1,9 @@
+package fun.asgard.api.objects.game;
+
+import fun.asgard.api.objects.managers.PlayersManager;
+
+public interface TeamGame extends BaseGame {
+
+ PlayersManager getPlayersManager();
+
+}
diff --git a/src/main/java/fun/asgard/api/objects/managers/GamesManager.java b/src/main/java/fun/asgard/api/objects/managers/GamesManager.java
new file mode 100644
index 0000000..0c3da8e
--- /dev/null
+++ b/src/main/java/fun/asgard/api/objects/managers/GamesManager.java
@@ -0,0 +1,27 @@
+package fun.asgard.api.objects.managers;
+
+import fun.asgard.api.objects.game.Game;
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.World;
+
+import java.util.HashMap;
+
+public interface GamesManager {
+
+ Game createGame(World world, String gameName, long timer);
+
+ Game createGame(World world, String gameName);
+
+ TeamGame createTeamGame(World world, String gameName, long timer);
+
+ TeamGame createTeamGame(World world, String gameName);
+
+ Game getGame(String gameName);
+
+ TeamGame getTeamGame(String gameName);
+
+ HashMap getGames();
+
+ HashMap getTeamGames();
+
+}
diff --git a/src/main/java/fun/asgard/api/objects/managers/PlayersManager.java b/src/main/java/fun/asgard/api/objects/managers/PlayersManager.java
new file mode 100644
index 0000000..a042fd6
--- /dev/null
+++ b/src/main/java/fun/asgard/api/objects/managers/PlayersManager.java
@@ -0,0 +1,55 @@
+package fun.asgard.api.objects.managers;
+
+import fun.asgard.api.objects.game.Game;
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.GameTeam;
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.Color;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+import java.util.HashMap;
+
+public interface PlayersManager {
+
+ Game getGame();
+
+ TeamGame getTeamGame();
+
+ HashMap getTeams();
+
+ HashMap getPlayers();
+
+ GameTeam getTeam(String name);
+
+ void connectPlayer(Player player);
+
+ void connectPlayer(Player player, Location location);
+
+ void connectPlayer(Player player, double x, double y, double z);
+
+ void disconnectPlayer(GamePlayer player);
+
+ void disconnectPlayer(GamePlayer player, Location location);
+
+ void disconnectPlayer(GamePlayer player, double x, double y, double z);
+
+ GameTeam createTeam(String name, Color color);
+
+ void connectPlayer(Player player, GameTeam team);
+
+ void connectPlayer(Player player, GameTeam team, Location location);
+
+ void connectPlayer(Player player, GameTeam team, double x, double y, double z);
+
+ void disconnectTeam(GameTeam team);
+
+ void disconnectTeam(GameTeam team, Location location);
+
+ void disconnectTeam(GameTeam team, double x, double y, double z);
+
+ void sendMessage(String message);
+
+ void sendTeamMessage(String message, GameTeam team);
+
+}
diff --git a/src/main/java/fun/asgard/api/objects/managers/TaskManager.java b/src/main/java/fun/asgard/api/objects/managers/TaskManager.java
new file mode 100644
index 0000000..9012ce2
--- /dev/null
+++ b/src/main/java/fun/asgard/api/objects/managers/TaskManager.java
@@ -0,0 +1,19 @@
+package fun.asgard.api.objects.managers;
+
+import fun.asgard.api.objects.task.Task;
+import fun.asgard.api.objects.task.TaskRunnable;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.HashMap;
+
+public interface TaskManager {
+
+ void createTask(@NotNull TaskRunnable task, long delay, long period);
+
+ void createTask(@NotNull TaskRunnable task, String taskName, long delay, long period);
+
+ Task getTask(String taskName);
+
+ HashMap getTasks();
+
+}
diff --git a/src/main/java/fun/asgard/api/objects/task/Task.java b/src/main/java/fun/asgard/api/objects/task/Task.java
new file mode 100644
index 0000000..d1548d4
--- /dev/null
+++ b/src/main/java/fun/asgard/api/objects/task/Task.java
@@ -0,0 +1,11 @@
+package fun.asgard.api.objects.task;
+
+public interface Task {
+
+ void cancel();
+
+ String getName();
+
+ void setName(String name);
+
+}
diff --git a/src/main/java/fun/asgard/api/objects/task/TaskRunnable.java b/src/main/java/fun/asgard/api/objects/task/TaskRunnable.java
new file mode 100644
index 0000000..e8793d8
--- /dev/null
+++ b/src/main/java/fun/asgard/api/objects/task/TaskRunnable.java
@@ -0,0 +1,7 @@
+package fun.asgard.api.objects.task;
+
+public interface TaskRunnable {
+
+ void execute(Task task);
+
+}
diff --git a/src/main/java/fun/asgard/internal/Utils.java b/src/main/java/fun/asgard/internal/Utils.java
index 6f7b0f4..274c863 100644
--- a/src/main/java/fun/asgard/internal/Utils.java
+++ b/src/main/java/fun/asgard/internal/Utils.java
@@ -1,18 +1,16 @@
package fun.asgard.internal;
-import fun.asgard.api.objects.GamePlayer;
-
-import org.bukkit.entity.Player;
-
import java.util.HashMap;
import java.util.HashSet;
public class Utils {
- public static HashSet getValuesFromHashMap(HashMap map) {
- HashSet res = new HashSet<>();
- map.forEach((k, a) -> res.add(a));
- return res;
+ public static HashSet valueSet(HashMap map) {
+ return new HashSet<>(map.values());
+ }
+
+ public static double getRandom(double min, double max){
+ return (Math.random() * ((max - min) + 1)) + min;
}
}
diff --git a/src/main/java/fun/asgard/internal/managers/GameManager.java b/src/main/java/fun/asgard/internal/managers/GameManager.java
deleted file mode 100644
index b255177..0000000
--- a/src/main/java/fun/asgard/internal/managers/GameManager.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package fun.asgard.internal.managers;
-
-import fun.asgard.TAGA;
-import fun.asgard.api.objects.Game;
-import fun.asgard.internal.objects.Game.EGame;
-
-import org.bukkit.World;
-import org.bukkit.plugin.Plugin;
-
-import java.util.HashMap;
-
-public class GameManager {
-
- private final HashMap games = new HashMap<>();
- private final TAGA taga;
- private final Plugin client;
-
- public GameManager(TAGA taga, Plugin client) {
- this.taga = taga;
- this.client = client;
- }
-
- public Game createGame(World world, String gameName, long timer) {
- EGame game = new EGame(this.taga, this.client, world, gameName, timer);
- this.games.put(gameName, game);
- return game;
- }
-
- public Game createGame(World world, String gameName) {
- return this.createGame(world, gameName, -1);
- }
-
- public Game getGame(String gameName) {
- return this.getGames().get(gameName);
- }
-
- public HashMap getGames() {
- return this.games;
- }
-
-}
diff --git a/src/main/java/fun/asgard/internal/managers/TaskManager.java b/src/main/java/fun/asgard/internal/managers/TaskManager.java
deleted file mode 100644
index 74c985d..0000000
--- a/src/main/java/fun/asgard/internal/managers/TaskManager.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package fun.asgard.internal.managers;
-
-import fun.asgard.TAGA;
-import fun.asgard.api.objects.Game;
-import fun.asgard.api.objects.GameTask;
-import fun.asgard.internal.objects.GameTask.EGameTask;
-
-import org.bukkit.plugin.Plugin;
-
-import org.jetbrains.annotations.NotNull;
-
-import java.util.HashMap;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-public class TaskManager {
-
- private final TAGA taga;
- private final Plugin client;
- private final HashMap tasks = new HashMap<>();
-
- public TaskManager(TAGA taga, Plugin client) {
- this.taga = taga;
- this.client = client;
- }
-
- public GameTask createGameTask(@NotNull Runnable task, Game game, long delay, long period){
- if (this.tasks.containsKey(game))
- throw new IllegalArgumentException("GameTask has already been created for this game");
- if (delay < 0)
- throw new IllegalArgumentException("Negative delay.");
- if (period <= 0)
- throw new IllegalArgumentException("Non-positive period.");
-
- ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
- service.scheduleWithFixedDelay(task, delay, period, TimeUnit.MILLISECONDS);
-
- GameTask gt = new EGameTask(game, service);
- this.getAllTasks().put(game, gt);
- return gt;
- }
-
- public GameTask getTask(Game game) {
- return this.getAllTasks().get(game);
- }
-
- public HashMap getAllTasks() {
- return tasks;
- }
-
-}
diff --git a/src/main/java/fun/asgard/internal/managers/gamemanager/AGameManager.java b/src/main/java/fun/asgard/internal/managers/gamemanager/AGameManager.java
new file mode 100644
index 0000000..7a38c13
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/managers/gamemanager/AGameManager.java
@@ -0,0 +1,70 @@
+package fun.asgard.internal.managers.gamemanager;
+
+import fun.asgard.TAGA;
+import fun.asgard.api.objects.game.Game;
+import fun.asgard.api.objects.game.TeamGame;
+import fun.asgard.api.objects.managers.GamesManager;
+import fun.asgard.internal.objects.game.EGame;
+
+import fun.asgard.internal.objects.teamgame.ETeamGame;
+import org.bukkit.World;
+import org.bukkit.plugin.Plugin;
+
+import java.util.HashMap;
+
+public abstract class AGameManager implements GamesManager {
+
+ private final HashMap games = new HashMap<>();
+ private final HashMap teamGames = new HashMap<>();
+ private final TAGA taga;
+ private final Plugin client;
+
+ protected AGameManager(TAGA taga, Plugin client) {
+ this.taga = taga;
+ this.client = client;
+ }
+
+ @Override
+ public Game createGame(World world, String gameName, long timer) {
+ EGame game = new EGame(this.taga, this.client, world, gameName, timer);
+ this.games.put(gameName, game);
+ return game;
+ }
+
+ @Override
+ public Game createGame(World world, String gameName) {
+ return this.createGame(world, gameName, -1);
+ }
+
+ @Override
+ public TeamGame createTeamGame(World world, String gameName, long timer) {
+ TeamGame game = new ETeamGame(this.taga, this.client, world, gameName, timer);
+ this.teamGames.put(gameName, game);
+ return game;
+ }
+
+ @Override
+ public TeamGame createTeamGame(World world, String gameName) {
+ return this.createTeamGame(world, gameName, -1);
+ }
+
+ @Override
+ public Game getGame(String gameName) {
+ return this.getGames().get(gameName);
+ }
+
+ @Override
+ public TeamGame getTeamGame(String gameName) {
+ return this.getTeamGames().get(gameName);
+ }
+
+ @Override
+ public HashMap getGames() {
+ return this.games;
+ }
+
+ @Override
+ public HashMap getTeamGames() {
+ return this.teamGames;
+ }
+}
diff --git a/src/main/java/fun/asgard/internal/managers/gamemanager/EGameManager.java b/src/main/java/fun/asgard/internal/managers/gamemanager/EGameManager.java
new file mode 100644
index 0000000..bf306b6
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/managers/gamemanager/EGameManager.java
@@ -0,0 +1,12 @@
+package fun.asgard.internal.managers.gamemanager;
+
+import fun.asgard.TAGA;
+import org.bukkit.plugin.Plugin;
+
+public class EGameManager extends AGameManager {
+
+ public EGameManager(TAGA taga, Plugin client) {
+ super(taga, client);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/managers/playersmanager/APlayersManager.java b/src/main/java/fun/asgard/internal/managers/playersmanager/APlayersManager.java
new file mode 100644
index 0000000..49a688d
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/managers/playersmanager/APlayersManager.java
@@ -0,0 +1,218 @@
+package fun.asgard.internal.managers.playersmanager;
+
+import fun.asgard.TAGA;
+import fun.asgard.api.events.gameplayerevents.GamePlayerConnectEvent;
+import fun.asgard.api.events.gameplayerevents.GamePlayerDisconnectEvent;
+import fun.asgard.api.events.gameplayerevents.GamePlayerJoinedTeamEvent;
+import fun.asgard.api.events.gameteamevents.GameTeamDisconnectEvent;
+import fun.asgard.api.objects.game.Game;
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.GameTeam;
+import fun.asgard.api.objects.game.TeamGame;
+import fun.asgard.api.objects.managers.PlayersManager;
+import fun.asgard.internal.objects.gameplayer.EGamePlayer;
+import org.bukkit.Color;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+
+import java.util.HashMap;
+import java.util.stream.Collectors;
+
+public abstract class APlayersManager implements PlayersManager {
+
+ private final TAGA taga;
+ private final Plugin client;
+ private final Game game;
+ private final TeamGame teamGame;
+ private final HashMap teams;
+
+ private final HashMap players = new HashMap<>();
+
+ protected APlayersManager(TAGA taga, Plugin client, Game game) {
+ this.client = client;
+ this.taga = taga;
+ this.game = game;
+ this.teamGame = null;
+ this.teams = null;
+ }
+
+ protected APlayersManager(TAGA taga, Plugin client, TeamGame teamGame) {
+ this.client = client;
+ this.taga = taga;
+ this.game = null;
+ this.teamGame = teamGame;
+ this.teams = new HashMap<>();
+ }
+
+ @Override
+ public void connectPlayer(Player player) {
+ this.checkIfValidGame();
+ GamePlayer gp = new EGamePlayer(this.taga, player, getGame());
+ this.players.put(player, gp);
+ this.client.getServer().getPluginManager().callEvent(new GamePlayerConnectEvent(getGame(), player, gp));
+ }
+
+ @Override
+ public void connectPlayer(Player player, Location location) {
+ this.checkIfValidGame();
+ GamePlayer gp = new EGamePlayer(this.taga, player, getGame());
+ this.players.put(player, gp);
+ player.teleport(location);
+ this.client.getServer().getPluginManager().callEvent(new GamePlayerConnectEvent(getGame(), player, gp));
+ }
+
+ @Override
+ public void connectPlayer(Player player, double x, double y, double z) {
+ this.checkIfValidGame();
+ GamePlayer gp = new EGamePlayer(this.taga, player, getGame());
+ this.players.put(player, gp);
+ player.teleport(new Location(getGame().getWorld(), x, y, z));
+ this.client.getServer().getPluginManager().callEvent(new GamePlayerConnectEvent(getGame(), player, gp));
+ }
+
+ @Override
+ public void connectPlayer(Player player, GameTeam team) {
+ this.checkIfValidGame(true);
+ GamePlayer gp = new EGamePlayer(this.taga, player, getTeamGame(), team);
+ this.players.put(player, gp);
+ this.client.getServer().getPluginManager().callEvent(new GamePlayerJoinedTeamEvent(getTeamGame(), player, gp));
+ this.client.getServer().getPluginManager().callEvent(new GamePlayerConnectEvent(getTeamGame(), player, gp));
+ }
+
+ @Override
+ public void connectPlayer(Player player, GameTeam team, Location location) {
+ this.checkIfValidGame(true);
+ GamePlayer gp = new EGamePlayer(this.taga, player, getTeamGame(), team);
+ this.players.put(player, gp);
+ player.teleport(location);
+ this.client.getServer().getPluginManager().callEvent(new GamePlayerJoinedTeamEvent(getTeamGame(), player, gp));
+ this.client.getServer().getPluginManager().callEvent(new GamePlayerConnectEvent(getTeamGame(), player, gp));
+ }
+
+ @Override
+ public void connectPlayer(Player player, GameTeam team, double x, double y, double z) {
+ this.checkIfValidGame(true);
+ GamePlayer gp = new EGamePlayer(this.taga, player, getTeamGame(), team);
+ this.players.put(player, gp);
+ player.teleport(new Location(getTeamGame().getWorld(), x, y, z));
+ this.client.getServer().getPluginManager().callEvent(new GamePlayerJoinedTeamEvent(getTeamGame(), player, gp));
+ this.client.getServer().getPluginManager().callEvent(new GamePlayerConnectEvent(getTeamGame(), player, gp));
+ }
+
+ @Override
+ public void disconnectPlayer(GamePlayer player) {
+ this.checkIfValidGame();
+ this.players.remove(player.getPlayer());
+ this.client.getServer().getPluginManager().callEvent(new GamePlayerDisconnectEvent(getGame(), player.getPlayer()));
+ }
+
+ @Override
+ public void disconnectPlayer(GamePlayer player, Location location) {
+ this.checkIfValidGame();
+ this.players.remove(player.getPlayer());
+ player.getPlayer().teleport(location);
+ this.client.getServer().getPluginManager().callEvent(new GamePlayerDisconnectEvent(getGame(), player.getPlayer()));
+ }
+
+ @Override
+ public void disconnectPlayer(GamePlayer player, double x, double y, double z) {
+ this.checkIfValidGame();
+ this.players.remove(player.getPlayer());
+ player.getPlayer().teleport(new Location(getGame().getWorld(), x, y, z));
+ this.client.getServer().getPluginManager().callEvent(new GamePlayerDisconnectEvent(getGame(), player.getPlayer()));
+ }
+
+ @Override
+ public void disconnectTeam(GameTeam team) {
+ this.checkIfValidGame(true);
+ team.getPlayers().forEach(pl -> this.players.remove(pl.getPlayer()));
+ this.teams.remove(team.getName());
+ this.client.getServer().getPluginManager().callEvent(new GameTeamDisconnectEvent(getTeamGame(),
+ team.getPlayers().stream().map(GamePlayer::getPlayer).collect(Collectors.toSet())));
+ }
+
+ @Override
+ public void disconnectTeam(GameTeam team, Location location) {
+ this.checkIfValidGame(true);
+ team.getPlayers().forEach(pl -> {
+ this.players.remove(pl.getPlayer());
+ pl.getPlayer().teleport(location);
+ });
+ this.teams.remove(team.getName());
+ this.client.getServer().getPluginManager().callEvent(new GameTeamDisconnectEvent(getTeamGame(),
+ team.getPlayers().stream().map(GamePlayer::getPlayer).collect(Collectors.toSet())));
+ }
+
+ @Override
+ public void disconnectTeam(GameTeam team, double x, double y, double z) {
+ this.checkIfValidGame(true);
+ team.getPlayers().forEach(pl -> {
+ this.players.remove(pl.getPlayer());
+ pl.getPlayer().teleport(new Location(getGame().getWorld(), x, y, z));
+ });
+ this.teams.remove(team.getName());
+ this.client.getServer().getPluginManager().callEvent(new GameTeamDisconnectEvent(getTeamGame(),
+ team.getPlayers().stream().map(GamePlayer::getPlayer).collect(Collectors.toSet())));
+ }
+
+ @Override
+ public GameTeam createTeam(String name, Color color) {
+ this.checkIfValidGame(true);
+ return null;
+ }
+
+ @Override
+ public void sendMessage(String message) {
+ this.getPlayers().forEach((player, gamePlayer) -> player.sendMessage(message));
+ }
+
+ @Override
+ public void sendTeamMessage(String message, GameTeam team) {
+ team.getPlayers().forEach(gamePlayer -> gamePlayer.getPlayer().sendMessage(message));
+ }
+
+ @Override
+ public Game getGame() {
+ return game;
+ }
+
+ @Override
+ public TeamGame getTeamGame() {
+ return teamGame;
+ }
+
+ @Override
+ public HashMap getPlayers() {
+ return players;
+ }
+
+ @Override
+ public HashMap getTeams() {
+ return teams;
+ }
+
+ @Override
+ public GameTeam getTeam(String name) {
+ return this.getTeams().get(name);
+ }
+
+ public boolean isTeamGame() {
+ return this.getTeamGame() != null;
+ }
+
+ private boolean checkIfValidGame() {
+ return this.checkIfValidGame(false);
+ }
+
+ private boolean checkIfValidGame(boolean ifTeamInteraction) {
+ if (ifTeamInteraction && getTeamGame() == null) {
+ throw new IllegalCallerException("It is impossible to call the method, the game is not a team game!");
+ } else if (!ifTeamInteraction && getGame() == null) {
+ throw new IllegalCallerException("It is impossible to call the method, the game is team!");
+ } else {
+ return true;
+ }
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/managers/playersmanager/EPlayersManager.java b/src/main/java/fun/asgard/internal/managers/playersmanager/EPlayersManager.java
new file mode 100644
index 0000000..57fcf39
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/managers/playersmanager/EPlayersManager.java
@@ -0,0 +1,18 @@
+package fun.asgard.internal.managers.playersmanager;
+
+import fun.asgard.TAGA;
+import fun.asgard.api.objects.game.Game;
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.plugin.Plugin;
+
+public class EPlayersManager extends APlayersManager {
+
+ public EPlayersManager(TAGA taga, Plugin client, Game game) {
+ super(taga, client, game);
+ }
+
+ public EPlayersManager(TAGA taga, Plugin client, TeamGame teamGame) {
+ super(taga, client, teamGame);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/managers/taskmanager/ATaskManager.java b/src/main/java/fun/asgard/internal/managers/taskmanager/ATaskManager.java
new file mode 100644
index 0000000..4ed709d
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/managers/taskmanager/ATaskManager.java
@@ -0,0 +1,75 @@
+package fun.asgard.internal.managers.taskmanager;
+
+import fun.asgard.TAGA;
+import fun.asgard.api.objects.managers.TaskManager;
+import fun.asgard.api.objects.task.Task;
+import fun.asgard.api.objects.task.TaskRunnable;
+import fun.asgard.internal.Utils;
+import fun.asgard.internal.objects.task.ETask;
+
+import org.bukkit.plugin.Plugin;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.HashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+public abstract class ATaskManager implements TaskManager {
+
+ private final TAGA taga;
+ private final Plugin client;
+ private final HashMap tasks = new HashMap<>();
+
+ protected ATaskManager(TAGA taga, Plugin client) {
+ this.taga = taga;
+ this.client = client;
+ }
+
+ @Override
+ public void createTask(@NotNull TaskRunnable task, long delay, long period){
+ if (delay < 0)
+ throw new IllegalArgumentException("Negative delay.");
+ if (period <= 0)
+ throw new IllegalArgumentException("Non-positive period.");
+
+ ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
+ String id = "Task-" + this.getRandomId();
+ Task gt = new ETask(service, id);
+ service.scheduleWithFixedDelay(() -> task.execute(gt), delay, period, TimeUnit.MILLISECONDS);
+
+ this.tasks.put(id, gt);
+ }
+
+ @Override
+ public void createTask(@NotNull TaskRunnable task, String taskName, long delay, long period){
+ if (delay < 0)
+ throw new IllegalArgumentException("Negative delay.");
+ if (period <= 0)
+ throw new IllegalArgumentException("Non-positive period.");
+
+ ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
+ Task gt = new ETask(service, taskName);
+ service.scheduleWithFixedDelay(() -> task.execute(gt), delay, period, TimeUnit.MILLISECONDS);
+
+ this.tasks.put(taskName, gt);
+ }
+
+ @Override
+ public Task getTask(String taskName) {
+ return this.getTasks().get(taskName);
+ }
+
+ @Override
+ public HashMap getTasks() {
+ return tasks;
+ }
+
+ private String getRandomId() {
+ String str = String.valueOf(Utils.getRandom(this.getTasks().size(), 1000));
+ if (this.getTask(str) != null) return getRandomId();
+ else return str;
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/managers/taskmanager/ETaskManager.java b/src/main/java/fun/asgard/internal/managers/taskmanager/ETaskManager.java
new file mode 100644
index 0000000..f883d05
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/managers/taskmanager/ETaskManager.java
@@ -0,0 +1,12 @@
+package fun.asgard.internal.managers.taskmanager;
+
+import fun.asgard.TAGA;
+import org.bukkit.plugin.Plugin;
+
+public class ETaskManager extends ATaskManager {
+
+ public ETaskManager(TAGA taga, Plugin client) {
+ super(taga, client);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/objects/Game/AGame.java b/src/main/java/fun/asgard/internal/objects/Game/AGame.java
deleted file mode 100644
index 2ce5a69..0000000
--- a/src/main/java/fun/asgard/internal/objects/Game/AGame.java
+++ /dev/null
@@ -1,196 +0,0 @@
-package fun.asgard.internal.objects.Game;
-
-import fun.asgard.TAGA;
-import fun.asgard.api.events.GameStartEvent;
-import fun.asgard.api.events.GameStopEvent;
-import fun.asgard.api.events.PlayerConnectEvent;
-import fun.asgard.api.events.PlayerDisconnectEvent;
-import fun.asgard.api.objects.Game;
-import fun.asgard.api.objects.GamePlayer;
-import fun.asgard.api.objects.GameTask;
-import fun.asgard.internal.Utils;
-import fun.asgard.internal.objects.GamePlayer.EGamePlayer;
-
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.World;
-import org.bukkit.entity.Player;
-import org.bukkit.plugin.Plugin;
-
-import java.util.HashMap;
-import java.util.HashSet;
-
-public abstract class AGame implements Game {
-
- private final World world;
- private final String gameName;
- private final TAGA taga;
- private final Plugin client;
-
- private final HashMap players = new HashMap<>();
- private final HashSet tasks = new HashSet<>();
-
- private long started;
- private long time;
- private boolean leaveOnKick = false;
-
- /**
- * @param client The one who uses the api
- * @param world World of the game
- * @param gameName Name of the game
- * @param time Game time
- */
- public AGame(TAGA taga, Plugin client, World world, String gameName, long time) {
- this.taga = taga;
- this.client = client;
- this.gameName = gameName;
- this.world = world;
- this.time = time;
- }
-
- @Override
- public void start() {
- if (this.world.getLoadedChunks().length <= 0
- || !this.client.getServer().getWorlds().contains(this.world)) {
- this.client.getServer().getWorlds().add(this.world);
- }
-
- this.started = System.currentTimeMillis();
- Bukkit.getPluginManager().callEvent(new GameStartEvent(this, Utils.getValuesFromHashMap(this.players)));
- }
-
- @Override
- public void stop(boolean saveWorld) {
- this.client.getServer().getPluginManager().callEvent(new GameStopEvent(this, (GamePlayer[]) Utils.getValuesFromHashMap(this.players).toArray()));
- this.shutdown(saveWorld);
- }
-
-
- @Override
- public void stop(GamePlayer winner, GamePlayer loser, boolean saveWorld) {
- this.client.getServer().getPluginManager().callEvent(new GameStopEvent(this, (GamePlayer[]) Utils.getValuesFromHashMap(this.players).toArray(), winner, loser));
- this.shutdown(saveWorld);
- }
-
- @Override
- public void stop(GamePlayer[] winners, GamePlayer[] losers, boolean saveWorld) {
- this.client.getServer().getPluginManager().callEvent(new GameStopEvent(this, (GamePlayer[]) Utils.getValuesFromHashMap(this.players).toArray(), winners, losers));
- this.shutdown(saveWorld);
- }
-
-
- @Override
- public void stop(HashSet winners, HashSet losers, boolean saveWorld) {
- this.client.getServer().getPluginManager().callEvent(new GameStopEvent(this, Utils.getValuesFromHashMap(this.players), winners, losers));
- this.shutdown(saveWorld);
- }
-
- @Override
- public void shutdown(boolean saveWorld) {
- this.time = 0;
- this.getTasks().forEach(GameTask::cancel);
- this.players.forEach((pl, gp) -> this.disconnectPlayer(gp));
- Bukkit.unloadWorld(this.world, saveWorld);
- }
-
- @Override
- public void connectPlayer(Player player) {
- this.players.put(player, new EGamePlayer(this.taga, player, this));
- this.client.getServer().getPluginManager().callEvent(new PlayerConnectEvent(this, player));
- }
-
- @Override
- public void connectPlayer(Player player, Location location) {
- this.players.put(player, new EGamePlayer(this.taga, player, this));
- player.teleport(location);
- this.client.getServer().getPluginManager().callEvent(new PlayerConnectEvent(this, player));
- }
-
- @Override
- public void connectPlayer(Player player, double x, double y, double z) {
- this.players.put(player, (new EGamePlayer(this.taga, player, this)));
- player.teleport(new Location(this.world, x, y, z));
- this.client.getServer().getPluginManager().callEvent(new PlayerConnectEvent(this, player));
- }
-
- @Override
- public void disconnectPlayer(GamePlayer player) {
- this.players.remove(player);
- this.client.getServer().getPluginManager().callEvent(new PlayerDisconnectEvent(this, player.getPlayer()));
- }
-
- @Override
- public void disconnectPlayer(GamePlayer player, Location location) {
- this.players.remove(player);
- player.getPlayer().teleport(location);
- this.client.getServer().getPluginManager().callEvent(new PlayerDisconnectEvent(this, player.getPlayer()));
- }
-
- @Override
- public void disconnectPlayer(GamePlayer player, double x, double y, double z) {
- this.players.remove(player);
- player.getPlayer().teleport(new Location(this.world, x, y, z));
- this.client.getServer().getPluginManager().callEvent(new PlayerDisconnectEvent(this, player.getPlayer()));
- }
-
- @Override
- public HashSet getTasks() {
- return tasks;
- }
-
- @Override
- public long getWhenStarted() {
- return started;
- }
-
- @Override
- public HashMap getPlayers() {
- return players;
- }
-
- @Override
- public long getTime() {
- return time;
- }
-
- @Override
- public String getGameName() {
- return gameName;
- }
-
- @Override
- public World getWorld() {
- return world;
- }
-
- @Override
- public GameTask getTask() {
- return this.taga.getTaskManager().getTask(this);
- }
-
- @Override
- public void setTime(long time) {
- this.time = time;
- }
-
- @Override
- public void setKickOnLeave(boolean kickOnLeave) {
- this.leaveOnKick = kickOnLeave;
- }
-
- @Override
- public boolean isLeaveOnKick() {
- return leaveOnKick;
- }
-
- @Override
- public String toString() {
- return "Game { " +
- "world = " + world.getName() +
- ", gameName = '" + gameName + '\'' +
- ", time = " + time +
- ", players = " + players +
- '}';
- }
-
-}
diff --git a/src/main/java/fun/asgard/internal/objects/GamePlayer/AGamePlayer.java b/src/main/java/fun/asgard/internal/objects/GamePlayer/AGamePlayer.java
deleted file mode 100644
index 28f9dd1..0000000
--- a/src/main/java/fun/asgard/internal/objects/GamePlayer/AGamePlayer.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package fun.asgard.internal.objects.GamePlayer;
-
-import fun.asgard.TAGA;
-import fun.asgard.api.objects.Game;
-import fun.asgard.api.objects.GamePlayer;
-
-import org.bukkit.entity.Player;
-
-public abstract class AGamePlayer implements GamePlayer {
-
- private final TAGA taga;
- private final Player player;
- private final Game game;
- private int score = 0;
- private boolean isDied = false;
-
- public AGamePlayer(TAGA taga, Player player, Game game) {
- this.taga = taga;
- this.player = player;
- this.game = game;
- }
-
- @Override
- public Player getPlayer() {
- return this.player;
- }
-
- @Override
- public Game getGame() {
- return this.game;
- }
-
- @Override
- public int getScore() {
- return this.score;
- }
-
- @Override
- public boolean isDied() {
- return this.isDied;
- }
-
- @Override
- public void setScore(int score) {
- this.score = score;
- }
-
- @Override
- public void setDied(boolean isDied) {
- this.isDied = isDied;
- }
-
-}
diff --git a/src/main/java/fun/asgard/internal/objects/GamePlayer/EGamePlayer.java b/src/main/java/fun/asgard/internal/objects/GamePlayer/EGamePlayer.java
deleted file mode 100644
index c606a03..0000000
--- a/src/main/java/fun/asgard/internal/objects/GamePlayer/EGamePlayer.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package fun.asgard.internal.objects.GamePlayer;
-
-import fun.asgard.TAGA;
-import fun.asgard.api.objects.Game;
-
-import org.bukkit.entity.Player;
-
-public class EGamePlayer extends AGamePlayer {
-
- public EGamePlayer(TAGA taga, Player player, Game game) {
- super(taga, player, game);
- }
-
-}
diff --git a/src/main/java/fun/asgard/internal/objects/GameTask/AGameTask.java b/src/main/java/fun/asgard/internal/objects/GameTask/AGameTask.java
deleted file mode 100644
index 9ad5043..0000000
--- a/src/main/java/fun/asgard/internal/objects/GameTask/AGameTask.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package fun.asgard.internal.objects.GameTask;
-
-import fun.asgard.api.objects.Game;
-import fun.asgard.api.objects.GameTask;
-
-import java.util.concurrent.ScheduledExecutorService;
-
-public abstract class AGameTask implements GameTask {
-
- private final ScheduledExecutorService service;
- private final Game game;
-
- public AGameTask(Game game, ScheduledExecutorService service) {
- this.game = game;
- this.service = service;
- }
-
- @Override
- public void cancel() {
- this.game.getTasks().remove(this);
- this.service.shutdown();
- }
-
- @Override
- public Game getGame() {
- return this.game;
- }
-
-}
diff --git a/src/main/java/fun/asgard/internal/objects/GameTask/EGameTask.java b/src/main/java/fun/asgard/internal/objects/GameTask/EGameTask.java
deleted file mode 100644
index 050ee44..0000000
--- a/src/main/java/fun/asgard/internal/objects/GameTask/EGameTask.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package fun.asgard.internal.objects.GameTask;
-
-import fun.asgard.api.objects.Game;
-
-import java.util.concurrent.ScheduledExecutorService;
-
-public class EGameTask extends AGameTask {
-
- public EGameTask(Game game, ScheduledExecutorService service) {
- super(game, service);
- }
-
-}
diff --git a/src/main/java/fun/asgard/internal/objects/game/AGame.java b/src/main/java/fun/asgard/internal/objects/game/AGame.java
new file mode 100644
index 0000000..6b75d81
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/objects/game/AGame.java
@@ -0,0 +1,142 @@
+package fun.asgard.internal.objects.game;
+
+import fun.asgard.TAGA;
+import fun.asgard.api.events.gameevents.GameStartEvent;
+import fun.asgard.api.events.gameevents.GameStopEvent;
+import fun.asgard.api.objects.game.Game;
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.managers.PlayersManager;
+import fun.asgard.internal.Utils;
+import fun.asgard.internal.managers.playersmanager.EPlayersManager;
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+import org.bukkit.plugin.Plugin;
+
+import java.util.HashSet;
+
+public abstract class AGame implements Game {
+
+ private final World world;
+ private final String gameName;
+ private final TAGA taga;
+ private final Plugin client;
+ private final PlayersManager playersManager;
+
+ private long started;
+ private long time;
+ private boolean leaveOnKick = false;
+
+ /**
+ * @param client The one who uses the api
+ * @param world World of the game
+ * @param gameName Name of the game
+ * @param time Game time
+ */
+ protected AGame(TAGA taga, Plugin client, World world, String gameName, long time) {
+ this.taga = taga;
+ this.client = client;
+ this.gameName = gameName;
+ this.world = world;
+ this.time = time;
+ this.playersManager = new EPlayersManager(taga, client, this);
+ }
+
+ @Override
+ public long getWhenStarted() {
+ return started;
+ }
+
+ @Override
+ public long getTime() {
+ return time;
+ }
+
+ @Override
+ public String getGameName() {
+ return gameName;
+ }
+
+ @Override
+ public World getWorld() {
+ return world;
+ }
+
+ @Override
+ public void setTime(long time) {
+ this.time = time;
+ }
+
+ @Override
+ public void setLeaveOnKick(boolean kickOnLeave) {
+ this.leaveOnKick = kickOnLeave;
+ }
+
+ @Override
+ public boolean isLeaveOnKick() {
+ return leaveOnKick;
+ }
+
+ @Override
+ public void start() {
+ if (this.world.getLoadedChunks().length <= 0
+ || !this.client.getServer().getWorlds().contains(this.world)) {
+ this.client.getServer().getWorlds().add(this.world);
+ }
+
+ this.started = System.currentTimeMillis();
+ Bukkit.getPluginManager().callEvent(new GameStartEvent(this, Utils.valueSet(this.getPlayersManager().getPlayers())));
+
+ }
+
+ @Override
+ public void stop(boolean saveWorld) {
+ this.client.getServer().getPluginManager().callEvent(new GameStopEvent(this, (GamePlayer[]) Utils.valueSet(this.getPlayersManager().getPlayers()).toArray()));
+ this.shutdown(saveWorld);
+ }
+
+ @Override
+ public void stop(GamePlayer winner, GamePlayer loser, boolean saveWorld) {
+ this.client.getServer().getPluginManager().callEvent(new GameStopEvent(this, (GamePlayer[]) Utils.valueSet(this.getPlayersManager().getPlayers()).toArray(), winner, loser));
+ this.shutdown(saveWorld);
+ }
+
+ @Override
+ public void stop(GamePlayer[] winners, GamePlayer[] losers, boolean saveWorld) {
+ this.client.getServer().getPluginManager().callEvent(new GameStopEvent(this, (GamePlayer[]) Utils.valueSet(this.getPlayersManager().getPlayers()).toArray(), winners, losers));
+ this.shutdown(saveWorld);
+ }
+
+
+ @Override
+ public void stop(HashSet winners, HashSet losers, boolean saveWorld) {
+ this.client.getServer().getPluginManager().callEvent(new GameStopEvent(this, Utils.valueSet(this.getPlayersManager().getPlayers()), winners, losers));
+ this.shutdown(saveWorld);
+ }
+
+ @Override
+ public void shutdown(boolean saveWorld) {
+ this.time = 0;
+ this.getPlayersManager().getPlayers().forEach((pl, gp) -> this.getPlayersManager().disconnectPlayer(gp));
+ Bukkit.unloadWorld(this.world, saveWorld);
+ }
+
+ @Override
+ public PlayersManager getPlayersManager() {
+ return this.playersManager;
+ }
+
+ @Override
+ public boolean isTeamGame() {
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return "Game { " +
+ "world = " + world.getName() +
+ ", gameName = '" + gameName + '\'' +
+ ", time = " + time +
+ '}';
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/objects/Game/EGame.java b/src/main/java/fun/asgard/internal/objects/game/EGame.java
similarity index 87%
rename from src/main/java/fun/asgard/internal/objects/Game/EGame.java
rename to src/main/java/fun/asgard/internal/objects/game/EGame.java
index a17ff9e..ccc5008 100644
--- a/src/main/java/fun/asgard/internal/objects/Game/EGame.java
+++ b/src/main/java/fun/asgard/internal/objects/game/EGame.java
@@ -1,4 +1,4 @@
-package fun.asgard.internal.objects.Game;
+package fun.asgard.internal.objects.game;
import fun.asgard.TAGA;
import org.bukkit.World;
diff --git a/src/main/java/fun/asgard/internal/objects/gameplayer/AGamePlayer.java b/src/main/java/fun/asgard/internal/objects/gameplayer/AGamePlayer.java
new file mode 100644
index 0000000..602ad92
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/objects/gameplayer/AGamePlayer.java
@@ -0,0 +1,76 @@
+package fun.asgard.internal.objects.gameplayer;
+
+import fun.asgard.TAGA;
+import fun.asgard.api.objects.game.Game;
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.GameTeam;
+
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.entity.Player;
+
+public abstract class AGamePlayer implements GamePlayer {
+
+ private final TAGA taga;
+ private final Player player;
+ private final Game game;
+ private final TeamGame teamgame;
+ private GameTeam team = null;
+ private int score = 0;
+ private boolean isDied = false;
+
+ protected AGamePlayer(TAGA taga, Player player, Game game) {
+ this.taga = taga;
+ this.player = player;
+ this.game = game;
+ this.teamgame = null;
+ }
+
+ protected AGamePlayer(TAGA taga, Player player, TeamGame game, GameTeam team) {
+ this.taga = taga;
+ this.player = player;
+ this.teamgame = game;
+ this.game = null;
+ this.team = team;
+ }
+
+ @Override
+ public Player getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public Game getGame() {
+ return this.game;
+ }
+
+ @Override
+ public int getScore() {
+ return this.score;
+ }
+
+ @Override
+ public GameTeam getTeam() {
+ return this.team;
+ }
+
+ @Override
+ public boolean isDied() {
+ return this.isDied;
+ }
+
+ @Override
+ public void setScore(int score) {
+ this.score = score;
+ }
+
+ @Override
+ public void setDied(boolean isDied) {
+ this.isDied = isDied;
+ }
+
+ @Override
+ public void setTeam(GameTeam team) {
+ this.team = team;
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/objects/gameplayer/EGamePlayer.java b/src/main/java/fun/asgard/internal/objects/gameplayer/EGamePlayer.java
new file mode 100644
index 0000000..7d4142d
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/objects/gameplayer/EGamePlayer.java
@@ -0,0 +1,20 @@
+package fun.asgard.internal.objects.gameplayer;
+
+import fun.asgard.TAGA;
+import fun.asgard.api.objects.game.Game;
+import fun.asgard.api.objects.game.GameTeam;
+
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.entity.Player;
+
+public class EGamePlayer extends AGamePlayer {
+
+ public EGamePlayer(TAGA taga, Player player, Game game) {
+ super(taga, player, game);
+ }
+
+ public EGamePlayer(TAGA taga, Player player, TeamGame game, GameTeam team) {
+ super(taga, player, game, team);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/objects/gameteam/AGameTeam.java b/src/main/java/fun/asgard/internal/objects/gameteam/AGameTeam.java
new file mode 100644
index 0000000..d9391cb
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/objects/gameteam/AGameTeam.java
@@ -0,0 +1,76 @@
+package fun.asgard.internal.objects.gameteam;
+
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.GameTeam;
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.Color;
+
+import java.util.HashSet;
+
+public abstract class AGameTeam implements GameTeam {
+
+ private final HashSet players = new HashSet<>();
+ private final TeamGame game;
+
+ private int score;
+ private boolean isLost;
+ private Color color;
+ private String name;
+
+ protected AGameTeam(TeamGame game, Color color, String name) {
+ this.game = game;
+ this.color = color;
+ this.name = name;
+ }
+
+ @Override
+ public HashSet getPlayers() {
+ return this.players;
+ }
+
+ @Override
+ public TeamGame getTeamGame() {
+ return this.game;
+ }
+
+ @Override
+ public int getScore() {
+ return this.score;
+ }
+
+ @Override
+ public boolean isLost() {
+ return this.isLost;
+ }
+
+ @Override
+ public Color getColor() {
+ return this.color;
+ }
+
+ @Override
+ public String getName() {
+ return this.name;
+ }
+
+ @Override
+ public void setScore(int score) {
+ this.score = score;
+ }
+
+ @Override
+ public void setLost(boolean isLost) {
+ this.isLost = isLost;
+ }
+
+ @Override
+ public void setColor(Color color) {
+ this.color = color;
+ }
+
+ @Override
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/objects/gameteam/EGameTeam.java b/src/main/java/fun/asgard/internal/objects/gameteam/EGameTeam.java
new file mode 100644
index 0000000..78abf59
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/objects/gameteam/EGameTeam.java
@@ -0,0 +1,18 @@
+package fun.asgard.internal.objects.gameteam;
+
+import fun.asgard.api.objects.game.TeamGame;
+import org.bukkit.Color;
+
+public class EGameTeam extends AGameTeam {
+
+ /**
+ *
+ * @param teamGame Team game
+ * @param color Color of the team
+ * @param name Team name
+ */
+ public EGameTeam(TeamGame teamGame, Color color, String name) {
+ super(teamGame, color, name);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/objects/task/ATask.java b/src/main/java/fun/asgard/internal/objects/task/ATask.java
new file mode 100644
index 0000000..e6d6646
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/objects/task/ATask.java
@@ -0,0 +1,32 @@
+package fun.asgard.internal.objects.task;
+
+import fun.asgard.api.objects.task.Task;
+
+import java.util.concurrent.ScheduledExecutorService;
+
+public abstract class ATask implements Task {
+
+ private final ScheduledExecutorService service;
+ private String name;
+
+ protected ATask(ScheduledExecutorService service, String name) {
+ this.service = service;
+ this.name = name;
+ }
+
+ @Override
+ public void cancel() {
+ this.service.shutdown();
+ }
+
+ @Override
+ public String getName() {
+ return this.name;
+ }
+
+ @Override
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/objects/task/ETask.java b/src/main/java/fun/asgard/internal/objects/task/ETask.java
new file mode 100644
index 0000000..63bcfeb
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/objects/task/ETask.java
@@ -0,0 +1,11 @@
+package fun.asgard.internal.objects.task;
+
+import java.util.concurrent.ScheduledExecutorService;
+
+public class ETask extends ATask {
+
+ public ETask(ScheduledExecutorService service, String name) {
+ super(service, name);
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/objects/teamgame/ATeamGame.java b/src/main/java/fun/asgard/internal/objects/teamgame/ATeamGame.java
new file mode 100644
index 0000000..08ef092
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/objects/teamgame/ATeamGame.java
@@ -0,0 +1,143 @@
+package fun.asgard.internal.objects.teamgame;
+
+import fun.asgard.TAGA;
+import fun.asgard.api.events.gameevents.GameStartEvent;
+import fun.asgard.api.events.gameevents.GameStopEvent;
+import fun.asgard.api.objects.game.GamePlayer;
+import fun.asgard.api.objects.game.GameTeam;
+import fun.asgard.api.objects.game.TeamGame;
+import fun.asgard.api.objects.managers.PlayersManager;
+import fun.asgard.internal.Utils;
+import fun.asgard.internal.managers.playersmanager.EPlayersManager;
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+
+import java.util.HashMap;
+import java.util.HashSet;
+
+public abstract class ATeamGame implements TeamGame {
+
+ private final PlayersManager playersManager;
+ private final World world;
+ private final String gameName;
+ private final TAGA taga;
+ private final Plugin client;
+
+ private long started;
+ private long time;
+ private boolean leaveOnKick = false;
+
+ /**
+ * @param client The one who uses the api
+ * @param world World of the game
+ * @param gameName Name of the game
+ * @param time Game time
+ */
+ protected ATeamGame(TAGA taga, Plugin client, World world, String gameName, long time) {
+ this.taga = taga;
+ this.client = client;
+ this.gameName = gameName;
+ this.world = world;
+ this.time = time;
+ this.playersManager = new EPlayersManager(taga, client, this);
+ }
+
+ @Override
+ public void start() {
+ if (this.world.getLoadedChunks().length <= 0
+ || !this.client.getServer().getWorlds().contains(this.world)) {
+ this.client.getServer().getWorlds().add(this.world);
+ }
+
+ this.started = System.currentTimeMillis();
+ Bukkit.getPluginManager().callEvent(new GameStartEvent(this, Utils.valueSet(this.getPlayersManager().getPlayers())));
+ }
+
+ @Override
+ public void stop(boolean saveWorld) {
+ this.client.getServer().getPluginManager().callEvent(new GameStopEvent(this, (GamePlayer[]) Utils.valueSet(this.getPlayersManager().getPlayers()).toArray()));
+ this.shutdown(saveWorld);
+ }
+
+ @Override
+ public void stop(GamePlayer winner, GamePlayer loser, boolean saveWorld) {
+ this.client.getServer().getPluginManager().callEvent(new GameStopEvent(this, (GamePlayer[]) Utils.valueSet(this.getPlayersManager().getPlayers()).toArray(), winner, loser));
+ this.shutdown(saveWorld);
+ }
+
+ @Override
+ public void stop(GamePlayer[] winners, GamePlayer[] losers, boolean saveWorld) {
+ this.client.getServer().getPluginManager().callEvent(new GameStopEvent(this, (GamePlayer[]) Utils.valueSet(this.getPlayersManager().getPlayers()).toArray(), winners, losers));
+ this.shutdown(saveWorld);
+ }
+
+ @Override
+ public void stop(HashSet winners, HashSet losers, boolean saveWorld) {
+ this.client.getServer().getPluginManager().callEvent(new GameStopEvent(this, Utils.valueSet(this.getPlayersManager().getPlayers()), winners, losers));
+ this.shutdown(saveWorld);
+ }
+
+ @Override
+ public void shutdown(boolean saveWorld) {
+ this.time = 0;
+ this.getPlayersManager().getPlayers().forEach((pl, gp) -> this.getPlayersManager().disconnectPlayer(gp));
+ Bukkit.unloadWorld(this.world, saveWorld);
+ }
+
+ @Override
+ public PlayersManager getPlayersManager() {
+ return this.playersManager;
+ }
+
+ @Override
+ public long getWhenStarted() {
+ return this.started;
+ }
+
+ @Override
+ public long getTime() {
+ return this.time;
+ }
+
+ @Override
+ public String getGameName() {
+ return this.gameName;
+ }
+
+ @Override
+ public World getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public void setTime(long time) {
+ this.time = time;
+ }
+
+ @Override
+ public void setLeaveOnKick(boolean leaveOnKick) {
+ this.leaveOnKick = leaveOnKick;
+ }
+
+ @Override
+ public boolean isLeaveOnKick() {
+ return this.leaveOnKick;
+ }
+
+ @Override
+ public boolean isTeamGame() {
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "TeamGame { " +
+ "world = " + world.getName() +
+ ", gameName = '" + gameName + '\'' +
+ ", time = " + time +
+ '}';
+ }
+
+}
diff --git a/src/main/java/fun/asgard/internal/objects/teamgame/ETeamGame.java b/src/main/java/fun/asgard/internal/objects/teamgame/ETeamGame.java
new file mode 100644
index 0000000..90c9ccb
--- /dev/null
+++ b/src/main/java/fun/asgard/internal/objects/teamgame/ETeamGame.java
@@ -0,0 +1,20 @@
+package fun.asgard.internal.objects.teamgame;
+
+
+import fun.asgard.TAGA;
+import org.bukkit.World;
+import org.bukkit.plugin.Plugin;
+
+public class ETeamGame extends ATeamGame {
+
+ /**
+ * @param client The one who uses the api
+ * @param world World of the game
+ * @param gameName Name of the game
+ * @param time Game time
+ */
+ public ETeamGame(TAGA taga, Plugin client, World world, String gameName, long time) {
+ super(taga, client, world, gameName, time);
+ }
+
+}
diff --git a/src/test/java/SamplePlugin.java b/src/test/java/SamplePlugin.java
index 3940640..affd8a6 100644
--- a/src/test/java/SamplePlugin.java
+++ b/src/test/java/SamplePlugin.java
@@ -1,7 +1,7 @@
import fun.asgard.TAGA;
-import fun.asgard.api.events.GameStartEvent;
-import fun.asgard.api.events.GameStopEvent;
-import fun.asgard.api.objects.Game;
+import fun.asgard.api.events.gameevents.GameStartEvent;
+import fun.asgard.api.events.gameevents.GameStopEvent;
+import fun.asgard.api.objects.game.Game;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@@ -18,7 +18,7 @@ public void onEnable() {
Game game1 = taga.getGameManager().createGame(Bukkit.getWorld("world"), "SampleGame", 5 * 1000);
Game game2 = taga.getGameManager().createGame(Bukkit.getWorld("world"), "SampleGame2", 5 * 1000);
- game2.setKickOnLeave(true);
+ game2.setLeaveOnKick(true);
}
@Override
@@ -28,9 +28,9 @@ public void onDisable() {
@EventHandler
public void onPlayerJoined(PlayerJoinEvent event) {
- Game game = taga.getGameManager().getGames().get("ABOBA");
- game.connectPlayer(event.getPlayer());
- if (game.getPlayers().size() >= 1) {
+ Game game = taga.getGameManager().getGames().get("SampleGame2");
+ game.getPlayersManager().connectPlayer(event.getPlayer());
+ if (game.getPlayersManager().getPlayers().size() >= 1) {
game.start();
}
}
@@ -40,10 +40,10 @@ public void onGameStart(GameStartEvent event) {
event.getPlayers().forEach(player -> {
player.getPlayer().sendMessage("Game is started!");
});
- taga.getTaskManager().createGameTask(() ->
+ taga.getTaskManager().createTask(task ->
event.getPlayers().forEach(player ->
player.getPlayer().sendMessage("5 minutes of the game has passed!")),
- event.getGame(), 5 * 60 * 1000, 5 * 60 * 1000);
+ event.getGame().getGameName(), 5 * 60 * 1000, 5 * 60 * 1000);
}
@EventHandler