Implement basic entity metadata mapping to remap fireworks for boosting.
This commit is contained in:
parent
b728aea382
commit
6104354fa1
@ -19,6 +19,12 @@
|
|||||||
<description>Proxy component of the Elastic Portal Suite</description>
|
<description>Proxy component of the Elastic Portal Suite</description>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.flowpowered</groupId>
|
||||||
|
<artifactId>flow-nbt</artifactId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.netty</groupId>
|
<groupId>io.netty</groupId>
|
||||||
<artifactId>netty-codec-http</artifactId>
|
<artifactId>netty-codec-http</artifactId>
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
package net.md_5.bungee.entitymap;
|
package net.md_5.bungee.entitymap;
|
||||||
|
|
||||||
|
import com.flowpowered.nbt.stream.NBTInputStream;
|
||||||
|
import com.google.common.base.Throwables;
|
||||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.buffer.ByteBufInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import net.md_5.bungee.protocol.DefinedPacket;
|
import net.md_5.bungee.protocol.DefinedPacket;
|
||||||
@ -101,6 +105,91 @@ public abstract class EntityMap
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static void rewriteMetaVarInt(ByteBuf packet, int oldId, int newId, int metaIndex)
|
||||||
|
{
|
||||||
|
int readerIndex = packet.readerIndex();
|
||||||
|
|
||||||
|
short index;
|
||||||
|
while ( ( index = packet.readUnsignedByte() ) != 0xFF )
|
||||||
|
{
|
||||||
|
int type = DefinedPacket.readVarInt( packet );
|
||||||
|
|
||||||
|
switch ( type )
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
packet.skipBytes( 1 ); // byte
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if ( index == metaIndex )
|
||||||
|
{
|
||||||
|
int position = packet.readerIndex();
|
||||||
|
rewriteVarInt( packet, oldId, newId, position );
|
||||||
|
packet.readerIndex( position );
|
||||||
|
}
|
||||||
|
DefinedPacket.readVarInt( packet );
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
packet.skipBytes( 4 ); // float
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
DefinedPacket.readString( packet );
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
if ( packet.readShort() != -1 )
|
||||||
|
{
|
||||||
|
packet.skipBytes( 3 ); // byte, short
|
||||||
|
|
||||||
|
int position = packet.readerIndex();
|
||||||
|
if ( packet.readByte() != 0 )
|
||||||
|
{
|
||||||
|
packet.readerIndex( position );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
new NBTInputStream( new ByteBufInputStream( packet ), false ).readTag();
|
||||||
|
} catch ( IOException ex )
|
||||||
|
{
|
||||||
|
throw Throwables.propagate( ex );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
packet.skipBytes( 1 ); // boolean
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
packet.skipBytes( 12 ); // float, float, float
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
packet.readLong();
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
if ( packet.readBoolean() )
|
||||||
|
{
|
||||||
|
packet.skipBytes( 8 ); // long
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
DefinedPacket.readVarInt( packet );
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
if ( packet.readBoolean() )
|
||||||
|
{
|
||||||
|
packet.skipBytes( 16 ); // long, long
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
DefinedPacket.readVarInt( packet );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException( "Unknown meta type " + type );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
packet.readerIndex( readerIndex );
|
||||||
|
}
|
||||||
|
|
||||||
// Handles simple packets
|
// Handles simple packets
|
||||||
private static void rewrite(ByteBuf packet, int oldId, int newId, boolean[] ints, boolean[] varints)
|
private static void rewrite(ByteBuf packet, int oldId, int newId, boolean[] ints, boolean[] varints)
|
||||||
{
|
{
|
||||||
|
@ -147,6 +147,10 @@ class EntityMap_1_11 extends EntityMap
|
|||||||
rewriteInt( packet, oldId, newId, packet.readerIndex() );
|
rewriteInt( packet, oldId, newId, packet.readerIndex() );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 0x39 /* EntityMetadata : PacketPlayOutEntityMetadata */:
|
||||||
|
DefinedPacket.readVarInt( packet ); // Entity ID
|
||||||
|
rewriteMetaVarInt( packet, oldId, newId, 7 ); // fireworks (et al)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
packet.readerIndex( readerIndex );
|
packet.readerIndex( readerIndex );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user