Actionbar unauffälliger: ♪ Name DC · Name TS
This commit is contained in:
1 parent
b335933678
commit
2e46c9ea1c
4 files changed
+21
-6
No files matched your search
@@ -85,12 +85,12 @@ public final class Room {
|
|||||||
public void setMinecraftSink(MinecraftSink sink) { this.minecraft = sink; }
|
public void setMinecraftSink(MinecraftSink sink) { this.minecraft = sink; }
|
||||||
public void setNameResolver(BiFunction<Side, String, String> names) { this.names = names; }
|
public void setNameResolver(BiFunction<Side, String, String> names) { this.names = names; }
|
||||||
|
|
||||||
/** Wer aus Discord/TeamSpeak in den letzten {@code millis} Audio geschickt hat, als "Name (Plattform)". */
|
/** Wer aus Discord/TeamSpeak in den letzten {@code millis} Audio geschickt hat, als "Name|Kürzel". */
|
||||||
public List<String> externalSpeakers(long millis) {
|
public List<String> externalSpeakers(long millis) {
|
||||||
long since = System.currentTimeMillis() - millis;
|
long since = System.currentTimeMillis() - millis;
|
||||||
return sources.values().stream()
|
return sources.values().stream()
|
||||||
.filter(s -> s.side != Side.MINECRAFT && s.lastSeen >= since)
|
.filter(s -> s.side != Side.MINECRAFT && s.lastSeen >= since)
|
||||||
.map(s -> s.name + " (" + label(s.side) + ")")
|
.map(s -> s.name + "|" + (s.side == Side.DISCORD ? "DC" : "TS"))
|
||||||
.sorted().toList();
|
.sorted().toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -142,14 +142,29 @@ final class BridgeVoicechat implements VoicechatPlugin {
|
|||||||
case Message.Speakers speakers -> Bukkit.getScheduler().runTask(plugin, () -> {
|
case Message.Speakers speakers -> Bukkit.getScheduler().runTask(plugin, () -> {
|
||||||
CrosstalkRoom room = rooms.get(speakers.room());
|
CrosstalkRoom room = rooms.get(speakers.room());
|
||||||
if (room == null || speakers.names().isEmpty() || !plugin.getConfig().getBoolean("actionbar", true)) return;
|
if (room == null || speakers.names().isEmpty() || !plugin.getConfig().getBoolean("actionbar", true)) return;
|
||||||
Component text = Component.text("Spricht: ", NamedTextColor.GRAY)
|
Component text = speakersLine(speakers.names());
|
||||||
.append(Component.text(String.join(", ", speakers.names()), NamedTextColor.GOLD));
|
|
||||||
room.memberPlayers().stream().filter(ActionbarCommand::enabled).forEach(player -> player.sendActionBar(text));
|
room.memberPlayers().stream().filter(ActionbarCommand::enabled).forEach(player -> player.sendActionBar(text));
|
||||||
});
|
});
|
||||||
case Message.Hello ignored -> {}
|
case Message.Hello ignored -> {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Unauffällige Actionbar: "♪ Anna DC · Bob TS", höchstens drei Namen, Rest als "+N". */
|
||||||
|
static Component speakersLine(List<String> speakers) {
|
||||||
|
int shown = Math.min(3, speakers.size());
|
||||||
|
Component line = Component.text("♪ ", NamedTextColor.DARK_GRAY);
|
||||||
|
for (int i = 0; i < shown; i++) {
|
||||||
|
String entry = speakers.get(i);
|
||||||
|
int split = entry.lastIndexOf('|');
|
||||||
|
String name = split < 0 ? entry : entry.substring(0, split);
|
||||||
|
String tag = split < 0 ? "" : " " + entry.substring(split + 1);
|
||||||
|
if (i > 0) line = line.append(Component.text(" · ", NamedTextColor.DARK_GRAY));
|
||||||
|
line = line.append(Component.text(name, NamedTextColor.GRAY)).append(Component.text(tag, NamedTextColor.DARK_GRAY));
|
||||||
|
}
|
||||||
|
if (speakers.size() > shown) line = line.append(Component.text(" +" + (speakers.size() - shown), NamedTextColor.DARK_GRAY));
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
|
||||||
/** Main-Thread: Gruppen an die Räume der Bridge angleichen. */
|
/** Main-Thread: Gruppen an die Räume der Bridge angleichen. */
|
||||||
private void syncRooms(List<Message.RoomInfo> infos) {
|
private void syncRooms(List<Message.RoomInfo> infos) {
|
||||||
VoicechatServerApi api = this.api;
|
VoicechatServerApi api = this.api;
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ bridge:
|
|||||||
host: 127.0.0.1
|
host: 127.0.0.1
|
||||||
port: 24470
|
port: 24470
|
||||||
|
|
||||||
# Actionbar "Spricht: …" mit den gerade sprechenden Leuten aus Discord/TeamSpeak.
|
# Actionbar "♪ Anna DC · Bob TS" mit den gerade sprechenden Leuten aus Discord/TeamSpeak.
|
||||||
# Jeder Spieler kann sie zusätzlich mit /crosstalk actionbar für sich aus- und einschalten.
|
# Jeder Spieler kann sie zusätzlich mit /crosstalk actionbar für sich aus- und einschalten.
|
||||||
actionbar: true
|
actionbar: true
|
||||||
@@ -28,6 +28,6 @@ public sealed interface Message {
|
|||||||
/** Bridge → Plugin: Chat-Hinweis an alle in der Gruppe, z. B. wer dazugekommen ist. */
|
/** Bridge → Plugin: Chat-Hinweis an alle in der Gruppe, z. B. wer dazugekommen ist. */
|
||||||
record Notice(String room, String text) implements Message {}
|
record Notice(String room, String text) implements Message {}
|
||||||
|
|
||||||
/** Bridge → Plugin: wer aus Discord/TeamSpeak gerade spricht (für die Actionbar). */
|
/** Bridge → Plugin: wer aus Discord/TeamSpeak gerade spricht (für die Actionbar), je "Name|Kürzel". */
|
||||||
record Speakers(String room, List<String> names) implements Message {}
|
record Speakers(String room, List<String> names) implements Message {}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user