Fix team chat from being reset after cycle
This commit is contained in:
parent
1eaae36b32
commit
9b59cc0cde
|
@ -34,6 +34,7 @@ public interface ChatDoc {
|
||||||
@Serialize
|
@Serialize
|
||||||
interface Complete extends Base {
|
interface Complete extends Base {
|
||||||
@Nullable PlayerId sender();
|
@Nullable PlayerId sender();
|
||||||
|
@Serialize(false) default boolean local() { return false; }
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Type {
|
enum Type {
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package tc.oc.commons.bukkit.channels;
|
package tc.oc.commons.bukkit.channels;
|
||||||
|
|
||||||
import com.google.common.cache.Cache;
|
|
||||||
import com.google.common.cache.CacheBuilder;
|
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -21,7 +19,6 @@ import tc.oc.commons.core.plugin.PluginFacet;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public abstract class SimpleChannel implements MultiAudience, Channel, PluginFacet {
|
public abstract class SimpleChannel implements MultiAudience, Channel, PluginFacet {
|
||||||
|
@ -32,15 +29,9 @@ public abstract class SimpleChannel implements MultiAudience, Channel, PluginFac
|
||||||
@Inject protected ChatCreator chatCreator;
|
@Inject protected ChatCreator chatCreator;
|
||||||
@Inject protected IdentityProvider identityProvider;
|
@Inject protected IdentityProvider identityProvider;
|
||||||
|
|
||||||
// Chat messages are sent to the local server before API verification.
|
|
||||||
// This prevents downtime or lockup from stopping all local server chat.
|
|
||||||
protected Cache<String, Boolean> chatCache = CacheBuilder.newBuilder()
|
|
||||||
.expireAfterWrite(10, TimeUnit.MINUTES)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
public abstract BaseComponent prefix();
|
public abstract BaseComponent prefix();
|
||||||
|
|
||||||
public abstract BaseComponent format(PlayerComponent player, String message);
|
public abstract BaseComponent format(Chat chat, PlayerComponent sender, String message);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMessage(BaseComponent message) {
|
public void sendMessage(BaseComponent message) {
|
||||||
|
@ -63,16 +54,13 @@ public abstract class SimpleChannel implements MultiAudience, Channel, PluginFac
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void show(Chat chat) {
|
public void show(Chat chat) {
|
||||||
if(chatCache.getIfPresent(chat._id()) == null) {
|
sendMessage(format(
|
||||||
chatCache.put(chat._id(), true);
|
chat,
|
||||||
sendMessage(format(
|
new PlayerComponent(
|
||||||
new PlayerComponent(
|
identityProvider.currentOrConsoleIdentity(chat.sender()),
|
||||||
identityProvider.currentOrConsoleIdentity(chat.sender()),
|
NameStyle.VERBOSE_SIMPLE
|
||||||
NameStyle.FANCY
|
), chat.message()
|
||||||
),
|
));
|
||||||
chat.message()
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -9,10 +9,14 @@ import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.permissions.Permission;
|
import org.bukkit.permissions.Permission;
|
||||||
import org.bukkit.permissions.PermissionDefault;
|
import org.bukkit.permissions.PermissionDefault;
|
||||||
|
import tc.oc.api.docs.Chat;
|
||||||
|
import tc.oc.api.docs.Server;
|
||||||
import tc.oc.api.docs.virtual.ChatDoc;
|
import tc.oc.api.docs.virtual.ChatDoc;
|
||||||
|
import tc.oc.api.servers.ServerStore;
|
||||||
import tc.oc.commons.bukkit.channels.PermissibleChannel;
|
import tc.oc.commons.bukkit.channels.PermissibleChannel;
|
||||||
import tc.oc.commons.bukkit.channels.SimpleChannel;
|
import tc.oc.commons.bukkit.channels.SimpleChannel;
|
||||||
import tc.oc.commons.bukkit.chat.PlayerComponent;
|
import tc.oc.commons.bukkit.chat.PlayerComponent;
|
||||||
|
import tc.oc.commons.bukkit.format.ServerFormatter;
|
||||||
import tc.oc.commons.bukkit.permissions.PermissionRegistry;
|
import tc.oc.commons.bukkit.permissions.PermissionRegistry;
|
||||||
import tc.oc.commons.bukkit.settings.SettingManagerProvider;
|
import tc.oc.commons.bukkit.settings.SettingManagerProvider;
|
||||||
import tc.oc.commons.core.chat.Component;
|
import tc.oc.commons.core.chat.Component;
|
||||||
|
@ -34,10 +38,12 @@ public class AdminChannel extends SimpleChannel implements PermissibleChannel {
|
||||||
|
|
||||||
private final SettingManagerProvider settings;
|
private final SettingManagerProvider settings;
|
||||||
private final PermissionRegistry permissions;
|
private final PermissionRegistry permissions;
|
||||||
|
private final ServerStore serverStore;
|
||||||
|
|
||||||
@Inject AdminChannel(PermissionRegistry permissions, SettingManagerProvider settings) {
|
@Inject AdminChannel(PermissionRegistry permissions, SettingManagerProvider settings, ServerStore serverStore) {
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.permissions = permissions;
|
this.permissions = permissions;
|
||||||
|
this.serverStore = serverStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -63,8 +69,17 @@ public class AdminChannel extends SimpleChannel implements PermissibleChannel {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BaseComponent format(PlayerComponent player, String message) {
|
public BaseComponent format(Chat chat, PlayerComponent player, String message) {
|
||||||
return new Component(player).extra(": ").extra(message);
|
BaseComponent stub;
|
||||||
|
if(chat.local()) {
|
||||||
|
stub = player;
|
||||||
|
} else {
|
||||||
|
final Server server = serverStore.byId(chat.server_id());
|
||||||
|
stub = ServerFormatter.light.nameWithDatacenter(server);
|
||||||
|
stub.addExtra(" ");
|
||||||
|
stub.addExtra(player);
|
||||||
|
}
|
||||||
|
return new Component(stub).extra(": ").extra(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -2,6 +2,7 @@ package tc.oc.commons.bukkit.channels.server;
|
||||||
|
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import tc.oc.api.docs.Chat;
|
||||||
import tc.oc.api.docs.virtual.ChatDoc;
|
import tc.oc.api.docs.virtual.ChatDoc;
|
||||||
import tc.oc.commons.bukkit.channels.SimpleChannel;
|
import tc.oc.commons.bukkit.channels.SimpleChannel;
|
||||||
import tc.oc.commons.bukkit.chat.PlayerComponent;
|
import tc.oc.commons.bukkit.chat.PlayerComponent;
|
||||||
|
@ -21,8 +22,8 @@ public class ServerChannel extends SimpleChannel {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BaseComponent format(PlayerComponent player, String message) {
|
public BaseComponent format(Chat chat, PlayerComponent sender, String message) {
|
||||||
return new Component().extra("<").extra(player).extra(">: ").extra(message);
|
return new Component().extra("<").extra(sender).extra(">: ").extra(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -3,6 +3,7 @@ package tc.oc.commons.bukkit.chat;
|
||||||
import tc.oc.api.docs.Chat;
|
import tc.oc.api.docs.Chat;
|
||||||
import tc.oc.api.docs.Server;
|
import tc.oc.api.docs.Server;
|
||||||
import tc.oc.api.docs.virtual.ChatDoc;
|
import tc.oc.api.docs.virtual.ChatDoc;
|
||||||
|
import tc.oc.api.docs.virtual.ServerDoc;
|
||||||
import tc.oc.api.message.MessageListener;
|
import tc.oc.api.message.MessageListener;
|
||||||
import tc.oc.api.message.types.ModelUpdate;
|
import tc.oc.api.message.types.ModelUpdate;
|
||||||
import tc.oc.api.queue.PrimaryQueue;
|
import tc.oc.api.queue.PrimaryQueue;
|
||||||
|
@ -62,15 +63,13 @@ public class ChatAnnouncer implements PluginFacet, MessageListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean shouldAnnounce(Chat chat) {
|
public boolean shouldAnnounce(Chat chat) {
|
||||||
final Server origin = serverStore.byId(chat.server_id());
|
final boolean remote = serverStore.canCommunicate(server._id(), chat.server_id());
|
||||||
final boolean local = server.equals(origin);
|
|
||||||
final boolean remote = serverStore.canCommunicate(server._id(), origin._id());
|
|
||||||
switch(chat.type()) {
|
switch(chat.type()) {
|
||||||
case SERVER:
|
case SERVER:
|
||||||
case TEAM:
|
case TEAM:
|
||||||
return local;
|
return false;
|
||||||
case ADMIN:
|
case ADMIN:
|
||||||
return local || remote;
|
return remote;
|
||||||
case BROADCAST:
|
case BROADCAST:
|
||||||
return shouldAnnounce(chat.broadcast());
|
return shouldAnnounce(chat.broadcast());
|
||||||
}
|
}
|
||||||
|
@ -83,12 +82,14 @@ public class ChatAnnouncer implements PluginFacet, MessageListener {
|
||||||
case SERVER:
|
case SERVER:
|
||||||
return server._id().equalsIgnoreCase(destination);
|
return server._id().equalsIgnoreCase(destination);
|
||||||
case FAMILY:
|
case FAMILY:
|
||||||
return server.family().equalsIgnoreCase(destination);
|
final String family = server.family();
|
||||||
|
return family == null || family.equalsIgnoreCase(destination);
|
||||||
case GAME:
|
case GAME:
|
||||||
final String game = server.game_id();
|
final String game = server.game_id();
|
||||||
return game == null || game.equalsIgnoreCase(destination);
|
return game == null || game.equalsIgnoreCase(destination);
|
||||||
case NETWORK:
|
case NETWORK:
|
||||||
return server.network().name().equalsIgnoreCase(destination);
|
final ServerDoc.Network network = server.network();
|
||||||
|
return network == null || network.name().equalsIgnoreCase(destination);
|
||||||
case GLOBAL:
|
case GLOBAL:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,6 +85,7 @@ public class ChatCreator implements PluginFacet, Listener {
|
||||||
public ChatDoc.Type type() { return chat.type(); }
|
public ChatDoc.Type type() { return chat.type(); }
|
||||||
public Instant sent_at() { return chat.sent_at(); }
|
public Instant sent_at() { return chat.sent_at(); }
|
||||||
public ChatDoc.Broadcast broadcast() { return chat.broadcast(); }
|
public ChatDoc.Broadcast broadcast() { return chat.broadcast(); }
|
||||||
|
public boolean local() { return true; }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,13 @@ public class NameStyle extends ForwardingSet<NameFlag> {
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
public static final NameStyle VERBOSE_SIMPLE = new NameStyle(
|
||||||
|
Sets.difference(
|
||||||
|
VERBOSE,
|
||||||
|
Sets.newHashSet(NameFlag.SELF, NameFlag.FRIEND)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
// Fancy minus mapmaker flair (for display in map credits)
|
// Fancy minus mapmaker flair (for display in map credits)
|
||||||
public static final NameStyle MAPMAKER = new NameStyle(
|
public static final NameStyle MAPMAKER = new NameStyle(
|
||||||
Sets.difference(
|
Sets.difference(
|
||||||
|
|
|
@ -46,8 +46,12 @@ public class ChannelMatchModule extends MatchModule implements Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unload() {
|
public void disable() {
|
||||||
channelRouter.setTeamChannelFunction(null);
|
channelRouter.setTeamChannelFunction(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unload() {
|
||||||
match.getParties().forEach(this::remove);
|
match.getParties().forEach(this::remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package tc.oc.pgm.channels;
|
||||||
import com.google.inject.assistedinject.Assisted;
|
import com.google.inject.assistedinject.Assisted;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import tc.oc.api.docs.Chat;
|
||||||
import tc.oc.api.docs.virtual.ChatDoc;
|
import tc.oc.api.docs.virtual.ChatDoc;
|
||||||
import tc.oc.commons.bukkit.channels.SimpleChannel;
|
import tc.oc.commons.bukkit.channels.SimpleChannel;
|
||||||
import tc.oc.commons.bukkit.chat.PlayerComponent;
|
import tc.oc.commons.bukkit.chat.PlayerComponent;
|
||||||
|
@ -39,7 +40,7 @@ public class PartyChannel extends SimpleChannel implements MultiAudience {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BaseComponent format(PlayerComponent player, String message) {
|
public BaseComponent format(Chat chat, PlayerComponent player, String message) {
|
||||||
return new Component(player).extra(": ").extra(message);
|
return new Component(player).extra(": ").extra(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue