Merge pull request 'join anytime' (#359) from joinAnytime into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #359 Reviewed-by: YoyoNow <jwsteam@nidido.de>
Dieser Commit ist enthalten in:
Commit
722a8748d5
@ -98,6 +98,7 @@ public class FightSystem extends JavaPlugin {
|
|||||||
new ClickAnalyzer();
|
new ClickAnalyzer();
|
||||||
new BlockPlaceCollision();
|
new BlockPlaceCollision();
|
||||||
new HotbarKit.HotbarKitListener();
|
new HotbarKit.HotbarKitListener();
|
||||||
|
new JoinRequestListener();
|
||||||
new OneShotStateDependent(ArenaMode.All, FightState.PreSchemSetup, () -> Fight.playSound(SWSound.BLOCK_NOTE_PLING.getSound(), 100.0f, 2.0f));
|
new OneShotStateDependent(ArenaMode.All, FightState.PreSchemSetup, () -> Fight.playSound(SWSound.BLOCK_NOTE_PLING.getSound(), 100.0f, 2.0f));
|
||||||
|
|
||||||
new EnterHandler();
|
new EnterHandler();
|
||||||
@ -136,12 +137,10 @@ public class FightSystem extends JavaPlugin {
|
|||||||
new LeaveCommand();
|
new LeaveCommand();
|
||||||
new KitCommand();
|
new KitCommand();
|
||||||
new RemoveCommand();
|
new RemoveCommand();
|
||||||
new AcceptCommand();
|
new RequestsCommand();
|
||||||
new WGCommand();
|
new WGCommand();
|
||||||
new TBCommand();
|
new TBCommand();
|
||||||
new DeclineCommand();
|
|
||||||
new GamemodeCommand();
|
new GamemodeCommand();
|
||||||
new InviteCommand();
|
|
||||||
new ReadyCommand();
|
new ReadyCommand();
|
||||||
new AkCommand();
|
new AkCommand();
|
||||||
new LeaderCommand();
|
new LeaderCommand();
|
||||||
|
@ -25,13 +25,6 @@ FIGHT_ALREADY_STARTED=§cThe fight already started
|
|||||||
NOT_LEADER=§cYou aren't a leader
|
NOT_LEADER=§cYou aren't a leader
|
||||||
PLAYER_UNAVAILABLE=§cThe player is not in an arena
|
PLAYER_UNAVAILABLE=§cThe player is not in an arena
|
||||||
|
|
||||||
NO_INVITATION=§cYou weren't invited by any team
|
|
||||||
INVITATION_DECLINED=§cInvitation declined
|
|
||||||
INVITATION_DECLINED_TEAM=§e{0} §chas declined the invitation
|
|
||||||
PLAYER_IN_TEAM=§e{0} §cis already in a team
|
|
||||||
ALREADY_INVITED=§e{0} §cwas invited
|
|
||||||
INVITATION_SENT=§e{0} §7invited
|
|
||||||
|
|
||||||
NOT_IN_TEAM=§e{0} §cis not in your team
|
NOT_IN_TEAM=§e{0} §cis not in your team
|
||||||
|
|
||||||
KIT_UNAVAILABLE=§cThis kit does not exist
|
KIT_UNAVAILABLE=§cThis kit does not exist
|
||||||
@ -41,8 +34,6 @@ GAMEMODE_NOT_ALLOWED=§cChanging gamemode is not permitted
|
|||||||
GAMEMODE_UNKNOWN=§cUnknown gamemode {0}
|
GAMEMODE_UNKNOWN=§cUnknown gamemode {0}
|
||||||
GAMEMODE_HELP=§8/§7gm §8[§egamemode§8]
|
GAMEMODE_HELP=§8/§7gm §8[§egamemode§8]
|
||||||
|
|
||||||
INVITE_HELP=§8/§einvite §8[§eplayer§8]
|
|
||||||
|
|
||||||
LEADER_FULL=§cAll teams already have a leader
|
LEADER_FULL=§cAll teams already have a leader
|
||||||
ALREADY_IN_TEAM=§cYou are already in a team
|
ALREADY_IN_TEAM=§cYou are already in a team
|
||||||
|
|
||||||
@ -58,12 +49,6 @@ WIN_HELP=§8/§7win §8[§eteam §8or §etie§8]
|
|||||||
|
|
||||||
|
|
||||||
# GUI
|
# GUI
|
||||||
INVITATION_TITLE=Invitation from {0}
|
|
||||||
INVITATION_ACCEPT=§aAccept
|
|
||||||
INVITATION_DECLINE=§cDecline
|
|
||||||
INVITATION_CHAT_ACCEPT=§8/§aaccept§8, §7to §aaccept§7 the invitation
|
|
||||||
INVITATION_CHAT_DECLINE=§8/§cdecline§8, §7to §cdecline§7 the invitation
|
|
||||||
|
|
||||||
STATE_TITLE=Fight state
|
STATE_TITLE=Fight state
|
||||||
STATE_PRE_LEADER_SETUP=§7Team leader waiting phase
|
STATE_PRE_LEADER_SETUP=§7Team leader waiting phase
|
||||||
STATE_PRE_SCHEM_SETUP=§7Schematic selection phase
|
STATE_PRE_SCHEM_SETUP=§7Schematic selection phase
|
||||||
@ -73,8 +58,6 @@ STATE_RUNNING=§eFighting phase
|
|||||||
STATE_SPECTATE_WIN=§7Victory {0}
|
STATE_SPECTATE_WIN=§7Victory {0}
|
||||||
STATE_SPECTATE_TIE=§7Draw
|
STATE_SPECTATE_TIE=§7Draw
|
||||||
|
|
||||||
INVITE_TITLE=Invite player
|
|
||||||
|
|
||||||
REMOVE_TITLE=Kick player
|
REMOVE_TITLE=Kick player
|
||||||
|
|
||||||
KIT_SELECTION_TITLE=Kit selection
|
KIT_SELECTION_TITLE=Kit selection
|
||||||
@ -119,7 +102,6 @@ SKIP_NOT_READY=§c§mSkipping to next event
|
|||||||
TEAM_CHAT={0}{1}§8» {0}{2}
|
TEAM_CHAT={0}{1}§8» {0}{2}
|
||||||
CHOOSE_KIT=§eChoose kit
|
CHOOSE_KIT=§eChoose kit
|
||||||
RESPAWN=§eRespawn
|
RESPAWN=§eRespawn
|
||||||
INVITE_PLAYERS=§eInvite player
|
|
||||||
REMOVE_PLAYERS=§cKick player
|
REMOVE_PLAYERS=§cKick player
|
||||||
CHOOSE_SCHEMATIC=§eChoose {0}
|
CHOOSE_SCHEMATIC=§eChoose {0}
|
||||||
SCHEMATIC_REQUIRED=§cChoose a schematic first
|
SCHEMATIC_REQUIRED=§cChoose a schematic first
|
||||||
@ -244,3 +226,22 @@ WIN_CREWMATE_DEAD={0} §7killed all team mates
|
|||||||
|
|
||||||
AMONG_US_IMPOSTER_MESSAGE = §4You are the Imposter§8! §7Kill all your team mates to win the game!
|
AMONG_US_IMPOSTER_MESSAGE = §4You are the Imposter§8! §7Kill all your team mates to win the game!
|
||||||
AMONG_US_IMPOSTER_AMONG_MESSAGE = §4There is an Imposter among us§8! §7Kill him to win the game!
|
AMONG_US_IMPOSTER_AMONG_MESSAGE = §4There is an Imposter among us§8! §7Kill him to win the game!
|
||||||
|
|
||||||
|
|
||||||
|
# Invites
|
||||||
|
JOIN_REQUEST=§7Request join
|
||||||
|
JOIN_REQUEST_TITLE=Request join
|
||||||
|
JOIN_REQUEST_ALREADY=§cYou have already sent a join request
|
||||||
|
JOIN_REQUEST_TEAM=§7Join {0}
|
||||||
|
JOIN_REQUEST_CONFIRMATION=§7Join request submitted
|
||||||
|
JOIN_REQUEST_NOTIFICATION=§e{0} §7requests joining team {1}§8. §7Accept or decline using §8/§erequests
|
||||||
|
|
||||||
|
REQUESTS=§7Open join requests
|
||||||
|
REQUESTS_TITLE=Open join requests
|
||||||
|
REQUEST_DECLINED=§cJoin of {0} declined
|
||||||
|
REQUEST_YOUR_DECLINED=§cYour join request was declined
|
||||||
|
REQUESTS_LEFT_CLICK=§eLeft click §7to §eaccept§8!
|
||||||
|
REQUESTS_RIGHT_CLICK=§eRight click §7to §edecline§8!
|
||||||
|
|
||||||
|
NO_JOIN_REQUEST=§cThe player did not request joining
|
||||||
|
NO_CONFIRMATION=§cNo confirmation necessary
|
@ -23,13 +23,6 @@ FIGHT_ALREADY_STARTED=§cDer Kampf hat bereits begonnen
|
|||||||
NOT_LEADER=§cDu bist kein Leader
|
NOT_LEADER=§cDu bist kein Leader
|
||||||
PLAYER_UNAVAILABLE=§cDer Spieler ist nicht in der Arena
|
PLAYER_UNAVAILABLE=§cDer Spieler ist nicht in der Arena
|
||||||
|
|
||||||
NO_INVITATION=§cDu wurdest von keinem Team eingeladen
|
|
||||||
INVITATION_DECLINED=§cEinladung abgelehnt
|
|
||||||
INVITATION_DECLINED_TEAM=§e{0} §chat die Einladung abgelehnt
|
|
||||||
PLAYER_IN_TEAM=§e{0} §cist bereits in einem Team
|
|
||||||
ALREADY_INVITED=§e{0} §cwurde bereits eingeladen
|
|
||||||
INVITATION_SENT=§e{0} §7eingeladen
|
|
||||||
|
|
||||||
NOT_IN_TEAM=§e{0} §cist nicht in deinem Team
|
NOT_IN_TEAM=§e{0} §cist nicht in deinem Team
|
||||||
|
|
||||||
KIT_UNAVAILABLE=§cDieses Kit gibt es nicht
|
KIT_UNAVAILABLE=§cDieses Kit gibt es nicht
|
||||||
@ -39,8 +32,6 @@ GAMEMODE_NOT_ALLOWED=§cSpielmodusänderung verboten
|
|||||||
GAMEMODE_UNKNOWN=§cUnbekannter Spielmodus {0}
|
GAMEMODE_UNKNOWN=§cUnbekannter Spielmodus {0}
|
||||||
GAMEMODE_HELP=§8/§7gm §8[§eSpielmodus§8]
|
GAMEMODE_HELP=§8/§7gm §8[§eSpielmodus§8]
|
||||||
|
|
||||||
INVITE_HELP=§8/§einvite §8[§eSpieler§8]
|
|
||||||
|
|
||||||
LEADER_FULL=§cAlle Teams haben bereits einen Leader
|
LEADER_FULL=§cAlle Teams haben bereits einen Leader
|
||||||
ALREADY_IN_TEAM=§cDu bist bereits in einem Team
|
ALREADY_IN_TEAM=§cDu bist bereits in einem Team
|
||||||
|
|
||||||
@ -56,12 +47,6 @@ WIN_HELP=§8/§7win §8[§eTeam §8oder §etie§8]
|
|||||||
|
|
||||||
|
|
||||||
# GUI
|
# GUI
|
||||||
INVITATION_TITLE=Einladung von {0}
|
|
||||||
INVITATION_ACCEPT=§aAnnehmen
|
|
||||||
INVITATION_DECLINE=§cAblehnen
|
|
||||||
INVITATION_CHAT_ACCEPT=§8/§aaccept§8, §7um die Einladung §aanzunehmen
|
|
||||||
INVITATION_CHAT_DECLINE=§8/§cdecline§8, §7um die Einladung §cabzulehnen
|
|
||||||
|
|
||||||
STATE_TITLE=Kampfstatus
|
STATE_TITLE=Kampfstatus
|
||||||
STATE_PRE_LEADER_SETUP=§7Teamleaderwartephase
|
STATE_PRE_LEADER_SETUP=§7Teamleaderwartephase
|
||||||
STATE_PRE_SCHEM_SETUP=§7Schemauswahlphase
|
STATE_PRE_SCHEM_SETUP=§7Schemauswahlphase
|
||||||
@ -71,8 +56,6 @@ STATE_RUNNING=§eKampfphase
|
|||||||
STATE_SPECTATE_WIN=§7Sieg {0}
|
STATE_SPECTATE_WIN=§7Sieg {0}
|
||||||
STATE_SPECTATE_TIE=§7Unentschieden
|
STATE_SPECTATE_TIE=§7Unentschieden
|
||||||
|
|
||||||
INVITE_TITLE=Spieler einladen
|
|
||||||
|
|
||||||
REMOVE_TITLE=Spieler rauswerfen
|
REMOVE_TITLE=Spieler rauswerfen
|
||||||
|
|
||||||
KIT_SELECTION_TITLE=Kitauswahl
|
KIT_SELECTION_TITLE=Kitauswahl
|
||||||
@ -116,7 +99,6 @@ SKIP_READY=§aBeschleunigung zum nächsten Event
|
|||||||
SKIP_NOT_READY=§c§mBeschleunigung zum nächsten Event
|
SKIP_NOT_READY=§c§mBeschleunigung zum nächsten Event
|
||||||
CHOOSE_KIT=§eKit wählen
|
CHOOSE_KIT=§eKit wählen
|
||||||
RESPAWN=§eRespawn
|
RESPAWN=§eRespawn
|
||||||
INVITE_PLAYERS=§eSpieler einladen
|
|
||||||
REMOVE_PLAYERS=§cSpieler rauswerfen
|
REMOVE_PLAYERS=§cSpieler rauswerfen
|
||||||
CHOOSE_SCHEMATIC=§e{0} wählen
|
CHOOSE_SCHEMATIC=§e{0} wählen
|
||||||
SCHEMATIC_REQUIRED=§cZuerst muss eine Schematic gewählt sein
|
SCHEMATIC_REQUIRED=§cZuerst muss eine Schematic gewählt sein
|
||||||
@ -228,4 +210,22 @@ WIN_IMPOSTER_DEAD={0} §7 hat den Imposter getötet
|
|||||||
WIN_CREWMATE_DEAD={0} §7 hat alle Kameraden getötet
|
WIN_CREWMATE_DEAD={0} §7 hat alle Kameraden getötet
|
||||||
|
|
||||||
AMONG_US_IMPOSTER_MESSAGE = §4Du bist ein Imposter§8! §7Du musst alle Kameraden töten, um zu gewinnen.
|
AMONG_US_IMPOSTER_MESSAGE = §4Du bist ein Imposter§8! §7Du musst alle Kameraden töten, um zu gewinnen.
|
||||||
AMONG_US_IMPOSTER_AMONG_MESSAGE = §4Es ist ein Imposter unter uns§8! §7Tötet ihn, um das Spiel zu gewinnen!
|
AMONG_US_IMPOSTER_AMONG_MESSAGE = §4Es ist ein Imposter unter uns§8! §7Tötet ihn, um das Spiel zu gewinnen!
|
||||||
|
|
||||||
|
# Invites
|
||||||
|
JOIN_REQUEST=§7Teambeitritt anfragen
|
||||||
|
JOIN_REQUEST_TITLE=Teambeitritt anfragen
|
||||||
|
JOIN_REQUEST_ALREADY=§cDu hast bereits ein Team um Beitritt angefragt
|
||||||
|
JOIN_REQUEST_TEAM={0} §7beitreten
|
||||||
|
JOIN_REQUEST_CONFIRMATION=§7Teambeitritt angefragt
|
||||||
|
JOIN_REQUEST_NOTIFICATION=§e{0} §7möchte Team {1} §7beitreten§8. §7Akzeptiere oder lehne ab mit §8/§erequests
|
||||||
|
|
||||||
|
REQUESTS=§7Offene Beitrittsanfragen
|
||||||
|
REQUESTS_TITLE=Offene Beitrittsanfragen
|
||||||
|
REQUEST_DECLINED=§cBeitritt von {0} abgelehnt
|
||||||
|
REQUEST_YOUR_DECLINED=§cDeine Betrittsanfrage wurde abgelehnt
|
||||||
|
REQUESTS_LEFT_CLICK=§eLinksklick §7um §eanzunehmen§8!
|
||||||
|
REQUESTS_RIGHT_CLICK=§eRechtsklick §7um §eabzulehnen§8!
|
||||||
|
|
||||||
|
NO_JOIN_REQUEST=§cDer Spieler hat noch keinen Beitritt angefragt
|
||||||
|
NO_CONFIRMATION=§cKeine Zustimmung nötig
|
||||||
|
@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is a part of the SteamWar software.
|
|
||||||
|
|
||||||
Copyright (C) 2020 SteamWar.de-Serverteam
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.steamwar.fightsystem.commands;
|
|
||||||
|
|
||||||
import de.steamwar.fightsystem.ArenaMode;
|
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
|
||||||
import de.steamwar.fightsystem.states.StateDependentCommand;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public class AcceptCommand implements CommandExecutor {
|
|
||||||
|
|
||||||
public AcceptCommand() {
|
|
||||||
new StateDependentCommand(ArenaMode.VariableTeams, FightState.Setup, "accept", this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
if(!(sender instanceof Player)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
Commands.acceptInvitation(player);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -47,14 +47,6 @@ public class Commands {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static FightTeam checkGetInvitedTeam(Player p){
|
|
||||||
FightTeam fightTeam = Fight.getInvitedTeam(p);
|
|
||||||
if(fightTeam == null){
|
|
||||||
FightSystem.getMessage().sendPrefixless("NO_INVITATION", p, ChatMessageType.ACTION_BAR);
|
|
||||||
}
|
|
||||||
return fightTeam;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static FightPlayer checkGetPlayer(Player p){
|
private static FightPlayer checkGetPlayer(Player p){
|
||||||
FightPlayer fightPlayer = Fight.getFightPlayer(p);
|
FightPlayer fightPlayer = Fight.getFightPlayer(p);
|
||||||
if(fightPlayer == null){
|
if(fightPlayer == null){
|
||||||
@ -104,30 +96,6 @@ public class Commands {
|
|||||||
fightTeam.skip();
|
fightTeam.skip();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void acceptInvitation(Player p){
|
|
||||||
if(checkSetup(p))
|
|
||||||
return;
|
|
||||||
|
|
||||||
FightTeam team = checkGetInvitedTeam(p);
|
|
||||||
if(team == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
team.addMember(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void declineInvitation(Player p){
|
|
||||||
if(checkSetup(p))
|
|
||||||
return;
|
|
||||||
|
|
||||||
FightTeam team = checkGetInvitedTeam(p);
|
|
||||||
if(team == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
FightSystem.getMessage().sendPrefixless("INVITATION_DECLINED", p, ChatMessageType.ACTION_BAR);
|
|
||||||
team.broadcast("INVITATION_DECLINED_TEAM", p.getName());
|
|
||||||
team.getInvited().remove(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void leaveTeam(Player p){
|
static void leaveTeam(Player p){
|
||||||
if(checkSetup(p))
|
if(checkSetup(p))
|
||||||
return;
|
return;
|
||||||
@ -139,37 +107,6 @@ public class Commands {
|
|||||||
fightTeam.removePlayer(p);
|
fightTeam.removePlayer(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void invite(Player p, String invited){
|
|
||||||
if(checkSetup(p))
|
|
||||||
return;
|
|
||||||
|
|
||||||
FightTeam fightTeam = checkGetTeam(p);
|
|
||||||
if(fightTeam == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
FightPlayer fightPlayer = checkGetLeader(p);
|
|
||||||
if(fightPlayer == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Player target = checkGetPlayer(p, invited);
|
|
||||||
if(target == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(Fight.getPlayerTeam(target) != null) {
|
|
||||||
FightSystem.getMessage().sendPrefixless("PLAYER_IN_TEAM", p, ChatMessageType.ACTION_BAR, target.getName());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(Fight.getOpposite(fightTeam).getInvited().contains(target) || fightTeam.getInvited().contains(target)) {
|
|
||||||
FightSystem.getMessage().sendPrefixless("ALREADY_INVITED", p, ChatMessageType.ACTION_BAR, target.getName());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
FightSystem.getMessage().sendPrefixless("INVITATION_SENT", p, ChatMessageType.ACTION_BAR, target.getName());
|
|
||||||
fightTeam.getInvited().add(target);
|
|
||||||
GUI.invitation(p, target);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void kick(Player p, String kicked){
|
static void kick(Player p, String kicked){
|
||||||
if(checkSetup(p))
|
if(checkSetup(p))
|
||||||
return;
|
return;
|
||||||
|
@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is a part of the SteamWar software.
|
|
||||||
|
|
||||||
Copyright (C) 2020 SteamWar.de-Serverteam
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.steamwar.fightsystem.commands;
|
|
||||||
|
|
||||||
import de.steamwar.fightsystem.ArenaMode;
|
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
|
||||||
import de.steamwar.fightsystem.states.StateDependentCommand;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public class DeclineCommand implements CommandExecutor {
|
|
||||||
|
|
||||||
public DeclineCommand() {
|
|
||||||
new StateDependentCommand(ArenaMode.VariableTeams, FightState.Setup, "decline", this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
if(!(sender instanceof Player)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
Commands.declineInvitation(player);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -21,12 +21,10 @@ package de.steamwar.fightsystem.commands;
|
|||||||
|
|
||||||
import de.steamwar.fightsystem.Config;
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
import de.steamwar.fightsystem.FightSystem;
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.*;
|
||||||
import de.steamwar.fightsystem.fight.FightPlayer;
|
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
|
||||||
import de.steamwar.fightsystem.fight.Kit;
|
|
||||||
import de.steamwar.fightsystem.listener.PersonalKitCreator;
|
import de.steamwar.fightsystem.listener.PersonalKitCreator;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
|
import de.steamwar.fightsystem.utils.ColorConverter;
|
||||||
import de.steamwar.inventory.*;
|
import de.steamwar.inventory.*;
|
||||||
import de.steamwar.message.Message;
|
import de.steamwar.message.Message;
|
||||||
import de.steamwar.sql.PersonalKit;
|
import de.steamwar.sql.PersonalKit;
|
||||||
@ -47,23 +45,27 @@ public class GUI {
|
|||||||
|
|
||||||
private static final Message msg = FightSystem.getMessage();
|
private static final Message msg = FightSystem.getMessage();
|
||||||
|
|
||||||
static void invitation(Player p, Player target){
|
@SuppressWarnings("deprecation")
|
||||||
SWInventory inv = new SWInventory(target, 9, msg.parse("INVITATION_TITLE", target, p.getName()));
|
private static void addTeamRequest(Player p, SWInventory inv, int pos, FightTeam team) {
|
||||||
inv.setItem(0, SWItem.getDye(10), (byte)10, msg.parse("INVITATION_ACCEPT", target), (ClickType click) ->{
|
byte colorCode = ColorConverter.chat2dye(team.getColor()).getDyeData();
|
||||||
Commands.acceptInvitation(target);
|
inv.setItem(pos, SWItem.getDye(colorCode), colorCode, msg.parse("JOIN_REQUEST_TEAM", p, team.getColoredName()), click -> {
|
||||||
target.closeInventory();
|
p.closeInventory();
|
||||||
|
new JoinRequest(p, team);
|
||||||
});
|
});
|
||||||
inv.setItem(8, SWItem.getDye(1), (byte)1, msg.parse("INVITATION_DECLINE", target), (ClickType click) ->{
|
}
|
||||||
Commands.declineInvitation(target);
|
|
||||||
target.closeInventory();
|
public static void joinRequest(Player p) {
|
||||||
});
|
if(JoinRequest.get(p) != null) {
|
||||||
inv.addCloseCallback((ClickType click) ->{
|
msg.sendPrefixless("JOIN_REQUEST_ALREADY", p, ChatMessageType.ACTION_BAR);
|
||||||
if(Fight.getInvitedTeam(target) != null){
|
return;
|
||||||
msg.sendPrefixless("INVITATION_CHAT_ACCEPT", target);
|
}
|
||||||
msg.sendPrefixless("INVITATION_CHAT_DECLINE", target);
|
|
||||||
}
|
SWInventory inv = new SWInventory(p, 9, msg.parse("JOIN_REQUEST_TITLE", p));
|
||||||
});
|
FightTeam team = Fight.getPlayerTeam(p);
|
||||||
inv.setCallback(-999, (ClickType click) -> target.closeInventory());
|
if(team != Fight.getRedTeam())
|
||||||
|
addTeamRequest(p, inv, team == null ? 0 : 4, Fight.getBlueTeam());
|
||||||
|
if(team != Fight.getBlueTeam())
|
||||||
|
addTeamRequest(p, inv, team == null ? 8 : 4, Fight.getRedTeam());
|
||||||
inv.open();
|
inv.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,12 +86,11 @@ public class GUI {
|
|||||||
inv.open();
|
inv.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void chooseInvitation(Player p){
|
public static void chooseJoinRequests(Player p){
|
||||||
List<SWListInv.SWListEntry<UUID>> players = SWListInv.createPlayerList(p.getUniqueId());
|
List<SWListInv.SWListEntry<Player>> players = JoinRequest.openRequests(p, Fight.getPlayerTeam(p));
|
||||||
players.removeIf(swItemUUIDPair -> Fight.getFightPlayer(Bukkit.getPlayer(swItemUUIDPair.getObject())) != null);
|
SWListInv<Player> inv = new SWListInv<>(p, msg.parse("REQUESTS_TITLE", p), players, (ClickType click, Player player) -> {
|
||||||
SWListInv<UUID> inv = new SWListInv<>(p, msg.parse("INVITE_TITLE", p), players, (ClickType click, UUID player) -> {
|
|
||||||
Commands.invite(p, SteamwarUser.get(player).getUserName());
|
|
||||||
p.closeInventory();
|
p.closeInventory();
|
||||||
|
RequestsCommand.onJoinRequest(p, player, click.isLeftClick() ? JoinRequest::accept : JoinRequest::decline);
|
||||||
});
|
});
|
||||||
inv.setCallback(-999, (ClickType click) -> p.closeInventory());
|
inv.setCallback(-999, (ClickType click) -> p.closeInventory());
|
||||||
inv.open();
|
inv.open();
|
||||||
|
@ -21,6 +21,10 @@ package de.steamwar.fightsystem.commands;
|
|||||||
|
|
||||||
import de.steamwar.fightsystem.ArenaMode;
|
import de.steamwar.fightsystem.ArenaMode;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
import de.steamwar.fightsystem.FightSystem;
|
||||||
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
|
import de.steamwar.fightsystem.fight.FightPlayer;
|
||||||
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
|
import de.steamwar.fightsystem.fight.JoinRequest;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
import de.steamwar.fightsystem.states.StateDependentCommand;
|
import de.steamwar.fightsystem.states.StateDependentCommand;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
@ -28,25 +32,46 @@ import org.bukkit.command.CommandExecutor;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class InviteCommand implements CommandExecutor {
|
import java.util.function.BiConsumer;
|
||||||
|
|
||||||
public InviteCommand() {
|
public class RequestsCommand implements CommandExecutor {
|
||||||
new StateDependentCommand(ArenaMode.VariableTeams, FightState.Setup, "invite", this);
|
|
||||||
|
public RequestsCommand() {
|
||||||
|
new StateDependentCommand(ArenaMode.VariableTeams, FightState.AntiSpectate, "request", this);
|
||||||
|
new StateDependentCommand(ArenaMode.VariableTeams, FightState.AntiSpectate, "requests", this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
if(!(sender instanceof Player)) {
|
if(!(sender instanceof Player))
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
Player player = (Player) sender;
|
Player player = (Player) sender;
|
||||||
|
FightPlayer fp = Fight.getFightPlayer(player);
|
||||||
if(args.length != 1){
|
if(fp == null || !(fp.isLeader() || fp.isLiving())) {
|
||||||
FightSystem.getMessage().sendPrefixless("INVITE_HELP", player);
|
GUI.joinRequest(player);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Commands.invite(player, args[0]);
|
if(Commands.checkGetLeader(player) == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
GUI.chooseJoinRequests(player);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void onJoinRequest(Player player, Player target, BiConsumer<JoinRequest, FightTeam> handleJoinRequest) {
|
||||||
|
JoinRequest request = JoinRequest.get(target);
|
||||||
|
if(request == null) {
|
||||||
|
FightSystem.getMessage().send("NO_JOIN_REQUEST", player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
FightTeam team = Fight.getPlayerTeam(player);
|
||||||
|
if(!request.required(team)) {
|
||||||
|
FightSystem.getMessage().send("NO_CONFIRMATION", player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
handleJoinRequest.accept(request, team);
|
||||||
|
}
|
||||||
}
|
}
|
@ -25,17 +25,32 @@ import de.steamwar.fightsystem.fight.FightPlayer;
|
|||||||
import de.steamwar.fightsystem.utils.Message;
|
import de.steamwar.fightsystem.utils.Message;
|
||||||
import de.steamwar.fightsystem.utils.SWSound;
|
import de.steamwar.fightsystem.utils.SWSound;
|
||||||
import de.steamwar.techhider.ProtocolUtils;
|
import de.steamwar.techhider.ProtocolUtils;
|
||||||
|
import de.steamwar.fightsystem.winconditions.Wincondition;
|
||||||
import net.md_5.bungee.api.ChatMessageType;
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class EnternCountdown extends Countdown {
|
public class EnternCountdown extends Countdown {
|
||||||
|
|
||||||
|
private static int calcTime(FightPlayer fp) {
|
||||||
|
int time = Config.EnterStages.get(fp.getKit().getEnterStage());
|
||||||
|
|
||||||
|
Countdown countdown = Wincondition.getTimeOverCountdown();
|
||||||
|
if(countdown != null) {
|
||||||
|
time -= Config.TimeoutTime - countdown.getTimeLeft();
|
||||||
|
|
||||||
|
if(time < 0)
|
||||||
|
time = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
private final FightPlayer fightPlayer;
|
private final FightPlayer fightPlayer;
|
||||||
private List<ProtocolUtils.ChunkPos> chunkPos;
|
private List<ProtocolUtils.ChunkPos> chunkPos;
|
||||||
|
|
||||||
public EnternCountdown(FightPlayer fp) {
|
public EnternCountdown(FightPlayer fp) {
|
||||||
super(Config.EnterStages.get(fp.getKit().getEnterStage()), new Message("ENTERN_COUNTDOWN"), SWSound.BLOCK_NOTE_PLING, false);
|
super(calcTime(fp), new Message("ENTERN_COUNTDOWN"), SWSound.BLOCK_NOTE_PLING, false);
|
||||||
fightPlayer = fp;
|
fightPlayer = fp;
|
||||||
enable();
|
enable();
|
||||||
}
|
}
|
||||||
|
@ -62,14 +62,6 @@ public class Fight {
|
|||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static FightTeam getInvitedTeam(Player player){
|
|
||||||
if(redTeam.getInvited().contains(player))
|
|
||||||
return redTeam;
|
|
||||||
else if(blueTeam.getInvited().contains(player))
|
|
||||||
return blueTeam;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FightPlayer getFightPlayer(Player player) {
|
public static FightPlayer getFightPlayer(Player player) {
|
||||||
if(redTeam.isPlayerInTeam(player))
|
if(redTeam.isPlayerInTeam(player))
|
||||||
return redTeam.getFightPlayer(player);
|
return redTeam.getFightPlayer(player);
|
||||||
|
@ -23,11 +23,15 @@ import de.steamwar.fightsystem.Config;
|
|||||||
import de.steamwar.fightsystem.countdown.EnternCountdown;
|
import de.steamwar.fightsystem.countdown.EnternCountdown;
|
||||||
import de.steamwar.sql.PersonalKit;
|
import de.steamwar.sql.PersonalKit;
|
||||||
import de.steamwar.sql.SteamwarUser;
|
import de.steamwar.sql.SteamwarUser;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public class FightPlayer {
|
public class FightPlayer {
|
||||||
|
|
||||||
private final Player player;
|
private final UUID uuid;
|
||||||
|
private Player player;
|
||||||
private final FightTeam team;
|
private final FightTeam team;
|
||||||
private boolean isOut;
|
private boolean isOut;
|
||||||
private Kit kit;
|
private Kit kit;
|
||||||
@ -35,6 +39,7 @@ public class FightPlayer {
|
|||||||
private EnternCountdown enternCountdown = null;
|
private EnternCountdown enternCountdown = null;
|
||||||
|
|
||||||
FightPlayer(Player player, FightTeam team) {
|
FightPlayer(Player player, FightTeam team) {
|
||||||
|
this.uuid = player.getUniqueId();
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.team = team;
|
this.team = team;
|
||||||
this.isOut = false;
|
this.isOut = false;
|
||||||
@ -48,13 +53,18 @@ public class FightPlayer {
|
|||||||
kills = 0;
|
kills = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void revive() {
|
||||||
|
isOut = false;
|
||||||
|
}
|
||||||
|
|
||||||
public void setOut() {
|
public void setOut() {
|
||||||
isOut = true;
|
isOut = true;
|
||||||
stopEnternCountdown();
|
stopEnternCountdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEnternCountdown(EnternCountdown countdown){
|
public void startEnternCountdown() {
|
||||||
enternCountdown = countdown;
|
if(Config.EnterStages.size() > kit.getEnterStage() && kit.getEnterStage() >= 0)
|
||||||
|
enternCountdown = new EnternCountdown(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stopEnternCountdown(){
|
public void stopEnternCountdown(){
|
||||||
@ -65,7 +75,10 @@ public class FightPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
public Player getPlayer() {
|
||||||
return this.player;
|
Player bukkit = Bukkit.getPlayer(uuid);
|
||||||
|
if(bukkit != null)
|
||||||
|
player = bukkit;
|
||||||
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLiving() {
|
public boolean isLiving() {
|
||||||
|
@ -46,6 +46,7 @@ import org.bukkit.scoreboard.NameTagVisibility;
|
|||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
|
||||||
public class FightTeam {
|
public class FightTeam {
|
||||||
@ -67,7 +68,7 @@ public class FightTeam {
|
|||||||
setKitButton(notReadyKit, true);
|
setKitButton(notReadyKit, true);
|
||||||
|
|
||||||
if(!ArenaMode.RankedEvent.contains(Config.mode)){
|
if(!ArenaMode.RankedEvent.contains(Config.mode)){
|
||||||
notReadyKit.setItem(2, "INVITE_PLAYERS", new ItemBuilder(Material.PAPER).removeAllAttributes().build(), GUI::chooseInvitation);
|
notReadyKit.setItem(2, "REQUESTS", new ItemBuilder(Material.PAPER).removeAllAttributes().build(), GUI::chooseJoinRequests);
|
||||||
notReadyKit.setItem(3, "REMOVE_PLAYERS", new ItemBuilder(SWItem.getMaterial("FIREWORK_CHARGE")).removeAllAttributes().build(), GUI::chooseRemove);
|
notReadyKit.setItem(3, "REMOVE_PLAYERS", new ItemBuilder(SWItem.getMaterial("FIREWORK_CHARGE")).removeAllAttributes().build(), GUI::chooseRemove);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,8 +91,7 @@ public class FightTeam {
|
|||||||
private FightPlayer leader;
|
private FightPlayer leader;
|
||||||
private int schemRank;
|
private int schemRank;
|
||||||
|
|
||||||
private final Map<Player, FightPlayer> players = new HashMap<>();
|
private final Map<UUID, FightPlayer> players = new HashMap<>();
|
||||||
private final Set<Player> invited = new HashSet<>();
|
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private String prefix;
|
private String prefix;
|
||||||
@ -165,11 +165,11 @@ public class FightTeam {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void teleportToSpawn(){
|
public void teleportToSpawn(){
|
||||||
players.forEach((player, fp) -> player.teleport(spawn));
|
players.forEach((player, fp) -> Objects.requireNonNull(Bukkit.getPlayer(player)).teleport(spawn));
|
||||||
}
|
}
|
||||||
|
|
||||||
public FightPlayer getFightPlayer(Player player) {
|
public FightPlayer getFightPlayer(Player player) {
|
||||||
return players.get(player);
|
return players.get(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean allPlayersOut() {
|
public boolean allPlayersOut() {
|
||||||
@ -181,7 +181,7 @@ public class FightTeam {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPlayerInTeam(Player player) {
|
public boolean isPlayerInTeam(Player player) {
|
||||||
return players.containsKey(player);
|
return players.containsKey(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canPlayerEntern(Player player) {
|
public boolean canPlayerEntern(Player player) {
|
||||||
@ -199,24 +199,24 @@ public class FightTeam {
|
|||||||
skip = false;
|
skip = false;
|
||||||
ready = false;
|
ready = false;
|
||||||
schematic.reset();
|
schematic.reset();
|
||||||
invited.clear();
|
|
||||||
|
|
||||||
Set<Player> playerSet = new HashSet<>(players.keySet());
|
Set<UUID> playerSet = new HashSet<>(players.keySet());
|
||||||
for(Player player : playerSet){
|
for(UUID uuid : playerSet){
|
||||||
if(!Bukkit.getOnlinePlayers().contains(player))
|
Player player = Bukkit.getPlayer(uuid);
|
||||||
|
if(player == null)
|
||||||
removePlayer(player);
|
removePlayer(player);
|
||||||
}
|
}
|
||||||
FightPlayer leaderBackup = leader;
|
FightPlayer leaderBackup = leader;
|
||||||
playerSet.removeIf(player -> !Bukkit.getOnlinePlayers().contains(player));
|
playerSet.removeIf(uuid -> Bukkit.getPlayer(uuid) == null);
|
||||||
players.clear();
|
players.clear();
|
||||||
leader = null;
|
leader = null;
|
||||||
|
|
||||||
if(leaderBackup != null){
|
if(leaderBackup != null){
|
||||||
playerSet.remove(leaderBackup.getPlayer());
|
playerSet.remove(leaderBackup.getPlayer().getUniqueId());
|
||||||
addMember(leaderBackup.getPlayer(), true);
|
addMember(leaderBackup.getPlayer(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
playerSet.forEach(p -> addMember(p, true));
|
playerSet.forEach(uuid -> addMember(Bukkit.getPlayer(uuid), true));
|
||||||
|
|
||||||
if(ArenaMode.VariableTeams.contains(Config.mode) && isLeaderless()){
|
if(ArenaMode.VariableTeams.contains(Config.mode) && isLeaderless()){
|
||||||
List<Player> onlinePlayers = new ArrayList<>(Bukkit.getOnlinePlayers());
|
List<Player> onlinePlayers = new ArrayList<>(Bukkit.getOnlinePlayers());
|
||||||
@ -231,36 +231,52 @@ public class FightTeam {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void broadcast(String message, Object... params) {
|
public void broadcast(String message, Object... params) {
|
||||||
players.forEach((player, fp) -> FightSystem.getMessage().sendPrefixless(message, player, ChatMessageType.ACTION_BAR, params));
|
broadcast(player -> FightSystem.getMessage().sendPrefixless(message, player, ChatMessageType.ACTION_BAR, params));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void broadcastSystem(String message, Object... params) {
|
public void broadcastSystem(String message, Object... params) {
|
||||||
players.forEach((player, fp) -> FightSystem.getMessage().send(message, player, params));
|
broadcast(player -> FightSystem.getMessage().send(message, player, params));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void broadcastChat(Player sender, String message) {
|
public void broadcastChat(Player sender, String message) {
|
||||||
players.forEach((player, fp) -> FightSystem.getMessage().sendPrefixless("TEAM_CHAT", player, ChatMessageType.CHAT, prefix, sender.getName(), message));
|
broadcast(player -> FightSystem.getMessage().sendPrefixless("TEAM_CHAT", player, ChatMessageType.CHAT, prefix, sender.getName(), message));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void broadcast(Consumer<Player> f) {
|
||||||
|
players.forEach((uuid, fightPlayer) -> {
|
||||||
|
Player player = Bukkit.getPlayer(uuid);
|
||||||
|
if(player != null)
|
||||||
|
f.accept(player);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addMember(Player player) {
|
public void addMember(Player player) {
|
||||||
addMember(player, false);
|
addMember(player, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addMember(Player player, boolean silent) {
|
private void addMember(Player player, boolean silent) {
|
||||||
final List<ProtocolUtils.ChunkPos> chunksToReload = FightSystem.getTechHider().prepareChunkReload(player, false);
|
final List<ProtocolUtils.ChunkPos> chunksToReload = FightSystem.getTechHider().prepareChunkReload(player, false);
|
||||||
FightPlayer fightPlayer = new FightPlayer(player, this);
|
FightPlayer fightPlayer = getFightPlayer(player) != null ? getFightPlayer(player) : new FightPlayer(player, this);
|
||||||
players.put(player, fightPlayer);
|
fightPlayer.revive();
|
||||||
invited.remove(player);
|
players.put(player.getUniqueId(), fightPlayer);
|
||||||
Permanent.getSpectatorTeam().removeEntry(player.getName());
|
Permanent.getSpectatorTeam().removeEntry(player.getName());
|
||||||
team.addEntry(player.getName());
|
team.addEntry(player.getName());
|
||||||
|
|
||||||
Fight.setPlayerGamemode(player, GameMode.SURVIVAL);
|
|
||||||
player.setHealth(20);
|
player.setHealth(20);
|
||||||
player.setFoodLevel(20);
|
player.setFoodLevel(20);
|
||||||
player.getInventory().clear();
|
player.getInventory().clear();
|
||||||
BountifulWrapper.impl.setAttackSpeed(player);
|
BountifulWrapper.impl.setAttackSpeed(player);
|
||||||
player.teleport(spawn);
|
player.teleport(spawn);
|
||||||
memberKit.loadToPlayer(player);
|
|
||||||
|
if(FightState.Spectate.contains(FightState.getFightState())) {
|
||||||
|
Fight.setPlayerGamemode(player, GameMode.SPECTATOR);
|
||||||
|
} else {
|
||||||
|
Fight.setPlayerGamemode(player, GameMode.SURVIVAL);
|
||||||
|
(FightState.ingame() ? fightPlayer.getKit() : memberKit).loadToPlayer(player);
|
||||||
|
}
|
||||||
|
if(FightState.Running.contains(FightState.getFightState()))
|
||||||
|
fightPlayer.startEnternCountdown();
|
||||||
|
|
||||||
GlobalRecorder.getInstance().playerJoins(player);
|
GlobalRecorder.getInstance().playerJoins(player);
|
||||||
FightSystem.getTechHider().reloadChunks(player, chunksToReload, false);
|
FightSystem.getTechHider().reloadChunks(player, chunksToReload, false);
|
||||||
|
|
||||||
@ -275,7 +291,7 @@ public class FightTeam {
|
|||||||
|
|
||||||
PersonalKitCreator.closeIfInKitCreator(player);
|
PersonalKitCreator.closeIfInKitCreator(player);
|
||||||
List<ProtocolUtils.ChunkPos> chunksToReload = FightSystem.getTechHider().prepareChunkReload(player, true);
|
List<ProtocolUtils.ChunkPos> chunksToReload = FightSystem.getTechHider().prepareChunkReload(player, true);
|
||||||
players.remove(player);
|
players.remove(player.getUniqueId());
|
||||||
team.removeEntry(player.getName());
|
team.removeEntry(player.getName());
|
||||||
Permanent.getSpectatorTeam().addEntry(player.getName());
|
Permanent.getSpectatorTeam().addEntry(player.getName());
|
||||||
|
|
||||||
@ -291,6 +307,9 @@ public class FightTeam {
|
|||||||
|
|
||||||
if(player.isOnline()){
|
if(player.isOnline()){
|
||||||
FightSystem.getTechHider().reloadChunks(player, chunksToReload, true);
|
FightSystem.getTechHider().reloadChunks(player, chunksToReload, true);
|
||||||
|
|
||||||
|
if(ArenaMode.VariableTeams.contains(Config.mode))
|
||||||
|
HotbarKit.SPECTATOR_KIT.loadToPlayer(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -419,10 +438,6 @@ public class FightTeam {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Player> getInvited() {
|
|
||||||
return invited;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
@ -23,10 +23,13 @@ import de.steamwar.core.Core;
|
|||||||
import de.steamwar.fightsystem.ArenaMode;
|
import de.steamwar.fightsystem.ArenaMode;
|
||||||
import de.steamwar.fightsystem.Config;
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
import de.steamwar.fightsystem.FightSystem;
|
||||||
|
import de.steamwar.fightsystem.commands.GUI;
|
||||||
import de.steamwar.fightsystem.listener.PersonalKitCreator;
|
import de.steamwar.fightsystem.listener.PersonalKitCreator;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
import de.steamwar.fightsystem.states.StateDependentListener;
|
import de.steamwar.fightsystem.states.StateDependentListener;
|
||||||
import de.steamwar.fightsystem.states.StateDependentTask;
|
import de.steamwar.fightsystem.states.StateDependentTask;
|
||||||
|
import de.steamwar.fightsystem.utils.ItemBuilder;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -45,6 +48,12 @@ import java.util.function.Consumer;
|
|||||||
|
|
||||||
public class HotbarKit extends Kit {
|
public class HotbarKit extends Kit {
|
||||||
|
|
||||||
|
public static final HotbarKit SPECTATOR_KIT = new HotbarKit();
|
||||||
|
static {
|
||||||
|
for(int i = 0; i < 9; i++)
|
||||||
|
SPECTATOR_KIT.setItem(i, "JOIN_REQUEST", new ItemBuilder(Material.PAPER).removeAllAttributes().build(), GUI::joinRequest);
|
||||||
|
}
|
||||||
|
|
||||||
private static final int HOTBAR_SIZE = 9;
|
private static final int HOTBAR_SIZE = 9;
|
||||||
|
|
||||||
private final String[] nameTags;
|
private final String[] nameTags;
|
||||||
@ -87,8 +96,8 @@ public class HotbarKit extends Kit {
|
|||||||
private static final Set<Player> clicked = new HashSet<>();
|
private static final Set<Player> clicked = new HashSet<>();
|
||||||
|
|
||||||
public HotbarKitListener() {
|
public HotbarKitListener() {
|
||||||
new StateDependentListener(ArenaMode.AntiReplay, FightState.Setup, this);
|
new StateDependentListener(ArenaMode.AntiReplay, FightState.All, this);
|
||||||
new StateDependentTask(ArenaMode.AntiReplay, FightState.Setup, clicked::clear, 10, 10);
|
new StateDependentTask(ArenaMode.AntiReplay, FightState.All, clicked::clear, 10, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
104
FightSystem_Core/src/de/steamwar/fightsystem/fight/JoinRequest.java
Normale Datei
104
FightSystem_Core/src/de/steamwar/fightsystem/fight/JoinRequest.java
Normale Datei
@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
This file is a part of the SteamWar software.
|
||||||
|
|
||||||
|
Copyright (C) 2022 SteamWar.de-Serverteam
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.fightsystem.fight;
|
||||||
|
|
||||||
|
import de.steamwar.fightsystem.FightSystem;
|
||||||
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
|
import de.steamwar.inventory.SWItem;
|
||||||
|
import de.steamwar.inventory.SWListInv;
|
||||||
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
|
import net.md_5.bungee.api.chat.ClickEvent;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class JoinRequest {
|
||||||
|
|
||||||
|
private static final Map<Player, JoinRequest> activeRequests = new HashMap<>();
|
||||||
|
|
||||||
|
public static List<SWListInv.SWListEntry<Player>> openRequests(Player p, FightTeam team) {
|
||||||
|
return activeRequests.values().stream().filter(
|
||||||
|
request -> request.waitOnApproval.contains(team)
|
||||||
|
).map(request -> {
|
||||||
|
SWItem item = SWItem.getPlayerSkull(request.player);
|
||||||
|
item.setLore(Arrays.asList(
|
||||||
|
FightSystem.getMessage().parse("REQUESTS_LEFT_CLICK", p),
|
||||||
|
FightSystem.getMessage().parse("REQUESTS_RIGHT_CLICK", p)
|
||||||
|
));
|
||||||
|
return new SWListInv.SWListEntry<>(item, request.player);
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void clearRequests() {
|
||||||
|
activeRequests.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JoinRequest get(Player player) {
|
||||||
|
return activeRequests.get(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Player player;
|
||||||
|
private final FightTeam team;
|
||||||
|
private final Set<FightTeam> waitOnApproval;
|
||||||
|
|
||||||
|
public JoinRequest(Player player, FightTeam team) {
|
||||||
|
this.player = player;
|
||||||
|
this.team = team;
|
||||||
|
this.waitOnApproval = new HashSet<>(FightState.ingame() ? Fight.teams() : Collections.singleton(team));
|
||||||
|
for(FightTeam t : waitOnApproval) {
|
||||||
|
FightPlayer leader = t.getLeader();
|
||||||
|
if(leader == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Player leaderPlayer = leader.getPlayer();
|
||||||
|
if(leaderPlayer == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
FightSystem.getMessage().sendPrefixless("JOIN_REQUEST_NOTIFICATION", leaderPlayer, "REQUESTS", new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/requests"), player.getName(), team.getColoredName());
|
||||||
|
}
|
||||||
|
|
||||||
|
activeRequests.put(player, this);
|
||||||
|
FightSystem.getMessage().sendPrefixless("JOIN_REQUEST_CONFIRMATION", player, ChatMessageType.ACTION_BAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean required(FightTeam decider) {
|
||||||
|
return waitOnApproval.contains(decider);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void accept(FightTeam acceptor) {
|
||||||
|
waitOnApproval.remove(acceptor);
|
||||||
|
|
||||||
|
if(waitOnApproval.isEmpty()) {
|
||||||
|
team.addMember(player);
|
||||||
|
activeRequests.remove(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void decline(FightTeam declinor) {
|
||||||
|
FightSystem.getMessage().sendPrefixless("REQUEST_YOUR_DECLINED", player, ChatMessageType.ACTION_BAR);
|
||||||
|
waitOnApproval.forEach(t -> t.broadcast("REQUEST_DECLINED", player.getName()));
|
||||||
|
silentDecline();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void silentDecline() {
|
||||||
|
activeRequests.remove(player);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
This file is a part of the SteamWar software.
|
||||||
|
|
||||||
|
Copyright (C) 2022 SteamWar.de-Serverteam
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.fightsystem.listener;
|
||||||
|
|
||||||
|
import de.steamwar.fightsystem.ArenaMode;
|
||||||
|
import de.steamwar.fightsystem.Config;
|
||||||
|
import de.steamwar.fightsystem.FightSystem;
|
||||||
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
|
import de.steamwar.fightsystem.fight.FightPlayer;
|
||||||
|
import de.steamwar.fightsystem.fight.HotbarKit;
|
||||||
|
import de.steamwar.fightsystem.fight.JoinRequest;
|
||||||
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
|
import de.steamwar.fightsystem.states.OneShotStateDependent;
|
||||||
|
import de.steamwar.fightsystem.states.StateDependentListener;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||||
|
|
||||||
|
public class JoinRequestListener implements Listener {
|
||||||
|
|
||||||
|
public JoinRequestListener() {
|
||||||
|
new OneShotStateDependent(ArenaMode.VariableTeams, FightState.PreLeaderSetup, () -> Bukkit.getScheduler().runTask(FightSystem.getPlugin(), JoinRequest::clearRequests));
|
||||||
|
new OneShotStateDependent(ArenaMode.VariableTeams, FightState.PreRunning, () -> Bukkit.getScheduler().runTask(FightSystem.getPlugin(), JoinRequest::clearRequests));
|
||||||
|
|
||||||
|
new StateDependentListener(ArenaMode.VariableTeams, FightState.All, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
|
public void onJoin(PlayerJoinEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
FightPlayer fp = Fight.getFightPlayer(player);
|
||||||
|
|
||||||
|
if (!Config.ArenaLeaveable && (fp == null || !fp.isLiving())) {
|
||||||
|
HotbarKit.SPECTATOR_KIT.loadToPlayer(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void handlePlayerRespawn(PlayerRespawnEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
if(Fight.fighting(player)) {
|
||||||
|
HotbarKit.SPECTATOR_KIT.loadToPlayer(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onLeave(PlayerQuitEvent event) {
|
||||||
|
JoinRequest request = JoinRequest.get(event.getPlayer());
|
||||||
|
if(request != null)
|
||||||
|
request.silentDecline();
|
||||||
|
}
|
||||||
|
}
|
@ -94,11 +94,15 @@ public class Permanent implements Listener {
|
|||||||
event.setJoinMessage(null);
|
event.setJoinMessage(null);
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
FightPlayer fp = Fight.getFightPlayer(player);
|
||||||
|
|
||||||
if (!Config.ArenaLeaveable && !Fight.fighting(player)) {
|
if (!Config.ArenaLeaveable && fp == null) {
|
||||||
Fight.setPlayerGamemode(player, GameMode.SPECTATOR);
|
Fight.setPlayerGamemode(player, GameMode.SPECTATOR);
|
||||||
spectatorTeam.addEntry(player.getName());
|
spectatorTeam.addEntry(player.getName());
|
||||||
player.teleport(Config.SpecSpawn);
|
player.teleport(Config.SpecSpawn);
|
||||||
|
} else if(fp != null && !fp.isLiving()) {
|
||||||
|
Fight.setPlayerGamemode(player, GameMode.SPECTATOR);
|
||||||
|
player.teleport(fp.getTeam().getSpawn());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,8 +19,6 @@
|
|||||||
|
|
||||||
package de.steamwar.fightsystem.utils;
|
package de.steamwar.fightsystem.utils;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.Config;
|
|
||||||
import de.steamwar.fightsystem.countdown.EnternCountdown;
|
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.fight.FightPlayer;
|
import de.steamwar.fightsystem.fight.FightPlayer;
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
@ -53,8 +51,7 @@ public class EnterHandler implements IStateDependent {
|
|||||||
|
|
||||||
private void registerTeam(FightTeam team){
|
private void registerTeam(FightTeam team){
|
||||||
for(FightPlayer fp : team.getPlayers()){
|
for(FightPlayer fp : team.getPlayers()){
|
||||||
if(Config.EnterStages.size() > fp.getKit().getEnterStage() && fp.getKit().getEnterStage() >= 0)
|
fp.startEnternCountdown();
|
||||||
fp.setEnternCountdown(new EnternCountdown(fp));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,10 +12,9 @@ api-version: "1.13"
|
|||||||
|
|
||||||
commands:
|
commands:
|
||||||
ak:
|
ak:
|
||||||
accept:
|
request:
|
||||||
decline:
|
requests:
|
||||||
leave:
|
leave:
|
||||||
invite:
|
|
||||||
ready:
|
ready:
|
||||||
kit:
|
kit:
|
||||||
remove:
|
remove:
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren