13
0
geforkt von Mirrors/Velocity

Plugins can get plugin messages now.

Dieser Commit ist enthalten in:
Andrew Steinborn 2018-08-22 18:59:10 -04:00
Ursprung c36f417b1e
Commit d9c35a680a
3 geänderte Dateien mit 44 neuen und 5 gelöschten Zeilen

Datei anzeigen

@ -103,10 +103,12 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
(ClientPlaySessionHandler) connection.getPlayer().getConnection().getSessionHandler(); (ClientPlaySessionHandler) connection.getPlayer().getConnection().getSessionHandler();
if (connection.getMinecraftConnection().getProtocolVersion() <= ProtocolConstants.MINECRAFT_1_12_2) { if (connection.getMinecraftConnection().getProtocolVersion() <= ProtocolConstants.MINECRAFT_1_12_2) {
return message.getChannel().startsWith("MC|") || return message.getChannel().startsWith("MC|") ||
playerHandler.getClientPluginMsgChannels().contains(message.getChannel()); playerHandler.getClientPluginMsgChannels().contains(message.getChannel()) ||
VelocityServer.getServer().getChannelRegistrar().registered(message.getChannel());
} else { } else {
return message.getChannel().startsWith("minecraft:") || return message.getChannel().startsWith("minecraft:") ||
playerHandler.getClientPluginMsgChannels().contains(message.getChannel()); playerHandler.getClientPluginMsgChannels().contains(message.getChannel()) ||
VelocityServer.getServer().getChannelRegistrar().registered(message.getChannel());
} }
} }
} }

Datei anzeigen

@ -42,6 +42,17 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
this.player = player; this.player = player;
} }
@Override
public void activated() {
PluginMessage message;
if (player.getProtocolVersion() >= ProtocolConstants.MINECRAFT_1_13) {
message = PluginMessageUtil.constructChannelsPacket("minecraft:register", VelocityServer.getServer().getChannelRegistrar().getModernChannelIds());
} else {
message = PluginMessageUtil.constructChannelsPacket("REGISTER", VelocityServer.getServer().getChannelRegistrar().getLegacyChannelIds());
}
player.getConnection().write(message);
}
@Override @Override
public void handle(MinecraftPacket packet) { public void handle(MinecraftPacket packet) {
if (packet instanceof KeepAlive) { if (packet instanceof KeepAlive) {
@ -174,11 +185,17 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
serverBossBars.clear(); serverBossBars.clear();
// Tell the server about this client's plugin messages. Velocity will forward them on to the client. // Tell the server about this client's plugin messages. Velocity will forward them on to the client.
if (!clientPluginMsgChannels.isEmpty()) { Collection<String> toRegister = new HashSet<>(clientPluginMsgChannels);
if (player.getProtocolVersion() >= ProtocolConstants.MINECRAFT_1_13) {
toRegister.addAll(VelocityServer.getServer().getChannelRegistrar().getModernChannelIds());
} else {
toRegister.addAll(VelocityServer.getServer().getChannelRegistrar().getLegacyChannelIds());
}
if (!toRegister.isEmpty()) {
String channel = player.getConnection().getProtocolVersion() >= ProtocolConstants.MINECRAFT_1_13 ? String channel = player.getConnection().getProtocolVersion() >= ProtocolConstants.MINECRAFT_1_13 ?
"minecraft:register" : "REGISTER"; "minecraft:register" : "REGISTER";
player.getConnectedServer().getMinecraftConnection().delayedWrite( player.getConnectedServer().getMinecraftConnection().delayedWrite(PluginMessageUtil.constructChannelsPacket(
PluginMessageUtil.constructChannelsPacket(channel, clientPluginMsgChannels)); channel, toRegister));
} }
// Flush everything // Flush everything

Datei anzeigen

@ -6,8 +6,10 @@ import com.velocitypowered.proxy.protocol.packet.PluginMessage;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.util.Collection;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
public class VelocityChannelRegistrar implements ChannelRegistrar { public class VelocityChannelRegistrar implements ChannelRegistrar {
private static final Logger logger = LogManager.getLogger(VelocityChannelRegistrar.class); private static final Logger logger = LogManager.getLogger(VelocityChannelRegistrar.class);
@ -55,4 +57,22 @@ public class VelocityChannelRegistrar implements ChannelRegistrar {
identifierMap.remove(identifier.getId()); identifierMap.remove(identifier.getId());
} }
} }
public Collection<String> getLegacyChannelIds() {
return identifierMap.values().stream()
.filter(i -> i instanceof LegacyChannelIdentifier)
.map(ChannelIdentifier::getId)
.collect(Collectors.toList());
}
public Collection<String> getModernChannelIds() {
return identifierMap.values().stream()
.filter(i -> i instanceof MinecraftChannelIdentifier)
.map(ChannelIdentifier::getId)
.collect(Collectors.toList());
}
public boolean registered(String id) {
return identifierMap.containsKey(id);
}
} }