Packet System + Bungee GUI #111
131
src/de/steamwar/bungeecore/Message.java
Normale Datei
131
src/de/steamwar/bungeecore/Message.java
Normale Datei
@ -0,0 +1,131 @@
|
||||
/*
|
||||
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;
|
||||
|
||||
import de.steamwar.bungeecore.listeners.ConnectionListener;
|
||||
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.ClickEvent;
|
||||
import net.md_5.bungee.api.chat.HoverEvent;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Locale;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
public class Message {
|
||||
private Message(){}
|
||||
|
||||
public static TextComponent parseToComponent(String message, boolean prefixed, CommandSender sender, Object... params){
|
||||
return new TextComponent(TextComponent.fromLegacyText(parse(message, prefixed, sender, params)));
|
||||
}
|
||||
|
||||
public static String parsePrefixed(String message, CommandSender sender, Object... params){
|
||||
return parse(message, true, sender, params);
|
||||
}
|
||||
|
||||
public static String parse(String message, CommandSender sender, Object... params){
|
||||
return parse(message, false, sender, params);
|
||||
}
|
||||
|
||||
private static String parse(String message, boolean prefixed, CommandSender sender,Object... params){
|
||||
Locale locale;
|
||||
if(sender instanceof ProxiedPlayer)
|
||||
locale = ((ProxiedPlayer)sender).getLocale();
|
||||
else
|
||||
locale = Locale.getDefault();
|
||||
|
||||
ResourceBundle resourceBundle = ResourceBundle.getBundle("de.steamwar.messages.BungeeCore", locale);
|
||||
String pattern = "";
|
||||
if(prefixed)
|
||||
pattern = new String(((String)resourceBundle.getObject("PREFIX")).getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8) + " ";
|
||||
pattern += new String(((String)resourceBundle.getObject(message)).getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
|
||||
|
||||
return new MessageFormat(pattern, locale).format(params);
|
||||
}
|
||||
|
||||
public static void send(String message, CommandSender sender, Object... params){
|
||||
send(message, true, sender, ChatMessageType.SYSTEM, null, null, params);
|
||||
}
|
||||
|
||||
public static void sendPrefixless(String message, CommandSender sender, Object... params){
|
||||
send(message, false, sender, ChatMessageType.SYSTEM, null, null, params);
|
||||
}
|
||||
|
||||
public static void send(String message, CommandSender sender, ChatMessageType type, Object... params){
|
||||
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){
|
||||
send(message, true, sender, ChatMessageType.SYSTEM, onHover, onClick, params);
|
||||
}
|
||||
|
||||
public static void sendPrefixless(String message, CommandSender sender, String onHover, ClickEvent onClick, Object... 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){
|
||||
TextComponent msg = parseToComponent(message, prefixed, sender, params);
|
||||
if(onHover != null)
|
||||
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){
|
||||
for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers())
|
||||
send(message, player, parse(onHover, false, player), onClick, params);
|
||||
}
|
||||
|
||||
public static void broadcast(String message, Object... params){
|
||||
for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers())
|
||||
send(message, player, ChatMessageType.SYSTEM, params);
|
||||
}
|
||||
|
||||
public static void chat(String message, Object... params){
|
||||
for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers()){
|
||||
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){
|
||||
team(message, ChatMessageType.SYSTEM, params);
|
||||
}
|
||||
|
||||
public static void team(String message, ChatMessageType type, Object... params){
|
||||
for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers()){
|
||||
if(player.getGroups().contains(ConnectionListener.TEAM_GROUP))
|
||||
sendPrefixless(message, player, type, params);
|
||||
}
|
||||
}
|
||||
}
|
@ -32,23 +32,13 @@ import java.util.*;
|
||||
|
||||
public class SubserverSystem {
|
||||
private SubserverSystem(){}
|
||||
|
||||
private static final String BACKBONE = "/home/minecraft/backbone/";
|
||||
private static final List<String> JVM_ARGS = Arrays.asList("-Dlog4j.configurationFile=log4j2.xml", "-server", "-Xms128M", "-XX:ThreadPriorityPolicy=42", "-XX:+TieredCompilation", "-XX:TargetSurvivorRatio=90", "-XX:SurvivorRatio=8", "-XX:MaxTenuringThreshold=15", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseBiasedLocking", "-XX:UseSSE=3", "-XX:+UseCodeCacheFlushing", "-XX:+UseThreadPriorities", "-XX:+UseFastAccessorMethods", "-XX:+AggressiveOpts", "-XX:+ReduceSignalUsage", "-XX:+UseInterpreter", "-XX:+UseFastEmptyMethods", "-XX:+UseSharedSpaces", "-XX:AllocatePrefetchStyle=1", "-XX:+AlwaysCompileLoopMethods", "-XX:SharedReadOnlySize=30m", "-XX:+UseConcMarkSweepGC", "-XX:+RewriteFrequentPairs", "-XX:+OptimizeStringConcat", "-XX:+CMSCleanOnEnter", "-XX:+UseInlineCaches");
|
||||
private static final List<String> JVM_ARGS = Arrays.asList("-Dlog4j.configurationFile=log4j2.xml", "-server", "-Xms128M", "-XX:+UseCompressedOops", "-XX:+TieredCompilation", "-XX:TargetSurvivorRatio=90", "-XX:SurvivorRatio=8", "-XX:MaxTenuringThreshold=15", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseBiasedLocking", "-XX:UseSSE=3", "-XX:+UseCodeCacheFlushing", "-XX:+UseThreadPriorities", "-XX:+AggressiveOpts", "-XX:+ReduceSignalUsage", "-XX:+UseInterpreter", "-XX:+UseSharedSpaces", "-XX:AllocatePrefetchStyle=1", "-XX:+AlwaysCompileLoopMethods", "-XX:+UseConcMarkSweepGC", "-XX:+RewriteFrequentPairs", "-XX:+OptimizeStringConcat", "-XX:+CMSCleanOnEnter", "-XX:+UseInlineCaches");
|
||||
private static final List<String> JVM8_ARGS = Arrays.asList("-XX:ThreadPriorityPolicy=42", "-XX:SharedReadOnlySize=30m", "-XX:+UseFastEmptyMethods", "-XX:+UseFastAccessorMethods");
|
||||
private static final String ARENA_PATH = BACKBONE + "arenaserver/";
|
||||
private static final String SERVER_PATH = BACKBONE + "server/";
|
||||
private static final String EVENT_PATH = BACKBONE + "event/";
|
||||
private static final String BINARY_PATH = "/binarys/";
|
||||
|
||||
public static void sendDeniedMessage(ProxiedPlayer p, UUID owner){
|
||||
ProxiedPlayer o = ProxyServer.getInstance().getPlayer(owner);
|
||||
if(o == null)
|
||||
return;
|
||||
|
||||
BungeeCore.send(o, BungeeCore.CHAT_PREFIX + "§e" + p.getName() + " §7möchte auf deine Bauwelt.");
|
||||
BungeeCore.send(o, "§7Klicke §ehier§7, wenn du das erlauben möchtest.",
|
||||
"§e/bau addmember " + p.getName(),
|
||||
new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bau addmember " + p.getName()));
|
||||
}
|
||||
|
||||
/**
|
||||
* This function starts every arena (even test- and eventarenas).
|
||||
@ -109,30 +99,18 @@ public class SubserverSystem {
|
||||
throw new SecurityException("Could not copy folder", e);
|
||||
}
|
||||
|
||||
//Generate launch command
|
||||
List<String> cmd = new LinkedList<>();
|
||||
cmd.add("java");
|
||||
cmd.add("-DlogPath=" + mapName);
|
||||
cmd.add("-DfightID=" + eventFightID);
|
||||
if(player1 != null && eventFightID != -1)
|
||||
cmd.add("-DblueLeader=" + player1.toString());
|
||||
if(player2 != null)
|
||||
cmd.add("-DredLeader=" + player2.toString());
|
||||
if(checkSchemID != 0)
|
||||
cmd.add("-DcheckSchemID=" + checkSchemID);
|
||||
if(ranked)
|
||||
cmd.add("-Dranked=true");
|
||||
cmd.add("-Xmx2G");
|
||||
cmd.addAll(JVM_ARGS);
|
||||
cmd.add("-jar");
|
||||
cmd.add(BINARY_PATH + modus.serverJar());
|
||||
cmd.add("--log-strip-color");
|
||||
cmd.add("--world-dir");
|
||||
cmd.add(worldDir);
|
||||
cmd.add("--level-name");
|
||||
cmd.add(mapName);
|
||||
cmd.add("--port");
|
||||
cmd.add(String.valueOf(port));
|
||||
List<String> cmd = serverStartCommand(
|
||||
modus.serverJar(),
|
||||
worldDir,
|
||||
mapName,
|
||||
port,
|
||||
"2G",
|
||||
"logPath=" + mapName,
|
||||
"fightID=" + eventFightID,
|
||||
"ranked=" + ranked,
|
||||
"checkSchemID=" + checkSchemID,
|
||||
player1 != null && eventFightID != -1 ? "blueLeader=" + player1.toString() : null,
|
||||
player2 != null ? "redLeader=" + player2.toString() : null);
|
||||
|
||||
//Start server
|
||||
ProcessBuilder process = new ProcessBuilder(cmd);
|
||||
@ -164,10 +142,6 @@ public class SubserverSystem {
|
||||
return startArena(modus, map, eventFightID, checkSchemID, serverName, mapName, player1, player2, false);
|
||||
}
|
||||
|
||||
public static Subserver startArena(ArenaMode modus, String map){
|
||||
return startArena(modus, map, 0, 0, null, null, null, null);
|
||||
}
|
||||
|
||||
public static Subserver startEventArena(EventFight eventFight, String serverName){
|
||||
return startArena(
|
||||
eventFight.getSpielmodus(),
|
||||
@ -180,7 +154,7 @@ public class SubserverSystem {
|
||||
null);
|
||||
}
|
||||
|
||||
public static void sendToTestServer(ProxiedPlayer p, ArenaMode m, String map, int checkSchemId){
|
||||
public static void startTestServer(ProxiedPlayer p, ArenaMode m, String map, int checkSchemId){
|
||||
startArena(m, map, -1, checkSchemId, p.getName() + "s Bau", p.getName(), p.getUniqueId(), null).sendPlayer(p);
|
||||
}
|
||||
|
||||
@ -189,24 +163,16 @@ public class SubserverSystem {
|
||||
return;
|
||||
|
||||
SteamwarUser user = SteamwarUser.get(owner);
|
||||
copyBauwelt(p, BungeeCore.BAUWELT_PROTOTYP, BungeeCore.WORLD_FOLDER + owner.toString());
|
||||
copyBauweltIfRequired(p, BungeeCore.BAUWELT_PROTOTYP, BungeeCore.WORLD_FOLDER + owner.toString());
|
||||
int port = freePort(4000);
|
||||
|
||||
//Generate launch command
|
||||
List<String> cmd = new LinkedList<>();
|
||||
cmd.add("java");
|
||||
cmd.add("-DlogPath=" + owner.toString());
|
||||
cmd.add("-Xmx256M");
|
||||
cmd.addAll(JVM_ARGS);
|
||||
cmd.add("-jar");
|
||||
cmd.add(BINARY_PATH + "spigot-1.12.2.jar");
|
||||
cmd.add("--log-strip-color");
|
||||
cmd.add("--world-dir");
|
||||
cmd.add("/home/minecraft/userworlds");
|
||||
cmd.add("--level-name");
|
||||
cmd.add(owner.toString());
|
||||
cmd.add("--port");
|
||||
cmd.add(String.valueOf(port));
|
||||
List<String> cmd = serverStartCommand(
|
||||
"spigot-1.12.2.jar",
|
||||
"/home/minecraft/userworlds",
|
||||
owner.toString(),
|
||||
port,
|
||||
"256M",
|
||||
"logPath=" + owner.toString());
|
||||
|
||||
//Start server
|
||||
ProcessBuilder process = new ProcessBuilder(cmd);
|
||||
@ -220,24 +186,16 @@ public class SubserverSystem {
|
||||
return;
|
||||
|
||||
SteamwarUser user = SteamwarUser.get(owner);
|
||||
copyBauwelt(p, BungeeCore.BAUWELT15, BungeeCore.USERWORLDS15 + user.getId());
|
||||
copyBauweltIfRequired(p, BungeeCore.BAUWELT15, BungeeCore.USERWORLDS15 + user.getId());
|
||||
int port = freePort(4000);
|
||||
|
||||
//Generate launch command
|
||||
List<String> cmd = new LinkedList<>();
|
||||
cmd.add("java");
|
||||
cmd.add("-DlogPath=" + user.getId());
|
||||
cmd.add("-Xmx512M");
|
||||
cmd.addAll(JVM_ARGS);
|
||||
cmd.add("-jar");
|
||||
cmd.add(BINARY_PATH + "spigot-1.15.2.jar");
|
||||
cmd.add("--log-strip-color");
|
||||
cmd.add("--world-dir");
|
||||
cmd.add("/home/minecraft/userworlds15");
|
||||
cmd.add("--level-name");
|
||||
cmd.add(String.valueOf(user.getId()));
|
||||
cmd.add("--port");
|
||||
cmd.add(String.valueOf(port));
|
||||
List<String> cmd = serverStartCommand(
|
||||
"spigot-1.15.2.jar",
|
||||
"/home/minecraft/userworlds15",
|
||||
String.valueOf(user.getId()),
|
||||
port,
|
||||
"512M",
|
||||
"logPath=" + user.getId());
|
||||
|
||||
//Start server
|
||||
ProcessBuilder process = new ProcessBuilder(cmd);
|
||||
@ -246,6 +204,45 @@ public class SubserverSystem {
|
||||
new Bauserver(user.getUserName() + "s Bau", owner, port, process, () -> {}).sendPlayer(p);
|
||||
}
|
||||
|
||||
public static void sendDeniedMessage(ProxiedPlayer p, UUID owner){
|
||||
ProxiedPlayer o = ProxyServer.getInstance().getPlayer(owner);
|
||||
if(o == null)
|
||||
return;
|
||||
|
||||
BungeeCore.send(o, BungeeCore.CHAT_PREFIX + "§e" + p.getName() + " §7möchte auf deine Bauwelt.");
|
||||
BungeeCore.send(o, "§7Klicke §ehier§7, wenn du das erlauben möchtest.",
|
||||
"§e/bau addmember " + p.getName(),
|
||||
new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bau addmember " + p.getName()));
|
||||
}
|
||||
|
||||
private static List<String> serverStartCommand(String serverJar, String worldDir, String levelName, int port, String xmx, String... dParams){
|
||||
List<String> cmd = new ArrayList<>();
|
||||
boolean jdk11 = serverJar.contains("1.15.2");
|
||||
if(jdk11)
|
||||
cmd.add("/usr/lib/jvm/java-11-openjdk-amd64/bin/java");
|
||||
else
|
||||
cmd.add("java");
|
||||
|
||||
for(String param : dParams){
|
||||
cmd.add("-D" + param);
|
||||
}
|
||||
cmd.add("-Xmx" + xmx);
|
||||
cmd.addAll(JVM_ARGS);
|
||||
if(!jdk11)
|
||||
cmd.addAll(JVM8_ARGS);
|
||||
cmd.add("-jar");
|
||||
cmd.add("/binarys/" + serverJar);
|
||||
cmd.add("--log-strip-color");
|
||||
cmd.add("--world-dir");
|
||||
cmd.add(worldDir);
|
||||
cmd.add("--level-name");
|
||||
cmd.add(levelName);
|
||||
cmd.add("--port");
|
||||
cmd.add(String.valueOf(port));
|
||||
|
||||
return cmd;
|
||||
}
|
||||
|
||||
private static boolean bauRunning(ProxiedPlayer p, UUID owner){
|
||||
for(Subserver subserver : Subserver.getServerList()){
|
||||
if(subserver.getType() == Servertype.BAUSERVER && ((Bauserver)subserver).getOwner().equals(owner)){
|
||||
@ -256,7 +253,7 @@ public class SubserverSystem {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void copyBauwelt(ProxiedPlayer p, String sourcePath, String targetPath){
|
||||
private static void copyBauweltIfRequired(ProxiedPlayer p, String sourcePath, String targetPath){
|
||||
File w = new File(targetPath);
|
||||
if (!w.exists() || !w.isDirectory()){
|
||||
try {
|
||||
|
@ -280,7 +280,7 @@ public class BauCommand {
|
||||
break;
|
||||
}
|
||||
}
|
||||
SubserverSystem.sendToTestServer(p, mode, map, 0);
|
||||
SubserverSystem.startTestServer(p, mode, map, 0);
|
||||
}));
|
||||
}
|
||||
|
||||
|
@ -232,7 +232,7 @@ public class CheckCommand extends BasicCommand {
|
||||
}
|
||||
|
||||
ArenaMode mode = ArenaMode.getByCheckSchemType(schematic.getSchemType().toDB());
|
||||
SubserverSystem.sendToTestServer(checker, mode, FightCommand.getMap(checker, mode, "Random"), schematic.getSchemID());
|
||||
SubserverSystem.startTestServer(checker, mode, FightCommand.getMap(checker, mode, "Random"), schematic.getSchemID());
|
||||
currentCheckers.put(checker.getUniqueId(), this);
|
||||
currentSchems.put(schematic.getSchemID(), this);
|
||||
next(0);
|
||||
|
@ -58,7 +58,7 @@ public class FightCommand extends BasicCommand {
|
||||
String realMap = mode.hasMap(arg.toLowerCase());
|
||||
if(realMap != null)
|
||||
return realMap;
|
||||
if(arg.equals("Random"))
|
||||
if(arg.equalsIgnoreCase("Random"))
|
||||
return mode.getRandomMap();
|
||||
|
||||
BungeeCore.send(sender, BungeeCore.CHAT_PREFIX + "§cDie gewünschte Arena gibt es nicht.");
|
||||
|
@ -19,12 +19,10 @@
|
||||
|
||||
package de.steamwar.bungeecore.commands;
|
||||
|
||||
import de.steamwar.bungeecore.BungeeCore;
|
||||
import de.steamwar.bungeecore.Message;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
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.TextComponent;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
|
||||
public class HelpCommand extends BasicCommand {
|
||||
@ -35,115 +33,45 @@ public class HelpCommand extends BasicCommand {
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if(args.length != 1){
|
||||
TextComponent tc = new TextComponent(BungeeCore.CHAT_PREFIX + "§7Kehre von überall mit §8/§el §7zur Lobby zurück!");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eZurück zur Lobby").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/l"));
|
||||
sender.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent(BungeeCore.CHAT_PREFIX + "§7Komme mit §8/§ebau §7auf den Bauserver!");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eZum Bauserver").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bauserver"));
|
||||
sender.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent(BungeeCore.CHAT_PREFIX + "§7Erhalte mit §8/§ehelp bauserver §7Hilfe zum Bauserver!");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eHilfe zum Bauserver").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help bauserver"));
|
||||
sender.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent(BungeeCore.CHAT_PREFIX + "§7Starte mit §8/§efight §7einen neuen Kampf!");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eZum Kampfsystem").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/fight"));
|
||||
sender.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent(BungeeCore.CHAT_PREFIX + "§7Tippe §8/§echallenge§7, um jemanden herauszufordern!");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eHerausfordern").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/challenge"));
|
||||
sender.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent(BungeeCore.CHAT_PREFIX + "§7Starte mit §8/§ehistoric §7einen historischen Kampf!");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eHistorische Kämpfe").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/historic"));
|
||||
sender.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent(BungeeCore.CHAT_PREFIX + "§8/§eteam§7 für das Teamsystem!");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eTeamverwaltung").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/team"));
|
||||
sender.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent(BungeeCore.CHAT_PREFIX + "§7Trete mit §8/§ejoin §8[§eSpieler§8] §7einem Kampf bei!");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eSpieler beitreten").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/join"));
|
||||
sender.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent(BungeeCore.CHAT_PREFIX + "§7Schreibe mit §8/§elocal §7nur auf dem lokalen Server!");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eLokaler Chat").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/local"));
|
||||
sender.sendMessage(tc);
|
||||
Message.send("HELP_LOBBY", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_LOBBY_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/l"));
|
||||
Message.send("HELP_BAU", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bau"));
|
||||
Message.send("HELP_BAUSERVER", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_BAUSERVER_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help bauserver"));
|
||||
Message.send("HELP_FIGHT", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_FIGHT_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/fight"));
|
||||
Message.send("HELP_CHALLENGE", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_CHALLENGE_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/challenge"));
|
||||
Message.send("HELP_HISTORIC", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_HISTORIC_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/historic"));
|
||||
Message.send("HELP_TEAM", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_TEAM_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/team"));
|
||||
Message.send("HELP_JOIN", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_JOIN_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/join"));
|
||||
Message.send("HELP_LOCAL", true, sender, ChatMessageType.SYSTEM, Message.parse("HELP_LOCAL_HOVER", sender), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/local"));
|
||||
}else if(args[0].equalsIgnoreCase("bauserver")){
|
||||
sendBauHelp((ProxiedPlayer) sender);
|
||||
}else if(args[0].equalsIgnoreCase("bau")){
|
||||
sender.sendMessage("§8/§etnt §8- §7(de)aktiviert Explosionsschaden");
|
||||
sender.sendMessage("§8/§efire §8- §7(de)aktiviert Feuerschaden");
|
||||
sender.sendMessage("§8/§etestblock §8- §7Erneuert den nächsten Testblock");
|
||||
sender.sendMessage("§8/§ereset §8- §7Setzt die derzeitige Region zurück");
|
||||
sender.sendMessage("§8/§espeed §8- §7Ändert deine Fluggeschwindigkeit");
|
||||
sender.sendMessage("§8/§env §8- §7(de)aktiviert Nachtsicht");
|
||||
sender.sendMessage("§8/§ewv §8- §7(de)aktiviert Unterwassersicht");
|
||||
sender.sendMessage("§8/§etrace §8- §7Gibt einen Überblick über den TNT-Tracer");
|
||||
sender.sendMessage("§8/§eloader §8- §7Nutze den automatischen Kanonenlader");
|
||||
sender.sendMessage("§8/§eprotect §8- §7Schützt den Boden der (M)WG-Region");
|
||||
sender.sendMessage("§8/§efreeze §8- §7Unterbindet Blockupdates");
|
||||
sender.sendMessage("§8/§eskull §8- §7Gibt dir den Kopf eines Spielers");
|
||||
sender.sendMessage("§8/§edebugstick §8- §7Gibt dir einen Debugstick (nur 1.15)");
|
||||
sender.sendMessage("§8/§ebauinfo §8- §7Gibt dir Informationen über den Bauserver");
|
||||
sender.sendMessage("§8/§ehelp bauserver §8- §7Hilfe zum Bauserver");
|
||||
Message.sendPrefixless("HELP_TNT", sender);
|
||||
Message.sendPrefixless("HELP_FIRE", sender);
|
||||
Message.sendPrefixless("HELP_TESTBLOCK", sender);
|
||||
Message.sendPrefixless("HELP_RESET", sender);
|
||||
Message.sendPrefixless("HELP_SPEED", sender);
|
||||
Message.sendPrefixless("HELP_NV", sender);
|
||||
Message.sendPrefixless("HELP_WV", sender);
|
||||
Message.sendPrefixless("HELP_TRACE", sender);
|
||||
Message.sendPrefixless("HELP_LOADER", sender);
|
||||
Message.sendPrefixless("HELP_PROTECT", sender);
|
||||
Message.sendPrefixless("HELP_FREEZE", sender);
|
||||
Message.sendPrefixless("HELP_SKULL", sender);
|
||||
Message.sendPrefixless("HELP_DEBUGSTICK", sender);
|
||||
Message.sendPrefixless("HELP_BAUINFO", sender);
|
||||
Message.sendPrefixless("HELP_BAUSERVER_SHORT", sender);
|
||||
}
|
||||
}
|
||||
|
||||
static void sendBauHelp(ProxiedPlayer p){
|
||||
TextComponent tc = new TextComponent("§8/§ebau tp §8- §7Gehe auf Bauserver von Freunden!");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eZu einem anderen Bauserver").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau tp "));
|
||||
p.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent("§8/§ebau addmember §8- §7Fügt einen Freund hinzu");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eFüge einen Freund hinzu").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau addmember "));
|
||||
p.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent("§8/§ebau delmember §8- §7Entfernt einen Spieler");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eEntfernt einen Spieler").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau delmember "));
|
||||
p.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent("§8/§ebau togglebuild §8- §7Berechtigung zum Bauen, /tp, /gm");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eStellt Spielerberechtigungen ein").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau togglebuild "));
|
||||
p.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent("§8/§ebau togglewe §8- §7Berechtigung für WorldEdit, /testblock");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eStellt Spielerberechtigungen ein").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau togglewe "));
|
||||
p.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent("§8/§ebau toggleworld §8- §7/reset, /trace, /fire, /tnt");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eStellt Spielerberechtigungen ein").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau toggleworld "));
|
||||
p.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent("§8/§ebau delete §8- §7Setzt deine Bauwelt zurück");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eBauwelt zurücksetzen").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau delete"));
|
||||
p.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent("§8/§ebau testarena §8- §7Starte eine Testarena");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eTestarena starten").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau testarena"));
|
||||
p.sendMessage(tc);
|
||||
|
||||
tc = new TextComponent("§8/§ehelp bau §8- §7Hilfe zu nützlichen Werkzeugen");
|
||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eNützliche Zusatzfunktionen").create()));
|
||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help bau"));
|
||||
p.sendMessage(tc);
|
||||
Message.send("HELP_BAU_TP", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_TP_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau tp "));
|
||||
Message.send("HELP_BAU_ADDMEMBER", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_ADDMEMBER_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau addmember "));
|
||||
Message.send("HELP_BAU_DELMEMBER", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_DELMEMBER_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau delmember "));
|
||||
Message.send("HELP_BAU_TOGGLEBUILD", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_TOGGLEBUILD_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau togglebuild "));
|
||||
Message.send("HELP_BAU_TOGGLEWE", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_TOGGLEWE_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau togglewe "));
|
||||
Message.send("HELP_BAU_TOGGLEWORLD", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_TOGGLEWORLD_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau toggleworld "));
|
||||
Message.send("HELP_BAU_DELETE", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_DELETE_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau delete "));
|
||||
Message.send("HELP_BAU_TESTARENA", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_TESTARENA_HOVER", p), new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau testarena "));
|
||||
Message.send("HELP_BAU_BAU", true, p, ChatMessageType.SYSTEM, Message.parse("HELP_BAU_BAU_HOVER", p), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help bau"));
|
||||
}
|
||||
}
|
||||
|
38
src/de/steamwar/bungeecore/listeners/mods/Badlion.java
Normale Datei
38
src/de/steamwar/bungeecore/listeners/mods/Badlion.java
Normale Datei
@ -0,0 +1,38 @@
|
||||
package de.steamwar.bungeecore.listeners.mods;
|
||||
|
||||
import de.steamwar.bungeecore.listeners.BasicListener;
|
||||
import net.md_5.bungee.api.event.PostLoginEvent;
|
||||
import net.md_5.bungee.event.EventHandler;
|
||||
|
||||
public class Badlion extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void onPostLogin(PostLoginEvent event) {
|
||||
/*
|
||||
{
|
||||
"Clear Glass":{"disabled":true},
|
||||
"ClearWater":{"disabled":true},
|
||||
"FOV Changer":{"disabled":true},
|
||||
"Hitboxes":{"disabled":true},
|
||||
"MiniMap":{"disabled":true},
|
||||
"MLG Cobweb":{"disabled":true},
|
||||
"Replay":{"disabled":true},
|
||||
"Schematica":{"disabled":true},
|
||||
"ToggleSneak":{"disabled":true},
|
||||
"ToggleSprint":{"disabled":true}
|
||||
}
|
||||
*/
|
||||
event.getPlayer().sendData("badlion:mods", ("{" +
|
||||
"\"Clear Glass\":{\"disabled\":true}," +
|
||||
"\"ClearWater\":{\"disabled\":true}," +
|
||||
"\"FOV Changer\":{\"disabled\":true}," +
|
||||
"\"Hitboxes\":{\"disabled\":true}," +
|
||||
"\"MiniMap\":{\"disabled\":true}," +
|
||||
"\"MLG Cobweb\":{\"disabled\":true}," +
|
||||
"\"Replay\":{\"disabled\":true}," +
|
||||
"\"Schematica\":{\"disabled\":true}," +
|
||||
"\"ToggleSneak\":{\"disabled\":true}," +
|
||||
"\"ToggleSprint\":{\"disabled\":true}" +
|
||||
"}").getBytes());
|
||||
}
|
||||
}
|
@ -30,6 +30,7 @@ import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
||||
class Utils {
|
||||
private Utils(){}
|
||||
@ -72,16 +73,20 @@ class Utils {
|
||||
if(mods.size() == 1){
|
||||
if(max == ModType.YELLOW)
|
||||
player.disconnect(BungeeCore.stringToText("§7Deaktiviere den Mod §e" + mods.get(0).getModName() + "§7, um weiter auf §eSteam§8War §7spielen zu können."));
|
||||
else
|
||||
user.ban(Timestamp.from(Instant.now().plus(1, ChronoUnit.DAYS)), "Versuchte Benutzung des Mods " + mods.get(0).getModName());
|
||||
else{
|
||||
user.ban(Timestamp.from(Instant.now().plus(7, ChronoUnit.DAYS)), "Versuchte Benutzung des Mods " + mods.get(0).getModName());
|
||||
BungeeCore.log(Level.SEVERE, user.getUserName() + " " + user.getId() + " wurde automatisch wegen des Mods " + mods.get(0).getModName() + " gebannt.");
|
||||
}
|
||||
}else{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
mods.forEach(mod -> sb.append(mod.getModName()).append('\n'));
|
||||
|
||||
if(max == ModType.YELLOW)
|
||||
player.disconnect(BungeeCore.stringToText("§7Deaktiviere die Mods\n§e" + sb.toString() + "§7um weiter auf §eSteam§8War §7spielen zu können."));
|
||||
else
|
||||
user.ban(Timestamp.from(Instant.now().plus(1, ChronoUnit.DAYS)), "Versuchte Benutzung der Mods\n" + sb.toString());
|
||||
else{
|
||||
user.ban(Timestamp.from(Instant.now().plus(7, ChronoUnit.DAYS)), "Versuchte Benutzung der Mods\n" + sb.toString());
|
||||
BungeeCore.log(Level.SEVERE, user.getUserName() + " " + user.getId() + " wurde automatisch wegen der Mods " + sb.toString() + " gebannt.");
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
55
src/de/steamwar/messages/BungeeCore.properties
Normale Datei
55
src/de/steamwar/messages/BungeeCore.properties
Normale Datei
@ -0,0 +1,55 @@
|
||||
PREFIX=§eSteam§8War»
|
||||
|
||||
HELP_LOBBY=§7Kehre von überall mit §8/§el §7zur Lobby zurück!
|
||||
HELP_LOBBY_HOVER=§eZurück zur Lobby
|
||||
HELP_BAU=§7Komme mit §8/§ebau §7auf den Bauserver!
|
||||
HELP_BAU_HOVER=§eZum Bauserver
|
||||
HELP_BAUSERVER=§7Erhalte mit §8/§ehelp bauserver §7Hilfe zum Bauserver!
|
||||
HELP_BAUSERVER_HOVER=§eHilfe zum Bauserver
|
||||
HELP_FIGHT=§7Starte mit §8/§efight §7einen neuen Kampf!
|
||||
HELP_FIGHT_HOVER=§eZum Kampfsystem
|
||||
HELP_CHALLENGE=§7Tippe §8/§echallenge§7, um jemanden herauszufordern!
|
||||
HELP_CHALLENGE_HOVER=§eHerausfordern
|
||||
HELP_HISTORIC=§7Starte mit §8/§ehistoric §7einen historischen Kampf!
|
||||
HELP_HISTORIC_HOVER=§eHistorische Kämpfe
|
||||
HELP_TEAM=§8/§eteam§7 für das Teamsystem!
|
||||
HELP_TEAM_HOVER=§eTeamverwaltung
|
||||
HELP_JOIN=§7Trete mit §8/§ejoin §8[§eSpieler§8] §7einem Kampf bei!
|
||||
HELP_JOIN_HOVER=§eSpieler beitreten
|
||||
HELP_LOCAL=§7Schreibe mit §8/§elocal §7nur auf dem lokalen Server!
|
||||
HELP_LOCAL_HOVER=§eLokaler Chat
|
||||
|
||||
HELP_TNT=§8/§etnt §8- §7(de)aktiviert Explosionsschaden
|
||||
HELP_FIRE=§8/§efire §8- §7(de)aktiviert Feuerschaden
|
||||
HELP_TESTBLOCK=§8/§etestblock §8- §7Erneuert den nächsten Testblock
|
||||
HELP_RESET=§8/§ereset §8- §7Setzt die derzeitige Region zurück
|
||||
HELP_SPEED=§8/§espeed §8- §7Ändert deine Fluggeschwindigkeit
|
||||
HELP_NV=§8/§env §8- §7(de)aktiviert Nachtsicht
|
||||
HELP_WV=§8/§ewv §8- §7(de)aktiviert Unterwassersicht
|
||||
HELP_TRACE=§8/§etrace §8- §7Gibt einen Überblick über den TNT-Tracer
|
||||
HELP_LOADER=§8/§eloader §8- §7Nutze den automatischen Kanonenlader
|
||||
HELP_PROTECT=§8/§eprotect §8- §7Schützt den Boden der (M)WG-Region
|
||||
HELP_FREEZE=§8/§efreeze §8- §7Unterbindet Blockupdates
|
||||
HELP_SKULL=§8/§eskull §8- §7Gibt dir den Kopf eines Spielers
|
||||
HELP_DEBUGSTICK=§8/§edebugstick §8- §7Gibt dir einen Debugstick (nur 1.15)
|
||||
HELP_BAUINFO=§8/§ebauinfo §8- §7Gibt dir Informationen über den Bauserver
|
||||
HELP_BAUSERVER_SHORT=§8/§ehelp bauserver §8- §7Hilfe zum Bauserver
|
||||
|
||||
HELP_BAU_TP=§8/§ebau tp §8- §7Gehe auf Bauserver von Freunden!
|
||||
HELP_BAU_TP_HOVER=§eZu einem anderen Bauserver
|
||||
HELP_BAU_ADDMEMBER=§8/§ebau addmember §8- §7Fügt einen Freund hinzu
|
||||
HELP_BAU_ADDMEMBER_HOVER=§eFüge einen Freund hinzu
|
||||
HELP_BAU_DELMEMBER=§8/§ebau delmember §8- §7Entfernt einen Spieler
|
||||
HELP_BAU_DELMEMBER_HOVER=§eEntfernt einen Spieler
|
||||
HELP_BAU_TOGGLEBUILD=§8/§ebau togglebuild §8- §7Berechtigung zum Bauen, /tp, /gm
|
||||
HELP_BAU_TOGGLEBUILD_HOVER=§eStellt Spielerberechtigungen ein
|
||||
HELP_BAU_TOGGLEWE=§8/§ebau togglewe §8- §7Berechtigung für WorldEdit, /testblock
|
||||
HELP_BAU_TOGGLEWE_HOVER=§eStellt Spielerberechtigungen ein
|
||||
HELP_BAU_TOGGLEWORLD=§8/§ebau toggleworld §8- §7/reset, /trace, /fire, /tnt
|
||||
HELP_BAU_TOGGLEWORLD_HOVER=§eStellt Spielerberechtigungen ein
|
||||
HELP_BAU_DELETE=§8/§ebau delete §8- §7Setzt deine Bauwelt zurück
|
||||
HELP_BAU_DELETE_HOVER=§eBauwelt zurücksetzen
|
||||
HELP_BAU_TESTARENA=§8/§ebau testarena §8- §7Starte eine Testarena
|
||||
HELP_BAU_TESTARENA_HOVER=§eTestarena starten
|
||||
HELP_BAU_BAU=§8/§ehelp bau §8- §7Hilfe zu nützlichen Werkzeugen
|
||||
HELP_BAU_BAU_HOVER=§eNützliche Zusatzfunktionen
|
11
src/de/steamwar/messages/BungeeCore_en.properties
Normale Datei
11
src/de/steamwar/messages/BungeeCore_en.properties
Normale Datei
@ -0,0 +1,11 @@
|
||||
|
||||
#HELP_LOBBY=§7Return with §8/§el §7to the lobby!
|
||||
#HELP_LOBBY_HOVER=§eReturn to lobby
|
||||
#HELP_BAU=§7Go with §8/§ebau §7on your building server!
|
||||
#HELP_BAU_HOVER=§eTo the building server
|
||||
#HELP_BAUSERVER=§7Get with §8/§ehelp bauserver §7help for your building server!
|
||||
#HELP_BAUSERVER_HOVER=§eHelp for the building server
|
||||
#HELP_FIGHT=§7Start with §8/§efight §7a new fight!
|
||||
#HELP_FIGHT_HOVER=§eFight
|
||||
#HELP_CHALLENGE=§7Type §8/§echallenge§7 to challenge somebody!
|
||||
#HELP_CHALLENGE_HOVER=§eChallenge
|
In neuem Issue referenzieren
Einen Benutzer sperren