Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
77f41e2
move world generation to SkeletonWorldGenerator and copy skeleton dat…
Cinnazeyy Jul 14, 2025
9263206
generate skeleton on startup if not exists.
Cinnazeyy Jul 14, 2025
573884f
save skeleton to generate level.dat and remove uid.dat for multiverse…
Cinnazeyy Jul 14, 2025
d0b8173
fix async issues and cleanup generation related classes
Cinnazeyy Jul 20, 2025
16f0b39
add util methods for passing up exceptions in bukkit scheduler
Cinnazeyy Aug 3, 2025
779b31a
- pass schematic bytes into generateOutlines method of PlotGenerators
Cinnazeyy Aug 7, 2025
337a972
Merge branch 'update/1.21-data-abstraction' into update/world-generat…
Cinnazeyy Aug 7, 2025
fb9fd47
feat(gen): ✨ update emptychunkgenerator and provide it outside of plugin
Zoriot Aug 25, 2025
a4af0e0
Merge remote-tracking branch 'origin/update/world-generation-rework' …
Cinnazeyy Sep 17, 2025
198e014
Implement plot abandon functionality in the PlotHandler and rework Pl…
Cinnazeyy Nov 1, 2025
a87a7e3
move world generation to SkeletonWorldGenerator and copy skeleton dat…
Cinnazeyy Jul 14, 2025
73e9def
generate skeleton on startup if not exists.
Cinnazeyy Jul 14, 2025
0783dc6
save skeleton to generate level.dat and remove uid.dat for multiverse…
Cinnazeyy Jul 14, 2025
6571670
fix async issues and cleanup generation related classes
Cinnazeyy Jul 20, 2025
030be1f
add util methods for passing up exceptions in bukkit scheduler
Cinnazeyy Aug 3, 2025
fc403d6
- pass schematic bytes into generateOutlines method of PlotGenerators
Cinnazeyy Aug 7, 2025
35931a8
feat(gen): ✨ update emptychunkgenerator and provide it outside of plugin
Zoriot Aug 25, 2025
91e97ad
Implement plot abandon functionality in the PlotHandler and rework Pl…
Cinnazeyy Nov 1, 2025
73db572
fix incorrectly rebased imports
Cinnazeyy Nov 1, 2025
54a8333
Merge remote-tracking branch 'origin/update/world-generation-rework' …
Cinnazeyy Nov 1, 2025
a53c9f7
Implement TutorialPlotLoader.java.
Cinnazeyy Nov 25, 2025
17a8376
remove unused imports
Cinnazeyy Nov 25, 2025
3ca8cb7
add nbt dependency to gradle for parity with maven
Dec 2, 2025
e669434
Merge remote-tracking branch 'origin/update/world-generation-rework' …
Dec 2, 2025
aa53fa3
Merge branch 'update/1.21-data-abstraction' into update/world-generat…
Dec 2, 2025
4a9a6ce
fix merging issues
Dec 2, 2025
ac9a97a
feat: ✨ Remove VoidGen dependency
Zoriot Feb 16, 2026
af3ccc7
Merge branch 'main' into update/world-generation-rework
Cinnazeyy Apr 8, 2026
f3cfdfc
fix merge conflicts and use new GameRules api
Cinnazeyy Apr 8, 2026
ddeb946
ensure AbstractPlotLoader.pasteSchematic is run in main thread when c…
Cinnazeyy Apr 9, 2026
75e066b
run thread unsafe methods in Companion menues in main thread
Cinnazeyy Apr 9, 2026
546f4c6
make sure onException feedback runs on mainthread
Cinnazeyy Apr 9, 2026
7c3c4f1
make the tutorial system run async when possible
Cinnazeyy Apr 9, 2026
9947a05
set fixed spawn location for EmptyChunkGenerator
Cinnazeyy Apr 9, 2026
96859ec
use DefaultPlotLoader for plots with no completed schematic
Cinnazeyy Apr 9, 2026
fefcd99
add restorePlotSlot method and no longer treat all slots occupied as …
Cinnazeyy May 6, 2026
ca92366
when freeing up a slot, check for orphans and assign if possible
Cinnazeyy May 11, 2026
d081f27
Merge remote-tracking branch 'origin/main' into update/world-generati…
Zoriot May 18, 2026
29b1c78
fix: plot world loading not running on main thread if called via Plot…
May 23, 2026
92913b0
fix: codacy best practice issue
May 23, 2026
0cf165f
Merge pull request #216 from AlpsBTE/fix/186-restore-slot
Zoriot May 27, 2026
b68a61f
Merge branch 'main' into update/world-generation-rework
Zoriot Jun 12, 2026
d119655
[WIP] feat: Support 26.1 world changes
Zoriot May 24, 2026
0021ab2
fix: handle Paper 26.1 world folder changes
Jun 8, 2026
ba40e77
fix(plot): Fix world ref when copy the completed schematic
Zoriot Jun 15, 2026
fa51b38
fix: Fully support only new world format (26.1+)
Zoriot Jun 20, 2026
20c4cc3
build(dependencies): update dependency versions for mc 26.1.2 and mig…
Zoriot Jun 20, 2026
e0d15cb
Merge pull request #223 from AlpsBTE/update/wgr-26.1-support
Zoriot Jun 20, 2026
8a9e180
feat(plot-utils): ✨ use AlpsLib MapLinks with configurable provider e…
Zoriot May 16, 2026
24fb16f
Merge pull request #224 from AlpsBTE/feat/configurable-links
Zoriot Jun 20, 2026
3eda352
fix: Switch to new keyed world structure
Zoriot Aug 25, 2026
e7d82b0
fix: Use Multiverse for skeleton world
Zoriot Aug 25, 2026
c0fc46f
Merge remote-tracking branch 'origin/main' into update/world-generati…
Zoriot Aug 25, 2026
7919385
fix(plot): make world generation lifecycle safe and asynchronous
Zoriot Aug 25, 2026
da58127
fix(plot): simplify schematic pasting mask logic
Zoriot Sep 3, 2026
339d69b
chore: Throw exception when plot is outside of supported range
Zoriot Sep 3, 2026
dc6140c
fix: Use world heights for checking plot height range
Zoriot Sep 3, 2026
80935a9
chore: Remove License notice from source files
Zoriot Sep 3, 2026
6bc1691
ci: Update crowdin workflows
Zoriot Sep 3, 2026
2726556
fix: Handle player passenger on teleport
Zoriot Sep 6, 2026
86488fd
fix: Handle nulls in last activity gracefully
Zoriot Sep 6, 2026
7313c20
fix(plot): keep plot world generation off the main thread
Zoriot Sep 6, 2026
32f5964
chore: Log Plot Id on Generation error
Zoriot Sep 7, 2026
928e841
Revert "chore: Throw exception when plot is outside of supported range"
Zoriot Sep 7, 2026
5bf4bc4
fix(plot): preserve existing plots during world recovery
Zoriot Sep 8, 2026
c9c9df4
refactor: modernize tutorial APIs and plot schematic saving
Zoriot Sep 8, 2026
01ad7a3
fix: adjust plot structure generation to handle plots with environments
LordTuxn Sep 12, 2026
7c8aaa9
fix: log world generation metrics only in dev mode
LordTuxn Sep 12, 2026
51d21ad
fix: normalize world name handling in config deletion
LordTuxn Sep 12, 2026
e52b1f3
refactor: enhance command output formatting with Adventure API
Zoriot Sep 12, 2026
348ffd3
Merge remote-tracking branch 'origin/main' into update/world-generati…
Zoriot Sep 12, 2026
c05c465
refactor: simplify color references in action formatting + remove unu…
Zoriot Sep 12, 2026
98beccb
ci: Skip ref checkout in crowdin action so it works from pr's
Zoriot Sep 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,23 @@ jobs:
steps:
- name: Checkout PR merge commit
if: github.event_name == 'pull_request'
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: refs/pull/${{ github.event.pull_request.number }}/merge
fetch-depth: 0
fetch-tags: true

- name: Checkout main on push
if: github.event_name == 'push'
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 0
fetch-tags: true

- name: Set up JDK 21
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
java-version: '21'
java-version: '25'
distribution: 'temurin'

- name: Setup Gradle
Expand Down
27 changes: 22 additions & 5 deletions .github/workflows/crowdin-download.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@ on:
schedule:
- cron: '0 0 */7 * *'

pull_request:
branches: [ main ]
types: [ opened ]
pull_request_review:
types: [ submitted ]

permissions:
contents: write
Expand All @@ -21,6 +20,8 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v7
with:
ref: main

- name: Save existing translation config-versions
shell: bash
Expand Down Expand Up @@ -55,7 +56,7 @@ jobs:
PY

- name: Download translations from Crowdin
uses: crowdin/github-action@v2
uses: crowdin/github-action@v3
with:
upload_sources: false
upload_translations: false
Expand All @@ -67,6 +68,7 @@ jobs:
pull_request_title: "New Crowdin translations"
commit_message: "New Crowdin translations"
pull_request_base_branch_name: "main"
skip_ref_checkout: true

project_id: ${{ vars.CROWDIN_PROJECT_ID }}
token: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
Expand All @@ -79,7 +81,20 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Check Crowdin branch
id: crowdin_branch
shell: bash
run: |
BRANCH="l10n_crowdin_translations"

if git ls-remote --exit-code --heads origin "$BRANCH" > /dev/null 2>&1; then
echo "exists=true" >> "$GITHUB_OUTPUT"
else
echo "exists=false" >> "$GITHUB_OUTPUT"
fi

- name: Checkout Crowdin branch
if: steps.crowdin_branch.outputs.exists == 'true'
shell: bash
run: |
sudo chown -R "$USER:$USER" "$GITHUB_WORKSPACE"
Expand All @@ -90,6 +105,7 @@ jobs:
git checkout -B "$BRANCH" "origin/$BRANCH"

- name: Restore/bump config-version and update LangUtil
if: steps.crowdin_branch.outputs.exists == 'true'
shell: bash
run: |
sudo chown -R "$USER:$USER" "$GITHUB_WORKSPACE" || true
Expand Down Expand Up @@ -400,13 +416,14 @@ jobs:
PY

- name: Amend Crowdin commit
if: steps.crowdin_branch.outputs.exists == 'true'
shell: bash
run: |
BRANCH="l10n_crowdin_translations"

git config \
user.name \
"github-actions[bot]"
"Crowdin[bot]"

git config \
user.email \
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/crowdin-upload.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
uses: actions/checkout@v7

- name: Crowdin push
uses: crowdin/github-action@v2
uses: crowdin/github-action@v3
with:
upload_sources: true
upload_translations: true
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-draft.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
with:
fetch-depth: 0
fetch-tags: true
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,16 @@ jobs:
contents: write

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
with:
fetch-depth: 0
fetch-tags: true
ref: ${{ github.event.release.tag_name }}

- name: Set up JDK 21
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
java-version: '21'
java-version: '25'
distribution: 'temurin'

- name: Setup Gradle
Expand Down
28 changes: 19 additions & 9 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ val paperNextEnabled = providers.gradleProperty("paperNext")
.map(String::toBoolean)
.orElse(false)

val guavaPackage = "com.google.guava"
val gsonPackage = "com.google.code.gson"

dependencies {
implementation(libs.com.alpsbte.canvas)
implementation(libs.com.alpsbte.alpslib.alpslib.io)
Expand All @@ -52,9 +55,18 @@ dependencies {
implementation(libs.com.zaxxer.hikaricp) {
exclude(group = "org.slf4j")
}
implementation(platform(libs.com.intellectualsites.bom.bom.newest))
compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Core")
compileOnly(libs.com.sk89q.worldguard.worldguard.bukkit)
implementation(platform(libs.com.intellectualsites.bom.bom.newest)) {
exclude(group = guavaPackage)
exclude(group = gsonPackage)
}
compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Core") {
exclude(group = guavaPackage)
exclude(group = gsonPackage)
}
compileOnly(libs.com.sk89q.worldguard.worldguard.bukkit) {
exclude(group = guavaPackage)
exclude(group = gsonPackage)
}
compileOnly(libs.multiverse.core)
compileOnly(libs.com.github.fierioziy.particlenativeapi.particlenativeapi.plugin)
compileOnly(libs.com.arcaniax.headdatabase.api)
Expand All @@ -66,8 +78,7 @@ dependencies {

if (paperNextEnabled.get()) {
constraints {
compileOnly("io.papermc.paper:paper-api:26.1.2.build.+")
compileOnly("com.github.decentsoftware-eu:decentholograms:2.10.0")
compileOnly("io.papermc.paper:paper-api:26.2-rc-2.build.+")
}
}
}
Expand Down Expand Up @@ -122,7 +133,7 @@ tasks.processResources {

val targetJava = providers.gradleProperty("targetJava")
.map(String::toInt)
.orElse(21)
.orElse(25)

java {
toolchain {
Expand All @@ -141,14 +152,13 @@ tasks.withType<Javadoc>().configureEach {

tasks.register<GradleBuild>("buildPaperNext") {
group = "verification"
description = "Builds against Java 25 and the Paper-next dependency set"
description = "Builds against Paper-next dependency set"

tasks = listOf("clean", "build")

startParameter.projectProperties.putAll(
mapOf(
"paperNext" to "true",
"targetJava" to "25"
"paperNext" to "true"
)
)
}
18 changes: 9 additions & 9 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,27 @@ com-alpsbte-alpslib-alpslib-hologram = "1.1.3"
# https://mvn.alps-bte.com/service/rest/repository/browse/alps-bte/com/alpsbte/alpslib/alpslib-io/
com-alpsbte-alpslib-alpslib-io = "1.2.5"
# https://mvn.alps-bte.com/service/rest/repository/browse/alps-bte/com/alpsbte/alpslib/alpslib-utils/
com-alpsbte-alpslib-alpslib-utils = "1.4.6"
com-alpsbte-alpslib-alpslib-utils = "1.5.0"
# https://mvn.alps-bte.com/service/rest/repository/browse/alps-bte/com/alpsbte/canvas/
com-alpsbte-canvas = "1.3"
com-alpsbte-canvas = "1.3.2"
# https://github.com/Arcaniax-Development/HeadDatabase-API/releases
com-arcaniax-headdatabase-api = "1.3.3-SNAPSHOT"
# @pin https://github.com/DecentSoftware-eu/DecentHolograms/releases 2.10+ require java 25 (MC 26.1+ mainly)
com-github-decentsoftware-eu-decentholograms = "2.9.9"
# https://github.com/DecentSoftware-eu/DecentHolograms/releases
com-github-decentsoftware-eu-decentholograms = "2.10.0"
# @pin https://github.com/Fierioziy/ParticleNativeAPI/releases - we are stuck at v3 for now. Need to migrate some time or remove it
com-github-fierioziy-particlenativeapi-particlenativeapi-plugin = "3.3.2"
# Ref: https://github.com/IntellectualSites/bom
com-intellectualsites-bom-bom-newest = "1.56"
# https://maven.enginehub.org/repo/com/sk89q/worldguard/worldguard-bukkit/
com-sk89q-worldguard-worldguard-bukkit = "7.0.17"
com-sk89q-worldguard-worldguard-bukkit = "7.0.18-SNAPSHOT"
# https://github.com/brettwooldridge/HikariCP/tags
com-zaxxer-hikaricp = "7.0.2"
com-zaxxer-hikaricp = "7.1.0"
# Provided by Minecraft (Libs folder)
commons-io-commons-io = "2.22.0"
# https://fancyspaces.net/spaces/fancynpcs/maven-repos/fi-releases/de.oliver:FancyNpcs
de-oliver-fancynpcs = "2.9.2"
# @pin https://artifactory.papermc.io/ui/native/universe/io/papermc/paper/paper-api/ 26.1+ requires java 25
io-papermc-paper-paper-api = "1.21.11-R0.1-SNAPSHOT"
# @pin https://artifactory.papermc.io/ui/native/universe/io/papermc/paper/paper-api/ We want to use the latest api buld
io-papermc-paper-paper-api = "26.1.2.build.+"
# https://mvn.alps-bte.com/service/rest/repository/browse/alps-bte/li/cinnazeyy/LangLibs-API/
li-cinnazeyy-langlibs-api = "1.5.3"
# https://repo.onarandombox.com/#/multiverse-releases/org/mvplugins/multiverse/core/multiverse-core
Expand All @@ -39,7 +39,7 @@ org-mariadb-jdbc-mariadb-java-client = "3.6.0-SNAPSHOT"
# Plugins
#
# https://github.com/jmongard/Git.SemVersioning.Gradle/releases
git-semver = "0.19.1"
git-semver = "0.19.2"
# https://github.com/GradleUp/shadow/releases
shadow = "9.4.2"

Expand Down
21 changes: 19 additions & 2 deletions src/main/java/com/alpsbte/plotsystem/PlotSystem.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,16 @@
import com.alpsbte.plotsystem.core.holograms.HologramRegister;
import com.alpsbte.plotsystem.core.system.Builder;
import com.alpsbte.plotsystem.core.system.plot.Plot;
import com.alpsbte.plotsystem.core.system.plot.PlotHandler;
import com.alpsbte.plotsystem.core.system.plot.generator.world.SkeletonWorldGenerator;
import com.alpsbte.plotsystem.core.system.plot.utils.PlotUtils;
import com.alpsbte.plotsystem.core.system.tutorial.AbstractTutorial;
import com.alpsbte.plotsystem.core.system.tutorial.BeginnerTutorial;
import com.alpsbte.plotsystem.core.system.tutorial.Tutorial;
import com.alpsbte.plotsystem.core.system.tutorial.TutorialEventListener;
import com.alpsbte.plotsystem.core.system.tutorial.utils.TutorialNPCTurnTracker;
import com.alpsbte.plotsystem.core.system.tutorial.utils.TutorialUtils;
import com.alpsbte.plotsystem.utils.DependencyManager;
import com.alpsbte.plotsystem.utils.Utils;
import com.alpsbte.plotsystem.utils.io.ConfigPaths;
import com.alpsbte.plotsystem.utils.io.ConfigUtil;
Expand All @@ -28,6 +31,7 @@
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.java.JavaPlugin;
import org.ipvp.canvas.MenuFunctionListener;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -117,14 +121,22 @@ public void onEnable() {

DecentHologramDisplay.registerPlugin(this);
HologramRegister.init();
PlotUtils.checkPlotsForLastActivity();
Utils.ChatUtils.checkForChatInputExpiry();
PlotUtils.Effects.startTimer();

// Start task that checks for and abandons inactive plots every hour
Bukkit.getScheduler().runTaskTimerAsynchronously(PlotSystem.getPlugin(), PlotHandler::abandonInactivePlots, 0L, 20 * 60 * 60L);

// Register tutorials
if (getConfig().getBoolean(ConfigPaths.TUTORIAL_ENABLE)) {
AbstractTutorial.registerTutorials(Collections.singletonList(BeginnerTutorial.class));
Bukkit.getScheduler().runTaskTimerAsynchronously(FancyNpcsPlugin.get().getPlugin(), new TutorialNPCTurnTracker(), 0, 1L);
Bukkit.getScheduler().runTaskTimer(FancyNpcsPlugin.get().getPlugin(), new TutorialNPCTurnTracker(), 0, 1L);
}

// Generate Skeleton World
if (!DependencyManager.getMultiverseCore().getWorldManager().isWorld(SkeletonWorldGenerator.WORLD_KEY.value())) {
getComponentLogger().info("No skeleton world found! Generating skeleton world...");
new SkeletonWorldGenerator();
}

pluginEnabled = true;
Expand Down Expand Up @@ -196,4 +208,9 @@ public void initDatabase() throws IOException, SQLException {
s.execute(initScript);
}
}

@Override
public ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, String id) {
return new SkeletonWorldGenerator.EmptyChunkGenerator();
}
}
Loading