package net.minecraft.network.play.server;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import net.minecraft.command.completion.TabCompletionData;
import net.minecraft.command.completion.TabCompletionData.Weighted;
import net.minecraft.network.INetHandler;
import net.minecraft.network.Packet;
import net.minecraft.network.PacketBuffer;
import net.minecraft.network.play.INetHandlerPlayClient;
public class S3APacketTabComplete implements Packet
{
private List<TabCompletionData> tcDataList;
private String vanillaData; // TODO: Backwards compatibility
private static final String __OBFID = "CL_00001288";
public S3APacketTabComplete()
{
}
public S3APacketTabComplete(final Set<Weighted> tcDataSet, final String vanillaData)
{
this.tcDataList = new ArrayList<TabCompletionData>(tcDataSet);
this.vanillaData = vanillaData;
}
/**
* Reads the raw packet data from the data stream.
*/
@Override
public void readPacketData(final PacketBuffer data) throws IOException
{
final int amount = data.readInt();
this.tcDataList = new ArrayList<TabCompletionData>(amount);
for (int i = 0; i < amount; ++i)
this.tcDataList.add(new TabCompletionData(data.readStringFromBuffer(32767), data.readInt(), data.readInt(), data.readStringFromBuffer(32767), data.readInt()));
}
/**
* Writes the raw packet data to the data stream.
*/
@Override
public void writePacketData(final PacketBuffer data) throws IOException
{
if (this.vanillaData == null)
{
data.writeInt(this.tcDataList.size());
for (final TabCompletionData tcData : this.tcDataList)
{
data.writeString(tcData.name);
data.writeInt(tcData.startIndex);
data.writeInt(tcData.endIndex);
data.writeString(tcData.replacement);
data.writeInt(tcData.newCursorIndex);
}
}
else
{
data.writeVarIntToBuffer(this.tcDataList.size());
for (final TabCompletionData tcData : this.tcDataList)
data.writeString(
this.vanillaData.substring(
this.vanillaData.lastIndexOf(32, tcData.startIndex) + 1,
tcData.startIndex)
+ tcData.replacement);
}
}
/**
* Passes this Packet on to the NetHandler for processing.
*/
public void processPacket(final INetHandlerPlayClient handler)
{
handler.handleTabComplete(this);
}
public List<TabCompletionData> getCompleters()
{
return this.tcDataList;
}
/**
* Passes this Packet on to the NetHandler for processing.
*/
@Override
public void processPacket(final INetHandler handler)
{
this.processPacket((INetHandlerPlayClient) handler);
}
}