3
0
Files
KCauldronX/src/main/java/org/spigotmc/VanillaCommandWrapper.java
2015-03-22 20:38:04 +03:00

187 lines
5.9 KiB
Java

package org.spigotmc;
import com.google.common.collect.ImmutableList;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.block.Block;
import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.command.CraftBlockCommandSender;
import org.bukkit.craftbukkit.entity.CraftMinecartCommand;
import org.bukkit.craftbukkit.entity.CraftPlayer;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class VanillaCommandWrapper
{
public static final HashSet<String> allowedCommands = new HashSet<String>();
public static int dispatch(CommandSender sender, String commandLine)
{
int pos = commandLine.indexOf( ' ' );
if ( pos == -1 )
{
pos = commandLine.length();
}
String name = commandLine.substring( 0, pos );
if ( !allowedCommands.contains( name ) )
{
return -1;
}
if ( !sender.hasPermission( "bukkit.command." + name ) )
{
sender.sendMessage( ChatColor.RED + "You do not have permission for this command" );
return 0;
}
net.minecraft.command.ICommandSender listener = getListener( sender );
if ( listener == null )
{
return -1;
}
return net.minecraft.server.MinecraftServer.getServer().getCommandManager().executeCommand( listener, commandLine );
}
public static List<String> complete(CommandSender sender, String commandLine)
{
int pos = commandLine.indexOf( ' ' );
if ( pos == -1 )
{
List<String> completions = new ArrayList<String>();
commandLine = commandLine.toLowerCase();
for ( String command : allowedCommands )
{
if ( command.startsWith( commandLine ) && sender.hasPermission( "bukkit.command." + command ) )
{
completions.add( "/" + command );
}
}
return completions;
}
String name = commandLine.substring( 0, pos );
if ( !allowedCommands.contains( name ) || !sender.hasPermission( "bukkit.command." + name ) )
{
return ImmutableList.<String>of();
}
net.minecraft.command.ICommandSender listener = getListener( sender );
if ( listener == null )
{
return ImmutableList.<String>of();
}
return net.minecraft.server.MinecraftServer.getServer().getCommandManager().getPossibleCommands( listener, commandLine );
}
private static net.minecraft.command.ICommandSender getListener(CommandSender sender)
{
if ( sender instanceof CraftPlayer )
{
return new PlayerListener( ( (CraftPlayer) sender ).getHandle() );
}
if ( sender instanceof CraftBlockCommandSender )
{
CraftBlockCommandSender commandBlock = (CraftBlockCommandSender) sender;
Block block = commandBlock.getBlock();
return ( (net.minecraft.tileentity.TileEntityCommandBlock) ( (CraftWorld) block.getWorld() ).getTileEntityAt( block.getX(), block.getY(), block.getZ() ) ).func_145993_a();
}
if ( sender instanceof CraftMinecartCommand )
{
return ( (net.minecraft.entity.EntityMinecartCommandBlock) ( (CraftMinecartCommand) sender ).getHandle() ).func_145822_e();
}
return new ConsoleListener(sender); // Assume console/rcon
}
private static class PlayerListener implements net.minecraft.command.ICommandSender
{
private final net.minecraft.command.ICommandSender handle;
public PlayerListener(net.minecraft.command.ICommandSender handle)
{
this.handle = handle;
}
@Override
public String getCommandSenderName()
{
return handle.getCommandSenderName();
}
@Override
public net.minecraft.util.IChatComponent func_145748_c_()
{
return handle.func_145748_c_();
}
@Override
public void addChatMessage(net.minecraft.util.IChatComponent iChatBaseComponent)
{
handle.addChatMessage( iChatBaseComponent );
}
@Override
public boolean canCommandSenderUseCommand(int i, String s)
{
return true;
}
@Override
public net.minecraft.util.ChunkCoordinates getPlayerCoordinates()
{
return handle.getPlayerCoordinates();
}
@Override
public net.minecraft.world.World getEntityWorld()
{
return handle.getEntityWorld();
}
}
private static class ConsoleListener implements net.minecraft.command.ICommandSender {
private final CommandSender sender;
public ConsoleListener( CommandSender sender )
{
this.sender = sender;
}
@Override
public String getCommandSenderName()
{
return sender.getName();
}
@Override
public net.minecraft.util.IChatComponent func_145748_c_()
{
return new net.minecraft.util.ChatComponentText( getCommandSenderName() );
}
@Override
public void addChatMessage( net.minecraft.util.IChatComponent iChatBaseComponent )
{
sender.sendMessage( iChatBaseComponent.getUnformattedTextForChat() );
}
@Override
public boolean canCommandSenderUseCommand( int i, String s )
{
return true;
}
@Override
public net.minecraft.util.ChunkCoordinates getPlayerCoordinates()
{
return new net.minecraft.util.ChunkCoordinates( 0, 0, 0 );
}
@Override
public net.minecraft.world.World getEntityWorld()
{
return net.minecraft.server.MinecraftServer.getServer().getEntityWorld();
}
}
}