StringTag.java
net.minecraft.nbt.StringTag
信息
- 全限定名:net.minecraft.nbt.StringTag
- 类型:public record
- 包:net.minecraft.nbt
- 源码路径:src/main/java/net/minecraft/nbt/StringTag.java
- 起始行号:L8
- 实现:PrimitiveTag
- 职责:
TODO
字段/常量
-
SELF_SIZE_IN_BYTES- 类型:
int - 修饰符:
private static final - 源码定位:
L9 - 说明:
TODO
- 类型:
-
TYPE- 类型:
TagType<StringTag> - 修饰符:
public static final public public private static public public public - 源码定位:
L10 - 说明:
TODO
- 类型:
-
EMPTY- 类型:
StringTag - 修饰符:
private static final - 源码定位:
L42 - 说明:
TODO
- 类型:
-
DOUBLE_QUOTE- 类型:
char - 修饰符:
private static final - 源码定位:
L43 - 说明:
TODO
- 类型:
-
SINGLE_QUOTE- 类型:
char - 修饰符:
private static final - 源码定位:
L44 - 说明:
TODO
- 类型:
-
ESCAPE- 类型:
char - 修饰符:
private static final - 源码定位:
L45 - 说明:
TODO
- 类型:
-
NOT_SET- 类型:
char - 修饰符:
private static final - 源码定位:
L46 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public StringTag(String value) @ L48
- 构造器名:StringTag
- 源码定位:L48
- 修饰符:public
参数:
- value: String
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static void skipString(DataInput input) @ L53
- 方法名:skipString
- 源码定位:L53
- 返回类型:void
- 修饰符:public static
参数:
- input: DataInput
说明:
TODO
public static StringTag valueOf(String data) @ L57
- 方法名:valueOf
- 源码定位:L57
- 返回类型:StringTag
- 修饰符:public static
参数:
- data: String
说明:
TODO
public void write(DataOutput output) @ L61
- 方法名:write
- 源码定位:L61
- 返回类型:void
- 修饰符:public
参数:
- output: DataOutput
说明:
TODO
public int sizeInBytes() @ L66
- 方法名:sizeInBytes
- 源码定位:L66
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
public byte getId() @ L71
- 方法名:getId
- 源码定位:L71
- 返回类型:byte
- 修饰符:public
参数:
- 无
说明:
TODO
public TagType<StringTag> getType() @ L76
- 方法名:getType
- 源码定位:L76
- 返回类型:TagType
- 修饰符:public
参数:
- 无
说明:
TODO
public String toString() @ L81
- 方法名:toString
- 源码定位:L81
- 返回类型:String
- 修饰符:public
参数:
- 无
说明:
TODO
public StringTag copy() @ L88
- 方法名:copy
- 源码定位:L88
- 返回类型:StringTag
- 修饰符:public
参数:
- 无
说明:
TODO
public Optional<String> asString() @ L92
- 方法名:asString
- 源码定位:L92
- 返回类型:Optional
- 修饰符:public
参数:
- 无
说明:
TODO
public void accept(TagVisitor visitor) @ L97
- 方法名:accept
- 源码定位:L97
- 返回类型:void
- 修饰符:public
参数:
- visitor: TagVisitor
说明:
TODO
public static String quoteAndEscape(String input) @ L102
- 方法名:quoteAndEscape
- 源码定位:L102
- 返回类型:String
- 修饰符:public static
参数:
- input: String
说明:
TODO
public static void quoteAndEscape(String input, StringBuilder result) @ L108
- 方法名:quoteAndEscape
- 源码定位:L108
- 返回类型:void
- 修饰符:public static
参数:
- input: String
- result: StringBuilder
说明:
TODO
public static String escapeWithoutQuotes(String input) @ L146
- 方法名:escapeWithoutQuotes
- 源码定位:L146
- 返回类型:String
- 修饰符:public static
参数:
- input: String
说明:
TODO
public static void escapeWithoutQuotes(String input, StringBuilder result) @ L152
- 方法名:escapeWithoutQuotes
- 源码定位:L152
- 返回类型:void
- 修饰符:public static
参数:
- input: String
- result: StringBuilder
说明:
TODO
public StreamTagVisitor.ValueResult accept(StreamTagVisitor visitor) @ L174
- 方法名:accept
- 源码定位:L174
- 返回类型:StreamTagVisitor.ValueResult
- 修饰符:public
参数:
- visitor: StreamTagVisitor
说明:
TODO
代码
public record StringTag(String value) implements PrimitiveTag {
private static final int SELF_SIZE_IN_BYTES = 36;
public static final TagType<StringTag> TYPE = new TagType.VariableSize<StringTag>() {
public StringTag load(DataInput input, NbtAccounter accounter) throws IOException {
return StringTag.valueOf(readAccounted(input, accounter));
}
@Override
public StreamTagVisitor.ValueResult parse(DataInput input, StreamTagVisitor output, NbtAccounter accounter) throws IOException {
return output.visit(readAccounted(input, accounter));
}
private static String readAccounted(DataInput input, NbtAccounter accounter) throws IOException {
accounter.accountBytes(36L);
String data = input.readUTF();
accounter.accountBytes(2L, data.length());
return data;
}
@Override
public void skip(DataInput input, NbtAccounter accounter) throws IOException {
StringTag.skipString(input);
}
@Override
public String getName() {
return "STRING";
}
@Override
public String getPrettyName() {
return "TAG_String";
}
};
private static final StringTag EMPTY = new StringTag("");
private static final char DOUBLE_QUOTE = '"';
private static final char SINGLE_QUOTE = '\'';
private static final char ESCAPE = '\\';
private static final char NOT_SET = '\u0000';
@Deprecated(forRemoval = true)
public StringTag(String value) {
this.value = value;
}
public static void skipString(DataInput input) throws IOException {
input.skipBytes(input.readUnsignedShort());
}
public static StringTag valueOf(String data) {
return data.isEmpty() ? EMPTY : new StringTag(data);
}
@Override
public void write(DataOutput output) throws IOException {
output.writeUTF(this.value);
}
@Override
public int sizeInBytes() {
return 36 + 2 * this.value.length();
}
@Override
public byte getId() {
return 8;
}
@Override
public TagType<StringTag> getType() {
return TYPE;
}
@Override
public String toString() {
StringTagVisitor visitor = new StringTagVisitor();
visitor.visitString(this);
return visitor.build();
}
public StringTag copy() {
return this;
}
@Override
public Optional<String> asString() {
return Optional.of(this.value);
}
@Override
public void accept(TagVisitor visitor) {
visitor.visitString(this);
}
public static String quoteAndEscape(String input) {
StringBuilder result = new StringBuilder();
quoteAndEscape(input, result);
return result.toString();
}
public static void quoteAndEscape(String input, StringBuilder result) {
int quoteMarkIndex = result.length();
result.append(' ');
char quote = 0;
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c == '\\') {
result.append("\\\\");
} else if (c != '"' && c != '\'') {
String escaped = SnbtGrammar.escapeControlCharacters(c);
if (escaped != null) {
result.append('\\');
result.append(escaped);
} else {
result.append(c);
}
} else {
if (quote == 0) {
quote = (char)(c == '"' ? 39 : 34);
}
if (quote == c) {
result.append('\\');
}
result.append(c);
}
}
if (quote == 0) {
quote = '"';
}
result.setCharAt(quoteMarkIndex, quote);
result.append(quote);
}
public static String escapeWithoutQuotes(String input) {
StringBuilder result = new StringBuilder();
escapeWithoutQuotes(input, result);
return result.toString();
}
public static void escapeWithoutQuotes(String input, StringBuilder result) {
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
switch (c) {
case '"':
case '\'':
case '\\':
result.append('\\');
result.append(c);
break;
default:
String escaped = SnbtGrammar.escapeControlCharacters(c);
if (escaped != null) {
result.append('\\');
result.append(escaped);
} else {
result.append(c);
}
}
}
}
@Override
public StreamTagVisitor.ValueResult accept(StreamTagVisitor visitor) {
return visitor.visit(this.value);
}
}引用的其他类
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SnbtGrammar.escapeControlCharacters()
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
StringTagVisitor()
- 引用位置:
-
- 引用位置:
字段/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置: