Files
LibsDisguises/src/main/java/me/libraryaddict/disguise/commands/utils/GrabHeadCommand.java
2020-07-04 00:44:22 +12:00

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);
}
}