Dieser Commit ist enthalten in:
Commit
584b8197aa
@ -1 +1 @@
|
|||||||
Subproject commit 919c4d525ea39756b24bd961bb72d8d58bdd5bd4
|
Subproject commit 492894ca8d41ee0bde4dcb9d520db5f7478c50c7
|
@ -22,9 +22,9 @@ package de.steamwar.bungeecore;
|
|||||||
import de.steamwar.bungeecore.bot.SteamwarDiscordBot;
|
import de.steamwar.bungeecore.bot.SteamwarDiscordBot;
|
||||||
import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig;
|
import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig;
|
||||||
import de.steamwar.bungeecore.commands.*;
|
import de.steamwar.bungeecore.commands.*;
|
||||||
import de.steamwar.bungeecore.comms.SpigotReceiver;
|
|
||||||
import de.steamwar.bungeecore.listeners.*;
|
import de.steamwar.bungeecore.listeners.*;
|
||||||
import de.steamwar.bungeecore.listeners.mods.*;
|
import de.steamwar.bungeecore.listeners.mods.*;
|
||||||
|
import de.steamwar.bungeecore.network.NetworkReceiver;
|
||||||
import de.steamwar.bungeecore.sql.*;
|
import de.steamwar.bungeecore.sql.*;
|
||||||
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;
|
||||||
@ -156,7 +156,7 @@ public class BungeeCore extends Plugin {
|
|||||||
|
|
||||||
new EventStarter();
|
new EventStarter();
|
||||||
new SessionManager();
|
new SessionManager();
|
||||||
new SpigotReceiver();
|
new NetworkReceiver();
|
||||||
new TablistManager();
|
new TablistManager();
|
||||||
new SettingsChangedListener();
|
new SettingsChangedListener();
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ public class ServerStarter {
|
|||||||
private static final String EVENT_PATH = BACKBONE + "event/";
|
private static final String EVENT_PATH = BACKBONE + "event/";
|
||||||
public static final String TEMP_WORLD_PATH = BACKBONE + "arenaserver/";
|
public static final String TEMP_WORLD_PATH = BACKBONE + "arenaserver/";
|
||||||
public static final String TUTORIAL_PATH = BACKBONE + "tutorials/";
|
public static final String TUTORIAL_PATH = BACKBONE + "tutorials/";
|
||||||
public static final String WORLDS18_PATH = BACKBONE + "userworlds18/";
|
public static final String WORLDS19_PATH = BACKBONE + "userworlds19/";
|
||||||
|
|
||||||
private File directory = null;
|
private File directory = null;
|
||||||
private String worldDir = null;
|
private String worldDir = null;
|
||||||
@ -109,10 +109,10 @@ public class ServerStarter {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServerStarter build18(UUID owner) {
|
public ServerStarter build19(UUID owner) {
|
||||||
directory = new File(SERVER_PATH, "Bau18");
|
directory = new File(SERVER_PATH, "Bau19");
|
||||||
serverJar = "paper-1.18.2.jar";
|
serverJar = "paper-1.19.jar";
|
||||||
worldDir = WORLDS18_PATH;
|
worldDir = WORLDS19_PATH;
|
||||||
worldName = String.valueOf(SteamwarUser.get(owner).getId());
|
worldName = String.valueOf(SteamwarUser.get(owner).getId());
|
||||||
buildWithWorld(owner, new File(directory, "Bauwelt").getPath());
|
buildWithWorld(owner, new File(directory, "Bauwelt").getPath());
|
||||||
return this;
|
return this;
|
||||||
|
@ -19,10 +19,11 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore;
|
package de.steamwar.bungeecore;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.comms.handlers.FightInfoHandler;
|
import de.steamwar.bungeecore.network.NetworkSender;
|
||||||
import de.steamwar.bungeecore.comms.packets.StartingServerPacket;
|
import de.steamwar.bungeecore.network.handlers.FightInfoHandler;
|
||||||
import de.steamwar.bungeecore.sql.IgnoreSystem;
|
import de.steamwar.bungeecore.sql.IgnoreSystem;
|
||||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
import de.steamwar.bungeecore.sql.SteamwarUser;
|
||||||
|
import de.steamwar.network.packets.server.StartingServerPacket;
|
||||||
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.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
@ -53,6 +54,6 @@ public class SubserverSystem {
|
|||||||
public static void sendPlayer(Subserver subserver, ProxiedPlayer player) {
|
public static void sendPlayer(Subserver subserver, ProxiedPlayer player) {
|
||||||
subserver.sendPlayer(player);
|
subserver.sendPlayer(player);
|
||||||
if(!subserver.hasStarted() && FightInfoHandler.onLobby(player))
|
if(!subserver.hasStarted() && FightInfoHandler.onLobby(player))
|
||||||
new StartingServerPacket(SteamwarUser.get(player.getUniqueId())).send(player);
|
NetworkSender.send(player, new StartingServerPacket(SteamwarUser.get(player.getUniqueId()).getId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,12 +20,13 @@
|
|||||||
package de.steamwar.bungeecore.commands;
|
package de.steamwar.bungeecore.commands;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.*;
|
import de.steamwar.bungeecore.*;
|
||||||
import de.steamwar.bungeecore.comms.packets.BaumemberUpdatePacket;
|
|
||||||
import de.steamwar.bungeecore.inventory.SWInventory;
|
import de.steamwar.bungeecore.inventory.SWInventory;
|
||||||
import de.steamwar.bungeecore.inventory.SWItem;
|
import de.steamwar.bungeecore.inventory.SWItem;
|
||||||
|
import de.steamwar.bungeecore.network.NetworkSender;
|
||||||
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 de.steamwar.messages.ChatSender;
|
||||||
|
import de.steamwar.network.packets.server.BaumemberUpdatePacket;
|
||||||
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;
|
||||||
@ -46,7 +47,7 @@ public class BauCommand extends BasicCommand {
|
|||||||
ProxiedPlayer p = (ProxiedPlayer) sender;
|
ProxiedPlayer p = (ProxiedPlayer) sender;
|
||||||
|
|
||||||
versionSelector(p, args, 0,
|
versionSelector(p, args, 0,
|
||||||
() -> new ServerStarter().build18(p.getUniqueId()).send(p).start(),
|
() -> new ServerStarter().build19(p.getUniqueId()).send(p).start(),
|
||||||
() -> new ServerStarter().build15(p.getUniqueId()).send(p).start(),
|
() -> new ServerStarter().build15(p.getUniqueId()).send(p).start(),
|
||||||
() -> new ServerStarter().build12(p.getUniqueId()).send(p).start(),
|
() -> new ServerStarter().build12(p.getUniqueId()).send(p).start(),
|
||||||
() -> {
|
() -> {
|
||||||
@ -128,13 +129,13 @@ public class BauCommand extends BasicCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
versionSelector(p, args, 2,
|
versionSelector(p, args, 2,
|
||||||
() -> new ServerStarter().build18(worldOwner.getUuid()).send(p).start(),
|
() -> new ServerStarter().build19(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(ChatSender.of(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 run19, Runnable run15, Runnable run12, Runnable runElse) {
|
||||||
if(args.length <= pos) {
|
if(args.length <= pos) {
|
||||||
int version = p.getPendingConnection().getVersion();
|
int version = p.getPendingConnection().getVersion();
|
||||||
if(version > 340) { // Version > 1.12.2
|
if(version > 340) { // Version > 1.12.2
|
||||||
@ -146,9 +147,11 @@ public class BauCommand extends BasicCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (args[pos].toLowerCase()) {
|
switch (args[pos].toLowerCase()) {
|
||||||
|
case "19":
|
||||||
|
case "1.19":
|
||||||
case "18":
|
case "18":
|
||||||
case "1.18":
|
case "1.18":
|
||||||
run18.run();
|
run19.run();
|
||||||
break;
|
break;
|
||||||
case "ws":
|
case "ws":
|
||||||
case "warship":
|
case "warship":
|
||||||
@ -195,7 +198,7 @@ public class BauCommand extends BasicCommand {
|
|||||||
for(ServerInfo info : ProxyServer.getInstance().getServers().values()){
|
for(ServerInfo info : ProxyServer.getInstance().getServers().values()){
|
||||||
Subserver server = Subserver.getSubserver(info);
|
Subserver server = Subserver.getSubserver(info);
|
||||||
if(server != null && server.getType() == Servertype.BAUSERVER && ((Bauserver)server).getOwner().equals(p.getUniqueId())){
|
if(server != null && server.getType() == Servertype.BAUSERVER && ((Bauserver)server).getOwner().equals(p.getUniqueId())){
|
||||||
info.getPlayers().stream().findAny().ifPresent(player -> new BaumemberUpdatePacket().send(player));
|
info.getPlayers().stream().findAny().ifPresent(player -> NetworkSender.send(player, new BaumemberUpdatePacket()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -231,7 +234,7 @@ public class BauCommand extends BasicCommand {
|
|||||||
private static void delete(ProxiedPlayer p, String[] args){
|
private static void delete(ProxiedPlayer p, String[] args){
|
||||||
SteamwarUser user = SteamwarUser.get(p.getUniqueId());
|
SteamwarUser user = SteamwarUser.get(p.getUniqueId());
|
||||||
versionSelector(p, args, 1,
|
versionSelector(p, args, 1,
|
||||||
() -> deleteConfirmation(p, () -> deleteWorld(p, ServerStarter.WORLDS18_PATH + user.getId())),
|
() -> deleteConfirmation(p, () -> deleteWorld(p, ServerStarter.WORLDS19_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(ChatSender.of(p)));
|
() -> HelpCommand.sendBauHelp(ChatSender.of(p)));
|
||||||
|
@ -31,6 +31,7 @@ import net.md_5.bungee.UserConnection;
|
|||||||
import net.md_5.bungee.api.ChatColor;
|
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.ProxyServer;
|
||||||
|
import net.md_5.bungee.api.ServerConnectRequest;
|
||||||
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;
|
||||||
import net.md_5.bungee.api.chat.HoverEvent;
|
import net.md_5.bungee.api.chat.HoverEvent;
|
||||||
@ -565,6 +566,11 @@ public class TeamCommand extends BasicCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void tp(ProxiedPlayer player, SteamwarUser user, Team team, String[] args){
|
private void tp(ProxiedPlayer player, SteamwarUser user, Team team, String[] args){
|
||||||
|
if (!user.getUserGroup().isAdminGroup()) {
|
||||||
|
Message.send("DISABLED", player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(args.length == 1){
|
if(args.length == 1){
|
||||||
if(notInTeam(player, user))
|
if(notInTeam(player, user))
|
||||||
return;
|
return;
|
||||||
@ -590,14 +596,32 @@ public class TeamCommand extends BasicCommand {
|
|||||||
ProxyServer.getInstance().getServers().put(info.getName(), info);
|
ProxyServer.getInstance().getServers().put(info.getName(), info);
|
||||||
return info;
|
return info;
|
||||||
});
|
});
|
||||||
|
player.connect(ServerConnectRequest.builder()
|
||||||
|
.target(serverInfo)
|
||||||
|
.connectTimeout(BungeeCord.getInstance().getConfig().getServerConnectTimeout())
|
||||||
|
.retry(false)
|
||||||
|
.reason(ServerConnectEvent.Reason.PLUGIN)
|
||||||
|
.callback((success, error) -> {
|
||||||
|
if (error != null) {
|
||||||
|
Message.send("TEAM_OFFLINE", player);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.build());
|
||||||
|
/*
|
||||||
((UserConnection) player).connect(serverInfo, (success, error) -> {
|
((UserConnection) player).connect(serverInfo, (success, error) -> {
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
Message.send("TEAM_OFFLINE", player);
|
Message.send("TEAM_OFFLINE", player);
|
||||||
}
|
}
|
||||||
}, false, ServerConnectEvent.Reason.PLUGIN, BungeeCord.getInstance().getConfig().getServerConnectTimeout(), false);
|
}, false, ServerConnectEvent.Reason.PLUGIN, BungeeCord.getInstance().getConfig().getServerConnectTimeout(), false);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
private void server(ProxiedPlayer player, SteamwarUser user, Team team, String[] args){
|
private void server(ProxiedPlayer player, SteamwarUser user, Team team, String[] args){
|
||||||
|
if (!user.getUserGroup().isAdminGroup()) {
|
||||||
|
Message.send("DISABLED", player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(notLeader(player, user, team))
|
if(notLeader(player, user, team))
|
||||||
return;
|
return;
|
||||||
if (user.isPunishedWithMessage(ChatSender.of(player), Punishment.PunishmentType.NoTeamServer)) {
|
if (user.isPunishedWithMessage(ChatSender.of(player), Punishment.PunishmentType.NoTeamServer)) {
|
||||||
|
@ -21,6 +21,7 @@ package de.steamwar.bungeecore.commands;
|
|||||||
|
|
||||||
import de.steamwar.bungeecore.*;
|
import de.steamwar.bungeecore.*;
|
||||||
import de.steamwar.bungeecore.sql.*;
|
import de.steamwar.bungeecore.sql.*;
|
||||||
|
import de.steamwar.bungeecore.util.Chat19;
|
||||||
import de.steamwar.messages.ChatSender;
|
import de.steamwar.messages.ChatSender;
|
||||||
import net.md_5.bungee.BungeeCord;
|
import net.md_5.bungee.BungeeCord;
|
||||||
import net.md_5.bungee.api.CommandSender;
|
import net.md_5.bungee.api.CommandSender;
|
||||||
@ -55,7 +56,7 @@ public class TpCommand extends BasicCommand {
|
|||||||
|
|
||||||
//Give control of teleport command to server
|
//Give control of teleport command to server
|
||||||
if(server == null) {
|
if(server == null) {
|
||||||
player.chat("/tp " + String.join(" ", args));
|
Chat19.chat(player, "/tp " + String.join(" ", args));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,6 +103,9 @@ public class WhoisCommand extends BasicCommand {
|
|||||||
if (!all && !punishment.getType().isMulti() && !found.add(punishment.getType())) {
|
if (!all && !punishment.getType().isMulti() && !found.add(punishment.getType())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (!all && !punishment.isCurrent()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
Message.sendPrefixless("WHOIS_PUNISHMENT", player, SteamwarUser.get(punishment.getPunisher()).getUserName(), punishment.getType().name(), punishment.getBantime(punishment.getStartTime(), false), punishment.getBantime(punishment.getEndTime(), punishment.isPerma()), punishment.getReason());
|
Message.sendPrefixless("WHOIS_PUNISHMENT", player, SteamwarUser.get(punishment.getPunisher()).getUserName(), punishment.getType().name(), punishment.getBantime(punishment.getStartTime(), false), punishment.getBantime(punishment.getEndTime(), punishment.isPerma()), punishment.getReason());
|
||||||
isPunished = true;
|
isPunished = true;
|
||||||
}
|
}
|
||||||
|
@ -1,47 +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.comms;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
|
||||||
import com.google.common.io.ByteStreams;
|
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
|
||||||
import net.md_5.bungee.api.connection.Server;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
|
|
||||||
public abstract class BungeePacket {
|
|
||||||
|
|
||||||
public void send(Server server) {
|
|
||||||
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
|
||||||
out.writeByte(getId());
|
|
||||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
|
||||||
writeVars(out);
|
|
||||||
out.writeUTF(outputStream.toByteArray().toString());
|
|
||||||
server.sendData("sw:bridge", out.toByteArray());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void send(ProxiedPlayer player) {
|
|
||||||
send(player.getServer());
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract int getId();
|
|
||||||
|
|
||||||
public abstract void writeVars(ByteArrayDataOutput byteArrayDataOutput);
|
|
||||||
}
|
|
@ -1,43 +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.comms;
|
|
||||||
|
|
||||||
public class PacketIdManager {
|
|
||||||
|
|
||||||
//0x0(X) Standalone Packets
|
|
||||||
public static final byte PING_PACKET = 0x01;
|
|
||||||
public static final byte TABLIST_NAME = 0x02;
|
|
||||||
public static final byte PREPARE_SCHEM = 0x03;
|
|
||||||
public static final byte BAUMEMBER_UPDATE = 0x04;
|
|
||||||
public static final byte EXECUTE_COMMAND = 0x05;
|
|
||||||
|
|
||||||
public static final byte LOCALE_INVALIDATION = 0x06;
|
|
||||||
|
|
||||||
//0x1(X) Bungee Inventory
|
|
||||||
public static final byte INVENTORY_PACKET = 0x10;
|
|
||||||
public static final byte INVENTORY_CALLBACK_PACKET = 0x11;
|
|
||||||
public static final byte INVENTORY_CLOSE_PACKET = 0x12;
|
|
||||||
|
|
||||||
//0x2(X) Server Information System
|
|
||||||
public static final byte I_AM_A_LOBBY = 0x20;
|
|
||||||
public static final byte FIGHT_INFO = 0x21;
|
|
||||||
public static final byte FIGHT_ENDS = 0x22;
|
|
||||||
public static final byte STARTING_SERVER = 0x23;
|
|
||||||
}
|
|
@ -1,28 +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.comms;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
|
||||||
import net.md_5.bungee.api.config.ServerInfo;
|
|
||||||
|
|
||||||
public interface SpigotHandler {
|
|
||||||
|
|
||||||
void handle(ByteArrayDataInput in, ServerInfo info);
|
|
||||||
}
|
|
@ -1,66 +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.comms;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
|
||||||
import com.google.common.io.ByteStreams;
|
|
||||||
import de.steamwar.bungeecore.BungeeCore;
|
|
||||||
import de.steamwar.bungeecore.comms.handlers.*;
|
|
||||||
import de.steamwar.bungeecore.listeners.BasicListener;
|
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
|
||||||
import net.md_5.bungee.api.connection.Server;
|
|
||||||
import net.md_5.bungee.api.event.PluginMessageEvent;
|
|
||||||
import net.md_5.bungee.event.EventHandler;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class SpigotReceiver extends BasicListener {
|
|
||||||
|
|
||||||
private static final Map<Byte, SpigotHandler> handlerMap = new HashMap<>();
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onPluginMessage(PluginMessageEvent event) {
|
|
||||||
if(!event.getTag().equalsIgnoreCase("sw:bridge"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
event.setCancelled(true);
|
|
||||||
if(!(event.getSender() instanceof Server))
|
|
||||||
return;
|
|
||||||
|
|
||||||
ByteArrayDataInput in = ByteStreams.newDataInput(event.getData());
|
|
||||||
Byte handler = in.readByte();
|
|
||||||
ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.get(), () -> handlerMap.get(handler).handle(in, ((Server) event.getSender()).getInfo()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void registerHandler(Byte id, SpigotHandler handler) {
|
|
||||||
handlerMap.put(id, handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
|
||||||
registerHandler(PacketIdManager.INVENTORY_CALLBACK_PACKET, new InventoryCallbackHandler());
|
|
||||||
registerHandler(PacketIdManager.TABLIST_NAME, (in, info) -> {});
|
|
||||||
registerHandler(PacketIdManager.PREPARE_SCHEM, new PrepareSchemHandler());
|
|
||||||
registerHandler(PacketIdManager.I_AM_A_LOBBY, new ImALobbyHandler());
|
|
||||||
registerHandler(PacketIdManager.FIGHT_INFO, new FightInfoHandler());
|
|
||||||
registerHandler(PacketIdManager.EXECUTE_COMMAND, new ExecuteCommandHandler());
|
|
||||||
registerHandler(PacketIdManager.FIGHT_ENDS, new FightEndsHandler());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,36 +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.comms.packets;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
|
||||||
import de.steamwar.bungeecore.comms.BungeePacket;
|
|
||||||
import de.steamwar.bungeecore.comms.PacketIdManager;
|
|
||||||
|
|
||||||
public class BaumemberUpdatePacket extends BungeePacket {
|
|
||||||
@Override
|
|
||||||
public int getId() {
|
|
||||||
return PacketIdManager.BAUMEMBER_UPDATE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeVars(ByteArrayDataOutput byteArrayDataOutput) {
|
|
||||||
// empty
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,43 +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.comms.packets;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
|
||||||
import de.steamwar.bungeecore.comms.BungeePacket;
|
|
||||||
import de.steamwar.bungeecore.comms.PacketIdManager;
|
|
||||||
|
|
||||||
public class CloseInventoryPacket extends BungeePacket {
|
|
||||||
|
|
||||||
final int player;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getId() {
|
|
||||||
return PacketIdManager.INVENTORY_CLOSE_PACKET;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CloseInventoryPacket(int player) {
|
|
||||||
this.player = player;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeVars(ByteArrayDataOutput byteArrayDataOutput) {
|
|
||||||
byteArrayDataOutput.writeInt(player);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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.comms.packets;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
|
||||||
import de.steamwar.bungeecore.comms.BungeePacket;
|
|
||||||
import de.steamwar.bungeecore.comms.PacketIdManager;
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
public class FightEndsPacket extends BungeePacket {
|
|
||||||
|
|
||||||
private byte win;
|
|
||||||
private int blueSchem;
|
|
||||||
private int redSchem;
|
|
||||||
private List<Integer> bluePlayers;
|
|
||||||
private List<Integer> redPlayers;
|
|
||||||
private String gameMode;
|
|
||||||
|
|
||||||
public FightEndsPacket(ByteArrayDataInput byteArrayDataInput) {
|
|
||||||
win = byteArrayDataInput.readByte();
|
|
||||||
blueSchem = byteArrayDataInput.readInt();
|
|
||||||
redSchem = byteArrayDataInput.readInt();
|
|
||||||
int blueSize = byteArrayDataInput.readInt();
|
|
||||||
bluePlayers = new ArrayList<>(blueSize);
|
|
||||||
for (int i = 0; i < blueSize; i++) {
|
|
||||||
bluePlayers.add(byteArrayDataInput.readInt());
|
|
||||||
}
|
|
||||||
int redSize = byteArrayDataInput.readInt();
|
|
||||||
redPlayers = new ArrayList<>(redSize);
|
|
||||||
for (int i = 0; i < redSize; i++) {
|
|
||||||
redPlayers.add(byteArrayDataInput.readInt());
|
|
||||||
}
|
|
||||||
gameMode = byteArrayDataInput.readUTF();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getId() {
|
|
||||||
return PacketIdManager.FIGHT_ENDS;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeVars(ByteArrayDataOutput byteArrayDataOutput) {
|
|
||||||
byteArrayDataOutput.writeByte(win);
|
|
||||||
byteArrayDataOutput.writeInt(blueSchem);
|
|
||||||
byteArrayDataOutput.writeInt(redSchem);
|
|
||||||
byteArrayDataOutput.writeInt(bluePlayers.size());
|
|
||||||
for (int i : bluePlayers) {
|
|
||||||
byteArrayDataOutput.writeInt(i);
|
|
||||||
}
|
|
||||||
byteArrayDataOutput.writeInt(redPlayers.size());
|
|
||||||
for (int i : redPlayers) {
|
|
||||||
byteArrayDataOutput.writeInt(i);
|
|
||||||
}
|
|
||||||
byteArrayDataOutput.writeUTF(gameMode);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,183 +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.comms.packets;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
|
||||||
import de.steamwar.bungeecore.comms.BungeePacket;
|
|
||||||
import de.steamwar.bungeecore.comms.PacketIdManager;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class FightInfoPacket extends BungeePacket {
|
|
||||||
|
|
||||||
private String serverName; // Name of the Server
|
|
||||||
private final String gameMode; // GameMode aka Schematictype (if known, else "")
|
|
||||||
private final String arena; // Name of the arena
|
|
||||||
private final String blueName; // Name of the blue team, expected to begin with "§a" colorcode
|
|
||||||
private final String redName; // Name of the red team, expected to begin with "§a" colorcode
|
|
||||||
private final String fightState; // Fight state (technical term) (if known, else "")
|
|
||||||
private final int countdown; // Countdown state in seconds (if known, else 0)
|
|
||||||
private final int blueLeader; // SWUserID of the blue team leader (if known, else 0)
|
|
||||||
private final int redLeader; // SWUserID of the red team leader (if known, else 0)
|
|
||||||
private final int blueSchem; // Blue SchemID (if known, else 0)
|
|
||||||
private final int redSchem; // Red SchemID (if known, else 0)
|
|
||||||
private final List<Integer> bluePlayers; // List of Blue SWUserIDs
|
|
||||||
private final List<Integer> redPlayers; // List of Red SWUserIDs
|
|
||||||
private final List<Integer> spectators; // List of Spectator SWUserIDs
|
|
||||||
|
|
||||||
public FightInfoPacket(String serverName, String gameMode, String arena, String blueName, String redName, String fightState, int countdown, int blueLeader, int redLeader, int blueSchem, int redSchem, List<Integer> bluePlayers, List<Integer> redPlayers, List<Integer> spectators) {
|
|
||||||
this.serverName = serverName;
|
|
||||||
this.gameMode = gameMode;
|
|
||||||
this.arena = arena;
|
|
||||||
this.blueName = blueName;
|
|
||||||
this.redName = redName;
|
|
||||||
this.fightState = fightState;
|
|
||||||
this.countdown = countdown;
|
|
||||||
this.blueLeader = blueLeader;
|
|
||||||
this.redLeader = redLeader;
|
|
||||||
this.blueSchem = blueSchem;
|
|
||||||
this.redSchem = redSchem;
|
|
||||||
this.bluePlayers = bluePlayers;
|
|
||||||
this.redPlayers = redPlayers;
|
|
||||||
this.spectators = spectators;
|
|
||||||
}
|
|
||||||
|
|
||||||
public FightInfoPacket(ByteArrayDataInput in) {
|
|
||||||
this.serverName = in.readUTF();
|
|
||||||
this.gameMode = in.readUTF();
|
|
||||||
this.arena = in.readUTF();
|
|
||||||
this.blueName = in.readUTF();
|
|
||||||
this.redName = in.readUTF();
|
|
||||||
this.fightState = in.readUTF();
|
|
||||||
this.countdown = in.readInt();
|
|
||||||
this.blueLeader = in.readInt();
|
|
||||||
this.redLeader = in.readInt();
|
|
||||||
this.blueSchem = in.readInt();
|
|
||||||
this.redSchem = in.readInt();
|
|
||||||
this.bluePlayers = readPlayerList(in);
|
|
||||||
this.redPlayers = readPlayerList(in);
|
|
||||||
this.spectators = readPlayerList(in);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getId() {
|
|
||||||
return PacketIdManager.FIGHT_INFO;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeVars(ByteArrayDataOutput out) {
|
|
||||||
out.writeUTF(serverName);
|
|
||||||
out.writeUTF(gameMode);
|
|
||||||
out.writeUTF(arena);
|
|
||||||
out.writeUTF(blueName);
|
|
||||||
out.writeUTF(redName);
|
|
||||||
out.writeUTF(fightState);
|
|
||||||
out.writeInt(countdown);
|
|
||||||
out.writeInt(blueLeader);
|
|
||||||
out.writeInt(redLeader);
|
|
||||||
out.writeInt(blueSchem);
|
|
||||||
out.writeInt(redSchem);
|
|
||||||
writePlayerList(out, bluePlayers);
|
|
||||||
writePlayerList(out, redPlayers);
|
|
||||||
writePlayerList(out, spectators);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getServerName() {
|
|
||||||
return serverName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setServerName(String serverName) {
|
|
||||||
this.serverName = serverName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getGameMode() {
|
|
||||||
return gameMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getArena() {
|
|
||||||
return arena;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getBlueName() {
|
|
||||||
return blueName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRedName() {
|
|
||||||
return redName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFightState() {
|
|
||||||
return fightState;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCountdown() {
|
|
||||||
return countdown;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getBlueLeader() {
|
|
||||||
return blueLeader;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getRedLeader() {
|
|
||||||
return redLeader;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getBlueSchem() {
|
|
||||||
return blueSchem;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getRedSchem() {
|
|
||||||
return redSchem;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Integer> getBluePlayers() {
|
|
||||||
return bluePlayers;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Integer> getRedPlayers() {
|
|
||||||
return redPlayers;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Integer> getSpectators() {
|
|
||||||
return spectators;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int playerSize(){
|
|
||||||
return bluePlayers.size() + redPlayers.size() + spectators.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<Integer> readPlayerList(ByteArrayDataInput in) {
|
|
||||||
int length = in.readInt();
|
|
||||||
List<Integer> players = new ArrayList<>(length);
|
|
||||||
for(int i = 0; i < length; i++) {
|
|
||||||
players.add(in.readInt());
|
|
||||||
}
|
|
||||||
return players;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writePlayerList(ByteArrayDataOutput out, List<Integer> players) {
|
|
||||||
out.writeInt(players.size());
|
|
||||||
for(Integer player : players) {
|
|
||||||
out.writeInt(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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.comms.packets;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
|
||||||
import com.google.gson.JsonArray;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import de.steamwar.bungeecore.comms.PacketIdManager;
|
|
||||||
import de.steamwar.bungeecore.inventory.SWInventory;
|
|
||||||
import de.steamwar.bungeecore.inventory.SWItem;
|
|
||||||
import de.steamwar.bungeecore.comms.BungeePacket;
|
|
||||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class InventoryPacket extends BungeePacket {
|
|
||||||
|
|
||||||
final String title;
|
|
||||||
final int player;
|
|
||||||
final int size;
|
|
||||||
final Map<Integer, SWItem> items;
|
|
||||||
|
|
||||||
public InventoryPacket(int size, String title, ProxiedPlayer player) {
|
|
||||||
items = new HashMap<>();
|
|
||||||
this.title = title;
|
|
||||||
this.size = size;
|
|
||||||
this.player = SteamwarUser.get(player).getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public InventoryPacket(SWInventory inventory) {
|
|
||||||
items = inventory.getItems();
|
|
||||||
this.title = inventory.getTitle();
|
|
||||||
this.size = inventory.getSize();
|
|
||||||
this.player = SteamwarUser.get(inventory.getPlayer()).getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getId() {
|
|
||||||
return PacketIdManager.INVENTORY_PACKET;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeVars(ByteArrayDataOutput byteArrayDataOutput) {
|
|
||||||
JsonObject object = new JsonObject();
|
|
||||||
object.addProperty("id", player);
|
|
||||||
object.addProperty("title", title);
|
|
||||||
object.addProperty("size", size);
|
|
||||||
object.addProperty("itemcount", items.size());
|
|
||||||
JsonArray array = new JsonArray();
|
|
||||||
for (int i = 0; i < size; i++) {
|
|
||||||
if(items.get(i) != null)
|
|
||||||
array.add(items.get(i).writeToString(i));
|
|
||||||
}
|
|
||||||
object.add("items", array);
|
|
||||||
byteArrayDataOutput.writeUTF(object.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setItem(int index, SWItem item) {
|
|
||||||
items.put(index, item);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,43 +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.comms.packets;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
|
||||||
import de.steamwar.bungeecore.comms.BungeePacket;
|
|
||||||
import de.steamwar.bungeecore.comms.PacketIdManager;
|
|
||||||
|
|
||||||
public class PingPacket extends BungeePacket {
|
|
||||||
|
|
||||||
final int id;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getId() {
|
|
||||||
return PacketIdManager.PING_PACKET;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PingPacket(int id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeVars(ByteArrayDataOutput byteArrayDataOutput) {
|
|
||||||
byteArrayDataOutput.writeInt(id);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
package de.steamwar.bungeecore.comms.packets;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
|
||||||
import de.steamwar.bungeecore.comms.BungeePacket;
|
|
||||||
import de.steamwar.bungeecore.comms.PacketIdManager;
|
|
||||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
|
||||||
|
|
||||||
public class StartingServerPacket extends BungeePacket {
|
|
||||||
|
|
||||||
private final int user;
|
|
||||||
|
|
||||||
public StartingServerPacket(SteamwarUser user) {
|
|
||||||
this.user = user.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getId() {
|
|
||||||
return PacketIdManager.STARTING_SERVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeVars(ByteArrayDataOutput out) {
|
|
||||||
out.writeInt(user);
|
|
||||||
}
|
|
||||||
}
|
|
@ -19,10 +19,11 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore.inventory;
|
package de.steamwar.bungeecore.inventory;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.comms.handlers.InventoryCallbackHandler;
|
import de.steamwar.bungeecore.network.NetworkSender;
|
||||||
import de.steamwar.bungeecore.comms.packets.CloseInventoryPacket;
|
import de.steamwar.bungeecore.network.handlers.InventoryCallbackHandler;
|
||||||
import de.steamwar.bungeecore.comms.packets.InventoryPacket;
|
|
||||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
import de.steamwar.bungeecore.sql.SteamwarUser;
|
||||||
|
import de.steamwar.network.packets.server.CloseInventoryPacket;
|
||||||
|
import de.steamwar.network.packets.server.InventoryPacket;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -30,6 +31,7 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
public class SWInventory {
|
public class SWInventory {
|
||||||
|
|
||||||
@ -120,8 +122,14 @@ public class SWInventory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void open() {
|
public void open() {
|
||||||
InventoryPacket inv = new InventoryPacket(this);
|
InventoryPacket inv = new InventoryPacket(title, SteamwarUser.get(player).getId(), size, map(itemMap, (integer, swItem) -> swItem.writeToString(integer).getAsString()));
|
||||||
inv.send(player);
|
NetworkSender.send(player, inv);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static <T, K, J> Map<T, J> map(Map<T, K> map, BiFunction<T, K, J> function) {
|
||||||
|
Map<T, J> result = new HashMap<>();
|
||||||
|
map.forEach((key, value) -> result.put(key, function.apply(key, value)));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close() {
|
public void close() {
|
||||||
@ -129,7 +137,7 @@ public class SWInventory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void close(ProxiedPlayer player) {
|
public static void close(ProxiedPlayer player) {
|
||||||
new CloseInventoryPacket(SteamwarUser.get(player).getId()).send(player);
|
NetworkSender.send(player, new CloseInventoryPacket(SteamwarUser.get(player).getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setClose(InvCallback close) {
|
public void setClose(InvCallback close) {
|
||||||
|
@ -50,6 +50,7 @@ public class BanListener extends BasicListener {
|
|||||||
user.updateBanIP(event.getConnection().getAddress().getAddress().getHostAddress());
|
user.updateBanIP(event.getConnection().getAddress().getAddress().getHostAddress());
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
ChatSender.of(event).system(user.punishmentMessage(Punishment.PunishmentType.Ban));
|
ChatSender.of(event).system(user.punishmentMessage(Punishment.PunishmentType.Ban));
|
||||||
|
event.completeIntent(BungeeCore.get());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,9 +21,11 @@ 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.comms.packets.PingPacket;
|
import de.steamwar.bungeecore.network.NetworkSender;
|
||||||
import de.steamwar.bungeecore.sql.*;
|
import de.steamwar.bungeecore.sql.*;
|
||||||
|
import de.steamwar.bungeecore.util.Chat19;
|
||||||
import de.steamwar.messages.ChatSender;
|
import de.steamwar.messages.ChatSender;
|
||||||
|
import de.steamwar.network.packets.server.PingPacket;
|
||||||
import net.md_5.bungee.api.*;
|
import net.md_5.bungee.api.*;
|
||||||
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;
|
||||||
@ -123,7 +125,7 @@ public class ChatListener extends BasicListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
player.chat(message);
|
Chat19.chat(player, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String modifyFilter(ChatSender sender, String message) {
|
private static String modifyFilter(ChatSender sender, String message) {
|
||||||
@ -202,7 +204,7 @@ public class ChatListener extends BasicListener {
|
|||||||
String mark = "@" + player.user().getUserName();
|
String mark = "@" + player.user().getUserName();
|
||||||
return Arrays.stream(message.split(" ")).map(cur -> {
|
return Arrays.stream(message.split(" ")).map(cur -> {
|
||||||
if(cur.equalsIgnoreCase(mark)) {
|
if(cur.equalsIgnoreCase(mark)) {
|
||||||
new PingPacket(player.user().getId()).send(player.user().getPlayer());
|
NetworkSender.send(player.user().getPlayer(), new PingPacket(player.user().getId()));
|
||||||
return "§e" + cur + returnColor;
|
return "§e" + cur + returnColor;
|
||||||
}
|
}
|
||||||
return cur;
|
return cur;
|
||||||
|
@ -26,15 +26,13 @@ import net.md_5.bungee.api.connection.ProxiedPlayer;
|
|||||||
import net.md_5.bungee.api.event.SettingsChangedEvent;
|
import net.md_5.bungee.api.event.SettingsChangedEvent;
|
||||||
import net.md_5.bungee.event.EventHandler;
|
import net.md_5.bungee.event.EventHandler;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class SettingsChangedListener extends BasicListener {
|
public class SettingsChangedListener extends BasicListener {
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onSettingsChanged(SettingsChangedEvent event) {
|
public void onSettingsChanged(SettingsChangedEvent event) {
|
||||||
BungeeCord.getInstance().getScheduler().runAsync(BungeeCore.get(), () -> {
|
BungeeCord.getInstance().getScheduler().runAsync(BungeeCore.get(), () -> {
|
||||||
ProxiedPlayer player = event.getPlayer();
|
ProxiedPlayer player = event.getPlayer();
|
||||||
SteamwarUser.get(player).setLocale(Objects.requireNonNull(player.getLocale()), false);
|
SteamwarUser.get(player).setLocale(player.getLocale(), false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,12 +19,12 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore.listeners;
|
package de.steamwar.bungeecore.listeners;
|
||||||
|
|
||||||
import io.github.waterfallmc.waterfall.utils.UUIDUtils;
|
|
||||||
import net.md_5.bungee.BungeeCord;
|
import net.md_5.bungee.BungeeCord;
|
||||||
import net.md_5.bungee.api.event.LoginEvent;
|
import net.md_5.bungee.api.event.LoginEvent;
|
||||||
import net.md_5.bungee.connection.InitialHandler;
|
import net.md_5.bungee.connection.InitialHandler;
|
||||||
import net.md_5.bungee.connection.LoginResult;
|
import net.md_5.bungee.connection.LoginResult;
|
||||||
import net.md_5.bungee.event.EventHandler;
|
import net.md_5.bungee.event.EventHandler;
|
||||||
|
import net.md_5.bungee.protocol.Property;
|
||||||
import net.md_5.bungee.util.AddressUtil;
|
import net.md_5.bungee.util.AddressUtil;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
@ -49,12 +49,19 @@ public class SubserverProtocolFixer extends BasicListener {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void loginEvent(LoginEvent e) {
|
public void loginEvent(LoginEvent e) {
|
||||||
InitialHandler initialHandler = ((InitialHandler) e.getConnection());
|
InitialHandler initialHandler = ((InitialHandler) e.getConnection());
|
||||||
LoginResult.Property[] properties = initialHandler.getLoginProfile().getProperties();
|
|
||||||
try {
|
String undashedUUID = initialHandler.getUniqueId().toString().replace("-", "");
|
||||||
String extraData = "\00" + AddressUtil.sanitizeAddress(inetSocketAddress) + "\00" + UUIDUtils.undash(initialHandler.getUniqueId().toString());
|
String extraData = "\00" + AddressUtil.sanitizeAddress(inetSocketAddress) + "\00" + undashedUUID;
|
||||||
|
|
||||||
|
LoginResult result = initialHandler.getLoginProfile();
|
||||||
|
if (result != null) {
|
||||||
|
Property[] properties = result.getProperties();
|
||||||
if (properties.length > 0) {
|
if (properties.length > 0) {
|
||||||
extraData += "\00" + BungeeCord.getInstance().gson.toJson(properties);
|
extraData += "\00" + BungeeCord.getInstance().gson.toJson(properties);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
field.set(initialHandler, extraData);
|
field.set(initialHandler, extraData);
|
||||||
} catch (IllegalAccessException ex) {
|
} catch (IllegalAccessException ex) {
|
||||||
BungeeCord.getInstance().getLogger().log(Level.SEVERE, ex.getMessage(), ex);
|
BungeeCord.getInstance().getLogger().log(Level.SEVERE, ex.getMessage(), ex);
|
||||||
|
@ -26,9 +26,10 @@ import de.steamwar.bungeecore.BungeeCore;
|
|||||||
import de.steamwar.bungeecore.Message;
|
import de.steamwar.bungeecore.Message;
|
||||||
import de.steamwar.bungeecore.Servertype;
|
import de.steamwar.bungeecore.Servertype;
|
||||||
import de.steamwar.bungeecore.Subserver;
|
import de.steamwar.bungeecore.Subserver;
|
||||||
import de.steamwar.bungeecore.comms.packets.FightInfoPacket;
|
|
||||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
import de.steamwar.bungeecore.sql.SteamwarUser;
|
||||||
import de.steamwar.bungeecore.sql.UserGroup;
|
import de.steamwar.bungeecore.sql.UserGroup;
|
||||||
|
import net.md_5.bungee.BungeeCord;
|
||||||
|
import de.steamwar.network.packets.common.FightInfoPacket;
|
||||||
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;
|
||||||
@ -48,7 +49,11 @@ public class TablistManager extends BasicListener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public synchronized void onJoin(PostLoginEvent e){
|
public synchronized void onJoin(PostLoginEvent e){
|
||||||
tablists.put(e.getPlayer(), new Tablist(e.getPlayer()));
|
BungeeCord.getInstance().getScheduler().schedule(BungeeCore.get(), () -> {
|
||||||
|
if (e.getPlayer().isConnected()) {
|
||||||
|
tablists.put(e.getPlayer(), new Tablist(e.getPlayer()));
|
||||||
|
}
|
||||||
|
}, 1, TimeUnit.SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -88,7 +93,7 @@ public class TablistManager extends BasicListener {
|
|||||||
//Calculate server-player-map
|
//Calculate server-player-map
|
||||||
tablist = new TablistGroup(true, "");
|
tablist = new TablistGroup(true, "");
|
||||||
TablistGroup bau = new TablistGroup(false, "Bau");
|
TablistGroup bau = new TablistGroup(false, "Bau");
|
||||||
for (ServerInfo server : ProxyServer.getInstance().getServersCopy().values()){
|
for (ServerInfo server : new ArrayList<>(ProxyServer.getInstance().getServers().values())){
|
||||||
if(server.getPlayers().isEmpty())
|
if(server.getPlayers().isEmpty())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ import java.nio.charset.UnsupportedCharsetException;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class Fabric extends BasicListener {
|
public class Fabric extends BasicListener {
|
||||||
|
|
||||||
@ -59,7 +60,7 @@ public class Fabric extends BasicListener {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (System.currentTimeMillis() - entry.getValue() > TimeUnit.SECONDS.toMillis(20)) {
|
if (System.currentTimeMillis() - entry.getValue() > TimeUnit.SECONDS.toMillis(20)) {
|
||||||
banPlayer(SteamwarUser.get(entry.getKey()), entry.getKey());
|
banPlayer(SteamwarUser.get(entry.getKey()), entry.getKey(), "Expected message not received");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -82,7 +83,7 @@ public class Fabric extends BasicListener {
|
|||||||
if (!Storage.fabricCheckedPlayers.containsKey(player)) {
|
if (!Storage.fabricCheckedPlayers.containsKey(player)) {
|
||||||
synchronized (Storage.fabricExpectPluginMessage) {
|
synchronized (Storage.fabricExpectPluginMessage) {
|
||||||
if (Storage.fabricExpectPluginMessage.containsKey(player)) {
|
if (Storage.fabricExpectPluginMessage.containsKey(player)) {
|
||||||
banPlayer(user, player);
|
banPlayer(user, player, "Was not fabric checked but send message nonetheless");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,7 +96,7 @@ public class Fabric extends BasicListener {
|
|||||||
Utils.VarInt varInt = Utils.readVarInt(data,0);
|
Utils.VarInt varInt = Utils.readVarInt(data,0);
|
||||||
|
|
||||||
if(data.length != varInt.length + varInt.value) {
|
if(data.length != varInt.length + varInt.value) {
|
||||||
banPlayer(user,player);
|
banPlayer(user,player, "Invalid message length");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,7 +107,7 @@ public class Fabric extends BasicListener {
|
|||||||
try{
|
try{
|
||||||
dataString = new String(data, StandardCharsets.UTF_8);
|
dataString = new String(data, StandardCharsets.UTF_8);
|
||||||
}catch (UnsupportedCharsetException exception) {
|
}catch (UnsupportedCharsetException exception) {
|
||||||
banPlayer(user, player);
|
banPlayer(user, player, "Unsupported charset");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,7 +116,7 @@ public class Fabric extends BasicListener {
|
|||||||
try {
|
try {
|
||||||
array = new JsonParser().parse(dataString).getAsJsonArray();
|
array = new JsonParser().parse(dataString).getAsJsonArray();
|
||||||
}catch (JsonSyntaxException exception) {
|
}catch (JsonSyntaxException exception) {
|
||||||
banPlayer(user, player);
|
banPlayer(user, player, "Invalid json");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,12 +127,12 @@ public class Fabric extends BasicListener {
|
|||||||
boolean isSorted = isSortedAlphabetically(mods);
|
boolean isSorted = isSortedAlphabetically(mods);
|
||||||
|
|
||||||
if(!isSorted) {
|
if(!isSorted) {
|
||||||
banPlayer(user, player);
|
banPlayer(user, player, "Mods are not sorted alphabetically: " + mods.stream().map(Mod::getModName).collect(Collectors.joining(", ")));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!neededModsContained(mods)) {
|
if(!neededModsContained(mods)) {
|
||||||
banPlayer(user, player);
|
banPlayer(user, player, "Needed mods are not contained");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +140,7 @@ public class Fabric extends BasicListener {
|
|||||||
if (Storage.fabricCheckedPlayers.containsKey(player)) {
|
if (Storage.fabricCheckedPlayers.containsKey(player)) {
|
||||||
long current = Storage.fabricCheckedPlayers.get(player);
|
long current = Storage.fabricCheckedPlayers.get(player);
|
||||||
if (current != dataString.hashCode()) {
|
if (current != dataString.hashCode()) {
|
||||||
banPlayer(user, player);
|
banPlayer(user, player, "");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -176,11 +177,11 @@ public class Fabric extends BasicListener {
|
|||||||
.count() == neededMods.size();
|
.count() == neededMods.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void banPlayer(SteamwarUser user, ProxiedPlayer player) {
|
public void banPlayer(SteamwarUser user, ProxiedPlayer player, String reason) {
|
||||||
user.punishPerma(Punishment.PunishmentType.Ban,
|
user.punishPerma(Punishment.PunishmentType.Ban,
|
||||||
Message.parse("MODIFICATION_BAN_MESSAGE", player, user.getUserName(), user.getId()),
|
Message.parse("MODIFICATION_BAN_MESSAGE", player, user.getUserName(), user.getId()),
|
||||||
0);
|
0);
|
||||||
BungeeCore.log(Level.SEVERE,Message.parse("MODIFICATION_BAN_LOG", player, user.getUserName()));
|
BungeeCore.log(Level.SEVERE,Message.parse("MODIFICATION_BAN_LOG", player, user.getUserName(), reason));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void remove(ProxiedPlayer player) {
|
public static void remove(ProxiedPlayer player) {
|
||||||
|
35
src/de/steamwar/bungeecore/network/BungeeNetworkHandler.java
Normale Datei
35
src/de/steamwar/bungeecore/network/BungeeNetworkHandler.java
Normale Datei
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* 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.network;
|
||||||
|
|
||||||
|
import de.steamwar.bungeecore.network.handlers.*;
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
|
|
||||||
|
@UtilityClass
|
||||||
|
public class BungeeNetworkHandler {
|
||||||
|
public static void register() {
|
||||||
|
new ExecuteCommandHandler().register();
|
||||||
|
new FightEndsHandler().register();
|
||||||
|
new FightInfoHandler().register();
|
||||||
|
new ImALobbyHandler().register();
|
||||||
|
new InventoryCallbackHandler().register();
|
||||||
|
new PrepareSchemHandler().register();
|
||||||
|
}
|
||||||
|
}
|
61
src/de/steamwar/bungeecore/network/NetworkReceiver.java
Normale Datei
61
src/de/steamwar/bungeecore/network/NetworkReceiver.java
Normale Datei
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* 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.network;
|
||||||
|
|
||||||
|
import de.steamwar.bungeecore.BungeeCore;
|
||||||
|
import de.steamwar.bungeecore.listeners.BasicListener;
|
||||||
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
|
import net.md_5.bungee.api.connection.Server;
|
||||||
|
import net.md_5.bungee.api.event.PluginMessageEvent;
|
||||||
|
import net.md_5.bungee.event.EventHandler;
|
||||||
|
import net.md_5.bungee.event.EventPriority;
|
||||||
|
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
public class NetworkReceiver extends BasicListener {
|
||||||
|
|
||||||
|
private static final List<String> blockedTags = Arrays.asList("bungeecord:main", "BungeeCord", "sw:bridge");
|
||||||
|
private static final List<String> allowedAddresses = Arrays.asList("localhost", "127.0.0.1", "0.0.0.0");
|
||||||
|
|
||||||
|
public static ServerInfo sender;
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
public synchronized void onPluginMessage(PluginMessageEvent event) {
|
||||||
|
if (blockedTags.contains(event.getTag()) && !allowedAddresses.contains(((InetSocketAddress) event.getSender().getSocketAddress()).getHostString())) {
|
||||||
|
BungeeCore.log(Level.SEVERE, ((InetSocketAddress) event.getSender().getSocketAddress()).getHostString() + " tried to send a plugin message with tag " + event.getTag());
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!event.getTag().equalsIgnoreCase("sw:bridge"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
event.setCancelled(true);
|
||||||
|
if(!(event.getSender() instanceof Server))
|
||||||
|
return;
|
||||||
|
|
||||||
|
sender = ((Server) event.getSender()).getInfo();
|
||||||
|
NetworkPacket.handle(event.getData());
|
||||||
|
sender = null;
|
||||||
|
}
|
||||||
|
}
|
@ -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
|
||||||
@ -17,27 +17,22 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.steamwar.bungeecore.comms.packets;
|
package de.steamwar.bungeecore.network;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
import de.steamwar.network.packets.NetworkPacket;
|
||||||
import de.steamwar.bungeecore.comms.BungeePacket;
|
import lombok.SneakyThrows;
|
||||||
import de.steamwar.bungeecore.comms.PacketIdManager;
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
public class LocaleInvalidationPacket extends BungeePacket {
|
public class NetworkSender {
|
||||||
|
|
||||||
private int userId;
|
@SneakyThrows
|
||||||
|
public static void send(ProxiedPlayer player, NetworkPacket packet) {
|
||||||
public LocaleInvalidationPacket(int userId) {
|
player.sendData("sw:bridge", packet.serialize());
|
||||||
this.userId = userId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public static void send(ServerInfo serverInfo, NetworkPacket packet) {
|
||||||
public int getId() {
|
ProxiedPlayer player = serverInfo.getPlayers().iterator().next();
|
||||||
return PacketIdManager.LOCALE_INVALIDATION;
|
send(player, packet);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeVars(ByteArrayDataOutput byteArrayDataOutput) {
|
|
||||||
byteArrayDataOutput.writeInt(userId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -17,19 +17,19 @@
|
|||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.steamwar.bungeecore.comms.handlers;
|
package de.steamwar.bungeecore.network.handlers;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
|
||||||
import de.steamwar.bungeecore.comms.SpigotHandler;
|
|
||||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
import de.steamwar.bungeecore.sql.SteamwarUser;
|
||||||
|
import de.steamwar.network.packets.PacketHandler;
|
||||||
|
import de.steamwar.network.packets.client.ExecuteCommandPacket;
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.config.ServerInfo;
|
|
||||||
|
|
||||||
public class ExecuteCommandHandler implements SpigotHandler {
|
public class ExecuteCommandHandler extends PacketHandler {
|
||||||
@Override
|
|
||||||
public void handle(ByteArrayDataInput in, ServerInfo info) {
|
@Handler
|
||||||
SteamwarUser target = SteamwarUser.get(in.readInt());
|
public void handle(ExecuteCommandPacket packet) {
|
||||||
String command = in.readUTF();
|
SteamwarUser target = SteamwarUser.get(packet.getPlayerId());
|
||||||
|
String command = packet.getCommand();
|
||||||
|
|
||||||
ProxyServer.getInstance().getPluginManager().dispatchCommand(ProxyServer.getInstance().getPlayer(target.getUuid()), command);
|
ProxyServer.getInstance().getPluginManager().dispatchCommand(ProxyServer.getInstance().getPlayer(target.getUuid()), command);
|
||||||
}
|
}
|
@ -17,20 +17,18 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.steamwar.bungeecore.comms.handlers;
|
package de.steamwar.bungeecore.network.handlers;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
|
||||||
import de.steamwar.bungeecore.ArenaMode;
|
import de.steamwar.bungeecore.ArenaMode;
|
||||||
import de.steamwar.bungeecore.comms.SpigotHandler;
|
|
||||||
import de.steamwar.bungeecore.comms.packets.FightEndsPacket;
|
|
||||||
import de.steamwar.bungeecore.sql.*;
|
import de.steamwar.bungeecore.sql.*;
|
||||||
|
import de.steamwar.network.packets.PacketHandler;
|
||||||
|
import de.steamwar.network.packets.common.FightEndsPacket;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import net.md_5.bungee.api.config.ServerInfo;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class FightEndsHandler implements SpigotHandler {
|
public class FightEndsHandler extends PacketHandler {
|
||||||
|
|
||||||
private Map<String, LinkedList<Game>> gameModeGames = new HashMap<>();
|
private Map<String, LinkedList<Game>> gameModeGames = new HashMap<>();
|
||||||
|
|
||||||
@ -46,10 +44,8 @@ public class FightEndsHandler implements SpigotHandler {
|
|||||||
fightCounts.put("miniwargear", 3L);
|
fightCounts.put("miniwargear", 3L);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Handler
|
||||||
public void handle(ByteArrayDataInput in, ServerInfo info) {
|
public void handle(FightEndsPacket fightEndsPacket) {
|
||||||
FightEndsPacket fightEndsPacket = new FightEndsPacket(in);
|
|
||||||
|
|
||||||
if (!ArenaMode.getBySchemType(SchematicType.fromDB(fightEndsPacket.getGameMode())).isRanked()) {
|
if (!ArenaMode.getBySchemType(SchematicType.fromDB(fightEndsPacket.getGameMode())).isRanked()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
@ -17,12 +17,13 @@
|
|||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.steamwar.bungeecore.comms.handlers;
|
package de.steamwar.bungeecore.network.handlers;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
|
||||||
import de.steamwar.bungeecore.comms.SpigotHandler;
|
|
||||||
import de.steamwar.bungeecore.comms.packets.FightInfoPacket;
|
|
||||||
import de.steamwar.bungeecore.listeners.TablistManager;
|
import de.steamwar.bungeecore.listeners.TablistManager;
|
||||||
|
import de.steamwar.bungeecore.network.NetworkReceiver;
|
||||||
|
import de.steamwar.bungeecore.network.NetworkSender;
|
||||||
|
import de.steamwar.network.packets.PacketHandler;
|
||||||
|
import de.steamwar.network.packets.common.FightInfoPacket;
|
||||||
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;
|
||||||
|
|
||||||
@ -30,7 +31,7 @@ import java.util.HashSet;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class FightInfoHandler implements SpigotHandler {
|
public class FightInfoHandler extends PacketHandler {
|
||||||
|
|
||||||
private static final Set<ServerInfo> lobbys = new HashSet<>();
|
private static final Set<ServerInfo> lobbys = new HashSet<>();
|
||||||
|
|
||||||
@ -42,10 +43,11 @@ public class FightInfoHandler implements SpigotHandler {
|
|||||||
return lobbys.contains(player.getServer().getInfo());
|
return lobbys.contains(player.getServer().getInfo());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Handler
|
||||||
public void handle(ByteArrayDataInput in, ServerInfo info) {
|
public void handle(FightInfoPacket packet) {
|
||||||
FightInfoPacket packet = new FightInfoPacket(in);
|
ServerInfo info = NetworkReceiver.sender;
|
||||||
packet.setServerName(info.getName());
|
|
||||||
|
FightInfoPacket lobbyPacket = packet.withServerName(info.getName());
|
||||||
|
|
||||||
TablistManager.newFightInfo(info, packet);
|
TablistManager.newFightInfo(info, packet);
|
||||||
|
|
||||||
@ -58,7 +60,7 @@ public class FightInfoHandler implements SpigotHandler {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
packet.send(it.next());
|
NetworkSender.send(lobby, lobbyPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -17,16 +17,16 @@
|
|||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.steamwar.bungeecore.comms.handlers;
|
package de.steamwar.bungeecore.network.handlers;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
import de.steamwar.bungeecore.network.NetworkReceiver;
|
||||||
import de.steamwar.bungeecore.comms.SpigotHandler;
|
import de.steamwar.network.packets.PacketHandler;
|
||||||
import net.md_5.bungee.api.config.ServerInfo;
|
import de.steamwar.network.packets.client.ImALobbyPacket;
|
||||||
|
|
||||||
public class ImALobbyHandler implements SpigotHandler {
|
public class ImALobbyHandler extends PacketHandler {
|
||||||
|
|
||||||
@Override
|
@Handler
|
||||||
public void handle(ByteArrayDataInput in, ServerInfo info) {
|
public void handle(ImALobbyPacket packet) {
|
||||||
FightInfoHandler.addLobby(info);
|
FightInfoHandler.addLobby(NetworkReceiver.sender);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -17,41 +17,42 @@
|
|||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.steamwar.bungeecore.comms.handlers;
|
package de.steamwar.bungeecore.network.handlers;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
|
||||||
import de.steamwar.bungeecore.BungeeCore;
|
import de.steamwar.bungeecore.BungeeCore;
|
||||||
import de.steamwar.bungeecore.comms.SpigotHandler;
|
|
||||||
import de.steamwar.bungeecore.comms.packets.CloseInventoryPacket;
|
|
||||||
import de.steamwar.bungeecore.inventory.InvCallback;
|
import de.steamwar.bungeecore.inventory.InvCallback;
|
||||||
import de.steamwar.bungeecore.inventory.SWInventory;
|
import de.steamwar.bungeecore.inventory.SWInventory;
|
||||||
|
import de.steamwar.bungeecore.network.NetworkReceiver;
|
||||||
|
import de.steamwar.bungeecore.network.NetworkSender;
|
||||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
import de.steamwar.bungeecore.sql.SteamwarUser;
|
||||||
|
import de.steamwar.network.packets.PacketHandler;
|
||||||
|
import de.steamwar.network.packets.client.InventoryCallbackPacket;
|
||||||
|
import de.steamwar.network.packets.server.CloseInventoryPacket;
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.config.ServerInfo;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class InventoryCallbackHandler implements SpigotHandler {
|
public class InventoryCallbackHandler extends PacketHandler {
|
||||||
|
|
||||||
public static final Map<Integer, SWInventory> inventoryHashMap = new HashMap<>();
|
public static final Map<Integer, SWInventory> inventoryHashMap = new HashMap<>();
|
||||||
|
|
||||||
@Override
|
@Handler
|
||||||
public void handle(ByteArrayDataInput in, ServerInfo info) {
|
public void handle(InventoryCallbackPacket packet) {
|
||||||
SteamwarUser owner = SteamwarUser.get(in.readInt());
|
SteamwarUser owner = SteamwarUser.get(packet.getOwner());
|
||||||
CallbackType type = CallbackType.valueOf(in.readUTF());
|
InventoryCallbackPacket.CallbackType type = packet.getType();
|
||||||
if(!inventoryHashMap.containsKey(owner.getId())) {
|
if(!inventoryHashMap.containsKey(owner.getId())) {
|
||||||
BungeeCore.send(ProxyServer.getInstance().getPlayer(owner.getUuid()), BungeeCore.CHAT_PREFIX + "§cBitte erneut versuchen. Durch ein Softwareupdate konnte die übliche Aktion nicht durchgeführt werden.");
|
BungeeCore.send(ProxyServer.getInstance().getPlayer(owner.getUuid()), BungeeCore.CHAT_PREFIX + "§cBitte erneut versuchen. Durch ein Softwareupdate konnte die übliche Aktion nicht durchgeführt werden.");
|
||||||
if(type == CallbackType.CLICK) {
|
if(type == InventoryCallbackPacket.CallbackType.CLICK) {
|
||||||
new CloseInventoryPacket(owner.getId()).send(ProxyServer.getInstance().getPlayer(owner.getUuid()));
|
NetworkSender.send(NetworkReceiver.sender, new CloseInventoryPacket(owner.getId()));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(type == CallbackType.CLICK) {
|
if(type == InventoryCallbackPacket.CallbackType.CLICK) {
|
||||||
int pos = in.readInt();
|
int pos = packet.getPosition();
|
||||||
InvCallback.ClickType clickType = InvCallback.ClickType.valueOf(in.readUTF());
|
InvCallback.ClickType clickType = InvCallback.ClickType.valueOf(packet.getClickType().name());
|
||||||
inventoryHashMap.get(owner.getId()).handleCallback(clickType, pos);
|
inventoryHashMap.get(owner.getId()).handleCallback(clickType, pos);
|
||||||
}else if(type == CallbackType.CLOSE) {
|
}else if(type == InventoryCallbackPacket.CallbackType.CLOSE) {
|
||||||
if(inventoryHashMap.get(owner.getId()).isNext()) {
|
if(inventoryHashMap.get(owner.getId()).isNext()) {
|
||||||
inventoryHashMap.get(owner.getId()).handleClose();
|
inventoryHashMap.get(owner.getId()).handleClose();
|
||||||
return;
|
return;
|
||||||
@ -59,9 +60,4 @@ public class InventoryCallbackHandler implements SpigotHandler {
|
|||||||
inventoryHashMap.get(owner.getId()).setNext(true);
|
inventoryHashMap.get(owner.getId()).setNext(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum CallbackType {
|
|
||||||
CLICK,
|
|
||||||
CLOSE,
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -17,24 +17,24 @@
|
|||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.steamwar.bungeecore.comms.handlers;
|
package de.steamwar.bungeecore.network.handlers;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
|
||||||
import de.steamwar.bungeecore.ArenaMode;
|
import de.steamwar.bungeecore.ArenaMode;
|
||||||
import de.steamwar.bungeecore.ServerStarter;
|
import de.steamwar.bungeecore.ServerStarter;
|
||||||
import de.steamwar.bungeecore.comms.SpigotHandler;
|
|
||||||
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.network.packets.PacketHandler;
|
||||||
|
import de.steamwar.network.packets.client.PrepareSchemPacket;
|
||||||
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.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
public class PrepareSchemHandler implements SpigotHandler {
|
public class PrepareSchemHandler extends PacketHandler {
|
||||||
@Override
|
|
||||||
public void handle(ByteArrayDataInput in, ServerInfo info) {
|
@Handler
|
||||||
ProxiedPlayer player = ProxyServer.getInstance().getPlayer(SteamwarUser.get(in.readInt()).getUuid());
|
public void handle(PrepareSchemPacket packet) {
|
||||||
int schematicID = in.readInt();
|
ProxiedPlayer player = ProxyServer.getInstance().getPlayer(SteamwarUser.get(packet.getPlayer()).getUuid());
|
||||||
ArenaMode mode = ArenaMode.getBySchemType(SchematicType.fromDB(in.readUTF()));
|
int schematicID = packet.getSchem();
|
||||||
|
ArenaMode mode = ArenaMode.getBySchemType(SchematicType.fromDB(packet.getSchemType()));
|
||||||
|
|
||||||
new ServerStarter().test(mode, mode.getRandomMap(), player).prepare(schematicID).start();
|
new ServerStarter().test(mode, mode.getRandomMap(), player).prepare(schematicID).start();
|
||||||
}
|
}
|
@ -115,7 +115,7 @@ public class Statement implements AutoCloseable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
synchronized (connections) {
|
synchronized (connections) {
|
||||||
connections.push(connection);
|
connections.addLast(connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -23,9 +23,10 @@ import com.google.gson.JsonParser;
|
|||||||
import de.steamwar.bungeecore.BungeeCore;
|
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.comms.packets.LocaleInvalidationPacket;
|
|
||||||
import de.steamwar.bungeecore.listeners.ConnectionListener;
|
import de.steamwar.bungeecore.listeners.ConnectionListener;
|
||||||
|
import de.steamwar.bungeecore.network.NetworkSender;
|
||||||
import de.steamwar.messages.ChatSender;
|
import de.steamwar.messages.ChatSender;
|
||||||
|
import de.steamwar.network.packets.server.LocaleInvalidationPacket;
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
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;
|
||||||
@ -382,12 +383,12 @@ public class SteamwarUser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setLocale(Locale locale, boolean manualLocale) {
|
public void setLocale(Locale locale, boolean manualLocale) {
|
||||||
if (this.manualLocale && !manualLocale)
|
if (locale == null || (this.manualLocale && !manualLocale))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.locale = locale;
|
this.locale = locale;
|
||||||
this.manualLocale = manualLocale;
|
this.manualLocale = manualLocale;
|
||||||
updateLocale.update(locale.toLanguageTag(), manualLocale, id);
|
updateLocale.update(locale.toLanguageTag(), manualLocale, id);
|
||||||
new LocaleInvalidationPacket(id).send(getPlayer());
|
NetworkSender.send(getPlayer(), new LocaleInvalidationPacket(id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
67
src/de/steamwar/bungeecore/util/Chat19.java
Normale Datei
67
src/de/steamwar/bungeecore/util/Chat19.java
Normale Datei
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* 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.util;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.buffer.Unpooled;
|
||||||
|
import net.md_5.bungee.ServerConnection;
|
||||||
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
import net.md_5.bungee.protocol.PacketWrapper;
|
||||||
|
import net.md_5.bungee.protocol.ProtocolConstants;
|
||||||
|
import net.md_5.bungee.protocol.packet.Chat;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
public class Chat19 extends Chat {
|
||||||
|
|
||||||
|
public static void chat(ProxiedPlayer p, String message) {
|
||||||
|
if(p.getPendingConnection().getVersion() >= 759) {
|
||||||
|
Chat19 packet = new Chat19(message);
|
||||||
|
|
||||||
|
ByteBuf buf = Unpooled.buffer();
|
||||||
|
writeVarInt(0x04, buf);
|
||||||
|
packet.write(buf, ProtocolConstants.Direction.TO_SERVER, p.getPendingConnection().getVersion());
|
||||||
|
((ServerConnection) p.getServer()).getCh().write(new PacketWrapper(packet, buf));
|
||||||
|
} else {
|
||||||
|
p.chat(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Instant timestamp = Instant.now();
|
||||||
|
private final long salt = 0L;
|
||||||
|
private final byte[] signature = new byte[0];
|
||||||
|
private final boolean signedPreview = false;
|
||||||
|
|
||||||
|
public Chat19 (String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) {
|
||||||
|
if (direction == ProtocolConstants.Direction.TO_CLIENT || protocolVersion != 759)
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
|
||||||
|
writeString(getMessage(), buf);
|
||||||
|
buf.writeLong(timestamp.toEpochMilli());
|
||||||
|
buf.writeLong(salt);
|
||||||
|
writeArray(signature, buf);
|
||||||
|
buf.writeBoolean(signedPreview);
|
||||||
|
}
|
||||||
|
}
|
@ -13,6 +13,8 @@ STEAMWAR_BRAND=§eSteam§8War.de §7({0}) §r<- §e{1} §7({2})§r
|
|||||||
DEV_NO_SERVER=§cThe server is currently not available.
|
DEV_NO_SERVER=§cThe server is currently not available.
|
||||||
DEV_UNKNOWN_SERVER=§cPlease specify a dev server.
|
DEV_UNKNOWN_SERVER=§cPlease specify a dev server.
|
||||||
|
|
||||||
|
DISABLED=§cCurrently disabled.
|
||||||
|
|
||||||
#ModLoader blocker
|
#ModLoader blocker
|
||||||
MODLOADER_INSTALLED=§7You play with §e{0} §7client. Therefore you can't join arenas.
|
MODLOADER_INSTALLED=§7You play with §e{0} §7client. Therefore you can't join arenas.
|
||||||
MODLOADER_INSTALLED_FABRIC=§7You play with §e{0} §7client. You can only join arenas with the SteamWar Modsender installed.
|
MODLOADER_INSTALLED_FABRIC=§7You play with §e{0} §7client. You can only join arenas with the SteamWar Modsender installed.
|
||||||
@ -210,7 +212,7 @@ BAU_MEMBER_TOGGLE_WORLD_EDIT = use WorldEdit
|
|||||||
BAU_MEMBER_TOGGLE_WORLD = change Settings
|
BAU_MEMBER_TOGGLE_WORLD = change Settings
|
||||||
|
|
||||||
#ChallengeCommand
|
#ChallengeCommand
|
||||||
CHALLENGE_USAGE=§8/§7challenge §8[§eSpieler§8]
|
CHALLENGE_USAGE=§8/§7challenge §8[§eplayer§8]
|
||||||
CHALLENGE_OFFLINE=§cThe challenged player isn't online.
|
CHALLENGE_OFFLINE=§cThe challenged player isn't online.
|
||||||
CHALLENGE_SELF=§cSchizophrenia?
|
CHALLENGE_SELF=§cSchizophrenia?
|
||||||
CHALLENGE_IGNORED=§cThe challenged player has blocked you.
|
CHALLENGE_IGNORED=§cThe challenged player has blocked you.
|
||||||
@ -292,7 +294,7 @@ HISTORIC_BROADCAST_HOVER=§afight against §7{1}
|
|||||||
JOIN_PLAYER_BLOCK=§cYou currently cannot follow this player.
|
JOIN_PLAYER_BLOCK=§cYou currently cannot follow this player.
|
||||||
|
|
||||||
#JoinmeCommand
|
#JoinmeCommand
|
||||||
JOINME_USAGE=§8/§7join §8[§eSpieler§8].
|
JOINME_USAGE=§8/§7join §8[§eplayer§8].
|
||||||
JOINME_BROADCAST=§7Click §ehere§8 §7to join §e{0} §7on §e{1}§8!
|
JOINME_BROADCAST=§7Click §ehere§8 §7to join §e{0} §7on §e{1}§8!
|
||||||
JOINME_BROADCAST_HOVER=§aJoin player
|
JOINME_BROADCAST_HOVER=§aJoin player
|
||||||
JOINME_PLAYER_OFFLINE=§cThis player is offline.
|
JOINME_PLAYER_OFFLINE=§cThis player is offline.
|
||||||
@ -614,7 +616,7 @@ RANK_NEEDED_FIGHTS_LEFT={0} §8(§e{1}§7 fights needed§8)
|
|||||||
|
|
||||||
#Fabric Mod Sender
|
#Fabric Mod Sender
|
||||||
MODIFICATION_BAN_MESSAGE=You tried to bypass / modify the FabricModSender!
|
MODIFICATION_BAN_MESSAGE=You tried to bypass / modify the FabricModSender!
|
||||||
MODIFICATION_BAN_LOG={0} has tried to edit / bypass the FabricModSender!
|
MODIFICATION_BAN_LOG={0} has tried to edit / bypass the FabricModSender! Reason: {1}
|
||||||
MODIFICATION_CHECK_SUCCESS=§eYour mods have been checked and you are now allowed to join arenas!
|
MODIFICATION_CHECK_SUCCESS=§eYour mods have been checked and you are now allowed to join arenas!
|
||||||
|
|
||||||
#Arena Merging
|
#Arena Merging
|
||||||
|
@ -10,6 +10,8 @@ INVALID_TIME=§cUngültige Zeitangabe.
|
|||||||
DEV_NO_SERVER=§cDer Server ist derzeit nicht erreichbar.
|
DEV_NO_SERVER=§cDer Server ist derzeit nicht erreichbar.
|
||||||
DEV_UNKNOWN_SERVER=§cBitte gib einen DevServer an.
|
DEV_UNKNOWN_SERVER=§cBitte gib einen DevServer an.
|
||||||
|
|
||||||
|
DISABLED=§cDerzeit deaktiviert.
|
||||||
|
|
||||||
#ModLoader blocker
|
#ModLoader blocker
|
||||||
MODLOADER_INSTALLED=§7Du spielst mit §e{0} §7Client. Daher kannst du keinen Arenen beitreten.
|
MODLOADER_INSTALLED=§7Du spielst mit §e{0} §7Client. Daher kannst du keinen Arenen beitreten.
|
||||||
MODLOADER_INSTALLED_FABRIC=§7Du spielst mit §e{0} §7Client. Nur mit dem SteamWarModSender kannst du Arenen beitreten.
|
MODLOADER_INSTALLED_FABRIC=§7Du spielst mit §e{0} §7Client. Nur mit dem SteamWarModSender kannst du Arenen beitreten.
|
||||||
@ -594,7 +596,7 @@ RANK_NEEDED_FIGHTS_LEFT={0} §8(§7noch §e{1}§7 Kämpfe nötig§8)
|
|||||||
|
|
||||||
#Fabric Mod Sender
|
#Fabric Mod Sender
|
||||||
MODIFICATION_BAN_MESSAGE=Du hast probiert den FabricModSender zu umgehen / zu modifizieren!
|
MODIFICATION_BAN_MESSAGE=Du hast probiert den FabricModSender zu umgehen / zu modifizieren!
|
||||||
MODIFICATION_BAN_LOG={0} hat probiert den Fabric Mod Sender zu editieren / umzugehen!
|
MODIFICATION_BAN_LOG={0} hat probiert den Fabric Mod Sender zu editieren / umzugehen! Grund: {1}
|
||||||
MODIFICATION_CHECK_SUCCESS=§eDeine Mods wurden geprüft und du darfst nun auf Arenen joinen!
|
MODIFICATION_CHECK_SUCCESS=§eDeine Mods wurden geprüft und du darfst nun auf Arenen joinen!
|
||||||
|
|
||||||
#Arena Merging
|
#Arena Merging
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren