forked from SteamWar/SteamWar
Merge branch 'main' into VelocityCore/BadlionRestrictions
This commit is contained in:
@@ -130,6 +130,7 @@ USAGE_ALERT=§8/§7alert §8[§emessage§8]
|
||||
USAGE_IGNORE=§8/§7ignore §8[§eplayer§8]
|
||||
|
||||
#ModListener
|
||||
CLIENT_DISALLOWED=Attempted use of client {0}
|
||||
MOD_RED_SING=Attempted use of mod {0}
|
||||
MOD_RED_PLUR=Attempted use of mods:\n{0}
|
||||
MOD_YELLOW_SING=§7Deactivate the mod §e{0}§7 to continue playing on §eSteam§8War§7.
|
||||
@@ -292,7 +293,7 @@ FIGHT_UNKNOWN_GAMEMODE=§cUnknown gamemode: {0}
|
||||
FIGHT_UNKNOWN_ARENA=§cThe desired arena does not exist.
|
||||
FIGHT_IN_ARENA=§cYou are already in an arena.
|
||||
FIGHT_BROADCAST=§7Click §ehere§7 to fight §e{0} §7against §e{1}!
|
||||
FIGHT_BROADCAST_HOVER=§aFight §eagainst §7{1}
|
||||
FIGHT_BROADCAST_HOVER=§aFight §eagainst §7{0}
|
||||
|
||||
#CheckCommand
|
||||
CHECK_REMINDER=§7There are §e{0} §7schematics left for review§8!
|
||||
|
||||
@@ -115,6 +115,7 @@ USAGE_ALERT=§8/§7alert §8[§eNachricht§8]
|
||||
USAGE_IGNORE=§8/§7ignore §8[§eSpieler§8]
|
||||
|
||||
#ModListener
|
||||
CLIENT_DISALLOWED=Versuchte Benutzung des Clients {0}
|
||||
MOD_RED_SING=Versuchte Benutzung des Mods {0}
|
||||
MOD_RED_PLUR=Versuchte Benutzung der Mods:\n{0}
|
||||
MOD_YELLOW_SING=§7Deaktiviere den Mod §e{0}§7, um weiter auf §eSteam§8War §7spielen zu können.
|
||||
@@ -275,7 +276,7 @@ FIGHT_UNKNOWN_GAMEMODE=§cUnbekannter Spielmodus: {0}
|
||||
FIGHT_UNKNOWN_ARENA=§cDie gewünschte Arena gibt es nicht.
|
||||
FIGHT_IN_ARENA=§cDu befindest dich bereits in einer Arena.
|
||||
FIGHT_BROADCAST=§7Klicke §ehier§7, um §e{0} §7gegen §e{1} §7zu §7kämpfen!
|
||||
FIGHT_BROADCAST_HOVER=§aGegen §7{1} §ekämpfen
|
||||
FIGHT_BROADCAST_HOVER=§aGegen §7{0} §ekämpfen
|
||||
|
||||
#CheckCommand
|
||||
CHECK_REMINDER=§7Es sind §e{0} §7Schematics zu prüfen§8!
|
||||
@@ -642,7 +643,6 @@ RANK_PLAYER_FOUND=§eRang §7von §e{0}
|
||||
RANK_HEADER={0} §e{1} {2}
|
||||
RANK_UNPLACED=§7unplatziert
|
||||
RANK_PLACED=§e{0}§8. §7mit §e{1} §7Elo§8.
|
||||
RANK_EMBLEM=§7Emblem§8: {0}
|
||||
|
||||
#Fabric Mod Sender
|
||||
MODIFICATION_BAN_MESSAGE=Du hast probiert den FabricModSender zu umgehen / zu modifizieren!
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
package de.steamwar.velocitycore;
|
||||
|
||||
import de.steamwar.messages.Chatter;
|
||||
import de.steamwar.messages.Message;
|
||||
import de.steamwar.persistent.Subserver;
|
||||
import de.steamwar.sql.EventFight;
|
||||
import de.steamwar.sql.Team;
|
||||
@@ -43,7 +44,7 @@ public class EventStarter {
|
||||
|
||||
public EventStarter() {
|
||||
EventFight.loadAllComingFights();
|
||||
VelocityCore.schedule(this::run).delay(10, TimeUnit.SECONDS).schedule();
|
||||
VelocityCore.schedule(this::run).repeat(10, TimeUnit.SECONDS).schedule();
|
||||
}
|
||||
|
||||
public static Map<Integer, Subserver> getEventServer() {
|
||||
@@ -73,7 +74,7 @@ public class EventStarter {
|
||||
} else {
|
||||
command = "/" + spectatePorts.get(next.getSpectatePort());
|
||||
}
|
||||
Chatter.broadcast().system("EVENT_FIGHT_BROADCAST", "EVENT_FIGHT_BROADCAST_HOVER", ClickEvent.runCommand(command), blue.getTeamColor(), blue.getTeamName(), red.getTeamColor(), red.getTeamName());
|
||||
Chatter.broadcast().system("EVENT_FIGHT_BROADCAST", new Message("EVENT_FIGHT_BROADCAST_HOVER"), ClickEvent.runCommand(command), blue.getTeamColor(), blue.getTeamName(), red.getTeamColor(), red.getTeamName());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ public class FightCommand extends SWCommand {
|
||||
public void fight(@Validator("arenaPlayer") PlayerChatter sender, @Mapper("nonHistoricArenaMode") @OptionalValue("") @AllowNull ArenaMode arenaMode, @Mapper("arenaMap") @OptionalValue("") @AllowNull String map) {
|
||||
createArena(sender, "/fight ", true, arenaMode, map, false,
|
||||
(p, mode, m) -> new ServerStarter().arena(mode, m).blueLeader(p.getPlayer()).callback(
|
||||
arena -> Chatter.broadcast().system("FIGHT_BROADCAST", new Message("FIGHT_BROADCAST_HOVER"), ClickEvent.runCommand("/arena " + arena.getServer().getName()), mode.getGameName(), p.getPlayer().getUsername())
|
||||
arena -> Chatter.broadcast().system("FIGHT_BROADCAST", new Message("FIGHT_BROADCAST_HOVER", p.getPlayer().getUsername()), ClickEvent.runCommand("/arena " + arena.getServer().getName()), mode.getGameName(), p.getPlayer().getUsername())
|
||||
).start()
|
||||
);
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ package de.steamwar.velocitycore.mods;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier;
|
||||
import de.steamwar.messages.Chatter;
|
||||
|
||||
public class Badlion {
|
||||
// https://github.com/BadlionClient/BadlionClientModAPI
|
||||
@@ -53,6 +54,10 @@ public class Badlion {
|
||||
}
|
||||
|
||||
public void sendRestrictions(Player player) {
|
||||
// TODO: Remove when Badlion is fixed, or we fixed the Badlion packet
|
||||
Chatter sender = Chatter.of(player);
|
||||
player.disconnect(sender.parse("CLIENT_DISALLOWED", "Badlion"));
|
||||
|
||||
player.sendPluginMessage(MinecraftChannelIdentifier.from("badlion:mods"), packet);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,13 +20,13 @@
|
||||
package de.steamwar.velocitycore.network.handlers;
|
||||
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import de.steamwar.velocitycore.ArenaMode;
|
||||
import de.steamwar.velocitycore.VelocityCore;
|
||||
import de.steamwar.network.packets.PacketHandler;
|
||||
import de.steamwar.network.packets.common.FightEndsPacket;
|
||||
import de.steamwar.sql.SchematicType;
|
||||
import de.steamwar.sql.SteamwarUser;
|
||||
import de.steamwar.sql.UserElo;
|
||||
import de.steamwar.velocitycore.ArenaMode;
|
||||
import de.steamwar.velocitycore.VelocityCore;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
@@ -52,8 +52,15 @@ public class EloPlayerHandler extends PacketHandler {
|
||||
*/
|
||||
@Handler
|
||||
public void handle(FightEndsPacket fightEndsPacket) {
|
||||
if (!ArenaMode.getBySchemType(SchematicType.fromDB(fightEndsPacket.getGameMode())).isRanked())
|
||||
return;
|
||||
SchematicType schematicType = SchematicType.fromDB(fightEndsPacket.getGameMode());
|
||||
ArenaMode arenaMode;
|
||||
if (schematicType == null) {
|
||||
arenaMode = ArenaMode.getByInternal(fightEndsPacket.getGameMode());
|
||||
} else {
|
||||
arenaMode = ArenaMode.getBySchemType(schematicType);
|
||||
}
|
||||
if (arenaMode == null) return;
|
||||
if (!arenaMode.isRanked()) return;
|
||||
|
||||
if (EloSchemHandler.publicVsPrivate(fightEndsPacket))
|
||||
return;
|
||||
|
||||
@@ -19,18 +19,21 @@
|
||||
|
||||
package de.steamwar.velocitycore.network.handlers;
|
||||
|
||||
import de.steamwar.velocitycore.ArenaMode;
|
||||
import de.steamwar.network.packets.PacketHandler;
|
||||
import de.steamwar.network.packets.common.FightEndsPacket;
|
||||
import de.steamwar.sql.SchemElo;
|
||||
import de.steamwar.sql.SchematicNode;
|
||||
import de.steamwar.sql.SchematicType;
|
||||
import de.steamwar.velocitycore.ArenaMode;
|
||||
|
||||
public class EloSchemHandler extends PacketHandler {
|
||||
|
||||
private static final int K = 20;
|
||||
|
||||
public static boolean publicVsPrivate(FightEndsPacket packet) {
|
||||
if (packet.getRedSchem() == -1 && packet.getBlueSchem() == -1) {
|
||||
return false;
|
||||
}
|
||||
SchematicNode blueSchem = SchematicNode.getSchematicNode(packet.getBlueSchem());
|
||||
SchematicNode redSchem = SchematicNode.getSchematicNode(packet.getRedSchem());
|
||||
return (blueSchem.getOwner() == 0) != (redSchem.getOwner() == 0);
|
||||
@@ -38,9 +41,10 @@ public class EloSchemHandler extends PacketHandler {
|
||||
|
||||
@Handler
|
||||
public void handle(FightEndsPacket fightEndsPacket) {
|
||||
if (!ArenaMode.getBySchemType(SchematicType.fromDB(fightEndsPacket.getGameMode())).isRanked()) {
|
||||
return;
|
||||
}
|
||||
SchematicType type = SchematicType.fromDB(fightEndsPacket.getGameMode());
|
||||
if (type == null) return;
|
||||
ArenaMode arenaMode = ArenaMode.getBySchemType(type);
|
||||
if (!arenaMode.isRanked()) return;
|
||||
|
||||
if (publicVsPrivate(fightEndsPacket))
|
||||
return;
|
||||
|
||||
@@ -43,6 +43,7 @@ import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
@ChannelHandler.Sharable
|
||||
@@ -63,7 +64,6 @@ public class Tablist extends ChannelInboundHandlerAdapter {
|
||||
this.player = player;
|
||||
this.viewer = Chatter.of(player);
|
||||
this.directTabItems = Storage.directTabItems.computeIfAbsent(player, p -> new HashMap<>());
|
||||
injection();
|
||||
}
|
||||
|
||||
public void update(TablistPart global, int seconds) {
|
||||
@@ -139,7 +139,9 @@ public class Tablist extends ChannelInboundHandlerAdapter {
|
||||
synchronized (directTabItems) {
|
||||
directTabItems.clear();
|
||||
}
|
||||
}
|
||||
|
||||
public void onServerPostSwitch() {
|
||||
if(player.getProtocolVersion().greaterThan(ProtocolVersion.MINECRAFT_1_20)) {
|
||||
current.clear();
|
||||
sendPacket(player, createTeamPacket);
|
||||
@@ -148,8 +150,14 @@ public class Tablist extends ChannelInboundHandlerAdapter {
|
||||
|
||||
private void injection() {
|
||||
connection = (VelocityServerConnection) player.getCurrentServer().orElse(null);
|
||||
if(connection == null)
|
||||
return;
|
||||
if(connection == null) {
|
||||
connection = ((ConnectedPlayer) player).getConnectionInFlight();
|
||||
|
||||
if(connection == null) {
|
||||
VelocityCore.getLogger().log(Level.WARNING, "Could not inject Tablist: %s".formatted(player));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ChannelPipeline pipeline = connection.getConnection().getChannel().pipeline();
|
||||
if(pipeline.get("steamwar-tablist") != null) //Catch unclean exit
|
||||
|
||||
@@ -21,8 +21,9 @@ package de.steamwar.velocitycore.tablist;
|
||||
|
||||
import com.velocitypowered.api.event.Subscribe;
|
||||
import com.velocitypowered.api.event.connection.DisconnectEvent;
|
||||
import com.velocitypowered.api.event.connection.PostLoginEvent;
|
||||
import com.velocitypowered.api.event.player.ServerConnectedEvent;
|
||||
import com.velocitypowered.api.event.player.ServerPostConnectEvent;
|
||||
import com.velocitypowered.api.network.ProtocolVersion;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||
import de.steamwar.network.packets.common.FightInfoPacket;
|
||||
@@ -59,17 +60,19 @@ public class TablistManager extends BasicListener {
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onJoin(PostLoginEvent event) {
|
||||
public void onServerConnection(ServerConnectedEvent event) {
|
||||
synchronized (tablists) {
|
||||
tablists.put(event.getPlayer(), new Tablist(event.getPlayer()));
|
||||
tablists.computeIfAbsent(event.getPlayer(), Tablist::new).onServerSwitch();
|
||||
}
|
||||
Tablist.sendPacket(event.getPlayer(), Tablist.createTeamPacket);
|
||||
|
||||
if(event.getPlayer().getProtocolVersion().noGreaterThan(ProtocolVersion.MINECRAFT_1_20))
|
||||
Tablist.sendPacket(event.getPlayer(), Tablist.createTeamPacket);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onServerConnection(ServerPostConnectEvent event) {
|
||||
public void onServerPostConnection(ServerPostConnectEvent event) {
|
||||
synchronized (tablists) {
|
||||
tablists.get(event.getPlayer()).onServerSwitch();
|
||||
tablists.get(event.getPlayer()).onServerPostSwitch();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,14 +93,14 @@ public class TablistManager extends BasicListener {
|
||||
|
||||
private void updateTablist() {
|
||||
List<TablistPart> subservers = new ArrayList<>();
|
||||
for (RegisteredServer server : new ArrayList<>(VelocityCore.getProxy().getAllServers())){
|
||||
if(server.getPlayersConnected().isEmpty())
|
||||
for (RegisteredServer server : new ArrayList<>(VelocityCore.getProxy().getAllServers())) {
|
||||
if (server.getPlayersConnected().isEmpty())
|
||||
continue;
|
||||
|
||||
Subserver subserver = Subserver.getSubserver(server.getServerInfo());
|
||||
if(fightInfos.containsKey(server))
|
||||
if (fightInfos.containsKey(server))
|
||||
subservers.add(new TablistServer(server, fightInfos.get(server)));
|
||||
else if(subserver == null || subserver.getType() != Servertype.BAUSERVER)
|
||||
else if (subserver == null || subserver.getType() != Servertype.BAUSERVER)
|
||||
subservers.add(new TablistServer(server));
|
||||
}
|
||||
subservers.add(new TablistBuild());
|
||||
|
||||
Reference in New Issue
Block a user