Skip to content

Commit

Permalink
feat: spigot compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
rexlManu committed Apr 4, 2024
1 parent ed313c3 commit ef3cccc
Show file tree
Hide file tree
Showing 48 changed files with 776 additions and 221 deletions.
85 changes: 53 additions & 32 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,41 @@ plugins {
`java-library`
alias(libs.plugins.lombok)
alias(libs.plugins.runpaper)
alias(libs.plugins.userdev)
// alias(libs.plugins.userdev)
alias(libs.plugins.shadow)
// Plugins for publishing on platforms
alias(libs.plugins.hangar)
alias(libs.plugins.minotaur)
// Plugins to generate plugin metadata files
// alias(libs.plugins.paperyml)
alias(libs.plugins.paperyml)
alias(libs.plugins.pluginyml)
}

repositories {
mavenCentral()
maven() {
url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots/")
content {
includeGroup("org.spigotmc")
includeGroup("org.bukkit")
}
}
maven("https://jitpack.io")
maven("https://repo.extendedclip.com/content/repositories/placeholderapi/")
maven("https://repo.techscode.com/repository/maven-releases/")
}

dependencies {
paperweight.paperDevBundle(libs.versions.minecraft)
// paperweight.paperDevBundle(libs.versions.minecraft)
compileOnly(libs.spigot)

compileOnly(libs.jedis)
compileOnly(libs.commandframework)
compileOnly(libs.configlib)
compileOnly(libs.guice)
compileOnly(libs.hikaridb)
compileOnly(libs.stringsimilarity)
library(libs.jedis)
library(libs.commandframework)
library(libs.configlib)
library(libs.guice)
library(libs.hikaridb)
library(libs.stringsimilarity)
library(libs.bundles.adventure)

// Plugin dependencies
compileOnly(libs.miniplaceholders)
Expand All @@ -39,13 +48,17 @@ dependencies {
compileOnly(libs.ultrapermissions)

implementation(libs.bstats)
implementation(projects.paper)
}

tasks {
compileJava {
options.encoding = Charsets.UTF_8.name()
options.release.set(17)
}
build {
dependsOn("shadowJar")
}
processResources {
filteringCharset = Charsets.UTF_8.name()
val props = mapOf(
Expand All @@ -63,7 +76,7 @@ tasks {
options.encoding = Charsets.UTF_8.name()
}
assemble {
dependsOn(reobfJar)
// dependsOn(reobfJar)
}
jar {
enabled = false
Expand All @@ -79,13 +92,16 @@ tasks {
exclude("META-INF/versions/**")
exclude("META-INF/**.kotlin_module")
}
minimize()
// minimize()
}
runServer {
minecraftVersion("1.20.4")
}
}

tasks.getByName("modrinth").dependsOn(tasks.modrinthSyncBody)

val versions = listOf("1.19.2", "1.19.4", "1.20", "1.20.1", "1.20.2");
val versions = listOf("1.19.4", "1.20", "1.20.1", "1.20.2", "1.20.3", "1.20.4");

modrinth {
token.set(System.getenv("MODRINTH_TOKEN"))
Expand Down Expand Up @@ -143,25 +159,30 @@ bukkit {
load = BukkitPluginDescription.PluginLoadOrder.POSTWORLD
softDepend = listOf("MiniPlaceholders", "LuckPerms", "PlaceholderAPI", "UltraPermissions")
prefix = "FairyChat"
generateLibrariesJson = true
}

//paper {
// main = "de.rexlmanu.fairychat.plugin.FairyChatPlugin"
// loader = "de.rexlmanu.fairychat.plugin.FairyChatLoader"
// apiVersion = "1.19"
// foliaSupported = true
// author = "rexlManu"
// website = "https://github.com/rexlManu/FairyChat"
// prefix = "FairyChat"
// serverDependencies {
// register("MiniPlaceholders") {
// required = false
// }
// register("LuckPerms") {
// required = false
// }
// register("PlaceholderAPI") {
// required = false
// }
// }
//}
paper {
main = "de.rexlmanu.fairychat.plugin.FairyChatPlugin"
loader = "de.rexlmanu.fairychat.plugin.paper.FairyChatLoader"
apiVersion = "1.20"
foliaSupported = true
author = "rexlManu"
website = "https://github.com/rexlManu/FairyChat"
prefix = "FairyChat"
serverDependencies {
register("MiniPlaceholders") {
required = false
}
register("LuckPerms") {
required = false
}
register("PlaceholderAPI") {
required = false
}
register("UltraPermissions") {
required = false
}
}
generateLibrariesJson = true
}
22 changes: 21 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
[versions]
minecraft = "1.20.4-R0.1-SNAPSHOT"
adventure = "4.3.2"
minimessage = "4.16.0"
[plugins]
userdev = { id = "io.papermc.paperweight.userdev", version = "1.5.11" }
runpaper = { id = "xyz.jpenilla.run-paper", version = "2.2.2" }
Expand All @@ -10,6 +12,9 @@ minotaur = { id = "com.modrinth.minotaur", version = "2.8.7" }
paperyml = { id = "net.minecrell.plugin-yml.paper", version = "0.6.0" }
pluginyml = { id = "net.minecrell.plugin-yml.bukkit", version = "0.6.0" }
[libraries]
spigot = { module = "org.spigotmc:spigot-api", version = "1.20.4-R0.1-SNAPSHOT" }
paper = { module = "io.papermc.paper:paper-api", version = "1.20.4-R0.1-SNAPSHOT" }

annotations = { module = "org.jetbrains:annotations", version = "24.1.0" }
jedis = { module = "redis.clients:jedis", version = "4.1.1" }
miniplaceholders = { module = "io.github.miniplaceholders:miniplaceholders-api", version = "2.2.3" }
Expand All @@ -21,4 +26,19 @@ bstats = { module = "org.bstats:bstats-bukkit", version = "3.0.2" }
hikaridb = { module = "com.zaxxer:HikariCP", version = "5.0.1" }
placeholderapi = { module = "me.clip:placeholderapi", version = "2.11.5" }
stringsimilarity = { module = "net.ricecode:string-similarity", version = "1.0.0" }
ultrapermissions = { module = "me.TechsCode:UltraPermissionsAPI", version = "5.5.2" }
ultrapermissions = { module = "me.TechsCode:UltraPermissionsAPI", version = "5.5.2" }

adventure-platform-bukkit = { module = "net.kyori:adventure-platform-bukkit", version.ref = "adventure" }
adventure-minimessage = { module = "net.kyori:adventure-text-minimessage", version.ref = "minimessage" }
adventure-text-serializer-plain = { module = "net.kyori:adventure-text-serializer-plain", version.ref = "minimessage" }
adventure-text-serializer-gson = { module = "net.kyori:adventure-text-serializer-gson", version.ref = "minimessage" }
adventure-text-serializer-legacy = { module = "net.kyori:adventure-text-serializer-legacy", version.ref = "minimessage" }

[bundles]
adventure = [
"adventure-platform-bukkit",
"adventure-minimessage",
"adventure-text-serializer-plain",
"adventure-text-serializer-gson",
"adventure-text-serializer-legacy"
]
13 changes: 13 additions & 0 deletions paper/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
plugins {
`java-library`
alias(libs.plugins.lombok)
}
repositories {
mavenCentral()
maven("https://repo.papermc.io/repository/maven-public/")
}

dependencies {
compileOnly(libs.paper)
compileOnly(libs.guice)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package de.rexlmanu.fairychat.plugin.paper;

public record AdaptPluginMeta(String version) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package de.rexlmanu.fairychat.plugin.paper;

import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public interface DefaultChatRenderer {
Component render(
@NotNull Player source,
@NotNull Component sourceDisplayName,
@NotNull Component message,
@NotNull Audience viewer);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package de.rexlmanu.fairychat.plugin.paper;

public enum Environment {
SPIGOT,
PAPER,
UNKNOWN;

public static final Environment ENVIRONMENT = detectEnvironment();

public boolean isPaper() {
return this == PAPER;
}

public boolean isSpigot() {
return this == SPIGOT;
}

private static Environment detectEnvironment() {
if (hasClass("com.destroystokyo.paper.PaperConfig")
|| hasClass("io.papermc.paper.configuration.Configuration")) {
return PAPER;
} else if (hasClass("org.spigotmc.SpigotConfig")) {
return SPIGOT;
} else {
return UNKNOWN;
}
}

private static boolean hasClass(String className) {
try {
Class.forName(className);
return true;
} catch (ClassNotFoundException e) {
return false;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package de.rexlmanu.fairychat.plugin.paper;

import com.google.gson.Gson;
import io.papermc.paper.plugin.loader.PluginClasspathBuilder;
import io.papermc.paper.plugin.loader.PluginLoader;
import io.papermc.paper.plugin.loader.library.impl.MavenLibraryResolver;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.repository.RemoteRepository;
import org.jetbrains.annotations.NotNull;

@SuppressWarnings("UnstableApiUsage")
public class FairyChatLoader implements PluginLoader {
@Override
public void classloader(@NotNull PluginClasspathBuilder classpathBuilder) {
MavenLibraryResolver resolver = new MavenLibraryResolver();
PluginLibraries pluginLibraries = this.load();
pluginLibraries.asDependencies().forEach(resolver::addDependency);
pluginLibraries.asRepositories().forEach(resolver::addRepository);
classpathBuilder.addLibrary(resolver);
}

public PluginLibraries load() {
try (var inputStream = this.getClass().getResourceAsStream("/paper-libraries.json")) {
return new Gson()
.fromJson(
new InputStreamReader(inputStream, StandardCharsets.UTF_8), PluginLibraries.class);
} catch (IOException e) {
throw new RuntimeException(e);
}
}

private record PluginLibraries(Map<String, String> repositories, List<String> dependencies) {
public Stream<Dependency> asDependencies() {
return this.dependencies.stream().map(d -> new Dependency(new DefaultArtifact(d), null));
}

public Stream<RemoteRepository> asRepositories() {
return this.repositories.entrySet().stream()
.map(e -> new RemoteRepository.Builder(e.getKey(), "default", e.getValue()).build());
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package de.rexlmanu.fairychat.plugin.utility.scheduler;
package de.rexlmanu.fairychat.plugin.paper;

import com.google.inject.Inject;
import com.google.inject.Singleton;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package de.rexlmanu.fairychat.plugin.paper;

import io.papermc.paper.event.player.AsyncChatEvent;
import java.util.Set;
import java.util.function.Consumer;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull;

@RequiredArgsConstructor
public class PaperAsyncChatHandler implements Listener {
@RequiredArgsConstructor
@Data
public static class WrappedAsyncChatEvent {
private final AsyncChatEvent event;

public Player getPlayer() {
return this.event.getPlayer();
}

public void setCancelled(boolean cancelled) {
this.event.setCancelled(cancelled);
}

public void renderer(DefaultChatRenderer renderer) {
this.event.renderer(renderer::render);
}

public @NotNull Set<Audience> viewers() {
return this.event.viewers();
}

public Component message() {
return this.event.message();
}
}

private final Consumer<WrappedAsyncChatEvent> eventConsumer;

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void handle(AsyncChatEvent event) {
this.eventConsumer.accept(new WrappedAsyncChatEvent(event));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package de.rexlmanu.fairychat.plugin.paper;

import lombok.experimental.UtilityClass;
import org.bukkit.plugin.java.JavaPlugin;

@UtilityClass
public class PluginMetaFactory {
public AdaptPluginMeta create(JavaPlugin javaPlugin) {
if (Environment.ENVIRONMENT.isPaper()) {
return new AdaptPluginMeta(javaPlugin.getPluginMeta().getVersion());
}

return new AdaptPluginMeta(javaPlugin.getDescription().getVersion());
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package de.rexlmanu.fairychat.plugin.utility.scheduler;
package de.rexlmanu.fairychat.plugin.paper;

public interface PluginScheduler {
void runAsync(Runnable runnable);
Expand Down
Loading

0 comments on commit ef3cccc

Please sign in to comment.