Skip to content

Commit 499e50c

Browse files
authored
Add files via upload
1 parent d0da6ca commit 499e50c

File tree

9 files changed

+243
-0
lines changed

9 files changed

+243
-0
lines changed

source/discordbridge.iml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module version="4">
3+
<component name="FacetManager">
4+
<facet type="minecraft" name="Minecraft">
5+
<configuration>
6+
<autoDetectTypes>
7+
<platformType>PAPER</platformType>
8+
</autoDetectTypes>
9+
<projectReimportVersion>1</projectReimportVersion>
10+
</configuration>
11+
</facet>
12+
</component>
13+
</module>
4.32 KB
Binary file not shown.

source/pom.xml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>com.saaranshxd.discordbridge</groupId>
8+
<artifactId>discordbridge</artifactId>
9+
<version>1.9-beta</version>
10+
<packaging>jar</packaging>
11+
12+
<name>discordbridge</name>
13+
14+
<properties>
15+
<java.version>21</java.version>
16+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
17+
</properties>
18+
19+
<build>
20+
<defaultGoal>clean package</defaultGoal>
21+
<plugins>
22+
<plugin>
23+
<groupId>org.apache.maven.plugins</groupId>
24+
<artifactId>maven-compiler-plugin</artifactId>
25+
<version>3.13.0</version>
26+
<configuration>
27+
<source>${java.version}</source>
28+
<target>${java.version}</target>
29+
</configuration>
30+
</plugin>
31+
<plugin>
32+
<groupId>org.apache.maven.plugins</groupId>
33+
<artifactId>maven-shade-plugin</artifactId>
34+
<version>3.5.3</version>
35+
<executions>
36+
<execution>
37+
<phase>package</phase>
38+
<goals>
39+
<goal>shade</goal>
40+
</goals>
41+
</execution>
42+
</executions>
43+
</plugin>
44+
</plugins>
45+
<resources>
46+
<resource>
47+
<directory>src/main/resources</directory>
48+
<filtering>true</filtering>
49+
</resource>
50+
</resources>
51+
</build>
52+
53+
<repositories>
54+
<repository>
55+
<id>papermc-repo</id>
56+
<url>https://repo.papermc.io/repository/maven-public/</url>
57+
</repository>
58+
</repositories>
59+
60+
<dependencies>
61+
<dependency>
62+
<groupId>io.papermc.paper</groupId>
63+
<artifactId>paper-api</artifactId>
64+
<version>1.21.4-R0.1-SNAPSHOT</version>
65+
<scope>provided</scope>
66+
</dependency>
67+
</dependencies>
68+
</project>
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
package com.SaaranshXd.discordbridge;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.ChatColor;
5+
import org.bukkit.command.Command;
6+
import org.bukkit.command.CommandSender;
7+
import org.bukkit.entity.Player;
8+
import org.bukkit.event.EventHandler;
9+
import org.bukkit.event.Listener;
10+
import org.bukkit.event.entity.PlayerDeathEvent;
11+
import org.bukkit.event.player.AsyncPlayerChatEvent;
12+
import org.bukkit.event.player.PlayerJoinEvent;
13+
import org.bukkit.event.player.PlayerQuitEvent;
14+
import org.bukkit.plugin.java.JavaPlugin;
15+
16+
import java.io.OutputStream;
17+
import java.net.HttpURLConnection;
18+
import java.net.URL;
19+
20+
public class DiscordBridge extends JavaPlugin implements Listener {
21+
22+
private String webhookUrl;
23+
private String consoleAvatar;
24+
25+
@Override
26+
public void onEnable() {
27+
// Generate /plugins/DiscordBridge/config.yml if missing
28+
saveDefaultConfig();
29+
loadConfigValues();
30+
31+
// Register events
32+
Bukkit.getPluginManager().registerEvents(this, this);
33+
34+
getLogger().info("DiscordBridge enabled!");
35+
}
36+
37+
@Override
38+
public void onDisable() {
39+
getLogger().info("DiscordBridge disabled!");
40+
}
41+
42+
private void loadConfigValues() {
43+
webhookUrl = getConfig().getString("webhook-url");
44+
consoleAvatar = getConfig().getString("console-avatar");
45+
46+
if (webhookUrl == null || webhookUrl.isEmpty()) {
47+
getLogger().warning("No webhook URL set in config.yml!");
48+
}
49+
}
50+
51+
@EventHandler
52+
public void onPlayerChat(AsyncPlayerChatEvent event) {
53+
Player player = event.getPlayer();
54+
String message = ChatColor.stripColor(event.getMessage());
55+
sendWebhook(player.getName(), message, false);
56+
}
57+
58+
@EventHandler
59+
public void onPlayerJoin(PlayerJoinEvent event) {
60+
sendWebhook("[Console]", event.getPlayer().getName() + " joined the game!", true);
61+
}
62+
63+
@EventHandler
64+
public void onPlayerQuit(PlayerQuitEvent event) {
65+
sendWebhook("[Console]", event.getPlayer().getName() + " left the game!", true);
66+
}
67+
68+
@EventHandler
69+
public void onPlayerDeath(PlayerDeathEvent event) {
70+
Player player = event.getEntity();
71+
String deathMessage = event.getDeathMessage();
72+
73+
// If there's a custom death message, use it. Otherwise, create a basic one.
74+
if (deathMessage != null && !deathMessage.isEmpty()) {
75+
// Strip color codes from death message
76+
deathMessage = ChatColor.stripColor(deathMessage);
77+
} else {
78+
deathMessage = player.getName() + " died";
79+
}
80+
81+
sendWebhook("[Console]", "💀 " + deathMessage, true);
82+
}
83+
84+
private void sendWebhook(String username, String content, boolean isConsole) {
85+
if (webhookUrl == null || webhookUrl.isEmpty()) return;
86+
87+
Bukkit.getScheduler().runTaskAsynchronously(this, () -> {
88+
try {
89+
URL url = new URL(webhookUrl);
90+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
91+
conn.setRequestMethod("POST");
92+
conn.setRequestProperty("Content-Type", "application/json");
93+
conn.setDoOutput(true);
94+
95+
String avatar = isConsole
96+
? consoleAvatar
97+
: "https://minotar.net/avatar/" + username.replace("[minecraft] ", "");
98+
99+
String json = "{"
100+
+ "\"username\": \"" + username + "\","
101+
+ "\"avatar_url\": \"" + avatar + "\","
102+
+ "\"content\": \"" + content.replace("\"", "\\\"") + "\""
103+
+ "}";
104+
105+
try (OutputStream os = conn.getOutputStream()) {
106+
os.write(json.getBytes());
107+
}
108+
109+
conn.getInputStream().close();
110+
conn.disconnect();
111+
} catch (Exception e) {
112+
getLogger().warning("Failed to send webhook: " + e.getMessage());
113+
}
114+
});
115+
}
116+
117+
// /dbridge reload command
118+
@Override
119+
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
120+
if (cmd.getName().equalsIgnoreCase("dbridge")) {
121+
if (args.length == 1 && args[0].equalsIgnoreCase("reload")) {
122+
reloadConfig();
123+
loadConfigValues();
124+
sender.sendMessage(ChatColor.GREEN + "DiscordBridge config reloaded!");
125+
return true;
126+
}
127+
sender.sendMessage(ChatColor.RED + "Usage: /dbridge reload");
128+
return true;
129+
}
130+
return false;
131+
}
132+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Paste your Discord webhook URL here
2+
webhook-url: "https://discord.com/api/webhooks/your_url_here"
3+
4+
# Avatar used when sending console/server messages
5+
console-avatar: "https://i.pinimg.com/736x/17/c9/f8/17c9f88ccfdd3eda5437a9ce329c94fa.jpg"
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
name: DiscordBridge
2+
main: com.SaaranshXd.discordbridge.DiscordBridge
3+
version: 1.0
4+
api-version: 1.16
5+
description: Simple Minecraft → Discord chat bridge using webhooks
6+
author: Saaransh_Xd
7+
commands:
8+
dbridge:
9+
description: Reload DiscordBridge config
10+
usage: /dbridge reload
Binary file not shown.

source/target/classes/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Paste your Discord webhook URL here
2+
webhook-url: "https://discord.com/api/webhooks/your_url_here"
3+
4+
# Avatar used when sending console/server messages
5+
console-avatar: "https://i.pinimg.com/736x/17/c9/f8/17c9f88ccfdd3eda5437a9ce329c94fa.jpg"

source/target/classes/plugin.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
name: DiscordBridge
2+
main: com.SaaranshXd.discordbridge.DiscordBridge
3+
version: 1.0
4+
api-version: 1.16
5+
description: Simple Minecraft → Discord chat bridge using webhooks
6+
author: Saaransh_Xd
7+
commands:
8+
dbridge:
9+
description: Reload DiscordBridge config
10+
usage: /dbridge reload

0 commit comments

Comments
 (0)