Package net.glowstone.net.handler.play.player

Source Code of net.glowstone.net.handler.play.player.TabCompleteHandler

package net.glowstone.net.handler.play.player;

import com.flowpowered.networking.MessageHandler;
import net.glowstone.EventFactory;
import net.glowstone.net.GlowSession;
import net.glowstone.net.message.play.player.TabCompleteMessage;
import net.glowstone.net.message.play.player.TabCompleteResponseMessage;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerChatTabCompleteEvent;
import org.bukkit.util.StringUtil;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public final class TabCompleteHandler implements MessageHandler<GlowSession, TabCompleteMessage> {
    @Override
    public void handle(GlowSession session, TabCompleteMessage message) {
        final Player sender = session.getPlayer();
        final String buffer = message.getText();
        final List<String> completions = new ArrayList<>();

        // complete command or username
        if (buffer.startsWith("/")) {
            List<String> items = session.getServer().getCommandMap().tabComplete(sender, buffer.substring(1));
            if (items != null) {
                completions.addAll(items);
            }
        } else {
            int space = buffer.lastIndexOf(' ');
            String lastWord;
            if (space == -1) {
                lastWord = buffer;
            } else {
                lastWord = buffer.substring(space + 1);
            }

            // from Command
            for (Player player : session.getServer().getOnlinePlayers()) {
                String name = player.getName();
                if (sender.canSee(player) && StringUtil.startsWithIgnoreCase(name, lastWord)) {
                    completions.add(name);
                }
            }
            Collections.sort(completions, String.CASE_INSENSITIVE_ORDER);
        }

        // call event and send response
        EventFactory.callEvent(new PlayerChatTabCompleteEvent(sender, buffer, completions));
        session.send(new TabCompleteResponseMessage(completions));
    }
}
TOP

Related Classes of net.glowstone.net.handler.play.player.TabCompleteHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.