▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Allium

Allium

A modern, secure Essentials solution

Оцените первым
135
1
Все версииAllium v0.2.3a

Allium v0.2.3a

Release29.06.2026

Список изменений

Wiki: https://github.com/castledking/Allium/wiki

Highlights

  • CanvasMC 26.2 support — Migrated from Paper API to Canvas API (io.canvasmc.canvas:canvas-api). Canvas is a Folia fork targeting Minecraft 26.2 (build 835). All scheduling now goes through the new SchedulerAdapter in the codes.castled.allium.scheduler package, which properly handles Canvas's regionized threading model.
  • New SchedulerAdapter — Complete rewrite of the scheduling layer. The old util/SchedulerAdapter.java (587 lines of reflection-heavy Folia detection) is replaced by a clean 426-line scheduler/SchedulerAdapter.java with a dedicated TaskHandle abstraction. The old class is kept as a deprecated thin wrapper delegating to the new one, ensuring backward compatibility.
  • Tab completion API — New AlliumTabCompletionsEvent + AlliumTabCompletionsListener that populate tab completions with all online non-vanished players when PartyManager is enabled. Other plugins can fire this event to get Allium-aware player name suggestions.
  • Vault initialization guard — Fixed a race condition where registerVaultDependentListeners() could be called multiple times if Vault initialized successfully and then the retry timer fired again. Added a registered boolean flag to ensure one-time registration.
  • FAWE removed — FastAsyncWorldEdit dependency and repositories dropped from pom.xml. No longer a soft dependency.

Minecraft Version Support

VersionStatus
26.2 (Canvas build 835)Primary target
26.2 (Folia)Supported
1.21.x (Paper/Spigot)Supported via fallback

API / Dependency Changes

  • pom.xml: io.papermc.paper:paper-api replaced with io.canvasmc.canvas:canvas-api
  • pom.xml: <paper.version> bumped from 26.2.build.37-alpha to 26.2.build.835-alpha
  • pom.xml: Added canvasmc-releases and canvasmc-snapshots repositories
  • pom.xml: Removed FastAsyncWorldEdit-Core dependency
  • pom.xml: Removed IntellectualSites repositories
  • plugin.yml: Removed FastAsyncWorldEdit and WorldEdit from softdepend

New Files

FileDescription
scheduler/SchedulerAdapter.javaFull Folia/Canvas scheduling adapter with global, async, entity, and location scheduling
scheduler/TaskHandle.javaLightweight abstraction over BukkitTask and Folia ScheduledTask
events/AlliumTabCompletionsEvent.javaCustom event for populating player name tab completions
listeners/AlliumTabCompletionsListener.javaHandles the event — returns all online non-vanished players when PartyManager is enabled

SchedulerAdapter API

The new codes.castled.allium.scheduler.SchedulerAdapter provides:

// Global (main thread equivalent)
SchedulerAdapter.runGlobal(plugin, runnable)
SchedulerAdapter.runLaterGlobal(plugin, runnable, delayTicks)
SchedulerAdapter.runRepeatingGlobal(plugin, runnable, delayTicks, periodTicks)

// Async
SchedulerAdapter.runAsyncNow(plugin, runnable)
SchedulerAdapter.runAsyncLater(plugin, runnable, delayTicks)
SchedulerAdapter.runAsyncRepeating(plugin, runnable, delayTicks, periodTicks)

// Entity (Folia entity scheduler, Bukkit fallback)
SchedulerAdapter.runEntity(plugin, entity, runnable, retired)
SchedulerAdapter.runLaterEntity(plugin, entity, runnable, delayTicks)
SchedulerAdapter.runEntityRepeating(plugin, entity, runnable, retired, delayTicks, periodTicks)

// Location (Folia region scheduler, Bukkit fallback)
SchedulerAdapter.runAtLocation(plugin, location, runnable)
SchedulerAdapter.runAtLocationLater(plugin, location, runnable, delayTicks)
SchedulerAdapter.runAtLocationRepeating(plugin, location, runnable, delayTicks, periodTicks)

// Utility
SchedulerAdapter.cancelTasks(plugin)
SchedulerAdapter.isFolia()

All methods return codes.castled.allium.scheduler.TaskHandle which wraps both BukkitTask and Folia's ScheduledTask.

Deprecated API

codes.castled.allium.util.SchedulerAdapter is now a deprecated wrapper. All methods delegate to the new codes.castled.allium.scheduler.SchedulerAdapter. Existing code continues to work but should be migrated:

Old (util)New (scheduler)
run(task)runGlobal(plugin, task)
runLater(task, delay)runLaterGlobal(plugin, task, delay)
runTimer(task, delay, period)runRepeatingGlobal(plugin, task, delay, period)
runAsync(task)runAsyncNow(plugin, task)
runLaterAsync(task, delay)runAsyncLater(plugin, task, delay)
runAtEntity(entity, task)runEntity(plugin, entity, task, null)
runAtEntityLater(entity, task, delay)runLaterEntity(plugin, entity, task, delay)

Files Changed (31)

FileChange
pom.xmlCanvas API, build 835, removed FAWE, added Canvas repos
plugin.ymlRemoved FAWE/WorldEdit softdepend
scheduler/SchedulerAdapter.javaNew — full scheduling adapter
scheduler/TaskHandle.javaNew — task handle abstraction
events/AlliumTabCompletionsEvent.javaNew — tab completion event
listeners/AlliumTabCompletionsListener.javaNew — tab completion handler
util/SchedulerAdapter.javaRewritten as deprecated wrapper (~500 lines removed)
PluginStart.javaVault init guard, SchedulerAdapter migration for channel/Discord retry
Core.javaBukkit.getScheduler() calls replaced with SchedulerAdapter
PregenCommand.javaSchedulerAdapter for async completion callback
StaffChatCommand.javaSchedulerAdapter for channel switch
InventoryManager.javaSchedulerAdapter for autosave
FormatChatListener.javaSchedulerAdapter for phase renderer
StaffChatListener.javaSchedulerAdapter for message redirect
WolfBehaviorListener.javaSchedulerAdapter for delayed task
CommandManager.javaSchedulerAdapter migration
ConnectionManager.javaSchedulerAdapter migration, significant refactor
FreecamDetector.javaSchedulerAdapter migration
HandcuffsListener.javaSchedulerAdapter migration
IPNDetector.javaSchedulerAdapter migration
ModDetectionListener.javaSchedulerAdapter migration
VanishListener.javaSchedulerAdapter migration
FaweActivityListener.javaSchedulerAdapter migration, FAWE removal
OreGenerationListener.javaSchedulerAdapter migration
AlliumChannelManager.javaSchedulerAdapter migration
DiscordSrvMessageBridge.javaSchedulerAdapter migration
GradientNameManager.javaSchedulerAdapter migration
ModGuardManager.javaSchedulerAdapter migration
ModGuardTranslationProbe.javaSchedulerAdapter migration
OreGenerationManager.javaSchedulerAdapter migration
CrowBarDataSender.javaSchedulerAdapter migration

Technical Details

Scheduler Detection

Folia/Canvas detection uses Bukkit.getServer().getClass().getMethods() to find getGlobalRegionScheduler — more reliable than string-matching server name/version. The detection result is cached in a static final boolean at class load time.

TaskHandle

Wraps either a BukkitTask (Paper/Spigot path) or a raw Folia ScheduledTask object (accessed via reflection for cancel). Thread-safe cancellation via AtomicBoolean. The isScheduled() method returns best-effort status.

Vault Initialization Fix

Previously, if initializeVault() succeeded on attempt N but the timer tick was already queued, registerVaultDependentListeners() could fire twice. The fix adds a registered[] boolean flag checked before each registration call, ensuring idempotency.

Support and Feedback

Issues: https://github.com/castledking/Allium/issues Wiki: https://github.com/castledking/Allium/wiki Discord: https://discord.com/invite/pCKdCX6nYr Website: https://castled.codes/

Файлы

Allium.jar(1.55 MiB)
Основной
Скачать

Метаданные

Канал релиза

Release

Номер версии

0.2.3a

Загрузчики

Bukkit
Folia
Paper
Purpur
Spigot

Версии игры

1.20–26.2

Загрузок

4

Дата публикации

29.06.2026

Загрузил

ID версии

Главная