Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import:
- java.awt.Color
- java.awt.Image
- java.awt.image.BufferedImage
- java.util.HashMap
- java.util.Map
- java.lang.Integer
- java.net.URL
- javax.imageio.ImageIO
- org.bukkit.ChatColor
- org.bukkit.DyeColor
- ch.njol.skript.Skript
- ch.njol.skript.variables.Variables
- ch.njol.skript.lang.Variable
- com.google.common.collect.Maps
- on script load:
- set {image::colorsMap} to new HashMap()
- {image::colorsMap}.put(ChatColor.DARK_BLUE, new Color(0, 0, 170/255))
- {image::colorsMap}.put(ChatColor.DARK_GREEN, new Color(0, 170/255, 0))
- {image::colorsMap}.put(ChatColor.DARK_AQUA, new Color(0, 170/255, 170/255))
- {image::colorsMap}.put(ChatColor.DARK_RED, new Color(170/255, 0, 0))
- {image::colorsMap}.put(ChatColor.DARK_PURPLE, new Color(170/255, 0, 170/255))
- {image::colorsMap}.put(ChatColor.GOLD, new Color(1, 170/255, 0))
- {image::colorsMap}.put(ChatColor.BLUE, new Color(85/255, 85/255, 1))
- {image::colorsMap}.put(ChatColor.GREEN, new Color(85/255, 1, 85/255))
- {image::colorsMap}.put(ChatColor.AQUA, new Color(85/255, 1, 1))
- {image::colorsMap}.put(ChatColor.RED, new Color(1, 85/255, 85/255))
- {image::colorsMap}.put(ChatColor.LIGHT_PURPLE, new Color(1, 85/255, 1))
- {image::colorsMap}.put(ChatColor.YELLOW, new Color(1, 1, 85/255))
- set {image::graysMap} to new HashMap()
- {image::graysMap}.put(ChatColor.BLACK, new Color(0, 0, 0))
- {image::graysMap}.put(ChatColor.DARK_GRAY, new Color(85/255, 85/255, 85/255))
- {image::graysMap}.put(ChatColor.GRAY, new Color(170/255, 170/255, 170/255))
- {image::graysMap}.put(ChatColor.WHITE, new Color(1, 1, 1))
- function getDistance(c1: object, c2: object) :: number:
- set {_c1.red} to {_c1}.getRed()
- set {_c1.green} to {_c1}.getGreen()
- set {_c1.blue} to {_c1}.getBlue()
- set {_c2.red} to {_c2}.getRed()
- set {_c2.green} to {_c2}.getGreen()
- set {_c2.blue} to {_c2}.getBlue()
- set {_rmean} to ({_c1.red} + {_c2.red}) / 2.0
- set {_r} to {_c1.red} - {_c2.red}
- set {_g} to {_c1.green} - {_c2.green}
- set {_b} to {_c1.blue} - {_c2.blue}
- set {_weightR} to 2 + {_rmean} / 256
- set {_weightG} to 4
- set {_weightB} to 2 + (255 - {_rmean}) / 256
- return {_weightR} * {_r} * {_r} + {_weightG} * {_g} * {_g} + {_weightB} * {_b} * {_b}
- function areIdentical(c1: object, c2: object) :: boolean:
- set {_c1.red} to {_c1}.getRed()
- set {_c1.green} to {_c1}.getGreen()
- set {_c1.blue} to {_c1}.getBlue()
- set {_c2.red} to {_c2}.getRed()
- set {_c2.green} to {_c2}.getGreen()
- set {_c2.blue} to {_c2}.getBlue()
- if abs({_c1.red} - {_c2.red}) <= 5:
- if abs({_c1.green} - {_c2.green}) <= 5:
- if abs({_c1.blue} - {_c2.blue}) <= 5:
- return true
- return false
- function getClosestChatColor(c: object) :: integer:
- if {_c}.getAlpha() < 80:
- broadcast "DEBUG 1"
- return ChatColor.WHITE
- broadcast "DEBUG 2"
- set {_v::*} to ...{image::colorsMap}.entrySet() # convertit en liste Skript
- loop {_v::*}:
- broadcast "DEBUG 3 (%loop-value% | %loop-value.getValue()% | %areIdentical(loop-value.getValue(), {_c})%)"
- if (areIdentical(loop-value.getValue(), {_c})):
- return loop-value.getKey()
- set {_bestGrayDistance} to 100000000
- set {_bestGrayMatch} to null
- broadcast "DEBUG 4"
- set {_v::*} to ...{image::graysMap}.entrySet() # convertit en liste Skript
- loop {_v::*}:
- set {_distance} to getDistance({_c}, loop-value.getValue())
- broadcast "DEBUG 5 (%loop-value% | %loop-value.getValue()% | %{_distance}%)"
- if {_distance} < {_bestGrayDistance}:
- broadcast "DEBUG 6 (best gray)"
- set {_bestGrayDistance} to {_distance}
- set {_bestGrayMatch} to loop-value.getKey()
- if {_bestGrayDistance} < 17500:
- return {_bestGrayMatch}
- broadcast "DEBUG 7 (%{_bestGrayMatch}%)"
- set {_bestColorDistance} to 100000000
- set {_bestColorMatch} to null
- set {_v::*} to ...{image::colorsMap}.entrySet() # convertit en liste Skript
- loop {_v::*}:
- set {_distance} to getDistance({_c}, loop-value.getValue())
- broadcast "DEBUG 8 (%loop-value% | %loop-value.getValue()% | %{_distance}%)"
- if {_distance} < {_bestColorDistance}:
- set {_bestColorDistance} to {_distance}
- set {_bestColorMatch} to loop-value.getKey()
- broadcast "DEBUG 9 %{_bestColorMatch}%"
- # Minecraft has 15 colors
- return {_bestColorMatch}
- command /img [<offline player = %player%>]:
- trigger:
- get the image from url "https://cravatar.eu/helmavatar/%arg-1%/16" and save the result in {_head}
- loop 1 times: # ligne
- set {_line} to ""
- loop 1 times: # pixels de la ligne
- set {_x} to loop-value-2
- set {_y} to loop-value-1
- set {_pixelcolor} to new Color({_head}.getRGB({_x} - 1, {_y} - 1))
- set {_mcColor} to getClosestChatColor({_pixelcolor})
- set {_line} to "%{_line}%&r&%{_mcColor}%⬛"
- message {_line}
Advertisement
Add Comment
Please, Sign In to add comment