純規の暇人趣味ブログ

手を突っ込んで足を洗う

[Bukkit/Spigot]経済プラグイン「Jecon」を作った

      2016/12/13    HimaJyun

Ubuntuは16.04が出たので自鯖もアプグレしようと作業中なのですが、16.04からMySQLの最新版が5.7になっており、今まで使用していた経済プラグインがエラーを吐くようになってしまいました。

かと言ってアプグレを見送るつもりはありませんし、他の経済プラグインも目ぼしい物がありませんでした。(動かなかったり、UUID非対応だったり……)

ですので、今回、思い切ってMySQL 5.7(+SQLite)、Spigot 1.11(+UUID)、Vaultに対応したプラグインを作成してみました。

特徴

今回作成したプラグインは「Jecon」と言います。

まぁ、だいたい何の略かくらいはもうお察しでしょうが、JはJava、もしくはHimaJyunのJですね。(ナルシスト?、はて……?、何の事やら……?)

econはEconomyのeconです。

Jeconは他の経済プラグインとあまり大きな差はありませんが、強いて言うならば以下の様な特徴があります。

  • MySQL 5.7(+SQLite)対応
  • UUID対応
  • 1.11で動作
  • Vault対応
  • シンプル

もし、良い経済プラグインが見つからずにお困りでしたらぜひ使ってみて下さい。

MySQL 5.7(+SQLite)対応

JeconはMySQL 5.7に対応しています、え?、MariaDB?、動くと思いますよ、ええ。

もちろん、SQLiteにも対応しているのでMySQLサーバのインストールなどを行わなくても気軽にご利用頂けます。

(内部的な部分では、コネクションプーリングにHikariCPを使ってみました、今までの自作なんちゃってコネクションプーリングより良さげです。)

UUID対応

当然ながらUUIDに対応しています。

と、言う事は、名前変更を行っても大丈夫と言う訳です。

UUIDに対応していない旧石器時代に出来た様な過去の遺産プラグインはまだまだ沢山ありますが、AMiTサーバでは名前管理依存脱却を目指しています。

1.11対応

1.11での動作もOKです。

1.11の新機能、的な物は使用していない(と思う)ので1.8以上であれば動作すると思われます。

Vault対応

様々な経済を使用するプラグイン(お店や仕事)がアカウントへのお金の出し入れに「Vault」を利用しています。

実際に「/vault-info」コマンドを利用して確認すると「Jecon」と表示されています。
bukkit-jecon-001

ですので、大抵のプラグイン(Vaultでお金を操作している物)はそのまま利用する事が出来ます、実際、AMiTサーバでもこのプラグインを入れ替えただけで他のプラグインはそのまま利用出来ました。

(一般的にVaultは他のプラグインをVault側からフックする仕様の様ですが、自作のプラグイン側からフックする方法を見つけましたので対応させることに成功しました。)

シンプル

Jeconでは良い意味でも、悪い意味でも必要最小限の機能しか実装していません。

前に利用していたプラグインでは世界別に通貨の単位を切り替えたり、それそのものが銀行機能を有していたりと、とても高機能だったのですが、実際に蓋を開けてみると殆どの機能を利用しませんでした。

ですので、Jeconでは要らない機能を一切省いて、必要最小限の物のみを実装しています。

これはデコデコのゴテゴテ盛りが大好きな方にとってはデメリットかも知れませんが、Unix哲学的に考えると「小さいものは美しい」のです。

使い方

普通のプラグインですので普通のプラグインと同じ様に扱えます。

  1. JeconをGitHubよりダウンロードして下さい(Jecon-x.x.jarがプラグイン本体です。)
  2. サーバのpluginsに入れて一度起動して下さい。
  3. 設定変更を行った後にリロード

リロードは「/money reload」でも構いませんが、出来るのでしたらサーバを再起動した方が良いかと思われます。

config.yml

設定ファイルは2つに分けているので、個別に説明しましょう、まずはconfig.ymlです。

デフォルト設定を掲載すると長くなるので、日本語環境での利用の場合の設定例のみ掲載します。

# UTF-8で編集して下さい
# ユーザがログインした際にアカウントを作成するか否かです、基本的にtrueで構わないかと思われます。
CreateAccountOnJoin: true

# アカウント作成時の所持金です、お好きな様に設定なさって下さい。
DefaultBalance: 10000.0

# 「/money top」コマンドを利用した際に1ページ当たり何名を表示するかです。
TopCommandEntryPerPage: 10

Format:
# お金の単位を置換した後に出来る連続した空白を1つにします。(例:「123 円   」->「123 円 」)
  MergeSpace: true
# 変換後の文字に出来た前後の空白を削除(例:「123 円 」->「123 円」)
  Trim: true
# 整数部のお金の単位
  Major:
#   単数形
    Single: "円"
#   複数形(日本の場合は両方同じ)
    Plural: "円"
# 小数部のお金の単位(日本では使われていない)
  Minor:
    Single: "銭"
    Plural: "銭"
# 実際にお金を表示する際のフォーマット
  Format: "[%Major%] [%MajorCurrency%]"
# この場合は「123 円」の様な表記になります。
# マクロとして使えるキーワード(例:123.45円の場合)
# [%Major%]->金額、整数部のみ(例:123)
# [%Minor%]->金額、小数部のみ(例:45)
# [%All%]->金額(例:123.45)
# [%MajorCurrency%]->お金の単位(整数部)
# [%MinorCurrency%]->お金の単位(小数部)

Database:
  # コネクションプーリングの数、-1ならデフォルト(10)
  Poolsize: -1
  # タイムアウトの時間、-1ならデフォルト(600000ミリ秒=10分)
  Timeout: -1
  # データベースの種類(sqlite/mysql)
  Type: sqlite
  SQLite:
    File: "jecon.db"
  MySQL:
    Host: "localhost:3306"
    Name: "jecon"
    User: "root"
    Pass: "your_mysql_password"
    Prefix: "jecon_"
    Propaties:
      "useSSL": "false"
      "useServerPrepStmts": "true"

このプラグインは内部で文字コードを指定して設定を読み込むので、Windowsだろうが*nixだろうがUTF-8で保存して下さい(と言うより、1.9から全てそうなりました、が、このプラグインはそれ以前でもUTF-8で読み込もうとします)

message.yml

デフォルト設定を(ry、日本語訳済みは以下の通りです(もちろんUTF-8です)

# UTF-8で編集して下さい

DontHavePermission: "&cあなたには権限がありません……"
AccountNotFound: "&cアカウントが見つかりません。"
InvalidAmount: "&c金額の指定が変です。"
UnknownError: "&c未知のエラーです。"

# 使えるマクロ: [%player%],[%balance%]
Show:
  Success: "[%player%]の所持金:[%balance%]"

# 使えるマクロ: [%player%],[%balance%]
Pay:
  NotEnough: "&cお金が足りません。"
  Self: "&c自分自身に送金する事は出来ません。"
  Success: "&a[%player%]に[%balance%]を送金しました。"
  Receive: "&a[%player%]から[%balance%]を受け取りました。"

Top:
  Empty: "&c結果が空です。"
# 使えるマクロ: [%page%]
  First: "&a======&r 所有資産ランキング([%page%]ページ) &a======"
# 使えるマクロ: [%player%],[%balance%],[%rank%]
  Entry: "[%rank%]位:[%player%]([%balance%])"

# 使えるマクロ: [%player%],[%balance%]
Give:
  Success: "&a[%player%]に[%balance%]を与えました。"

# 使えるマクロ: [%player%],[%balance%]
Take:
  NotEnough: "&cお金が足りません。"
  Success: "&a[%player%]から[%balance%]を徴収しました。"

# 使えるマクロ: [%player%],[%balance%]
Set:
  Success: "&a[%player%]の所持金を[%balance%]に設定しました。"

# 使えるマクロ: [%player%],[%balance%]
Create:
  Exists: "&cそのアカウントは既に存在しています。"
  Success: "&a[%player%]のアカウントを作成しました(口座残高:[%balance%])"

# 使えるマクロ: [%player%],[%balance%]
Remove:
  Success: "&a[%player%]のアカウントを削除しました(口座残高:[%balance%])"

# //*<!-- /moeny helpの出力. -->*/
Help:
  Show: "[player]の所持金を表示します。"
  Pay: "お金を送金します。"
  Top: "所有資産ランキングを表示します。"
  Give: "お金を与えます。"
  Take: "お金を徴収します。"
  Set: "お金を設定します。"
  Create: "アカウントを作成します。"
  Remove: "アカウントを削除します。"
  Reload: "設定をリロードします。"
  Help: "このヘルプを表示します。"

# //*<!-- 色コード -->*/
# &0->黒色(#000000)
# &1->暗い青色(#0000AA)
# &2->暗い緑色(#00AA00)
# &3->暗い水色(#00AAAA)
# &4->暗い赤色(#AA0000)
# &5->紫色(#AA00AA)
# &6->金色(#FFAA00)
# &7->グレー(#AAAAAA)
# &8->ダークグレー(#555555)
# &9->青色(#5555FF)
# &a->緑色(#55FF55)
# &b->水色(#55FFFF)
# &c->赤色(#FF5555)
# &d->明るい紫色(#FF55FF)
# &e->黄色(#FFFF55)
# &f->白色(#FFFFFF)
# &k->動く文字
# &l->太字
# &m->打ち消し線
# &n->下線
# &o->斜体
# &r->リセット
# &&->色コードのエスケープ

コマンド/パーミッション

コマンドは「/money」です、他プラグインとの競合も考慮して「jecon」をエイリアスにしています。

コマンド パーミッション 説明 デフォルト
/money jecon.show 自分の所持金を表示します 全員
/money [プレイヤー] jecon.show.other プレイヤーの所持金を表示します OP
/money pay <プレイヤー> <金額> jecon.pay プレイヤーに指定した金額を送金します 全員
/money top [ページ] jecon.top 所持金ランキングを表示します OP
/money give <プレイヤー> <金額> jecon.give プレイヤーの所持金を指定した分だけ増やします OP
/money take <プレイヤー> <金額> jecon.take プレイヤーの所持金を指定した分だけ減らします OP
/money set <プレイヤー> <金額> jecon.set プレイヤーの所持金を指定した金額にします OP
/money create <プレイヤー> [金額] jecon.create プレイヤーのアカウントを作成します OP
/money remove <プレイヤー> jecon.remove プレイヤーのアカウントを削除します OP
/money reload jecon.reload 設定をリロードします OP
/money help N/A コマンドの使い方を表示します 全員

標準的なコマンドを標準的に実装しています、殆どのプラグインが同じ使い方なので問題ないかと思われます。

ソースコード

GitHubにソースコードを上げています。

ライセンスはMiTです、どうぞご自由に愛でてあげて下さい。

(アカウントの所持金を操作するのであれば、このプラグインを直接呼び出すのではなくVaultを利用した方が数万倍柔軟です。)

 - サーバ運営 ,