summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSho Sakuma <me@m1sk9.dev>2026-02-23 17:48:34 +0900
committerGitHub <noreply@github.com>2026-02-23 17:48:34 +0900
commit59a7e742fe52afba246ff2e4dce9753dd1468e05 (patch)
tree14f9d9c9e2ed3e26e63efd709b81f3af6c7291ef
parent2513c22f3bfb188df3f8d467f7ad8e47eda8b429 (diff)
parentb56034e18739653f87d0663f26a4b231de067ced (diff)
downloadLunaticChat-59a7e742fe52afba246ff2e4dce9753dd1468e05.tar.gz
LunaticChat-59a7e742fe52afba246ff2e4dce9753dd1468e05.tar.bz2
LunaticChat-59a7e742fe52afba246ff2e4dce9753dd1468e05.zip
Merge pull request #114 from m1sk9/feat/folia-support
feat: Add Folia Support
-rw-r--r--.github/workflows/ci.yaml2
-rw-r--r--.github/workflows/release.yaml23
-rw-r--r--CHANGELOG.md4
-rw-r--r--build.gradle.kts2
-rw-r--r--docker/folia/.gitignore1
-rw-r--r--docker/folia/bukkit.yml (renamed from docker/bukkit.yml)0
-rw-r--r--docker/folia/compose.yaml47
-rw-r--r--docker/velocity/.gitignore (renamed from docker/.gitignore)0
-rw-r--r--docker/velocity/bukkit.yml43
-rw-r--r--docker/velocity/compose.yaml (renamed from docker/compose.yaml)0
-rw-r--r--docker/velocity/paper-global.yml (renamed from docker/paper-global.yml)0
-rw-r--r--docker/velocity/velocity.toml (renamed from docker/velocity.toml)0
-rw-r--r--platform-paper/build.gradle.kts2
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/ServiceInitializer.kt25
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/chat/channel/ChannelMessageLogger.kt50
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/chat/channel/ChannelStorage.kt19
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/ConversionCache.kt9
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/settings/YamlPlayerSettingsStorage.kt9
-rw-r--r--platform-paper/src/main/resources/paper-plugin.yml1
-rwxr-xr-xx99
20 files changed, 258 insertions, 78 deletions
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 455fb25..5ddd4d4 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -52,7 +52,7 @@ jobs:
with:
name: LunaticChat-${{ github.sha }}
path: |
- platform-paper/build/libs/LunaticChat-*-paper.jar
+ platform-paper/build/libs/LunaticChat-*.jar
platform-velocity/build/libs/LunaticChat-*-velocity.jar
retention-days: 7
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index e94cfff..1fd9f27 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -12,6 +12,7 @@ jobs:
version: ${{ steps.get_version.outputs.version }}
paper_jar_name: ${{ steps.get_version.outputs.paper_jar_name }}
velocity_jar_name: ${{ steps.get_version.outputs.velocity_jar_name }}
+ folia_jar_name: ${{ steps.get_version.outputs.folia_jar_name }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
@@ -21,8 +22,9 @@ jobs:
run: |
VERSION=$(grep ' version = ' build.gradle.kts | sed 's/.*version = "\(.*\)"/\1/')
echo "version=$VERSION" >> $GITHUB_OUTPUT
- echo "paper_jar_name=LunaticChat-$VERSION-paper.jar" >> $GITHUB_OUTPUT
+ echo "paper_jar_name=LunaticChat-$VERSION.jar" >> $GITHUB_OUTPUT
echo "velocity_jar_name=LunaticChat-$VERSION-velocity.jar" >> $GITHUB_OUTPUT
+ echo "folia_jar_name=LunaticChat-$VERSION.jar" >> $GITHUB_OUTPUT
echo "Extracted version: $VERSION"
- name: Validate tag matches version
@@ -83,6 +85,7 @@ jobs:
env:
MODRINTH_CHANNEL: beta
MODRINTH_GAME_VERSIONS: "1.21.x"
+ MODRINTH_MC_VERSION: "1.21.11"
steps:
- name: Checkout repository
uses: actions/checkout@v6
@@ -116,7 +119,7 @@ jobs:
uses: cloudnode-pro/modrinth-publish@0a5268ad092d4727bb6424326746fa2fe88761ff # v2
with:
token: ${{ secrets.MODRINTH_TOKEN }}
- name: v${{ needs.validate.outputs.version }} (Paper v${{ env.MODRINTH_GAME_VERSIONS }})
+ name: v${{ needs.validate.outputs.version }} (Paper v${{ env.MODRINTH_MC_VERSION }})
project: ${{ secrets.MODRINTH_PROJECT_ID }}
version: ${{ needs.validate.outputs.version }}-paper
channel: ${{ env.MODRINTH_CHANNEL }}
@@ -126,11 +129,25 @@ jobs:
game-versions: ${{ env.MODRINTH_GAME_VERSIONS }}
files: platform-paper/build/libs/${{ needs.validate.outputs.paper_jar_name }}
+ - name: Publish to Modrinth (Folia)
+ uses: cloudnode-pro/modrinth-publish@0a5268ad092d4727bb6424326746fa2fe88761ff # v2
+ with:
+ token: ${{ secrets.MODRINTH_TOKEN }}
+ name: v${{ needs.validate.outputs.version }} (Folia v${{ env.MODRINTH_MC_VERSION }})
+ project: ${{ secrets.MODRINTH_PROJECT_ID }}
+ version: ${{ needs.validate.outputs.version }}-folia
+ channel: ${{ env.MODRINTH_CHANNEL }}
+ changelog: |-
+ Please refer to the [GitHub release](https://github.com/m1sk9/LunaticChat/releases/tag/v${{ needs.validate.outputs.version }}) for update details.
+ loaders: folia
+ game-versions: ${{ env.MODRINTH_GAME_VERSIONS }}
+ files: platform-paper/build/libs/${{ needs.validate.outputs.folia_jar_name }}
+
- name: Publish to Modrinth (Velocity)
uses: cloudnode-pro/modrinth-publish@0a5268ad092d4727bb6424326746fa2fe88761ff # v2
with:
token: ${{ secrets.MODRINTH_TOKEN }}
- name: v${{ needs.validate.outputs.version }} (Velocity v${{ env.MODRINTH_GAME_VERSIONS }})
+ name: v${{ needs.validate.outputs.version }} (Velocity)
project: ${{ secrets.MODRINTH_PROJECT_ID }}
version: ${{ needs.validate.outputs.version }}-velocity
channel: ${{ env.MODRINTH_CHANNEL }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ae9a946..b1f50b1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
## v0
+### v0.10.0
+
+- Added support for Folia 1.21 and later.
+
### v0.9.1
- Fixed an issue where update notification messages were not formatted correctly.
diff --git a/build.gradle.kts b/build.gradle.kts
index 7d52e10..36906c9 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -13,7 +13,7 @@ plugins {
allprojects {
group = "dev.m1sk9"
- version = "0.9.1"
+ version = "0.10.0"
repositories {
mavenCentral()
diff --git a/docker/folia/.gitignore b/docker/folia/.gitignore
new file mode 100644
index 0000000..16873f6
--- /dev/null
+++ b/docker/folia/.gitignore
@@ -0,0 +1 @@
+plugins/
diff --git a/docker/bukkit.yml b/docker/folia/bukkit.yml
index 2f44ae9..2f44ae9 100644
--- a/docker/bukkit.yml
+++ b/docker/folia/bukkit.yml
diff --git a/docker/folia/compose.yaml b/docker/folia/compose.yaml
new file mode 100644
index 0000000..dd3f38c
--- /dev/null
+++ b/docker/folia/compose.yaml
@@ -0,0 +1,47 @@
+services:
+ folia:
+ image: itzg/minecraft-server:java21
+ container_name: debug-folia
+ ports:
+ - "25565:25565"
+ - "25575:25575"
+ volumes:
+ - lunatic-debug-folia-data:/data
+ - ./plugins:/data/plugins
+ - ./bukkit.yml:/data/bukkit.yml
+ environment:
+ EULA: "TRUE"
+ TYPE: "FOLIA"
+ VERSION: "1.21.11"
+ MEMORY: "2G"
+
+ # デバッグ用高速化設定
+ LEVEL_TYPE: "flat"
+ VIEW_DISTANCE: "3"
+ SIMULATION_DISTANCE: "3"
+ GENERATE_STRUCTURES: "false"
+ SPAWN_PROTECTION: "0"
+ ALLOW_NETHER: "false"
+
+ # 権限関連
+ OVERRIDE_SERVER_PROPERTIES: "true"
+
+ ENABLE_RCON: "true"
+ RCON_PASSWORD: "minecraft"
+ RCON_PORT: 25575
+
+ DIFFICULTY: "peaceful"
+ MAX_PLAYERS: "3"
+ ONLINE_MODE: "false"
+ SYNC_SKIP_NEWER_IN_DESTINATION: "false"
+ healthcheck:
+ test: mc-health
+ start_period: 90s
+ interval: 10s
+ timeout: 5s
+ retries: 3
+ tty: true
+ stdin_open: true
+
+volumes:
+ lunatic-debug-folia-data:
diff --git a/docker/.gitignore b/docker/velocity/.gitignore
index 4c0fc30..4c0fc30 100644
--- a/docker/.gitignore
+++ b/docker/velocity/.gitignore
diff --git a/docker/velocity/bukkit.yml b/docker/velocity/bukkit.yml
new file mode 100644
index 0000000..2f44ae9
--- /dev/null
+++ b/docker/velocity/bukkit.yml
@@ -0,0 +1,43 @@
+# This is the Bukkit configuration file in Paper.
+# As you can see, there's actually not that much to configure without any plugins.
+#
+# If you need help with the configuration or have any questions related to Paper,
+# join us in our Discord or check the docs page.
+#
+# File Reference: https://docs.papermc.io/paper/reference/bukkit-configuration/
+# Docs: https://docs.papermc.io/
+# Discord: https://discord.gg/papermc
+# Website: https://papermc.io/
+
+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
+settings:
+ warn-on-overload: true
+ permissions-file: permissions.yml
+ update-folder: update
+ plugin-profiling: false
+ connection-throttle: 4000
+ query-plugins: true
+ deprecated-verbose: default
+ shutdown-message: Server closed
+ minimum-api: none
+ use-map-color-cache: true
+ allow-end: false
diff --git a/docker/compose.yaml b/docker/velocity/compose.yaml
index 2f3d5c9..2f3d5c9 100644
--- a/docker/compose.yaml
+++ b/docker/velocity/compose.yaml
diff --git a/docker/paper-global.yml b/docker/velocity/paper-global.yml
index 4c01c4e..4c01c4e 100644
--- a/docker/paper-global.yml
+++ b/docker/velocity/paper-global.yml
diff --git a/docker/velocity.toml b/docker/velocity/velocity.toml
index 1b5b374..1b5b374 100644
--- a/docker/velocity.toml
+++ b/docker/velocity/velocity.toml
diff --git a/platform-paper/build.gradle.kts b/platform-paper/build.gradle.kts
index 972cce3..18eaf0f 100644
--- a/platform-paper/build.gradle.kts
+++ b/platform-paper/build.gradle.kts
@@ -29,7 +29,7 @@ dependencies {
tasks {
shadowJar {
- archiveClassifier.set("paper")
+ archiveClassifier.set("")
archiveBaseName.set("LunaticChat")
}
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/ServiceInitializer.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/ServiceInitializer.kt
index 0af6ed8..73657a1 100644
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/ServiceInitializer.kt
+++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/ServiceInitializer.kt
@@ -23,6 +23,7 @@ import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerJoinEvent
import org.bukkit.plugin.java.JavaPlugin
+import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicBoolean
import java.util.logging.Logger
import kotlin.time.Duration.Companion.milliseconds
@@ -337,12 +338,13 @@ class ServiceInitializer(
// Only perform handshake once
if (!handshakeCompleted.getAndSet(true)) {
// Schedule handshake 1 second after first player joins
- plugin.server.scheduler.runTaskLater(
+ plugin.server.asyncScheduler.runDelayed(
plugin,
- Runnable {
+ {
performVelocityHandshake(event.player, manager)
},
- 20L,
+ 1,
+ TimeUnit.SECONDS,
)
}
}
@@ -408,17 +410,20 @@ class ServiceInitializer(
/**
* Schedules periodic tasks such as cache saving.
+ * Uses Folia-compatible AsyncScheduler API.
*/
fun schedulePeriodicTasks() {
if (configuration.features.japaneseConversion.enabled && conversionCache != null) {
- val saveInterval = configuration.features.japaneseConversion.cacheSaveIntervalSeconds * 20L
- plugin.server.scheduler.runTaskTimerAsynchronously(
+ val intervalSeconds =
+ configuration.features.japaneseConversion
+ .cacheSaveIntervalSeconds
+ .toLong()
+ plugin.server.asyncScheduler.runAtFixedRate(
plugin,
- Runnable {
- conversionCache?.saveToDisk()
- },
- saveInterval,
- saveInterval,
+ { conversionCache?.saveToDisk() },
+ intervalSeconds,
+ intervalSeconds,
+ TimeUnit.SECONDS,
)
}
}
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/chat/channel/ChannelMessageLogger.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/chat/channel/ChannelMessageLogger.kt
index 206968c..a100d93 100644
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/chat/channel/ChannelMessageLogger.kt
+++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/chat/channel/ChannelMessageLogger.kt
@@ -2,6 +2,7 @@ package dev.m1sk9.lunaticChat.paper.chat.channel
import dev.m1sk9.lunaticChat.engine.chat.channel.ChannelMessageLogEntry
import io.ktor.util.logging.Logger
+import io.papermc.paper.threadedregions.scheduler.ScheduledTask
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import org.bukkit.plugin.Plugin
@@ -13,6 +14,7 @@ import java.time.LocalDate
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter
import java.util.concurrent.ConcurrentLinkedQueue
+import java.util.concurrent.TimeUnit
import kotlin.io.path.deleteIfExists
import kotlin.io.path.fileSize
import kotlin.io.path.listDirectoryEntries
@@ -39,16 +41,16 @@ class ChannelMessageLogger(
) {
private val pendingEntries = ConcurrentLinkedQueue<ChannelMessageLogEntry>()
private val json = Json { encodeDefaults = true }
- private var flushTaskId: Int? = null
- private var cleanupTaskId: Int? = null
+ private var flushTask: ScheduledTask? = null
+ private var cleanupTask: ScheduledTask? = null
companion object {
private const val LOG_FILE_PREFIX = "channel-messages-"
private const val LOG_FILE_EXTENSION = ".json"
private val DATE_FORMATTER: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
- private const val FLUSH_INTERVAL_TICKS = 20L // 1 second
- private const val CLEANUP_INTERVAL_TICKS = 24 * 60 * 60 * 20L // 24 hours
- private const val CLEANUP_INITIAL_DELAY_TICKS = 5 * 60 * 20L // 5 minutes
+ private const val FLUSH_INTERVAL_SECONDS = 1L
+ private const val CLEANUP_INTERVAL_SECONDS = 24 * 60 * 60L // 24 hours
+ private const val CLEANUP_INITIAL_DELAY_SECONDS = 5 * 60L // 5 minutes
}
init {
@@ -74,20 +76,22 @@ class ChannelMessageLogger(
/**
* Schedules periodic flushing of pending log entries.
+ * Uses Folia-compatible AsyncScheduler API.
*/
private fun schedulePeriodicFlush() {
- flushTaskId =
- plugin.server.scheduler
- .runTaskTimerAsynchronously(
- plugin,
- Runnable { flushPendingEntries() },
- FLUSH_INTERVAL_TICKS,
- FLUSH_INTERVAL_TICKS,
- ).taskId
+ flushTask =
+ plugin.server.asyncScheduler.runAtFixedRate(
+ plugin,
+ { flushPendingEntries() },
+ FLUSH_INTERVAL_SECONDS,
+ FLUSH_INTERVAL_SECONDS,
+ TimeUnit.SECONDS,
+ )
}
/**
* Schedules periodic cleanup of old log files.
+ * Uses Folia-compatible AsyncScheduler API.
*/
private fun schedulePeriodicCleanup() {
if (retentionDays <= 0) {
@@ -95,14 +99,14 @@ class ChannelMessageLogger(
return
}
- cleanupTaskId =
- plugin.server.scheduler
- .runTaskTimerAsynchronously(
- plugin,
- Runnable { cleanupOldLogs(retentionDays) },
- CLEANUP_INITIAL_DELAY_TICKS,
- CLEANUP_INTERVAL_TICKS,
- ).taskId
+ cleanupTask =
+ plugin.server.asyncScheduler.runAtFixedRate(
+ plugin,
+ { cleanupOldLogs(retentionDays) },
+ CLEANUP_INITIAL_DELAY_SECONDS,
+ CLEANUP_INTERVAL_SECONDS,
+ TimeUnit.SECONDS,
+ )
logger.info("Scheduled log cleanup task (retention: $retentionDays days)")
}
@@ -159,8 +163,8 @@ class ChannelMessageLogger(
*/
fun shutdown() {
// Cancel scheduled tasks
- flushTaskId?.let { plugin.server.scheduler.cancelTask(it) }
- cleanupTaskId?.let { plugin.server.scheduler.cancelTask(it) }
+ flushTask?.cancel()
+ cleanupTask?.cancel()
// Flush remaining entries
flushPendingEntries()
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/chat/channel/ChannelStorage.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/chat/channel/ChannelStorage.kt
index 7176014..7a0c3c8 100644
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/chat/channel/ChannelStorage.kt
+++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/chat/channel/ChannelStorage.kt
@@ -84,16 +84,13 @@ class ChannelStorage(
* @throws ChannelStorageSaveException if there is an error saving the data.
*/
fun queueAsyncSave(data: ChannelData) {
- plugin.server.scheduler.runTaskAsynchronously(
- plugin,
- Runnable {
- try {
- saveToDisk(data)
- } catch (e: ChannelStorageSaveException) {
- logger.severe("Error saving channel data asynchronously: ${e.message}")
- e.printStackTrace()
- }
- },
- )
+ plugin.server.asyncScheduler.runNow(plugin) {
+ try {
+ saveToDisk(data)
+ } catch (e: ChannelStorageSaveException) {
+ logger.severe("Error saving channel data asynchronously: ${e.message}")
+ e.printStackTrace()
+ }
+ }
}
}
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/ConversionCache.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/ConversionCache.kt
index da79cfa..bab4e8d 100644
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/ConversionCache.kt
+++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/ConversionCache.kt
@@ -2,10 +2,10 @@ package dev.m1sk9.lunaticChat.paper.converter
import dev.m1sk9.lunaticChat.engine.converter.CacheData
import kotlinx.serialization.json.Json
-import org.bukkit.Bukkit
import org.bukkit.plugin.java.JavaPlugin
import java.nio.file.Path
import java.util.concurrent.ConcurrentHashMap
+import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicBoolean
import java.util.logging.Logger
import kotlin.io.path.bufferedReader
@@ -110,13 +110,14 @@ class ConversionCache(
private fun queueSaveToDisk() {
if (conversionSaveQueue.compareAndSet(false, true)) {
- Bukkit.getScheduler().runTaskLaterAsynchronously(
+ plugin.server.asyncScheduler.runDelayed(
plugin,
- Runnable {
+ {
conversionSaveQueue.set(false)
saveToDisk()
},
- 100L, // 5 seconds = 100 ticks
+ 5,
+ TimeUnit.SECONDS,
)
}
}
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/settings/YamlPlayerSettingsStorage.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/settings/YamlPlayerSettingsStorage.kt
index 0aa8eef..5a2c8e2 100644
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/settings/YamlPlayerSettingsStorage.kt
+++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/settings/YamlPlayerSettingsStorage.kt
@@ -2,9 +2,9 @@ package dev.m1sk9.lunaticChat.paper.settings
import com.charleskorn.kaml.Yaml
import dev.m1sk9.lunaticChat.engine.settings.PlayerSettingsData
-import org.bukkit.Bukkit
import org.bukkit.plugin.java.JavaPlugin
import java.nio.file.Path
+import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicBoolean
import java.util.logging.Logger
import kotlin.io.path.bufferedReader
@@ -87,13 +87,14 @@ class YamlPlayerSettingsStorage(
*/
fun queueAsyncSave(data: PlayerSettingsData) {
if (saveFlag.compareAndSet(false, true)) {
- Bukkit.getScheduler().runTaskLaterAsynchronously(
+ plugin.server.asyncScheduler.runDelayed(
plugin,
- Runnable {
+ {
saveFlag.set(false)
saveToDisk(data)
},
- 100L, // 5 seconds = 100 ticks
+ 5,
+ TimeUnit.SECONDS,
)
}
}
diff --git a/platform-paper/src/main/resources/paper-plugin.yml b/platform-paper/src/main/resources/paper-plugin.yml
index f8a804b..cd37c13 100644
--- a/platform-paper/src/main/resources/paper-plugin.yml
+++ b/platform-paper/src/main/resources/paper-plugin.yml
@@ -2,6 +2,7 @@ name: LunaticChat
version: ${version}
main: dev.m1sk9.lunaticChat.paper.LunaticChat
api-version: '1.21'
+folia-supported: true
prefix: LunaticChat
load: STARTUP
authors: [ m1sk9 ]
diff --git a/x b/x
index d8c998a..a52964c 100755
--- a/x
+++ b/x
@@ -2,51 +2,110 @@
set -e
-DOCKER_COMPOSE="docker compose -f docker/compose.yaml"
+DC_VELOCITY="docker compose -f docker/velocity/compose.yaml"
+DC_FOLIA="docker compose -f docker/folia/compose.yaml"
help() {
cat <<EOF
Usage: ./x <command> [options]
-Commands:
- start Build with gradlew and start docker compose
+Velocity environment (Paper s1 + s2 + Velocity proxy):
+ start Build Paper+Velocity and start all containers
start-s1 Build Paper and start only s1 container
restart Restart s1, s2 and velocity containers
- stop Stop docker compose
- clean Stop docker compose and remove volumes
+ stop Stop velocity environment
+ clean Stop velocity environment and remove volumes
rcon [server] Open rcon-cli for server container (default: s1)
Available servers: s1, s2
logs [server] Show server container logs (default: s1)
Available servers: s1, s2
- vlogs Show velocity container logs
+ vlogs Show velocity proxy container logs
+
+Folia environment (single Folia server):
+ folia start Build Paper and start Folia server
+ folia restart Restart Folia server
+ folia stop Stop Folia server
+ folia clean Stop Folia server and remove volumes
+ folia rcon Open rcon-cli for Folia server
+ folia logs Show Folia server logs
+
+General:
help Show this help message
EOF
}
+ensure_plugin_dir() {
+ mkdir -p "$1"
+}
+
+# --- Folia commands ---
+folia_cmd() {
+ case "${1:-}" in
+ start)
+ ./gradlew :platform-paper:clean :platform-paper:shadowJar
+ ensure_plugin_dir docker/folia/plugins
+ rm -f docker/folia/plugins/*.jar
+ cp platform-paper/build/libs/*.jar docker/folia/plugins/
+ $DC_FOLIA up
+ ;;
+ restart)
+ $DC_FOLIA restart folia
+ ;;
+ stop)
+ $DC_FOLIA down
+ ;;
+ clean)
+ $DC_FOLIA down -v
+ ;;
+ rcon)
+ $DC_FOLIA exec folia rcon-cli
+ ;;
+ logs)
+ $DC_FOLIA logs -f folia
+ ;;
+ *)
+ echo "Unknown folia command: ${1:-}"
+ echo ""
+ help
+ exit 1
+ ;;
+ esac
+}
+
+# --- Main ---
case "${1:-}" in
+ folia)
+ folia_cmd "${2:-}"
+ ;;
start)
./gradlew :platform-paper:clean :platform-paper:shadowJar :platform-velocity:clean :platform-velocity:shadowJar
- # Copy built JARs to plugin directories
- cp platform-paper/build/libs/*.jar docker/plugins-paper-s1/
- cp platform-paper/build/libs/*.jar docker/plugins-paper-s2/
- cp platform-velocity/build/libs/*.jar docker/plugins-velocity/
- $DOCKER_COMPOSE up
+ ensure_plugin_dir docker/velocity/plugins-paper-s1
+ ensure_plugin_dir docker/velocity/plugins-paper-s2
+ ensure_plugin_dir docker/velocity/plugins-velocity
+ rm -f docker/velocity/plugins-paper-s1/*.jar
+ rm -f docker/velocity/plugins-paper-s2/*.jar
+ rm -f docker/velocity/plugins-velocity/*.jar
+ cp platform-paper/build/libs/*.jar docker/velocity/plugins-paper-s1/
+ cp platform-paper/build/libs/*.jar docker/velocity/plugins-paper-s2/
+ cp platform-velocity/build/libs/*.jar docker/velocity/plugins-velocity/
+ $DC_VELOCITY up
;;
start-s1)
./gradlew :platform-paper:clean :platform-paper:shadowJar
- # Copy built JAR to s1 plugin directory
- cp platform-paper/build/libs/*.jar docker/plugins-paper-s1/
- $DOCKER_COMPOSE up s1
+ ensure_plugin_dir docker/velocity/plugins-paper-s1
+ rm -f docker/velocity/plugins-paper-s1/*.jar
+ cp platform-paper/build/libs/*.jar docker/velocity/plugins-paper-s1/
+ $DC_VELOCITY up s1
;;
restart)
- $DOCKER_COMPOSE restart s1 s2 velocity
+ $DC_VELOCITY restart s1 s2 velocity
;;
stop)
- $DOCKER_COMPOSE down
+ $DC_VELOCITY down
;;
clean)
- $DOCKER_COMPOSE down -v
+ $DC_VELOCITY down -v
;;
rcon)
SERVER="${2:-s1}"
@@ -54,7 +113,7 @@ case "${1:-}" in
echo "Error: Invalid server '$SERVER'. Available servers: s1, s2"
exit 1
fi
- $DOCKER_COMPOSE exec $SERVER rcon-cli
+ $DC_VELOCITY exec "$SERVER" rcon-cli
;;
logs)
SERVER="${2:-s1}"
@@ -62,10 +121,10 @@ case "${1:-}" in
echo "Error: Invalid server '$SERVER'. Available servers: s1, s2"
exit 1
fi
- $DOCKER_COMPOSE logs -f $SERVER
+ $DC_VELOCITY logs -f "$SERVER"
;;
vlogs)
- $DOCKER_COMPOSE logs -f velocity
+ $DC_VELOCITY logs -f velocity
;;
help|"")
help