Fix team chat from being reset after cycle

This commit is contained in:
Ashcon Partovi 2018-05-22 15:15:27 -07:00
parent 1eaae36b32
commit 9b59cc0cde
No known key found for this signature in database
GPG Key ID: 97468B9EF2123630
9 changed files with 53 additions and 34 deletions

View File

@ -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 {

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;
} }

View File

@ -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; }
}; };
} }

View File

@ -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(

View File

@ -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);
} }

View File

@ -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);
} }