Rework packet reading a little in more preparation for Forge.
This commit is contained in:
parent
d17c457040
commit
d2a919fc06
@ -1,10 +1,11 @@
|
|||||||
package net.md_5.bungee.packet;
|
package net.md_5.bungee.packet;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
import java.io.DataInput;
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutput;
|
import java.io.DataOutput;
|
||||||
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import lombok.Delegate;
|
import lombok.Delegate;
|
||||||
@ -15,7 +16,7 @@ import net.md_5.bungee.Util;
|
|||||||
* subclasses can read and write to the backing byte array which can be
|
* subclasses can read and write to the backing byte array which can be
|
||||||
* retrieved via the {@link #getPacket()} method.
|
* retrieved via the {@link #getPacket()} method.
|
||||||
*/
|
*/
|
||||||
public abstract class DefinedPacket implements DataInput, DataOutput
|
public abstract class DefinedPacket implements DataOutput
|
||||||
{
|
{
|
||||||
|
|
||||||
private interface Overriden
|
private interface Overriden
|
||||||
@ -25,8 +26,8 @@ public abstract class DefinedPacket implements DataInput, DataOutput
|
|||||||
|
|
||||||
void writeUTF(String s);
|
void writeUTF(String s);
|
||||||
}
|
}
|
||||||
@Delegate(excludes = Overriden.class)
|
private ByteArrayInputStream bin;
|
||||||
private ByteArrayDataInput in;
|
private DataInputStream input;
|
||||||
@Delegate(excludes = Overriden.class)
|
@Delegate(excludes = Overriden.class)
|
||||||
private ByteArrayDataOutput out;
|
private ByteArrayDataOutput out;
|
||||||
/**
|
/**
|
||||||
@ -40,7 +41,8 @@ public abstract class DefinedPacket implements DataInput, DataOutput
|
|||||||
|
|
||||||
public DefinedPacket(int id, byte[] buf)
|
public DefinedPacket(int id, byte[] buf)
|
||||||
{
|
{
|
||||||
in = ByteStreams.newDataInput( buf );
|
bin = new ByteArrayInputStream( buf );
|
||||||
|
input = new DataInputStream( bin );
|
||||||
if ( readUnsignedByte() != id )
|
if ( readUnsignedByte() != id )
|
||||||
{
|
{
|
||||||
throw new IllegalArgumentException( "Wasn't expecting packet id " + Util.hex( id ) );
|
throw new IllegalArgumentException( "Wasn't expecting packet id " + Util.hex( id ) );
|
||||||
@ -74,7 +76,6 @@ public abstract class DefinedPacket implements DataInput, DataOutput
|
|||||||
writeChars( s );
|
writeChars( s );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String readUTF()
|
public String readUTF()
|
||||||
{
|
{
|
||||||
short len = readShort();
|
short len = readShort();
|
||||||
@ -100,6 +101,88 @@ public abstract class DefinedPacket implements DataInput, DataOutput
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final int available()
|
||||||
|
{
|
||||||
|
return bin.available();
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void readFully(byte b[])
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
input.readFully( b );
|
||||||
|
} catch ( IOException e )
|
||||||
|
{
|
||||||
|
throw new IllegalStateException( e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final boolean readBoolean()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return input.readBoolean();
|
||||||
|
} catch ( IOException e )
|
||||||
|
{
|
||||||
|
throw new IllegalStateException( e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final byte readByte()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return input.readByte();
|
||||||
|
} catch ( IOException e )
|
||||||
|
{
|
||||||
|
throw new IllegalStateException( e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final int readUnsignedByte()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return input.readUnsignedByte();
|
||||||
|
} catch ( IOException e )
|
||||||
|
{
|
||||||
|
throw new IllegalStateException( e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final short readShort()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return input.readShort();
|
||||||
|
} catch ( IOException e )
|
||||||
|
{
|
||||||
|
throw new IllegalStateException( e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final char readChar()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return input.readChar();
|
||||||
|
} catch ( IOException e )
|
||||||
|
{
|
||||||
|
throw new IllegalStateException( e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final int readInt()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return input.readInt();
|
||||||
|
} catch ( IOException e )
|
||||||
|
{
|
||||||
|
throw new IllegalStateException( e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract boolean equals(Object obj);
|
public abstract boolean equals(Object obj);
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ public class Packet1Login extends DefinedPacket
|
|||||||
public int entityId;
|
public int entityId;
|
||||||
public String levelType;
|
public String levelType;
|
||||||
public byte gameMode;
|
public byte gameMode;
|
||||||
public byte dimension;
|
public int dimension;
|
||||||
public byte difficulty;
|
public byte difficulty;
|
||||||
public byte unused;
|
public byte unused;
|
||||||
public byte maxPlayers;
|
public byte maxPlayers;
|
||||||
@ -34,7 +34,16 @@ public class Packet1Login extends DefinedPacket
|
|||||||
this.entityId = readInt();
|
this.entityId = readInt();
|
||||||
this.levelType = readUTF();
|
this.levelType = readUTF();
|
||||||
this.gameMode = readByte();
|
this.gameMode = readByte();
|
||||||
this.dimension = readByte();
|
if ( available() == 4 )
|
||||||
|
{
|
||||||
|
this.dimension = readByte();
|
||||||
|
} else if ( available() == 7 )
|
||||||
|
{
|
||||||
|
this.dimension = readInt();
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
this.difficulty = readByte();
|
this.difficulty = readByte();
|
||||||
this.unused = readByte();
|
this.unused = readByte();
|
||||||
this.maxPlayers = readByte();
|
this.maxPlayers = readByte();
|
||||||
|
Loading…
Reference in New Issue
Block a user