pjz9n-pm-pl / Mission

Give the player a mission!
GNU General Public License v3.0
15 stars 8 forks source link
pmmp pmmp-plugin

Mission

Select language: 日本語 English

Select the plugin language

By default, the PM language (pocketmine.yml or server.properties) is used, but if it is not supported, it will be English.

  1. Open the config.yml
  2. Change language setting: language: <language code>

A list of available languages can be found in resources/locale/

(Remove the .ini extension)

e.g. resources/locale/eng.ini => eng

日本語

動作例

mission

コマンド

コマンド名 説明 権限 エイリアス プレイヤーのみ
mission ミッションを表示する mission.command.mission mi はい

mission コマンドでは、引数に名前、ID、短縮IDを指定することができます。 引数を指定しなかった場合と指定したミッションが存在しない場合は全ミッションのリストが送信されます。

サブコマンド (/mission)

サブコマンド名 説明 権限 エイリアス プレイヤーのみ
edit ミッションを編集する mission.command.mission.edit なし はい
setting 設定 mission.command.mission.setting set, config はい
list ミッションのリストを表示する mission.command.mission.list l はい
info プラグインの情報を表示する mission.command.mission.info i いいえ

edit サブコマンドでは、引数に名前、ID、短縮IDを指定することができます。 引数を指定しなかった場合と指定したミッションが存在しない場合は全ミッションのリストが送信されます。

list サブコマンドでは、引数にグループを指定することができます。 引数を指定しなかった場合は全ミッションのリストが送信されます。

権限

権限名 デフォルト
mission.command.mission true
mission.command.mission.edit op
mission.command.mission.setting op
mission.command.mission.list true
mission.command.mission.info op

使い方

項目の説明

ミッションの作成例

  1. /mission edit コマンドを実行
  2. 「ミッション追加」を選択
  3. 「最大達成回数」に1を、「目標ステップ数」に10を入力
  4. 作成したミッションを選択
  5. 「報酬の編集」を選択
  6. 「報酬追加」を選択
  7. 「報酬の種類」に「アイテム報酬」を指定
  8. 「id」に264(ダイヤモンドのID)を、「個数」に10を入力
  9. 「ステップトリガー編集」を選択
  10. 「ステップトリガー追加」を選択
  11. 「ステップトリガーの種類」に「イベント」を指定
  12. 「イベント」に「BlockBreakEvent」を指定

このようになっていれば成功です(フォントの乱れはMCBEの仕様です)

screenshot_20201014_033307

Mineflowとの連携

レシピによる報酬を作成

  1. ミッションの作成例 を参考に「Mineflow報酬」を追加する
  2. Mineflow側のトリガーで「ミッション報酬」を選択、対象の実績を指定する

screenshot_20201014_042130

screenshot_20201014_042154

screenshot_20201014_042202

screenshot_20201014_042211

Tips

レシピをステップトリガーとして使う

  1. Mineflow側でアクション追加画面を開き「ミッション」、「ミッションのステップを増やす」を選択して追加する

screenshot_20201014_060403

Tips

外部プラグインとの連携(開発者向け)

前提条件

報酬の種類を追加する

  1. Rewardを継承したクラスを作成する(実装例は既存Rewardを参照)
  2. そのクラスをRewardsに追加
pjz9n\mission\reward\Rewards::add(ExampleReward::class);

ステップトリガーの種類を追加する

  1. Executorを継承したクラスを作成する(実装例は既存Executorを参照)
  2. そのクラスをExecutorsに追加
pjz9n\mission\mission\executor\Executors::add(ExampleExecutor::class);

Missionを操作

pjz9n\mission\mission\MissionList

Progressを操作

pjz9n\mission\mission\progress\ProgressList

イベントステップトリガーにイベントを追加する

PlayerEventのインスタンスもしくはgetPlayerメソッドを持つイベントはデフォルトで追加されています。 ただし、あなたはgetDamagerメソッドを持つEntityDamageByEntityEvent`イベントを追加したいかもしれません。 そのような場合にはこれを使います。

pjz9n\mission\mission\executor\EventList::addEvent(EntityDamageByEntityEvent::class, function (Event $event): ?Player {
    /** @var EntityDamageByEntityEvent $event */
    $damager = $event->getDamager();
    return $damager instanceof Player ? $damager : null;
});

詳しくはソースコードを参照してください

※各操作のタイミングは問いません(基本的にはプラグイン有効化タイミングに行うのが望ましい)

English

Operation example

mission

Command

command name description permission alias player only
mission Show mission mission.command.mission mi Yes

The mission command allows you to specify a name, ID, and Short ID as arguments. Returns a all missions list if no arguments are specified or the specified mission does not exist.

Sub command (/mission)

sub command name description permission alias player only
edit Edit mission mission.command.mission.edit None Yes
setting Settings mission.command.mission.setting set, config Yes
list Show the missions list mission.command.mission.list l Yes
info Show plugin information mission.command.mission.info i No

The edit subcommand allows you to specify a name, ID, and Short ID as arguments. Returns a all missions list if no arguments are specified or the specified mission does not exist.

The list subcommand allows you to specify a group name as arguments. Returns a all missions list if no arguments are specified.

Permission

permission name default
mission.command.mission true
mission.command.mission.edit op
mission.command.mission.setting op
mission.command.mission.list true
mission.command.mission.info op

Usage

Item description

Mission creation example

  1. Execute command: /mission edit
  2. Select "Add mission"
  3. Input the 1 to "Maximum number of achievements" and 10 to "Target step"
  4. Select the created mission
  5. Select "Edit reward"
  6. Select "Add reward"
  7. Specify "Item reward" for "Reward type"
  8. Input the 264(Diamond ID) to "ID" and 10 to "Amount"
  9. Select "Edit steptrigger"
  10. Select "Add steptrigger"
  11. Specify "Event" for "Steptrigger type"
  12. Specify "BlockBreakEvent" for "Event"

If it looks like this, it ’s a success.

screenshot_20201014_081717

Cooperation with Mineflow plugin

Create reward with recipe

  1. Add "Mineflow reward" by referring to [Mission creation example](#Mission creation example)
  2. Select "MissionReward" with the trigger on the Mineflow plugin side and specify the target mission
Examples

screenshot_20201014_081807

screenshot_20201014_081952

screenshot_20201014_082017

screenshot_20201014_082029

Tips

Use the recipe as a Steptrigger

  1. Open the action addition screen on the Mineflow plugin side and select "Mission", "Increase the mission step" to add
Examples

screenshot_20201014_082129

Tips

Cooperation with external plugins (for developers)

Prerequisites

Add reward type

  1. Create a class that inherits Reward (see existing Reward for implementation example)
  2. Add that class to Reward
pjz9n\mission\reward\Rewards::add(ExampleReward::class);

Add Steptrigger type

  1. Create a class that inherits Executor (see existing Executor for implementation example)
  2. Add that class to Executor
pjz9n\mission\mission\executor\Executors::add(ExampleExecutor::class);

Operate Mission

pjz9n\mission\mission\MissionList

Operate Progress

pjz9n\mission\mission\progress\ProgressList

Add event to Event Steptrigger

Instances of PlayerEvent or events withgetPlayer methods are added by default. However, you may want to add an EntityDamageByEntityEvent event that has a getDamager method. It can be used in such cases.

pjz9n\mission\mission\executor\EventList::addEvent(EntityDamageByEntityEvent::class, function (Event $event): ?Player {
    /** @var EntityDamageByEntityEvent $event */
    $damager = $event->getDamager();
    return $damager instanceof Player ? $damager : null;
});

See the source code for details

* The timing of each operation does not matter (basically, it is desirable to perform it at the plug-in activation timing)