Mirror von
https://github.com/PaperMC/Velocity.git
synchronisiert 2024-11-16 21:10:30 +01:00
Add API for custom chat completions like on Paper (#1232)
* Add API for custom chat completions like on Paper, renamed enum constant to match its function, NMS and wiki-vg * add null and version checks
Dieser Commit ist enthalten in:
Ursprung
7bff6b19eb
Commit
d8bb4e97e4
@ -309,4 +309,33 @@ public interface Player extends
|
||||
* @return the player's client brand
|
||||
*/
|
||||
@Nullable String getClientBrand();
|
||||
|
||||
|
||||
/**
|
||||
* Add custom chat completion suggestions shown to the player while typing a message.
|
||||
*
|
||||
* @param completions the completions to send
|
||||
*/
|
||||
void addCustomChatCompletions(@NotNull Collection<String> completions);
|
||||
|
||||
/**
|
||||
* Remove custom chat completion suggestions shown to the player while typing a message.
|
||||
*
|
||||
* <p>Online player names can't be removed with this method, it will only affect
|
||||
* custom completions added by {@link #addCustomChatCompletions(Collection)}
|
||||
* or {@link #setCustomChatCompletions(Collection)}.
|
||||
*
|
||||
* @param completions the completions to remove
|
||||
*/
|
||||
void removeCustomChatCompletions(@NotNull Collection<String> completions);
|
||||
|
||||
/**
|
||||
* Set the list of chat completion suggestions shown to the player while typing a message.
|
||||
*
|
||||
* <p>If completions were set previously, this method will remove them all
|
||||
* and replace them with the provided completions.
|
||||
*
|
||||
* @param completions the completions to set
|
||||
*/
|
||||
void setCustomChatCompletions(@NotNull Collection<String> completions);
|
||||
}
|
@ -69,6 +69,7 @@ import com.velocitypowered.proxy.protocol.packet.RemoveResourcePackPacket;
|
||||
import com.velocitypowered.proxy.protocol.packet.chat.ChatQueue;
|
||||
import com.velocitypowered.proxy.protocol.packet.chat.ChatType;
|
||||
import com.velocitypowered.proxy.protocol.packet.chat.ComponentHolder;
|
||||
import com.velocitypowered.proxy.protocol.packet.chat.PlayerChatCompletionPacket;
|
||||
import com.velocitypowered.proxy.protocol.packet.chat.builder.ChatBuilderFactory;
|
||||
import com.velocitypowered.proxy.protocol.packet.chat.legacy.LegacyChatPacket;
|
||||
import com.velocitypowered.proxy.protocol.packet.config.StartUpdatePacket;
|
||||
@ -961,6 +962,31 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
||||
this.clientBrand = clientBrand;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCustomChatCompletions(@NotNull Collection<String> completions) {
|
||||
Preconditions.checkNotNull(completions, "completions");
|
||||
this.sendCustomChatCompletionPacket(completions, PlayerChatCompletionPacket.Action.ADD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCustomChatCompletions(@NotNull Collection<String> completions) {
|
||||
Preconditions.checkNotNull(completions, "completions");
|
||||
this.sendCustomChatCompletionPacket(completions, PlayerChatCompletionPacket.Action.REMOVE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCustomChatCompletions(@NotNull Collection<String> completions) {
|
||||
Preconditions.checkNotNull(completions, "completions");
|
||||
this.sendCustomChatCompletionPacket(completions, PlayerChatCompletionPacket.Action.SET);
|
||||
}
|
||||
|
||||
private void sendCustomChatCompletionPacket(@NotNull Collection<String> completions,
|
||||
PlayerChatCompletionPacket.Action action) {
|
||||
if (connection.getProtocolVersion().noLessThan(ProtocolVersion.MINECRAFT_1_19_1)) {
|
||||
connection.write(new PlayerChatCompletionPacket(completions.toArray(new String[0]), action));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void spoofChatInput(String input) {
|
||||
Preconditions.checkArgument(input.length() <= LegacyChatPacket.MAX_SERVERBOUND_MESSAGE_LENGTH,
|
||||
|
@ -28,6 +28,13 @@ public class PlayerChatCompletionPacket implements MinecraftPacket {
|
||||
private String[] completions;
|
||||
private Action action;
|
||||
|
||||
public PlayerChatCompletionPacket() {
|
||||
}
|
||||
|
||||
public PlayerChatCompletionPacket(String[] completions, Action action) {
|
||||
this.completions = completions;
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
public String[] getCompletions() {
|
||||
return completions;
|
||||
@ -64,9 +71,9 @@ public class PlayerChatCompletionPacket implements MinecraftPacket {
|
||||
return handler.handle(this);
|
||||
}
|
||||
|
||||
enum Action {
|
||||
public enum Action {
|
||||
ADD,
|
||||
REMOVE,
|
||||
ALTER
|
||||
SET
|
||||
}
|
||||
}
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren