diff --git a/src/main/java/de/fanta/challenges/commands/editor/EditorCommand.java b/src/main/java/de/fanta/challenges/commands/editor/EditorCommand.java index 66b4677..4cf95b3 100644 --- a/src/main/java/de/fanta/challenges/commands/editor/EditorCommand.java +++ b/src/main/java/de/fanta/challenges/commands/editor/EditorCommand.java @@ -1,6 +1,8 @@ package de.fanta.challenges.commands.editor; import de.fanta.challenges.Challenges; +import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; +import de.fanta.challenges.utils.ChatSkullAPI.Message; import de.fanta.challenges.utils.ChatUtil; import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.commands.ArgsParser; @@ -24,6 +26,8 @@ } if (plugin.getCurrentEditor() != null) { ChatUtil.sendNormalMessage(sender, plugin.getCurrentEditor().getName() + " ist der aktuelle Editor"); + String[] lines = {"","","","","","","",""}; + ChatSkull.sendPlayer(plugin.getCurrentEditor(), (Player) sender, lines); return true; } else { ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); diff --git a/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/ChatSkull.java b/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/ChatSkull.java new file mode 100644 index 0000000..68c340f --- /dev/null +++ b/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/ChatSkull.java @@ -0,0 +1,19 @@ +package de.fanta.challenges.utils.ChatSkullAPI; + +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.plugin.java.JavaPlugin; + +public class ChatSkull extends JavaPlugin implements Listener { + public void onEnable() {} + + public static void sendAll(Player head, String[] lines) { + SkullClass cs = new SkullClass(head, lines); + cs.sendAll(); + } + + public static void sendPlayer(Player head, Player target, String[] lines) { + SkullClass cs = new SkullClass(head, lines); + cs.sendPlayer(target); + } +} diff --git a/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/Message.java b/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/Message.java new file mode 100644 index 0000000..ce2f2bf --- /dev/null +++ b/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/Message.java @@ -0,0 +1,84 @@ +package de.fanta.challenges.utils.ChatSkullAPI; + +import java.awt.Color; +import java.awt.geom.AffineTransform; +import java.awt.image.AffineTransformOp; +import java.awt.image.BufferedImage; + +import net.md_5.bungee.api.ChatColor; +import org.bukkit.entity.Player; + +public class Message { + + private String[] lines; + + public Message(BufferedImage image, int height, char imgChar) { + ChatColor[][] chatColors = toChatColorArray(image, height); + this.lines = toImgMessage(chatColors, imgChar); + } + + public Message appendText(String[] text) { + for (int y = 0; y < this.lines.length; y++) { + if (text.length > y) { + int tmp16_15 = y; + String[] tmp16_12 = this.lines; + tmp16_12[tmp16_15] = tmp16_12[tmp16_15] + " " + text[y]; + } + } + return this; + } + + private ChatColor[][] toChatColorArray(BufferedImage image, int height) { + double ratio = (image.getHeight() / image.getWidth()); + BufferedImage resized = resizeImage(image, (int)(height / ratio), height); + ChatColor[][] chatImg = new ChatColor[resized.getWidth()][resized.getHeight()]; + for (int x = 0; x < resized.getWidth(); x++) { + for (int y = 0; y < resized.getHeight(); y++) { + int rgb = resized.getRGB(x, y); + String hex = "#" + Integer.toHexString(rgb).substring(2); + ChatColor closest = getClosestChatColor(ChatColor.of(hex)); + chatImg[x][y] = closest; + } + } + return chatImg; + } + + private String[] toImgMessage(ChatColor[][] colors, char imgchar) { + String[] lines = new String[(colors[0]).length]; + for (int y = 0; y < (colors[0]).length; y++) { + StringBuilder line = new StringBuilder(); + for (ChatColor[] chatColors : colors) { + ChatColor color = chatColors[y]; + line.append((color != null) ? (chatColors[y].toString() + imgchar) : Character.valueOf(' ')); + } + lines[y] = line.toString() + ChatColor.RESET; + } + return lines; + } + + private BufferedImage resizeImage(BufferedImage originalImage, int width, int height) { + AffineTransform af = new AffineTransform(); + af.scale((width / originalImage.getWidth()), (height / originalImage.getHeight())); + AffineTransformOp operation = new AffineTransformOp(af, 1); + return operation.filter(originalImage, null); + } + + public String[] getLines() { + return this.lines; + } + + public void sendToPlayer(Player player) { + byte b; + int i; + String[] arrayOfString; + for (i = (arrayOfString = this.lines).length, b = 0; b < i; ) { + String line = arrayOfString[b]; + player.sendMessage(line); + b++; + } + } + + private ChatColor getClosestChatColor(ChatColor color) { + return color; + } +} diff --git a/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/SkullClass.java b/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/SkullClass.java new file mode 100644 index 0000000..6d6b072 --- /dev/null +++ b/src/main/java/de/fanta/challenges/utils/ChatSkullAPI/SkullClass.java @@ -0,0 +1,40 @@ +package de.fanta.challenges.utils.ChatSkullAPI; + +import java.awt.image.BufferedImage; +import java.net.URL; +import javax.imageio.ImageIO; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class SkullClass { + Player player; + + String[] lines; + + SkullClass(Player head, String[] lines) { + this.player = head; + this.lines = lines; + } + + public void sendAll() { + for (Player player : Bukkit.getOnlinePlayers()) + sendPlayer(player); + } + + public void sendPlayer(Player player) { + String name = this.player.getPlayer().getName(); + BufferedImage imageToSend = null; + try { + imageToSend = ImageIO.read(newURL(name)); + } catch (Exception e) { + e.printStackTrace(); + } + (new Message(imageToSend, 8, '█')).appendText(this.lines).sendToPlayer(player); + } + + private static URL newURL(String name) throws Exception { + String url = "https://mineskin.de/helm/%pname%/8.png"; + url = url.replace("%pname%", name); + return new URL(url); + } +}