Skip to content

Commit 7fb9104

Browse files
committed
Add BungeeCord plugin example project
Introduces a new example plugin for BungeeCord, including Gradle build configuration, plugin source code, listener implementation, resource files, and documentation with images. Also updates settings.gradle to include the new subproject and removes unused resource processing from the Velocity plugin build script.
1 parent 2102979 commit 7fb9104

9 files changed

Lines changed: 133 additions & 10 deletions

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Result of Code
2+
![img.png](img.png)
3+
![img_1.png](img_1.png)
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
plugins {
2+
id 'java'
3+
id 'com.gradleup.shadow' version '9.2.2'
4+
}
5+
6+
def id = "MyPlugin"
7+
group = 'com.example.myplugin'
8+
version = '1.0.0'
9+
10+
repositories {
11+
mavenCentral()
12+
13+
maven {
14+
url = uri("https://oss.sonatype.org/content/repositories/snapshots")
15+
}
16+
17+
maven {
18+
url = uri("https://libraries.minecraft.net")
19+
}
20+
21+
maven {
22+
name = "negative-games-repo"
23+
url = "https://repo.negative.games/repository/maven-snapshots/"
24+
}
25+
}
26+
27+
dependencies {
28+
compileOnly("net.md-5:bungeecord-api:1.20-R0.2")
29+
30+
// IMPORTANT: We need to compile Spring Context for this to work!
31+
implementation("org.springframework:spring-context:6.2.13")
32+
33+
// Moss (Bungeecord Platform)
34+
implementation("games.negative.moss:moss-bungeecord:1.0.1-SNAPSHOT")
35+
}
36+
37+
def targetJavaVersion = 21
38+
java {
39+
def javaVersion = JavaVersion.toVersion(targetJavaVersion)
40+
sourceCompatibility = javaVersion
41+
targetCompatibility = javaVersion
42+
if (JavaVersion.current() < javaVersion) {
43+
toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion)
44+
}
45+
}
46+
47+
tasks.withType(JavaCompile).configureEach {
48+
options.encoding = 'UTF-8'
49+
50+
if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) {
51+
options.release.set(targetJavaVersion)
52+
}
53+
}
54+
55+
tasks {
56+
build {
57+
dependsOn(shadowJar)
58+
}
59+
}
60+
61+
shadowJar {
62+
archiveBaseName.set("${id}")
63+
archiveClassifier.set("")
64+
archiveVersion.set("")
65+
66+
relocate("games.negative.moss", "${group}.libs.moss")
67+
// relocate other dependencies such as Spring
68+
}
2.44 KB
Loading
13.7 KB
Loading
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.example.myplugin;
2+
3+
import games.negative.moss.bungee.MossBungee;
4+
import net.md_5.bungee.api.ProxyServer;
5+
import net.md_5.bungee.api.plugin.Listener;
6+
import net.md_5.bungee.api.plugin.PluginManager;
7+
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
8+
9+
public class MyPlugin extends MossBungee {
10+
11+
@Override
12+
public void loadInitialComponents(AnnotationConfigApplicationContext context) {
13+
// Registering a custom Bean in the initialization phase
14+
// so it can be used by other classes!
15+
context.registerBean(ProxyServer.class, ProxyServer::getInstance);
16+
}
17+
18+
@Override
19+
public void onEnable() {
20+
super.onEnable(); // ALWAYS KEEP THIS
21+
22+
// Custom bean registration if needed, such as Commands, Listeners, etc.
23+
PluginManager listeners = ProxyServer.getInstance().getPluginManager();
24+
invokeBeans(Listener.class, listener -> listeners.registerListener(this, listener), (listener, e) -> {
25+
// Throw an error if a listener fails to register
26+
getLogger().severe("Failed to register listener: " + listener.getClass().getSimpleName());
27+
});
28+
}
29+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.example.myplugin.listener;
2+
3+
import com.example.myplugin.MyPlugin;
4+
import games.negative.moss.spring.SpringComponent;
5+
import net.md_5.bungee.api.ProxyServer;
6+
import net.md_5.bungee.api.connection.ProxiedPlayer;
7+
import net.md_5.bungee.api.event.PostLoginEvent;
8+
import net.md_5.bungee.api.plugin.Listener;
9+
import net.md_5.bungee.event.EventHandler;
10+
11+
@SpringComponent
12+
public class MyListener implements Listener {
13+
14+
private final ProxyServer server;
15+
16+
public MyListener(ProxyServer server) {
17+
this.server = server;
18+
}
19+
20+
@EventHandler
21+
public void onPlayerLogin(PostLoginEvent event) {
22+
ProxiedPlayer player = event.getPlayer();
23+
player.sendMessage("Welcome to the server, " + player.getName() + "!");
24+
25+
server.getLogger().info("Player " + player.getName() + " has logged in.");
26+
}
27+
28+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
name: MyPlugin
2+
main: com.example.myplugin.MyPlugin
3+
version: 1.0.0

example-plugins/velocity-plugin/build.gradle

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,6 @@ tasks.withType(JavaCompile).configureEach {
4949
}
5050
}
5151

52-
processResources {
53-
def props = [version: version]
54-
inputs.properties props
55-
filteringCharset 'UTF-8'
56-
filesMatching('paper-plugin.yml') {
57-
expand props
58-
}
59-
}
60-
6152
tasks {
6253
build {
6354
dependsOn(shadowJar)

settings.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ include 'moss-paper'
44
include 'moss-bungeecord'
55
include 'moss-velocity'
66
include 'example-plugins:paper-plugin'
7-
include 'example-plugins:velocity-plugin'
7+
include 'example-plugins:velocity-plugin'
8+
include 'example-plugins:bungeecord-plugin'

0 commit comments

Comments
 (0)