Skip to content

KamePowerWorld/PointPlugin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PointPlugin

Paper サーバー向けのポイント管理プラグインです。
プレイヤーは

  • 実績の達成
  • 1日1回のログイン
  • ポイントショップの利用

を通してポイントを集めたり使ったりできます。

この README は、実際のコードを読んだ内容に合わせて、初心者向けに整理した説明です。

できること

このプラグインには、主に次の機能があります。

1. 実績を達成するとポイントがもらえる

config.ymladvancement-rewards に書かれた実績を達成すると、ポイントが加算されます。
同じ実績で何度も受け取ることはできません。

例:

advancement-rewards:
  "minecraft:story/mine_diamond": 1

この設定なら、ダイヤモンドを初めて入手する実績で 1 ポイントもらえます。

2. デイリーログインボーナス

プレイヤーがその日に初めてログインしたとき、ポイントを付与します。
日付の判定は 日本時間 (Asia/Tokyo) です。

例:

daily-login:
  enabled: true
  points: 50

この設定なら、1日1回 50 ポイントもらえます。

3. ポイントショップ

看板を使って、ポイントでアイテムや効果を購入できるショップを作れます。

購入できるものは通常 config.ymlshop に定義します。
加えて、エンチャント付きアイテムなどは看板作成時に手元のアイテムを写し取り、shops.yml に保存するモードで販売できます。

config.ymlshop では、次の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

4. ランキング表示

/ranking コマンドで、ポイント上位 10 人を表示できます。
自分が 11 位以下なら、自分の順位もあわせて表示されます。

必要環境

  • Java 21
  • Paper 1.21 系
  • Maven 3.x(ビルドする場合)

pom.xml では paper-api 1.21.4-R0.1-SNAPSHOT が指定されています。

導入方法

サーバーに入れるだけで使う場合

  1. jar をビルドします
  2. できた jar を Paper サーバーの plugins フォルダに入れます
  3. サーバーを起動します
  4. plugins/PointPlugin/ に設定ファイルが生成されます

ビルド方法

プロジェクトのルートで次を実行します。

mvn package

ビルド後の jar は通常 target/ に出力されます。

コマンド

/ranking

ポイントランキングを表示します。

権限

pointplugin.admin

ポイントショップ用の看板を作成できます。
plugin.yml では op のみに許可されています。
内部実装では pointpligin.admin も同じ意味で受理されます。

注意: 歴史的経緯でコードは pointpligin.admin を参照しますが、pointplugin.adminplugin.yml の記載)も同じ権限として扱います。

ポイントショップの作り方

権限 pointplugin.admin または pointpligin.admin を持つプレイヤーが、看板の 1 行目に次を書いて設置します。

[PointShop]

設置後、プラグインがその看板をショップ看板として登録します。
購入時には、看板の 2〜4 行目を次のように読み取ります。

看板の書式(config.yml の商品キーを使う場合)

1行目: [PointShop]
2行目: 商品キー
3行目: 価格 [個数]
4行目: 説明文(任意)

例:

[PointShop]
DIAMOND
150 3
ダイヤ3個

この例では、config.ymlshop.DIAMOND を 3 個分、150 ポイントで購入します。

看板の書式(手持ちアイテムをそのまま販売する場合)

エンチャントや名前付きアイテムなど、config.ymlmaterial だけでは表せない商品向けです。

  1. メインハンドに看板オフハンドに販売したいアイテムを持つ(推奨)。オフハンドが空なら、メインハンドが看板以外のアイテムならそちらをテンプレに使います。
  2. 看板の 2 行目に HAND または ITEM を書きます(作成時に自動でアイテム名表示へ置き換わります)。
  3. 3 行目に 価格 [個数]、4 行目に説明(任意)を書いて設置を完了します。
[PointShop]
HAND
500 2
鋭さ5の剣×2単位

設置が成功すると、その時点のオフハンド(など)のアイテムが NBT ごと shops.ymlitem-template-base64 に保存されます。
作成後の 2 行目は HAND / ITEM のままではなく、アイテム名(表示名がある場合は表示名)に自動更新されます。
3 行目の個数(例の 2)は、テンプレートアイテムの個数に掛けて販売個数になります(テンプレが剣1本なら、購入1回で2本)。

購入時の動き

  • 1回目の右クリックでは、**商品の概要(価格・個数・種類など)**を表示したうえで確認状態に入る
  • 5 秒以内にもう一度右クリックすると購入する
  • ポイントが足りない場合は購入できない
  • アイテムがインベントリに入りきらない場合は購入失敗になり、消費したポイントは戻る

また、登録されたショップ看板の位置は shops.yml に保存されます。
その看板を壊せるのはショップ管理権限(pointplugin.admin / pointpligin.admin)を持つプレイヤーのみです。

設定ファイル

config.yml

主な設定は次の 4 つです。

  • advancement-rewards: 実績ごとの報酬ポイント
  • daily-login: デイリーログインボーナス
  • death-penalty: 死亡時ペナルティポイント
  • shop: ショップ商品の定義

players.yml

プレイヤーごとの補助データを保存します。

  • 最後にログインボーナスを受け取った日
  • 報酬を受け取った実績
  • ログインボーナスの追加値

shops.yml

ポイントショップとして登録された看板の座標を保存します。
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 は、既に同じ効果がある場合にレベルや持続時間を調整して付与します
  • 設定ミスがある商品は購入に失敗し、ポイントは返却されます

ライセンス

必要ならここに追記してください。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages