124 lines
4.2 KiB
Java
124 lines
4.2 KiB
Java
package me.libraryaddict.disguise.commands.utils;
|
|
|
|
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
|
import me.libraryaddict.disguise.LibsDisguises;
|
|
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
|
import me.libraryaddict.disguise.utilities.LibsPremium;
|
|
import me.libraryaddict.disguise.utilities.SkinUtils;
|
|
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandExecutor;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.inventory.meta.SkullMeta;
|
|
import org.bukkit.scheduler.BukkitRunnable;
|
|
import org.bukkit.scheduler.BukkitTask;
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
/**
|
|
* Created by libraryaddict on 20/06/2020.
|
|
*/
|
|
public class GrabHeadCommand implements CommandExecutor {
|
|
@Override
|
|
public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) {
|
|
if (sender instanceof Player && !sender.isOp() &&
|
|
(!LibsPremium.isPremium() || LibsPremium.getPaidInformation() == LibsPremium.getPluginInformation())) {
|
|
sender.sendMessage(ChatColor.RED + "Please purchase Lib's Disguises to enable player commands");
|
|
return true;
|
|
}
|
|
|
|
if (!sender.hasPermission("libsdisguises.grabhead")) {
|
|
LibsMsg.NO_PERM.send(sender);
|
|
return true;
|
|
}
|
|
|
|
if (!(sender instanceof Player)) {
|
|
LibsMsg.NO_CONSOLE.send(sender);
|
|
return true;
|
|
}
|
|
|
|
if (strings.length == 0) {
|
|
sendHelp(sender);
|
|
return true;
|
|
}
|
|
|
|
String[] args = DisguiseUtilities.split(StringUtils.join(strings, " "));
|
|
String skin = args[0];
|
|
|
|
String usable = SkinUtils.getUsableStatus();
|
|
|
|
if (usable != null) {
|
|
sender.sendMessage(usable);
|
|
return true;
|
|
}
|
|
|
|
SkinUtils.SkinCallback callback = new SkinUtils.SkinCallback() {
|
|
private BukkitTask runnable = new BukkitRunnable() {
|
|
@Override
|
|
public void run() {
|
|
LibsMsg.PLEASE_WAIT.send(sender);
|
|
}
|
|
}.runTaskTimer(LibsDisguises.getInstance(), 100, 100);
|
|
|
|
@Override
|
|
public void onError(LibsMsg msg, Object... args) {
|
|
msg.send(sender, args);
|
|
|
|
runnable.cancel();
|
|
}
|
|
|
|
@Override
|
|
public void onInfo(LibsMsg msg, Object... args) {
|
|
msg.send(sender, args);
|
|
}
|
|
|
|
@Override
|
|
public void onSuccess(WrappedGameProfile profile) {
|
|
runnable.cancel();
|
|
|
|
DisguiseUtilities.setGrabHeadCommandUsed();
|
|
|
|
new BukkitRunnable() {
|
|
@Override
|
|
public void run() {
|
|
ItemStack skull = new ItemStack(Material.PLAYER_HEAD);
|
|
SkullMeta meta = (SkullMeta) skull.getItemMeta();
|
|
|
|
try {
|
|
Field field = meta.getClass().getDeclaredField("profile");
|
|
field.setAccessible(true);
|
|
field.set(meta, profile.getHandle());
|
|
}
|
|
catch (NoSuchFieldException | IllegalAccessException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
skull.setItemMeta(meta);
|
|
|
|
((Player) sender).getInventory().addItem(skull);
|
|
LibsMsg.GRAB_HEAD_SUCCESS.send(sender);
|
|
}
|
|
}.runTask(LibsDisguises.getInstance());
|
|
}
|
|
};
|
|
|
|
SkinUtils.grabSkin(skin, callback);
|
|
|
|
return true;
|
|
}
|
|
|
|
private void sendHelp(CommandSender sender) {
|
|
LibsMsg.GRAB_DISG_HELP_1.send(sender);
|
|
LibsMsg.GRAB_DISG_HELP_2.send(sender);
|
|
LibsMsg.GRAB_DISG_HELP_3.send(sender);
|
|
LibsMsg.GRAB_DISG_HELP_4.send(sender);
|
|
LibsMsg.GRAB_DISG_HELP_5.send(sender);
|
|
LibsMsg.GRAB_DISG_HELP_6.send(sender);
|
|
}
|
|
}
|