Skip to content

Commit

Permalink
feat(SkinOverlayCommand): Added url sub command
Browse files Browse the repository at this point in the history
  • Loading branch information
GeorgeV220 committed Mar 17, 2023
1 parent eb98186 commit 00656ad
Showing 1 changed file with 74 additions and 14 deletions.
Expand Up @@ -8,13 +8,18 @@
import com.georgev22.skinoverlay.SkinOverlay;
import com.georgev22.skinoverlay.config.FileManager;
import com.georgev22.skinoverlay.utilities.MessagesUtil;
import com.georgev22.skinoverlay.utilities.SkinOptions;
import com.georgev22.skinoverlay.utilities.Utilities;
import com.georgev22.skinoverlay.utilities.player.PlayerObject;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.jetbrains.annotations.NotNull;

import javax.imageio.ImageIO;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.Arrays;
import java.util.Optional;
import java.util.logging.Level;
Expand Down Expand Up @@ -84,30 +89,85 @@ public void reload(final @NotNull CommandIssuer issuer) {
@Syntax("wear <overlay> [player]")
public void overlay(@NotNull CommandIssuer issuer, String @NotNull [] args) {
if (args.length == 0) {
MessagesUtil.INSUFFICIENT_ARGUMENTS.msg(issuer, new HashObjectMap<String, String>().append("%command%", "wear skin <overlay> <player>"), true);
MessagesUtil.INSUFFICIENT_ARGUMENTS.msg(issuer, new HashObjectMap<String, String>().append("%command%", "wear <overlay> <player>"), true);
return;
}
String overlay = args[0];
Optional<PlayerObject> target;
if (args.length > 1) {
if (issuer.hasPermission("skinoverlay.wear.overlay.others")) {
target = skinOverlay.isOnline(args[1]) ? skinOverlay.getPlayer(args[1]) : Optional.empty();
if (target.isEmpty()) {
MessagesUtil.OFFLINE_PLAYER.msg(issuer, new HashObjectMap<String, String>().append("%player%", args[1]), true);
return;
}
} else {
MessagesUtil.NO_PERMISSION.msg(issuer);
return;
}
target = getPlayerObject(issuer, args);
if (target.isEmpty()) return;
} else {
if (!(issuer.isPlayer())) {
MessagesUtil.INSUFFICIENT_ARGUMENTS.msg(issuer, new HashObjectMap<String, String>().append("%command%", "wear skin <overlay> <player>"), true);
return;
}
target = skinOverlay.getPlayer(issuer.getUniqueId());
}
Utilities.setSkin(() -> ImageIO.read(new File(skinOverlay.getSkinsDataFolder(), overlay + ".png")), overlay, target.orElseThrow(), issuer);
Utilities.setSkin(() -> ImageIO.read(new File(skinOverlay.getSkinsDataFolder(), overlay + ".png")), new SkinOptions(overlay), target.orElseThrow(), issuer);
}

@Subcommand("url")
@CommandAlias("wurl|swurl|wearurl")
@CommandCompletion("<link> false|true false|true false|true false|true false|true false|true @players")
@CommandPermission("skinoverlay.wear.url")
@Syntax("url <url> <options> [player]")
public void url(@NotNull CommandIssuer issuer, String @NotNull [] args) {
try {
URL url = new URL(args[0]);
Optional<PlayerObject> target = skinOverlay.getPlayer(issuer.getUniqueId());


ByteArrayOutputStream output = new ByteArrayOutputStream();

try (InputStream stream = url.openStream()) {
byte[] buffer = new byte[4096];

while (true) {
int bytesRead = stream.read(buffer);
if (bytesRead < 0) {
break;
}
output.write(buffer, 0, bytesRead);
}
}

SkinOptions skinOptions;
if (args.length == 8) {
skinOptions = new SkinOptions(url.toString(), Boolean.parseBoolean(args[1]), Boolean.parseBoolean(args[2]), Boolean.parseBoolean(args[3]), Boolean.parseBoolean(args[4]), Boolean.parseBoolean(args[5]), Boolean.parseBoolean(args[6]), Boolean.parseBoolean(args[7]));
} else {
skinOptions = new SkinOptions("custom2");
if (args.length > 1 & args.length < 3) {
target = getPlayerObject(issuer, args);
if (target.isEmpty()) return;
} else {
if (!(issuer.isPlayer())) {
MessagesUtil.INSUFFICIENT_ARGUMENTS.msg(issuer, new HashObjectMap<String, String>().append("%command%", "url <url> <options> <player>"), true);
return;
}
target = skinOverlay.getPlayer(issuer.getUniqueId());
}
}

Utilities.setSkin(() -> ImageIO.read(new ByteArrayInputStream(output.toByteArray())), skinOptions, target.orElseThrow(), issuer);
} catch (Exception exception) {
exception.printStackTrace();
}
}

private Optional<PlayerObject> getPlayerObject(@NotNull CommandIssuer issuer, String @NotNull [] args) {
Optional<PlayerObject> target;
if (issuer.hasPermission("skinoverlay.wear.overlay.others")) {
target = skinOverlay.isOnline(args[1]) ? skinOverlay.getPlayer(args[1]) : Optional.empty();
if (target.isEmpty()) {
MessagesUtil.OFFLINE_PLAYER.msg(issuer, new HashObjectMap<String, String>().append("%player%", args[1]), true);
return Optional.empty();
}
} else {
MessagesUtil.NO_PERMISSION.msg(issuer);
return Optional.empty();
}
return target;
}

@Subcommand("clear")
Expand All @@ -126,7 +186,7 @@ public void clear(@NotNull CommandIssuer issuer, String[] args) {
return;
}
if (args.length == 0) {
Utilities.setSkin(() -> null, "default", skinOverlay.getPlayer(issuer.getUniqueId()).orElseThrow(), issuer);
Utilities.setSkin(() -> null, new SkinOptions("default"), skinOverlay.getPlayer(issuer.getUniqueId()).orElseThrow(), issuer);
} else {
clear0(issuer, args[0]);
}
Expand All @@ -139,6 +199,6 @@ private void clear0(@NotNull CommandIssuer issuer, String target) {
MessagesUtil.OFFLINE_PLAYER.msg(issuer, new HashObjectMap<String, String>().append("%player%", target), true);
return;
}
Utilities.setSkin(() -> null, "default", optionalPlayerObject.orElseThrow(), issuer);
Utilities.setSkin(() -> null, new SkinOptions("default"), optionalPlayerObject.orElseThrow(), issuer);
}
}

0 comments on commit 00656ad

Please sign in to comment.