join anytime #359
@ -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
|
||||||
@ -229,3 +211,21 @@ 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);
|
|
||||||
Lixfel markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Wenn man die Invitation Sachen wirklich entfernen möchte, sollte man auch die Nachrichten dann auch aus den .properties Datein löschen Wenn man die Invitation Sachen wirklich entfernen möchte, sollte man auch die Nachrichten dann auch aus den .properties Datein löschen
|
|||||||
}
|
|
||||||
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));
|
||||||
Chaoscaot
hat
Würde hier eher ein Hopper Inventar nehmen, ist nicht so viel leerer platz im Inventar. Würde hier eher ein Hopper Inventar nehmen, ist nicht so viel leerer platz im Inventar.
Lixfel
hat
Geht nicht ohne aufwändigerer API, ist mMn. nicht soo wichtig. Geht nicht ohne aufwändigerer API, ist mMn. nicht soo wichtig.
|
|||||||
});
|
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());
|
||||||
Lixfel markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Vllt. die Knöpfe ausgrauen, anstatt die gar nicht anzuzeigen? Vllt. die Knöpfe ausgrauen, anstatt die gar nicht anzuzeigen?
|
|||||||
|
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;
|
||||||
Chaoscaot
hat
Weiß nicht, ob es so geil ist, das Interface des geleavten Spielers immer noch herauszugeben. Weiß nicht, ob es so geil ist, das Interface des geleavten Spielers immer noch herauszugeben.
Lixfel
hat
Das ist zwingend notwendig für das korrekte Funktionieren des Kampfsystems und war auch bislang immer so, nur dass beim Rejoin des Spielers der dann halt nichts mehr mit dem alten Spieler zu tun hatte (was mit diesem PR dann allerdings katastrophal wäre). Das ist zwingend notwendig für das korrekte Funktionieren des Kampfsystems und war auch bislang immer so, nur dass beim Rejoin des Spielers der dann halt nichts mehr mit dem alten Spieler zu tun hatte (was mit diesem PR dann allerdings katastrophal wäre).
|
|||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
Lixfel markierte diese Unterhaltung als gelöst
Veraltet
Chaoscaot
hat
Konstanten im SCREAMING_SNAKE_CASE Konstanten im SCREAMING_SNAKE_CASE
|
|||||||
|
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
@ -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();
|
||||||
|
}
|
||||||
|
}
|
@ -93,11 +93,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:
|
||||||
Chaoscaot
hat
Die sind doch mit dem CommandFramework garnicht nötig? Die sind doch mit dem CommandFramework garnicht nötig?
Lixfel
hat
Das FightSystem nutzt das CommandFramework aufgrund der komplexeren (De-)Aktivierungs- und Initialisierungsbedingungen nicht. Das FightSystem nutzt das CommandFramework aufgrund der komplexeren (De-)Aktivierungs- und Initialisierungsbedingungen nicht.
|
|||||||
decline:
|
requests:
|
||||||
leave:
|
leave:
|
||||||
invite:
|
|
||||||
ready:
|
ready:
|
||||||
kit:
|
kit:
|
||||||
remove:
|
remove:
|
||||||
|
Warum wird das ganze Invite System entfernt?
Finde, es hat immer noch seinen nutzen und sollte parallel zu den Requests bestehen.
Das Invite-System wurde entfernt, da es nochmal deutlich aufwändiger ist, beide Varianten zu unterstützen.
Die genannten Beispiele halte ich für ungeeignet, da eh meistens die Spieler erstmal mit "inv" um Beitritt betteln müssen (was sie jetzt direkt anfragen können). Auch bei Massenfights ändert sich kaum etwas, außer, dass Zuschauer nicht mehr ständig Beitrittsanfragen ablehnen müssen. Massenannahmen sollten vonseiten des Leaders aus problemlos möglich sein.