SteamWar/BungeeCore
Archiviert
13
2

Merge pull request 'ChatRefactor' (#349) from chatRefactor into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

Reviewed-on: #349
Reviewed-by: YoyoNow <jwsteam@nidido.de>
Dieser Commit ist enthalten in:
Lixfel 2022-04-22 15:19:15 +02:00
Commit 6a7b0ff9c1
23 geänderte Dateien mit 855 neuen und 807 gelöschten Zeilen

Datei anzeigen

@ -124,6 +124,7 @@ public class BungeeCore extends Plugin {
new PlaytimeCommand(); new PlaytimeCommand();
new ArenaCommand(); new ArenaCommand();
new RankCommand(); new RankCommand();
new LocalCommand();
// Punishment Commands: // Punishment Commands:
new PunishmentCommand("ban", Punishment.PunishmentType.Ban); new PunishmentCommand("ban", Punishment.PunishmentType.Ban);

Datei anzeigen

@ -19,68 +19,52 @@
package de.steamwar.bungeecore; package de.steamwar.bungeecore;
import de.steamwar.bungeecore.listeners.ConnectionListener; import de.steamwar.messages.ChatSender;
import de.steamwar.messages.SteamwarResourceBundle;
import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.*; import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;
public class Message { public class Message {
private static final Map<String, ResourceBundle> bundles = new HashMap<>(); @Deprecated
public static TextComponent parseToComponent(String message, boolean prefixed, CommandSender sender, Object... params){ public static TextComponent parseToComponent(String message, boolean prefixed, CommandSender sender, Object... params){
return new TextComponent(TextComponent.fromLegacyText(parse(message, prefixed, locale(sender), params))); return new TextComponent(TextComponent.fromLegacyText(parse(message, prefixed, locale(sender), params)));
} }
@Deprecated
public static String parsePrefixed(String message, CommandSender sender, Object... params){ public static String parsePrefixed(String message, CommandSender sender, Object... params){
return parse(message, true, locale(sender), params); return parse(message, true, locale(sender), params);
} }
@Deprecated
public static String parse(String message, CommandSender sender, Object... params){ public static String parse(String message, CommandSender sender, Object... params){
return parse(message, false, locale(sender), params); return parse(message, false, locale(sender), params);
} }
@Deprecated
public static String parse(String message, Locale locale, Object... params){ public static String parse(String message, Locale locale, Object... params){
return parse(message, false, locale, params); return parse(message, false, locale, params);
} }
@Deprecated
private static Locale locale(CommandSender sender) { private static Locale locale(CommandSender sender) {
return sender instanceof ProxiedPlayer ? ((ProxiedPlayer)sender).getLocale() : Locale.getDefault(); return sender instanceof ProxiedPlayer ? ((ProxiedPlayer)sender).getLocale() : Locale.getDefault();
} }
private static final String BASE_PATH = "/" + "de.steamwar.messages.BungeeCore".replace('.', '/'); @Deprecated
private static ResourceBundle getResourceBundle(String locale, ResourceBundle parent) {
return bundles.computeIfAbsent(locale, locale1 -> {
InputStream inputStream = Message.class.getResourceAsStream(BASE_PATH + ("".equals(locale) ? "" : "_" + locale) + ".properties");
if(inputStream == null)
return parent;
try {
return new SteamwarResourceBundle(inputStream, parent);
} catch (IOException e) {
return parent;
}
});
}
private static ResourceBundle getResourceBundle(Locale locale) {
return getResourceBundle(locale.toString(), getResourceBundle(locale.getLanguage(), getResourceBundle( "", (ResourceBundle) null)));
}
private static String parse(String message, boolean prefixed, Locale locale, Object... params){ private static String parse(String message, boolean prefixed, Locale locale, Object... params){
if(locale == null) if(locale == null)
locale = Locale.getDefault(); locale = Locale.getDefault();
ResourceBundle resourceBundle = getResourceBundle(locale); ResourceBundle resourceBundle = SteamwarResourceBundle.getResourceBundle(locale);
String pattern = ""; String pattern = "";
if(prefixed) if(prefixed)
pattern = resourceBundle.getObject("PREFIX") + " "; pattern = resourceBundle.getObject("PREFIX") + " ";
@ -90,7 +74,7 @@ public class Message {
for (int i = 0; i < params.length; i++) { for (int i = 0; i < params.length; i++) {
if(params[i] instanceof Message) { if(params[i] instanceof Message) {
Message msg = (Message) params[i]; Message msg = (Message) params[i];
params[i] = parse(msg.getMessage(), false, locale, msg.getParams()); params[i] = parse(msg.getFormat(), false, locale, msg.getParams());
} else if(params[i] instanceof Date) { } else if(params[i] instanceof Date) {
params[i] = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale).format((Date) params[i]); params[i] = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale).format((Date) params[i]);
} }
@ -98,101 +82,65 @@ public class Message {
return format.format(params); return format.format(params);
} }
@Deprecated
public static void send(String message, CommandSender sender, Object... params){ public static void send(String message, CommandSender sender, Object... params){
send(message, true, sender, ChatMessageType.SYSTEM, null, null, params); send(message, true, sender, ChatMessageType.SYSTEM, null, null, params);
} }
@Deprecated
public static void sendPrefixless(String message, CommandSender sender, Object... params){ public static void sendPrefixless(String message, CommandSender sender, Object... params){
send(message, false, sender, ChatMessageType.SYSTEM, null, null, params); send(message, false, sender, ChatMessageType.SYSTEM, null, null, params);
} }
public static void send(String message, CommandSender sender, ChatMessageType type, Object... params){ @Deprecated
send(message, true, sender, type, null, null, params);
}
public static void sendPrefixless(String message, CommandSender sender, ChatMessageType type, Object... params){
send(message, false, sender, type, null, null, params);
}
public static void send(String message, CommandSender sender, String onHover, ClickEvent onClick, Object... params){ public static void send(String message, CommandSender sender, String onHover, ClickEvent onClick, Object... params){
send(message, true, sender, ChatMessageType.SYSTEM, onHover, onClick, params); send(message, true, sender, ChatMessageType.SYSTEM, onHover, onClick, params);
} }
@Deprecated
public static void sendPrefixless(String message, CommandSender sender, String onHover, ClickEvent onClick, Object... params){ public static void sendPrefixless(String message, CommandSender sender, String onHover, ClickEvent onClick, Object... params){
send(message, false, sender, ChatMessageType.SYSTEM, onHover, onClick, params); send(message, false, sender, ChatMessageType.SYSTEM, onHover, onClick, params);
} }
public static void send(String message, boolean prefixed, CommandSender sender, ChatMessageType type, String onHover, ClickEvent onClick, Object... params){ @Deprecated
if(type == ChatMessageType.CHAT && sender instanceof ProxiedPlayer && ((ProxiedPlayer)sender).getChatMode() != ProxiedPlayer.ChatMode.SHOWN) private static void send(String message, boolean prefixed, CommandSender s, ChatMessageType type, String onHover, ClickEvent onClick, Object... params){
ChatSender sender = ChatSender.of(s);
if(type == ChatMessageType.CHAT && !sender.chatShown())
return; return;
TextComponent msg = parseToComponent(message, prefixed, sender, params);
if(onHover != null) sender.send(prefixed, type, new Message("PLAIN_STRING", onHover), onClick, new Message(message, params));
msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(onHover)));
if(onClick != null)
msg.setClickEvent(onClick);
if(sender instanceof ProxiedPlayer)
((ProxiedPlayer)sender).sendMessage(type, msg);
else
sender.sendMessage(msg);
} }
public static void broadcast(String message, String onHover, ClickEvent onClick, Object... params){ public static void broadcast(String message, Object... params) {
for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) broadcast(message, null, null, params);
send(message, player, parse(onHover, player, params), onClick, params);
} }
public static void broadcast(String message, Object... params){ public static void broadcast(String message, String onHover, ClickEvent onClick, Object... params) {
for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) ChatSender.allReceivers().forEach(player -> player.prefixless(message, new Message(onHover, params), onClick, params));
send(message, player, ChatMessageType.SYSTEM, params);
} }
public static void chat(String message, Object... params){ public static void team(String message, Object... params) {
for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers()){ team(message, null, null, params);
Subserver server = Subserver.getSubserver(player);
if(server == null || server.getType() != Servertype.ARENA)
sendPrefixless(message, player, ChatMessageType.CHAT, params);
}
} }
public static void team(String message, Object... params){ public static void team(String message, String onHover, ClickEvent onClick, Object... params) {
team(message, ChatMessageType.SYSTEM, params); ChatSender.serverteamReceivers().filter(player -> player.user().getUserGroup().isTeamGroup()).forEach(player -> player.prefixless(message, new Message(onHover, params), onClick, params));
} }
public static void team(String message, ChatMessageType type, Object... params){ private final String format;
for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers()){
if(player.getGroups().contains(ConnectionListener.TEAM_GROUP)) {
sendPrefixless(message, player, type, params);
}
}
}
public static void team(String message, String onHover, ClickEvent onClick, Object... params){
for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers()){
if(player.getGroups().contains(ConnectionListener.TEAM_GROUP))
sendPrefixless(message, player, Message.parse(onHover, player, params), onClick, params);
}
}
private final String message;
private final Object[] params; private final Object[] params;
public Message(String message, Object... params) { public Message(String format, Object... params) {
this.message = message; this.format = format;
this.params = params; this.params = params;
} }
public String getMessage() { public String getFormat() {
return message; return format;
} }
public Object[] getParams() { public Object[] getParams() {
return params; return params;
} }
private static class SteamwarResourceBundle extends PropertyResourceBundle {
public SteamwarResourceBundle(InputStream stream, ResourceBundle parent) throws IOException {
super(stream);
setParent(parent);
}
}
} }

Datei anzeigen

@ -29,6 +29,7 @@ import de.steamwar.bungeecore.bot.util.DiscordRolesMessage;
import de.steamwar.bungeecore.bot.util.DiscordRulesMessage; import de.steamwar.bungeecore.bot.util.DiscordRulesMessage;
import de.steamwar.bungeecore.bot.util.DiscordTicketMessage; import de.steamwar.bungeecore.bot.util.DiscordTicketMessage;
import de.steamwar.bungeecore.sql.Event; import de.steamwar.bungeecore.sql.Event;
import de.steamwar.messages.ChatSender;
import lombok.Getter; import lombok.Getter;
import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.JDABuilder;
@ -59,10 +60,10 @@ public class SteamwarDiscordBot {
private volatile AnnouncementListener announcementListener; private volatile AnnouncementListener announcementListener;
@Getter @Getter
private volatile IngameChatListener ingameChatListener; private volatile DiscordChatListener ingameChatListener;
@Getter @Getter
private volatile ServerTeamChatListener serverTeamChatListener; private volatile DiscordChatListener serverTeamChatListener;
@Getter @Getter
private final JDA jda; private final JDA jda;
@ -111,8 +112,8 @@ public class SteamwarDiscordBot {
new DiscordEventListener(); new DiscordEventListener();
new PrivateMessageListener(); new PrivateMessageListener();
announcementListener = new AnnouncementListener(); announcementListener = new AnnouncementListener();
ingameChatListener = new IngameChatListener(); ingameChatListener = new DiscordChatListener(SteamwarDiscordBotConfig.INGAME_CHANNEL, "CHAT_DISCORD_GLOBAL", ChatSender::globalReceivers);
serverTeamChatListener = new ServerTeamChatListener(); serverTeamChatListener = new DiscordChatListener(SteamwarDiscordBotConfig.SERVER_TEAM_CHANNEL, "CHAT_SERVERTEAM", ChatSender::serverteamReceivers);
new SlashCommandListener(); new SlashCommandListener();
jda.retrieveCommands().complete().forEach(command -> jda.deleteCommandById(command.getId()).queue()); jda.retrieveCommands().complete().forEach(command -> jda.deleteCommandById(command.getId()).queue());

Datei anzeigen

@ -24,43 +24,45 @@ import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig;
import de.steamwar.bungeecore.listeners.ChatListener; import de.steamwar.bungeecore.listeners.ChatListener;
import de.steamwar.bungeecore.sql.Punishment; import de.steamwar.bungeecore.sql.Punishment;
import de.steamwar.bungeecore.sql.SteamwarUser; import de.steamwar.bungeecore.sql.SteamwarUser;
import de.steamwar.bungeecore.sql.UserGroup; import de.steamwar.messages.ChatSender;
import net.dv8tion.jda.api.MessageBuilder; import net.dv8tion.jda.api.MessageBuilder;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class IngameChatListener extends BasicDiscordListener { import java.util.function.Supplier;
import java.util.stream.Stream;
public class DiscordChatListener extends BasicDiscordListener {
private final String channel;
private final String format;
private final Supplier<Stream<ChatSender>> targets;
public DiscordChatListener(String channel, String format, Supplier<Stream<ChatSender>> targets) {
this.channel = channel;
this.format = format;
this.targets = targets;
}
@Override @Override
public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) {
if (!event.getChannel().getId().equals(SteamwarDiscordBotConfig.INGAME_CHANNEL)) { if (!event.getChannel().getId().equals(channel) || event.getAuthor().isBot())
return; return;
}
if (event.getAuthor().isBot()) {
return;
}
Member member = event.getMember(); Member member = event.getMember();
SteamwarUser steamwarUser = SteamwarUser.get(member.getIdLong()); SteamwarUser steamwarUser = SteamwarUser.get(member.getIdLong());
if (steamwarUser == null || event.getMessage().getContentRaw().length() > 250) { if (steamwarUser == null || event.getMessage().getContentRaw().length() > 250 || steamwarUser.isPunished(Punishment.PunishmentType.Ban)) {
event.getMessage().delete().queue(); event.getMessage().delete().queue();
} else { } else {
String s = event.getMessage().getContentDisplay(); ChatListener.sendChat(ChatSender.of(event.getMessage(), steamwarUser), targets.get(), format, event.getMessage().getContentDisplay().replace('§', '&').replace('\n', ' '));
if (steamwarUser.getUserGroup() == UserGroup.Member && (s.contains("http") || s.contains("www"))) {
event.getMessage().delete().queue();
return;
}
if (steamwarUser.isPunished(Punishment.PunishmentType.Mute) || steamwarUser.isPunished(Punishment.PunishmentType.Ban)) {
event.getMessage().delete().queue();
return;
}
ChatListener.discordChat(steamwarUser, event.getMessage().getContentDisplay().replaceAll("§[a-f0-9]", "").replace('\n', ' '));
} }
} }
public void send(String message) { public void send(String message) {
TextChannel textChannel = SteamwarDiscordBot.instance().getJda().getGuildById(SteamwarDiscordBotConfig.GUILD).getTextChannelById(SteamwarDiscordBotConfig.INGAME_CHANNEL); TextChannel textChannel = SteamwarDiscordBot.instance().getJda().getGuildById(SteamwarDiscordBotConfig.GUILD).getTextChannelById(channel);
assert textChannel != null; assert textChannel != null;
MessageBuilder messageBuilder = new MessageBuilder(); MessageBuilder messageBuilder = new MessageBuilder();
messageBuilder.append(message.replace("&", "").replace("@everyone", "`@everyone`").replace("@here", "`@here`").replaceAll("<[@#]!?\\d+>", "`$0`")); messageBuilder.append(message.replace("&", "").replace("@everyone", "`@everyone`").replace("@here", "`@here`").replaceAll("<[@#]!?\\d+>", "`$0`"));

Datei anzeigen

@ -1,58 +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.bungeecore.bot.listeners;
import de.steamwar.bungeecore.bot.SteamwarDiscordBot;
import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig;
import de.steamwar.bungeecore.commands.ServerTeamchatCommand;
import de.steamwar.bungeecore.sql.SteamwarUser;
import net.dv8tion.jda.api.MessageBuilder;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
public class ServerTeamChatListener extends BasicDiscordListener {
@Override
public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) {
if (!event.getChannel().getId().equals(SteamwarDiscordBotConfig.SERVER_TEAM_CHANNEL)) {
return;
}
if (event.getAuthor().isBot()) {
return;
}
Member member = event.getMember();
SteamwarUser steamwarUser = SteamwarUser.get(member.getIdLong());
if (steamwarUser == null) {
event.getMessage().delete().complete();
} else {
ServerTeamchatCommand.sendToTeam(event.getMessage().getContentRaw(), steamwarUser);
}
}
public void send(String message) {
TextChannel textChannel = SteamwarDiscordBot.instance().getJda().getGuildById(SteamwarDiscordBotConfig.GUILD).getTextChannelById(SteamwarDiscordBotConfig.SERVER_TEAM_CHANNEL);
assert textChannel != null;
MessageBuilder messageBuilder = new MessageBuilder();
messageBuilder.append(message.replace("&", ""));
textChannel.sendMessage(messageBuilder.build()).queue();
}
}

Datei anzeigen

@ -19,12 +19,9 @@
package de.steamwar.bungeecore.commands; package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.Arenaserver;
import de.steamwar.bungeecore.Message; import de.steamwar.bungeecore.Message;
import de.steamwar.bungeecore.Servertype;
import de.steamwar.bungeecore.Subserver; import de.steamwar.bungeecore.Subserver;
import de.steamwar.bungeecore.SubserverSystem;
import de.steamwar.bungeecore.sql.Punishment;
import de.steamwar.bungeecore.sql.SteamwarUser;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.config.ServerInfo;
@ -42,28 +39,12 @@ public class ArenaCommand extends BasicCommand {
return; return;
ProxiedPlayer player = (ProxiedPlayer) sender; ProxiedPlayer player = (ProxiedPlayer) sender;
if(CheckCommand.isChecking(player)){
Message.send("CHECK_CHECKING", player);
return;
}
SteamwarUser steamwarUser = SteamwarUser.get(player);
if (steamwarUser.isPunishedWithMessage(player, Punishment.PunishmentType.NoFightServer)) {
return;
}
ServerInfo server = ProxyServer.getInstance().getServerInfo(String.join(" ", args)); ServerInfo server = ProxyServer.getInstance().getServerInfo(String.join(" ", args));
if(server == null) { if(server == null || !(Subserver.getSubserver(server) instanceof Arenaserver)) {
Message.send("ARENA_NOT_FOUND", player); Message.send("ARENA_NOT_FOUND", player);
return; return;
} }
Subserver subserver = Subserver.getSubserver(server); TpCommand.teleport(player, server);
if(subserver == null || subserver.getType() != Servertype.ARENA) {
Message.send("ARENA_NOT_FOUND", player);
return;
}
SubserverSystem.sendPlayer(subserver, player);
} }
} }

Datei anzeigen

@ -25,6 +25,7 @@ import de.steamwar.bungeecore.inventory.SWInventory;
import de.steamwar.bungeecore.inventory.SWItem; import de.steamwar.bungeecore.inventory.SWItem;
import de.steamwar.bungeecore.sql.BauweltMember; import de.steamwar.bungeecore.sql.BauweltMember;
import de.steamwar.bungeecore.sql.SteamwarUser; import de.steamwar.bungeecore.sql.SteamwarUser;
import de.steamwar.messages.ChatSender;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.config.ServerInfo;
@ -78,7 +79,7 @@ public class BauCommand extends BasicCommand {
testarena(p, args); testarena(p, args);
break; break;
default: default:
HelpCommand.sendBauHelp(p); HelpCommand.sendBauHelp(ChatSender.of(p));
} }
} }
); );
@ -130,7 +131,7 @@ public class BauCommand extends BasicCommand {
() -> new ServerStarter().build18(worldOwner.getUuid()).send(p).start(), () -> new ServerStarter().build18(worldOwner.getUuid()).send(p).start(),
() -> new ServerStarter().build15(worldOwner.getUuid()).send(p).start(), () -> new ServerStarter().build15(worldOwner.getUuid()).send(p).start(),
() -> new ServerStarter().build12(worldOwner.getUuid()).send(p).start(), () -> new ServerStarter().build12(worldOwner.getUuid()).send(p).start(),
() -> HelpCommand.sendBauHelp(p)); () -> HelpCommand.sendBauHelp(ChatSender.of(p)));
} }
private static void versionSelector(ProxiedPlayer p, String[] args, int pos, Runnable run18, Runnable run15, Runnable run12, Runnable runElse) { private static void versionSelector(ProxiedPlayer p, String[] args, int pos, Runnable run18, Runnable run15, Runnable run12, Runnable runElse) {
@ -233,7 +234,7 @@ public class BauCommand extends BasicCommand {
() -> deleteConfirmation(p, () -> deleteWorld(p, ServerStarter.WORLDS18_PATH + user.getId())), () -> deleteConfirmation(p, () -> deleteWorld(p, ServerStarter.WORLDS18_PATH + user.getId())),
() -> deleteConfirmation(p, () -> deleteWorld(p, BungeeCore.USERWORLDS15 + user.getId())), () -> deleteConfirmation(p, () -> deleteWorld(p, BungeeCore.USERWORLDS15 + user.getId())),
() -> deleteConfirmation(p, () -> deleteWorld(p, BungeeCore.WORLD_FOLDER + p.getUniqueId().toString())), () -> deleteConfirmation(p, () -> deleteWorld(p, BungeeCore.WORLD_FOLDER + p.getUniqueId().toString())),
() -> HelpCommand.sendBauHelp(p)); () -> HelpCommand.sendBauHelp(ChatSender.of(p)));
} }
private static void deleteConfirmation(ProxiedPlayer p, Runnable worldDeletion) { private static void deleteConfirmation(ProxiedPlayer p, Runnable worldDeletion) {

Datei anzeigen

@ -19,9 +19,9 @@
package de.steamwar.bungeecore.commands; package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.Message;
import de.steamwar.bungeecore.sql.Punishment; import de.steamwar.bungeecore.sql.Punishment;
import de.steamwar.bungeecore.sql.SteamwarUser; import de.steamwar.bungeecore.sql.SteamwarUser;
import de.steamwar.messages.ChatSender;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.config.ServerInfo;
@ -44,25 +44,25 @@ public class DevCommand extends BasicCommand {
} }
@Override @Override
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender s, String[] args) {
if (!(sender instanceof ProxiedPlayer)) if (!(s instanceof ProxiedPlayer))
return; return;
ProxiedPlayer player = (ProxiedPlayer) sender; ProxiedPlayer player = (ProxiedPlayer) s;
SteamwarUser steamwarUser = SteamwarUser.get(player); ChatSender sender = ChatSender.of(player);
if (steamwarUser.isPunishedWithMessage(player, Punishment.PunishmentType.NoDevServer)) { if (sender.user().isPunishedWithMessage(sender, Punishment.PunishmentType.NoDevServer)) {
return; return;
} }
updateDevServers(); updateDevServers();
if(devServers.isEmpty()) { if(devServers.isEmpty()) {
Message.send("DEV_NO_SERVER", sender); sender.system("DEV_NO_SERVER");
} else if (devServers.size() == 1) { } else if (devServers.size() == 1) {
player.connect(devServers.values().stream().findAny().get()); player.connect(devServers.values().stream().findAny().get());
} else if (args.length == 0) { } else if (args.length == 0) {
ServerInfo info = devServers.get(player.getName().toLowerCase()); ServerInfo info = devServers.get(player.getName().toLowerCase());
if (info == null) { if (info == null) {
Message.send("DEV_UNKNOWN_SERVER", player); sender.system("DEV_UNKNOWN_SERVER");
return; return;
} }
@ -70,7 +70,7 @@ public class DevCommand extends BasicCommand {
} else { } else {
ServerInfo info = devServers.get(args[0].toLowerCase()); ServerInfo info = devServers.get(args[0].toLowerCase());
if (info == null) { if (info == null) {
Message.send("DEV_NO_SERVER", player); sender.system("DEV_NO_SERVER");
return; return;
} }

Datei anzeigen

@ -22,13 +22,14 @@ package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.*; import de.steamwar.bungeecore.*;
import de.steamwar.bungeecore.listeners.mods.ModLoaderBlocker; import de.steamwar.bungeecore.listeners.mods.ModLoaderBlocker;
import de.steamwar.bungeecore.sql.Punishment; import de.steamwar.bungeecore.sql.Punishment;
import de.steamwar.bungeecore.sql.SteamwarUser; import de.steamwar.messages.ChatSender;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.chat.hover.content.Text;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.util.LinkedList; import java.util.LinkedList;
@ -47,27 +48,27 @@ public class FightCommand extends BasicCommand {
super("fight", "", "f"); super("fight", "", "f");
} }
static ArenaMode getMode(CommandSender sender, String arg){ private static ArenaMode getMode(ChatSender sender, String arg){
ArenaMode mode = ArenaMode.getByChat(arg); ArenaMode mode = ArenaMode.getByChat(arg);
if(mode != null) if(mode != null)
return mode; return mode;
Message.send("FIGHT_UNKNOWN_GAMEMODE", sender, arg); sender.system("FIGHT_UNKNOWN_GAMEMODE", arg);
return null; return null;
} }
static String getMap(CommandSender sender, ArenaMode mode, String arg){ private static String getMap(ChatSender sender, ArenaMode mode, String arg){
String realMap = mode.hasMap(arg.toLowerCase()); String realMap = mode.hasMap(arg.toLowerCase());
if(realMap != null) if(realMap != null)
return realMap; return realMap;
if(arg.equalsIgnoreCase("Random")) if(arg.equalsIgnoreCase("Random"))
return mode.getRandomMap(); return mode.getRandomMap();
Message.send("FIGHT_UNKNOWN_ARENA", sender); sender.system("FIGHT_UNKNOWN_ARENA");
return null; return null;
} }
private static void getModes(CommandSender sender, String precommand, boolean historic){ private static void getModes(ChatSender sender, String precommand, boolean historic){
TextComponent start = new TextComponent(); TextComponent start = new TextComponent();
TextComponent current = start; TextComponent current = start;
for(ArenaMode mode : ArenaMode.getAllModes()){ for(ArenaMode mode : ArenaMode.getAllModes()){
@ -77,25 +78,25 @@ public class FightCommand extends BasicCommand {
current.setBold(true); current.setBold(true);
current.setColor(ChatColor.GRAY); current.setColor(ChatColor.GRAY);
current.setText(mode.getChatName() + " "); current.setText(mode.getChatName() + " ");
current.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§e" + command).create())); current.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§e" + command)));
current.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)); current.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command));
if(current != start) if(current != start)
start.addExtra(current); start.addExtra(current);
current = new TextComponent(); current = new TextComponent();
} }
sender.sendMessage(start); sender.sendMessage(ChatMessageType.SYSTEM, start);
} }
private static void getMaps(CommandSender sender, String precommand, ArenaMode mode){ private static void getMaps(ChatSender sender, String precommand, ArenaMode mode){
TextComponent start = new TextComponent(); TextComponent start = new TextComponent();
TextComponent current = start; TextComponent current = start;
if(mode.getMaps().size() > 1){ if(mode.getMaps().size() > 1){
String command = precommand + mode.getChatName() + " Random"; String command = precommand + mode.getChatName() + " Random";
start.setBold(true); start.setBold(true);
start.setColor(ChatColor.GRAY); start.setColor(ChatColor.GRAY);
start.setText(Message.parse("FIGHT_ARENA_RANDOM", sender) + " "); start.setText(sender.parseToLegacy("FIGHT_ARENA_RANDOM") + " ");
start.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§e" + command).create())); start.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§e" + command)));
start.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)); start.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command));
current = new TextComponent(); current = new TextComponent();
} }
@ -105,14 +106,14 @@ public class FightCommand extends BasicCommand {
current.setBold(true); current.setBold(true);
current.setColor(ChatColor.GRAY); current.setColor(ChatColor.GRAY);
current.setText(map + " "); current.setText(map + " ");
current.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§e" + command).create())); current.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§e" + command)));
current.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)); current.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command));
if(current != start) if(current != start)
start.addExtra(current); start.addExtra(current);
current = new TextComponent(); current = new TextComponent();
} }
sender.sendMessage(start); sender.sendMessage(ChatMessageType.SYSTEM, start);
} }
private static boolean alreadyInArena(ProxiedPlayer player){ private static boolean alreadyInArena(ProxiedPlayer player){
@ -125,14 +126,14 @@ public class FightCommand extends BasicCommand {
return false; return false;
} }
static void createArena(CommandSender sender, String precommand, String[] args, int startArg, boolean historic, FightCallback callback){ static void createArena(CommandSender s, String precommand, String[] args, int startArg, boolean historic, FightCallback callback){
if(!(sender instanceof ProxiedPlayer)) if(!(s instanceof ProxiedPlayer))
return; return;
ProxiedPlayer player = (ProxiedPlayer) sender; ProxiedPlayer player = (ProxiedPlayer) s;
SteamwarUser steamwarUser = SteamwarUser.get(player); ChatSender sender = ChatSender.of(player);
if (steamwarUser.isPunishedWithMessage(player, Punishment.PunishmentType.NoFightServer)) { if (sender.user().isPunishedWithMessage(sender, Punishment.PunishmentType.NoFightServer)) {
return; return;
} }
@ -140,7 +141,7 @@ public class FightCommand extends BasicCommand {
return; return;
if(ModLoaderBlocker.isFabric(player) && !precommand.equals("/bau testarena ")) { if(ModLoaderBlocker.isFabric(player) && !precommand.equals("/bau testarena ")) {
Message.send("MODLOADER_DENIED", sender); sender.system("MODLOADER_DENIED");
return; return;
} }

Datei anzeigen

@ -20,10 +20,9 @@
package de.steamwar.bungeecore.commands; package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.Message; import de.steamwar.bungeecore.Message;
import net.md_5.bungee.api.ChatMessageType; import de.steamwar.messages.ChatSender;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
public class HelpCommand extends BasicCommand { public class HelpCommand extends BasicCommand {
@ -32,32 +31,29 @@ public class HelpCommand extends BasicCommand {
} }
@Override @Override
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender s, String[] args) {
ChatSender sender = ChatSender.of(s);
if (args.length < 1) { if (args.length < 1) {
Message.send("HELP_LOBBY", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_LOBBY_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/l")); printPage(sender, ClickEvent.Action.RUN_COMMAND,
Message.send("HELP_BAU", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bau")); "HELP_LOBBY", "/l",
Message.send("HELP_BAUSERVER", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_BAUSERVER_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help bau")); "HELP_BAU", "/bau",
Message.send("HELP_FIGHT", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_FIGHT_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/fight")); "HELP_BAUSERVER", "/help bau",
Message.send("HELP_CHALLENGE", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_CHALLENGE_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/challenge")); "HELP_FIGHT", "/fight",
Message.send("HELP_HISTORIC", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_HISTORIC_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/historic")); "HELP_CHALLENGE", "/challenge",
Message.send("HELP_TEAM", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_TEAM_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/team")); "HELP_HISTORIC", "/historic",
Message.send("HELP_JOIN", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_JOIN_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/join")); "HELP_TEAM", "/team",
Message.send("HELP_LOCAL", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_LOCAL_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/local")); "HELP_JOIN", "/join",
return; "HELP_LOCAL", "/local");
}else if (args[0].equalsIgnoreCase("bauserver")) {
sendBauHelp(sender);
}else if (args[0].equalsIgnoreCase("bau")) {
bauHelpGroup(sender, args);
} }
if (args[0].equalsIgnoreCase("bauserver")) {
sendBauHelp((ProxiedPlayer) sender);
}
if (args[0].equalsIgnoreCase("bau")) {
bauHelpGroup((ProxiedPlayer) sender, args);
return;
}
} }
private static void bauHelpGroup(ProxiedPlayer p, String[] args) { private static void bauHelpGroup(ChatSender sender, String[] args) {
if (args.length < 2) { if (args.length < 2) {
sendBauHelpGroup(p); sendBauHelpGroup(sender);
return; return;
} }
@ -65,89 +61,63 @@ public class HelpCommand extends BasicCommand {
case "admin": case "admin":
case "owner": case "owner":
case "bauwelt": case "bauwelt":
sendBauHelpAdmin(p); sender.system("HELP_BAU_GROUP_ADMIN_TITLE");
sendBauHelp(sender);
return; return;
case "world": case "world":
sendBauHelpWorld(p); printPage(sender, "HELP_BAU_GROUP_WORLD_TITLE", "HELP_TNT", "HELP_FIRE", "HELP_FREEZE", "HELP_TPSLIMIT", "HELP_PROTECT", "HELP_RESET");
return; return;
case "player": case "player":
sendBauHelpPlayer(p); printPage(sender, "HELP_BAU_GROUP_PLAYER_TITLE", "HELP_SPEED", "HELP_NV", "HELP_WV", "HELP_DEBUGSTICK", "HELP_TRACE", "HELP_LOADER");
return; return;
case "worldedit": case "worldedit":
case "we": case "we":
case "world-edit": case "world-edit":
case "edit": case "edit":
sendBauHelpWorldEdit(p); printPage(sender, "HELP_BAU_GROUP_WE_TITLE", "HELP_WE_POS1", "HELP_WE_POS2", "HELP_WE_COPY", "HELP_WE_PASTE", "HELP_WE_FLOPY", "HELP_WE_FLOPYP", "HELP_WE_ROTATE_90", "HELP_WE_ROTATE_180", "HELP_WE_ROTATE_N90");
return; return;
case "other": case "other":
sendBauHelpOther(p); printPage(sender, "HELP_BAU_GROUP_OTHER_TITLE", "HELP_TESTBLOCK", "HELP_SKULL", "HELP_BAUINFO");
return; return;
default: default:
sendBauHelpGroup(p); sendBauHelpGroup(sender);
} }
} }
private static void sendBauHelpGroup(ProxiedPlayer p) { private static void sendBauHelpGroup(ChatSender sender) {
Message.send("HELP_BAU_GROUP_ADMIN", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_GROUP_ADMIN_HOVER", p), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help bau admin")); printPage(sender, ClickEvent.Action.RUN_COMMAND,
Message.send("HELP_BAU_GROUP_WORLD", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_GROUP_WORLD_HOVER", p), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help bau world")); "HELP_BAU_GROUP_ADMIN", "/help bau admin",
Message.send("HELP_BAU_GROUP_PLAYER", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_GROUP_PLAYER_HOVER", p), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help bau player")); "HELP_BAU_GROUP_WORLD", "/help bau world",
Message.send("HELP_BAU_GROUP_WE", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_GROUP_WE_HOVER", p), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help bau we")); "HELP_BAU_GROUP_PLAYER", "/help bau player",
Message.send("HELP_BAU_GROUP_OTHER", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_GROUP_OTHER_HOVER", p), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help bau other")); "HELP_BAU_GROUP_WE", "/help bau we",
"HELP_BAU_GROUP_OTHER", "/help bau other");
} }
static void sendBauHelp(ProxiedPlayer p) { static void sendBauHelp(ChatSender sender) {
Message.send("HELP_BAU_TP", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_TP_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau tp ")); printPage(sender, ClickEvent.Action.SUGGEST_COMMAND,
Message.send("HELP_BAU_ADDMEMBER", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_ADDMEMBER_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau addmember ")); "HELP_BAU_TP", "/bau tp ",
Message.send("HELP_BAU_DELMEMBER", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_DELMEMBER_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau delmember ")); "HELP_BAU_ADDMEMBER", "/bau addmember ",
Message.send("HELP_BAU_TOGGLEWE", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_TOGGLEWE_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau togglewe ")); "HELP_BAU_DELMEMBER", "/bau delmember ",
Message.send("HELP_BAU_TOGGLEWORLD", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_TOGGLEWORLD_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau toggleworld ")); "HELP_BAU_TOGGLEWE", "/bau togglewe ",
Message.send("HELP_BAU_DELETE", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_DELETE_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau delete ")); "HELP_BAU_TOGGLEWORLD", "/bau toggleworld ",
Message.send("HELP_BAU_TESTARENA", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_TESTARENA_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau testarena ")); "HELP_BAU_DELETE", "/bau delete ",
"HELP_BAU_TESTARENA", "/bau testarena ");
} }
static void sendBauHelpWorld(ProxiedPlayer p) { private static void printPage(ChatSender sender, ClickEvent.Action action, String... args) {
Message.send("HELP_BAU_GROUP_WORLD_TITLE", p); for(int i = 0; i < args.length; i += 2) {
Message.sendPrefixless("HELP_TNT", p); String message = args[i];
Message.sendPrefixless("HELP_FIRE", p); String hoverMessage = message + "_HOVER";
Message.sendPrefixless("HELP_FREEZE", p); String command = args[i+1];
Message.sendPrefixless("HELP_TPSLIMIT", p);
Message.sendPrefixless("HELP_PROTECT", p); sender.system(message, new Message(hoverMessage), new ClickEvent(action, command));
Message.sendPrefixless("HELP_RESET", p); }
} }
static void sendBauHelpPlayer(ProxiedPlayer p) { private static void printPage(ChatSender sender, String title, String... messages) {
Message.sendPrefixless("HELP_BAU_GROUP_PLAYER_TITLE", p); sender.system(title);
Message.sendPrefixless("HELP_SPEED", p); for (String message : messages) {
Message.sendPrefixless("HELP_NV", p); sender.prefixless(message);
Message.sendPrefixless("HELP_WV", p); }
Message.sendPrefixless("HELP_DEBUGSTICK", p);
Message.sendPrefixless("HELP_TRACE", p);
Message.sendPrefixless("HELP_LOADER", p);
} }
static void sendBauHelpAdmin(ProxiedPlayer p) {
Message.send("HELP_BAU_GROUP_ADMIN_TITLE", p);
sendBauHelp(p);
}
static void sendBauHelpWorldEdit(ProxiedPlayer p) {
Message.sendPrefixless("HELP_BAU_GROUP_WE_TITLE", p);
Message.sendPrefixless("HELP_WE_POS1", p);
Message.sendPrefixless("HELP_WE_POS2", p);
Message.sendPrefixless("HELP_WE_COPY", p);
Message.sendPrefixless("HELP_WE_PASTE", p);
Message.sendPrefixless("HELP_WE_FLOPY", p);
Message.sendPrefixless("HELP_WE_FLOPYP", p);
Message.sendPrefixless("HELP_WE_ROTATE_90", p);
Message.sendPrefixless("HELP_WE_ROTATE_180", p);
Message.sendPrefixless("HELP_WE_ROTATE_N90", p);
}
static void sendBauHelpOther(ProxiedPlayer p) {
Message.sendPrefixless("HELP_BAU_GROUP_OTHER_TITLE", p);
Message.sendPrefixless("HELP_TESTBLOCK", p);
Message.sendPrefixless("HELP_SKULL", p);
Message.sendPrefixless("HELP_BAUINFO", p);
}
} }

Datei anzeigen

@ -0,0 +1,39 @@
/*
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.bungeecore.commands;
import de.steamwar.bungeecore.listeners.ChatListener;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer;
public class LocalCommand extends BasicCommand {
public LocalCommand() {
super("local", null, "bc", "bauchat");
}
@Override
public void execute(CommandSender sender, String[] args) {
if(!(sender instanceof ProxiedPlayer))
return;
ChatListener.localChat((ProxiedPlayer) sender, String.join(" ", args));
}
}

Datei anzeigen

@ -19,16 +19,16 @@
package de.steamwar.bungeecore.commands; package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.BungeeCore; import de.steamwar.bungeecore.listeners.ChatListener;
import de.steamwar.bungeecore.Message;
import de.steamwar.bungeecore.sql.IgnoreSystem; import de.steamwar.bungeecore.sql.IgnoreSystem;
import de.steamwar.bungeecore.sql.Punishment; import de.steamwar.messages.ChatSender;
import de.steamwar.bungeecore.sql.SteamwarUser;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Stream;
import static de.steamwar.bungeecore.Storage.lastChats; import static de.steamwar.bungeecore.Storage.lastChats;
@ -40,45 +40,32 @@ public class MsgCommand extends BasicCommand {
@Override @Override
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender sender, String[] args) {
if(sender instanceof ProxiedPlayer){ if(!(sender instanceof ProxiedPlayer))
ProxiedPlayer player = (ProxiedPlayer) sender; return;
if (args.length < 2) { if (args.length < 2) {
Message.send("MSG_USAGE", player); ChatSender.of(sender).system("MSG_USAGE");
return; return;
}
SteamwarUser user = SteamwarUser.get(player);
if (user.isPunishedWithMessage(player, Punishment.PunishmentType.Mute)) {
return;
}
ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]);
if(target == null){
Message.send("MSG_OFFLINE", player);
return;
}else if (IgnoreSystem.isIgnored(target, player)) {
Message.send("MSG_IGNORED", player);
return;
}else if(target.getChatMode() != ProxiedPlayer.ChatMode.SHOWN){
Message.send("MSG_NOMESSAGE", player);
return;
}else if(target.equals(player)){
Message.send("MSG_SELF", player);
return;
}
StringBuilder msgBuilder = new StringBuilder();
for (int i = 1; i < args.length; i++){
msgBuilder.append(args[i]).append(" ");
}
Message.sendPrefixless("MSG_FORMAT", player, player.getName(), target.getName(), msgBuilder.toString());
Message.sendPrefixless("MSG_FORMAT", target, player.getName(), target.getName(), msgBuilder.toString());
BungeeCore.log(Message.parse("MSG_FORMAT", player, player.getName(), target.getName(), msgBuilder.toString()));
lastChats.put(player, target);
lastChats.put(target, player);
} }
msg((ProxiedPlayer) sender, ProxyServer.getInstance().getPlayer(args[0]), Arrays.copyOfRange(args, 1, args.length));
}
public static void msg(ProxiedPlayer player, ProxiedPlayer target, String[] args) {
ChatSender sender = ChatSender.of(player);
if(target == null || !target.isConnected()) {
sender.system("MSG_OFFLINE");
return;
}
if (IgnoreSystem.isIgnored(target, player)) {
sender.system("MSG_IGNORED");
return;
}
ChatListener.sendChat(sender, Stream.of(sender, ChatSender.of(target)), "CHAT_MSG", String.join(" ", args));
lastChats.put(player, target);
lastChats.put(target, player);
} }
@Override @Override

Datei anzeigen

@ -19,11 +19,7 @@
package de.steamwar.bungeecore.commands; package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.BungeeCore; import de.steamwar.messages.ChatSender;
import de.steamwar.bungeecore.Message;
import de.steamwar.bungeecore.sql.IgnoreSystem;
import de.steamwar.bungeecore.sql.Punishment;
import de.steamwar.bungeecore.sql.SteamwarUser;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
@ -37,43 +33,14 @@ public class RCommand extends BasicCommand {
@Override @Override
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender sender, String[] args) {
if(sender instanceof ProxiedPlayer){ if(!(sender instanceof ProxiedPlayer))
ProxiedPlayer player = (ProxiedPlayer) sender; return;
if(args.length == 0){
Message.send("R_USAGE", player);
return;
}
SteamwarUser user = SteamwarUser.get(player); if(args.length == 0){
if (user.isPunishedWithMessage(player, Punishment.PunishmentType.Mute)) { ChatSender.of(sender).system("R_USAGE");
return; return;
}
ProxiedPlayer target = lastChats.get(player);
if(target == null){
Message.send("R_NOTHING", player);
return;
}else if(!target.isConnected()){
Message.send("R_OFFLINE", player);
lastChats.remove(player);
return;
}else if (IgnoreSystem.isIgnored(target, player)) {
Message.send("R_BLOCKED", player);
return;
}else if(target.getChatMode() != ProxiedPlayer.ChatMode.SHOWN){
Message.send("R_NO_CHAT", player);
return;
}
StringBuilder msgBuilder = new StringBuilder();
for (String arg : args){
msgBuilder.append(arg).append(" ");
}
Message.sendPrefixless("MSG_FORMAT", player, player.getName(), target.getName(), msgBuilder.toString());
Message.sendPrefixless("MSG_FORMAT", target, player.getName(), target.getName(), msgBuilder.toString());
BungeeCore.log(Message.parse("MSG_FORMAT", player, player.getName(), target.getName(), msgBuilder.toString()));
lastChats.put(target, player);
} }
MsgCommand.msg((ProxiedPlayer) sender, lastChats.get(sender), args);
} }
} }

Datei anzeigen

@ -27,6 +27,7 @@ import de.steamwar.bungeecore.sql.Fight;
import de.steamwar.bungeecore.sql.Punishment; import de.steamwar.bungeecore.sql.Punishment;
import de.steamwar.bungeecore.sql.SchematicType; import de.steamwar.bungeecore.sql.SchematicType;
import de.steamwar.bungeecore.sql.SteamwarUser; import de.steamwar.bungeecore.sql.SteamwarUser;
import de.steamwar.messages.ChatSender;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
@ -41,15 +42,14 @@ public class ReplayCommand extends BasicCommand {
} }
@Override @Override
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender s, String[] args) {
if(!(sender instanceof ProxiedPlayer)) if(!(s instanceof ProxiedPlayer))
return; return;
ProxiedPlayer player = (ProxiedPlayer) sender; ProxiedPlayer player = (ProxiedPlayer) s;
SteamwarUser steamwarUser = SteamwarUser.get(player); ChatSender sender = ChatSender.of(player);
if (steamwarUser.isPunishedWithMessage(player, Punishment.PunishmentType.NoFightServer)) { if (sender.user().isPunishedWithMessage(sender, Punishment.PunishmentType.NoFightServer))
return; return;
}
new SWStreamInv<>(player, Message.parse("REPLAY_TITLE", player), (click, fight) -> { new SWStreamInv<>(player, Message.parse("REPLAY_TITLE", player), (click, fight) -> {
SteamwarUser user = SteamwarUser.get(player.getUniqueId()); SteamwarUser user = SteamwarUser.get(player.getUniqueId());
@ -59,24 +59,24 @@ public class ReplayCommand extends BasicCommand {
if (user.getUserGroup().isAdminGroup() && click.isShiftClick() && fight.replayExists()) { if (user.getUserGroup().isAdminGroup() && click.isShiftClick() && fight.replayExists()) {
starter.test(mode, mode.getRandomMap(), player).start(); starter.test(mode, mode.getRandomMap(), player).start();
} else if(!fight.replayAllowed()) { } else if(!fight.replayAllowed()) {
Message.send("REPLAY_UNAVAILABLE", player); sender.system("REPLAY_UNAVAILABLE");
} else { } else {
starter.arena(mode, mode.getRandomMap()).start(); starter.arena(mode, mode.getRandomMap()).start();
} }
}, page -> Fight.getPage(page, 45).stream().map(fight -> new SWListInv.SWListEntry<>(getFightItem(player, fight), fight)).collect(Collectors.toList())).open(); }, page -> Fight.getPage(page, 45).stream().map(fight -> new SWListInv.SWListEntry<>(getFightItem(sender, fight), fight)).collect(Collectors.toList())).open();
} }
private SWItem getFightItem(ProxiedPlayer player, Fight fight) { private SWItem getFightItem(ChatSender sender, Fight fight) {
SchematicType type = fight.getSchemType(); SchematicType type = fight.getSchemType();
SWItem item = new SWItem(type != null ? type.getMaterial() : "BARRIER", parseLeader(player, fight.getBlueLeader(), fight.getBluePlayers().size(), fight.getWin() == 1)); SWItem item = new SWItem(type != null ? type.getMaterial() : "BARRIER", parseLeader(sender, fight.getBlueLeader(), fight.getBluePlayers().size(), fight.getWin() == 1));
List<String> lore = new ArrayList<>(); List<String> lore = new ArrayList<>();
lore.add(parseLeader(player, fight.getRedLeader(), fight.getRedPlayers().size(), fight.getWin() == 2)); lore.add(parseLeader(sender, fight.getRedLeader(), fight.getRedPlayers().size(), fight.getWin() == 2));
lore.add(Message.parse("REPLAY_TIME", player, fight.getStartTime())); lore.add(sender.parseToLegacy("REPLAY_TIME", fight.getStartTime()));
lore.add(""); lore.add("");
lore.add(Message.parse("REPLAY_SERVER", player, fight.getServer())); lore.add(sender.parseToLegacy("REPLAY_SERVER", fight.getServer()));
if(!fight.replayAllowed()) if(!fight.replayAllowed())
lore.add(Message.parse("REPLAY_UNAVAILABLE", player)); lore.add(sender.parseToLegacy("REPLAY_UNAVAILABLE"));
item.setLore(lore); item.setLore(lore);
if(fight.replayAllowed()) if(fight.replayAllowed())
@ -85,7 +85,7 @@ public class ReplayCommand extends BasicCommand {
return item; return item;
} }
private String parseLeader(ProxiedPlayer player, SteamwarUser leader, int players, boolean winner) { private String parseLeader(ChatSender sender, SteamwarUser leader, int players, boolean winner) {
return Message.parse(winner ? (players > 1 ? "REPLAY_WINNER" : "REPLAY_SOLO_WINNER") : (players > 1 ? "REPLAY_LOSER" : "REPLAY_SOLO_LOSER"), player, leader.getUserName(), players - 1); return sender.parseToLegacy(winner ? (players > 1 ? "REPLAY_WINNER" : "REPLAY_SOLO_WINNER") : (players > 1 ? "REPLAY_LOSER" : "REPLAY_SOLO_LOSER"), leader.getUserName(), players - 1);
} }
} }

Datei anzeigen

@ -19,17 +19,9 @@
package de.steamwar.bungeecore.commands; package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.BungeeCore;
import de.steamwar.bungeecore.Message;
import de.steamwar.bungeecore.bot.SteamwarDiscordBot;
import de.steamwar.bungeecore.listeners.ChatListener; import de.steamwar.bungeecore.listeners.ChatListener;
import de.steamwar.bungeecore.sql.SteamwarUser; import de.steamwar.messages.ChatSender;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.util.logging.Level;
public class ServerTeamchatCommand extends BasicCommand { public class ServerTeamchatCommand extends BasicCommand {
@ -38,48 +30,13 @@ public class ServerTeamchatCommand extends BasicCommand {
} }
@Override @Override
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender s, String[] args) {
if(sender instanceof ProxiedPlayer){ ChatSender sender = ChatSender.of(s);
ProxiedPlayer player = (ProxiedPlayer) sender; if(args.length == 0) {
sender.system("STC_USAGE");
if(args.length == 0){ return;
Message.sendPrefixless("STC_USAGE", player);
return;
}
StringBuilder msgBuilder = new StringBuilder();
for (String arg : args){
msgBuilder.append(arg).append(" ");
}
String msg = msgBuilder.toString();
msg = ChatColor.translateAlternateColorCodes('&', msg);
if (SteamwarDiscordBot.instance() != null) {
try {
SteamwarDiscordBot.instance().getServerTeamChatListener().send("<t:" + (System.currentTimeMillis() / 1000) + "> " + (player.getName() + "» " + msg).replaceAll("§[a-f0-9r]", ""));
} catch (Exception e) {
BungeeCore.get().getLogger().log(Level.SEVERE, "Could not send stc message to discord", e);
}
}
sendToTeam(msg, player);
} }
}
public static void sendToTeam(String message, SteamwarUser sender){ ChatListener.sendChat(sender, ChatSender.serverteamReceivers(), "CHAT_SERVERTEAM", String.join(" ", args));
for (ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){
if ((target.hasPermission("bungeecore.teamchat"))
&& target.getChatMode() == ProxiedPlayer.ChatMode.SHOWN){
Message.sendPrefixless("STC_FORMAT", target, sender.getUserName(), ChatListener.parseAtMessage(message, "§r", target));
}
}
}
public static void sendToTeam(String message, ProxiedPlayer sender){
for (ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){
if ((target.hasPermission("bungeecore.teamchat"))
&& target.getChatMode() == ProxiedPlayer.ChatMode.SHOWN){
Message.sendPrefixless("STC_FORMAT", target, sender.getName(), ChatListener.parseAtMessage(message, "§r", target));
}
}
} }
} }

Datei anzeigen

@ -19,13 +19,10 @@
package de.steamwar.bungeecore.commands; package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.Message;
import de.steamwar.bungeecore.listeners.ChatListener; import de.steamwar.bungeecore.listeners.ChatListener;
import de.steamwar.bungeecore.sql.SteamwarUser; import de.steamwar.bungeecore.sql.SteamwarUser;
import net.md_5.bungee.api.ChatColor; import de.steamwar.messages.ChatSender;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer;
public class TeamchatCommand extends BasicCommand { public class TeamchatCommand extends BasicCommand {
@ -34,35 +31,19 @@ public class TeamchatCommand extends BasicCommand {
} }
@Override @Override
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender s, String[] args) {
if(sender instanceof ProxiedPlayer){ ChatSender sender = ChatSender.of(s);
ProxiedPlayer player = (ProxiedPlayer) sender; if(args.length == 0){
SteamwarUser user = SteamwarUser.get(player.getUniqueId()); sender.system("TC_USAGE");
return;
if(user.getTeam() == 0){
Message.send("TC_NO_TEAM", player);
return;
}
if(args.length == 0){
Message.send("TC_USAGE", player);
return;
}
StringBuilder msgBuilder = new StringBuilder();
for (String arg : args){
msgBuilder.append(arg).append(" ");
}
String msg = msgBuilder.toString();
msg = ChatColor.translateAlternateColorCodes('&', msg);
for (ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){
SteamwarUser targetuser = SteamwarUser.get(target.getUniqueId());
if (targetuser.getTeam() == user.getTeam()
&& target.getChatMode() == ProxiedPlayer.ChatMode.SHOWN){
Message.sendPrefixless("TC_FORMAT", target, player.getName(), ChatListener.parseAtMessage(msg, "§f", target));
}
}
} }
SteamwarUser user = sender.user();
if(user.getTeam() == 0){
sender.system("TC_NO_TEAM");
return;
}
ChatListener.sendChat(sender, ChatSender.allReceivers().filter(player -> player.user().getTeam() == user.getTeam()), "CHAT_TEAM", String.join(" ", args));
} }
} }

Datei anzeigen

@ -20,64 +20,100 @@
package de.steamwar.bungeecore.commands; package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.*; import de.steamwar.bungeecore.*;
import de.steamwar.bungeecore.sql.*; import de.steamwar.bungeecore.sql.BauweltMember;
import de.steamwar.bungeecore.sql.Event;
import de.steamwar.bungeecore.sql.Punishment;
import de.steamwar.bungeecore.sql.Team;
import de.steamwar.messages.ChatSender;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.ChatEvent;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
public class TpCommand extends BasicCommand { public class TpCommand extends BasicCommand {
public static void onTp(ChatEvent e, String[] command){
if(!(e.getSender() instanceof ProxiedPlayer))
return;
if(onTp((ProxiedPlayer) e.getSender(), Arrays.copyOfRange(command, 1, command.length)))
e.setCancelled(true);
}
public TpCommand(){ public TpCommand(){
super("join", null); super("join", null, "tp", "teleport");
} }
@Override @Override
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender s, String[] args) {
if(!(sender instanceof ProxiedPlayer)) if(!(s instanceof ProxiedPlayer))
return; return;
ProxiedPlayer player = (ProxiedPlayer) s;
if(!onTp((ProxiedPlayer) sender, args)) ChatSender sender = ChatSender.of(player);
Message.send("TP_NOT_FOUND", sender); if(args.length == 0){
if(Event.get() == null)
sender.system("TP_USAGE");
else
sender.system("TP_USAGE_EVENT");
return;
}
ServerInfo server = getTarget(player, args[0]);
//Give control of teleport command to server
if(server == null) {
player.chat("/teleport " + String.join(" ", args));
return;
}
teleport(player, server);
} }
@Override @Override
public Iterable<String> onTabComplete(CommandSender commandSender, String[] args) { public Iterable<String> onTabComplete(CommandSender commandSender, String[] args) {
if(args.length == 1){ if(args.length > 0)
return allPlayers(args[0]); return allPlayers(args[args.length - 1]);
}
return new ArrayList<>(); return new ArrayList<>();
} }
private static boolean onTp(ProxiedPlayer player, String[] args){ public static void teleport(ProxiedPlayer player, ServerInfo server){
if(args.length == 0){ ChatSender sender = ChatSender.of(player);
if(Event.get() == null) if(CheckCommand.isChecking(player)){
Message.send("TP_USAGE", player); sender.system("CHECK_CHECKING");
else return;
Message.send("TP_USAGE_EVENT", player);
return true;
}else if(CheckCommand.isChecking(player)){
Message.send("CHECK_CHECKING", player);
return true;
} }
String serverPerm = BungeeCore.serverPermissions.get(server.getName());
Subserver subserver = Subserver.getSubserver(server);
if (subserver instanceof Arenaserver) {
if (!sender.user().isPunishedWithMessage(sender, Punishment.PunishmentType.NoFightServer))
SubserverSystem.sendPlayer(subserver, player);
} else if(subserver instanceof Bauserver) {
Bauserver bauserver = (Bauserver) subserver;
if (bauserver.getOwner().equals(player.getUniqueId()) || BauweltMember.getBauMember(bauserver.getOwner(), player.getUniqueId()) != null) {
SubserverSystem.sendPlayer(subserver, player);
} else {
SubserverSystem.sendDeniedMessage(player, bauserver.getOwner());
sender.system("JOIN_PLAYER_BLOCK");
}
} else if (serverPerm != null && !player.hasPermission(serverPerm)) {
sender.system("JOIN_PLAYER_BLOCK");
} else if (serverPerm == null && !player.getGroups().contains("team")) {
sender.system("JOIN_PLAYER_BLOCK");
} else {
player.connect(server);
}
}
private static ServerInfo getTarget(ProxiedPlayer player, String arg) {
ServerInfo server = null;
//Get target player server //Get target player server
ServerInfo server = getTargetPlayer(args[0]); ProxiedPlayer target = ProxyServer.getInstance().getPlayer(arg);
if(target != null)
server = target.getServer().getInfo();
//Get target team event arena //Get target team event arena
if(server == null){ if(server == null){
Team team = Team.get(args[0]); Team team = Team.get(arg);
if(team != null){ if(team != null){
Subserver eventArena = EventStarter.getEventServer().get(team.getTeamId()); Subserver eventArena = EventStarter.getEventServer().get(team.getTeamId());
if(eventArena != null && Subserver.getServerList().contains(eventArena)) if(eventArena != null && Subserver.getServerList().contains(eventArena))
@ -85,63 +121,9 @@ public class TpCommand extends BasicCommand {
} }
} }
//Give control of teleport command to server if(server == player.getServer().getInfo())
if(server == null || server == player.getServer().getInfo()) server = null;
return false;
// Check if player is allowed to join fights return server;
Subserver subserver = Subserver.getSubserver(server);
if (subserver != null && subserver.getType() == Servertype.ARENA) {
SteamwarUser steamwarUser = SteamwarUser.get(player);
if (steamwarUser.isPunishedWithMessage(player, Punishment.PunishmentType.NoFightServer)) {
return true;
}
}
teleport(player, server);
return true;
}
private static ServerInfo getTargetPlayer(String playerName){
SteamwarUser user = SteamwarUser.get(playerName);
if(user == null)
return null;
ProxiedPlayer target = ProxyServer.getInstance().getPlayer(user.getUuid());
if(target == null)
return null;
Subserver subserver = Subserver.getSubserver(target);
if(subserver != null)
return subserver.getServer();
return target.getServer().getInfo();
}
private static void teleport(ProxiedPlayer player, ServerInfo server){
String serverPerm = BungeeCore.serverPermissions.get(server.getName());
Subserver subserver = Subserver.getSubserver(server);
if(subserver != null) {
Servertype type = subserver.getType();
if (type == Servertype.ARENA) {
SubserverSystem.sendPlayer(subserver, player);
} else if (type == Servertype.BAUSERVER) {
Bauserver bauserver = (Bauserver) subserver;
if (bauserver.getOwner().equals(player.getUniqueId()) ||
BauweltMember.getBauMember(bauserver.getOwner(), player.getUniqueId()) != null) {
SubserverSystem.sendPlayer(subserver, player);
} else {
SubserverSystem.sendDeniedMessage(player, bauserver.getOwner());
Message.send("JOIN_PLAYER_BLOCK", player);
}
}
}else if(serverPerm != null && !player.hasPermission(serverPerm)){
Message.send("JOIN_PLAYER_BLOCK", player);
}else if(serverPerm == null && !player.getGroups().contains("team")) {
Message.send("JOIN_PLAYER_BLOCK", player);
}else{
player.connect(server);
}
} }
} }

Datei anzeigen

@ -24,6 +24,7 @@ import de.steamwar.bungeecore.Message;
import de.steamwar.bungeecore.sql.BannedUserIPs; import de.steamwar.bungeecore.sql.BannedUserIPs;
import de.steamwar.bungeecore.sql.Punishment; import de.steamwar.bungeecore.sql.Punishment;
import de.steamwar.bungeecore.sql.SteamwarUser; import de.steamwar.bungeecore.sql.SteamwarUser;
import de.steamwar.messages.ChatSender;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.ComponentBuilder;
@ -47,7 +48,7 @@ public class BanListener extends BasicListener {
if (user.isPunished(Punishment.PunishmentType.Ban)) { if (user.isPunished(Punishment.PunishmentType.Ban)) {
user.updateBanIP(event.getConnection().getAddress().getAddress().getHostAddress()); user.updateBanIP(event.getConnection().getAddress().getAddress().getHostAddress());
event.setCancelled(true); event.setCancelled(true);
event.setCancelReason(user.punishmentMessage(Punishment.PunishmentType.Ban, ProxyServer.getInstance().getPlayer(event.getConnection().getUniqueId()))); ChatSender.of(event).system(user.punishmentMessage(Punishment.PunishmentType.Ban));
return; return;
} }

Datei anzeigen

@ -1,7 +1,7 @@
/* /*
This file is a part of the SteamWar software. This file is a part of the SteamWar software.
Copyright (C) 2020 SteamWar.de-Serverteam Copyright (C) 2022 SteamWar.de-Serverteam
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU Affero General Public License as published by
@ -21,11 +21,10 @@ package de.steamwar.bungeecore.listeners;
import de.steamwar.bungeecore.*; import de.steamwar.bungeecore.*;
import de.steamwar.bungeecore.bot.SteamwarDiscordBot; import de.steamwar.bungeecore.bot.SteamwarDiscordBot;
import de.steamwar.bungeecore.commands.TpCommand;
import de.steamwar.bungeecore.comms.packets.PingPacket; import de.steamwar.bungeecore.comms.packets.PingPacket;
import de.steamwar.bungeecore.sql.*; import de.steamwar.bungeecore.sql.*;
import de.steamwar.messages.ChatSender;
import net.md_5.bungee.api.*; import net.md_5.bungee.api.*;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.ChatEvent; import net.md_5.bungee.api.event.ChatEvent;
import net.md_5.bungee.api.event.TabCompleteEvent; import net.md_5.bungee.api.event.TabCompleteEvent;
@ -33,242 +32,181 @@ import net.md_5.bungee.api.event.TabCompleteResponseEvent;
import net.md_5.bungee.api.scheduler.TaskScheduler; import net.md_5.bungee.api.scheduler.TaskScheduler;
import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventHandler;
import java.sql.Timestamp; import java.util.*;
import java.time.Instant;
import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.logging.Level; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ChatListener extends BasicListener { public class ChatListener extends BasicListener {
private static final Title LIXFEL = ProxyServer.getInstance().createTitle().fadeIn(5).fadeOut(20).stay(30).title(TextComponent.fromLegacyText("§4§lLIXFEL")); private static final Set<Integer> coloredTeams = new HashSet<>();
private static final Title YOYONOW = ProxyServer.getInstance().createTitle().fadeIn(5).fadeOut(20).stay(30).title(TextComponent.fromLegacyText("§4§lYOYONOW")); static {
coloredTeams.add(12);
coloredTeams.add(54);
coloredTeams.add(285);
}
@EventHandler @EventHandler
public void onChatEvent(ChatEvent e){ public void onChatEvent(ChatEvent e) {
if(e.getMessage().contains("jndi:ldap")) { if(!(e.getSender() instanceof ProxiedPlayer))
return;
ProxiedPlayer player = (ProxiedPlayer) e.getSender();
String message = e.getMessage();
if (message.contains("jndi:ldap")) {
e.setCancelled(true); e.setCancelled(true);
SteamwarUser.get(((ProxiedPlayer) e.getSender()).getUniqueId()).punishPerma(Punishment.PunishmentType.Ban, "Versuchte Exploit-Ausnutzung", 0); SteamwarUser.get(player).punishPerma(Punishment.PunishmentType.Ban, "Versuchte Exploit-Ausnutzung", 0);
return; return;
} }
sanitize7(e); message = sanitize7(message);
if(e.getMessage().startsWith("/"))
onCommand(e);
else if(e.getMessage().startsWith("+"))
onPlusMessage(e);
else
onChat(e);
}
/* if (message.startsWith("/")) {
* Replaces 7(7)command to /(/)command. if(filteredCommand((CommandSender) e.getSender(), message))
* */ e.setCancelled(true);
private void sanitize7(ChatEvent e){
String begin = e.getMessage().split(" ", 2)[0];
if(begin.startsWith("7") && begin.substring(1).matches("[A-Za-z]+")){
e.setMessage("/" + e.getMessage().substring(1));
}else if(begin.startsWith("77") && begin.substring(2).matches("[A-Za-z]+")){
e.setMessage("//" + e.getMessage().substring(2));
}else if(begin.startsWith("7/") && begin.substring(2).matches("[A-Za-z]+")){
e.setMessage("//" + e.getMessage().substring(2));
}else if(begin.startsWith("/7") && begin.substring(2).matches("[A-Za-z]+")){
e.setMessage("//" + e.getMessage().substring(2));
}
}
private void onCommand(ChatEvent e){
String [] command = e.getMessage().split(" ");
if(command[0].contains(":")){
if(e.getSender() instanceof ProxiedPlayer)
Message.send("UNKNOWN_COMMAND", (CommandSender) e.getSender());
e.setCancelled(true);
return;
}
switch(command[0].toLowerCase()){
case "/bc":
case "/bauchat":
case "/local":
localChat(e, command);
break;
case "/tp":
TpCommand.onTp(e, command);
break;
default:
//do nothing, let the normal command handlers proceed
}
}
private void lixfelAlert(ProxiedPlayer sender) {
LIXFEL.send(sender);
Message.send("CHAT_LIXFEL_ACTION_BAR", sender, ChatMessageType.ACTION_BAR);
TaskScheduler scheduler = ProxyServer.getInstance().getScheduler();
scheduler.schedule(BungeeCore.get(), () -> Message.sendPrefixless("MSG_FORMAT", sender, "Lixfel", sender.getDisplayName(), Message.parse("CHAT_LIXFEL_1", sender)), 3, TimeUnit.SECONDS);
scheduler.schedule(BungeeCore.get(), () -> Message.sendPrefixless("MSG_FORMAT", sender, "Lixfel", sender.getDisplayName(), Message.parse("CHAT_LIXFEL_2", sender)), 6, TimeUnit.SECONDS);
scheduler.schedule(BungeeCore.get(), () -> Message.sendPrefixless("MSG_FORMAT", sender, "Lixfel", sender.getDisplayName(), Message.parse("CHAT_LIXFEL_3", sender)), 11, TimeUnit.SECONDS);
scheduler.schedule(BungeeCore.get(), () -> Message.sendPrefixless("MSG_FORMAT", sender, "Lixfel", sender.getDisplayName(), Message.parse("CHAT_LIXFEL_4", sender)), 12, TimeUnit.SECONDS);
scheduler.schedule(BungeeCore.get(), () -> Message.sendPrefixless("MSG_FORMAT", sender, "Lixfel", sender.getDisplayName(), Message.parse("CHAT_LIXFEL_5", sender)), 15, TimeUnit.SECONDS);
}
private void yoyonowAlert(ProxiedPlayer sender) {
YOYONOW.send(sender);
Message.send("CHAT_LIXFEL_ACTION_BAR", sender, ChatMessageType.ACTION_BAR);
TaskScheduler scheduler = ProxyServer.getInstance().getScheduler();
scheduler.schedule(BungeeCore.get(), () -> Message.sendPrefixless("MSG_FORMAT", sender, "YoyoNow", sender.getDisplayName(), Message.parse("CHAT_YOYONOW_1", sender)), 3, TimeUnit.SECONDS);
scheduler.schedule(BungeeCore.get(), () -> Message.sendPrefixless("MSG_FORMAT", sender, "YoyoNow", sender.getDisplayName(), Message.parse("CHAT_YOYONOW_2", sender)), 6, TimeUnit.SECONDS);
scheduler.schedule(BungeeCore.get(), () -> Message.sendPrefixless("MSG_FORMAT", sender, "YoyoNow", sender.getDisplayName(), Message.parse("CHAT_YOYONOW_3", sender)), 11, TimeUnit.SECONDS);
scheduler.schedule(BungeeCore.get(), () -> Message.sendPrefixless("MSG_FORMAT", sender, "YoyoNow", sender.getDisplayName(), Message.parse("CHAT_YOYONOW_4", sender)), 12, TimeUnit.SECONDS);
}
private void onPlusMessage(ChatEvent e) {
ProxiedPlayer p = (ProxiedPlayer) e.getSender();
Subserver subserver = Subserver.getSubserver(p);
if(subserver instanceof Bauserver) {
String[] smolArgs = e.getMessage().substring(1).split(" ");
String[] args = new String[smolArgs.length + 1];
args[0] = "";
System.arraycopy(smolArgs, 0, args, 1, smolArgs.length);
localChat(e, args);
} else { } else {
onChat(e);
}
}
private void onChat(ChatEvent e){
if(e.getSender() instanceof ProxiedPlayer){
ProxiedPlayer sender = (ProxiedPlayer) e.getSender();
if (e.getMessage().contains("LIXFEL"))
lixfelAlert(sender);
if (e.getMessage().contains("YOYONOW"))
yoyonowAlert(sender);
if(sender.getChatMode() != ProxiedPlayer.ChatMode.SHOWN){
Message.send("CHAT_RECEIVE", sender);
e.setCancelled(true);
return;
}
SteamwarUser user = SteamwarUser.get(sender);
if (user.isPunishedWithMessage(sender, Punishment.PunishmentType.Mute)) {
e.setCancelled(true);
return;
}
if(!sender.hasPermission(ConnectionListener.TEAM_GROUP) && (e.getMessage().contains("http:") || e.getMessage().contains("https:") || e.getMessage().contains("www."))){
Message.send("CHAT_NO_LINKS", sender);
e.setCancelled(true);
return;
}
Subserver subserver = Subserver.getSubserver(sender);
if(subserver != null && subserver.getType() == Servertype.ARENA && subserver.getServer() == sender.getServer().getInfo())
return;
e.setCancelled(true); e.setCancelled(true);
ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.get(), () -> publicChat(user, sender, e.getMessage()));
}
}
public static void discordChat(SteamwarUser user, String message){ Subserver subserver = Subserver.getSubserver(player);
String name = "§r" + user.getUserName() + "§r"; if(subserver instanceof Arenaserver && subserver.getServer() == player.getServer().getInfo()) {
if (user.getUserGroup() != UserGroup.Member) { localChat(player, message);
name = user.getUserGroup().getColorCode() + user.getUserGroup().getChatPrefix() + " " + user.getUserName() + "§r"; } else if (message.startsWith("+")) {
} localChat(player, message.substring(1));
String chatcolor = user.getUserGroup().getChatColorCode(); } else {
sendChat(ChatSender.of(player), ChatSender.globalReceivers(), "CHAT_GLOBAL", message);
if(user.getUserGroup() != UserGroup.Member || user.getTeam() == 12 || user.getTeam() == 285 || user.getTeam() == 54)
message = ChatColor.translateAlternateColorCodes('&', message);
String msg = name + "§7»" + chatcolor + " " + message;
if(user.getTeam() != 0){
Team team = Team.get(user.getTeam());
msg = "§" + team.getTeamColor() + team.getTeamKuerzel() + " §r" + msg;
}
msg = "§7Discord §r" + msg;
for(ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){
Subserver targetServer = Subserver.getSubserver(target);
if(!(targetServer == null || targetServer.getType() != Servertype.ARENA || targetServer.getServer() != target.getServer().getInfo())) continue;
BungeeCore.send(target, ChatMessageType.CHAT, parseAtMessage(msg, chatcolor, target));
}
}
private void publicChat(SteamwarUser user, ProxiedPlayer sender, String message) {
String name = UserElo.getEmblem(user) + sender.getDisplayName();
String chatcolor = user.getUserGroup().getChatColorCode();
if(user.getUserGroup() != UserGroup.Member || user.getTeam() == 12 || user.getTeam() == 285 || user.getTeam() == 54)
message = ChatColor.translateAlternateColorCodes('&', message);
String msg = name + "§7»" + chatcolor + " " + message;
if(user.getTeam() != 0){
Team team = Team.get(user.getTeam());
msg = "§" + team.getTeamColor() + team.getTeamKuerzel() + " §r" + msg;
}
if (SteamwarDiscordBot.instance() != null) {
try {
SteamwarDiscordBot.instance().getIngameChatListener().send("<t:" + (System.currentTimeMillis() / 1000) + "> " + msg.replaceAll("§[a-f0-9r]", ""));
} catch (Exception e) {
BungeeCore.get().getLogger().log(Level.SEVERE, "Could not send chat message to discord", e);
} }
} }
for(ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){
Subserver targetServer = Subserver.getSubserver(target);
if(!(targetServer == null || targetServer.getType() != Servertype.ARENA || targetServer.getServer() != target.getServer().getInfo())) continue;
BungeeCore.send(target, ChatMessageType.CHAT, parseAtMessage(msg, chatcolor, target));
}
BungeeCore.log(sender.getServer().getInfo(), msg);
} }
private void localChat(ChatEvent e, String [] command){ public static void sendChat(ChatSender sender, Stream<ChatSender> receivers, String format, String message) {
ProxiedPlayer sender = (ProxiedPlayer) e.getSender(); String finalMessage = modifyFilter(sender, message);
BungeeCore.log(sender, e.getMessage()); if(finalMessage == null)
if(command.length == 1){ return;
Message.send("CHAT_BC_USAGE", sender, command[0].substring(1));
e.setCancelled(true); SteamwarUser user = sender.user();
AtomicBoolean noReceiver = new AtomicBoolean(true);
receivers.filter(ChatSender::chatShown).forEach(player -> {
if(sender.user().getId() != player.user().getId())
noReceiver.set(false);
chatToReciever(player, user, format, finalMessage);
});
chatToReciever(ChatSender.console(), user, format, finalMessage);
if(format.equals("CHAT_GLOBAL")) {
if (SteamwarDiscordBot.instance() != null)
chatToReciever(ChatSender.discordChannel(SteamwarDiscordBot.instance().getIngameChatListener()), user, format, finalMessage);
} else if (format.equals("CHAT_SERVERTEAM")) {
if (SteamwarDiscordBot.instance() != null)
chatToReciever(ChatSender.discordChannel(SteamwarDiscordBot.instance().getServerTeamChatListener()), user, format, finalMessage);
} else if (noReceiver.get()) {
sender.system("CHAT_NO_RECEIVER");
}
}
public static void localChat(ProxiedPlayer player, String message) {
ChatSender sender = ChatSender.of(player);
if(message.length() == 0){
sender.system("CHAT_BC_USAGE");
return; return;
} }
SteamwarUser user = SteamwarUser.get(sender); message = sanitize7(message);
if (user.isPunishedWithMessage(sender, Punishment.PunishmentType.Mute)) {
e.setCancelled(true); if(ChatListener.filteredCommand(player, message))
return; return;
if(!message.startsWith("/")) {
message = modifyFilter(sender, message);
if(message == null)
return;
} }
if(command[1].startsWith("/") && command[1].contains(":")){ player.chat(message);
}
private static String modifyFilter(ChatSender sender, String message) {
if(!sender.chatShown()) {
sender.system("CHAT_RECEIVE");
return null;
}
SteamwarUser user = sender.user();
UserGroup group = user.getUserGroup();
if(!group.isTeamGroup() && (message.contains("http:") || message.contains("https:") || message.contains("www."))){
sender.system("CHAT_NO_LINKS");
return null;
}
if (user.isPunishedWithMessage(sender, Punishment.PunishmentType.Mute))
return null;
if(group != UserGroup.Member || coloredTeams.contains(user.getTeam()))
message = ChatColor.translateAlternateColorCodes('&', message);
if (message.contains("LIXFEL"))
specialAlert(sender, "Lixfel", "CHAT_LIXFEL_", 3, 6, 11, 12, 15);
if (message.contains("YOYONOW"))
specialAlert(sender, "YoyoNow", "CHAT_YOYONOW_", 3, 6, 11, 12);
return message;
}
private static void chatToReciever(ChatSender receiver, SteamwarUser sender, String format, String message) {
UserGroup group = sender.getUserGroup();
receiver.chat(new Message(format,
sender,
receiver,
highlightMentions(message, group.getChatColorCode(), receiver),
sender.getTeam() == 0 ? "" : "§" + Team.get(sender.getTeam()).getTeamColor() + Team.get(sender.getTeam()).getTeamKuerzel() + " ",
UserElo.getEmblem(sender),
group.getColorCode(),
group.getChatPrefix() + " ",
group.getChatColorCode()));
}
private static String sanitize7(String message) {
String begin = message.split(" ", 2)[0];
if(begin.startsWith("7") && begin.substring(1).matches("[A-Za-z]+")){
message = "/" + message.substring(1);
}else if((begin.startsWith("77") || begin.startsWith("7/") || begin.startsWith("/7")) && begin.substring(2).matches("[A-Za-z]+")){
message = "//" + message.substring(2);
}
return message;
}
private static boolean filteredCommand(CommandSender sender, String message) {
String command = message.split(" ", 2)[0];
if(command.startsWith("/") && command.contains(":")) {
Message.send("UNKNOWN_COMMAND", sender); Message.send("UNKNOWN_COMMAND", sender);
e.setCancelled(true); return true;
return;
} }
return false;
e.setMessage(e.getMessage().substring(command[0].length() + 1));
} }
public static String parseAtMessage(String message, String returnColor, ProxiedPlayer player) { private static void specialAlert(ChatSender sender, String name, String baseMessage, int... delay) {
if(!message.contains("@")) { sender.system("CHAT_LIXFEL_ACTION_BAR");
return message; TaskScheduler scheduler = ProxyServer.getInstance().getScheduler();
for(int i = 0; i < delay.length; i++) {
int finalI = i;
scheduler.schedule(BungeeCore.get(), () -> sender.prefixless("MSG_FORMAT", name, sender.user(), new Message(baseMessage + (finalI+1))), delay[i], TimeUnit.SECONDS);
} }
}
StringBuilder builder = new StringBuilder(); private static String highlightMentions(String message, String returnColor, ChatSender player) {
for (String curr : message.split(" ")) { if(!message.contains("@"))
if(curr.toLowerCase().startsWith("@" + player.getName().toLowerCase())) { return message;
new PingPacket(SteamwarUser.get(player).getId()).send(player);
builder.append("§e@") String mark = "@" + player.user().getUserName();
.append(player.getName()) return Arrays.stream(message.split(" ")).map(cur -> {
.append(returnColor) if(cur.equalsIgnoreCase(mark)) {
.append(curr.substring(player.getName().length() + 1)) new PingPacket(player.user().getId()).send(player.user().getPlayer());
.append(" "); return "§e" + cur + returnColor;
}else {
builder.append(curr)
.append(" ");
} }
} return cur;
return builder.toString(); }).collect(Collectors.joining(" "));
} }
@EventHandler @EventHandler

Datei anzeigen

@ -24,8 +24,8 @@ import de.steamwar.bungeecore.BungeeCore;
import de.steamwar.bungeecore.Message; import de.steamwar.bungeecore.Message;
import de.steamwar.bungeecore.commands.WebregisterCommand; import de.steamwar.bungeecore.commands.WebregisterCommand;
import de.steamwar.bungeecore.listeners.ConnectionListener; import de.steamwar.bungeecore.listeners.ConnectionListener;
import de.steamwar.messages.ChatSender;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.PendingConnection; import net.md_5.bungee.api.connection.PendingConnection;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
@ -36,7 +36,6 @@ import java.net.UnknownHostException;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -258,6 +257,10 @@ public class SteamwarUser {
return team; return team;
} }
public ProxiedPlayer getPlayer() {
return ProxyServer.getInstance().getPlayer(uuid);
}
public Punishment getPunishment(Punishment.PunishmentType type) { public Punishment getPunishment(Punishment.PunishmentType type) {
return punishments.getOrDefault(type, null); return punishments.getOrDefault(type, null);
} }
@ -289,11 +292,11 @@ public class SteamwarUser {
return true; return true;
} }
public boolean isPunishedWithMessage(ProxiedPlayer player, Punishment.PunishmentType punishment) { public boolean isPunishedWithMessage(ChatSender player, Punishment.PunishmentType punishment) {
if (!isPunished(punishment)) { if (!isPunished(punishment)) {
return false; return false;
} }
player.sendMessage(punishmentMessage(punishment, player)); player.system(punishmentMessage(punishment));
return true; return true;
} }
@ -312,7 +315,7 @@ public class SteamwarUser {
ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid);
if (player != null) { if (player != null) {
updateBanIP(player.getAddress().getAddress().getHostAddress()); updateBanIP(player.getAddress().getAddress().getHostAddress());
player.disconnect(punishmentMessage(punishment, player)); ChatSender.disconnect(player).system(punishmentMessage(punishment));
for (BannedUserIPs banned : BannedUserIPs.get(player.getAddress().getAddress().getHostAddress())) { for (BannedUserIPs banned : BannedUserIPs.get(player.getAddress().getAddress().getHostAddress())) {
SteamwarUser bannedUser = SteamwarUser.get(banned.getUserID()); SteamwarUser bannedUser = SteamwarUser.get(banned.getUserID());
if (isPunished(punishment) && bannedUser.getPunishment(punishment).getEndTime().before(time)) { if (isPunished(punishment) && bannedUser.getPunishment(punishment).getEndTime().before(time)) {
@ -324,12 +327,12 @@ public class SteamwarUser {
} }
} }
public TextComponent punishmentMessage(Punishment.PunishmentType punishment, ProxiedPlayer player) { public Message punishmentMessage(Punishment.PunishmentType punishment) {
Punishment currentPunishment = punishments.get(punishment); Punishment currentPunishment = punishments.get(punishment);
if (currentPunishment.isPerma()) { if (currentPunishment.isPerma()) {
return BungeeCore.stringToText(Message.parsePrefixed(punishment.getPlayerMessagePerma(), player, currentPunishment.getReason())); return new Message(punishment.getPlayerMessagePerma(), currentPunishment.getReason());
} else { } else {
return BungeeCore.stringToText(Message.parsePrefixed(punishment.getPlayerMessageUntil(), player, currentPunishment.getEndTime().toLocalDateTime().format(DateTimeFormatter.ofPattern(Message.parse("TIMEFORMAT", player))), currentPunishment.getReason())); return new Message(punishment.getPlayerMessageUntil(), currentPunishment.getEndTime(), currentPunishment.getReason());
} }
} }

Datei anzeigen

@ -1,6 +1,7 @@
PREFIX=§eSteam§8War» PREFIX=§eSteam§8War»
SPACER= SPACER=
TIMEFORMAT=HH:mm dd.MM.yyyy TIMEFORMAT=dd.MM.yyyy HH:mm
PLAIN_STRING={0}
UNKNOWN_COMMAND=§cUnbekannter Befehl. UNKNOWN_COMMAND=§cUnbekannter Befehl.
UNKNOWN_PLAYER=§cDiesen Spieler gibt es nicht. UNKNOWN_PLAYER=§cDiesen Spieler gibt es nicht.
@ -294,11 +295,8 @@ KICK_NORMAL=§cDu wurdest gekickt.
#MsgCommand #MsgCommand
MSG_USAGE=§8/§7msg §8[§eBenutzer§8] [§eNachricht§8] MSG_USAGE=§8/§7msg §8[§eBenutzer§8] [§eNachricht§8]
MSG_OFFLINE=§cDieser Spieler ist derzeit nicht online! MSG_OFFLINE=§cKein Gesprächspartner verfügbar!
MSG_IGNORED=§cDieser Spieler hat dich geblockt! MSG_IGNORED=§cDieser Spieler hat dich geblockt!
MSG_NOMESSAGE=§cDieser Spieler empfängt derzeit keine Chatnachrichten!
MSG_SELF=§cNachrichten an dich selbst hast du wirklich nicht nötig!
MSG_FORMAT=§e{0}§8»§e{1} §r§7{2}
#PingCommand #PingCommand
PING_RESPONSE=§7Dein Ping beträgt §c{0}§7 ms! PING_RESPONSE=§7Dein Ping beträgt §c{0}§7 ms!
@ -311,10 +309,6 @@ POLL_ANSWER_NEW=§aDeine Antwort wurde registriert.
#RCommand #RCommand
R_USAGE=§8/§7r §8[§eAntwort§8] R_USAGE=§8/§7r §8[§eAntwort§8]
R_NOTHING=§cDu hast bisher mit niemandem geschrieben!
R_OFFLINE=§cDieser Spieler ist derzeit nicht online!
R_BLOCKED=§cDieser Spieler hat dich geblockt!
R_NO_CHAT=§cDieser Spieler empfängt derzeit keine Chatnachrichten!
#RegelnCommand #RegelnCommand
REGELN_RULES=§7§lRegelwerke REGELN_RULES=§7§lRegelwerke
@ -356,12 +350,10 @@ TUTORIAL_OWN_HELP=§8/§7tutorial own §8- §7Liste der eigenen Tutorials
#ServerTeamchatCommand #ServerTeamchatCommand
STC_USAGE=§8/§7stc §8[§eNachricht an das Team§8] STC_USAGE=§8/§7stc §8[§eNachricht an das Team§8]
STC_FORMAT=§8STC §e{0}» §r{1}
#TeamchatCommand #TeamchatCommand
TC_USAGE=§8/§7tc §8[§eNachricht an das Team§8] TC_USAGE=§8/§7tc §8[§eNachricht an das Team§8]
TC_NO_TEAM=§cDu bist in keinem Team. TC_NO_TEAM=§cDu bist in keinem Team.
TC_FORMAT=§8TC §e{0}§8» §r{1}
#TeamCommand #TeamCommand
TEAM_IN_TEAM=§cDu bist bereits in einem Team. TEAM_IN_TEAM=§cDu bist bereits in einem Team.
@ -471,7 +463,6 @@ TEAM_COLOR_TITLE=Farbe wählen
#TpCommand #TpCommand
TP_USAGE=§8/§7tp §8[§eSpieler§8] TP_USAGE=§8/§7tp §8[§eSpieler§8]
TP_USAGE_EVENT=§8/§7tp §8[§eSpieler §7oder §eTeam§8] TP_USAGE_EVENT=§8/§7tp §8[§eSpieler §7oder §eTeam§8]
TP_NOT_FOUND=§cKonnte das angegebene Ziel nicht finden.
#UnignoreCommand #UnignoreCommand
UNIGNORE_USAGE=§8/§7unignore §8[§eSpieler§8] UNIGNORE_USAGE=§8/§7unignore §8[§eSpieler§8]
@ -492,7 +483,7 @@ WEB_EMAIL_SEND=§aEine E-Mail zum Setzen des Passworts wurde gesendet.
CHAT_LIXFEL_ACTION_BAR=§4§lTechnische Probleme? CHAT_LIXFEL_ACTION_BAR=§4§lTechnische Probleme?
CHAT_LIXFEL_1=Du hast mich gerufen! CHAT_LIXFEL_1=Du hast mich gerufen!
CHAT_LIXFEL_2=Leider bin ich nur ein Mensch und höre nicht alles. CHAT_LIXFEL_2=Leider bin ich nur ein Mensch und höre nicht alles.
CHAT_LIXFEL_3=Daher bitte ich dich, das Problem bzw. den Fehler im Forum in der Kategorie §eFehler melden §cmit einer ausreichenden Beschreibung zu hinterlegen. CHAT_LIXFEL_3=Daher bitte ich dich, das Problem bzw. den Fehler im Forum in der Kategorie §eFehler melden §7mit einer ausreichenden Beschreibung zu hinterlegen.
CHAT_LIXFEL_4=Vielen Dank. CHAT_LIXFEL_4=Vielen Dank.
CHAT_LIXFEL_5=Ich wünsche dir noch weiterhin ein reibungsloses Spielerlebnis. CHAT_LIXFEL_5=Ich wünsche dir noch weiterhin ein reibungsloses Spielerlebnis.
CHAT_YOYONOW_1=Du hast mich gerufen! CHAT_YOYONOW_1=Du hast mich gerufen!
@ -501,7 +492,14 @@ CHAT_YOYONOW_3=Vielen Dank.
CHAT_YOYONOW_4=Ich wünsche dir noch weiterhin ein reibungsloses Spielerlebnis. CHAT_YOYONOW_4=Ich wünsche dir noch weiterhin ein reibungsloses Spielerlebnis.
CHAT_RECEIVE=§cUm Chatnachrichten versenden zu können, musst du auch welche empfangen! CHAT_RECEIVE=§cUm Chatnachrichten versenden zu können, musst du auch welche empfangen!
CHAT_NO_LINKS=§cDu darfst keine Links versenden. CHAT_NO_LINKS=§cDu darfst keine Links versenden.
CHAT_BC_USAGE=§8/§e{0} §8[§7Nachricht§8] CHAT_BC_USAGE=§8/§7bc §8[§eNachricht§8]
CHAT_NO_RECEIVER=§cNiemand empfängt deine Nachricht
CHAT_SERVERTEAM=§8STC §e{0}§8» §f{2}
CHAT_GLOBAL={3}{4}{5}{6}{0}§8» {7}{2}
CHAT_DISCORD_GLOBAL=§8Dc {5}{6}{0}§8» {7}{2}
CHAT_TEAM=§8TC §e{0}§8» §f{2}
CHAT_MSG=§e{0}§8»§e{1} §7{2}
#CheckListner #CheckListner
CHECK_UNCHECKED=§7Du hast noch §e{0} §7ungeprüfte Schematic§8(§7s§8)! CHECK_UNCHECKED=§7Du hast noch §e{0} §7ungeprüfte Schematic§8(§7s§8)!

Datei anzeigen

@ -0,0 +1,293 @@
/*
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.messages;
import de.steamwar.bungeecore.Arenaserver;
import de.steamwar.bungeecore.BungeeCore;
import de.steamwar.bungeecore.Message;
import de.steamwar.bungeecore.Subserver;
import de.steamwar.bungeecore.bot.listeners.DiscordChatListener;
import de.steamwar.bungeecore.sql.SteamwarUser;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.chat.hover.content.Text;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.LoginEvent;
import net.md_5.bungee.command.ConsoleCommandSender;
import java.text.DateFormat;
import java.text.MessageFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.function.BiConsumer;
import java.util.logging.Level;
import java.util.stream.Stream;
public interface ChatSender {
static Stream<ProxiedPlayer> all() {
return ProxyServer.getInstance().getPlayers().stream();
}
static Stream<ChatSender> allReceivers() {
return all().map(ChatSender::of);
}
static Stream<ChatSender> globalReceivers() {
return all().filter(player -> {
Subserver subserver = Subserver.getSubserver(player);
return !(subserver instanceof Arenaserver && subserver.getServer() == player.getServer().getInfo());
}).map(ChatSender::of);
}
static Stream<ChatSender> serverteamReceivers() {
return allReceivers().filter(player -> player.user().getUserGroup().isTeamGroup());
}
SteamwarUser user();
Locale getLocale();
boolean chatShown();
void sendMessage(ChatMessageType type, BaseComponent... msg);
default void chat(Message message) {
send(false, ChatMessageType.CHAT, null, null, message);
}
default void system(String format, Object... params) {
system(new Message(format, params));
}
default void system(Message message) {
send(true, ChatMessageType.SYSTEM, null, null, message);
}
default void system(String format, Message onHover, ClickEvent onClick, Object... params) {
send(true, ChatMessageType.SYSTEM, onHover, onClick, new Message(format, params));
}
default void prefixless(String format, Object... params) {
prefixless(format, null, null, params);
}
default void prefixless(String format, Message onHover, ClickEvent onClick, Object... params) {
send(false, ChatMessageType.SYSTEM, onHover, onClick, new Message(format, params));
}
default void send(boolean prefixed, ChatMessageType type, Message onHover, ClickEvent onClick, Message message) {
TextComponent msg = parseToComponent(prefixed, message);
if(onHover != null)
msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text(parse(false, onHover))));
if(onClick != null)
msg.setClickEvent(onClick);
sendMessage(type, msg);
}
default TextComponent parseToComponent(boolean prefixed, Message message) {
return new TextComponent(parse(prefixed, message));
}
default String parseToLegacy(String format, Object... params) {
return parseToLegacy(new Message(format, params));
}
default String parseToLegacy(Message message) {
return parseToComponent(false, message).toLegacyText();
}
default BaseComponent[] parse(boolean prefixed, Message message) {
Locale locale = getLocale();
ResourceBundle resourceBundle = SteamwarResourceBundle.getResourceBundle(locale);
String pattern = "";
if(prefixed)
pattern = resourceBundle.getObject("PREFIX") + " ";
pattern += (String)resourceBundle.getObject(message.getFormat());
MessageFormat format = new MessageFormat(pattern, locale);
Object[] params = message.getParams();
for (int i = 0; i < params.length; i++) {
if(params[i] instanceof Message) {
params[i] = parseToLegacy((Message) params[i]);
} else if(params[i] instanceof Date) {
params[i] = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale).format((Date) params[i]);
} else if(params[i] instanceof SteamwarUser) {
params[i] = ((SteamwarUser) params[i]).getUserName();
} else if(params[i] instanceof ProxiedPlayer) {
params[i] = ((ProxiedPlayer) params[i]).getName();
} else if(params[i] instanceof ChatSender) {
params[i] = ((ChatSender) params[i]).user().getUserName();
}
}
return TextComponent.fromLegacyText(format.format(params));
}
static ChatSender ofProxiedPlayer(ProxiedPlayer player, BiConsumer<ChatMessageType, BaseComponent[]> sendMessage) {
return new ChatSender() {
@Override
public SteamwarUser user() {
return SteamwarUser.get(player.getUniqueId());
}
@Override
public Locale getLocale() {
Locale locale = player.getLocale();
if(locale == null)
locale = Locale.getDefault();
return locale;
}
@Override
public boolean chatShown() {
return player.getChatMode() == ProxiedPlayer.ChatMode.SHOWN;
}
@Override
public void sendMessage(ChatMessageType type, BaseComponent... msg) {
sendMessage.accept(type, msg);
}
};
}
static ChatSender of(ProxiedPlayer player) {
return ofProxiedPlayer(player, player::sendMessage);
}
static ChatSender disconnect(ProxiedPlayer player) {
return ofProxiedPlayer(player, (type, msg) -> player.disconnect(msg));
}
static ChatSender of(CommandSender sender) {
if(sender instanceof ProxiedPlayer)
return of((ProxiedPlayer) sender);
//Console
return new ChatSender() {
@Override
public SteamwarUser user() {
return SteamwarUser.get(-1);
}
@Override
public Locale getLocale() {
return Locale.getDefault();
}
@Override
public boolean chatShown() {
return true;
}
@Override
public void sendMessage(ChatMessageType type, BaseComponent... msg) {
sender.sendMessage(msg);
}
};
}
static ChatSender console() {
return of(ConsoleCommandSender.getInstance());
}
static ChatSender of(LoginEvent event) {
return new ChatSender() {
@Override
public SteamwarUser user() {
return SteamwarUser.get(event.getConnection().getUniqueId());
}
@Override
public Locale getLocale() {
return Locale.getDefault();
}
@Override
public boolean chatShown() {
return false;
}
@Override
public void sendMessage(ChatMessageType type, BaseComponent... msg) {
event.setCancelReason(msg);
}
};
}
static ChatSender discordChannel(DiscordChatListener channel) {
return new ChatSender() {
@Override
public SteamwarUser user() {
return SteamwarUser.get(-1);
}
@Override
public Locale getLocale() {
return Locale.getDefault();
}
@Override
public boolean chatShown() {
return true;
}
@Override
public void sendMessage(ChatMessageType type, BaseComponent... msg) {
try {
channel.send("<t:" + (System.currentTimeMillis() / 1000) + "> " + new TextComponent(msg).toPlainText());
} catch (Exception e) {
BungeeCore.get().getLogger().log(Level.SEVERE, "Could not send chat message to discord", e);
}
}
};
}
static ChatSender of(net.dv8tion.jda.api.entities.Message message, SteamwarUser user) {
return new ChatSender() {
@Override
public SteamwarUser user() {
return user;
}
@Override
public Locale getLocale() {
return Locale.getDefault();
}
@Override
public boolean chatShown() {
return true;
}
@Override
public void sendMessage(ChatMessageType type, BaseComponent... msg) {
try {
message.delete().queue();
} catch (Exception e) {
BungeeCore.get().getLogger().log(Level.SEVERE, "Could not send chat reply to discord user", e);
}
}
};
}
}

Datei anzeigen

@ -0,0 +1,55 @@
/*
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.messages;
import de.steamwar.bungeecore.Message;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
public class SteamwarResourceBundle extends PropertyResourceBundle {
private static final String BASE_PATH = "/" + "de.steamwar.messages.BungeeCore".replace('.', '/');
private static final Map<String, ResourceBundle> bundles = new HashMap<>();
public static ResourceBundle getResourceBundle(Locale locale) {
return getResourceBundle(locale.toString(), getResourceBundle(locale.getLanguage(), getResourceBundle( "", null)));
}
private static ResourceBundle getResourceBundle(String locale, ResourceBundle parent) {
return bundles.computeIfAbsent(locale, locale1 -> {
InputStream inputStream = Message.class.getResourceAsStream(BASE_PATH + ("".equals(locale) ? "" : "_" + locale) + ".properties");
if(inputStream == null)
return parent;
try {
return new SteamwarResourceBundle(inputStream, parent);
} catch (IOException e) {
return parent;
}
});
}
private SteamwarResourceBundle(InputStream stream, ResourceBundle parent) throws IOException {
super(stream);
setParent(parent);
}
}