Discord link
This commit is contained in:
		| @ -15,6 +15,7 @@ import org.bukkit.entity.Player; | ||||
|  | ||||
| import net.kyori.adventure.text.Component; | ||||
| import ovh.herisson.thevoidroad.DatabaseManager; | ||||
| import ovh.herisson.thevoidroad.DiscordWebhook; | ||||
| import ovh.herisson.thevoidroad.TheVoidRoad; | ||||
| import ovh.herisson.thevoidroad.Voids; | ||||
| import ovh.herisson.thevoidroad.Entity.Merchand; | ||||
| @ -65,6 +66,19 @@ public class VoidCommands implements CommandExecutor, TabCompleter{ | ||||
| 						return true; | ||||
| 					case "skip": | ||||
| 						//TODO(Merchand): Skip trade | ||||
| 						break; | ||||
| 					case "discord": | ||||
| 							String link = DatabaseManager.getInstance().getConfig("discord-wh"); | ||||
| 							if(!link.equals("")){ | ||||
| 								DiscordWebhook discord = new DiscordWebhook(link); | ||||
| 								discord.setContent("Item mis en vente pendant une heure: " + Merchand.current.x + " au prix de " + Merchand.current.y + TheVoidRoad.CoinGlyph); | ||||
| 								try { | ||||
| 									discord.execute(); | ||||
| 								} catch(Exception e){ | ||||
| 									e.printStackTrace(); | ||||
| 								} | ||||
| 							} | ||||
|  | ||||
| 						break; | ||||
| 					case "goto": | ||||
| 						if(sender instanceof Player ply && m.getLocation() != null){ | ||||
|  | ||||
| @ -0,0 +1,392 @@ | ||||
| package ovh.herisson.thevoidroad; | ||||
|  | ||||
| import javax.net.ssl.HttpsURLConnection; | ||||
| import java.awt.Color; | ||||
| import java.io.IOException; | ||||
| import java.io.OutputStream; | ||||
| import java.lang.reflect.Array; | ||||
| import java.net.URL; | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
|  | ||||
| /** | ||||
|  * Class used to execute Discord Webhooks with low effort | ||||
|  * @source https://gist.github.com/k3kdude/fba6f6b37594eae3d6f9475330733bdb | ||||
|  */ | ||||
| public class DiscordWebhook { | ||||
|  | ||||
|     private final String url; | ||||
|     private String content; | ||||
|     private String username; | ||||
|     private String avatarUrl; | ||||
|     private boolean tts; | ||||
|     private List<EmbedObject> embeds = new ArrayList<>(); | ||||
|  | ||||
|     /** | ||||
|      * Constructs a new DiscordWebhook instance | ||||
|      * | ||||
|      * @param url The webhook URL obtained in Discord | ||||
|      */ | ||||
|     public DiscordWebhook(String url) { | ||||
|         this.url = url; | ||||
|     } | ||||
|  | ||||
|     public void setContent(String content) { | ||||
|         this.content = content; | ||||
|     } | ||||
|  | ||||
|     public void setUsername(String username) { | ||||
|         this.username = username; | ||||
|     } | ||||
|  | ||||
|     public void setAvatarUrl(String avatarUrl) { | ||||
|         this.avatarUrl = avatarUrl; | ||||
|     } | ||||
|  | ||||
|     public void setTts(boolean tts) { | ||||
|         this.tts = tts; | ||||
|     } | ||||
|  | ||||
|     public void addEmbed(EmbedObject embed) { | ||||
|         this.embeds.add(embed); | ||||
|     } | ||||
|  | ||||
|     public void execute() throws IOException { | ||||
|         if (this.content == null && this.embeds.isEmpty()) { | ||||
|             throw new IllegalArgumentException("Set content or add at least one EmbedObject"); | ||||
|         } | ||||
|  | ||||
|         JSONObject json = new JSONObject(); | ||||
|  | ||||
|         json.put("content", this.content); | ||||
|         json.put("username", this.username); | ||||
|         json.put("avatar_url", this.avatarUrl); | ||||
|         json.put("tts", this.tts); | ||||
|  | ||||
|         if (!this.embeds.isEmpty()) { | ||||
|             List<JSONObject> embedObjects = new ArrayList<>(); | ||||
|  | ||||
|             for (EmbedObject embed : this.embeds) { | ||||
|                 JSONObject jsonEmbed = new JSONObject(); | ||||
|  | ||||
|                 jsonEmbed.put("title", embed.getTitle()); | ||||
|                 jsonEmbed.put("description", embed.getDescription()); | ||||
|                 jsonEmbed.put("url", embed.getUrl()); | ||||
|  | ||||
|                 if (embed.getColor() != null) { | ||||
|                     Color color = embed.getColor(); | ||||
|                     int rgb = color.getRed(); | ||||
|                     rgb = (rgb << 8) + color.getGreen(); | ||||
|                     rgb = (rgb << 8) + color.getBlue(); | ||||
|  | ||||
|                     jsonEmbed.put("color", rgb); | ||||
|                 } | ||||
|  | ||||
|                 EmbedObject.Footer footer = embed.getFooter(); | ||||
|                 EmbedObject.Image image = embed.getImage(); | ||||
|                 EmbedObject.Thumbnail thumbnail = embed.getThumbnail(); | ||||
|                 EmbedObject.Author author = embed.getAuthor(); | ||||
|                 List<EmbedObject.Field> fields = embed.getFields(); | ||||
|  | ||||
|                 if (footer != null) { | ||||
|                     JSONObject jsonFooter = new JSONObject(); | ||||
|  | ||||
|                     jsonFooter.put("text", footer.getText()); | ||||
|                     jsonFooter.put("icon_url", footer.getIconUrl()); | ||||
|                     jsonEmbed.put("footer", jsonFooter); | ||||
|                 } | ||||
|  | ||||
|                 if (image != null) { | ||||
|                     JSONObject jsonImage = new JSONObject(); | ||||
|  | ||||
|                     jsonImage.put("url", image.getUrl()); | ||||
|                     jsonEmbed.put("image", jsonImage); | ||||
|                 } | ||||
|  | ||||
|                 if (thumbnail != null) { | ||||
|                     JSONObject jsonThumbnail = new JSONObject(); | ||||
|  | ||||
|                     jsonThumbnail.put("url", thumbnail.getUrl()); | ||||
|                     jsonEmbed.put("thumbnail", jsonThumbnail); | ||||
|                 } | ||||
|  | ||||
|                 if (author != null) { | ||||
|                     JSONObject jsonAuthor = new JSONObject(); | ||||
|  | ||||
|                     jsonAuthor.put("name", author.getName()); | ||||
|                     jsonAuthor.put("url", author.getUrl()); | ||||
|                     jsonAuthor.put("icon_url", author.getIconUrl()); | ||||
|                     jsonEmbed.put("author", jsonAuthor); | ||||
|                 } | ||||
|  | ||||
|                 List<JSONObject> jsonFields = new ArrayList<>(); | ||||
|                 for (EmbedObject.Field field : fields) { | ||||
|                     JSONObject jsonField = new JSONObject(); | ||||
|  | ||||
|                     jsonField.put("name", field.getName()); | ||||
|                     jsonField.put("value", field.getValue()); | ||||
|                     jsonField.put("inline", field.isInline()); | ||||
|  | ||||
|                     jsonFields.add(jsonField); | ||||
|                 } | ||||
|  | ||||
|                 jsonEmbed.put("fields", jsonFields.toArray()); | ||||
|                 embedObjects.add(jsonEmbed); | ||||
|             } | ||||
|  | ||||
|             json.put("embeds", embedObjects.toArray()); | ||||
|         } | ||||
|  | ||||
|         URL url = new URL(this.url); | ||||
|         HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); | ||||
|         connection.addRequestProperty("Content-Type", "application/json"); | ||||
|         connection.addRequestProperty("User-Agent", "Java-DiscordWebhook-BY-Gelox_"); | ||||
|         connection.setDoOutput(true); | ||||
|         connection.setRequestMethod("POST"); | ||||
|  | ||||
|         OutputStream stream = connection.getOutputStream(); | ||||
|         stream.write(json.toString().getBytes()); | ||||
|         stream.flush(); | ||||
|         stream.close(); | ||||
|  | ||||
|         connection.getInputStream().close(); //I'm not sure why but it doesn't work without getting the InputStream | ||||
|         connection.disconnect(); | ||||
|     } | ||||
|  | ||||
|     public static class EmbedObject { | ||||
|         private String title; | ||||
|         private String description; | ||||
|         private String url; | ||||
|         private Color color; | ||||
|  | ||||
|         private Footer footer; | ||||
|         private Thumbnail thumbnail; | ||||
|         private Image image; | ||||
|         private Author author; | ||||
|         private List<Field> fields = new ArrayList<>(); | ||||
|  | ||||
|         public String getTitle() { | ||||
|             return title; | ||||
|         } | ||||
|  | ||||
|         public String getDescription() { | ||||
|             return description; | ||||
|         } | ||||
|  | ||||
|         public String getUrl() { | ||||
|             return url; | ||||
|         } | ||||
|  | ||||
|         public Color getColor() { | ||||
|             return color; | ||||
|         } | ||||
|  | ||||
|         public Footer getFooter() { | ||||
|             return footer; | ||||
|         } | ||||
|  | ||||
|         public Thumbnail getThumbnail() { | ||||
|             return thumbnail; | ||||
|         } | ||||
|  | ||||
|         public Image getImage() { | ||||
|             return image; | ||||
|         } | ||||
|  | ||||
|         public Author getAuthor() { | ||||
|             return author; | ||||
|         } | ||||
|  | ||||
|         public List<Field> getFields() { | ||||
|             return fields; | ||||
|         } | ||||
|  | ||||
|         public EmbedObject setTitle(String title) { | ||||
|             this.title = title; | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public EmbedObject setDescription(String description) { | ||||
|             this.description = description; | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public EmbedObject setUrl(String url) { | ||||
|             this.url = url; | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public EmbedObject setColor(Color color) { | ||||
|             this.color = color; | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public EmbedObject setFooter(String text, String icon) { | ||||
|             this.footer = new Footer(text, icon); | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public EmbedObject setThumbnail(String url) { | ||||
|             this.thumbnail = new Thumbnail(url); | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public EmbedObject setImage(String url) { | ||||
|             this.image = new Image(url); | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public EmbedObject setAuthor(String name, String url, String icon) { | ||||
|             this.author = new Author(name, url, icon); | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public EmbedObject addField(String name, String value, boolean inline) { | ||||
|             this.fields.add(new Field(name, value, inline)); | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         private class Footer { | ||||
|             private String text; | ||||
|             private String iconUrl; | ||||
|  | ||||
|             private Footer(String text, String iconUrl) { | ||||
|                 this.text = text; | ||||
|                 this.iconUrl = iconUrl; | ||||
|             } | ||||
|  | ||||
|             private String getText() { | ||||
|                 return text; | ||||
|             } | ||||
|  | ||||
|             private String getIconUrl() { | ||||
|                 return iconUrl; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private class Thumbnail { | ||||
|             private String url; | ||||
|  | ||||
|             private Thumbnail(String url) { | ||||
|                 this.url = url; | ||||
|             } | ||||
|  | ||||
|             private String getUrl() { | ||||
|                 return url; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private class Image { | ||||
|             private String url; | ||||
|  | ||||
|             private Image(String url) { | ||||
|                 this.url = url; | ||||
|             } | ||||
|  | ||||
|             private String getUrl() { | ||||
|                 return url; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private class Author { | ||||
|             private String name; | ||||
|             private String url; | ||||
|             private String iconUrl; | ||||
|  | ||||
|             private Author(String name, String url, String iconUrl) { | ||||
|                 this.name = name; | ||||
|                 this.url = url; | ||||
|                 this.iconUrl = iconUrl; | ||||
|             } | ||||
|  | ||||
|             private String getName() { | ||||
|                 return name; | ||||
|             } | ||||
|  | ||||
|             private String getUrl() { | ||||
|                 return url; | ||||
|             } | ||||
|  | ||||
|             private String getIconUrl() { | ||||
|                 return iconUrl; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private class Field { | ||||
|             private String name; | ||||
|             private String value; | ||||
|             private boolean inline; | ||||
|  | ||||
|             private Field(String name, String value, boolean inline) { | ||||
|                 this.name = name; | ||||
|                 this.value = value; | ||||
|                 this.inline = inline; | ||||
|             } | ||||
|  | ||||
|             private String getName() { | ||||
|                 return name; | ||||
|             } | ||||
|  | ||||
|             private String getValue() { | ||||
|                 return value; | ||||
|             } | ||||
|  | ||||
|             private boolean isInline() { | ||||
|                 return inline; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private class JSONObject { | ||||
|  | ||||
|         private final HashMap<String, Object> map = new HashMap<>(); | ||||
|  | ||||
|         void put(String key, Object value) { | ||||
|             if (value != null) { | ||||
|                 map.put(key, value); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
|         public String toString() { | ||||
|             StringBuilder builder = new StringBuilder(); | ||||
|             Set<Map.Entry<String, Object>> entrySet = map.entrySet(); | ||||
|             builder.append("{"); | ||||
|  | ||||
|             int i = 0; | ||||
|             for (Map.Entry<String, Object> entry : entrySet) { | ||||
|                 Object val = entry.getValue(); | ||||
|                 builder.append(quote(entry.getKey())).append(":"); | ||||
|  | ||||
|                 if (val instanceof String) { | ||||
|                     builder.append(quote(String.valueOf(val))); | ||||
|                 } else if (val instanceof Integer) { | ||||
|                     builder.append(Integer.valueOf(String.valueOf(val))); | ||||
|                 } else if (val instanceof Boolean) { | ||||
|                     builder.append(val); | ||||
|                 } else if (val instanceof JSONObject) { | ||||
|                     builder.append(val.toString()); | ||||
|                 } else if (val.getClass().isArray()) { | ||||
|                     builder.append("["); | ||||
|                     int len = Array.getLength(val); | ||||
|                     for (int j = 0; j < len; j++) { | ||||
|                         builder.append(Array.get(val, j).toString()).append(j != len - 1 ? "," : ""); | ||||
|                     } | ||||
|                     builder.append("]"); | ||||
|                 } | ||||
|  | ||||
|                 builder.append(++i == entrySet.size() ? "}" : ","); | ||||
|             } | ||||
|  | ||||
|             return builder.toString(); | ||||
|         } | ||||
|  | ||||
|         private String quote(String string) { | ||||
|             return "\"" + string + "\""; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -27,6 +27,7 @@ import org.bukkit.persistence.PersistentDataType; | ||||
|  | ||||
| import net.kyori.adventure.text.Component; | ||||
| import ovh.herisson.thevoidroad.DatabaseManager; | ||||
| import ovh.herisson.thevoidroad.DiscordWebhook; | ||||
| import ovh.herisson.thevoidroad.TheVoidRoad; | ||||
| import ovh.herisson.thevoidroad.Voids; | ||||
| import ovh.herisson.thevoidroad.Event.HourEvent; | ||||
| @ -105,6 +106,11 @@ public class Merchand implements Listener{ | ||||
| 	@EventHandler | ||||
| 	public void onHour(HourEvent e){ | ||||
| 		current = genTrade(e.unixhour); | ||||
| 		String link = DatabaseManager.getInstance().getConfig("discord-wh"); | ||||
| 		if(!link.equals("")){ | ||||
| 			DiscordWebhook discord = new DiscordWebhook(link); | ||||
| 			discord.setContent("Item mis en vente pendant une heure: " + current.x + " au prix de " + current.y + TheVoidRoad.CoinGlyph); | ||||
| 		} | ||||
| 		next = genTrade(e.unixhour + 1); | ||||
| 		regenerate(); | ||||
| 	} | ||||
|  | ||||
		Reference in New Issue
	
	Block a user