mirror of
https://github.com/PaperMC/Paper.git
synced 2025-05-18 21:20:24 -07:00
Update a bunch of dependencies
Either to match Vanilla or to update our own
This commit is contained in:
parent
1b889688a5
commit
8ff94c6344
255
build.gradle.kts
255
build.gradle.kts
@ -1,15 +1,5 @@
|
|||||||
import io.papermc.paperweight.util.*
|
|
||||||
import io.papermc.paperweight.util.constants.*
|
|
||||||
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
|
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
|
||||||
import org.gradle.api.tasks.testing.logging.TestLogEvent
|
import org.gradle.api.tasks.testing.logging.TestLogEvent
|
||||||
import java.io.IOException
|
|
||||||
import java.net.URI
|
|
||||||
import java.nio.file.FileVisitResult
|
|
||||||
import java.nio.file.Files
|
|
||||||
import java.nio.file.SimpleFileVisitor
|
|
||||||
import kotlin.io.path.*
|
|
||||||
import java.nio.file.Path
|
|
||||||
import kotlin.random.Random
|
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("io.papermc.paperweight.core") version "2.0.0-beta.16" apply false
|
id("io.papermc.paperweight.core") version "2.0.0-beta.16" apply false
|
||||||
@ -82,248 +72,3 @@ tasks.register("printPaperVersion") {
|
|||||||
println(paperVersion.get())
|
println(paperVersion.get())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// Used when updating to a new Minecraft version
|
|
||||||
tasks.register("pickUpdateDirectory") {
|
|
||||||
val issue = providers.gradleProperty("updateTaskListIssue").get()
|
|
||||||
val patchesFolder = layout.projectDirectory.dir("paper-server/patches/").convertToPath()
|
|
||||||
val storage = layout.cache.resolve("last-updating-folder").also { it.parent.createDirectories() }
|
|
||||||
|
|
||||||
doLast {
|
|
||||||
val html = URI(issue).toURL().readText()
|
|
||||||
|
|
||||||
val beginMarker = "```[tasklist]"
|
|
||||||
val start = html.indexOf(beginMarker)
|
|
||||||
val end = html.indexOf("```", start + beginMarker.length)
|
|
||||||
val taskList = html.substring(start + beginMarker.length, end)
|
|
||||||
|
|
||||||
// Extract all incomplete tasks and select a random one
|
|
||||||
val incompleteTasks = taskList.split("\\n").filter { it.startsWith("- [ ]") }.map { it.replace("- [ ] ", "") }
|
|
||||||
if (incompleteTasks.isEmpty()) {
|
|
||||||
error("No incomplete tasks found in the task list.")
|
|
||||||
}
|
|
||||||
|
|
||||||
val next = incompleteTasks[Random.nextInt(incompleteTasks.size)]
|
|
||||||
|
|
||||||
println("checking out $next...")
|
|
||||||
val dir = patchesFolder.resolve("unapplied").resolve(next)
|
|
||||||
if (!dir.exists()) {
|
|
||||||
error("Unapplied patch folder $next does not exist, did someone else already check it out and forgot to mark it?")
|
|
||||||
}
|
|
||||||
dir.listDirectoryEntries("*.patch").forEach { patch ->
|
|
||||||
patch.copyTo(patchesFolder.resolve("sources").resolve(next).resolve(patch.fileName).also { it.createDirectories() }, overwrite = true)
|
|
||||||
patch.deleteIfExists()
|
|
||||||
}
|
|
||||||
if (dir.listDirectoryEntries().isEmpty()) {
|
|
||||||
dir.deleteIfExists()
|
|
||||||
}
|
|
||||||
|
|
||||||
storage.writeText(next)
|
|
||||||
println("please tick the box in the issue: $issue")
|
|
||||||
println("if you don't finish it, uncheck the task again after you commited")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register("showUpdateDirectories") {
|
|
||||||
val patchDir = layout.projectDirectory.dir("paper-server/patches/unapplied/").convertToPath()
|
|
||||||
|
|
||||||
doLast {
|
|
||||||
Files.walkFileTree(patchDir, object : SimpleFileVisitor<Path>() {
|
|
||||||
override fun postVisitDirectory(dir: Path?, exc: IOException?): FileVisitResult {
|
|
||||||
dir?.takeIf { it.listDirectoryEntries("*.patch").isNotEmpty() }?.let {
|
|
||||||
println("- [ ] ${patchDir.relativize(it).pathString.replace("\\", "/")}")
|
|
||||||
}
|
|
||||||
return FileVisitResult.CONTINUE
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register("moveUpdateDirectory") {
|
|
||||||
notCompatibleWithConfigurationCache("This task is interactive")
|
|
||||||
fun expandUserHome(path: String): Path {
|
|
||||||
return Path.of(path.replaceFirst("^~".toRegex(), System.getProperty("user.home")))
|
|
||||||
}
|
|
||||||
|
|
||||||
val input = providers.fileContents(layout.projectDirectory.file("$CACHE_PATH/last-updating-folder")).asText.map { it.trim() }
|
|
||||||
val patchFolder = layout.projectDirectory.dir("paper-server/patches/sources").dir(input)
|
|
||||||
val sourceFolder = layout.projectDirectory.dir("paper-server/src/minecraft/java").dir(input)
|
|
||||||
val targetFolder = providers.gradleProperty("cleanPaperRepo").map {
|
|
||||||
expandUserHome(it).resolve(input.get())
|
|
||||||
}
|
|
||||||
|
|
||||||
fun copy(back: Boolean = false) {
|
|
||||||
patchFolder.path.listDirectoryEntries().forEach {
|
|
||||||
val relative = patchFolder.path.relativize(it).toString().replace(".patch", "")
|
|
||||||
val source = sourceFolder.path.resolve(relative)
|
|
||||||
val target = targetFolder.get().resolve(relative)
|
|
||||||
if (target.isDirectory()) { return@forEach }
|
|
||||||
if (back) {
|
|
||||||
target.copyTo(source, overwrite = true)
|
|
||||||
} else {
|
|
||||||
source.copyTo(target, overwrite = true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
doLast {
|
|
||||||
if (!targetFolder.isPresent) {
|
|
||||||
error("cleanPaperRepo is required, define it in gradle.properties")
|
|
||||||
}
|
|
||||||
copy()
|
|
||||||
val files = patchFolder.path.listDirectoryEntries().map { it.fileName.toString().replace(".patch", "") }
|
|
||||||
println("Copied $files from $sourceFolder to $targetFolder")
|
|
||||||
println("Make the files compile, then press enter to copy them back!")
|
|
||||||
System.`in`.read()
|
|
||||||
copy(back = true)
|
|
||||||
println("copied back!")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// see gradle.properties
|
|
||||||
if (providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean()) {
|
|
||||||
tasks.collectAtsFromPatches {
|
|
||||||
val dir = layout.projectDirectory.dir("patches/unapplied/server")
|
|
||||||
if (dir.path.isDirectory()) {
|
|
||||||
extraPatchDir = dir
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tasks.withType<io.papermc.paperweight.tasks.RebuildGitPatches>().configureEach {
|
|
||||||
filterPatches = false
|
|
||||||
}
|
|
||||||
tasks.register("continueServerUpdate", RebasePatches::class) {
|
|
||||||
description = "Moves the next X patches from unapplied to applied, and applies them. X being the number of patches that apply cleanly, plus the terminal failure if any."
|
|
||||||
projectDir = project.projectDir
|
|
||||||
appliedPatches = file("patches/server")
|
|
||||||
unappliedPatches = file("patches/unapplied/server")
|
|
||||||
applyTaskName = "applyServerPatches"
|
|
||||||
patchedDir = "Paper-Server"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@UntrackedTask(because = "Does not make sense to track state")
|
|
||||||
abstract class RebasePatches : BaseTask() {
|
|
||||||
@get:Internal
|
|
||||||
abstract val projectDir: DirectoryProperty
|
|
||||||
|
|
||||||
@get:InputFiles
|
|
||||||
abstract val appliedPatches: DirectoryProperty
|
|
||||||
|
|
||||||
@get:InputFiles
|
|
||||||
abstract val unappliedPatches: DirectoryProperty
|
|
||||||
|
|
||||||
@get:Input
|
|
||||||
abstract val applyTaskName: Property<String>
|
|
||||||
|
|
||||||
@get:Input
|
|
||||||
abstract val patchedDir: Property<String>
|
|
||||||
|
|
||||||
private fun unapplied(): List<Path> =
|
|
||||||
unappliedPatches.path.listDirectoryEntries("*.patch").sortedBy { it.name }
|
|
||||||
|
|
||||||
private fun appliedLoc(patch: Path): Path = appliedPatches.path.resolve(unappliedPatches.path.relativize(patch))
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
val regex = Pattern.compile("Patch failed at ([0-9]{4}) (.*)")
|
|
||||||
val continuationRegex = Pattern.compile("^\\s{1}.+\$")
|
|
||||||
const val subjectPrefix = "Subject: [PATCH] "
|
|
||||||
}
|
|
||||||
|
|
||||||
@TaskAction
|
|
||||||
fun run() {
|
|
||||||
val patchedDirPath = projectDir.path.resolve(patchedDir.get())
|
|
||||||
if (patchedDirPath.isDirectory()) {
|
|
||||||
val status = Git(patchedDirPath)("status").getText()
|
|
||||||
if (status.contains("You are in the middle of an am session.")) {
|
|
||||||
throw PaperweightException("Cannot continue update when $patchedDirPath is in the middle of an am session.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val unapplied = unapplied()
|
|
||||||
for (patch in unapplied) {
|
|
||||||
patch.copyTo(appliedLoc(patch))
|
|
||||||
}
|
|
||||||
|
|
||||||
val out = ByteArrayOutputStream()
|
|
||||||
val proc = ProcessBuilder()
|
|
||||||
.directory(projectDir.path)
|
|
||||||
.command("./gradlew", applyTaskName.get())
|
|
||||||
.redirectErrorStream(true)
|
|
||||||
.start()
|
|
||||||
|
|
||||||
val f = redirect(proc.inputStream, out)
|
|
||||||
|
|
||||||
val exit = proc.waitFor()
|
|
||||||
f.get()
|
|
||||||
|
|
||||||
if (exit != 0) {
|
|
||||||
val outStr = String(out.toByteArray())
|
|
||||||
val matcher = regex.matcher(outStr)
|
|
||||||
if (!matcher.find()) error("Could not determine failure point")
|
|
||||||
val failedSubjectFragment = matcher.group(2)
|
|
||||||
val failed = unapplied.single { p ->
|
|
||||||
p.useLines { lines ->
|
|
||||||
val collect = mutableListOf<String>()
|
|
||||||
for (line in lines) {
|
|
||||||
if (line.startsWith(subjectPrefix)) {
|
|
||||||
collect += line
|
|
||||||
} else if (collect.size == 1) {
|
|
||||||
if (continuationRegex.matcher(line).matches()) {
|
|
||||||
collect += line
|
|
||||||
} else {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val subjectLine = collect.joinToString("").substringAfter(subjectPrefix)
|
|
||||||
subjectLine.startsWith(failedSubjectFragment)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// delete successful & failure point from unapplied patches dir
|
|
||||||
for (path in unapplied) {
|
|
||||||
path.deleteIfExists()
|
|
||||||
if (path == failed) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// delete failed from patches dir
|
|
||||||
var started = false
|
|
||||||
for (path in unapplied) {
|
|
||||||
if (path == failed) {
|
|
||||||
started = true
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if (started) {
|
|
||||||
appliedLoc(path).deleteIfExists()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete the build file before resetting the AM session in case it has compilation errors
|
|
||||||
patchedDirPath.resolve("build.gradle.kts").deleteIfExists()
|
|
||||||
// Apply again to reset the am session (so it ends on the failed patch, to allow us to rebuild after fixing it)
|
|
||||||
val apply2 = ProcessBuilder()
|
|
||||||
.directory(projectDir.path)
|
|
||||||
.command("./gradlew", applyTaskName.get())
|
|
||||||
.redirectErrorStream(true)
|
|
||||||
.start()
|
|
||||||
|
|
||||||
val f1 = redirect(apply2.inputStream, System.out)
|
|
||||||
apply2.waitFor()
|
|
||||||
f1.get()
|
|
||||||
|
|
||||||
logger.lifecycle(outStr)
|
|
||||||
logger.lifecycle("Patch failed at $failed; See Git output above.")
|
|
||||||
} else {
|
|
||||||
unapplied.forEach { it.deleteIfExists() }
|
|
||||||
logger.lifecycle("All patches applied!")
|
|
||||||
}
|
|
||||||
|
|
||||||
val git = Git(projectDir.path)
|
|
||||||
git("add", appliedPatches.path.toString() + "/*").runSilently()
|
|
||||||
git("add", unappliedPatches.path.toString() + "/*").runSilently()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
@ -9,13 +9,13 @@ java {
|
|||||||
withJavadocJar()
|
withJavadocJar()
|
||||||
}
|
}
|
||||||
|
|
||||||
val annotationsVersion = "26.0.1"
|
val annotationsVersion = "26.0.2"
|
||||||
// Keep in sync with paper-server adventure-text-serializer-ansi dep
|
// Keep in sync with paper-server adventure-text-serializer-ansi dep
|
||||||
val adventureVersion = "4.21.0-mc1215-SNAPSHOT" // FIXME move to release asap
|
val adventureVersion = "4.21.0-mc1215-SNAPSHOT" // FIXME move to release asap
|
||||||
val adventureJavadocVersion = "4.20.0" // Fixme remove me
|
val adventureJavadocVersion = "4.20.0" // Fixme remove me
|
||||||
val bungeeCordChatVersion = "1.21-R0.2-deprecated+build.21"
|
val bungeeCordChatVersion = "1.21-R0.2-deprecated+build.21"
|
||||||
val slf4jVersion = "2.0.9"
|
val slf4jVersion = "2.0.16"
|
||||||
val log4jVersion = "2.17.1"
|
val log4jVersion = "2.24.1"
|
||||||
|
|
||||||
val apiAndDocs: Configuration by configurations.creating {
|
val apiAndDocs: Configuration by configurations.creating {
|
||||||
attributes {
|
attributes {
|
||||||
@ -41,7 +41,6 @@ abstract class MockitoAgentProvider : CommandLineArgumentProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
// api dependencies are listed transitively to API consumers
|
// api dependencies are listed transitively to API consumers
|
||||||
api("com.google.guava:guava:33.3.1-jre")
|
api("com.google.guava:guava:33.3.1-jre")
|
||||||
api("com.google.code.gson:gson:2.11.0")
|
api("com.google.code.gson:gson:2.11.0")
|
||||||
@ -49,9 +48,6 @@ dependencies {
|
|||||||
api("org.joml:joml:1.10.8") {
|
api("org.joml:joml:1.10.8") {
|
||||||
isTransitive = false // https://github.com/JOML-CI/JOML/issues/352
|
isTransitive = false // https://github.com/JOML-CI/JOML/issues/352
|
||||||
}
|
}
|
||||||
api("com.googlecode.json-simple:json-simple:1.1.1") {
|
|
||||||
isTransitive = false // includes junit
|
|
||||||
}
|
|
||||||
api("it.unimi.dsi:fastutil:8.5.15")
|
api("it.unimi.dsi:fastutil:8.5.15")
|
||||||
api("org.apache.logging.log4j:log4j-api:$log4jVersion")
|
api("org.apache.logging.log4j:log4j-api:$log4jVersion")
|
||||||
api("org.slf4j:slf4j-api:$slf4jVersion")
|
api("org.slf4j:slf4j-api:$slf4jVersion")
|
||||||
@ -81,18 +77,18 @@ dependencies {
|
|||||||
compileOnly(annotations)
|
compileOnly(annotations)
|
||||||
testCompileOnly(annotations)
|
testCompileOnly(annotations)
|
||||||
|
|
||||||
val checkerQual = "org.checkerframework:checker-qual:3.33.0"
|
val checkerQual = "org.checkerframework:checker-qual:3.49.2"
|
||||||
compileOnlyApi(checkerQual)
|
compileOnlyApi(checkerQual)
|
||||||
testCompileOnly(checkerQual)
|
testCompileOnly(checkerQual)
|
||||||
|
|
||||||
api("org.jspecify:jspecify:1.0.0")
|
api("org.jspecify:jspecify:1.0.0")
|
||||||
|
|
||||||
// Test dependencies
|
// Test dependencies
|
||||||
testImplementation("org.apache.commons:commons-lang3:3.12.0")
|
testImplementation("org.apache.commons:commons-lang3:3.17.0")
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
|
testImplementation("org.junit.jupiter:junit-jupiter:5.12.2")
|
||||||
testImplementation("org.hamcrest:hamcrest:2.2")
|
testImplementation("org.hamcrest:hamcrest:2.2")
|
||||||
testImplementation("org.mockito:mockito-core:5.14.1")
|
testImplementation("org.mockito:mockito-core:5.14.1")
|
||||||
testImplementation("org.ow2.asm:asm-tree:9.7.1")
|
testImplementation("org.ow2.asm:asm-tree:9.8")
|
||||||
mockitoAgent("org.mockito:mockito-core:5.14.1") { isTransitive = false } // configure mockito agent that is needed in newer java versions
|
mockitoAgent("org.mockito:mockito-core:5.14.1") { isTransitive = false } // configure mockito agent that is needed in newer java versions
|
||||||
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
|
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
|
||||||
}
|
}
|
||||||
|
@ -144,35 +144,37 @@ dependencies {
|
|||||||
all its classes to check if they are plugins.
|
all its classes to check if they are plugins.
|
||||||
Scanning takes about 1-2 seconds so adding this speeds up the server start.
|
Scanning takes about 1-2 seconds so adding this speeds up the server start.
|
||||||
*/
|
*/
|
||||||
implementation("org.apache.logging.log4j:log4j-core:2.19.0")
|
implementation("org.apache.logging.log4j:log4j-core:2.24.1")
|
||||||
log4jPlugins.annotationProcessorConfigurationName("org.apache.logging.log4j:log4j-core:2.19.0") // Needed to generate meta for our Log4j plugins
|
log4jPlugins.annotationProcessorConfigurationName("org.apache.logging.log4j:log4j-core:2.24.1") // Needed to generate meta for our Log4j plugins
|
||||||
runtimeOnly(log4jPlugins.output)
|
runtimeOnly(log4jPlugins.output)
|
||||||
alsoShade(log4jPlugins.output)
|
alsoShade(log4jPlugins.output)
|
||||||
|
|
||||||
implementation("com.velocitypowered:velocity-native:3.4.0-SNAPSHOT") {
|
implementation("com.velocitypowered:velocity-native:3.4.0-SNAPSHOT") {
|
||||||
isTransitive = false
|
isTransitive = false
|
||||||
}
|
}
|
||||||
implementation("io.netty:netty-codec-haproxy:4.1.115.Final") // Add support for proxy protocol
|
implementation("io.netty:netty-codec-haproxy:4.1.118.Final") // Add support for proxy protocol
|
||||||
implementation("org.apache.logging.log4j:log4j-iostreams:2.24.1")
|
implementation("org.apache.logging.log4j:log4j-iostreams:2.24.1")
|
||||||
implementation("org.ow2.asm:asm-commons:9.7.1")
|
implementation("org.ow2.asm:asm-commons:9.8")
|
||||||
implementation("org.spongepowered:configurate-yaml:4.2.0-20250225.064233-199")
|
implementation("org.spongepowered:configurate-yaml:4.2.0-20250225.064233-199")
|
||||||
implementation("org.spongepowered:configurate-core:4.2.0-20250225.064233-204") // Pinned dependency of above pinned yaml snapshot.
|
implementation("org.spongepowered:configurate-core:4.2.0-20250225.064233-204") // Pinned dependency of above pinned yaml snapshot.
|
||||||
implementation("commons-lang:commons-lang:2.6")
|
|
||||||
runtimeOnly("org.xerial:sqlite-jdbc:3.47.0.0")
|
// Deps that were previously in the API but have now been moved here for backwards compat, eventually to be removed
|
||||||
runtimeOnly("com.mysql:mysql-connector-j:9.1.0")
|
runtimeOnly("commons-lang:commons-lang:2.6")
|
||||||
|
runtimeOnly("org.xerial:sqlite-jdbc:3.49.1.0")
|
||||||
|
runtimeOnly("com.mysql:mysql-connector-j:9.2.0")
|
||||||
runtimeOnly("com.lmax:disruptor:3.4.4")
|
runtimeOnly("com.lmax:disruptor:3.4.4")
|
||||||
|
|
||||||
runtimeOnly("org.apache.maven:maven-resolver-provider:3.9.6")
|
runtimeOnly("org.apache.maven:maven-resolver-provider:3.9.6")
|
||||||
runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18")
|
runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18")
|
||||||
runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18")
|
runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18")
|
||||||
|
|
||||||
testImplementation("io.github.classgraph:classgraph:4.8.47") // For mob goal test
|
testImplementation("io.github.classgraph:classgraph:4.8.179") // For mob goal test
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
|
testImplementation("org.junit.jupiter:junit-jupiter:5.12.2")
|
||||||
testImplementation("org.junit.platform:junit-platform-suite-engine:1.10.0")
|
testImplementation("org.junit.platform:junit-platform-suite-engine:1.12.2")
|
||||||
testImplementation("org.hamcrest:hamcrest:2.2")
|
testImplementation("org.hamcrest:hamcrest:2.2")
|
||||||
testImplementation("org.mockito:mockito-core:5.14.1")
|
testImplementation("org.mockito:mockito-core:5.14.1")
|
||||||
mockitoAgent("org.mockito:mockito-core:5.14.1") { isTransitive = false } // Configure mockito agent that is needed in newer java versions
|
mockitoAgent("org.mockito:mockito-core:5.14.1") { isTransitive = false } // Configure mockito agent that is needed in newer java versions
|
||||||
testImplementation("org.ow2.asm:asm-tree:9.7.1")
|
testImplementation("org.ow2.asm:asm-tree:9.8")
|
||||||
testImplementation("org.junit-pioneer:junit-pioneer:2.2.0") // CartesianTest
|
testImplementation("org.junit-pioneer:junit-pioneer:2.2.0") // CartesianTest
|
||||||
|
|
||||||
implementation("net.neoforged:srgutils:1.0.9") // Mappings handling
|
implementation("net.neoforged:srgutils:1.0.9") // Mappings handling
|
||||||
|
@ -3,7 +3,7 @@ package io.papermc.paper.util;
|
|||||||
import com.sun.security.auth.module.NTSystem;
|
import com.sun.security.auth.module.NTSystem;
|
||||||
import com.sun.security.auth.module.UnixSystem;
|
import com.sun.security.auth.module.UnixSystem;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import org.apache.commons.lang.SystemUtils;
|
import org.apache.commons.lang3.SystemUtils;
|
||||||
|
|
||||||
public class ServerEnvironment {
|
public class ServerEnvironment {
|
||||||
private static final boolean RUNNING_AS_ROOT_OR_ADMIN;
|
private static final boolean RUNNING_AS_ROOT_OR_ADMIN;
|
||||||
|
@ -20,7 +20,7 @@ import java.util.stream.Collectors;
|
|||||||
import net.minecraft.Util;
|
import net.minecraft.Util;
|
||||||
import net.minecraft.server.dedicated.DedicatedServer;
|
import net.minecraft.server.dedicated.DedicatedServer;
|
||||||
import net.minecraft.world.item.component.ResolvableProfile;
|
import net.minecraft.world.item.component.ResolvableProfile;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.configuration.serialization.SerializableAs;
|
import org.bukkit.configuration.serialization.SerializableAs;
|
||||||
import org.bukkit.craftbukkit.CraftServer;
|
import org.bukkit.craftbukkit.CraftServer;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user