Mirror von
https://github.com/PaperMC/Velocity.git
synchronisiert 2024-11-06 00:00:47 +01:00
Plugins can get plugin messages now.
Dieser Commit ist enthalten in:
Ursprung
c36f417b1e
Commit
d9c35a680a
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren