8 Commits
Author SHA1 Message Date
Ryder Belserion 91964656c9 [ci skip] bump gradle version 2026-10-22 18:33:59 -04:00
Ryder Belserion d858c0139e Update things 2026-08-17 21:27:21 -04:00
Ryder Belserion 90561317d3 Update embed title 2026-07-21 19:04:06 -04:00
Ryder Belserion 899af6ee63 Update workflows 2026-07-21 19:03:13 -04:00
Ryder Belserion 5d4f799b22 Finish updating to 26.1.2 2026-07-21 19:02:17 -04:00
Ryder Belserion 22c77db9ca Start updating to 26.1.2 2026-07-19 03:40:18 -04:00
Ryder Belserion 28c1fd6d42 Fixed a bug with drowning listener 2026-02-18 16:17:00 -05:00
Ryder Belserion cb0311a524 Rename workflow 2026-01-18 21:59:33 -05:00
55 changed files with 1341 additions and 685 deletions

No files matched your search

+8
View File
@@ -0,0 +1,8 @@
name: Debug Build
on:
workflow_dispatch:
jobs:
build:
uses: ryderbelserion/ryderbelserion/.github/workflows/debug.yml@main
+9 -41
View File
@@ -8,46 +8,14 @@ on:
jobs:
build:
runs-on: ubuntu-latest
uses: ryderbelserion/ryderbelserion/.github/workflows/build.yml@main
if: "!contains(github.event.commits[0].message, '[ci-skip]') || !contains(github.event.commits[0].message, 'chore:')"
with:
platforms: modrinth
status: "release"
branch: main
steps:
- uses: actions/checkout@v5
- uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 21
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
- name: Make gradlew executable
run: chmod +x ./gradlew
- name: Build
run: ./gradlew build --stacktrace
- name: Publish to Modrinth
run: ./gradlew modrinth --stacktrace
env:
COMMIT_MESSAGE: ${{ join(github.event.commits.*.message, '<br>') }}
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
#- name: Publish to Hangar
# run: ./gradlew publishAllPublicationsToHangar --stacktrace
# env:
# COMMIT_MESSAGE: ${{ join(github.event.commits.*.message, '<br>') }}
# HANGAR_KEY: ${{ secrets.HANGAR_TOKEN }}
#- name: Notify Discord
# if: success()
# run: ./gradlew release-build --stacktrace
# env:
# BUILD_WEBHOOK: ${{ secrets.webhook }}
#- name: Build Failure
# if: failure()
# run: ./gradlew failed-build --stacktrace
# env:
# BUILD_WEBHOOK: ${{ secrets.webhook }}
secrets:
webhook: ${{ secrets.BUILD_WEBHOOK }}
modrinth_token: ${{ secrets.MODRINTH_TOKEN }}
hangar_token: ${{ secrets.HANGAR_KEY }}
+11 -43
View File
@@ -1,54 +1,22 @@
name: Release Build
name: Snapshot Build
on:
workflow_dispatch:
push:
branches:
- dev
- main
jobs:
build:
runs-on: ubuntu-latest
uses: ryderbelserion/ryderbelserion/.github/workflows/build.yml@main
if: "!contains(github.event.commits[0].message, '[ci-skip]') || !contains(github.event.commits[0].message, 'chore:')"
with:
platforms: modrinth
status: "beta"
branch: main
steps:
- uses: actions/checkout@v5
- uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 21
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
- name: Make gradlew executable
run: chmod +x ./gradlew
- name: Build
run: ./gradlew build --stacktrace
- name: Publish to Modrinth
run: ./gradlew modrinth --stacktrace
env:
COMMIT_MESSAGE: ${{ join(github.event.commits.*.message, '<br>') }}
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
#- name: Publish to Hangar
# run: ./gradlew publishAllPublicationsToHangar --stacktrace
# env:
# COMMIT_MESSAGE: ${{ join(github.event.commits.*.message, '<br>') }}
# HANGAR_KEY: ${{ secrets.HANGAR_TOKEN }}
#- name: Notify Discord
# if: success()
# run: ./gradlew release-build --stacktrace
# env:
# BUILD_WEBHOOK: ${{ secrets.webhook }}
#- name: Build Failure
# if: failure()
# run: ./gradlew failed-build --stacktrace
# env:
# BUILD_WEBHOOK: ${{ secrets.webhook }}
secrets:
webhook: ${{ secrets.SF_WEBHOOK }}
modrinth_token: ${{ secrets.MODRINTH_TOKEN }}
hangar_token: ${{ secrets.HANGAR_KEY }}
+15
View File
@@ -0,0 +1,15 @@
name: Sync Page Description
on:
workflow_dispatch:
push:
paths:
- 'README.md' # Triggers for changes to this specific file
jobs:
sync:
uses: ryderbelserion/ryderbelserion/.github/workflows/sync.yml@main
secrets:
modrinth_token: ${{ secrets.MODRINTH_TOKEN }}
+68 -77
View File
@@ -3,38 +3,54 @@ import utils.updateMarkdown
plugins {
id("modrinth-plugin")
id("hangar-plugin")
`paper-plugin`
`java-plugin`
}
val git = feather.getGit()
val git = feather.getBuilder()
tasks {
jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
subprojects {
dependsOn(project.tasks.build)
}
archiveClassifier = ""
val files = subprojects.filter { it.name != "common" && it.name != "api" }.mapNotNull {
val file = it.tasks.jar.get().archiveFile
if (file.isPresent) {
zipTree(file.get().asFile)
} else {
null
}
}
from(files) {
exclude("META-INF/MANIFEST.MF")
}
doFirst {
files.forEach { file ->
file.matching { include("META-INF/MANIFEST.MF") }.files.forEach {
manifest.from(it)
}
}
}
}
}
val releaseType = rootProject.ext.get("release_type").toString()
val color = rootProject.property("${releaseType.lowercase()}_color").toString()
val isRelease = releaseType.equals("release", true)
val isAlpha = releaseType.equals("alpha", true)
repositories {
maven("https://repo.papermc.io/repository/maven-public")
maven("https://repo.crazycrew.us/libraries")
maven("https://maven.enginehub.org/repo")
}
dependencies {
implementation(libs.vital.paper)
compileOnly(libs.worldguard)
}
feather {
rootDirectory = rootProject.rootDir.toPath()
workingDirectory = rootProject.rootDir.toPath()
val data = git.getGithubCommit("ryderbelserion/${rootProject.name}")
val user = data.user
val origin = git.getNewestCommit(rootProject.property("repository_owner").toString(),rootProject.name, git.utils.getRemoteCommitHash())
discord {
webhook {
@@ -46,9 +62,10 @@ feather {
}
if (isRelease) {
username(user.getName())
val user = origin?.user
avatar(user.avatar)
username(user?.name ?: "N/A")
avatar(user?.getAvatar() ?: "N/A")
} else {
username(rootProject.property("author_name").toString())
@@ -59,18 +76,21 @@ feather {
embed {
color(color)
title("A new $releaseType version of ${rootProject.name} is ready!")
title("The next version of ${rootProject.name} is ready!")
//if (isRelease) {
// content("<@&${rootProject.property("discord_role_id").toString()}>")
//}
if (isRelease) {
content("<@&${rootProject.property("discord_role_id").toString()}>")
}
fields {
field(
"Version ${rootProject.version}",
listOf(
"*Click below to download!*",
"<:modrinth:1115307870473420800> [Modrinth](https://modrinth.com/plugin/${rootProject.name.lowercase()}/version/${rootProject.version})"
"<:modrinth:1115307870473420800> [Modrinth](https://modrinth.com/plugin/${rootProject.name.lowercase()}/version/${rootProject.version})",
"<:hangar:1139326635313733652> [Hangar](https://hangar.papermc.io/${rootProject.property("repository_owner").toString().replace("-", "")}/${rootProject.name.lowercase()}/versions/${rootProject.version})",
"",
"<:business:1527739792358637598> [Jenkins](https://ci.crazycrew.us/job/${rootProject.name}/)"
).convertList()
)
@@ -86,65 +106,36 @@ feather {
}
}
}
}
webhook {
group(rootProject.name.lowercase())
task("failed-build")
webhook {
group(rootProject.name.lowercase())
task("failed-build")
if (System.getenv("BUILD_WEBHOOK") != null) {
post(System.getenv("BUILD_WEBHOOK"))
}
if (System.getenv("BUILD_WEBHOOK") != null) {
post(System.getenv("BUILD_WEBHOOK"))
}
username(rootProject.property("mascot_name").toString())
username(rootProject.property("mascot_name").toString())
avatar(rootProject.property("mascot_avatar").toString())
avatar(rootProject.property("mascot_avatar").toString())
embeds {
embed {
color(rootProject.property("failed_color").toString())
embeds {
embed {
color(rootProject.property("failed_color").toString())
title("Oh no! It failed!")
title("Oh no! It failed!")
thumbnail("https://raw.githubusercontent.com/ryderbelserion/Branding/refs/heads/main/booze.jpg")
thumbnail("https://raw.githubusercontent.com/ryderbelserion/Branding/refs/heads/main/booze.jpg")
fields {
field(
"The build versioned ${rootProject.version} for project ${rootProject.name} failed.",
"The developer is likely already aware, he is just getting drunk.",
inline = true
)
}
fields {
field(
"The build versioned ${rootProject.version} for project ${rootProject.name} failed.",
"The developer is likely already aware, he is just getting drunk."
)
}
}
}
}
}
}
tasks {
runServer {
jvmArgs("-Dnet.kyori.ansi.colorLevel=truecolor")
jvmArgs("-Dcom.mojang.eula.agree=true")
defaultCharacterEncoding = Charsets.UTF_8.name()
minecraftVersion(libs.versions.minecraft.get())
}
shadowJar {
listOf(
"com.ryderbelserion.vital"
).forEach {
relocate(it, "libs.$it")
}
}
configurations.all { //todo() FIX ME later, fucking forced dependencies, give me a fucking break
resolutionStrategy {
force("org.apache.logging.log4j:log4j-bom:2.24.1")
force("com.google.guava:guava:33.3.1-jre")
force("com.google.code.gson:gson:2.11.0")
force("it.unimi.dsi:fastutil:8.5.15")
}
}
}
@@ -9,25 +9,26 @@ val libs = extensions.getByType(VersionCatalogsExtension::class.java).named("lib
repositories {
maven("https://repo.codemc.io/repository/maven-public/")
maven("https://repo.opencollab.dev/maven-snapshots/")
maven("https://repo.triumphteam.dev/snapshots/")
maven("https://repo.crazycrew.us/libraries/")
maven("https://repo.crazycrew.us/snapshots/")
maven("https://repo.crazycrew.us/releases/")
maven("https://jitpack.io/")
mavenCentral()
mavenLocal()
}
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
toolchain.languageVersion.set(JavaLanguageVersion.of(25))
}
tasks {
compileJava {
options.encoding = Charsets.UTF_8.name()
options.release.set(21)
options.release.set(25)
}
processResources {
@@ -36,16 +37,28 @@ tasks {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
inputs.properties(
"name" to rootProject.name,
// global
"artifact" to rootProject.name,
"group" to project.group,
"version" to rootProject.version,
"description" to rootProject.description.toString(),
// fabric
"id" to rootProject.name.lowercase(),
"fabricloader" to libs.findVersion("fabric-loader").get(),
// generic
"minecraft" to libs.findVersion("minecraft").get(),
// website
"website" to "https://github.com/${rootProject.property("repository_owner")}/${rootProject.name}",
"group" to project.group
"current_commit" to rootProject.ext.get("current_commit").toString(),
"previous_commit" to rootProject.ext.get("previous_commit").toString()
)
with(copySpec {
include("*paper-plugin.yml", "*plugin.yml")
include("*paper-plugin.yml", "*fabric.mod.json", "*version.json")
from("src/main/resources") {
expand(inputs.properties)
@@ -0,0 +1,23 @@
import org.gradle.kotlin.dsl.support.uppercaseFirstChar
plugins {
id("net.darkhax.curseforgegradle")
id("shared-plugin")
}
val libs: VersionCatalog = extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
tasks.register("publishCurseForge", net.darkhax.curseforgegradle.TaskPublishCurseForge::class) {
apiToken = System.getenv("CURSEFORGE_TOKEN")
val projectId = rootProject.property("cf_project_id") as String?
var mainFile = upload(projectId, tasks.named<Jar>("jar").flatMap { it.archiveFile })
mainFile.addGameVersion(rootProject.property("cf_game_version") as String?)
mainFile.releaseType = rootProject.ext.get("release_type").toString().uppercaseFirstChar()
mainFile.displayName = "${rootProject.version as String}-${project.name}"
mainFile.changelog = rootProject.file("changelog.md").readText()
}
@@ -1,4 +1,3 @@
import gradle.kotlin.dsl.accessors._bc702d41505d332776c95ae061891e6e.ext
import io.papermc.hangarpublishplugin.model.Platforms
import org.gradle.kotlin.dsl.support.uppercaseFirstChar
@@ -30,30 +29,6 @@ hangarPublish {
hangar("PlaceholderAPI") {
required = false
}
hangar("FancyHolograms") {
required = false
}
url("CMI", "https://www.spigotmc.org/resources/cmi-300-commands-insane-kits-portals-essentials-economy-mysql-sqlite-much-more.3742/") {
required = false
}
url("DecentHolograms", "https://modrinth.com/plugin/decentholograms") {
required = false
}
url("ItemsAdder", "https://polymart.org/product/1851/itemsadder") {
required = false
}
url("Oraxen", "https://polymart.org/product/629/oraxen") {
required = false
}
url("Nexo", "https://polymart.org/resource/nexo.6901") {
required = false
}
}
}
}
@@ -1,11 +1,10 @@
plugins {
id("com.modrinth.minotaur")
id("shared-plugin")
}
modrinth {
token = System.getenv("MODRINTH_TOKEN")
token = "mrp_rQCjGHWfpst4KBrJEf022BvqwrVScPeIN3n7w1Vckq4dUnLeFCJvjMGd6xuP"
projectId = "${rootProject.property("project_id")}"
@@ -27,8 +26,6 @@ modrinth {
detectLoaders = false
dependencies {
optional.project("DecentHolograms")
optional.project("FancyHolograms")
optional.project("PlaceholderAPI")
}
}
@@ -8,5 +8,16 @@ tasks {
archiveClassifier.set("")
exclude("META-INF/**")
listOf(
"com.ryderbelserion.fusion",
"org.bstats"
).forEach {
relocate(it, "libs.$it")
}
minimize {
exclude(dependency("com.ryderbelserion.fusion:.*"))
}
}
}
@@ -1,3 +1,5 @@
import utils.convertList
plugins {
id("com.ryderbelserion.feather.core")
@@ -6,22 +8,41 @@ plugins {
val libs = extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
val git = feather.getGit()
val git = feather.getBuilder()
val utils = git.utils
val isBeta: Boolean = git.getCurrentBranch() == rootProject.property("beta_branch").toString()
val isAlpha: Boolean = git.getCurrentBranch() == rootProject.property("alpha_branch").toString()
val branch = utils.getRemoteBranch()
val hash = utils.getRemoteCommitHash()
val commit = utils.getRemoteCommitMessage(hash, "%B")
val commitHash: String = git.getCurrentCommitHash().subSequence(0, 7).toString()
val content: String = if (isBeta) "[$commitHash](https://github.com/${rootProject.property("repository_owner")}/${rootProject.name}/commit/$commitHash) ${git.getCurrentCommit()}" else rootProject.file("changelog.md").readText(Charsets.UTF_8)
val status: String = System.getenv().getOrDefault("version_status", "release").lowercase()
val buildNumber: String = System.getenv("BUILD_NUMBER") ?: "N/A"
val isJenkins: Boolean = buildNumber != "N/A"
val isRelease: Boolean = status == "release"
val isAlpha: Boolean = status == "alpha"
val isBeta: Boolean = status == "beta"
val commitHash: String = hash.subSequence(0, 7).toString()
val changelog = rootProject.file("changelog.md").readText(Charsets.UTF_8)
val content: String = if (isRelease) changelog else if (isBeta || isAlpha || isJenkins) {
"[$commitHash](https://github.com/${rootProject.property("repository_owner")}/${rootProject.name}/commit/$commitHash) $commit"
} else changelog
val minecraft = libs.findVersion("minecraft").get()
rootProject.description = rootProject.property("project_description").toString()
rootProject.version = if (isBeta) "$minecraft-$commitHash" else if (isAlpha) "${rootProject.property("plugin_version")}-SNAPSHOT" else rootProject.property("plugin_version").toString()
rootProject.version = if (isBeta || isJenkins) "$minecraft-$commitHash" else if (isAlpha) "${rootProject.property("plugin_version")}-SNAPSHOT" else rootProject.property("plugin_version").toString()
rootProject.group = rootProject.property("project_group").toString()
rootProject.ext {
set("version_name", if (isBeta) "${rootProject.version}" else "${rootProject.name} ${rootProject.version}")
set("release_type", if (isBeta) "beta" else if (isAlpha) "alpha" else "release")
set("mc_changelog", content)
set("release_type", status)
set("current_commit", commitHash)
set("previous_commit", System.getenv("GIT_PREVIOUS_SUCCESSFUL_COMMIT") ?: "N/A")
set("build_number", buildNumber)
set("mc_changelog", content.lines().convertList())
}
+2 -2
View File
@@ -9,9 +9,9 @@ fun String.updateMarkdown(): String {
if (it.contains("##")) {
val text = it.replace("## ", "")
builder.append("**${text}**")
builder.append("**${text}**").append("\n")
} else {
builder.append(it)
builder.append(it).append("\n")
}
}
+1 -4
View File
@@ -1,4 +1 @@
## Additions:
- Added 2 new flags
- A flag to prevent interacting with crafter blocks
- A flag to prevent placing crafter blocks
- Fixed a bug with drowning listener which canceled all forms of damage as the damage type wasn't properly checked.
+4 -12
View File
@@ -15,30 +15,22 @@ mascot_name = Beidou
mascot_avatar = https://raw.githubusercontent.com/ryderbelserion/Branding/refs/heads/main/beidou/christmas/emojis/padoru.png
# The version of the plugin
plugin_version = 1.1.0
# The api version
api_version = 0.1.0
plugin_version = 1.1.1
# The beta branch
beta_branch = dev
# The color for beta builds
beta_color = #ffa347
# The alpha branch
alpha_branch = alpha
# The color for the alpha builds
alpha_color = #ff496e
# The color for release builds
release_color = #1bd96a
# The color when a build fails
failed_color = #ff000d
# The role id to ping when publishing releases
discord_role_id = 929463441159254066
discord_role_id = 1528286022255775928
project_description = Adds simple worldguard flags.
project_description = Adds extra flags to be used by WorldGuard regions
project_group = com.ryderbelserion.simpleflags
project_platforms = paper,folia,purpur
project_versions = 1.21.1
project_versions = 26.1.2,26.2
project_id = SimpleFlags
+65 -16
View File
@@ -1,24 +1,44 @@
[versions]
## Paper
paperweight = "2.0.0-beta.19" # https://github.com/PaperMC/paperweight
paper = "1.21.11-R0.1-SNAPSHOT" # https://github.com/PaperMC/Paper
## Paper API
paperweight = "2.0.0-beta.21" # https://github.com/PaperMC/paperweight
adventure = "5.2.0" # https://github.com/KyoriPowered/adventure
run-paper = "3.0.2" # https://github.com/jpenilla/run-task
## Minecraft
minecraft = "1.21.11" # https://minecraft.net
paper = "26.1.2.build.+" # https://github.com/PaperMC/Paper
# Vital API
vital-common = "0.0.6"
vital-paper = "1.0.6"
## Minecraft API
minecraft = "26.1.2" # https://minecraft.net
## Other API
fusion = "4.50.1" # https://github.com/ryderbelserion/Fusion
## Metrics API
bstats = "3.2.1" # https://bstats.org/docs
## Fabric API
fabric-loader = "0.19.2" # https://fabricmc.net/develop/
fabric-loom = "1.16-SNAPSHOT" # https://fabricmc.net/develop/
fabric-api = "0.150.0+26.1.2" # https://fabricmc.net/develop/
## Gradle Plugins
fix-javadoc = "1.19" # https://github.com/mfnalex/gradle-fix-javadoc-plugin
run-paper = "3.0.2" # https://github.com/jpenilla/run-task
minotaur = "2.8.10" # https://github.com/modrinth/minotaur
feather = "0.4.0" # https://github.com/ryderbelserion/Feather
curseforge = "1.1.26" # https://github.com/Darkhax/CurseForgeGradle
minotaur = "2.9.0" # https://github.com/modrinth/minotaur
feather = "0.6.1" # https://github.com/ryderbelserion/Feather
hangar = "0.1.4" # https://github.com/HangarMC/hangar-publish-plugin
shadow = "9.3.0" # https://github.com/GradleUp/shadow
shadow = "9.6.0" # https://github.com/GradleUp/shadow
[plugins]
# https://github.com/mfnalex/gradle-fix-javadoc-plugin
fix-javadoc = { id = "com.jeff-media.fix-javadoc-plugin", version.ref = "fix-javadoc" }
# https://fabricmc.net/develop/
fabric-loom = { id = "net.fabricmc.fabric-loom", version.ref = "fabric-loom" }
[libraries]
# https://github.com/Darkhax/CurseForgeGradle
curseforge = { group = "net.darkhax.curseforgegradle", name = "net.darkhax.curseforgegradle.gradle.plugin", version.ref = "curseforge" }
# https://github.com/PaperMC/paperweight
paperweight = { module = "io.papermc.paperweight.userdev:io.papermc.paperweight.userdev.gradle.plugin", version.ref = "paperweight" }
@@ -37,14 +57,42 @@ shadow = { module = "com.gradleup.shadow:shadow-gradle-plugin", version.ref = "s
# https://github.com/jpenilla/run-task
run-paper = { module = "xyz.jpenilla:run-task", version.ref = "run-paper" }
# WorldGuard API
worldguard = { group = "com.sk89q.worldguard", name = "worldguard-bukkit", version = "7.0.15" }
# https://github.com/ryderbelserion/Fusion
fusion-velocity = { module = "com.ryderbelserion.fusion:fusion-velocity", version.ref = "fusion" }
fusion-hytale = { module = "com.ryderbelserion.fusion:fusion-hytale", version.ref = "fusion" }
fusion-paper = { module = "com.ryderbelserion.fusion:fusion-paper", version.ref = "fusion" }
fusion-kyori = { module = "com.ryderbelserion.fusion:fusion-kyori", version.ref = "fusion" }
fusion-core = { module = "com.ryderbelserion.fusion:fusion-core", version.ref = "fusion" }
fusion-api = { module = "com.ryderbelserion.fusion:fusion-api", version.ref = "fusion" }
# Vital API
vital-paper = { module = "com.ryderbelserion.vital:paper", version.ref = "vital-paper" }
# https://fabricmc.net/develop/
fabric-api = { group = "net.fabricmc.fabric-api", name = "fabric-api", version.ref = "fabric-api" }
fabric-loader = { group = "net.fabricmc", name = "fabric-loader", version.ref = "fabric-loader" }
# WorldGuard API
worldguard = { group = "com.sk89q.worldguard", name = "worldguard-bukkit", version = "7.0.17" }
# Mojang API
minecraft = { group = "com.mojang", name = "minecraft", version.ref = "minecraft" }
# https://github.com/KyoriPowered/adventure
kyori-logger = { module = "net.kyori:adventure-text-logger-slf4j", version.ref = "adventure" }
kyori-text = { module = "net.kyori:adventure-text-minimessage", version.ref = "adventure" }
kyori-api = { module = "net.kyori:adventure-api", version.ref = "adventure" }
# https://bstats.org
bstats-hytale = { module = "org.bstats:bstats-hytale", version.ref = "bstats" }
bstats-paper = { module = "org.bstats:bstats-bukkit", version.ref = "bstats" }
[bundles]
kyori = [
"kyori-logger",
"kyori-text",
"kyori-api"
]
build = [
"curseforge",
"minotaur",
"feather",
"hangar",
@@ -53,5 +101,6 @@ build = [
paper = [
"paperweight",
"run-paper"
]
+4 -2
View File
@@ -1,7 +1,9 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.2-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
zipStorePath=wrapper/dists
Vendored
+3 -6
View File
@@ -1,7 +1,7 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -57,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/2d6327017519d23b96af35865dc997fcb544fb40/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -114,7 +114,6 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
@@ -172,7 +171,6 @@ fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
@@ -212,8 +210,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
Vendored
+1 -2
View File
@@ -70,11 +70,10 @@ goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
+45
View File
@@ -0,0 +1,45 @@
plugins {
`paper-plugin`
}
project.group = "${rootProject.group}.paper"
repositories {
maven("https://maven.enginehub.org/repo")
}
dependencies {
implementation(libs.fusion.paper)
compileOnly(libs.worldguard)
}
tasks {
build {
dependsOn(shadowJar)
}
shadowJar {
listOf(
"com.ryderbelserion.fusion",
"io.leangen.geantyref",
//"com.zaxxer.hikari",
"org.spongepowered",
"com.google.gson",
"org.jspecify"
).forEach {
relocate(it, "libs.$it")
}
}
runPaper.folia.registerTask()
runServer {
jvmArgs("-Dnet.kyori.ansi.colorLevel=truecolor")
jvmArgs("-Dcom.mojang.eula.agree=true")
defaultCharacterEncoding = Charsets.UTF_8.name()
minecraftVersion(libs.versions.minecraft.get())
}
}
@@ -0,0 +1,152 @@
package com.ryderbelserion.simpleflags.paper;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.ryderbelserion.fusion.core.api.registry.message.MessageRegistry;
import com.ryderbelserion.fusion.core.files.FileManager;
import com.ryderbelserion.fusion.paper.FusionPaper;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.types.other.FlyFlag;
import com.ryderbelserion.simpleflags.paper.commands.BaseCommand;
import com.ryderbelserion.simpleflags.paper.commands.types.ReloadCommand;
import com.ryderbelserion.simpleflags.paper.config.impl.ConfigManager;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.FlagManager;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.types.damage.DrownFlag;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.types.entity.NaturalFlag;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.types.blocks.BlockCrafterFlag;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.types.blocks.InteractionCrafterFlag;
import com.ryderbelserion.simpleflags.paper.listeners.block.CrafterListener;
import com.ryderbelserion.simpleflags.paper.listeners.damage.DrowningListener;
import com.ryderbelserion.simpleflags.paper.listeners.entity.NaturalSpawnListener;
import com.ryderbelserion.simpleflags.paper.api.registry.adapters.PaperSenderAdapter;
import com.ryderbelserion.simpleflags.paper.listeners.other.FlightStatusListener;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager;
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.jspecify.annotations.NonNull;
import java.util.List;
public class SimpleFlags extends JavaPlugin {
public static final String namespace = "simpleflags";
private MessageRegistry messageRegistry;
private ConfigManager configManager;
private FileManager fileManager;
private FusionPaper fusion;
private PaperSenderAdapter adapter;
private FlagManager flagManager;
private WorldGuard worldGuard;
@Override
public void onLoad() {
this.fusion = new FusionPaper(this);
this.fusion.init();
this.messageRegistry = this.fusion.getMessageRegistry();
this.fileManager = this.fusion.getFileManager();
this.configManager = new ConfigManager();
this.configManager.init();
this.adapter = new PaperSenderAdapter();
this.configManager.loadMessages();
this.worldGuard = WorldGuard.getInstance();
this.flagManager = new FlagManager();
List.of(
// damage flags
new DrownFlag(),
// entity flags
new NaturalFlag(),
// status flags
new FlyFlag(),
// block flags
new InteractionCrafterFlag(),
new BlockCrafterFlag()
).forEach(this.flagManager::addFlag);
}
@Override
public void onEnable() {
if (this.fusion != null) {
this.fusion.post();
}
final PluginManager pluginManager = getServer().getPluginManager();
List.of(
// entity listeners
new NaturalSpawnListener(),
// damage listeners
new DrowningListener(),
// status listeners
new FlightStatusListener(),
// crafter listeners
new CrafterListener()
).forEach(event -> pluginManager.registerEvents(event, this));
final LifecycleEventManager<Plugin> eventManager = getLifecycleManager();
// Register commands.
eventManager.registerEventHandler(LifecycleEvents.COMMANDS, event -> {
LiteralArgumentBuilder<CommandSourceStack> root = new BaseCommand().registerPermissions().literal().createBuilder();
List.of(
new ReloadCommand()
).forEach(command -> root.then(command.registerPermissions().literal()));
event.registrar().register(root.build(), "The base command for SimpleFlags!");
});
}
@Override
public void onDisable() {
super.onDisable();
}
public @NonNull PaperSenderAdapter getSenderAdapter() {
return this.adapter;
}
public @NonNull MessageRegistry getMessageRegistry() {
return this.messageRegistry;
}
public @NonNull ConfigManager getConfigManager() {
return this.configManager;
}
public @NonNull RegionContainer getRegions() {
return this.worldGuard.getPlatform().getRegionContainer();
}
public @NonNull FlagManager getFlagManager() {
return this.flagManager;
}
public @NonNull FileManager getFileManager() {
return this.fileManager;
}
public @NonNull WorldGuard getWorldGuard() {
return this.worldGuard;
}
public @NonNull FusionPaper getFusion() {
return this.fusion;
}
}
@@ -0,0 +1,17 @@
package com.ryderbelserion.simpleflags.paper.api;
import com.ryderbelserion.fusion.paper.FusionPaper;
import com.ryderbelserion.fusion.paper.builders.commands.PaperCommand;
import com.ryderbelserion.simpleflags.paper.SimpleFlags;
import com.ryderbelserion.simpleflags.paper.config.impl.ConfigManager;
import org.bukkit.plugin.java.JavaPlugin;
public abstract class SimpleFlagsCommand extends PaperCommand {
protected final SimpleFlags platform = JavaPlugin.getPlugin(SimpleFlags.class);
protected final ConfigManager configManager = this.platform.getConfigManager();
protected final FusionPaper fusion = this.platform.getFusion();
}
@@ -0,0 +1,129 @@
package com.ryderbelserion.simpleflags.paper.api.enums;
import com.ryderbelserion.fusion.api.FusionProvider;
import com.ryderbelserion.fusion.api.enums.Level;
import com.ryderbelserion.fusion.api.enums.files.enums.FileAction;
import com.ryderbelserion.fusion.api.enums.files.enums.FileType;
import com.ryderbelserion.fusion.api.exceptions.FusionException;
import com.ryderbelserion.fusion.core.files.FileManager;
import com.ryderbelserion.fusion.core.files.interfaces.ICustomFile;
import com.ryderbelserion.fusion.core.files.types.configurate.JsonCustomFile;
import com.ryderbelserion.fusion.core.files.types.configurate.YamlCustomFile;
import com.ryderbelserion.fusion.kyori.FusionKyori;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
import org.spongepowered.configurate.BasicConfigurationNode;
import org.spongepowered.configurate.CommentedConfigurationNode;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import java.util.Optional;
@ApiStatus.Internal
@NullMarked
public enum FileKeys {
messages("messages.yml", FileType.YAML, List.of(
FileAction.EXTRACT_FILE
));
private final FusionKyori fusion = (FusionKyori) FusionProvider.api();
private final Path dataPath = this.fusion.getDataPath();
private final FileManager fileManager = this.fusion.getFileManager();
private final List<FileAction> actions;
private final FileType fileType;
private final Path path;
FileKeys(final String fileName, final String folder, final FileType fileType, final List<FileAction> actions) {
this.path = this.dataPath.resolve(folder).resolve(fileName);
this.fileType = fileType;
this.actions = actions;
}
FileKeys(final String fileName, final FileType fileType, final List<FileAction> actions) {
this.path = this.dataPath.resolve(fileName);
this.fileType = fileType;
this.actions = actions;
}
public final CommentedConfigurationNode getConfiguration() {
return getYamlCustomFile().getConfiguration();
}
public final YamlCustomFile getYamlCustomFile() {
final Optional<YamlCustomFile> customFile = this.fileManager.getYamlFile(this.path);
if (customFile.isEmpty()) {
throw new FusionException("Could not find custom file for " + this.path);
}
return customFile.get();
}
public final BasicConfigurationNode getConfigurationNode() {
return getJsonCustomFile().getConfiguration();
}
public final JsonCustomFile getJsonCustomFile() {
final Optional<JsonCustomFile> customFile = this.fileManager.getJsonFile(this.path);
if (customFile.isEmpty()) {
throw new FusionException("Could not find custom file for " + this.path);
}
return customFile.get();
}
public final ICustomFile<?, ?, ?> getCustomFile() {
final Optional<ICustomFile<?, ?, ?>> customFile = this.fileManager.getFile(this.path);
if (customFile.isEmpty()) {
throw new FusionException("Could not find custom file for " + this.path);
}
return customFile.get();
}
public final boolean hasCustomFile() {
return this.fileManager.hasFile(this.path);
}
public final void load() {
if (this.actions.contains(FileAction.DELETE_FILE)) {
try {
java.nio.file.Files.deleteIfExists(this.path);
} catch (final IOException exception) {
this.fusion.log(Level.error, "Failed to delete: %s", exception, this.path);
}
}
this.fileManager.addFile(this.path, this.fileType, action -> action.addActions(this.actions));
}
public final void reload() {
if (this.actions.contains(FileAction.DELETE_FILE)) {
try {
java.nio.file.Files.deleteIfExists(this.path);
} catch (final IOException exception) {
this.fusion.log(Level.error, "Failed to delete: %s", exception, this.path);
}
}
this.fileManager.addFile(this.path, this.fileType, action -> action.addActions(this.actions).addAction(FileAction.RELOAD_FILE));
}
public final void save() {
this.fileManager.saveFile(this.path);
}
public final FileType getFileType() {
return this.fileType;
}
public final Path getPath() {
return this.path;
}
}
@@ -0,0 +1,93 @@
package com.ryderbelserion.simpleflags.paper.api.enums.messages;
import com.ryderbelserion.fusion.api.objects.FusionKey;
import com.ryderbelserion.fusion.core.api.config.properties.PropertyManager;
import com.ryderbelserion.fusion.core.api.config.properties.objects.enums.PropertyType;
import com.ryderbelserion.fusion.core.api.registry.message.MessageRegistry;
import com.ryderbelserion.fusion.core.api.registry.message.adapter.YamlMessageAdapter;
import com.ryderbelserion.fusion.core.utils.StringUtils;
import com.ryderbelserion.simpleflags.paper.SimpleFlags;
import com.ryderbelserion.simpleflags.paper.config.impl.ConfigManager;
import com.ryderbelserion.simpleflags.paper.config.impl.types.RootKeys;
import com.ryderbelserion.simpleflags.paper.api.registry.adapters.PaperSenderAdapter;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
import org.spongepowered.configurate.CommentedConfigurationNode;
import java.util.List;
import java.util.Map;
import static com.ryderbelserion.simpleflags.paper.SimpleFlags.namespace;
@ApiStatus.Internal
@NullMarked
public enum Message {
reload_plugin("root.reload-plugin", "{prefix}<red>You have reloaded the plugin.", "root", "reload-plugin"),
help_menu("root.help-menu", List.of(
"<red>SimpleFlags Help Menu",
"",
"<red>/simpleflags <gray>- <gold>Shows this menu.",
"<red>/simpleflags reload <gray>- <gold>Reloads the plugin."
), "root", "help-menu");
private final SimpleFlags platform = JavaPlugin.getPlugin(SimpleFlags.class);
private final ConfigManager configManager = this.platform.getConfigManager();
private final PropertyManager pluginConfig = this.configManager.getConfig();
private final PaperSenderAdapter senderAdapter = this.platform.getSenderAdapter();
private final String defaultValue;
private final PropertyType type;
private final Object[] path;
private final FusionKey id;
Message(final String id, final String defaultValue, final Object... path) {
this.defaultValue = defaultValue;
this.id = FusionKey.key(namespace, id);
this.type = PropertyType.STRING;
this.path = path;
}
Message(final String id, final List<String> defaultValue, final Object... path) {
this.defaultValue = StringUtils.toString(defaultValue);
this.id = FusionKey.key(namespace, id);
this.type = PropertyType.STRING_LIST;
this.path = path;
}
public void addKey(final MessageRegistry registry, final CommentedConfigurationNode configuration, final FusionKey id) {
final YamlMessageAdapter adapter = new YamlMessageAdapter(configuration, this.defaultValue, this.path);
registry.addKey(
id,
this.id,
adapter
);
}
public final List<String> toList(final String value) {
return value.lines().toList();
}
public void sendMessage(final CommandSender sender, final Map<String, String> placeholders) {
switch (this.pluginConfig.getProperty(RootKeys.message_state)) {
case send_message -> this.senderAdapter.sendMessage(sender, this.id, placeholders);
case send_actionbar -> this.senderAdapter.sendActionBar(sender, this.id, placeholders);
}
}
public void sendMessage(final CommandSender sender, final String placeholder, final String value) {
sendMessage(sender, Map.of(placeholder, value));
}
public void sendMessage(final CommandSender sender) {
sendMessage(sender, Map.of());
}
public final FusionKey getKey() {
return this.id;
}
}
@@ -0,0 +1,22 @@
package com.ryderbelserion.simpleflags.paper.api.enums.messages;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
@ApiStatus.Internal
@NullMarked
public enum State {
send_message("send_message"),
send_actionbar("send_actionbar");
private final String name;
State(final String name) {
this.name = name;
}
public final String getName() {
return this.name;
}
}
@@ -0,0 +1,109 @@
package com.ryderbelserion.simpleflags.paper.api.registry.adapters;
import com.ryderbelserion.fusion.api.objects.FusionKey;
import com.ryderbelserion.fusion.core.api.config.properties.PropertyManager;
import com.ryderbelserion.fusion.core.api.registry.message.MessageRegistry;
import com.ryderbelserion.fusion.paper.FusionPaper;
import com.ryderbelserion.simpleflags.paper.SimpleFlags;
import com.ryderbelserion.simpleflags.paper.config.impl.ConfigManager;
import com.ryderbelserion.simpleflags.paper.config.impl.types.RootKeys;
import net.kyori.adventure.text.Component;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.plugin.java.JavaPlugin;
import org.jspecify.annotations.NonNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class PaperSenderAdapter {
private final SimpleFlags platform = JavaPlugin.getPlugin(SimpleFlags.class);
private final FusionPaper fusion = this.platform.getFusion();
private final ConfigManager configManager = this.platform.getConfigManager();
private final PropertyManager pluginConfig = this.configManager.getConfig();
private final MessageRegistry messageRegistry = this.platform.getMessageRegistry();
public void sendActionBar(@NonNull final CommandSender sender, @NonNull final FusionKey id, @NonNull final Map<String, String> placeholders) {
final Component component = getComponent(sender, id, placeholders);
if (component.equals(Component.empty())) {
return;
}
if (sender instanceof ConsoleCommandSender) {
sender.sendMessage(component);
return;
}
sender.sendActionBar(component);
}
public void sendMessage(@NonNull final CommandSender sender, @NonNull final FusionKey id, @NonNull final Map<String, String> placeholders) {
final Component component = getComponent(sender, id, placeholders);
if (component.equals(Component.empty())) {
return;
}
sender.sendMessage(component);
}
public Component getComponent(@NonNull final CommandSender sender, @NonNull final FusionKey id, @NonNull final Map<String, String> placeholders) {
final List<String> values = new ArrayList<>();
this.messageRegistry.getMessage(id).ifPresent(value -> values.add(value.getValue()));
if (values.isEmpty()) {
return Component.empty();
}
final String value = values.getFirst();
if (value.isEmpty()) {
return Component.empty();
}
final Map<String, String> map = new HashMap<>(placeholders);
final String prefix = this.pluginConfig.getProperty(RootKeys.command_prefix);
if (!prefix.isEmpty()) {
map.putIfAbsent("{prefix}", prefix);
}
return this.fusion.asComponent(sender, values.getFirst(), map, List.of());
}
public String getMessage(@NonNull final CommandSender sender, @NonNull final FusionKey id, @NonNull final Map<String, String> placeholders) {
final List<String> values = new ArrayList<>();
this.messageRegistry.getMessage(id).ifPresent(value -> values.add(value.getValue()));
if (values.isEmpty()) {
return "";
}
final String value = values.getFirst();
if (value.isEmpty()) {
return "";
}
final Map<String, String> map = new HashMap<>(placeholders);
final String prefix = this.pluginConfig.getProperty(RootKeys.command_prefix);
if (!prefix.isEmpty()) {
map.putIfAbsent("{prefix}", prefix);
}
return this.fusion.replacePlaceholders(this.fusion.papi(sender, value), map);
}
}
@@ -1,8 +1,8 @@
package com.ryderbelserion.simpleflags.flags;
package com.ryderbelserion.simpleflags.paper.api.registry.flags;
import ch.jalu.configme.SettingsManager;
import com.ryderbelserion.simpleflags.SimpleFlags;
import com.ryderbelserion.simpleflags.config.ConfigManager;
import com.ryderbelserion.fusion.core.api.config.properties.PropertyManager;
import com.ryderbelserion.simpleflags.paper.SimpleFlags;
import com.ryderbelserion.simpleflags.paper.config.impl.ConfigManager;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
import com.sk89q.worldguard.protection.regions.RegionQuery;
@@ -15,7 +15,9 @@ public abstract class FlagBuilder<T extends Flag> {
protected final ComponentLogger logger = this.plugin.getComponentLogger();
protected final SettingsManager config = ConfigManager.getConfig();
protected final ConfigManager configManager = this.plugin.getConfigManager();
protected final PropertyManager config = this.configManager.getConfig();
public abstract void register();
@@ -1,8 +1,9 @@
package com.ryderbelserion.simpleflags.flags;
package com.ryderbelserion.simpleflags.paper.api.registry.flags;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public class FlagManager {
@@ -21,6 +22,10 @@ public class FlagManager {
return this.flags.containsKey(name);
}
public Optional<FlagBuilder<?>> getByFlag(String name) {
return Optional.ofNullable(this.flags.get(name));
}
public FlagBuilder<?> getFlag(String name) {
return this.flags.get(name);
}
@@ -1,6 +1,6 @@
package com.ryderbelserion.simpleflags.flags.builders;
package com.ryderbelserion.simpleflags.paper.api.registry.flags.builders;
import com.ryderbelserion.simpleflags.flags.FlagBuilder;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.FlagBuilder;
import com.sk89q.worldguard.protection.flags.IntegerFlag;
public abstract class IntegerFlagBuilder extends FlagBuilder<IntegerFlag> {
@@ -1,6 +1,6 @@
package com.ryderbelserion.simpleflags.flags.builders;
package com.ryderbelserion.simpleflags.paper.api.registry.flags.builders;
import com.ryderbelserion.simpleflags.flags.FlagBuilder;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.FlagBuilder;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.flags.StateFlag;
@@ -35,7 +35,7 @@ public abstract class StateFlagBuilder extends FlagBuilder<StateFlag> {
* @return true or false
*/
public boolean preventDamage(Player player, DamageSource source, DamageType type, StateFlag flag) {
return source.getDamageType() == type && testLocation(player, flag);
return source.getDamageType() != type || testLocation(player, flag);
}
/**
@@ -1,8 +1,9 @@
package com.ryderbelserion.simpleflags.flags.enums;
package com.ryderbelserion.simpleflags.paper.api.registry.flags.enums;
public enum CustomFlags {
NATURAL_FLAG("prevent_natural_spawning"),
FLIGHT_FLAG("prevent_flight"),
CRAFTER_INTERACTION_FLAG("prevent_crafter_interaction"),
CRAFTER_BLOCK_FLAG("prevent_crafter_block"),
DROWN_FLAG("prevent_drowning"),
@@ -1,8 +1,8 @@
package com.ryderbelserion.simpleflags.flags.types.temporary;
package com.ryderbelserion.simpleflags.paper.api.registry.flags.types.blocks;
import com.ryderbelserion.simpleflags.config.impl.Config;
import com.ryderbelserion.simpleflags.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.ryderbelserion.simpleflags.paper.config.impl.types.RootKeys;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
@@ -42,6 +42,6 @@ public class BlockCrafterFlag extends StateFlagBuilder {
@Override
public boolean isEnabled() {
return this.config.getProperty(Config.crafter_flag_place);
return this.config.getProperty(RootKeys.is_crafter_place_enabled);
}
}
@@ -1,8 +1,8 @@
package com.ryderbelserion.simpleflags.flags.types.temporary;
package com.ryderbelserion.simpleflags.paper.api.registry.flags.types.blocks;
import com.ryderbelserion.simpleflags.config.impl.Config;
import com.ryderbelserion.simpleflags.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.ryderbelserion.simpleflags.paper.config.impl.types.RootKeys;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
@@ -42,6 +42,6 @@ public class InteractionCrafterFlag extends StateFlagBuilder {
@Override
public boolean isEnabled() {
return this.config.getProperty(Config.crafter_flag_interaction);
return this.config.getProperty(RootKeys.is_crafter_interaction_enabled);
}
}
@@ -1,8 +1,8 @@
package com.ryderbelserion.simpleflags.flags.types;
package com.ryderbelserion.simpleflags.paper.api.registry.flags.types.damage;
import com.ryderbelserion.simpleflags.config.impl.Config;
import com.ryderbelserion.simpleflags.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.ryderbelserion.simpleflags.paper.config.impl.types.RootKeys;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
@@ -42,6 +42,6 @@ public class DrownFlag extends StateFlagBuilder {
@Override
public boolean isEnabled() {
return this.config.getProperty(Config.drowning_flag);
return this.config.getProperty(RootKeys.is_drowning_flag_enabled);
}
}
@@ -1,8 +1,8 @@
package com.ryderbelserion.simpleflags.flags.types;
package com.ryderbelserion.simpleflags.paper.api.registry.flags.types.entity;
import com.ryderbelserion.simpleflags.config.impl.Config;
import com.ryderbelserion.simpleflags.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.ryderbelserion.simpleflags.paper.config.impl.types.RootKeys;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
@@ -42,6 +42,6 @@ public class NaturalFlag extends StateFlagBuilder {
@Override
public boolean isEnabled() {
return this.config.getProperty(Config.natural_spawning_flag);
return this.config.getProperty(RootKeys.is_natural_spawning_flag_enabled);
}
}
@@ -0,0 +1,47 @@
package com.ryderbelserion.simpleflags.paper.api.registry.flags.types.other;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.enums.CustomFlags;
import com.ryderbelserion.simpleflags.paper.config.impl.types.RootKeys;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
public class FlyFlag extends StateFlagBuilder {
private StateFlag flag;
@Override
public void register() {
if (!isEnabled()) return;
try {
getRegistry().register(this.flag = new StateFlag("prevent-flight", true));
} catch (FlagConflictException exception) {
Flag<?> existingFlag = getRegistry().get("prevent-flight");
if (existingFlag instanceof StateFlag stateFlag) {
this.flag = stateFlag;
return;
}
this.logger.warn("An error has occurred registering {} flag. Reason: {}", getName(), exception.getMessage());
}
}
@Override
public String getName() {
return CustomFlags.FLIGHT_FLAG.getName();
}
@Override
public StateFlag getFlag() {
return this.flag;
}
@Override
public boolean isEnabled() {
return this.config.getProperty(RootKeys.is_fly_flag_enabled);
}
}
@@ -0,0 +1,54 @@
package com.ryderbelserion.simpleflags.paper.commands;
import com.mojang.brigadier.tree.LiteralCommandNode;
import com.ryderbelserion.fusion.kyori.permissions.PermissionContext;
import com.ryderbelserion.fusion.paper.builders.commands.context.PaperCommandContext;
import com.ryderbelserion.simpleflags.paper.api.SimpleFlagsCommand;
import com.ryderbelserion.simpleflags.paper.api.enums.messages.Message;
import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.command.brigadier.Commands;
import org.bukkit.command.CommandSender;
import org.jspecify.annotations.NonNull;
import java.util.List;
public class BaseCommand extends SimpleFlagsCommand {
@Override
public void run(@NonNull final PaperCommandContext context) {
Message.help_menu.sendMessage(context.getSender());
}
@Override
public @NonNull final LiteralCommandNode<CommandSourceStack> literal() {
return Commands.literal("simpleflags").requires(this::requirement).build();
}
@Override
public @NonNull final List<PermissionContext> getPermissions() {
return List.of(
new PermissionContext(
"simpleflags.help",
"Gives access to /simpleflags help."
)
);
}
@Override
public final boolean requirement(@NonNull final CommandSourceStack context) {
boolean hasPermission = false;
final CommandSender sender = context.getSender();
for (final PermissionContext permissionContext : getPermissions()) {
final String permission = permissionContext.getPermission();
hasPermission = sender.hasPermission(permission);
if (hasPermission) {
break;
}
}
return hasPermission;
}
}
@@ -0,0 +1,66 @@
package com.ryderbelserion.simpleflags.paper.commands.types;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.tree.LiteralCommandNode;
import com.ryderbelserion.fusion.kyori.permissions.PermissionContext;
import com.ryderbelserion.fusion.kyori.permissions.enums.PermissionType;
import com.ryderbelserion.fusion.paper.builders.commands.context.PaperCommandContext;
import com.ryderbelserion.simpleflags.paper.api.SimpleFlagsCommand;
import com.ryderbelserion.simpleflags.paper.api.enums.messages.Message;
import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.command.brigadier.Commands;
import org.bukkit.command.CommandSender;
import org.jspecify.annotations.NonNull;
import java.util.List;
public class ReloadCommand extends SimpleFlagsCommand {
@Override
public void run(@NonNull final PaperCommandContext context) {
this.fusion.reload();
this.configManager.reload();
Message.reload_plugin.sendMessage(context.getSender());
}
@Override
public @NonNull final LiteralCommandNode<CommandSourceStack> literal() {
return Commands.literal("reload").requires(this::requirement)
.executes(context -> {
run(new PaperCommandContext(context));
return Command.SINGLE_SUCCESS;
}).build();
}
@Override
public @NonNull final List<PermissionContext> getPermissions() {
return List.of(
new PermissionContext(
"simpleflags.reload",
"Reloads the plugin!",
PermissionType.OP
)
);
}
@Override
public final boolean requirement(@NonNull final CommandSourceStack context) {
boolean hasPermission = false;
final CommandSender sender = context.getSender();
for (final PermissionContext permissionContext : getPermissions()) {
final String permission = permissionContext.getPermission();
hasPermission = sender.hasPermission(permission);
if (hasPermission) {
break;
}
}
return hasPermission;
}
}
@@ -0,0 +1,85 @@
package com.ryderbelserion.simpleflags.paper.config.impl;
import com.ryderbelserion.fusion.api.enums.Level;
import com.ryderbelserion.fusion.api.objects.FusionKey;
import com.ryderbelserion.fusion.core.api.config.ConfigBuilder;
import com.ryderbelserion.fusion.core.api.config.properties.PropertyManager;
import com.ryderbelserion.fusion.core.api.registry.message.MessageRegistry;
import com.ryderbelserion.fusion.core.files.FileManager;
import com.ryderbelserion.fusion.paper.FusionPaper;
import com.ryderbelserion.simpleflags.paper.SimpleFlags;
import com.ryderbelserion.simpleflags.paper.api.enums.messages.Message;
import com.ryderbelserion.simpleflags.paper.config.impl.types.RootKeys;
import com.ryderbelserion.simpleflags.paper.api.enums.FileKeys;
import org.bukkit.plugin.java.JavaPlugin;
import org.jspecify.annotations.NonNull;
import org.spongepowered.configurate.CommentedConfigurationNode;
import org.spongepowered.configurate.loader.HeaderMode;
import org.spongepowered.configurate.yaml.NodeStyle;
import java.nio.file.Path;
import java.util.List;
import static com.ryderbelserion.simpleflags.paper.SimpleFlags.namespace;
public final class ConfigManager {
private final SimpleFlags platform = JavaPlugin.getPlugin(SimpleFlags.class);
private final MessageRegistry registry = this.platform.getMessageRegistry();
private final FileManager fileManager = this.platform.getFileManager();
private final FusionPaper fusion = this.platform.getFusion();
private final Path path = this.platform.getDataPath();
private PropertyManager config;
public void init() {
this.config = ConfigBuilder.withYamlPath(this.path.resolve("config.yml"))
.configuration(RootKeys.class)
.withNodeStyle(NodeStyle.BLOCK)
.withHeaderMode(HeaderMode.PRESERVE)
.withIndent(1)
.create();
for (final FileKeys key : FileKeys.values()) {
key.load();
}
}
public void loadMessages() {
final List<Path> paths = this.fileManager.getFilesByPath(this.path.resolve("locale"), ".yml");
paths.add(this.path.resolve("messages.yml")); // add to list
this.registry.init(action -> {
for (final Path path : paths) {
this.fileManager.getYamlFile(path).ifPresentOrElse(customFile -> {
final String fileName = customFile.getFileName();
final FusionKey key = FusionKey.key(namespace, fileName.equalsIgnoreCase("messages.yml") ? "default" : fileName.toLowerCase());
final CommentedConfigurationNode configuration = customFile.getConfiguration();
for (final Message message : Message.values()) {
message.addKey(action, configuration, key);
}
}, () -> this.fusion.log(Level.info, "Path %s not found in cache.".formatted(path)));
}
});
}
public void reload() {
this.config.reload();
for (final FileKeys key : FileKeys.values()) {
key.reload();
}
loadMessages();
}
public @NonNull PropertyManager getConfig() {
return this.config;
}
}
@@ -0,0 +1,71 @@
package com.ryderbelserion.simpleflags.paper.config.impl.types;
import com.ryderbelserion.fusion.core.api.config.annotations.Comment;
import com.ryderbelserion.fusion.core.api.config.properties.builders.CommentsBuilder;
import com.ryderbelserion.fusion.core.api.config.properties.interfaces.IPropertyHolder;
import com.ryderbelserion.fusion.core.api.config.properties.objects.interfaces.Property;
import com.ryderbelserion.fusion.core.api.config.properties.objects.primitives.BooleanProperty;
import com.ryderbelserion.fusion.core.api.config.properties.objects.primitives.string.StringProperty;
import com.ryderbelserion.simpleflags.paper.api.enums.messages.State;
import org.jspecify.annotations.NonNull;
import java.util.List;
import static com.ryderbelserion.fusion.core.api.config.properties.PropertyBuilder.newBeanProperty;
import static com.ryderbelserion.fusion.core.api.config.properties.PropertyBuilder.newProperty;
public class RootKeys implements IPropertyHolder {
@Override
public void registerComments(@NonNull final CommentsBuilder configuration) {
final List<String> deprecation = List.of(
" ",
"Warning: This section is subject to change so it is considered deprecated.",
"This is your warning before the change happens. Please read the latest changelogs",
" "
);
configuration.setComment(List.of(
"Support: https://discord.gg/ktxCyUd7Ny",
"Github: https://github.com/ryderbelserion",
" ",
"Issues: https://github.com/ryderbelserion/SimpleFlags/issues",
"Features: https://github.com/ryderbelserion/SimpleFlags/issues",
" ",
"Sounds: https://mudkipdev.github.io/minecraft-sound-explorer/"
), "root");
configuration.setComment(List.of(
"Flags related to the Crafter block."
), "flags", "crafter-flag");
configuration.setComment(List.of(
"Configure the flags of the plugin."
), "flags");
}
@Comment("The prefix used in commands")
public static final StringProperty command_prefix = newProperty(" <gradient:#e91e63:gold>SimpleFlags</gradient> | ", "root", "prefix");
@Comment({
"This option will tell the plugin to send all messages as action bars or messages in chat.",
" ",
"send_message -> sends messages in chat.",
"send_actionbar -> sends messages in actionbar.",
" "
})
public static final Property<State> message_state = newBeanProperty(State.class, State.send_message, "root", "message-state");
@Comment("This flag prevent-drowning as you guessed it, it prevents drowning if enabled.")
public static final BooleanProperty is_drowning_flag_enabled = newProperty(false, "flags", "drowning-flag");
@Comment("This flag prevent-flight Mr Holmes denies flight in a region if enabled.")
public static final BooleanProperty is_fly_flag_enabled = newProperty(false, "flags", "flight-flag");
@Comment("This flag prevent-crafter-interaction prevents interacting with Crafters.")
public static final BooleanProperty is_crafter_interaction_enabled = newProperty(false, "flags", "crafter-flag", "interaction");
@Comment("This flag prevent-crafter-block prevents placing Crafters.")
public static final BooleanProperty is_crafter_place_enabled = newProperty(false, "flags", "crafter-flag", "place");
@Comment("This flag prevent-natural-spawning prevents natural mob spawns in regions.")
public static final BooleanProperty is_natural_spawning_flag_enabled = newProperty(false, "flags", "natural-spawning-flag");
}
@@ -1,9 +1,9 @@
package com.ryderbelserion.simpleflags.listeners;
package com.ryderbelserion.simpleflags.paper.listeners.block;
import com.ryderbelserion.simpleflags.SimpleFlags;
import com.ryderbelserion.simpleflags.flags.FlagManager;
import com.ryderbelserion.simpleflags.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.ryderbelserion.simpleflags.paper.SimpleFlags;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.FlagManager;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.StateFlag;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -13,7 +13,7 @@ import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.plugin.java.JavaPlugin;
public class BlockListener implements Listener {
public class CrafterListener implements Listener {
private final SimpleFlags plugin = JavaPlugin.getPlugin(SimpleFlags.class);
@@ -70,4 +70,4 @@ public class BlockListener implements Listener {
event.setCancelled(true);
}
}
}
}
@@ -1,10 +1,11 @@
package com.ryderbelserion.simpleflags.listeners;
package com.ryderbelserion.simpleflags.paper.listeners.damage;
import com.ryderbelserion.simpleflags.SimpleFlags;
import com.ryderbelserion.simpleflags.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.flags.FlagManager;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.ryderbelserion.simpleflags.paper.SimpleFlags;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.FlagManager;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.StateFlag;
import org.bukkit.damage.DamageSource;
import org.bukkit.damage.DamageType;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
@@ -37,7 +38,9 @@ public class DrowningListener implements Listener {
if (stateFlag == null) return;
if (!flag.preventDamage(player, event.getDamageSource(), DamageType.DROWN, stateFlag)) {
final DamageSource source = event.getDamageSource();
if (!flag.preventDamage(player, source, DamageType.DROWN, stateFlag)) {
event.setCancelled(true);
}
}
@@ -1,17 +1,17 @@
package com.ryderbelserion.simpleflags.listeners;
package com.ryderbelserion.simpleflags.paper.listeners.entity;
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
import com.ryderbelserion.simpleflags.SimpleFlags;
import com.ryderbelserion.simpleflags.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.flags.FlagManager;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.ryderbelserion.simpleflags.paper.SimpleFlags;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.FlagManager;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.StateFlag;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.plugin.java.JavaPlugin;
public class NaturalListener implements Listener {
public class NaturalSpawnListener implements Listener {
private final SimpleFlags plugin = JavaPlugin.getPlugin(SimpleFlags.class);
@@ -0,0 +1,41 @@
package com.ryderbelserion.simpleflags.paper.listeners.other;
import com.ryderbelserion.fusion.paper.FusionPaper;
import com.ryderbelserion.simpleflags.paper.SimpleFlags;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.FlagManager;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.paper.api.registry.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.StateFlag;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerToggleFlightEvent;
import org.bukkit.plugin.java.JavaPlugin;
public class FlightStatusListener implements Listener {
private final SimpleFlags plugin = JavaPlugin.getPlugin(SimpleFlags.class);
private final FlagManager flagManager = this.plugin.getFlagManager();
private final FusionPaper fusion = this.plugin.getFusion();
@EventHandler
public void onPlayerToggleFlight(final PlayerToggleFlightEvent event) {
this.flagManager.getByFlag(CustomFlags.FLIGHT_FLAG.getName()).ifPresent(index -> {
final StateFlagBuilder builder = (StateFlagBuilder) index;
if (!builder.isEnabled()) return;
final StateFlag flag = builder.getFlag();
if (flag == null) return;
final Player player = event.getPlayer();
if (!builder.testLocation(player, flag)) {
event.setCancelled(true);
}
});
}
}
+29
View File
@@ -0,0 +1,29 @@
# Support: https://discord.gg/ktxCyUd7Ny
# Github: https://github.com/ryderbelserion
# Issues: https://github.com/ryderbelserion/SimpleFlags/issues
# Features: https://github.com/ryderbelserion/SimpleFlags/issues
# Sounds: https://mudkipdev.github.io/minecraft-sound-explorer/
root:
# The prefix that appears in front of messages.
prefix: " <gradient:#e91e63:gold>SimpleFlags</gradient> | "
# This option will tell the plugin to send all messages as action bars or messages in chat.
# send_message -> sends messages in chat.
# send_actionbar -> sends messages in actionbar.
message-state: "send_message"
# Configure the flags of the plugin.
flags:
# This flag prevent-drowning as you guessed it, it prevents drowning if enabled.
drowning-flag: false
# Flags related to the Crafter block.
crafter-flag:
# This flag prevent-crafter-interaction prevents interacting with Crafters.
interaction: false
# This flag prevent-crafter-block prevents placing Crafters.
place: false
# This flag prevent-natural-spawning prevents natural mob spawns in regions.
natural-spawning-flag: false
# This flag prevent-flight Mr Holmes denies flight in a region if enabled.
flight-flag: false
+10
View File
@@ -0,0 +1,10 @@
# The start of the messages file!
root:
# Sent when doing /simpleflags reload
reload-plugin: "{prefix}<red>You have reloaded the plugin."
# Sent when doing /simpleflags
help-menu:
- "<red>SimpleFlags Help Menu"
- ""
- "<red>/simpleflags <gray>- <gold>Shows this menu."
- "<red>/simpleflags reload <gray>- <gold>Reloads the plugin."
+25
View File
@@ -0,0 +1,25 @@
name: '${artifact}'
main: '${group}.${artifact}'
version: '${version}'
api-version: '${minecraft}'
description: '${description}'
dependencies:
server:
# Placeholder plugins
PlaceholderAPI:
load: BEFORE
required: false
join-classpath: true
# Skull plugins
HeadDatabase:
load: BEFORE
required: false
join-classpath: true
WorldGuard:
load: AFTER
required: true
join-classpath: true
+9 -1
View File
@@ -1 +1,9 @@
rootProject.name = "SimpleFlags"
pluginManagement {
repositories {
gradlePluginPortal()
}
}
rootProject.name = "SimpleFlags"
include("paper")
@@ -1,86 +0,0 @@
package com.ryderbelserion.simpleflags;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.ryderbelserion.simpleflags.commands.BaseCommand;
import com.ryderbelserion.simpleflags.commands.types.CommandHelp;
import com.ryderbelserion.simpleflags.commands.types.CommandReload;
import com.ryderbelserion.simpleflags.config.ConfigManager;
import com.ryderbelserion.simpleflags.flags.FlagManager;
import com.ryderbelserion.simpleflags.flags.types.DrownFlag;
import com.ryderbelserion.simpleflags.flags.types.NaturalFlag;
import com.ryderbelserion.simpleflags.flags.types.temporary.BlockCrafterFlag;
import com.ryderbelserion.simpleflags.flags.types.temporary.InteractionCrafterFlag;
import com.ryderbelserion.simpleflags.listeners.BlockListener;
import com.ryderbelserion.simpleflags.listeners.DrowningListener;
import com.ryderbelserion.simpleflags.listeners.NaturalListener;
import com.ryderbelserion.vital.paper.Vital;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
import org.bukkit.plugin.PluginManager;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public class SimpleFlags extends Vital {
private WorldGuard worldGuard;
private FlagManager flagManager;
@Override
public void onLoad() {
ConfigManager.load(getDataFolder());
this.worldGuard = WorldGuard.getInstance();
this.flagManager = new FlagManager();
List.of(
new DrownFlag(),
new NaturalFlag(),
// temporary
new BlockCrafterFlag(),
new InteractionCrafterFlag()
).forEach(this.flagManager::addFlag);
}
@Override
public void onEnable() {
final PluginManager pluginManager = getServer().getPluginManager();
pluginManager.registerEvents(new NaturalListener(), this);
pluginManager.registerEvents(new DrowningListener(), this);
pluginManager.registerEvents(new BlockListener(), this);
// Register commands.
getLifecycleManager().registerEventHandler(LifecycleEvents.COMMANDS, event -> {
LiteralArgumentBuilder<CommandSourceStack> root = new BaseCommand().registerPermission().literal().createBuilder();
List.of(
new CommandReload(),
new CommandHelp()
).forEach(command -> root.then(command.registerPermission().literal()));
event.registrar().register(root.build(), "the base command for SimpleFlags");
});
}
@Override
public void onDisable() {
super.onDisable();
}
public @NotNull WorldGuard getWorldGuard() {
return this.worldGuard;
}
public @NotNull RegionContainer getRegions() {
return this.worldGuard.getPlatform().getRegionContainer();
}
public @NotNull FlagManager getFlagManager() {
return this.flagManager;
}
}
@@ -1,61 +0,0 @@
package com.ryderbelserion.simpleflags.commands;
import ch.jalu.configme.SettingsManager;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.tree.LiteralCommandNode;
import com.ryderbelserion.simpleflags.SimpleFlags;
import com.ryderbelserion.simpleflags.config.ConfigManager;
import com.ryderbelserion.simpleflags.config.impl.Locale;
import com.ryderbelserion.vital.paper.commands.PaperCommand;
import com.ryderbelserion.vital.paper.commands.context.PaperCommandInfo;
import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.command.brigadier.Commands;
import org.bukkit.command.CommandSender;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
public class BaseCommand extends PaperCommand {
private final SimpleFlags plugin = JavaPlugin.getPlugin(SimpleFlags.class);
private final SettingsManager locale = ConfigManager.getLocale();
@Override
public void execute(final PaperCommandInfo info) {
final CommandSender sender = info.getCommandSender();
this.locale.getProperty(Locale.help).forEach(sender::sendRichMessage);
}
@Override
public @NotNull final String getPermission() {
return "simpleflags.help";
}
@Override
public @NotNull final LiteralCommandNode<CommandSourceStack> literal() {
final LiteralArgumentBuilder<CommandSourceStack> root = Commands.literal("simpleflags").requires(source -> source.getSender().hasPermission(getPermission()));
return root.executes(context -> {
execute(new PaperCommandInfo(context));
return com.mojang.brigadier.Command.SINGLE_SUCCESS;
}).build();
}
@Override
public @NotNull final PaperCommand registerPermission() {
final PluginManager pluginManager = this.plugin.getServer().getPluginManager();
final Permission permission = pluginManager.getPermission(getPermission());
if (permission == null) {
pluginManager.addPermission(new Permission(getPermission(), PermissionDefault.OP));
}
return this;
}
}
@@ -1,61 +0,0 @@
package com.ryderbelserion.simpleflags.commands.types;
import ch.jalu.configme.SettingsManager;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.tree.LiteralCommandNode;
import com.ryderbelserion.simpleflags.SimpleFlags;
import com.ryderbelserion.simpleflags.config.ConfigManager;
import com.ryderbelserion.simpleflags.config.impl.Locale;
import com.ryderbelserion.vital.paper.commands.PaperCommand;
import com.ryderbelserion.vital.paper.commands.context.PaperCommandInfo;
import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.command.brigadier.Commands;
import org.bukkit.command.CommandSender;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
public class CommandHelp extends PaperCommand {
private final SimpleFlags plugin = JavaPlugin.getPlugin(SimpleFlags.class);
private final SettingsManager locale = ConfigManager.getLocale();
@Override
public void execute(final PaperCommandInfo info) {
final CommandSender sender = info.getCommandSender();
this.locale.getProperty(Locale.help).forEach(sender::sendRichMessage);
}
@Override
public @NotNull final String getPermission() {
return "simpleflags.help";
}
@Override
public @NotNull final LiteralCommandNode<CommandSourceStack> literal() {
final LiteralArgumentBuilder<CommandSourceStack> root = Commands.literal("help").requires(source -> source.getSender().hasPermission(getPermission()));
return root.executes(context -> {
execute(new PaperCommandInfo(context));
return com.mojang.brigadier.Command.SINGLE_SUCCESS;
}).build();
}
@Override
public @NotNull final PaperCommand registerPermission() {
final PluginManager pluginManager = this.plugin.getServer().getPluginManager();
final Permission permission = pluginManager.getPermission(getPermission());
if (permission == null) {
pluginManager.addPermission(new Permission(getPermission(), PermissionDefault.OP));
}
return this;
}
}
@@ -1,68 +0,0 @@
package com.ryderbelserion.simpleflags.commands.types;
import ch.jalu.configme.SettingsManager;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.tree.LiteralCommandNode;
import com.ryderbelserion.simpleflags.SimpleFlags;
import com.ryderbelserion.simpleflags.config.ConfigManager;
import com.ryderbelserion.simpleflags.config.impl.Config;
import com.ryderbelserion.simpleflags.config.impl.Locale;
import com.ryderbelserion.vital.paper.commands.PaperCommand;
import com.ryderbelserion.vital.paper.commands.context.PaperCommandInfo;
import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.command.brigadier.Commands;
import org.bukkit.command.CommandSender;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
public class CommandReload extends PaperCommand {
private final SimpleFlags plugin = JavaPlugin.getPlugin(SimpleFlags.class);
private final SettingsManager config = ConfigManager.getConfig();
private final SettingsManager locale = ConfigManager.getLocale();
@Override
public void execute(final PaperCommandInfo info) {
final CommandSender sender = info.getCommandSender();
this.config.reload();
this.locale.reload();
sender.sendRichMessage(this.locale.getProperty(Locale.reload_plugin).replaceAll("\\{prefix}", this.config.getProperty(Config.command_prefix)));
}
@Override
public @NotNull final String getPermission() {
return "simpleflags.reload";
}
@Override
public @NotNull final LiteralCommandNode<CommandSourceStack> literal() {
final LiteralArgumentBuilder<CommandSourceStack> root = Commands.literal("reload").requires(source -> source.getSender().hasPermission(getPermission()));
return root.executes(context -> {
execute(new PaperCommandInfo(context));
return com.mojang.brigadier.Command.SINGLE_SUCCESS;
}).build();
}
@Override
public @NotNull final PaperCommand registerPermission() {
final PluginManager pluginManager = this.plugin.getServer().getPluginManager();
final Permission permission = pluginManager.getPermission(getPermission());
if (permission == null) {
pluginManager.addPermission(new Permission(getPermission(), PermissionDefault.OP));
}
return this;
}
}
@@ -1,39 +0,0 @@
package com.ryderbelserion.simpleflags.config;
import ch.jalu.configme.SettingsManager;
import ch.jalu.configme.SettingsManagerBuilder;
import ch.jalu.configme.resource.YamlFileResourceOptions;
import com.ryderbelserion.simpleflags.config.impl.Config;
import com.ryderbelserion.simpleflags.config.impl.Locale;
import java.io.File;
public class ConfigManager {
private static SettingsManager config;
private static SettingsManager locale;
public static void load(final File dataFolder) {
// Create config files
YamlFileResourceOptions builder = YamlFileResourceOptions.builder().indentationSize(2).build();
config = SettingsManagerBuilder
.withYamlFile(new File(dataFolder, "config.yml"), builder)
.useDefaultMigrationService()
.configurationData(Config.class)
.create();
locale = SettingsManagerBuilder
.withYamlFile(new File(dataFolder, "messages.yml"), builder)
.useDefaultMigrationService()
.configurationData(Locale.class)
.create();
}
public static SettingsManager getConfig() {
return config;
}
public static SettingsManager getLocale() {
return locale;
}
}
@@ -1,35 +0,0 @@
package com.ryderbelserion.simpleflags.config.impl;
import ch.jalu.configme.Comment;
import ch.jalu.configme.SettingsHolder;
import ch.jalu.configme.configurationdata.CommentsConfiguration;
import ch.jalu.configme.properties.Property;
import org.jetbrains.annotations.NotNull;
import static ch.jalu.configme.properties.PropertyInitializer.newProperty;
public class Config implements SettingsHolder {
@Override
public void registerComments(@NotNull CommentsConfiguration conf) {
conf.setComment("flags.crafter-flag", """
Flags related to the crafter block
""");
}
@Comment("The prefix that appears in front of messages.")
public static final Property<String> command_prefix = newProperty("root.prefix", "<gold>[<red>SimpleFlags<gold>]: ");
@Comment("The flag prevent_drowning as you guessed it, it prevents drowning if enabled.")
public static final Property<Boolean> drowning_flag = newProperty("flags.drowning-flag", false);
@Comment("The flag prevent_crafter_interaction prevents interacting with crafters.")
public static final Property<Boolean> crafter_flag_interaction = newProperty("flags.crafter-flag.interaction", false);
@Comment("The flag prevent_crafter_block prevents placing crafters.")
public static final Property<Boolean> crafter_flag_place = newProperty("flags.crafter-flag.place", false);
@Comment("The flag prevent_natural_spawning prevents natural mob spawns in regions.")
public static final Property<Boolean> natural_spawning_flag = newProperty("flags.natural-spawning-flag", false);
}
@@ -1,21 +0,0 @@
package com.ryderbelserion.simpleflags.config.impl;
import ch.jalu.configme.SettingsHolder;
import ch.jalu.configme.properties.Property;
import java.util.List;
import static ch.jalu.configme.properties.PropertyInitializer.newListProperty;
import static ch.jalu.configme.properties.PropertyInitializer.newProperty;
public class Locale implements SettingsHolder {
public static final Property<String> reload_plugin = newProperty("root.reload-plugin", "{prefix}<red>You have reloaded the plugin.");
public static final Property<List<String>> help = newListProperty("root.help-menu", List.of(
"<red>SimpleFlags Help Menu",
"",
" <red>/simpleflags <gray>- <gold>Shows this menu.",
" <red>/simpleflags reload <gray>- <gold>Reloads the plugin."
));
}
-13
View File
@@ -1,13 +0,0 @@
name: '${name}'
main: '${group}.${name}'
version: '${version}'
api-version: '${minecraft}'
description: '${description}'
dependencies:
server:
WorldGuard:
load: AFTER
required: true
join-classpath: true