Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-12-25 15:50:10 +01:00
Merge pull request #1576 from astei/remove-unneeded-indirection
Remove unneeded indirection
Dieser Commit ist enthalten in:
Commit
d5907711e1
@ -1,14 +1,15 @@
|
|||||||
package us.myles.ViaVersion.api.type.types;
|
package us.myles.ViaVersion.api.type.types;
|
||||||
|
|
||||||
import com.google.common.base.Charsets;
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
public class StringType extends Type<String> {
|
public class StringType extends Type<String> {
|
||||||
// String#length() (used to limit the string in Minecraft source code) uses char[]#length
|
// String#length() (used to limit the string in Minecraft source code) uses char[]#length
|
||||||
private static final int maxJavaCharUtf8Length = Character.toString(Character.MAX_VALUE)
|
private static final int maxJavaCharUtf8Length = Character.toString(Character.MAX_VALUE)
|
||||||
.getBytes(Charsets.UTF_8).length;
|
.getBytes(StandardCharsets.UTF_8).length;
|
||||||
|
|
||||||
public StringType() {
|
public StringType() {
|
||||||
super(String.class);
|
super(String.class);
|
||||||
@ -21,9 +22,9 @@ public class StringType extends Type<String> {
|
|||||||
Preconditions.checkArgument(len <= Short.MAX_VALUE * maxJavaCharUtf8Length,
|
Preconditions.checkArgument(len <= Short.MAX_VALUE * maxJavaCharUtf8Length,
|
||||||
"Cannot receive string longer than Short.MAX_VALUE * " + maxJavaCharUtf8Length + " bytes (got %s bytes)", len);
|
"Cannot receive string longer than Short.MAX_VALUE * " + maxJavaCharUtf8Length + " bytes (got %s bytes)", len);
|
||||||
|
|
||||||
byte[] b = new byte[len];
|
String string = buffer.toString(buffer.readerIndex(), len, StandardCharsets.UTF_8);
|
||||||
buffer.readBytes(b);
|
buffer.skipBytes(len);
|
||||||
String string = new String(b, Charsets.UTF_8);
|
|
||||||
Preconditions.checkArgument(string.length() <= Short.MAX_VALUE,
|
Preconditions.checkArgument(string.length() <= Short.MAX_VALUE,
|
||||||
"Cannot receive string longer than Short.MAX_VALUE characters (got %s bytes)", string.length());
|
"Cannot receive string longer than Short.MAX_VALUE characters (got %s bytes)", string.length());
|
||||||
|
|
||||||
@ -34,7 +35,7 @@ public class StringType extends Type<String> {
|
|||||||
public void write(ByteBuf buffer, String object) throws Exception {
|
public void write(ByteBuf buffer, String object) throws Exception {
|
||||||
Preconditions.checkArgument(object.length() <= Short.MAX_VALUE, "Cannot send string longer than Short.MAX_VALUE (got %s characters)", object.length());
|
Preconditions.checkArgument(object.length() <= Short.MAX_VALUE, "Cannot send string longer than Short.MAX_VALUE (got %s characters)", object.length());
|
||||||
|
|
||||||
byte[] b = object.getBytes(Charsets.UTF_8);
|
byte[] b = object.getBytes(StandardCharsets.UTF_8);
|
||||||
Type.VAR_INT.write(buffer, b.length);
|
Type.VAR_INT.write(buffer, b.length);
|
||||||
buffer.writeBytes(b);
|
buffer.writeBytes(b);
|
||||||
}
|
}
|
||||||
|
@ -36,10 +36,7 @@ public class NBTType extends Type<CompoundTag> {
|
|||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
buffer.readerIndex(readerIndex);
|
buffer.readerIndex(readerIndex);
|
||||||
ByteBufInputStream bytebufStream = new ByteBufInputStream(buffer);
|
return (CompoundTag) NBTIO.readTag((DataInput) new ByteBufInputStream(buffer));
|
||||||
try (DataInputStream dataInputStream = new DataInputStream(bytebufStream)) {
|
|
||||||
return (CompoundTag) NBTIO.readTag((DataInput) dataInputStream);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,11 +46,7 @@ public class NBTType extends Type<CompoundTag> {
|
|||||||
buffer.writeByte(0);
|
buffer.writeByte(0);
|
||||||
} else {
|
} else {
|
||||||
ByteBufOutputStream bytebufStream = new ByteBufOutputStream(buffer);
|
ByteBufOutputStream bytebufStream = new ByteBufOutputStream(buffer);
|
||||||
DataOutputStream dataOutputStream = new DataOutputStream(bytebufStream);
|
NBTIO.writeTag((DataOutput) bytebufStream, object);
|
||||||
|
|
||||||
NBTIO.writeTag((DataOutput) dataOutputStream, object);
|
|
||||||
|
|
||||||
dataOutputStream.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren