festivia chatlistener


SUBMITTED BY: veekna

DATE: July 13, 2020, 11:02 a.m.

FORMAT: Text only

SIZE: 2.8 kB

HITS: 1176

  1. package net.smoofyuniverse.festivia.listener;
  2. import com.google.inject.Inject;
  3. import net.smoofyuniverse.cardio.text.TextFormatter;
  4. import net.smoofyuniverse.festivia.api.State;
  5. import net.smoofyuniverse.festivia.impl.FestiviaManager;
  6. import net.smoofyuniverse.festivia.impl.GameTeam;
  7. import net.smoofyuniverse.festivia.impl.GameUser;
  8. import org.spongepowered.api.entity.living.player.Player;
  9. import org.spongepowered.api.event.Listener;
  10. import org.spongepowered.api.event.filter.cause.Root;
  11. import org.spongepowered.api.event.message.MessageChannelEvent;
  12. import org.spongepowered.api.event.message.MessageEvent.MessageFormatter;
  13. import org.spongepowered.api.text.Text;
  14. import org.spongepowered.api.text.TextTemplate;
  15. import org.spongepowered.api.text.action.TextActions;
  16. import org.spongepowered.api.text.channel.MessageChannel;
  17. import org.spongepowered.api.text.format.TextColors;
  18. import org.spongepowered.api.text.transform.SimpleTextTemplateApplier;
  19. public class ChatListener {
  20. public static final TextTemplate BODY_CONTENT = TextTemplate.of(TextTemplate.arg("content")),
  21. HEADER_NAME = TextTemplate.of(TextTemplate.arg("name"), ": "),
  22. HEADER_TEAM = TextTemplate.of(TextColors.DARK_GRAY, TextActions.showText(Text.of("Précédez le message par ! pour parler à tous.")), "[Equipe] "),
  23. HEADER_SPEC = TextTemplate.of(TextColors.GRAY, "[Spec] ");
  24. @Inject
  25. private FestiviaManager manager;
  26. @Listener
  27. public void onPlayerChat(MessageChannelEvent.Chat e, @Root Player p) {
  28. if (!e.getChannel().isPresent())
  29. return;
  30. String content = e.getRawMessage().toPlain().trim();
  31. GameUser u = GameUser.of(p);
  32. e.setChannel(MessageChannel.TO_PLAYERS);
  33. MessageFormatter f = e.getFormatter();
  34. f.getHeader().clear();
  35. f.getBody().clear();
  36. if (!u.inGame())
  37. f.getHeader().add(new SimpleTextTemplateApplier(HEADER_SPEC)); // Spectator prefix
  38. if (content.charAt(0) == '!') { // Global chat
  39. if (content.length() == 1) {
  40. e.setCancelled(true);
  41. return;
  42. }
  43. content = content.substring(1);
  44. } else {
  45. State state = this.manager.getState();
  46. if (state == State.WAITING || state == State.STARTING || state == State.PLAYING) {
  47. GameTeam t = u.getTeam().orElse(null);
  48. if (t != null) { // Team chat
  49. f.getHeader().add(new SimpleTextTemplateApplier(HEADER_TEAM)); // Team prefix
  50. e.setChannel(MessageChannel.fixed(t.getUsers()));
  51. }
  52. }
  53. }
  54. SimpleTextTemplateApplier nameA = new SimpleTextTemplateApplier(HEADER_NAME);
  55. nameA.setParameter("name", u.getColoredName());
  56. f.getHeader().add(nameA);
  57. SimpleTextTemplateApplier contentA = new SimpleTextTemplateApplier(BODY_CONTENT);
  58. contentA.setParameter("content", TextFormatter.format(p, content));
  59. f.getBody().add(contentA);
  60. }
  61. }

comments powered by Disqus