Author SHA1 Message Date
Ryder Belserion dea24dd805 Add initial work on new flag 2025-02-17 10:41:25 -05:00
46 changed files with 1061 additions and 832 deletions

No files matched your search

+4 -1
View File
@@ -30,11 +30,14 @@ body:
description: Type /version plugin-name in-game
validations:
required: true
- type: input
- type: dropdown
id: version
attributes:
label: Server Version
description: What server version are you on?
options:
- "1.21.1"
- "1.21.2"
validations:
required: true
- type: dropdown
-53
View File
@@ -1,53 +0,0 @@
name: Release Build
on:
workflow_dispatch:
release:
types: [ published ]
jobs:
build:
runs-on: ubuntu-latest
if: "!contains(github.event.commits[0].message, '[ci-skip]') || !contains(github.event.commits[0].message, 'chore:')"
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 }}
-54
View File
@@ -1,54 +0,0 @@
name: Snapshot Build
on:
workflow_dispatch:
push:
branches:
- dev
jobs:
build:
runs-on: ubuntu-latest
if: "!contains(github.event.commits[0].message, '[ci-skip]') || !contains(github.event.commits[0].message, 'chore:')"
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 }}
+11 -11
View File
@@ -1,14 +1,14 @@
### Intellij
.kotlin/
.idea/
!.idea/icon.png
### Gradle
.gradle
build/
.idea
jars
build
### Servers
run/
run
### Output
jars/
!run/config
!run/spigot.yml
!run/bukkit.yml
!run/eula.txt
!run/server.properties
!run/plugins
!run/ops.json
+8
View File
@@ -0,0 +1,8 @@
## Changes:
- Updated how flags are handled internally to easily add newer flags.
- Currently working on another flag I am interested in.
## Fixed:
- Added a null check if the flag is not in the registry.
- This only happens if you enable a config option, and do `/simpleflags reload`
- WorldGuard flags can only be added on startup, as any time after that... the registry is frozen.
+76 -117
View File
@@ -1,150 +1,109 @@
import utils.convertList
import utils.updateMarkdown
plugins {
id("modrinth-plugin")
id("hangar-plugin")
alias(libs.plugins.runPaper)
alias(libs.plugins.minotaur)
alias(libs.plugins.shadow)
`paper-plugin`
`java-library`
}
val git = feather.getGit()
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)
rootProject.group = "com.ryderbelserion.simpleflags"
rootProject.version = "1.0.1"
rootProject.description = "A plugin that adds simple worldguard flags."
repositories {
maven("https://repo.papermc.io/repository/maven-public")
maven("https://repo.crazycrew.us/libraries")
maven("https://repo.crazycrew.us/releases")
maven("https://maven.enginehub.org/repo")
}
dependencies {
implementation(libs.vital.paper)
compileOnly(libs.fusion.paper)
compileOnly(libs.worldguard)
compileOnly(libs.paper)
compileOnly(libs.jalu)
}
feather {
rootDirectory = rootProject.rootDir.toPath()
val data = git.getGithubCommit("ryderbelserion/${rootProject.name}")
val user = data.user
discord {
webhook {
group(rootProject.name.lowercase())
task("release-build")
if (System.getenv("BUILD_WEBHOOK") != null) {
post(System.getenv("BUILD_WEBHOOK"))
}
if (isRelease) {
username(user.getName())
avatar(user.avatar)
} else {
username(rootProject.property("author_name").toString())
avatar(rootProject.property("author_avatar").toString())
}
embeds {
embed {
color(color)
title("A new $releaseType version of ${rootProject.name} is ready!")
//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})"
).convertList()
)
field(
":bug: Report Bugs",
"https://github.com/${rootProject.property("repository_owner")}/${rootProject.name}/issues"
)
field(
":hammer: Changelog",
rootProject.ext.get("mc_changelog").toString().updateMarkdown()
)
}
}
}
webhook {
group(rootProject.name.lowercase())
task("failed-build")
if (System.getenv("BUILD_WEBHOOK") != null) {
post(System.getenv("BUILD_WEBHOOK"))
}
username(rootProject.property("mascot_name").toString())
avatar(rootProject.property("mascot_avatar").toString())
embeds {
embed {
color(rootProject.property("failed_color").toString())
title("Oh no! It failed!")
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
)
}
}
}
}
}
}
java {
toolchain.languageVersion.set(JavaLanguageVersion.of("21"))
}
tasks {
compileJava {
options.encoding = Charsets.UTF_8.name()
options.release.set(21)
}
javadoc {
options.encoding = Charsets.UTF_8.name()
}
processResources {
filteringCharset = Charsets.UTF_8.name()
}
assemble {
dependsOn(shadowJar)
doLast {
copy {
from(shadowJar.get())
into(rootProject.projectDir.resolve("jars"))
}
}
}
shadowJar {
archiveClassifier.set("")
}
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")
}
modrinth {
token.set(System.getenv("MODRINTH_TOKEN"))
projectId.set(rootProject.name)
versionType.set("release")
versionName.set("${rootProject.name} ${rootProject.version}")
versionNumber.set(rootProject.version as String)
changelog.set(rootProject.file("CHANGELOG.md").readText(Charsets.UTF_8))
uploadFile.set(shadowJar.get())
gameVersions.set(listOf(libs.versions.minecraft.get()))
loaders.addAll(listOf("purpur", "paper", "folia"))
syncBodyFrom.set(rootProject.file("README.md").readText(Charsets.UTF_8))
autoAddDependsOn.set(false)
detectLoaders.set(false)
}
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")
processResources {
val props = mapOf(
"name" to rootProject.name,
"version" to rootProject.version,
"group" to rootProject.group,
"description" to rootProject.description,
"apiVersion" to libs.versions.minecraft.get()
)
filesMatching("paper-plugin.yml") {
expand(props)
}
}
}
-16
View File
@@ -1,16 +0,0 @@
plugins {
`kotlin-dsl`
}
repositories {
gradlePluginPortal()
mavenCentral()
}
dependencies {
// Bundled plugins
implementation(libs.bundles.build)
// Paper plugins
implementation(libs.bundles.paper)
}
-9
View File
@@ -1,9 +0,0 @@
rootProject.name = "buildSrc"
dependencyResolutionManagement {
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
@@ -1,55 +0,0 @@
plugins {
id("com.ryderbelserion.feather.core")
`java-library`
}
val libs = extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
repositories {
maven("https://repo.codemc.io/repository/maven-public/")
maven("https://repo.triumphteam.dev/snapshots/")
maven("https://repo.crazycrew.us/libraries/")
maven("https://repo.crazycrew.us/releases/")
maven("https://jitpack.io/")
mavenCentral()
mavenLocal()
}
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
}
tasks {
compileJava {
options.encoding = Charsets.UTF_8.name()
options.release.set(21)
}
processResources {
filteringCharset = Charsets.UTF_8.name()
duplicatesStrategy = DuplicatesStrategy.INCLUDE
inputs.properties(
"name" to rootProject.name,
"version" to rootProject.version,
"description" to rootProject.description.toString(),
"minecraft" to libs.findVersion("minecraft").get(),
"website" to "https://github.com/${rootProject.property("repository_owner")}/${rootProject.name}",
"group" to project.group
)
with(copySpec {
include("*paper-plugin.yml", "*plugin.yml")
from("src/main/resources") {
expand(inputs.properties)
}
})
}
}
@@ -1,18 +0,0 @@
plugins {
id("io.papermc.paperweight.userdev")
id("xyz.jpenilla.run-paper")
id("shadow-plugin")
}
val libs = extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
repositories {
maven("https://repo.papermc.io/repository/maven-public/")
maven("https://repo.extendedclip.com/releases/")
}
dependencies {
paperweight.paperDevBundle(libs.findVersion("paper").get().toString())
}
@@ -1,61 +0,0 @@
import gradle.kotlin.dsl.accessors._bc702d41505d332776c95ae061891e6e.ext
import io.papermc.hangarpublishplugin.model.Platforms
import org.gradle.kotlin.dsl.support.uppercaseFirstChar
plugins {
id("io.papermc.hangar-publish-plugin")
id("shared-plugin")
}
hangarPublish {
publications.register("plugin") {
apiKey.set(System.getenv("HANGAR_KEY"))
id.set("${rootProject.property("project_id")}")
version.set("${rootProject.version}")
changelog.set(rootProject.ext.get("mc_changelog").toString())
channel.set(rootProject.ext.get("release_type").toString().uppercaseFirstChar())
platforms {
register(Platforms.PAPER) {
jar.set(tasks.named<Jar>("jar").flatMap { it.archiveFile })
platformVersions.set(rootProject.property("project_versions").toString().split(",").map { it.trim() })
dependencies {
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,34 +0,0 @@
plugins {
id("com.modrinth.minotaur")
id("shared-plugin")
}
modrinth {
token = System.getenv("MODRINTH_TOKEN")
projectId = "${rootProject.property("project_id")}"
versionName = rootProject.ext.get("version_name").toString()
versionNumber = "${rootProject.version}"
versionType = rootProject.ext.get("release_type").toString()
changelog = rootProject.ext.get("mc_changelog").toString()
gameVersions.addAll(rootProject.property("project_versions").toString().split(",").map { it.trim() })
uploadFile.set(tasks.named<Jar>("jar"))
loaders.addAll(rootProject.property("project_platforms").toString().split(",").map { it.trim() })
syncBodyFrom = rootProject.file("README.md").readText(Charsets.UTF_8)
autoAddDependsOn = false
detectLoaders = false
dependencies {
optional.project("DecentHolograms")
optional.project("FancyHolograms")
optional.project("PlaceholderAPI")
}
}
@@ -1,12 +0,0 @@
plugins {
id("com.gradleup.shadow")
id("java-plugin")
}
tasks {
shadowJar {
archiveClassifier.set("")
exclude("META-INF/**")
}
}
@@ -1,27 +0,0 @@
plugins {
id("com.ryderbelserion.feather.core")
id("java-plugin") apply false
}
val libs = extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
val git = feather.getGit()
val isBeta: Boolean = git.getCurrentBranch() == rootProject.property("beta_branch").toString()
val isAlpha: Boolean = git.getCurrentBranch() == rootProject.property("alpha_branch").toString()
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 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.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)
}
-29
View File
@@ -1,29 +0,0 @@
package utils
fun String.updateMarkdown(): String {
val list = split("\n")
val builder = StringBuilder(list.size)
list.forEach {
if (it.contains("##")) {
val text = it.replace("## ", "")
builder.append("**${text}**")
} else {
builder.append(it)
}
}
return builder.toString()
}
fun List<String>.convertList(): String {
val builder = StringBuilder(size)
forEach {
builder.append(it).append("\n")
}
return builder.toString()
}
-1
View File
@@ -1 +0,0 @@
- Fixed a bug with drowning listener which canceled all forms of damage as the damage type wasn't properly checked.
-23
View File
@@ -1,23 +0,0 @@
# SimpleFlags
Adds extra flags to be used by WorldGuard regions
## Missing a flag?
* [Suggest a new flag!](https://github.com/ryderbelserion/SimpleFlags/issues/new?assignees=&labels=feature&projects=&template=flags.yml)
## Dependencies
* WorldGuard (Required)
## Available Flags
* prevent_natural_spawning - stops mobs from naturally spawning in a region.
* prevent_drowning - prevents players from drowning.
## Permissions
* `simpleflags.access`
* Default: **OP**
* Description: Allows the player to use `/simpleflags`
* `simpleflags.help`
* Default: **OP**
* Description: Allows the player to use `/simpleflags help`
* `simpleflags.reload`
* Default: **OP**
* Description: Allows the player to use `/simpleflags reload`
-44
View File
@@ -1,44 +0,0 @@
# suppress inspection "SpellCheckingInspection" for whole file
org.gradle.jvmargs = -Xmx3G
org.gradle.daemon = false
org.gradle.parallel = false
# The GitHub repo/organization
repository_owner = ryderbelserion
# Author details
author_name = Ryder Belserion
author_avatar = https://github.com/ryderbelserion.png
# Masocot details
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.1
# The api version
api_version = 0.1.0
# 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
project_description = Adds simple worldguard flags.
project_group = com.ryderbelserion.simpleflags
project_platforms = paper,folia,purpur
project_versions = 1.21.1
project_id = SimpleFlags
+32 -46
View File
@@ -1,57 +1,43 @@
[plugins]
hangar = { id = "io.papermc.hangar-publish-plugin", version.ref = "hangar" }
runPaper = { id = "xyz.jpenilla.run-paper", version.ref = "runPaper" }
minotaur = { id = "com.modrinth.minotaur", version.ref = "minotaur" }
shadow = { id = "com.gradleup.shadow", version.ref = "shadow" }
[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
paper = "1.21.4-R0.1-SNAPSHOT"
velocity = "3.3.0-SNAPSHOT"
minecraft = "1.21.4"
brigadier = "1.3.10"
## Minecraft
minecraft = "1.21.11" # https://minecraft.net
# Fusion API
fusion = "0.18.1"
# Vital API
vital-common = "0.0.6"
vital-paper = "1.0.6"
# Other API
jalu = "1.4.3"
## 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
hangar = "0.1.4" # https://github.com/HangarMC/hangar-publish-plugin
shadow = "9.3.0" # https://github.com/GradleUp/shadow
# Gradle Plugins
runPaper = "2.3.0"
minotaur = "2.8.7"
hangar = "0.1.2"
shadow = "8.3.0"
[libraries]
# https://github.com/PaperMC/paperweight
paperweight = { module = "io.papermc.paperweight.userdev:io.papermc.paperweight.userdev.gradle.plugin", version.ref = "paperweight" }
# Velocity API
velocity = { module = "com.velocitypowered:velocity-api", version.ref = "velocity" }
# https://github.com/ryderbelserion/Feather
feather = { module = "com.ryderbelserion.feather.core:com.ryderbelserion.feather.core.gradle.plugin", version.ref = "feather" }
# Mojang API
brigadier = { module = "com.mojang:brigadier", version.ref = "brigadier" }
# https://github.com/HangarMC/hangar-publish-plugin
hangar = { module = "io.papermc.hangar-publish-plugin:io.papermc.hangar-publish-plugin.gradle.plugin", version.ref = "hangar" }
# Paper API
paper = { module = "io.papermc.paper:paper-api", version.ref = "paper" }
# https://github.com/modrinth/minotaur
minotaur = { module = "com.modrinth.minotaur:com.modrinth.minotaur.gradle.plugin", version.ref = "minotaur" }
worldguard = { group = "com.sk89q.worldguard", name = "worldguard-bukkit", version = "7.1.0-SNAPSHOT" }
# https://github.com/GradleUp/shadow
shadow = { module = "com.gradleup.shadow:shadow-gradle-plugin", version.ref = "shadow" }
# Fusion API
fusion-paper = { module = "com.ryderbelserion.fusion:fusion-paper", version.ref = "fusion" }
fusion-core = { module = "com.ryderbelserion.fusion:fusion-core", version.ref = "fusion" }
# 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" }
# Vital API
vital-paper = { module = "com.ryderbelserion.vital:paper", version.ref = "vital-paper" }
[bundles]
build = [
"minotaur",
"feather",
"hangar",
"shadow"
]
paper = [
"paperweight",
"run-paper"
]
# Other API
jalu = { module = "ch.jalu:configme", version.ref = "jalu" }
Binary file not shown.
+2 -2
View File
@@ -1,7 +1,7 @@
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-8.10.2-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
zipStorePath=wrapper/dists
Vendored
+3 -5
View File
@@ -15,8 +15,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
@@ -57,7 +55,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/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -86,7 +84,7 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -205,7 +203,7 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
Vendored
+10 -12
View File
@@ -13,8 +13,6 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@@ -45,11 +43,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
@@ -59,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
+32
View File
@@ -0,0 +1,32 @@
settings:
allow-end: false
warn-on-overload: false
permissions-file: permissions.yml
update-folder: update
plugin-profiling: false
connection-throttle: 4000
query-plugins: false
deprecated-verbose: default
shutdown-message: Server Closed
minimum-api: none
use-map-color-cache: true
spawn-limits:
monsters: 70
animals: 10
water-animals: 5
water-ambient: 20
water-underground-creature: 5
axolotls: 5
ambient: 15
chunk-gc:
period-in-ticks: 600
ticks-per:
animal-spawns: 400
monster-spawns: 1
water-spawns: 1
water-ambient-spawns: 1
water-underground-creature-spawns: 1
axolotl-spawns: 1
ambient-spawns: 1
autosave: 6000
aliases: now-in-commands.yml
+135
View File
@@ -0,0 +1,135 @@
# This is the global configuration file for Paper.
# As you can see, there's a lot to configure. Some options may impact gameplay, so use
# with caution, and make sure you know what each option does before configuring.
#
# If you need help with the configuration or have any questions related to Paper,
# join us in our Discord or check the docs page.
#
# The world configuration options have been moved inside
# their respective world folder. The files are named paper-world.yml
#
# Docs: https://docs.papermc.io/
# Discord: https://discord.gg/papermc
# Website: https://papermc.io/
_version: 29
block-updates:
disable-chorus-plant-updates: false
disable-mushroom-block-updates: false
disable-noteblock-updates: false
disable-tripwire-updates: false
chunk-loading-advanced:
auto-config-send-distance: true
player-max-concurrent-chunk-generates: 0
player-max-concurrent-chunk-loads: 0
chunk-loading-basic:
player-max-chunk-generate-rate: -1.0
player-max-chunk-load-rate: 100.0
player-max-chunk-send-rate: 75.0
chunk-system:
gen-parallelism: default
io-threads: -1
worker-threads: -1
collisions:
enable-player-collisions: true
send-full-pos-for-hard-colliding-entities: true
commands:
fix-target-selector-tag-completion: true
suggest-player-names-when-null-tab-completions: true
time-command-affects-all-worlds: false
console:
enable-brigadier-completions: true
enable-brigadier-highlighting: true
has-all-permissions: false
item-validation:
book:
author: 8192
page: 16384
title: 8192
book-size:
page-max: 2560
total-multiplier: 0.98
display-name: 8192
lore-line: 8192
resolve-selectors-in-books: false
logging:
deobfuscate-stacktraces: true
messages:
kick:
authentication-servers-down: <lang:multiplayer.disconnect.authservers_down>
connection-throttle: Connection throttled! Please wait before reconnecting.
flying-player: <lang:multiplayer.disconnect.flying>
flying-vehicle: <lang:multiplayer.disconnect.flying>
no-permission: <red>I'm sorry, but you do not have permission to perform this command.
Please contact the server administrators if you believe that this is in error.
use-display-name-in-quit-message: false
misc:
chat-threads:
chat-executor-core-size: -1
chat-executor-max-size: -1
client-interaction-leniency-distance: default
compression-level: default
fix-entity-position-desync: true
load-permissions-yml-before-plugins: true
max-joins-per-tick: 5
region-file-cache-size: 256
strict-advancement-dimension-check: false
use-alternative-luck-formula: false
use-dimension-type-for-custom-spawners: false
packet-limiter:
all-packets:
action: KICK
interval: 7.0
max-packet-rate: 500.0
kick-message: <red><lang:disconnect.exceeded_packet_rate>
overrides:
ServerboundPlaceRecipePacket:
action: DROP
interval: 4.0
max-packet-rate: 5.0
player-auto-save:
max-per-tick: -1
rate: -1
proxies:
bungee-cord:
online-mode: false
proxy-protocol: false
velocity:
enabled: false
online-mode: false
secret: ''
scoreboards:
save-empty-scoreboard-teams: false
track-plugin-scoreboards: false
spam-limiter:
incoming-packet-threshold: 300
recipe-spam-increment: 1
recipe-spam-limit: 20
tab-spam-increment: 1
tab-spam-limit: 500
spark:
enable-immediately: false
enabled: true
timings:
enabled: false
hidden-config-entries:
- database
- proxies.velocity.secret
history-interval: 300
history-length: 3600
server-name: Unknown Server
server-name-privacy: false
url: https://timings.aikar.co/
verbose: false
unsupported-settings:
allow-headless-pistons: false
allow-permanent-block-break-exploits: false
allow-piston-duplication: false
allow-tripwire-disarming-exploits: false
allow-unsafe-end-portal-teleportation: false
compression-format: ZLIB
perform-username-validation: true
skip-vanilla-damage-tick-when-shield-blocked: false
watchdog:
early-warning-delay: 10000
early-warning-every: 5000
+322
View File
@@ -0,0 +1,322 @@
# This is the world defaults configuration file for Paper.
# As you can see, there's a lot to configure. Some options may impact gameplay, so use
# with caution, and make sure you know what each option does before configuring.
#
# If you need help with the configuration or have any questions related to Paper,
# join us in our Discord or check the docs page.
#
# Configuration options here apply to all worlds, unless you specify overrides inside
# the world-specific config file inside each world folder.
#
# Docs: https://docs.papermc.io/
# Discord: https://discord.gg/papermc
# Website: https://papermc.io/
_version: 31
anticheat:
anti-xray:
enabled: false
engine-mode: 1
hidden-blocks:
- copper_ore
- deepslate_copper_ore
- gold_ore
- deepslate_gold_ore
- iron_ore
- deepslate_iron_ore
- coal_ore
- deepslate_coal_ore
- lapis_ore
- deepslate_lapis_ore
- mossy_cobblestone
- obsidian
- chest
- diamond_ore
- deepslate_diamond_ore
- redstone_ore
- deepslate_redstone_ore
- clay
- emerald_ore
- deepslate_emerald_ore
- ender_chest
lava-obscures: false
max-block-height: 64
replacement-blocks:
- stone
- oak_planks
- deepslate
update-radius: 2
use-permission: false
obfuscation:
items:
hide-durability: false
hide-itemmeta: false
hide-itemmeta-with-visual-effects: false
chunks:
auto-save-interval: default
delay-chunk-unloads-by: 10s
entity-per-chunk-save-limit:
arrow: -1
ender_pearl: -1
experience_orb: -1
fireball: -1
small_fireball: -1
snowball: -1
fixed-chunk-inhabited-time: -1
flush-regions-on-save: false
max-auto-save-chunks-per-tick: 24
prevent-moving-into-unloaded-chunks: false
collisions:
allow-player-cramming-damage: false
allow-vehicle-collisions: true
fix-climbing-bypassing-cramming-rule: false
max-entity-collisions: 8
only-players-collide: false
command-blocks:
force-follow-perm-level: true
permissions-level: 2
entities:
armor-stands:
do-collision-entity-lookups: true
tick: true
behavior:
allow-spider-world-border-climbing: true
baby-zombie-movement-modifier: 0.5
disable-chest-cat-detection: false
disable-creeper-lingering-effect: false
disable-player-crits: false
door-breaking-difficulty:
husk:
- HARD
vindicator:
- NORMAL
- HARD
zombie:
- HARD
zombie_villager:
- HARD
zombified_piglin:
- HARD
ender-dragons-death-always-places-dragon-egg: false
experience-merge-max-value: -1
mobs-can-always-pick-up-loot:
skeletons: false
zombies: false
nerf-pigmen-from-nether-portals: false
only-merge-items-horizontally: false
parrots-are-unaffected-by-player-movement: false
phantoms-do-not-spawn-on-creative-players: true
phantoms-only-attack-insomniacs: true
phantoms-spawn-attempt-max-seconds: 119
phantoms-spawn-attempt-min-seconds: 60
piglins-guard-chests: true
pillager-patrols:
disable: false
spawn-chance: 0.2
spawn-delay:
per-player: false
ticks: 12000
start:
day: 5
per-player: false
player-insomnia-start-ticks: 72000
should-remove-dragon: false
spawner-nerfed-mobs-should-jump: false
zombie-villager-infection-chance: default
zombies-target-turtle-eggs: true
entities-target-with-follow-range: false
markers:
tick: true
mob-effects:
immune-to-wither-effect:
wither: true
wither-skeleton: true
spiders-immune-to-poison-effect: true
sniffer:
boosted-hatch-time: default
hatch-time: default
spawning:
all-chunks-are-slime-chunks: false
alt-item-despawn-rate:
enabled: false
items:
cobblestone: 300
count-all-mobs-for-spawning: false
creative-arrow-despawn-rate: default
despawn-range-shape: ELLIPSOID
despawn-ranges:
ambient:
hard: 128
soft: 32
axolotls:
hard: 128
soft: 32
creature:
hard: 128
soft: 32
misc:
hard: 128
soft: 32
monster:
hard: 128
soft: 32
underground_water_creature:
hard: 128
soft: 32
water_ambient:
hard: 64
soft: 32
water_creature:
hard: 128
soft: 32
disable-mob-spawner-spawn-egg-transformation: false
duplicate-uuid:
mode: SAFE_REGEN
safe-regen-delete-range: 32
filter-bad-tile-entity-nbt-from-falling-blocks: true
filtered-entity-tag-nbt-paths:
- Pos
- Motion
- SleepingX
- SleepingY
- SleepingZ
iron-golems-can-spawn-in-air: false
monster-spawn-max-light-level: default
non-player-arrow-despawn-rate: default
per-player-mob-spawns: true
scan-for-legacy-ender-dragon: true
skeleton-horse-thunder-spawn-chance: default
slime-spawn-height:
slime-chunk:
maximum: 40.0
surface-biome:
maximum: 70.0
minimum: 50.0
spawn-limits:
ambient: -1
axolotls: -1
creature: -1
monster: -1
underground_water_creature: -1
water_ambient: -1
water_creature: -1
ticks-per-spawn:
ambient: -1
axolotls: -1
creature: -1
monster: -1
underground_water_creature: -1
water_ambient: -1
water_creature: -1
wandering-trader:
spawn-chance-failure-increment: 25
spawn-chance-max: 75
spawn-chance-min: 25
spawn-day-length: 24000
spawn-minute-length: 1200
wateranimal-spawn-height:
maximum: default
minimum: default
tracking-range-y:
animal: default
display: default
enabled: false
misc: default
monster: default
other: default
player: default
environment:
disable-explosion-knockback: false
disable-ice-and-snow: false
disable-teleportation-suffocation-check: false
disable-thunder: false
fire-tick-delay: 30
frosted-ice:
delay:
max: 40
min: 20
enabled: true
generate-flat-bedrock: false
locate-structures-outside-world-border: false
max-block-ticks: 65536
max-fluid-ticks: 65536
nether-ceiling-void-damage-height: disabled
optimize-explosions: false
portal-create-radius: 16
portal-search-radius: 128
portal-search-vanilla-dimension-scaling: true
treasure-maps:
enabled: true
find-already-discovered:
loot-tables: default
villager-trade: false
void-damage-amount: 4.0
void-damage-min-build-height-offset: -64.0
water-over-lava-flow-speed: 5
feature-seeds:
generate-random-seeds-for-all: false
fishing-time-range:
maximum: 600
minimum: 100
fixes:
disable-unloaded-chunk-enderpearl-exploit: true
falling-block-height-nerf: disabled
fix-items-merging-through-walls: false
prevent-tnt-from-moving-in-water: false
split-overstacked-loot: true
tnt-entity-height-nerf: disabled
hopper:
cooldown-when-full: true
disable-move-event: false
ignore-occluding-blocks: false
lootables:
auto-replenish: false
max-refills: -1
refresh-max: 2d
refresh-min: 12h
reset-seed-on-fill: true
restrict-player-reloot: true
restrict-player-reloot-time: disabled
retain-unlooted-shulker-box-loot-table-on-non-player-break: true
maps:
item-frame-cursor-limit: 128
item-frame-cursor-update-interval: 10
max-growth-height:
bamboo:
max: 16
min: 11
cactus: 3
reeds: 3
misc:
alternate-current-update-order: HORIZONTAL_FIRST_OUTWARD
disable-end-credits: false
disable-relative-projectile-velocity: false
disable-sprint-interruption-on-attack: false
light-queue-size: 20
max-leash-distance: 10.0
redstone-implementation: VANILLA
shield-blocking-delay: 5
show-sign-click-command-failure-msgs-to-player: false
update-pathfinding-on-block-update: true
scoreboards:
allow-non-player-entities-on-scoreboards: true
use-vanilla-world-scoreboard-name-coloring: false
spawn:
allow-using-signs-inside-spawn-protection: false
keep-spawn-loaded: true
keep-spawn-loaded-range: 10
tick-rates:
behavior:
villager:
validatenearbypoi: -1
container-update: 1
dry-farmland: 1
grass-spread: 1
mob-spawner: 1
sensor:
villager:
secondarypoisensor: 40
wet-farmland: 1
unsupported-settings:
disable-world-ticking-when-empty: false
fix-invulnerable-end-crystal-exploit: true
+3
View File
@@ -0,0 +1,3 @@
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
#Mon Oct 16 20:19:20 EDT 2023
eula=true
+8
View File
@@ -0,0 +1,8 @@
[
{
"uuid": "45123240-248b-44e3-93c9-5c89093ffaad",
"name": "ryderbelserion",
"level": 4,
"bypassesPlayerLimit": false
}
]
+64
View File
@@ -0,0 +1,64 @@
#Minecraft server properties
#Mon Oct 14 12:22:12 EDT 2024
accepts-transfers=false
allow-flight=false
allow-nether=false
broadcast-console-to-ops=false
broadcast-rcon-to-ops=false
bug-report-link=
debug=false
difficulty=peaceful
enable-command-block=false
enable-jmx-monitoring=false
enable-query=false
enable-rcon=false
enable-status=true
enforce-secure-profile=true
enforce-whitelist=false
entity-broadcast-range-percentage=100
force-gamemode=false
function-permission-level=2
gamemode=survival
generate-structures=true
generator-settings={}
hardcore=false
hide-online-players=false
initial-disabled-packs=
initial-enabled-packs=vanilla
level-name=world
level-seed=
level-type=minecraft\:normal
log-ips=false
max-chained-neighbor-updates=1000000
max-players=5
max-tick-time=60000
max-world-size=29999984
motd=A test server
network-compression-threshold=256
online-mode=true
op-permission-level=4
player-idle-timeout=0
prevent-proxy-connections=false
pvp=true
query.port=25565
rate-limit=0
rcon.password=
rcon.port=25575
region-file-compression=deflate
require-resource-pack=false
resource-pack=
resource-pack-id=
resource-pack-prompt=
resource-pack-sha1=
server-ip=
server-port=25565
simulation-distance=10
spawn-animals=true
spawn-monsters=true
spawn-npcs=true
spawn-protection=32
sync-chunk-writes=false
text-filtering-config=
use-native-transport=true
view-distance=6
white-list=false
+183
View File
@@ -0,0 +1,183 @@
# This is the main configuration file for Spigot.
# As you can see, there's tons to configure. Some options may impact gameplay, so use
# with caution, and make sure you know what each option does before configuring.
# For a reference for any variable inside this file, check out the Spigot wiki at
# http://www.spigotmc.org/wiki/spigot-configuration/
#
# If you need help with the configuration or have any questions related to Spigot,
# join us at the Discord or drop by our forums and leave a post.
#
# Discord: https://www.spigotmc.org/go/discord
# Forums: http://www.spigotmc.org/
settings:
debug: false
timeout-time: 60
restart-on-crash: false
restart-script: ./start.sh
save-user-cache-on-stop-only: false
moved-too-quickly-multiplier: 10.0
moved-wrongly-threshold: 0.0625
player-shuffle: 0
user-cache-size: 1000
netty-threads: 4
attribute:
maxAbsorption:
max: 2048.0
maxHealth:
max: 2048.0
movementSpeed:
max: 2048.0
attackDamage:
max: 2048.0
log-villager-deaths: false
log-named-deaths: false
sample-count: 12
bungeecord: false
messages:
restart: Server is restarting
whitelist: You are not whitelisted on this server!
unknown-command: Unknown command. Type "/help" for help.
server-full: The server is full!
outdated-client: Outdated client! Please use {0}
outdated-server: Outdated server! I'm still on {0}
advancements:
disable-saving: true
disabled:
- minecraft:story/disabled
commands:
silent-commandblock-console: false
spam-exclusions:
- /skill
replace-commands:
- setblock
- summon
- testforblock
- tellraw
log: true
tab-complete: 0
send-namespaced: true
players:
disable-saving: false
world-settings:
default:
unload-frozen-chunks: false
seed-trialchambers: 94251327
below-zero-generation-in-existing-chunks: true
hanging-tick-frequency: 100
dragon-death-sound-radius: 0
wither-spawn-sound-radius: 0
end-portal-sound-radius: 0
zombie-aggressive-towards-villager: true
entity-activation-range:
animals: 32
monsters: 32
raiders: 48
misc: 16
water: 16
villagers: 32
flying-monsters: 32
wake-up-inactive:
animals-max-per-tick: 4
animals-every: 1200
animals-for: 100
monsters-max-per-tick: 8
monsters-every: 400
monsters-for: 100
villagers-max-per-tick: 4
villagers-every: 600
villagers-for: 100
flying-monsters-max-per-tick: 8
flying-monsters-every: 200
flying-monsters-for: 100
villagers-work-immunity-after: 100
villagers-work-immunity-for: 20
villagers-active-for-panic: true
tick-inactive-villagers: true
ignore-spectators: false
seed-village: 10387312
seed-desert: 14357617
seed-igloo: 14357618
seed-jungle: 14357619
seed-swamp: 14357620
seed-monument: 10387313
seed-shipwreck: 165745295
seed-ocean: 14357621
seed-outpost: 165745296
seed-endcity: 10387313
seed-slime: 987234911
seed-nether: 30084232
seed-mansion: 10387319
seed-fossil: 14357921
seed-portal: 34222645
seed-ancientcity: 20083232
seed-trailruins: 83469867
seed-buriedtreasure: 10387320
seed-mineshaft: default
seed-stronghold: default
entity-tracking-range:
players: 48
animals: 48
monsters: 48
misc: 32
display: 128
other: 64
ticks-per:
hopper-transfer: 8
hopper-check: 1
hopper-amount: 1
hopper-can-load-chunks: false
max-tnt-per-tick: 100
max-tick-time:
tile: 50
entity: 50
hunger:
jump-walk-exhaustion: 0.05
jump-sprint-exhaustion: 0.2
combat-exhaustion: 0.1
regen-exhaustion: 6.0
swim-multiplier: 0.01
sprint-multiplier: 0.1
other-multiplier: 0.0
enable-zombie-pigmen-portal-spawns: true
thunder-chance: 100000
growth:
cactus-modifier: 100
cane-modifier: 100
melon-modifier: 100
mushroom-modifier: 100
pumpkin-modifier: 100
sapling-modifier: 100
beetroot-modifier: 100
carrot-modifier: 100
potato-modifier: 100
torchflower-modifier: 100
wheat-modifier: 100
netherwart-modifier: 100
vine-modifier: 100
cocoa-modifier: 100
bamboo-modifier: 100
sweetberry-modifier: 100
kelp-modifier: 100
twistingvines-modifier: 100
weepingvines-modifier: 100
cavevines-modifier: 100
glowberry-modifier: 100
pitcherplant-modifier: 100
mob-spawn-range: 8
simulation-distance: default
merge-radius:
item: 2.5
exp: 3.0
arrow-despawn-rate: 1200
trident-despawn-rate: 1200
view-distance: default
item-despawn-rate: 6000
nerf-spawner-mobs: false
verbose: false
worldeditregentempworld:
verbose: false
config-version: 12
stats:
disable-saving: false
forced-stats: {}
@@ -0,0 +1,27 @@
package com.ryderbelserion.simpleflags;
import com.ryderbelserion.simpleflags.enums.Plugins;
import io.papermc.paper.plugin.loader.PluginClasspathBuilder;
import io.papermc.paper.plugin.loader.PluginLoader;
import io.papermc.paper.plugin.loader.library.impl.MavenLibraryResolver;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.repository.RemoteRepository;
import org.jetbrains.annotations.NotNull;
public class LibraryLoader implements PluginLoader {
@Override
public void classloader(@NotNull PluginClasspathBuilder classpathBuilder) {
MavenLibraryResolver resolver = new MavenLibraryResolver();
resolver.addRepository(new RemoteRepository.Builder("paper", "default", "https://repo.papermc.io/repository/maven-public").build());
resolver.addRepository(new RemoteRepository.Builder("crazycrewReleases", "default", "https://repo.crazycrew.us/releases/").build());
resolver.addDependency(Plugins.configme.asDependency());
resolver.addDependency(Plugins.fusion.asDependency());
classpathBuilder.addLibrary(resolver);
}
}
@@ -6,10 +6,9 @@ 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.BlockFlag;
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;
@@ -18,7 +17,6 @@ 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;
@@ -39,20 +37,15 @@ public class SimpleFlags extends Vital {
List.of(
new DrownFlag(),
new NaturalFlag(),
// temporary
new BlockCrafterFlag(),
new InteractionCrafterFlag()
new BlockFlag()
).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);
getServer().getPluginManager().registerEvents(new NaturalListener(), this);
getServer().getPluginManager().registerEvents(new DrowningListener(), this);
getServer().getPluginManager().registerEvents(new BlockListener(), this);
// Register commands.
getLifecycleManager().registerEventHandler(LifecycleEvents.COMMANDS, event -> {
@@ -2,32 +2,19 @@ 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_block_placement allows you to pick blocks that can't be placed.")
public static final Property<Boolean> block_placement_flag = newProperty("flags.prevent_block_placement-flag", 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);
@@ -0,0 +1,24 @@
package com.ryderbelserion.simpleflags.enums;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.graph.Dependency;
public enum Plugins {
fusion("com.ryderbelserion.fusion", "fusion-paper", "0.18.1"),
configme("ch.jalu", "configme", "1.4.3");
private final String group;
private final String id;
private final String version;
Plugins(final String group, final String id, final String version) {
this.group = group;
this.id = id;
this.version = version;
}
public Dependency asDependency() {
return new Dependency(new DefaultArtifact(String.format("%s:%s:%s", this.group, this.id, this.version)), null);
}
}
@@ -6,16 +6,13 @@ import com.ryderbelserion.simpleflags.config.ConfigManager;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
import com.sk89q.worldguard.protection.regions.RegionQuery;
import net.kyori.adventure.text.logger.slf4j.ComponentLogger;
import org.bukkit.plugin.java.JavaPlugin;
public abstract class FlagBuilder<T extends Flag> {
protected final SimpleFlags plugin = JavaPlugin.getPlugin(SimpleFlags.class);
protected SimpleFlags plugin = JavaPlugin.getPlugin(SimpleFlags.class);
protected final ComponentLogger logger = this.plugin.getComponentLogger();
protected final SettingsManager config = ConfigManager.getConfig();
protected SettingsManager config = ConfigManager.getConfig();
public abstract void register();
@@ -28,7 +25,7 @@ public abstract class FlagBuilder<T extends Flag> {
/**
* @return A query of regions.
*/
protected RegionQuery getQuery() {
public RegionQuery getQuery() {
return this.plugin.getRegions().createQuery();
}
@@ -9,42 +9,32 @@ import org.bukkit.damage.DamageType;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.CreatureSpawnEvent;
@SuppressWarnings("UnstableApiUsage")
public abstract class StateFlagBuilder extends FlagBuilder<StateFlag> {
@Override
public abstract StateFlag getFlag();
/**
* Tests a location
*
* @param player the {@link Player}
* @param flag the {@link StateFlag}
* @return true or false
*/
public boolean testLocation(final Player player, final StateFlag flag) {
return getQuery().testState(BukkitAdapter.adapt(player.getLocation()), WorldGuardPlugin.inst().wrapPlayer(player), flag);
}
/**
* Prevent any type of damage in any region.
*
* @param player the player to prevent damage to
* @param source the source of the damage
* @param type the type of the damage to check
* @param flag the flag
* @param player the player to prevent damage to.
* @param source the source of the damage.
* @param type the type of the damage to check.
* @param flag the flag.
* @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 && getQuery().testState(BukkitAdapter.adapt(player.getLocation()), WorldGuardPlugin.inst().wrapPlayer(player), flag);
}
/**
* Prevent spawning based on a supplied spawn reason.
*
* @param location the location to check
* @param receivingReason the reason from the event
* @param reason your reason
* @param flag the flag
* @param location the location to check.
* @param receivingReason the reason from the event.
* @param reason your reason.
* @param flag the flag.
* @return true or false
*/
public boolean preventSpawning(org.bukkit.Location location, CreatureSpawnEvent.SpawnReason receivingReason, CreatureSpawnEvent.SpawnReason reason, StateFlag flag) {
@@ -0,0 +1,11 @@
package com.ryderbelserion.simpleflags.flags.builders;
import com.ryderbelserion.simpleflags.flags.FlagBuilder;
import com.sk89q.worldguard.protection.flags.SetFlag;
public abstract class StringFlagBuilder extends FlagBuilder<SetFlag<?>> {
@Override
public abstract SetFlag<?> getFlag();
}
@@ -3,8 +3,7 @@ package com.ryderbelserion.simpleflags.flags.enums;
public enum CustomFlags {
NATURAL_FLAG("prevent_natural_spawning"),
CRAFTER_INTERACTION_FLAG("prevent_crafter_interaction"),
CRAFTER_BLOCK_FLAG("prevent_crafter_block"),
PREVENT_BLOCK_PLACEMENT("prevent_block_placement"),
DROWN_FLAG("prevent_drowning"),
CAPACITY_FLAG("max_players");
@@ -0,0 +1,50 @@
package com.ryderbelserion.simpleflags.flags.types;
import com.ryderbelserion.simpleflags.config.impl.Config;
import com.ryderbelserion.simpleflags.flags.builders.StringFlagBuilder;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.CommandStringFlag;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.SetFlag;
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
import java.util.logging.Level;
@SuppressWarnings("unchecked")
public class BlockFlag extends StringFlagBuilder {
private SetFlag<String> flag;
@Override
public void register() {
if (!isEnabled()) return;
try {
getRegistry().register(this.flag = new SetFlag<>("prevent-block-placement", new CommandStringFlag(null)));
} catch (FlagConflictException exception) {
Flag<?> existingFlag = getRegistry().get("prevent-block-placement");
if (existingFlag != null) {
this.flag = (SetFlag<String>) getRegistry().get("prevent-block-placement");
return;
}
this.plugin.getLogger().log(Level.WARNING, "An error has occurred registering " + getName() + " flag.", exception);
}
}
@Override
public String getName() {
return CustomFlags.PREVENT_BLOCK_PLACEMENT.getName();
}
@Override
public SetFlag<String> getFlag() {
return this.flag;
}
@Override
public boolean isEnabled() {
return this.config.getProperty(Config.drowning_flag);
}
}
@@ -6,6 +6,7 @@ import com.ryderbelserion.simpleflags.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;
import java.util.logging.Level;
public class DrownFlag extends StateFlagBuilder {
@@ -26,7 +27,7 @@ public class DrownFlag extends StateFlagBuilder {
return;
}
this.logger.warn("An error has occurred registering {} flag. Reason: {}", getName(), exception.getMessage());
this.plugin.getLogger().log(Level.WARNING, "An error has occurred registering " + getName() + " flag.", exception);
}
}
@@ -6,6 +6,7 @@ import com.ryderbelserion.simpleflags.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;
import java.util.logging.Level;
public class NaturalFlag extends StateFlagBuilder {
@@ -26,7 +27,7 @@ public class NaturalFlag extends StateFlagBuilder {
return;
}
this.logger.warn("An error has occurred registering {} flag. Reason: {}", getName(), exception.getMessage());
this.plugin.getLogger().log(Level.WARNING, "An error has occurred registering " + getName() + " flag.", exception);
}
}
@@ -1,47 +0,0 @@
package com.ryderbelserion.simpleflags.flags.types.temporary;
import com.ryderbelserion.simpleflags.config.impl.Config;
import com.ryderbelserion.simpleflags.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.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;
public class BlockCrafterFlag extends StateFlagBuilder {
private StateFlag flag;
@Override
public void register() {
if (!isEnabled()) return;
try {
getRegistry().register(this.flag = new StateFlag("prevent-crafter-block", true));
} catch (FlagConflictException exception) {
Flag<?> existingFlag = getRegistry().get("prevent-crafter-block");
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.CRAFTER_BLOCK_FLAG.getName();
}
@Override
public StateFlag getFlag() {
return this.flag;
}
@Override
public boolean isEnabled() {
return this.config.getProperty(Config.crafter_flag_place);
}
}
@@ -1,47 +0,0 @@
package com.ryderbelserion.simpleflags.flags.types.temporary;
import com.ryderbelserion.simpleflags.config.impl.Config;
import com.ryderbelserion.simpleflags.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.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;
public class InteractionCrafterFlag extends StateFlagBuilder {
private StateFlag flag;
@Override
public void register() {
if (!isEnabled()) return;
try {
getRegistry().register(this.flag = new StateFlag("prevent-crafter-interaction", true));
} catch (FlagConflictException exception) {
Flag<?> existingFlag = getRegistry().get("prevent-crafter-interaction");
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.CRAFTER_INTERACTION_FLAG.getName();
}
@Override
public StateFlag getFlag() {
return this.flag;
}
@Override
public boolean isEnabled() {
return this.config.getProperty(Config.crafter_flag_interaction);
}
}
@@ -2,72 +2,53 @@ package com.ryderbelserion.simpleflags.listeners;
import com.ryderbelserion.simpleflags.SimpleFlags;
import com.ryderbelserion.simpleflags.flags.FlagManager;
import com.ryderbelserion.simpleflags.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.flags.builders.StringFlagBuilder;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.StateFlag;
import org.bukkit.Material;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.flags.SetFlag;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.Set;
@SuppressWarnings("unchecked")
public class BlockListener implements Listener {
private final SimpleFlags plugin = JavaPlugin.getPlugin(SimpleFlags.class);
private final FlagManager flagManager = this.plugin.getFlagManager();
@EventHandler
public void onBlockPlace(final BlockPlaceEvent event) {
@EventHandler(ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent event) {
final String flagName = CustomFlags.PREVENT_BLOCK_PLACEMENT.getName();
if (!this.flagManager.hasFlag(flagName)) return;
final StringFlagBuilder builder = (StringFlagBuilder) this.flagManager.getFlag(flagName);
if (!builder.isEnabled()) return;
final SetFlag<String> flag = (SetFlag<String>) builder.getFlag();
if (flag == null) return;
final Block block = event.getBlock();
final Material material = block.getType();
if (block.isEmpty()) return;
if (material != Material.CRAFTER) return;
final String material = block.getType().getKey().value();
final String flagName = CustomFlags.CRAFTER_BLOCK_FLAG.getName();
this.plugin.getLogger().warning("Block placement for " + material);
if (!this.flagManager.hasFlag(flagName)) return;
final Set<String> materialTypes = builder.getQuery().queryValue(BukkitAdapter.adapt(block.getLocation()), WorldGuardPlugin.inst().wrapPlayer(event.getPlayer()), flag);
final StateFlagBuilder flag = (StateFlagBuilder) this.flagManager.getFlag(flagName);
if (materialTypes != null && materialTypes.contains(material)) {
this.plugin.getLogger().warning("Block placement for " + material + " cancelled.");
if (!flag.isEnabled()) return;
final StateFlag stateFlag = flag.getFlag();
if (stateFlag == null) return;
if (!flag.testLocation(event.getPlayer(), stateFlag)) {
event.setCancelled(true);
}
}
@EventHandler
public void onInteractEvent(final PlayerInteractEvent event) {
final Block block = event.getClickedBlock();
if (block == null || block.isEmpty()) return;
final Material material = block.getType();
if (material != Material.CRAFTER) return;
final String flagName = CustomFlags.CRAFTER_INTERACTION_FLAG.getName();
if (!this.flagManager.hasFlag(flagName)) return;
final StateFlagBuilder flag = (StateFlagBuilder) this.flagManager.getFlag(flagName);
if (!flag.isEnabled()) return;
final StateFlag stateFlag = flag.getFlag();
if (stateFlag == null) return;
if (!flag.testLocation(event.getPlayer(), stateFlag)) {
event.setCancelled(true);
}
}
}
}
@@ -5,7 +5,6 @@ import com.ryderbelserion.simpleflags.flags.builders.StateFlagBuilder;
import com.ryderbelserion.simpleflags.flags.FlagManager;
import com.ryderbelserion.simpleflags.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;
@@ -38,9 +37,7 @@ public class DrowningListener implements Listener {
if (stateFlag == null) return;
final DamageSource source = event.getDamageSource();
if (!flag.preventDamage(player, source, DamageType.DROWN, stateFlag)) {
if (!flag.preventDamage(player, event.getDamageSource(), DamageType.DROWN, stateFlag)) {
event.setCancelled(true);
}
}
+3 -1
View File
@@ -2,9 +2,11 @@ name: '${name}'
main: '${group}.${name}'
version: '${version}'
api-version: '${minecraft}'
api-version: '${apiVersion}'
description: '${description}'
loader: '${group}.LibraryLoader'
dependencies:
server:
WorldGuard: