Parse empty sign lines as empty JSON strings.

Since the server doesn't bother validating sign text, and
the client validates it by crashing. Note that this attempts
to wrap strings as JSON, but hasn't been fully tested.
Dieser Commit ist enthalten in:
wizjany 2016-04-14 18:53:51 -04:00
Ursprung 219d2da0ff
Commit 867e59ba3d
2 geänderte Dateien mit 19 neuen und 3 gelöschten Zeilen

Datei anzeigen

@ -22,6 +22,7 @@ package com.sk89q.worldedit.blocks;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.jnbt.StringTag;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.util.gson.GsonUtil;
import java.util.HashMap;
import java.util.Map;
@ -33,6 +34,8 @@ public class SignBlock extends BaseBlock implements TileEntityBlock {
private String[] text;
private static String EMPTY = "{\"text\":\"\"}";
/**
* Construct the sign without text.
*
@ -41,7 +44,7 @@ public class SignBlock extends BaseBlock implements TileEntityBlock {
*/
public SignBlock(int type, int data) {
super(type, data);
this.text = new String[] { "", "", "", "" };
this.text = new String[] { EMPTY, EMPTY, EMPTY, EMPTY };
}
/**
@ -54,7 +57,15 @@ public class SignBlock extends BaseBlock implements TileEntityBlock {
public SignBlock(int type, int data, String[] text) {
super(type, data);
if (text == null) {
this.text = new String[] { "", "", "", "" };
this.text = new String[] { EMPTY, EMPTY, EMPTY, EMPTY };
return;
}
for (int i = 0; i < text.length; i++) {
if (text[i].isEmpty()) {
text[i] = EMPTY;
} else {
text[i] = "{\"text\":\"" + GsonUtil.stringValue(text[i]) + "\"}";
}
}
this.text = text;
}
@ -110,7 +121,7 @@ public class SignBlock extends BaseBlock implements TileEntityBlock {
Tag t;
text = new String[] { "", "", "", "" };
text = new String[] { EMPTY, EMPTY, EMPTY, EMPTY };
t = values.get("id");
if (!(t instanceof StringTag) || !((StringTag) t).getValue().equals("Sign")) {

Datei anzeigen

@ -19,6 +19,7 @@
package com.sk89q.worldedit.util.gson;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.sk89q.worldedit.Vector;
@ -41,4 +42,8 @@ public final class GsonUtil {
return gsonBuilder;
}
private static final Gson gson = new Gson();
public static String stringValue(String s) {
return gson.toJson(s);
}
}