Skip to content

Commit 9380c13

Browse files
authored
Allow disabling cross-server broadcasting per-channel (#589)
* Add channel config option to individually disable cross-server * Block incoming messages when channel cross-server is false
1 parent 1ed9f44 commit 9380c13

File tree

7 files changed

+39
-0
lines changed

7 files changed

+39
-0
lines changed

api/src/main/java/net/draycia/carbon/api/channels/ChatChannel.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,12 @@ public interface ChatChannel extends Keyed, ChatComponentRenderer {
132132
*/
133133
long startCooldown(CarbonPlayer player);
134134

135+
/**
136+
* Whether messages from this channel should be broadcast and sent to other servers.
137+
*
138+
* @return if this channel's messages should be sent cross-server
139+
* @since 3.0.0
140+
*/
141+
boolean shouldCrossServer();
142+
135143
}

common/src/main/java/net/draycia/carbon/common/channels/ConfigChatChannel.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ public class ConfigChatChannel implements ChatChannel {
117117

118118
private long cooldown = -1;
119119

120+
@Comment("Whether this channel's messages should be sent cross-server.")
121+
private boolean crossServer = true;
122+
120123
@Override
121124
public @Nullable String quickPrefix() {
122125
if (this.quickPrefix == null || this.quickPrefix.isBlank()) {
@@ -263,6 +266,11 @@ public boolean emptyRadiusRecipientsMessage() {
263266
return this.emptyRadiusRecipientsMessage;
264267
}
265268

269+
@Override
270+
public boolean shouldCrossServer() {
271+
return this.crossServer;
272+
}
273+
266274
@Override
267275
public boolean equals(final Object other) {
268276
if (!(other instanceof ConfigChatChannel otherChannel)) {

common/src/main/java/net/draycia/carbon/common/listeners/MessagePacketHandler.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ public MessagePacketHandler(
5151
return;
5252
}
5353

54+
if (!event.chatChannel().shouldCrossServer()) {
55+
return;
56+
}
57+
5458
messaging.get().queuePacket(() -> {
5559
final CarbonPlayer sender = event.sender();
5660
final Component networkMessage = e.renderFor(sender);

common/src/main/java/net/draycia/carbon/common/messaging/CarbonChatPacketHandler.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ private boolean handleMessagePacket(final ChatMessagePacket messagePacket) {
122122
return false;
123123
}
124124

125+
if (!channel.shouldCrossServer()) {
126+
return false;
127+
}
128+
125129
final List<KeyedRenderer> renderers = new ArrayList<>();
126130

127131
final List<Audience> recipients = channel.recipients(sender);

paper/src/main/java/net/draycia/carbon/paper/integration/fuuid/AbstractFactionsChannel.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,9 @@ protected final boolean hasRelations(final CarbonPlayer player, final Relation r
6363
return faction != null && faction.getRelationCount(relation) > 0;
6464
}
6565

66+
@Override
67+
public boolean shouldCrossServer() {
68+
return false;
69+
}
70+
6671
}

paper/src/main/java/net/draycia/carbon/paper/integration/mcmmo/McmmoPartyChannel.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,9 @@ public List<Audience> recipients(final CarbonPlayer sender) {
101101
return PartyManager.getParty(Bukkit.getPlayer(player.uuid()));
102102
}
103103

104+
@Override
105+
public boolean shouldCrossServer() {
106+
return false;
107+
}
108+
104109
}

paper/src/main/java/net/draycia/carbon/paper/integration/towny/ResidentListChannel.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,4 +91,9 @@ protected List<Player> onlinePlayers(final T residentList) {
9191

9292
protected abstract Component cannotUseChannel(CarbonPlayer player);
9393

94+
@Override
95+
public boolean shouldCrossServer() {
96+
return false;
97+
}
98+
9499
}

0 commit comments

Comments
 (0)