package net.minecraft.command.completion;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
import net.minecraft.command.completion.TabCompletionData.Weighted;
import net.minecraft.command.parser.ParsingManager;
import net.minecraft.event.ClickEvent;
import net.minecraft.event.ClickEvent.Action;
import net.minecraft.network.NetHandlerPlayServer;
import net.minecraft.network.play.server.S02PacketChat;
import net.minecraft.network.play.server.S3APacketTabComplete;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
public class TCDSet
{
public final Set<Weighted> primitiveData = new TreeSet<>();
public final Set<DataRequest> requests = new HashSet<>();
public final void add(final Weighted tcData)
{
this.primitiveData.add(tcData);
}
public final void add(final DataRequest request)
{
this.requests.add(request);
}
// TODO: Backwards compatibility
public final void sendPacket(final NetHandlerPlayServer handler, final String vanillaData)
{
if (this.requests.isEmpty())
{
if (!this.primitiveData.isEmpty())
this.sendModNote(handler, vanillaData == null);
handler.sendPacket(new S3APacketTabComplete(this.primitiveData, vanillaData));
}
else
MinecraftServer.getServer().addScheduledTask(new Runnable()
{
@Override
public void run()
{
for (final DataRequest request : TCDSet.this.requests)
request.process();
ParsingManager.submit(new Runnable()
{
@Override
public void run()
{
for (final DataRequest request : TCDSet.this.requests)
request.createCompletions(TCDSet.this.primitiveData);
if (!TCDSet.this.primitiveData.isEmpty())
TCDSet.this.sendModNote(handler, vanillaData == null);
handler.sendPacket(new S3APacketTabComplete(TCDSet.this.primitiveData, vanillaData));
}
});
}
});
}
private final void sendModNote(final NetHandlerPlayServer handler, final boolean moddedClient)
{
if (!moddedClient)
{
final IChatComponent msg1 = new ChatComponentText("For optimal use of tab-completion, please use the ");
msg1.getChatStyle().setColor(EnumChatFormatting.RED);
final IChatComponent msg2 = new ChatComponentText("NewCommands-Mod");
msg2.getChatStyle()
.setColor(EnumChatFormatting.AQUA)
.setUnderlined(true)
.setChatClickEvent(
new ClickEvent(Action.OPEN_URL, "http://minecraft.curseforge.com/mc-mods/231539-newcommands"));
msg1.appendSibling(msg2);
handler.sendPacket(new S02PacketChat(msg1));
}
}
}