Paper サーバー向けのポイント管理プラグインです。
プレイヤーは
- 実績の達成
- 1日1回のログイン
- ポイントショップの利用
を通してポイントを集めたり使ったりできます。
この README は、実際のコードを読んだ内容に合わせて、初心者向けに整理した説明です。
このプラグインには、主に次の機能があります。
config.yml の advancement-rewards に書かれた実績を達成すると、ポイントが加算されます。
同じ実績で何度も受け取ることはできません。
例:
advancement-rewards:
"minecraft:story/mine_diamond": 1この設定なら、ダイヤモンドを初めて入手する実績で 1 ポイントもらえます。
プレイヤーがその日に初めてログインしたとき、ポイントを付与します。
日付の判定は 日本時間 (Asia/Tokyo) です。
例:
daily-login:
enabled: true
points: 50この設定なら、1日1回 50 ポイントもらえます。
看板を使って、ポイントでアイテムや効果を購入できるショップを作れます。
購入できるものは通常 config.yml の shop に定義します。
加えて、エンチャント付きアイテムなどは看板作成時に手元のアイテムを写し取り、shops.yml に保存するモードで販売できます。
config.yml の shop では、次の3種類に対応しています。
item: アイテムを渡すpotion: ポーション効果を付与するlogin_bonus_boost: 今後のログインボーナスを増やす
設定例:
shop:
DIAMOND:
type: item
material: DIAMOND
amount: 1
SPEED_BUFF:
type: potion
effect: SPEED
duration: 1200
amplifier: 1
LOGIN_UP:
type: login_bonus_boost
increase: 5/ranking コマンドで、ポイント上位 10 人を表示できます。
自分が 11 位以下なら、自分の順位もあわせて表示されます。
- Java 21
- Paper 1.21 系
- Maven 3.x(ビルドする場合)
pom.xml では paper-api 1.21.4-R0.1-SNAPSHOT が指定されています。
jarをビルドします- できた
jarを Paper サーバーのpluginsフォルダに入れます - サーバーを起動します
plugins/PointPlugin/に設定ファイルが生成されます
プロジェクトのルートで次を実行します。
mvn packageビルド後の jar は通常 target/ に出力されます。
ポイントランキングを表示します。
ポイントショップ用の看板を作成できます。
plugin.yml では op のみに許可されています。
内部実装では pointpligin.admin も同じ意味で受理されます。
注意: 歴史的経緯でコードは pointpligin.admin を参照しますが、pointplugin.admin(plugin.yml の記載)も同じ権限として扱います。
権限 pointplugin.admin または pointpligin.admin を持つプレイヤーが、看板の 1 行目に次を書いて設置します。
[PointShop]
設置後、プラグインがその看板をショップ看板として登録します。
購入時には、看板の 2〜4 行目を次のように読み取ります。
1行目: [PointShop]
2行目: 商品キー
3行目: 価格 [個数]
4行目: 説明文(任意)
例:
[PointShop]
DIAMOND
150 3
ダイヤ3個
この例では、config.yml の shop.DIAMOND を 3 個分、150 ポイントで購入します。
エンチャントや名前付きアイテムなど、config.yml の material だけでは表せない商品向けです。
- メインハンドに看板、オフハンドに販売したいアイテムを持つ(推奨)。オフハンドが空なら、メインハンドが看板以外のアイテムならそちらをテンプレに使います。
- 看板の 2 行目に
HANDまたはITEMを書きます(作成時に自動でアイテム名表示へ置き換わります)。 - 3 行目に
価格 [個数]、4 行目に説明(任意)を書いて設置を完了します。
[PointShop]
HAND
500 2
鋭さ5の剣×2単位
設置が成功すると、その時点のオフハンド(など)のアイテムが NBT ごと shops.yml の item-template-base64 に保存されます。
作成後の 2 行目は HAND / ITEM のままではなく、アイテム名(表示名がある場合は表示名)に自動更新されます。
3 行目の個数(例の 2)は、テンプレートアイテムの個数に掛けて販売個数になります(テンプレが剣1本なら、購入1回で2本)。
- 1回目の右クリックでは、**商品の概要(価格・個数・種類など)**を表示したうえで確認状態に入る
- 5 秒以内にもう一度右クリックすると購入する
- ポイントが足りない場合は購入できない
- アイテムがインベントリに入りきらない場合は購入失敗になり、消費したポイントは戻る
また、登録されたショップ看板の位置は shops.yml に保存されます。
その看板を壊せるのはショップ管理権限(pointplugin.admin / pointpligin.admin)を持つプレイヤーのみです。
主な設定は次の 4 つです。
advancement-rewards: 実績ごとの報酬ポイントdaily-login: デイリーログインボーナスdeath-penalty: 死亡時ペナルティポイントshop: ショップ商品の定義
プレイヤーごとの補助データを保存します。
- 最後にログインボーナスを受け取った日
- 報酬を受け取った実績
- ログインボーナスの追加値
ポイントショップとして登録された看板の座標を保存します。
HAND / ITEM モードの看板では、同じエントリに 販売テンプレート(item-template-base64)が入ります。
看板を壊すと、このデータもまとめて削除されます。
このプラグインのポイントは、Paper の メインスコアボード にある points という Objective に保存されます。
そのため、ポイントそのものは players.yml ではなく、スコアボード側で管理されています。
内部的には次のような処理です。
- ポイント名:
points - 存在しなければ自動作成
- プレイヤー名をキーとしてスコアを保存
advancement-rewards:
"minecraft:story/mine_diamond": 1
"minecraft:nether/root": 2
daily-login:
enabled: true
points: 50
shop:
APPLE:
type: item
material: APPLE
amount: 5
SPEED:
type: potion
effect: SPEED
duration: 1200
amplifier: 1
LOGIN_PLUS:
type: login_bonus_boost
increase: 10この設定なら、
- ダイヤ実績で 100 ポイント
- ネザー到達で 200 ポイント
- 毎日ログインで 50 ポイント
- リンゴ、移動速度アップ、ログインボーナス強化をショップで販売
という形になります。
初心者向けに、クラスごとの役割もまとめておきます。
Main.java: プラグイン起動時の初期化PointManager.java: ポイントの加算・減算・取得RankingCommand.java:/rankingの処理AdvancementListener.java: 実績達成時の報酬処理LoginBonusListener.java: ログインボーナス処理ShopListener.java: ショップ看板の作成と購入処理DataStorage.java:players.ymlの読み書き
- ログインボーナスの増加値 (
login_bonus_boost) は、購入するたびに加算されます - ショップの
potionは、既に同じ効果がある場合にレベルや持続時間を調整して付与します - 設定ミスがある商品は購入に失敗し、ポイントは返却されます
必要ならここに追記してください。