This commit is contained in:
parent
84dc304136
commit
7a216b4095
|
@ -10,9 +10,12 @@ import lombok.Getter;
|
||||||
import net.megavex.scoreboardlibrary.api.ScoreboardLibrary;
|
import net.megavex.scoreboardlibrary.api.ScoreboardLibrary;
|
||||||
import net.megavex.scoreboardlibrary.api.exception.NoPacketAdapterAvailableException;
|
import net.megavex.scoreboardlibrary.api.exception.NoPacketAdapterAvailableException;
|
||||||
import net.megavex.scoreboardlibrary.api.noop.NoopScoreboardLibrary;
|
import net.megavex.scoreboardlibrary.api.noop.NoopScoreboardLibrary;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.configuration.InvalidConfigurationException;
|
import org.bukkit.configuration.InvalidConfigurationException;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import xyz.twovb.sgm.commands.handlers.InvalidArgsHandler;
|
import xyz.twovb.sgm.commands.handlers.InvalidArgsHandler;
|
||||||
import xyz.twovb.sgm.commands.handlers.NoPermissionsHandler;
|
import xyz.twovb.sgm.commands.handlers.NoPermissionsHandler;
|
||||||
|
@ -31,7 +34,7 @@ import xyz.twovb.toolbox.utils.CustomLogger;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public final class SGM extends JavaPlugin {
|
public final class SGM extends JavaPlugin implements Listener {
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private static SGM instance;
|
private static SGM instance;
|
||||||
|
@ -71,8 +74,14 @@ public final class SGM extends JavaPlugin {
|
||||||
registerGames();
|
registerGames();
|
||||||
registerPlaceholders();
|
registerPlaceholders();
|
||||||
levelManager.loadLevels();
|
levelManager.loadLevels();
|
||||||
|
// Bukkit.getPluginManager().registerEvents(this, SGM.getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @EventHandler
|
||||||
|
// public void onEntityDamage() {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
private void loadScoreboard() {
|
private void loadScoreboard() {
|
||||||
try {
|
try {
|
||||||
scoreboardLibrary = ScoreboardLibrary.loadScoreboardLibrary(this);
|
scoreboardLibrary = ScoreboardLibrary.loadScoreboardLibrary(this);
|
||||||
|
|
|
@ -70,9 +70,9 @@ public class GameCommand {
|
||||||
new JoinGameGui().getGui().show(player);
|
new JoinGameGui().getGui().show(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Execute(name = "testjoin")
|
@Execute(name = "addplayer")
|
||||||
void testjoin(@Context Player player, @Arg("id") String id) {
|
void testjoin(@Context CommandSender sender, @Arg("player") Player target, @Arg("id") String id) {
|
||||||
SGM.getInstance().getGameManager().addPlayerToGame(player, UUID.fromString(id));
|
SGM.getInstance().getGameManager().addPlayerToGame(target, UUID.fromString(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import dev.rollczi.litecommands.annotations.command.Command;
|
||||||
import dev.rollczi.litecommands.annotations.context.Context;
|
import dev.rollczi.litecommands.annotations.context.Context;
|
||||||
import dev.rollczi.litecommands.annotations.execute.Execute;
|
import dev.rollczi.litecommands.annotations.execute.Execute;
|
||||||
import dev.rollczi.litecommands.annotations.permission.Permission;
|
import dev.rollczi.litecommands.annotations.permission.Permission;
|
||||||
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -63,6 +64,7 @@ public class LevelCommand {
|
||||||
CustomPlayer cPlayer = new CustomPlayer(player);
|
CustomPlayer cPlayer = new CustomPlayer(player);
|
||||||
World world = LevelManager.getLevel(name);
|
World world = LevelManager.getLevel(name);
|
||||||
player.teleport(world.getSpawnLocation());
|
player.teleport(world.getSpawnLocation());
|
||||||
|
player.setGameMode(GameMode.CREATIVE);
|
||||||
cPlayer.sendMessage("<red>tele&aport");
|
cPlayer.sendMessage("<red>tele&aport");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.entity.EntityDismountEvent;
|
import org.bukkit.event.entity.EntityDismountEvent;
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.*;
|
import org.bukkit.event.player.*;
|
||||||
|
@ -40,7 +41,6 @@ import org.bukkit.inventory.EntityEquipment;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
import org.bukkit.scoreboard.Scoreboard;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import xyz.twovb.sgm.SGM;
|
import xyz.twovb.sgm.SGM;
|
||||||
import xyz.twovb.sgm.games.GameManager;
|
import xyz.twovb.sgm.games.GameManager;
|
||||||
|
@ -62,10 +62,6 @@ public class CTB implements Minigame {
|
||||||
private final UUID uuid;
|
private final UUID uuid;
|
||||||
private final ArrayList<Location> redBrickSpawns = new ArrayList<Location>();
|
private final ArrayList<Location> redBrickSpawns = new ArrayList<Location>();
|
||||||
private final ArrayList<Location> blueBrickSpawns = new ArrayList<Location>();
|
private final ArrayList<Location> blueBrickSpawns = new ArrayList<Location>();
|
||||||
private Location redSpawnLocation;
|
|
||||||
private Location blueSpawnLocation;
|
|
||||||
// private final ArrayList<Location> redSpawnArea = new ArrayList<Location>();
|
|
||||||
// private final ArrayList<Location> blueSpawnArea = new ArrayList<Location>();
|
|
||||||
private final ArrayList<Player> players = new ArrayList<Player>();
|
private final ArrayList<Player> players = new ArrayList<Player>();
|
||||||
private final HashMap<Player, Location> playerLocationHashMap = new HashMap<>();
|
private final HashMap<Player, Location> playerLocationHashMap = new HashMap<>();
|
||||||
// tagger, tagged
|
// tagger, tagged
|
||||||
|
@ -73,6 +69,8 @@ public class CTB implements Minigame {
|
||||||
private final HashMap<Player, CtbData.PlayerState> playerStateMap = new HashMap<>();
|
private final HashMap<Player, CtbData.PlayerState> playerStateMap = new HashMap<>();
|
||||||
ScoreboardTeam redTeam;
|
ScoreboardTeam redTeam;
|
||||||
ScoreboardTeam blueTeam;
|
ScoreboardTeam blueTeam;
|
||||||
|
private Location redSpawnLocation;
|
||||||
|
private Location blueSpawnLocation;
|
||||||
private Location redJail;
|
private Location redJail;
|
||||||
private Location blueJail;
|
private Location blueJail;
|
||||||
private World gameWorld;
|
private World gameWorld;
|
||||||
|
@ -88,6 +86,9 @@ public class CTB implements Minigame {
|
||||||
private int tagTime;
|
private int tagTime;
|
||||||
private int jailTime;
|
private int jailTime;
|
||||||
|
|
||||||
|
private int redScore = 0;
|
||||||
|
private int blueScore = 0;
|
||||||
|
|
||||||
private int taskId;
|
private int taskId;
|
||||||
|
|
||||||
public CTB() {
|
public CTB() {
|
||||||
|
@ -104,6 +105,14 @@ public class CTB implements Minigame {
|
||||||
// Perform initialization logic here
|
// Perform initialization logic here
|
||||||
gameWorld = createGameWorld(world, uuid);
|
gameWorld = createGameWorld(world, uuid);
|
||||||
gameWorld.setAutoSave(false);
|
gameWorld.setAutoSave(false);
|
||||||
|
gameWorld.setGameRule(GameRule.KEEP_INVENTORY, true);
|
||||||
|
gameWorld.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false);
|
||||||
|
gameWorld.setGameRule(GameRule.DO_WEATHER_CYCLE, false);
|
||||||
|
gameWorld.setGameRule(GameRule.RANDOM_TICK_SPEED, 0);
|
||||||
|
gameWorld.setGameRule(GameRule.DO_MOB_SPAWNING, false);
|
||||||
|
gameWorld.setGameRule(GameRule.DO_MOB_SPAWNING, false);
|
||||||
|
gameWorld.setGameRule(GameRule.DO_MOB_LOOT, false);
|
||||||
|
// todo get player attributes and then save
|
||||||
if (applyOptions(world)) {
|
if (applyOptions(world)) {
|
||||||
this.teamManager = SGM.getInstance().getScoreboardLibrary().createTeamManager();
|
this.teamManager = SGM.getInstance().getScoreboardLibrary().createTeamManager();
|
||||||
this.redTeam = teamManager.createIfAbsent("red_team");
|
this.redTeam = teamManager.createIfAbsent("red_team");
|
||||||
|
@ -161,20 +170,16 @@ public class CTB implements Minigame {
|
||||||
if (players.isEmpty()) {
|
if (players.isEmpty()) {
|
||||||
this.stop();
|
this.stop();
|
||||||
}
|
}
|
||||||
|
for (ScoreboardTeam teams : teamManager.teams()) {
|
||||||
|
if (bricks <= getScore(teams)) {
|
||||||
|
endGame(teams);
|
||||||
|
}
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
headerAnimation.nextFrame();
|
headerAnimation.nextFrame();
|
||||||
layout.apply(sb);
|
layout.apply(sb);
|
||||||
} catch (IllegalStateException ignored) {
|
} catch (IllegalStateException ignored) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Player player : gameWorld.getPlayers()) {
|
|
||||||
if (!players.contains(player)) {
|
|
||||||
// for (Player gamePlayer : players) {
|
|
||||||
// gamePlayer.hidePlayer(SGM.getInstance(), player);
|
|
||||||
// }
|
|
||||||
sendMessageToAllPlayers(player.getName() + " IS A IMPOSTER");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (Player player : players) {
|
for (Player player : players) {
|
||||||
CtbData.Territory territory = getTerritory(player);
|
CtbData.Territory territory = getTerritory(player);
|
||||||
CtbData.PlayerState state = playerStateMap.get(player);
|
CtbData.PlayerState state = playerStateMap.get(player);
|
||||||
|
@ -198,20 +203,35 @@ public class CTB implements Minigame {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SGM.getInstance().getCLogger().log(playerStateMap);
|
// SGM.getInstance().getCLogger().log(playerStateMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
void endGame(ScoreboardTeam team) {
|
||||||
|
if (team == redTeam) {
|
||||||
|
sendMessageToAllPlayers("&cRed Team &7has won the game!");
|
||||||
|
} else if (team == blueTeam) {
|
||||||
|
sendMessageToAllPlayers("&9Blue Team &7has won the game!");
|
||||||
|
}
|
||||||
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(CommandSender sender) {
|
public void start(CommandSender sender) {
|
||||||
if (checkStart(sender)) {
|
if (checkStart(sender)) {
|
||||||
for (Player player : players) {
|
for (Player player : players) {
|
||||||
|
EntityEquipment playerEquipment = player.getEquipment();
|
||||||
player.getInventory().clear();
|
player.getInventory().clear();
|
||||||
player.teleport(this.spawnLoc);
|
|
||||||
sb.addPlayer(player);
|
sb.addPlayer(player);
|
||||||
player.setGameMode(GameMode.ADVENTURE);
|
player.setGameMode(GameMode.ADVENTURE);
|
||||||
playerStateMap.put(player, CtbData.PlayerState.Free);
|
playerStateMap.put(player, CtbData.PlayerState.Free);
|
||||||
for (ScoreboardTeam teams : teamManager.teams()) {
|
for (ScoreboardTeam teams : teamManager.teams()) {
|
||||||
|
if (teams.defaultDisplay().entries().contains(player.getName())) {
|
||||||
|
if (teams == redTeam) {
|
||||||
|
player.teleport(this.redSpawnLocation);
|
||||||
|
} else if (teams == blueTeam) {
|
||||||
|
player.teleport(this.blueSpawnLocation);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i = 0; i <= this.bricks - 1; i++) {
|
for (int i = 0; i <= this.bricks - 1; i++) {
|
||||||
|
@ -286,6 +306,8 @@ public class CTB implements Minigame {
|
||||||
public void addPlayer(Player player) {
|
public void addPlayer(Player player) {
|
||||||
player.teleport(this.spawnLoc);
|
player.teleport(this.spawnLoc);
|
||||||
players.add(player);
|
players.add(player);
|
||||||
|
player.getInventory().clear();
|
||||||
|
player.setGameMode(GameMode.ADVENTURE);
|
||||||
sendMessageToAllPlayers(messages.getString("system.player.join").replace("%player%", player.getName()));
|
sendMessageToAllPlayers(messages.getString("system.player.join").replace("%player%", player.getName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,11 +338,16 @@ public class CTB implements Minigame {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onPlayerDeath(PlayerDeathEvent event) {
|
void onPlayerDeath(PlayerDeathEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
if (players.contains(player) && state == GameState.STARTED) {
|
if (!players.contains(player)) return;
|
||||||
sendMessageToAllPlayers(player.getName() + " was eliminated!");
|
if (state == GameState.STARTED) {
|
||||||
event.setDeathMessage("");
|
addPlayerToJail(player);
|
||||||
removePlayer(player);
|
|
||||||
}
|
}
|
||||||
|
event.setCancelled(true);
|
||||||
|
// if (players.contains(player) && state == GameState.STARTED) {
|
||||||
|
// sendMessageToAllPlayers(player.getName() + " was eliminated!");
|
||||||
|
// event.setDeathMessage("");
|
||||||
|
// removePlayer(player);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -341,7 +368,7 @@ public class CTB implements Minigame {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void releasePlayer(Player tagged, Player tagger) {
|
private void releasePlayer(Player tagged, Player tagger) {
|
||||||
playerStateMap.replace(tagger, CtbData.PlayerState.Tagging, CtbData.PlayerState.Invulnerable);
|
playerStateMap.replace(tagger, CtbData.PlayerState.Tagging, CtbData.PlayerState.Free);
|
||||||
playerStateMap.replace(tagged, CtbData.PlayerState.Tagged, CtbData.PlayerState.Invulnerable);
|
playerStateMap.replace(tagged, CtbData.PlayerState.Tagged, CtbData.PlayerState.Invulnerable);
|
||||||
CustomPlayer cTagged = new CustomPlayer(tagged);
|
CustomPlayer cTagged = new CustomPlayer(tagged);
|
||||||
CustomPlayer cTagger = new CustomPlayer(tagger);
|
CustomPlayer cTagger = new CustomPlayer(tagger);
|
||||||
|
@ -350,6 +377,12 @@ public class CTB implements Minigame {
|
||||||
taggedPlayerHashMap.remove(tagger);
|
taggedPlayerHashMap.remove(tagger);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void jailbreakPlayer(Player jailed) {
|
||||||
|
playerStateMap.replace(jailed, CtbData.PlayerState.Jailed, CtbData.PlayerState.Invulnerable);
|
||||||
|
CustomPlayer cPlayer = new CustomPlayer(jailed);
|
||||||
|
cPlayer.sendMessage(messages.getString("system.player.jail.jailbreak.notify"));
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onPlayerMoveWithBrick(PlayerMoveEvent event) {
|
void onPlayerMoveWithBrick(PlayerMoveEvent event) {
|
||||||
if (!(event.getFrom().getX() != event.getTo().getX() || event.getFrom().getZ() != event.getTo().getZ())) return;
|
if (!(event.getFrom().getX() != event.getTo().getX() || event.getFrom().getZ() != event.getTo().getZ())) return;
|
||||||
|
@ -362,9 +395,41 @@ public class CTB implements Minigame {
|
||||||
if (territory.equals(CtbData.Territory.Neutral)) {
|
if (territory.equals(CtbData.Territory.Neutral)) {
|
||||||
sendMessageToAllPlayers(messages.getString("system.player.brick.steal.announce").replace("%player%", player.getName()));
|
sendMessageToAllPlayers(messages.getString("system.player.brick.steal.announce").replace("%player%", player.getName()));
|
||||||
playerStateMap.replace(player, CtbData.PlayerState.Stealing, CtbData.PlayerState.Free);
|
playerStateMap.replace(player, CtbData.PlayerState.Stealing, CtbData.PlayerState.Free);
|
||||||
|
PlayerCaptureBrickEvent captureBrickEvent = new PlayerCaptureBrickEvent(player);
|
||||||
|
captureBrickEvent.callEvent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
void onBrickCapture(PlayerCaptureBrickEvent event) {
|
||||||
|
Player player = event.getThief();
|
||||||
|
if (!players.contains(player)) return;
|
||||||
|
ScoreboardTeam team = getTeam(player);
|
||||||
|
player.getInventory().clear();
|
||||||
|
addScore(team, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void addScore(ScoreboardTeam team, int scoreToAdd) {
|
||||||
|
if (team == redTeam) {
|
||||||
|
// SGM.getInstance().getCLogger().log(redScore);
|
||||||
|
this.redScore = redScore + scoreToAdd;
|
||||||
|
// SGM.getInstance().getCLogger().log(redScore);
|
||||||
|
} else if (team == blueTeam) {
|
||||||
|
// SGM.getInstance().getCLogger().log(blueScore);
|
||||||
|
this.blueScore = blueScore + scoreToAdd;
|
||||||
|
// SGM.getInstance().getCLogger().log(blueScore);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int getScore(ScoreboardTeam team) {
|
||||||
|
if (team == redTeam) {
|
||||||
|
return redScore;
|
||||||
|
} else if (team == blueTeam) {
|
||||||
|
return blueScore;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onPlayerStealBrick(PlayerStealBrickEvent event) {
|
void onPlayerStealBrick(PlayerStealBrickEvent event) {
|
||||||
Player player = event.getThief();
|
Player player = event.getThief();
|
||||||
|
@ -459,14 +524,6 @@ public class CTB implements Minigame {
|
||||||
Player tagger = event.getTagger();
|
Player tagger = event.getTagger();
|
||||||
if (this.state != GameState.STARTED) return;
|
if (this.state != GameState.STARTED) return;
|
||||||
if (!players.contains(tagged) || !players.contains(tagger)) return;
|
if (!players.contains(tagged) || !players.contains(tagger)) return;
|
||||||
if (playerStateMap.get(tagged) == CtbData.PlayerState.Stealing) {
|
|
||||||
ScoreboardTeam team = getTeam(tagged);
|
|
||||||
if (team == redTeam) {
|
|
||||||
placeBrick(tagged.getLocation(), blueTeam);
|
|
||||||
} else if (team == blueTeam) {
|
|
||||||
placeBrick(tagged.getLocation(), redTeam);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
taggedPlayerHashMap.putIfAbsent(tagger, tagged);
|
taggedPlayerHashMap.putIfAbsent(tagger, tagged);
|
||||||
CustomPlayer cTagged = new CustomPlayer(tagged);
|
CustomPlayer cTagged = new CustomPlayer(tagged);
|
||||||
CustomPlayer cTagger = new CustomPlayer(tagger);
|
CustomPlayer cTagger = new CustomPlayer(tagger);
|
||||||
|
@ -479,19 +536,34 @@ public class CTB implements Minigame {
|
||||||
tagger.addPassenger(armorStandEntity);
|
tagger.addPassenger(armorStandEntity);
|
||||||
armorStandEntity.addPassenger(tagged);
|
armorStandEntity.addPassenger(tagged);
|
||||||
new BukkitRunnable() {
|
new BukkitRunnable() {
|
||||||
private int seconds = 0;
|
private final CustomPlayer cTagged = new CustomPlayer(tagged);
|
||||||
|
private final CustomPlayer cTagger = new CustomPlayer(tagger);
|
||||||
|
private int seconds = 1;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
if (playerStateMap.get(tagger) != CtbData.PlayerState.Tagging) this.cancel();
|
||||||
if (seconds > tagTime) {
|
if (seconds > tagTime) {
|
||||||
tagger.sendMessage("out of time");
|
cTagger.sendMessage(messages.getString("system.player.tag.notime.notify").replace("%player%", tagged.getName()));
|
||||||
|
cTagged.sendMessage(messages.getString("system.player.tag.notime.info").replace("%player%", tagger.getName()));
|
||||||
|
playerStateMap.replace(tagger, CtbData.PlayerState.Tagging, CtbData.PlayerState.Invulnerable);
|
||||||
|
playerStateMap.replace(tagged, CtbData.PlayerState.Tagged, CtbData.PlayerState.Invulnerable);
|
||||||
|
for (Entity entity : tagger.getPassengers()) {
|
||||||
|
if (entity instanceof ArmorStand) {
|
||||||
|
entity.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.cancel();
|
||||||
} else {
|
} else {
|
||||||
tagger.sendMessage(String.valueOf(tagTime));
|
|
||||||
seconds++;
|
seconds++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.runTaskTimer(SGM.getInstance(), 0, 20L);
|
}.runTaskTimer(SGM.getInstance(), 0, 20L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//TODO MAKE LEVEL CREATE TP U TO RIGHT PLACE
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onPlayerFreedom(PlayerFreedFromJailEvent event) {
|
void onPlayerFreedom(PlayerFreedFromJailEvent event) {
|
||||||
Player tagged = event.getTagged();
|
Player tagged = event.getTagged();
|
||||||
|
@ -529,13 +601,25 @@ public class CTB implements Minigame {
|
||||||
if (teamMember.player() == cPlayer.player()) continue;
|
if (teamMember.player() == cPlayer.player()) continue;
|
||||||
teamMember.sendMessage(LegacyComponentSerializer.legacyAmpersand().serialize(event.getMessage()));
|
teamMember.sendMessage(LegacyComponentSerializer.legacyAmpersand().serialize(event.getMessage()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new BukkitRunnable() {
|
||||||
|
private int seconds = 1;
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (playerStateMap.get(player) != CtbData.PlayerState.Jailed) this.cancel();
|
||||||
|
if (seconds > jailTime) {
|
||||||
|
jailbreakPlayer(player);
|
||||||
|
} else {
|
||||||
|
seconds++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.runTaskTimer(SGM.getInstance(), 0, 20L);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void handleEntityDamage(EntityDamageByEntityEvent event) {
|
void handleEntityDamage(EntityDamageByEntityEvent event) {
|
||||||
if (this.state != GameState.STARTED) return;
|
// if (this.state != GameState.STARTED) return;
|
||||||
Entity eventEntity = event.getEntity();
|
Entity eventEntity = event.getEntity();
|
||||||
Entity eventDamager = event.getDamager();
|
Entity eventDamager = event.getDamager();
|
||||||
|
|
||||||
|
@ -543,8 +627,10 @@ public class CTB implements Minigame {
|
||||||
if (!players.contains(interacted) || !players.contains(interacter)) return;
|
if (!players.contains(interacted) || !players.contains(interacter)) return;
|
||||||
// if (getTerritory(interacted) != getTerritory(interacter)) return;
|
// if (getTerritory(interacted) != getTerritory(interacter)) return;
|
||||||
|
|
||||||
PlayerGameInteractionEvent interactionEvent = new PlayerGameInteractionEvent(interacted, interacter);
|
if (this.state == GameState.STARTED) {
|
||||||
Bukkit.getServer().getPluginManager().callEvent(interactionEvent);
|
PlayerGameInteractionEvent interactionEvent = new PlayerGameInteractionEvent(interacted, interacter);
|
||||||
|
Bukkit.getServer().getPluginManager().callEvent(interactionEvent);
|
||||||
|
}
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
// if (interactionEvent.isCancelled()) {
|
// if (interactionEvent.isCancelled()) {
|
||||||
|
@ -552,6 +638,21 @@ public class CTB implements Minigame {
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
void handlePlayerDamage(EntityDamageEvent event) {
|
||||||
|
if (this.state != GameState.STARTED && this.state != GameState.READY) return;
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
if (!(entity instanceof Player gamePlayer)) return;
|
||||||
|
if (!players.contains(gamePlayer)) return;
|
||||||
|
if (this.state == GameState.READY) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
} else if (this.state == GameState.STARTED) {
|
||||||
|
if (playerStateMap.get(gamePlayer) == CtbData.PlayerState.Tagged) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onPlayerFree(PlayerGameInteractionEvent event) {
|
void onPlayerFree(PlayerGameInteractionEvent event) {
|
||||||
Player interacted = event.getInteracted();
|
Player interacted = event.getInteracted();
|
||||||
|
@ -587,11 +688,27 @@ public class CTB implements Minigame {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
||||||
CtbData.Territory territory = getTerritory(interacted);
|
CtbData.Territory territory = getTerritory(interacted);
|
||||||
|
EntityEquipment interactedEquipment = interacted.getEquipment();
|
||||||
|
if (territory == CtbData.Territory.Neutral) return;
|
||||||
if (territory == CtbData.Territory.Blue && interacterTeam != blueTeam) return;
|
if (territory == CtbData.Territory.Blue && interacterTeam != blueTeam) return;
|
||||||
if (territory == CtbData.Territory.Red && interacterTeam != redTeam) return;
|
if (territory == CtbData.Territory.Red && interacterTeam != redTeam) return;
|
||||||
if (playerStateMap.get(interacter) != CtbData.PlayerState.Free) return;
|
if (playerStateMap.get(interacter) != CtbData.PlayerState.Free) return;
|
||||||
if (playerStateMap.get(interacted) != CtbData.PlayerState.Free && playerStateMap.get(interacted) != CtbData.PlayerState.Stealing) return;
|
if (playerStateMap.get(interacted) != CtbData.PlayerState.Free && playerStateMap.get(interacted) != CtbData.PlayerState.Stealing)
|
||||||
|
return;
|
||||||
|
if (playerStateMap.get(interacted) == CtbData.PlayerState.Stealing) {
|
||||||
|
ScoreboardTeam team = getTeam(interacted);
|
||||||
|
if (team == redTeam) {
|
||||||
|
if (interactedEquipment.getHelmet().getType().equals(Material.BLUE_WOOL)) {
|
||||||
|
interacted.getInventory().clear();
|
||||||
|
placeBrick(interacted.getLocation(), blueTeam);
|
||||||
|
}
|
||||||
|
} else if (team == blueTeam) {
|
||||||
|
if (interactedEquipment.getHelmet().getType().equals(Material.RED_WOOL)) {
|
||||||
|
interacted.getInventory().clear();
|
||||||
|
placeBrick(interacted.getLocation(), redTeam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
playerStateMap.replace(interacted, CtbData.PlayerState.Tagged);
|
playerStateMap.replace(interacted, CtbData.PlayerState.Tagged);
|
||||||
playerStateMap.replace(interacter, CtbData.PlayerState.Free, CtbData.PlayerState.Tagging);
|
playerStateMap.replace(interacter, CtbData.PlayerState.Free, CtbData.PlayerState.Tagging);
|
||||||
PlayerTaggedEvent taggedEvent = new PlayerTaggedEvent(interacted, interacter);
|
PlayerTaggedEvent taggedEvent = new PlayerTaggedEvent(interacted, interacter);
|
||||||
|
@ -620,7 +737,7 @@ public class CTB implements Minigame {
|
||||||
if (territory == CtbData.Territory.Blue && taggerTeam == blueTeam) return;
|
if (territory == CtbData.Territory.Blue && taggerTeam == blueTeam) return;
|
||||||
if (territory == CtbData.Territory.Red && taggerTeam == redTeam) return;
|
if (territory == CtbData.Territory.Red && taggerTeam == redTeam) return;
|
||||||
if (playerStateMap.get(brickTaker) != CtbData.PlayerState.Free) return;
|
if (playerStateMap.get(brickTaker) != CtbData.PlayerState.Free) return;
|
||||||
if (brickMaterial != null) return;
|
if (brickMaterial == null) return;
|
||||||
playerStateMap.replace(brickTaker, CtbData.PlayerState.Free, CtbData.PlayerState.Stealing);
|
playerStateMap.replace(brickTaker, CtbData.PlayerState.Free, CtbData.PlayerState.Stealing);
|
||||||
EntityEquipment playerEquipment = event.getPlayer().getEquipment();
|
EntityEquipment playerEquipment = event.getPlayer().getEquipment();
|
||||||
playerEquipment.setHelmet(new ItemStack(brickMaterial));
|
playerEquipment.setHelmet(new ItemStack(brickMaterial));
|
||||||
|
@ -640,6 +757,9 @@ public class CTB implements Minigame {
|
||||||
} else if (team == blueTeam) {
|
} else if (team == blueTeam) {
|
||||||
player.teleport(redJail);
|
player.teleport(redJail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void freePlayerFromJail(Player player) {
|
public void freePlayerFromJail(Player player) {
|
||||||
|
@ -704,8 +824,8 @@ public class CTB implements Minigame {
|
||||||
brickSpawnLoc = brickSpawnLoc.clone().add(0.5, 0, 0.5);
|
brickSpawnLoc = brickSpawnLoc.clone().add(0.5, 0, 0.5);
|
||||||
Entity brickEntity = gameWorld.spawnEntity(brickSpawnLoc, EntityType.ARMOR_STAND);
|
Entity brickEntity = gameWorld.spawnEntity(brickSpawnLoc, EntityType.ARMOR_STAND);
|
||||||
ArmorStand armorStand = (ArmorStand) brickEntity;
|
ArmorStand armorStand = (ArmorStand) brickEntity;
|
||||||
|
armorStand.setInvisible(true);
|
||||||
EntityEquipment armorEquipment = armorStand.getEquipment();
|
EntityEquipment armorEquipment = armorStand.getEquipment();
|
||||||
// TODO: make sure the children cannot uneqip the wool :sob:
|
|
||||||
if (team.equals(redTeam)) {
|
if (team.equals(redTeam)) {
|
||||||
armorEquipment.setHelmet(new ItemStack(Material.RED_WOOL));
|
armorEquipment.setHelmet(new ItemStack(Material.RED_WOOL));
|
||||||
} else if (team.equals(blueTeam)) {
|
} else if (team.equals(blueTeam)) {
|
||||||
|
|
|
@ -7,7 +7,7 @@ public class CtbData {
|
||||||
|
|
||||||
public enum PlayerState {
|
public enum PlayerState {
|
||||||
Free(""),
|
Free(""),
|
||||||
Stealing("<yellow>⚠<bold> ʙᴇ ᴄᴀʀᴇꜰᴜʟ! ʏᴏᴜ ʜᴀᴠᴇ ᴀ ʙʀɪᴄᴋ ⚠"),
|
Stealing("<yellow>⚠<bold> ʙᴇ ᴄᴀʀᴇꜰᴜʟ! ʏᴏᴜ ʜᴀᴠᴇ ᴀ ʙʀɪᴄᴋ </bold>⚠"),
|
||||||
Invulnerable("<gray><bold>ɢᴏ ʙᴀᴄᴋ ᴛᴏ ɴᴇᴜᴛʀᴀʟ!"),
|
Invulnerable("<gray><bold>ɢᴏ ʙᴀᴄᴋ ᴛᴏ ɴᴇᴜᴛʀᴀʟ!"),
|
||||||
Tagging("<gray><bold>ʏᴏᴜ ᴀʀᴇ ᴛᴀɢɢɪɴɢ: %player%"),
|
Tagging("<gray><bold>ʏᴏᴜ ᴀʀᴇ ᴛᴀɢɢɪɴɢ: %player%"),
|
||||||
Tagged("<red><bold>ʏᴏᴜ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴛᴀɢɢᴇᴅ!"),
|
Tagged("<red><bold>ʏᴏᴜ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴛᴀɢɢᴇᴅ!"),
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
package xyz.twovb.sgm.games.impl.capturethebrick.events;
|
||||||
|
/*
|
||||||
|
* Created by 2vb - 7/7/2024
|
||||||
|
*/
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import xyz.twovb.sgm.games.impl.capturethebrick.CTB;
|
||||||
|
import xyz.twovb.toolbox.utils.ChatUtils;
|
||||||
|
|
||||||
|
public class PlayerCaptureBrickEvent extends Event implements Cancellable {
|
||||||
|
private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||||
|
private final Player thief;
|
||||||
|
private boolean isCancelled;
|
||||||
|
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
public PlayerCaptureBrickEvent(Player thief) {
|
||||||
|
this.thief = thief;
|
||||||
|
this.isCancelled = false;
|
||||||
|
this.message = CTB.getMessages().getString("system.player.brick.steal.announce");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return HANDLER_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getThief() {
|
||||||
|
return this.thief;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessage(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return HANDLER_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return this.isCancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean cancelled) {
|
||||||
|
this.isCancelled = cancelled;
|
||||||
|
}
|
||||||
|
}
|
|
@ -51,7 +51,7 @@ public class TeamGui {
|
||||||
public void pickTeam(InventoryClickEvent event) {
|
public void pickTeam(InventoryClickEvent event) {
|
||||||
Player player = (Player) event.getWhoClicked();
|
Player player = (Player) event.getWhoClicked();
|
||||||
ItemStack clickedItem = event.getCurrentItem();
|
ItemStack clickedItem = event.getCurrentItem();
|
||||||
CTB game = (CTB) SGM.getInstance().getGameManager().findGame(player);
|
CTB game = (CTB) SGM.getInstance().getGameManager().findGame(target);
|
||||||
if (clickedItem.getType().equals(Material.RED_WOOL)) {
|
if (clickedItem.getType().equals(Material.RED_WOOL)) {
|
||||||
game.addPlayerToTeam(target, CtbData.Teams.Red);
|
game.addPlayerToTeam(target, CtbData.Teams.Red);
|
||||||
game.sendMessageToAllPlayers(target.getName() + " RED");
|
game.sendMessageToAllPlayers(target.getName() + " RED");
|
||||||
|
|
|
@ -52,6 +52,13 @@ public class LevelManager {
|
||||||
case MAP -> new WorldCreator(mapPath + worldName, new NamespacedKey(SGM.getInstance(), key));
|
case MAP -> new WorldCreator(mapPath + worldName, new NamespacedKey(SGM.getInstance(), key));
|
||||||
};
|
};
|
||||||
World world = wc.createWorld();
|
World world = wc.createWorld();
|
||||||
|
world.setGameRule(GameRule.KEEP_INVENTORY, true);
|
||||||
|
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false);
|
||||||
|
world.setGameRule(GameRule.DO_WEATHER_CYCLE, false);
|
||||||
|
world.setGameRule(GameRule.RANDOM_TICK_SPEED, 0);
|
||||||
|
world.setGameRule(GameRule.DO_MOB_SPAWNING, false);
|
||||||
|
world.setGameRule(GameRule.DO_MOB_SPAWNING, false);
|
||||||
|
world.setGameRule(GameRule.DO_MOB_LOOT, false);
|
||||||
if (world != null) {
|
if (world != null) {
|
||||||
SGM.getInstance().getCLogger().log("Loaded world: " + worldName);
|
SGM.getInstance().getCLogger().log("Loaded world: " + worldName);
|
||||||
} else {
|
} else {
|
||||||
|
@ -187,6 +194,10 @@ public class LevelManager {
|
||||||
world.setGameRule(GameRule.KEEP_INVENTORY, true);
|
world.setGameRule(GameRule.KEEP_INVENTORY, true);
|
||||||
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false);
|
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false);
|
||||||
world.setGameRule(GameRule.DO_WEATHER_CYCLE, false);
|
world.setGameRule(GameRule.DO_WEATHER_CYCLE, false);
|
||||||
|
world.setGameRule(GameRule.RANDOM_TICK_SPEED, 0);
|
||||||
|
world.setGameRule(GameRule.DO_MOB_SPAWNING, false);
|
||||||
|
world.setGameRule(GameRule.DO_MOB_SPAWNING, false);
|
||||||
|
world.setGameRule(GameRule.DO_MOB_LOOT, false);
|
||||||
world.setTime(1000);
|
world.setTime(1000);
|
||||||
genDataFile(level, name, game.toLowerCase());
|
genDataFile(level, name, game.toLowerCase());
|
||||||
return LevelResult.SUCCESS;
|
return LevelResult.SUCCESS;
|
||||||
|
|
|
@ -11,14 +11,19 @@ system:
|
||||||
free:
|
free:
|
||||||
notify: "&7%player% has been freed from Jail by %rescuer%"
|
notify: "&7%player% has been freed from Jail by %rescuer%"
|
||||||
info: "&7You and %player% must now walk back to Neutral before you can do anything."
|
info: "&7You and %player% must now walk back to Neutral before you can do anything."
|
||||||
|
jailbreak:
|
||||||
|
notify: "&7It's time for Jailbreak™! You have been released and you must head back to Neutral before you can do anything."
|
||||||
tag:
|
tag:
|
||||||
|
notime:
|
||||||
|
notify: "&7You have run out of time to bring %player% to Jail! You must head back to Neutral before you can do anything."
|
||||||
|
info: "&7%player% has run out of time to take you to Jail! You have been released and you must head back to Neutral before you can do anything."
|
||||||
notify: "&7You have been tagged! %player% now has 25 seconds to take you to Jail or you will be freed!"
|
notify: "&7You have been tagged! %player% now has 25 seconds to take you to Jail or you will be freed!"
|
||||||
info: "&7You have tagged %player%! You have 25 seconds to take them to Jail! Crouch if you would like to set them free."
|
info: "&7You have tagged %player%! You have 25 seconds to take them to Jail! Crouch if you would like to set them free."
|
||||||
released:
|
released:
|
||||||
notify: "&7You have released %player%! You must head back to Neutral before you can do anything."
|
notify: "&7You have released %player%"
|
||||||
info: "&7%player% let you free! You must head back to Neutral before you can do anything."
|
info: "&7%player% let you free! You must head back to Neutral before you can do anything."
|
||||||
full: "&7You have returned to Neutral. You can now get back to the game!"
|
full: "&7You have returned to Neutral. You can now get back to the game!"
|
||||||
brick:
|
brick:
|
||||||
steal:
|
steal:
|
||||||
notify: "&7You have stolen a brick. Make it to Neutral without being caught to Capture The Brick™!"
|
notify: "&7You have stolen a brick. Make it to Neutral without being caught to Capture The Brick™!"
|
||||||
announce: "&7%player% has captured a brick! %score%"
|
announce: "&7%player% has captured a brick!"
|
|
@ -1,7 +1,8 @@
|
||||||
mapInfo:
|
mapInfo:
|
||||||
brickCount: 2
|
brickCount: 2
|
||||||
territory: 1
|
territory: 1
|
||||||
boundary: 3
|
tagTime: 25
|
||||||
|
jailTime: 25
|
||||||
spawn: 0,0,0
|
spawn: 0,0,0
|
||||||
teams:
|
teams:
|
||||||
red:
|
red:
|
||||||
|
@ -10,13 +11,9 @@ teams:
|
||||||
- 0,0,0
|
- 0,0,0
|
||||||
playerSpawn: 0,0,0
|
playerSpawn: 0,0,0
|
||||||
jail: 0,0,0
|
jail: 0,0,0
|
||||||
tagTime: 25
|
|
||||||
jailTime: 25
|
|
||||||
blue:
|
blue:
|
||||||
brickSpawns:
|
brickSpawns:
|
||||||
- 0,0,0
|
- 0,0,0
|
||||||
- 0,0,0
|
- 0,0,0
|
||||||
playerSpawn: 0,0,0
|
playerSpawn: 0,0,0
|
||||||
jail: 0,0,0
|
jail: 0,0,0
|
||||||
tagTime: 25
|
|
||||||
jailTime: 25
|
|
Loading…
Reference in New Issue
Block a user