CannaTaleEconomy
A server-wide economy backbone (SQLite).
Описание
CannaTaleЭкономика
CannaTaleEconomy является основой экономики экосистемы серверов CannaTale Hytale. Он обеспечивает постоянный Поддерживаемый SQLite система баланса, команды игрока и администратора, настраиваемая система оплаты труда (включая VIP-уровень) и Публичный API Это могут назвать другие модифицированные.
Особенности
ядро
- Постоянные балансы, хранящиеся в SQLite ()
Экономика.db) - Валюта в целом (
длинный) избегать вопросов округления с плавающей точкой - Атомная передача с использованием операций с базами данных
- Руководящие вопросы для
бальто
командование
- Игрок:
/ Баланс,бальто,платить,/payck - Админ:
/money set | дать | взять(единый узел разрешения)
Система оплаты труда (VIP Override)
- Конфигурируемый интервал и количества
- Узел VIP-разрешения:
cannatale.economy.vip - VIP-игроки получают только
Платежная система AmountVipпри использовании/payckнормальнозарплата Суммаигнорируется.
Публичный API Hooks
- Другие модели могут вызывать
Экономика Апичитать / изменять балансы, переводы, таблицы лидеров, форматирование и требования к зарплате - Предназначен для вызова из серверная нить (То же, что команды/события)
установка
- Постройте баночку плагина (см. строить раздел).
- Копировать необычный баночка из
сборка/либс/в папку модов вашего сервера (пример:HytaleServer/Mods/). - Запустите сервер.
- В первом беге, Экономика будет генерировать свои файлы данных в каталоге данных плагина:
config.jsonЭкономика.db
Конфигурация ()config.json)
Экономика создает config.json В первом беге.
Текущие ключи конфигурирования:
начинать Баланс(Долго)
Начало баланса для новых игроков.зарплата Сумма(Долго)
Сумма чека по умолчанию (не VIP).Платежная система AmountVip(Долго)
VIP-сумма зарплаты. Используется только в том случае, если игрокcannatale.economy.vip.Обсуждение IntervalMinutes(Долго)
Охлаждение общей зарплаты (минуты) для обоих уровней.balTopLimit(Внутри)
Количество записей, показанных вбальто.схемаВерсия(Внутри)
Внутренняя версия для будущих миграций.
VIP поведение
Если игрок имеет cannatale.economy.vip, /payck платить только Платежная система AmountVip Игнорировать зарплата Сумма.
Разрешения
Админ (все/денежные команды)
cannatale.economy.admin
VIP уровень зарплаты
cannatale.economy.vip
командование
Корневая помощь
/экономика/ec/(алиас)
Показывает отформатированный список команд.
Командование игрока
/ Баланс
Показывает ваш баланс.
/ Баланс [игрок]
Показывает баланс другого игрока.
Примеры:
/ Баланс/ Баланс Xion28080
бальто
Показывает верхние балансы (дефолт 10, настраиваемый через balTopLimit).
Пример:
бальто
/pay <player> <amount>
Платит другой игрок.
- Сумма должна быть > 0
- Отправитель должен иметь достаточный баланс
- Трансфер является атомным
Пример:
Платить Боб 250
/payck
Требует зарплату.
- Исполнитель: cooldown:
Обсуждение IntervalMinutes - VIP-игроки получают
Платежная система AmountVipтолько
Пример:
/payck
Если вы не готовы, вы увидите сообщение, показывающее оставшееся время до следующего заявления.
Административные команды (требуется) cannatale.economy.admin)
/money set <player> <mount>
Установите баланс игрока.
/money give <player> <mount>
Добавляет к балансу игрока.
/money take <player> <mount>
Снимается с баланса игрока (деньги удаляются, а не передаются).
- 0 (отсутствует отрицательный баланс)
Примеры:
Деньги Боб 1000Деньги дают Бобу 250Деньги берут Боб 500
Онлайн-игровая заметка (ArgTypes.PLAYER_REF)
Несколько команд используют ArgTypes.PLAYER_REFкоторая, как правило, решает Игроки онлайн:
платить/money set | дать | взять/balance-player=<имя(если аргумент решен как PLAYER_REF)
Если вам нужна поддержка в автономном режиме (настройка / проверка игроков, которые не находятся в Интернете), экономия может быть расширена для решения UUID через профильный магазин или имя. Кэш UUID.
База данных
Файл SQLite:
Экономика.db
Схема (концептуальная):
- Столик
балансuuid(Следующий первичный ключ)имя(Текст)баланс(ИНТЕГЕР)last_paycheck_claim_ms(ИНТЕГЕР)
Примечания:
- Суммы хранятся как целые числа (длинные)
- Переводы используют транзакцию, чтобы избежать частичных обновлений.
Public API Hooks (объявлено)
Где живет API
Пакет:
org.omeganode.cannataleeconomy.api
Основной интерфейс:
Экономика Апи
Реестр:
Экономика ApiRegistry
Как другие моды получают API
Импорт org.omeganode.cannataleeconomy.api.EconomyApiRegistry
val econ = EconomyApiRegistry.get() ?: return // Экономика не загружена / не зарегистрирована
Экономика Api — Methods and Hooks (точная версия)
Все суммы в валюте являются целыми числами. длинный ценностей.
Большинство методов принимают Оригинальное название:ForCreate Таким образом, счет может быть создан по требованию, если отсутствует.
пакет org.omeganode.cannataleeconomy.api
Импорт org.omeganode.cannataleeconomy.data.EconomyConfig
Импорт org.omeganode.cannataleeconomy.db.TopBalanceEntry
Импорт org.omeganode.cannataleeconomy.services.PaycheckService
Импорт java.util. UUID
Интерфейс экономики Апи {
Развлечения GetConfig(): EconomyConfig
fun ensure(uuid: UUID, имя) Исполнитель: String
/** Возвращает стартовый баланс, если учетная запись не существует (не создает учетную запись). *
GetBalance (uuid: UUID): длинный
/** Возврат баланса и создание счета при необходимости. *
GetBalance(uuid: UUID, название) Оригинальное название: Long: Long
Веселый сетBalance(uuid: UUID, nameForCreate: String, amount: Long)
Название: UUID (Uuid: UUID) ForCreate: Струна, количество: Длинная
/**
* Занимает до [суммы] от баланса игрока (зажимается на 0).
@return the new balance after the take.
*
fun take(uuid: UUID, название) ForCreate: Струна, количество: Длинный: Длинный
/**
Передача [суммы] от одного игрока к другому.
* @return true if success, false if sender lacks funds or amount <= 0.
*
Веселый трансфер (от Uuid: UUID, от Name: String, до Uuid: UUID, до Name: String, сумма: Long): Булевый
fun top (limit: Int): List<TopBalanceEntry>
/** Формирует номер с запятыми, используя локальные правила сервера, используемые Экономикой. *
Развлекательный формат (сумма: Длинная): Струна
** Заявление о выплате зарплаты. Если это Vip=true, используйте только paycheckAmountVip. *
Забавное заявление Paycheck(uuid: UUID, имя) ForCreate: String, isVip: Boolean: PaycheckService.
?
API Примеры других модов
Читать баланс (без создания счета)
val bal = econ.getBalance
Прочитайте баланс (создайте счет, если он отсутствует)
val bal = econ.getBalance (playerUuid, playerName)
Дай/бери/настрой
econ.give (playerUuid, playerName, 500)
val newBal = econ.take (playerUuid, playerName, 250)
Econ.setBalance (игрок) Uuid, PlayerName, 1000
передача
val ok = econ.transfer (от Uuid, от Name, до Uuid, до Name, 200)
Руководитель
val top = econ.top(10)
форматирование
val formated = econ.format(1234567) // "1,234,567"
Paycheck claim (VIP-aware)
val isVip = sender.hasPermission ("cannatale.economy.vip")
val result = econ.claimPaycheck (playerUuid, playerName, isVip)
устранение неполадок
Ошибка драйвера SQLite во время выполнения
Если вы видите: Не найден подходящий драйвер для jdbc:sqlite:
Вы, вероятно, развернули не ту банку.
Исправить:
- Развернуть необычный баночка из
сборка/либс/ - Удалить старых Экономные банки из папки модов сервера
- Перезагрузить сервер
Показать оригинальное описание (English)
CannaTaleEconomy
CannaTaleEconomy is the economy backbone for the CannaTale Hytale server ecosystem. It provides a persistent SQLite-backed balance system, player and admin commands, a configurable paycheck system (including a VIP tier), and a public API that other mods can call.
Features
Core
- Persistent balances stored in SQLite (
economy.db) - Whole-number currency (
Long) to avoid floating point rounding issues - Atomic transfers using database transactions
- Leaderboard queries for
/baltop
Commands
- Player:
/balance,/baltop,/pay,/paycheck - Admin:
/money set|give|take(single permission node)
Paycheck System (VIP Override)
- Configurable interval and amounts
- VIP permission node:
cannatale.economy.vip - VIP players receive only
paycheckAmountVipwhen using/paycheck(normalpaycheckAmountis ignored)
Public API Hooks
- Other mods can call
EconomyApito read/modify balances, transfers, leaderboards, formatting, and paycheck claims - Intended to be called from the server thread (same as commands/events)
Installation
- Build the plugin jar (see Build section).
- Copy the non-plain jar from
build/libs/into your server mods folder (example:HytaleServer/mods/). - Start the server.
- On first run, Economy will generate its data files in the plugin data directory:
config.jsoneconomy.db
Configuration (config.json)
Economy creates config.json on first run.
Current config keys:
startingBalance(Long)
Starting balance for brand-new players.paycheckAmount(Long)
Default paycheck amount (non-VIP).paycheckAmountVip(Long)
VIP paycheck amount. Only used if player hascannatale.economy.vip.paycheckIntervalMinutes(Long)
Shared paycheck cooldown (minutes) for both tiers.balTopLimit(Int)
Number of entries shown in/baltop.schemaVersion(Int)
Internal version used for future migrations.
VIP behavior
If a player has cannatale.economy.vip, /paycheck pays only paycheckAmountVip and ignores paycheckAmount.
Permissions
Admin (all /money commands)
cannatale.economy.admin
VIP paycheck tier
cannatale.economy.vip
Commands
Root help
/economy/ec(alias)
Shows the formatted command list.
Player commands
/balance
Shows your balance.
/balance [player]
Shows another player's balance.
Examples:
/balance/balance Xion28080
/baltop
Shows the top balances (default top 10, configurable via balTopLimit).
Example:
/baltop
/pay <player> <amount>
Pays another player.
- Amount must be > 0
- Sender must have enough balance
- Transfer is atomic
Example:
/pay Bob 250
/paycheck
Claims your paycheck.
- Enforced by cooldown:
paycheckIntervalMinutes - VIP players receive
paycheckAmountViponly
Example:
/paycheck
If not ready, you will see a message showing the remaining time until the next claim.
Admin commands (require cannatale.economy.admin)
/money set <player> <amount>
Sets a player's balance.
/money give <player> <amount>
Adds to a player's balance.
/money take <player> <amount>
Removes from a player's balance (money is deleted, not transferred).
- Clamped at 0 (no negative balances)
Examples:
/money set Bob 1000/money give Bob 250/money take Bob 500
Online-player note (ArgTypes.PLAYER_REF)
Several commands use ArgTypes.PLAYER_REF, which typically resolves to online players:
/pay/money set|give|take/balance --player=<name>(if the argument is resolved as PLAYER_REF)
If you want offline support (setting/checking players who are not online), Economy can be extended to resolve UUIDs via a profile store or name→UUID cache.
Database
SQLite file:
economy.db
Schema (conceptual):
- Table
balancesuuid(TEXT PRIMARY KEY)name(TEXT)balance(INTEGER)last_paycheck_claim_ms(INTEGER)
Notes:
- Amounts are stored as integers (Long)
- Transfers use a transaction to avoid partial updates
Public API Hooks (Declared)
Where the API lives
Package:
org.omeganode.cannataleeconomy.api
Primary interface:
EconomyApi
Registry:
EconomyApiRegistry
How other mods obtain the API
import org.omeganode.cannataleeconomy.api.EconomyApiRegistry
val econ = EconomyApiRegistry.get() ?: return // Economy not loaded / not registered
EconomyApi — Methods and Hooks (exact)
All currency amounts are whole-number Long values.
Most methods accept nameForCreate so the account can be created on demand if missing.
package org.omeganode.cannataleeconomy.api
import org.omeganode.cannataleeconomy.data.EconomyConfig
import org.omeganode.cannataleeconomy.db.TopBalanceEntry
import org.omeganode.cannataleeconomy.services.PaycheckService
import java.util.UUID
interface EconomyApi {
fun getConfig(): EconomyConfig
fun ensure(uuid: UUID, nameForCreate: String)
/** Returns starting balance if the account doesn't exist (does NOT create an account). */
fun getBalance(uuid: UUID): Long
/** Returns balance and creates account if needed. */
fun getBalance(uuid: UUID, nameForCreate: String): Long
fun setBalance(uuid: UUID, nameForCreate: String, amount: Long)
fun give(uuid: UUID, nameForCreate: String, amount: Long)
/**
* Takes up to [amount] from the player's balance (clamped at 0).
* @return the new balance after the take.
*/
fun take(uuid: UUID, nameForCreate: String, amount: Long): Long
/**
* Transfers [amount] from one player to another.
* @return true if success, false if sender lacks funds or amount <= 0.
*/
fun transfer(fromUuid: UUID, fromName: String, toUuid: UUID, toName: String, amount: Long): Boolean
fun top(limit: Int): List<TopBalanceEntry>
/** Formats a number with commas using the server's locale rules used by Economy. */
fun format(amount: Long): String
/** Claim paycheck. If isVip=true, uses paycheckAmountVip only. */
fun claimPaycheck(uuid: UUID, nameForCreate: String, isVip: Boolean): PaycheckService.ClaimResult
}
API Examples for other mods
Read balance (no account creation)
val bal = econ.getBalance(playerUuid)
Read balance (create account if missing)
val bal = econ.getBalance(playerUuid, playerName)
Give / take / set
econ.give(playerUuid, playerName, 500)
val newBal = econ.take(playerUuid, playerName, 250)
econ.setBalance(playerUuid, playerName, 1000)
Transfer
val ok = econ.transfer(fromUuid, fromName, toUuid, toName, 200)
Leaderboard
val top = econ.top(10)
Formatting
val formatted = econ.format(1234567) // "1,234,567"
Paycheck claim (VIP-aware)
val isVip = sender.hasPermission("cannatale.economy.vip")
val result = econ.claimPaycheck(playerUuid, playerName, isVip)
Troubleshooting
SQLite driver error at runtime
If you see:
No suitable driver found for jdbc:sqlite:...
You likely deployed the wrong jar.
Fix:
- Deploy the non-plain jar from
build/libs/ - Remove older Economy jars from the server mods folder
- Restart the server
Последние версии
CannaTaleEconomy-1.0.6.jar
Информация
Авторы:
Категории:
Версии игры:
Создан: 28.01.2026