/* * This file is part of ComputerCraft - http://www.computercraft.info * Copyright Daniel Ratcliffe, 2011-2019. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ package dan200.computercraft.shared.command; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; import net.minecraft.command.CommandSource; import net.minecraft.command.ISuggestionProvider; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraftforge.common.util.FakePlayer; import java.util.Arrays; import java.util.Locale; import java.util.concurrent.CompletableFuture; import java.util.function.Function; public final class CommandUtils { private CommandUtils() {} public static boolean isPlayer( CommandSource output ) { Entity sender = output.getEntity(); return sender instanceof EntityPlayerMP && !(sender instanceof FakePlayer) && ((EntityPlayerMP) sender).connection != null; } @SuppressWarnings( "unchecked" ) public static CompletableFuture suggestOnServer( CommandContext context, SuggestionsBuilder builder, Function, CompletableFuture> supplier ) { Object source = context.getSource(); if( !(source instanceof ISuggestionProvider) ) { return Suggestions.empty(); } else if( source instanceof CommandSource ) { return supplier.apply( (CommandContext) context ); } else { return ((ISuggestionProvider) source).getSuggestionsFromServer( (CommandContext) context, builder ); } } public static CompletableFuture suggest( SuggestionsBuilder builder, Iterable candidates, Function toString ) { String remaining = builder.getRemaining().toLowerCase( Locale.ROOT ); for( T choice : candidates ) { String name = toString.apply( choice ); if( !name.toLowerCase( Locale.ROOT ).startsWith( remaining ) ) continue; builder.suggest( name ); } return builder.buildFuture(); } public static CompletableFuture suggest( SuggestionsBuilder builder, T[] candidates, Function toString ) { return suggest( builder, Arrays.asList( candidates ), toString ); } }