Skip to content

Commit

Permalink
Split large messages into multiple messages. Fix #5
Browse files Browse the repository at this point in the history
 - A few other minor changes
  • Loading branch information
simon816 committed Jul 13, 2017
1 parent 43dec4c commit be2b3b9
Show file tree
Hide file tree
Showing 8 changed files with 33 additions and 13 deletions.
3 changes: 2 additions & 1 deletion src/lib/java/com/simon816/chatui/lib/ChatUILib.java
Expand Up @@ -80,12 +80,13 @@ public static ClickAction<?> command(String subcommand) {
public static ChatUILib getInstance() {
return instance;
}
/* Plugin event listeners (internal) */

public LanguagePackManager getLanguageManager() {
return this.languageManager;
}

/* Plugin event listeners (internal) */

@Listener
public void onPreInit(GamePreInitializationEvent event) {
instance = this;
Expand Down
3 changes: 2 additions & 1 deletion src/lib/java/com/simon816/chatui/lib/DefaultChatView.java
Expand Up @@ -4,6 +4,7 @@

import com.google.common.collect.Lists;
import com.simon816.chatui.lib.config.LibConfig;
import com.simon816.chatui.util.Utils;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.command.CommandSource;
import org.spongepowered.api.entity.living.player.Player;
Expand Down Expand Up @@ -91,7 +92,7 @@ private void flushBuffer() {
public void update() {
if (this.window != null) {
this.isUpdating = true;
getPlayer().sendMessage(this.window.draw(this.context));
Utils.sendMessageSplitLarge(this.context, this.window.draw(this.context));
this.isUpdating = false;
}
}
Expand Down
Expand Up @@ -131,7 +131,7 @@ public Text createBorder(TableModel model, int rowIndex, int[] colMaxWidths, Pla
Text.Builder lineBuilder = Text.builder();
for (int i = 0; i < colMaxWidths.length; i++) {
char edge = i == 0 ? left : join;
int edgeWidth = ctx.utils().getWidth(left, false);
int edgeWidth = ctx.utils().getWidth(edge, false);
int width = colMaxWidths[i] + edgeWidth;
if (i < colMaxWidths.length - 1) {
ctx.utils().startAndRepeat(lineBuilder, edge, '─', width);
Expand Down
9 changes: 3 additions & 6 deletions src/lib/java/com/simon816/chatui/util/FontData.java
Expand Up @@ -7,7 +7,6 @@
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.io.BaseEncoding;
import scala.actors.threadpool.Arrays;

import java.awt.image.BufferedImage;
import java.io.IOException;
Expand Down Expand Up @@ -154,6 +153,9 @@ public double getWidth(int codePoint, boolean isBold, boolean forceUnicode) {
return 0;
}
if (codePoint == ' ') {
if (isBold) {
return 5;
}
return 4;
}
int nonUnicodeIdx = forceUnicode ? -1 : ASCII_PNG_CHARS.indexOf(codePoint);
Expand Down Expand Up @@ -191,11 +193,6 @@ public static FontData fromString(String fontData) {
}
}

@Override
public String toString() {
return Arrays.toString(this.asciiCharWidths);
}

public static void checkValid(String fontData) throws IllegalArgumentException {
if (fontData == null || fontData.isEmpty()) {
return;
Expand Down
16 changes: 16 additions & 0 deletions src/lib/java/com/simon816/chatui/util/Utils.java
@@ -1,12 +1,17 @@
package com.simon816.chatui.util;

import com.google.common.base.Utf8;
import com.simon816.chatui.lib.PlayerChatView;
import com.simon816.chatui.lib.PlayerContext;
import com.simon816.chatui.lib.internal.ClickCallback;
import org.spongepowered.api.command.CommandSource;
import org.spongepowered.api.command.source.ProxySource;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.text.action.ClickAction;
import org.spongepowered.api.text.action.TextActions;
import org.spongepowered.api.text.serializer.TextSerializers;

import java.util.List;
import java.util.function.Consumer;

public class Utils {
Expand All @@ -28,4 +33,15 @@ public static ClickAction<?> execClick(Runnable action) {
view.update();
});
}

public static void sendMessageSplitLarge(PlayerContext ctx, Text text) {
String json = TextSerializers.JSON.serialize(text);
int size = Utf8.encodedLength(json);
if (size > 32767) {
List<Text> lines = ctx.utils().splitLines(text, ctx.width);
ctx.getPlayer().sendMessages(lines);
} else {
ctx.getPlayer().sendMessage(text);
}
}
}
3 changes: 2 additions & 1 deletion src/main/java/com/simon816/chatui/ActivePlayerChatView.java
Expand Up @@ -16,6 +16,7 @@
import com.simon816.chatui.tabs.WindowTab;
import com.simon816.chatui.tabs.config.ConfigEditTab;
import com.simon816.chatui.tabs.perm.PermissionsTab;
import com.simon816.chatui.util.Utils;
import ninja.leaping.configurate.ConfigurationNode;
import ninja.leaping.configurate.SimpleConfigurationNode;
import org.spongepowered.api.Sponge;
Expand Down Expand Up @@ -161,7 +162,7 @@ public NewTab getNewTab() {
@Override
public void update() {
this.isUpdating = true;
this.playerContext.getPlayer().sendMessage(this.window.draw(this.playerContext));
Utils.sendMessageSplitLarge(this.playerContext, this.window.draw(this.playerContext));
this.isUpdating = false;
}

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/simon816/chatui/PlayerList.java
Expand Up @@ -130,11 +130,11 @@ public void addAddon(Addon addon) {
private void addDefaultAddons(Player player) {
TextFormat link = TextFormat.of(TextColors.BLUE, TextStyles.UNDERLINE);
if (player.hasPermission(PERM_KICK)) {
addAddon(listPlayer -> Text.builder("Kick").format(link).onClick(Utils.execClick(() -> listPlayer.kick())).build());
addAddon(listPlayer -> Text.builder("Kick").format(link).onClick(Utils.execClick(view -> listPlayer.kick())).build());
}
if (player.hasPermission(PERM_BAN)) {
addAddon(listPlayer -> Text.builder("Ban").format(link)
.onClick(Utils.execClick(() -> Sponge.getServiceManager().provideUnchecked(BanService.class).addBan(Ban.of(listPlayer.getProfile()))))
.onClick(Utils.execClick(view -> Sponge.getServiceManager().provideUnchecked(BanService.class).addBan(Ban.of(listPlayer.getProfile()))))
.build());
}
}
Expand Down
6 changes: 5 additions & 1 deletion src/main/java/com/simon816/chatui/tabs/WindowTab.java
Expand Up @@ -12,7 +12,11 @@ public class WindowTab extends Tab {
private final TopWindow window;

public WindowTab(TopWindow window) {
super(Text.of(window.getClass().getSimpleName()), new TopWindowPane(window));
this(window, Text.of(window.getClass().getSimpleName()));
}

public WindowTab(TopWindow window, Text title) {
super(title, new TopWindowPane(window));
this.window = window;
}

Expand Down

0 comments on commit be2b3b9

Please sign in to comment.