Cleanup code

This commit is contained in:
FirephoenixX02 2024-05-29 16:40:01 +02:00
parent fc4a033d8e
commit ca3060321b
7 changed files with 221 additions and 109 deletions

View file

@ -13,16 +13,11 @@ import me.firephoenix.ps3minigames.listener.DeathListener;
import me.firephoenix.ps3minigames.listener.JoinQuitListener;
import me.firephoenix.ps3minigames.listener.MoveListener;
import me.firephoenix.ps3minigames.listener.WorldListener;
import me.firephoenix.ps3minigames.states.GameState;
import me.firephoenix.ps3minigames.states.LobbyState;
import me.firephoenix.ps3minigames.util.GameUtil;
import me.firephoenix.ps3minigames.util.Timer;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.HashMap;

View file

@ -33,11 +33,13 @@ public class ForceStop implements CommandExecutor {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.cant-find-game")));
return true;
} else {
if (Objects.requireNonNull(PS3Minigames.INSTANCE.getGameUtil().getGameByID(gameID)).getGameState() != GameState.RUNNING) {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.cant-stop-game")));
GameState state = PS3Minigames.INSTANCE.getGameUtil().getGameByID(gameID).getGameState();
if (state == GameState.INVINCIBILITY || state == GameState.RUNNING) {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.force-stopping-game").replace("%map%", Objects.requireNonNull(PS3Minigames.INSTANCE.getGameUtil().getGameByID(gameID)).getMap().getName())));
PS3Minigames.INSTANCE.getGameUtil().stopGame(Objects.requireNonNull(PS3Minigames.INSTANCE.getGameUtil().getGameByID(gameID)));
return true;
}
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.force-stopping-game").replace("%map%", Objects.requireNonNull(PS3Minigames.INSTANCE.getGameUtil().getGameByID(gameID)).getMap().getName())));
PS3Minigames.INSTANCE.getGameUtil().stopGame(Objects.requireNonNull(PS3Minigames.INSTANCE.getGameUtil().getGameByID(gameID)));
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.cant-stop-game")));
return true;
}
}

View file

@ -0,0 +1,32 @@
package me.firephoenix.ps3minigames.listener;
import me.firephoenix.ps3minigames.PS3Minigames;
import me.firephoenix.ps3minigames.game.Game;
import me.firephoenix.ps3minigames.states.GameState;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
/**
* @author NieGestorben
* Copyright© (c) 2024, All Rights Reserved.
*/
public class DamageListener implements Listener {
@EventHandler
public void onDamage(EntityDamageByEntityEvent e) {
if (!(e.getEntity() instanceof Player)) return;
Player player = (Player) e.getEntity();
Game game = PS3Minigames.INSTANCE.getGameUtil().getGameByWorld(player.getWorld());
if (game == null) return;
GameState state = game.getGameState();
if (state == GameState.INVINCIBILITY || state == GameState.STARTING) e.setCancelled(true);
}
}

View file

@ -5,7 +5,9 @@ import me.firephoenix.ps3minigames.game.Game;
import me.firephoenix.ps3minigames.states.LobbyState;
import me.firephoenix.ps3minigames.util.GameUtil;
import me.firephoenix.ps3minigames.util.Timer;
import org.bukkit.*;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -14,7 +16,6 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.util.ArrayList;
import java.util.Objects;
import java.util.UUID;
/**
@ -34,46 +35,50 @@ public class JoinQuitListener implements Listener {
@EventHandler
public void onJoin(PlayerJoinEvent e) {
Player player = e.getPlayer();
player.teleport(new Location(plugin.getServer().getWorld(config.getString("spawn-lobby.world")), config.getDouble("spawn-lobby.x"), config.getDouble("spawn-lobby.y"), config.getDouble("spawn-lobby.z"), (float) config.getDouble("spawn-lobby.yaw"), (float) config.getDouble("spawn-lobby.pitch")));
player.setHealth(20);
player.setFoodLevel(20);
player.getInventory().clear();
player.getInventory().setBoots(null);
player.getInventory().setLeggings(null);
player.getInventory().setChestplate(null);
player.getInventory().setHelmet(null);
player.setGameMode(GameMode.SURVIVAL);
// Send all players which are in the lobby the join message
player.teleport(new Location(
plugin.getServer().getWorld(config.getString("spawn-lobby.world")),
config.getDouble("spawn-lobby.x"),
config.getDouble("spawn-lobby.y"),
config.getDouble("spawn-lobby.z"),
(float) config.getDouble("spawn-lobby.yaw"),
(float) config.getDouble("spawn-lobby.pitch")
));
GameUtil.resetInventory(player);
// Send all players in the lobby the join message
String joinMessage = ChatColor.translateAlternateColorCodes('&', config.getString("messages.join").replace("%player%", player.getDisplayName()));
for (Player player1 : plugin.getLobby().getPlayers()) {
player1.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.join").replace("%player%", player.getDisplayName())));
player1.sendMessage(joinMessage);
}
// Send joined player the join message, because joinevent is 1 tick before the player gets added to the world player list
player.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.join").replace("%player%", player.getDisplayName())));
if (plugin.getLobby().getPlayers().size() == 0) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.needed-players")));
player.sendMessage(joinMessage);
int lobbySize = plugin.getLobby().getPlayers().size();
if (lobbySize == 0) {
String neededPlayersMessage = ChatColor.translateAlternateColorCodes('&', config.getString("messages.needed-players"));
player.sendMessage(neededPlayersMessage);
for (Player player1 : plugin.getLobby().getPlayers()) {
player1.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.needed-players")));
player1.sendMessage(neededPlayersMessage);
}
} else {
if (plugin.getLobby().getPlayers().size() >= 3) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.game-start").replace("%seconds%", "10")));
for (Player player1 : plugin.getLobby().getPlayers()) {
player1.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.game-start").replace("%seconds%", "10")));
}
} else {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.game-start").replace("%seconds%", "25")));
for (Player player1 : plugin.getLobby().getPlayers()) {
player1.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.game-start").replace("%seconds%", "25")));
}
String gameStartMessage;
int startSeconds = (lobbySize >= 3) ? 10 : 25;
gameStartMessage = ChatColor.translateAlternateColorCodes('&', config.getString("messages.game-start").replace("%seconds%", Integer.toString(startSeconds)));
player.sendMessage(gameStartMessage);
for (Player player1 : plugin.getLobby().getPlayers()) {
player1.sendMessage(gameStartMessage);
}
if (plugin.getLobbyState() == LobbyState.IDLE) {
plugin.setLobbyState(LobbyState.STARTING);
lobbyPlayers.add(player.getUniqueId());
plugin.getLobby().getPlayers().forEach(player1 -> lobbyPlayers.add(player1.getUniqueId()));
gameTimer.start();
gameTimer = new Timer(plugin.getLobby().getPlayers().size() >= 3 ? 10 : 25, plugin);
gameTimer = new Timer(startSeconds, plugin);
gameTimer.whenComplete(() -> PS3Minigames.INSTANCE.getGameUtil().startNewGame(lobbyPlayers, plugin.getServer().getWorld("cavern")));
}
}

View file

@ -8,5 +8,6 @@ public enum GameState {
STARTING,
RUNNING,
INVINCIBILITY,
STOPPING
}

View file

@ -1,5 +1,8 @@
package me.firephoenix.ps3minigames.util;
import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import me.firephoenix.ps3minigames.PS3Minigames;
import me.firephoenix.ps3minigames.game.Game;
import me.firephoenix.ps3minigames.states.GameState;
@ -19,59 +22,55 @@ import java.util.*;
*/
public class GameUtil {
public static int getRandomInRange(int min, int max) {
Random random = new Random();
return random.nextInt(max - min) + min;
}
public static float getRandomInRange(float min, float max) {
return (float) (min + Math.random() * (max - min));
}
public void startNewGame(ArrayList<UUID> players, World map) {
int ID = PS3Minigames.INSTANCE.getGames().size() + 1;
String newName = map.getName() + "game" + ID;
boolean copydone = PS3Minigames.INSTANCE.getMultiverseCore().getMVWorldManager().cloneWorld(map.getName(), newName);
if (copydone) {
boolean loadingdone = PS3Minigames.INSTANCE.getMultiverseCore().getMVWorldManager().loadWorld(newName);
if (loadingdone) {
PS3Minigames.INSTANCE.getMultiverseCore().getMVWorldManager().getMVWorld(newName).setAlias(newName);
World gameWorld = Bukkit.getWorld(newName);
Game newGame = new Game(ID, players, gameWorld, GameState.STARTING);
PS3Minigames.INSTANCE.getGames().add(newGame);
PS3Minigames.INSTANCE.getWorldToGameHashMap().put(gameWorld, newGame);
int spawnnumber = 1;
for (UUID uuid : players) {
if (PS3Minigames.INSTANCE.getServer().getPlayer(uuid) == null) return;
PS3Minigames.INSTANCE.getServer().getPlayer(uuid).sendMessage(ChatColor.translateAlternateColorCodes('&', PS3Minigames.INSTANCE.getConfig().getString("messages.teleporting")));
String configpathtospawnloc = "maps." + map.getName() + ".spawn" + spawnnumber++;
Location location = new Location(gameWorld, PS3Minigames.INSTANCE.getConfig().getDouble(configpathtospawnloc + ".x"), PS3Minigames.INSTANCE.getConfig().getDouble(configpathtospawnloc + ".y"), PS3Minigames.INSTANCE.getConfig().getDouble(configpathtospawnloc + ".z"), (float) PS3Minigames.INSTANCE.getConfig().getDouble(configpathtospawnloc + ".yaw"), (float) PS3Minigames.INSTANCE.getConfig().getDouble(configpathtospawnloc + ".pitch"));
Bukkit.getServer().getPlayer(uuid).teleport(location);
PS3Minigames.INSTANCE.getFrozenPlayer().add(uuid);
}
Timer timer = new Timer(10, PS3Minigames.INSTANCE);
timer.start();
fillChests(newGame);
timer.eachSecond(() -> {
for (UUID uuid : newGame.getPlayers()) {
if (Bukkit.getServer().getPlayer(uuid) == null) return;
Bukkit.getServer().getPlayer(uuid).sendTitle(ChatColor.translateAlternateColorCodes('&', "&6" + timer.getCounter()), "");
}
});
timer.whenComplete(() -> {
newGame.setGameState(GameState.RUNNING);
gameWorld.getPlayers().forEach(player -> {
PS3Minigames.INSTANCE.getFrozenPlayer().remove(player.getUniqueId());
player.sendMessage(ChatColor.translateAlternateColorCodes('&', PS3Minigames.INSTANCE.getConfig().getString("messages.game-start-no-countdown")));
});
});
} else {
System.out.println("error while trying to load the world!");
}
} else {
System.out.println("error while trying to copy the world!");
PS3Minigames plugin = PS3Minigames.INSTANCE;
MultiverseCore mvCore = plugin.getMultiverseCore();
MVWorldManager worldManager = mvCore.getMVWorldManager();
int gameId = plugin.getGames().size() + 1;
String newWorldName = map.getName() + "game" + gameId;
if (!worldManager.cloneWorld(map.getName(), newWorldName)) {
System.out.println("Error while trying to copy the world!");
return;
}
if (!worldManager.loadWorld(newWorldName)) {
System.out.println("Error while trying to load the world!");
return;
}
MultiverseWorld mvWorld = worldManager.getMVWorld(newWorldName);
mvWorld.setAlias(newWorldName);
World gameWorld = Bukkit.getWorld(newWorldName);
Game newGame = new Game(gameId, players, gameWorld, GameState.STARTING);
plugin.getGames().add(newGame);
plugin.getWorldToGameHashMap().put(gameWorld, newGame);
int spawnNumber = 1;
for (UUID uuid : players) {
Player player = Bukkit.getPlayer(uuid);
if (player == null) return;
player.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("messages.teleporting")));
String spawnPath = "maps." + map.getName() + ".spawn" + spawnNumber++;
Location spawnLocation = new Location(
gameWorld,
plugin.getConfig().getDouble(spawnPath + ".x"),
plugin.getConfig().getDouble(spawnPath + ".y"),
plugin.getConfig().getDouble(spawnPath + ".z"),
(float) plugin.getConfig().getDouble(spawnPath + ".yaw"),
(float) plugin.getConfig().getDouble(spawnPath + ".pitch")
);
player.teleport(spawnLocation);
plugin.getFrozenPlayer().add(uuid);
}
startCountdown(newGame, 10, "&6");
startInvincibilityTimer(newGame, 25, "&6Invulnerability wears off in ");
}
public void stopGame(Game game) {
@ -79,27 +78,45 @@ public class GameUtil {
System.out.println("Someone tried to stop a game which is currently stopping, not possible, ignoring.");
return;
}
if (Bukkit.getServer().getPlayer(game.getPlayers().get(0)) != null) {
Player winner = Bukkit.getPlayer(game.getPlayers().get(0));
game.getPlayers().forEach(uuid -> Bukkit.getServer().getPlayer(uuid).sendMessage(ChatColor.translateAlternateColorCodes('&', PS3Minigames.INSTANCE.getConfig().getString("messages.game-won").replace("%winner%", winner.getDisplayName()))));
List<UUID> players = game.getPlayers();
Player winner = Bukkit.getPlayer(players.get(0));
if (winner != null) {
String gameWonMessage = ChatColor.translateAlternateColorCodes('&',
PS3Minigames.INSTANCE.getConfig().getString("messages.game-won").replace("%winner%", winner.getDisplayName()));
for (UUID uuid : players) {
Player player = Bukkit.getPlayer(uuid);
if (player != null) {
player.sendMessage(gameWonMessage);
}
}
}
game.setGameState(GameState.STOPPING);
// Teleport all players + Clear inv + Reset Effects + Unfreeze
game.getPlayers().forEach(uuid -> {
Bukkit.getServer().getPlayer(uuid).teleport(new Location(PS3Minigames.INSTANCE.getServer().getWorld(PS3Minigames.INSTANCE.getConfig().getString("spawn-lobby.world")), PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.x"), PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.y"), PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.z"), (float) PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.yaw"), (float) PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.pitch")));
Bukkit.getServer().getPlayer(uuid).getInventory().clear();
Bukkit.getServer().getPlayer(uuid).getActivePotionEffects().clear();
Bukkit.getServer().getPlayer(uuid).setHealth(20);
Bukkit.getServer().getPlayer(uuid).setFoodLevel(20);
Bukkit.getServer().getPlayer(uuid).getInventory().setBoots(null);
Bukkit.getServer().getPlayer(uuid).getInventory().setLeggings(null);
Bukkit.getServer().getPlayer(uuid).getInventory().setChestplate(null);
Bukkit.getServer().getPlayer(uuid).getInventory().setHelmet(null);
PS3Minigames.INSTANCE.getFrozenPlayer().remove(uuid);
});
if (game.getMap().getPlayers().size() == 0) {
Location spawnLocation = new Location(
PS3Minigames.INSTANCE.getServer().getWorld(PS3Minigames.INSTANCE.getConfig().getString("spawn-lobby.world")),
PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.x"),
PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.y"),
PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.z"),
(float) PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.yaw"),
(float) PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.pitch")
);
for (UUID uuid : players) {
Player player = Bukkit.getPlayer(uuid);
if (player != null) {
player.teleport(spawnLocation);
resetInventory(player);
}
}
if (game.getMap().getPlayers().isEmpty()) {
PS3Minigames.INSTANCE.getMultiverseCore().getMVWorldManager().deleteWorld(game.getMap().getName());
}
PS3Minigames.INSTANCE.getGames().remove(game);
}
@ -191,4 +208,65 @@ public class GameUtil {
return bd.doubleValue();
}
private void startCountdown(Game game, int seconds, String titleColor) {
Timer timer = new Timer(seconds, PS3Minigames.INSTANCE);
timer.start();
timer.eachSecond(() -> {
for (UUID uuid : game.getPlayers()) {
Player player = Bukkit.getPlayer(uuid);
if (player == null) return;
player.sendTitle(ChatColor.translateAlternateColorCodes('&', titleColor + timer.getCounter()), "");
}
});
timer.whenComplete(() -> {
game.setGameState(GameState.INVINCIBILITY);
game.getMap().getPlayers().forEach(player -> {
PS3Minigames.INSTANCE.getFrozenPlayer().remove(player.getUniqueId());
player.sendMessage(ChatColor.translateAlternateColorCodes('&', PS3Minigames.INSTANCE.getConfig().getString("messages.game-start-no-countdown")));
});
});
fillChests(game);
}
private void startInvincibilityTimer(Game game, int seconds, String messagePrefix) {
Timer invincibilityTimer = new Timer(seconds, PS3Minigames.INSTANCE);
invincibilityTimer.start();
invincibilityTimer.eachSecond(() -> {
for (UUID uuid : game.getPlayers()) {
Player player = Bukkit.getPlayer(uuid);
if (player == null) return;
player.sendTitle("", ChatColor.translateAlternateColorCodes('&', messagePrefix + invincibilityTimer.getCounter()));
}
});
invincibilityTimer.whenComplete(() -> {
game.setGameState(GameState.RUNNING);
});
}
public static int getRandomInRange(int min, int max) {
Random random = new Random();
return random.nextInt(max - min) + min;
}
public static float getRandomInRange(float min, float max) {
return (float) (min + Math.random() * (max - min));
}
public static void resetInventory(Player player) {
player.getActivePotionEffects().forEach(effect -> player.removePotionEffect(effect.getType()));
player.setHealth(20);
player.setFoodLevel(20);
player.getInventory().clear();
player.getInventory().setBoots(null);
player.getInventory().setLeggings(null);
player.getInventory().setChestplate(null);
player.getInventory().setHelmet(null);
player.setGameMode(GameMode.SURVIVAL);
}
}

View file

@ -1,5 +1,6 @@
package me.firephoenix.ps3minigames.util;
import lombok.Getter;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitTask;
@ -12,6 +13,7 @@ import org.bukkit.scheduler.BukkitTask;
public class Timer {
private final int duration;
private final Plugin plugin;
@Getter
int counter;
BukkitTask bukkitTask;
private boolean running = false;
@ -63,7 +65,4 @@ public class Timer {
return running;
}
public int getCounter() {
return counter;
}
}