CannaTaleEconomy

CannaTaleEconomy

A server-wide economy backbone (SQLite).

9.0 загрузок
Обновлён 6 дней назад

Описание

CannaTaleЭкономика

CannaTaleEconomy является основой экономики экосистемы серверов CannaTale Hytale. Он обеспечивает постоянный Поддерживаемый SQLite система баланса, команды игрока и администратора, настраиваемая система оплаты труда (включая VIP-уровень) и Публичный API Это могут назвать другие модифицированные.


Особенности

ядро

  • Постоянные балансы, хранящиеся в SQLite ()Экономика.db)
  • Валюта в целом (длинный) избегать вопросов округления с плавающей точкой
  • Атомная передача с использованием операций с базами данных
  • Руководящие вопросы для бальто

командование

  • Игрок: / Баланс, бальто, платить, /payck
  • Админ: /money set | дать | взять (единый узел разрешения)

Система оплаты труда (VIP Override)

  • Конфигурируемый интервал и количества
  • Узел VIP-разрешения: cannatale.economy.vip
  • VIP-игроки получают только Платежная система AmountVip при использовании /payck нормально зарплата Сумма игнорируется.

Публичный API Hooks

  • Другие модели могут вызывать Экономика Апи читать / изменять балансы, переводы, таблицы лидеров, форматирование и требования к зарплате
  • Предназначен для вызова из серверная нить (То же, что команды/события)

установка

  1. Постройте баночку плагина (см. строить раздел).
  2. Копировать необычный баночка из сборка/либс/ в папку модов вашего сервера (пример: HytaleServer/Mods/).
  3. Запустите сервер.
  4. В первом беге, Экономика будет генерировать свои файлы данных в каталоге данных плагина:
    • 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 paycheckAmountVip when using /paycheck (normal paycheckAmount is ignored)

Public API Hooks

  • Other mods can call EconomyApi to read/modify balances, transfers, leaderboards, formatting, and paycheck claims
  • Intended to be called from the server thread (same as commands/events)

Installation

  1. Build the plugin jar (see Build section).
  2. Copy the non-plain jar from build/libs/ into your server mods folder (example: HytaleServer/mods/).
  3. Start the server.
  4. On first run, Economy will generate its data files in the plugin data directory:
    • config.json
    • economy.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 has cannatale.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 paycheckAmountVip only

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 balances
    • uuid (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

Early Access 28.01.2026 15.7 МБ
Скачать