From 71272f31a26005b1f02c3605907802d9af34f5a7 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 22 Jan 2026 22:58:27 +0100 Subject: [PATCH] Add BungeeCord example plugin --- bungeecord/example-plugin/build.gradle.kts | 13 +++++ .../main/java/com/example/ExamplePlugin.java | 52 +++++++++++++++++++ .../src/main/resources/plugin.yml | 3 ++ settings.gradle.kts | 1 + 4 files changed, 69 insertions(+) create mode 100644 bungeecord/example-plugin/build.gradle.kts create mode 100644 bungeecord/example-plugin/src/main/java/com/example/ExamplePlugin.java create mode 100644 bungeecord/example-plugin/src/main/resources/plugin.yml diff --git a/bungeecord/example-plugin/build.gradle.kts b/bungeecord/example-plugin/build.gradle.kts new file mode 100644 index 0000000..afa0880 --- /dev/null +++ b/bungeecord/example-plugin/build.gradle.kts @@ -0,0 +1,13 @@ +repositories { + maven("https://repo.papermc.io/repository/maven-public/") +} + +dependencies { + compileOnly("net.md-5:bungeecord-api:1.21-R0.5-SNAPSHOT") + implementation(project(":bungeecord")) +} + +tasks.shadowJar { + // optionally relocate faststats + relocate("dev.faststats", "com.example.utils.faststats") +} diff --git a/bungeecord/example-plugin/src/main/java/com/example/ExamplePlugin.java b/bungeecord/example-plugin/src/main/java/com/example/ExamplePlugin.java new file mode 100644 index 0000000..77e8872 --- /dev/null +++ b/bungeecord/example-plugin/src/main/java/com/example/ExamplePlugin.java @@ -0,0 +1,52 @@ +package com.example; + +import dev.faststats.bungee.BungeeMetrics; +import dev.faststats.core.ErrorTracker; +import dev.faststats.core.Metrics; +import dev.faststats.core.chart.Chart; +import net.md_5.bungee.api.plugin.Plugin; + +import java.net.URI; + +public class ExamplePlugin extends Plugin { + // context-aware error tracker, automatically tracks errors in the same class loader + public static final ErrorTracker ERROR_TRACKER = ErrorTracker.contextAware(); + + // context-unaware error tracker, does not automatically track errors + public static final ErrorTracker CONTEXT_UNAWARE_ERROR_TRACKER = ErrorTracker.contextUnaware(); + + private final Metrics metrics = BungeeMetrics.factory() + .url(URI.create("https://metrics.example.com/v1/collect")) // For self-hosted metrics servers only + + // Custom example charts + // For this to work you have to create a corresponding data source in your project settings first + .addChart(Chart.number("example_chart", () -> 42)) + .addChart(Chart.string("example_string", () -> "Hello, World!")) + .addChart(Chart.bool("example_boolean", () -> true)) + .addChart(Chart.stringArray("example_string_array", () -> new String[]{"Option 1", "Option 2"})) + .addChart(Chart.numberArray("example_number_array", () -> new Number[]{1, 2, 3})) + .addChart(Chart.booleanArray("example_boolean_array", () -> new Boolean[]{true, false})) + + // Attach an error tracker + // This must be enabled in the project settings + .errorTracker(ERROR_TRACKER) + + .debug(true) // Enable debug mode for development and testing + + .token("YOUR_TOKEN_HERE") // required -> token can be found in the settings of your project + .create(this); + + @Override + public void onDisable() { + metrics.shutdown(); + } + + public void doSomethingWrong() { + try { + // Do something that might throw an error + throw new RuntimeException("Something went wrong!"); + } catch (Exception e) { + CONTEXT_UNAWARE_ERROR_TRACKER.trackError(e); + } + } +} diff --git a/bungeecord/example-plugin/src/main/resources/plugin.yml b/bungeecord/example-plugin/src/main/resources/plugin.yml new file mode 100644 index 0000000..d9d292b --- /dev/null +++ b/bungeecord/example-plugin/src/main/resources/plugin.yml @@ -0,0 +1,3 @@ +name: ExamplePlugin +version: 1.0.0 +main: com.example.ExamplePlugin \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 9a9c353..d78180b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,6 +11,7 @@ rootProject.name = "dev-kits" include("bukkit") include("bukkit:example-plugin") include("bungeecord") +include("bungeecord:example-plugin") include("core") include("fabric") include("fabric:example-mod")