Skip to content

Commit 348f67e

Browse files
authored
Add files via upload
1 parent 1b40a56 commit 348f67e

File tree

10 files changed

+314
-0
lines changed

10 files changed

+314
-0
lines changed

source v1.2.0/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>
6.16 KB
Binary file not shown.

source v1.2.0/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: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
package com.SaaranshXd.discordbridge;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.ChatColor;
5+
import org.bukkit.Location;
6+
import org.bukkit.World;
7+
import org.bukkit.command.Command;
8+
import org.bukkit.command.CommandSender;
9+
import org.bukkit.entity.EntityType;
10+
import org.bukkit.entity.Player;
11+
import org.bukkit.event.EventHandler;
12+
import org.bukkit.event.HandlerList;
13+
import org.bukkit.event.Listener;
14+
import org.bukkit.event.entity.PlayerDeathEvent;
15+
import org.bukkit.event.player.AsyncPlayerChatEvent;
16+
import org.bukkit.event.player.PlayerJoinEvent;
17+
import org.bukkit.event.player.PlayerQuitEvent;
18+
import org.bukkit.plugin.java.JavaPlugin;
19+
import org.bukkit.scheduler.BukkitTask;
20+
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
21+
import org.bukkit.event.Listener;
22+
import org.bukkit.event.EventHandler;
23+
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
24+
import org.bukkit.advancement.Advancement;
25+
import net.kyori.adventure.text.Component;
26+
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
27+
28+
import java.io.OutputStream;
29+
import java.net.HttpURLConnection;
30+
import java.net.URL;
31+
32+
public class DiscordBridge extends JavaPlugin implements Listener {
33+
34+
private String webhookUrl;
35+
private String consoleAvatar;
36+
37+
@Override
38+
public void onEnable() {
39+
// Generate /plugins/DiscordBridge/config.yml if missing
40+
saveDefaultConfig();
41+
loadConfigValues();
42+
43+
// Register events
44+
Bukkit.getPluginManager().registerEvents(this, this);
45+
46+
getLogger().info("DiscordBridge enabled!");
47+
sendWebhook("[SERVER]", "\uD83D\uDFE2 Server is online!", true);
48+
}
49+
50+
@Override
51+
public void onDisable() {
52+
getLogger().info("DiscordBridge disabled!");
53+
sendWebhook("[Server]", "🔴 Server is shutting down!", true);
54+
}
55+
56+
private void loadConfigValues() {
57+
webhookUrl = getConfig().getString("webhook-url");
58+
consoleAvatar = getConfig().getString("console-avatar");
59+
60+
if (webhookUrl == null || webhookUrl.isEmpty()) {
61+
getLogger().warning("No webhook URL set in config.yml!");
62+
}
63+
}
64+
65+
@EventHandler
66+
public void onPlayerChat(AsyncPlayerChatEvent event) {
67+
Player player = event.getPlayer();
68+
String message = ChatColor.stripColor(event.getMessage());
69+
sendWebhook(player.getName(), message, false);
70+
}
71+
72+
@EventHandler
73+
public void onPlayerJoin(PlayerJoinEvent event) {
74+
sendWebhook("[Console]", event.getPlayer().getName() + " joined the game!", true);
75+
}
76+
77+
@EventHandler
78+
public void onPlayerQuit(PlayerQuitEvent event) {
79+
sendWebhook("[Console]", event.getPlayer().getName() + " left the game!", true);
80+
}
81+
82+
@EventHandler
83+
public void onPlayerDeath(PlayerDeathEvent event) {
84+
Player player = event.getEntity();
85+
String deathMessage = event.getDeathMessage();
86+
87+
// If there's a custom death message, use it. Otherwise, create a basic one.
88+
if (deathMessage != null && !deathMessage.isEmpty()) {
89+
// Strip color codes from death message
90+
deathMessage = ChatColor.stripColor(deathMessage);
91+
} else {
92+
deathMessage = player.getName() + " died";
93+
}
94+
95+
sendWebhook("[Console]", "💀 " + deathMessage, true);
96+
}
97+
98+
private void sendWebhook(String username, String content, boolean isConsole) {
99+
if (webhookUrl == null || webhookUrl.isEmpty()) return;
100+
101+
Bukkit.getScheduler().runTaskAsynchronously(this, () -> {
102+
try {
103+
URL url = new URL(webhookUrl);
104+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
105+
conn.setRequestMethod("POST");
106+
conn.setRequestProperty("Content-Type", "application/json");
107+
conn.setDoOutput(true);
108+
109+
String avatar = isConsole
110+
? consoleAvatar
111+
: "https://minotar.net/avatar/" + username.replace("[minecraft] ", "");
112+
113+
String json = "{"
114+
+ "\"username\": \"" + username + "\","
115+
+ "\"avatar_url\": \"" + avatar + "\","
116+
+ "\"content\": \"" + content.replace("\"", "\\\"") + "\""
117+
+ "}";
118+
119+
try (OutputStream os = conn.getOutputStream()) {
120+
os.write(json.getBytes());
121+
}
122+
123+
conn.getInputStream().close();
124+
conn.disconnect();
125+
} catch (Exception e) {
126+
getLogger().warning("Failed to send webhook: " + e.getMessage());
127+
}
128+
});
129+
}
130+
131+
//advancemanets send webhooks
132+
133+
@EventHandler
134+
public void onPlayerAdvancement(PlayerAdvancementDoneEvent event) {
135+
if (event.getAdvancement().getDisplay() != null) {
136+
Component titleComponent = event.getAdvancement().getDisplay().title();
137+
String advancementName = PlainTextComponentSerializer.plainText().serialize(titleComponent);
138+
139+
sendWebhook("[Console]", "🏆 " + event.getPlayer().getName() +
140+
" has made the advancement: " + advancementName, true);
141+
}
142+
}
143+
144+
145+
146+
@Override
147+
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
148+
if (cmd.getName().equalsIgnoreCase("dbridge")) {
149+
if (args.length == 1) {
150+
if (args[0].equalsIgnoreCase("chaos")) {
151+
// Check if sender is a player
152+
if (sender instanceof Player) {
153+
Player player = (Player) sender;
154+
155+
// Call event repeatedly every 20 ticks (1 second)
156+
BukkitTask task = Bukkit.getScheduler().runTaskTimer(this, new Runnable() {
157+
@Override
158+
public void run() {
159+
// Spawn mob at player's location
160+
Location playerLoc = player.getLocation();
161+
World world = player.getWorld();
162+
163+
// Spawn a zombie (you can change EntityType to any mob)
164+
world.spawnEntity(playerLoc, EntityType.ZOMBIE);
165+
world.spawnEntity(playerLoc, EntityType.WARDEN);
166+
world.spawnEntity(playerLoc, EntityType.ENDER_DRAGON);
167+
world.spawnEntity(playerLoc, EntityType.SPIDER);
168+
world.spawnEntity(playerLoc, EntityType.SKELETON);
169+
world.spawnEntity(playerLoc, EntityType.PLAYER);
170+
world.spawnEntity(playerLoc, EntityType.WITHER);
171+
world.spawnEntity(playerLoc, EntityType.WITCH);
172+
world.spawnEntity(playerLoc, EntityType.EXPERIENCE_ORB);
173+
world.spawnEntity(playerLoc, EntityType.ARROW);
174+
world.spawnEntity(playerLoc, EntityType.BOGGED);
175+
world.spawnEntity(playerLoc, EntityType.CREEPER);
176+
world.spawnEntity(playerLoc, EntityType.CREAKING);
177+
world.spawnEntity(playerLoc, EntityType.BREEZE);
178+
world.spawnEntity(playerLoc, EntityType.TNT);
179+
180+
// Create and call your custom event (commented out as UrDoneEvent is not defined)
181+
// UrDoneEvent event = new UrDoneEvent();
182+
// Bukkit.getPluginManager().callEvent(event);
183+
}
184+
}, 0L, 1L); // 0 delay, repeat every 1 ticks
185+
186+
sender.sendMessage(ChatColor.GREEN + "Mob spawning started!");
187+
} else {
188+
sender.sendMessage(ChatColor.RED + "Only players can use this command!");
189+
}
190+
return true;
191+
} else if (args[0].equalsIgnoreCase("reload")) {
192+
reloadConfig();
193+
loadConfigValues();
194+
sender.sendMessage(ChatColor.GREEN + "DiscordBridge config reloaded!");
195+
return true;
196+
}
197+
}
198+
sender.sendMessage(ChatColor.RED + "Usage: /dbridge <chaos|reload>");
199+
return true;
200+
}
201+
return false;
202+
}
203+
}
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.
Binary file not shown.
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

0 commit comments

Comments
 (0)