2016年12月20日火曜日

[Pocketmine-mp] how to upgrade to 1.0.0 [phar] [src]

[MinecraftPE] PocketMine-MP 1.0.0 の対応のさせ方! [PMMP src]

PocketMine-MPの1.0.0対応版をいつも通り見つけてきたので、掲示しときます。

php7対応です

"pmmp"


これはapiが3.0なので、プラグイン未対応があるかもしれませんが未検証。


Pharはこちらです。

jenkins(最新版)http://jenkins.haniokasai.com/job/PocketMine-1.0.0/



2016年12月18日日曜日

[C#なMinecraftPEサーバーのMinet]プラグインをつくる#3 コマンド処理編

こんにちは、haniokasaiです。
今回はコマンドをMinetサーバー内で使う方法を解説します。

1、おまじないをかける
Minetでコマンドをプレイヤーに使わせるには以下のおまじないをかける必要があります。これにより、ワールド内でチート(コマンド)が使えると、端末が認識します。

var setCmdEnabled = McpeSetCommandsEnabled.CreateObject();
setCmdEnabled.enabled = true;
player.SendPackage(setCmdEnabled);

これは、このプラグインを入れれば、勝手にやってくれます。
https://github.com/haniokasai/EnableCommand

2.書き方

        [Command(Name = "test", Description = "コマンドテスト", Permission = "OP")]
        public void test(Player player)
        {
            player.Level.BroadcastMessage("test", type: MessageType.Raw); // Message typeはtip popup messageが選べる!
        }

こんな感じ。Permissionに関しては、まだ仕様(しよう)が良くわかりません。どうしよう。

[C#なMinecraftPEサーバーのMinet]プラグインをつくる#2 コード編

イベントや、コマンドを理解しようとしたらすでにまとめてあったので、和訳します。

プラグインAPIの文章

MiNETにはすでにたくさんのMinecraftの機能が実装されています。 しかし、私たちは時にはあなたがより多くの機能を望むこと、あるいはそれが違うように機能するかもしれません。 この目的のために、MiNETは.NETのプラグインAPIを提供しています。これを使用して、あなたの特定のニーズに合わせて機能を作り、調整し改造することができます。
注:APIとこのページの情報は実験的なものであり、予告なく変更することがあります。 APIに関するご質問は、Gitterチャット(メインページのリンク)でお問い合わせください。

対応している機能

現在、次の機能がAPIによって提供されています。
  • 起動クラスによるサーバーの起動時に何かを実行すること。
  • プラグインは、パケット送受信処理をすることができます。
  • プラグインは、コマンドの処理ができます。

Hello world プラグイン

コマンド処理

自分でコマンドを作ることができます。これらのコマンドは、MiNETが解析し、低レベルなコマンドハンドラに渡すテキストメッセージとしてクライアントから送信されます。
下の例文は '/min' コマンドの処理です。
    [Command]
    public void Min()
    {
    }
下に、特定の球の範囲を爆破する、より完全な例があります。
    [Command]
    [Description("特定の球の範囲を爆破します")]
    public void Boom(Player player, int radius = 10)
    {
        new Explosion(
            player.Level,
            new BlockCoordinates((int) player.KnownPosition.X, (int) player.KnownPosition.Y, (int) player.KnownPosition.Z),
            radius).Explode();
    }

この例について注目すべきことがいくつかあります。 まず、名前とメソッドのパラメータに基づいて(クライアント内の)使用情報が自動的に生成されます。 さらに、Descriptionを使用して説明を書くことができます。 Playerオブジェクトは、最初のパラメータとして存在する場合、自動的に挿入されます。 他のすべてのメソッドパラメータは、コマンドパラメータとして扱われます。 それらは、MiNETによる受信の際にパラメータに指定された型に自動的に変換されます。

下のデータ型は自動で変換されます。
  • string
  • short
  • int
  • bool
  • float
  • double
これにより、プラグイン作成者がコマンド処理メソッドから完全な機能とパラメータ解析を得るために書くために必要なコードが大幅に削減されます。
APIは、型変換をバイパスして引数を直接送信するために、次の表記法もサポートしています(警告:これには現在バグがあります)
    [Command]
    [Description("argsを使った一般的なコマンド")]
    public void Generic(Player player, string[] args)
    {
        Log.Info("一般的なコマンドが実行されました");
    }
args引数には、クライアントのチャットウィンドウにユーザが入力した引数リストが含まれています。

パケット受信処理

パケットを引数として受け取るメソッドを実装することによって、パケットの受信を傍受することができます。 以下の規則に従って実装されたメソッドはすべて、受信パケットハンドラとして自動的に登録され、PacketHandlerなしで実行されます。
  • メソッドはpublicにしてください
  • メソッドは Package型で返します。
  • メソッドの最初の引数は、Packageから派生した型です
  • 送信パケットハンドラの場合、Sendは常に必要です。
    public Package MinimalHandler(McpeMovePlayer packet)
    {
        return packet; // Handled
    }
必要に応じて、メソッドにPacketHandlerを使用して注釈を付けることができます。 これにより、コードの可読性が向上し、コードの動作も変更される可能性があります。 また、以下のReceiveに注目し、このメソッドを受信ハンドラとして指定します。 メソッドはハンドラを受け取るようにデフォルト設定されています。
    [PacketHandler]
    [Receive]
    public Package HandleIncomingMove(McpeMovePlayer packet)
    {
        return packet;
    }
送信するパケットをプラグインで傍受したい場合は、ReceiveをSendに置き換えます。
    [Send]
    public Package HandleSendMove(McpeMovePlayer packet)
    {
        return packet;
    }
ハンドラメソッドがnullを返すと、それはパケットのさらなる処理を停止します。 これはsendハンドラとreceiveハンドラの両方で同じです。
    [Send]
    public Package HandleSendMove(McpeMovePlayer packet)
    {
        return null; // Halt processing
    }
2番目の引数はPlayer型の場合、現在、要求したプレイヤーが挿入されます。
    public Package HandleSendMove(McpeMovePlayer packet, Player player)
    {
        return packet;
    }

完全なプラグインの例

以下のコードは、プレイヤー移動パケットの送受信処理をできるプラグインを実装する例です。
    [Plugin]
    public class SimplePlugin : Plugin
    {
        [PacketHandler, Receive]
        public Package HandleIncoming(McpeMovePlayer packet)
        {
            return packet; // Process
        }

        [PacketHandler, Send]
        public Package HandleOutgoing(McpeMovePlayer packet)
        {
            return packet; // Send
        }
    }

サーバーの起動時処理

MiNETの多くの基礎機能は、さまざまなプロバイダインターフェイスを実装することで置き換えることができます。 ただし、この機能を置き換えるには、サーバーが動作する前に再構成する必要があります。 したがって、これらのシナリオをカバーし、起動の冗長的な構成を避けるために、プラグイン開発者はIStartupを実装してサーバーを起動時処理を選択できます。
シンプルなコード構成によって、サーバー内のID管理を完全に置き換える方法の完全な例を以下に示します。
    [Plugin]
    public class StartupPlugin : Plugin, IStartup
    {
        private static readonly ILog Log = LogManager.GetLogger(typeof (StartupPlugin));

        /// <summary>
        /// Minetのスタートアップクラス。 ユーザーと権限管理を保存します。
        /// </summary>
        /// <param name="server"></param>
        public void Configure(MiNetServer server)
        {
            server.UserManager = new UserManager<User>(new DefaultUserStore());
            server.RoleManager = new RoleManager<Role>(new DefaultRoleStore());
            Log.Info("Executed startup successfully. Replaced identity managment.");
        }
    }
MiNETのID管理についてもっと知りたい場合は、公式のASP.NET IDのドキュメントを参照してください:

イベント

MiNETはまた、コードを書くのを少し簡単にするために、いくつかのイベントを提供しています。
    var server = Context.Server;

    server.LevelManager.LevelCreated += (sender, args) =>
    {
        Level level = args.Level;
        level.BlockBreak += (o, eventArgs) => { };
        level.BlockPlace += (o, eventArgs) => { };
    };

    server.PlayerFactory.PlayerCreated += (sender, args) =>
    {
        Player player = args.Player;
        player.PlayerJoin += (o, eventArgs) => eventArgs.Player.Level.BroadcastMessage($"{ChatColors.Gold}[{ChatColors.Green}+{ChatColors.Gold}]{ChatFormatting.Reset} {eventArgs.Player.Username}");
        player.PlayerLeave += (o, eventArgs) => eventArgs.Player.Level.BroadcastMessage($"{ChatColors.Gold}[{ChatColors.Red}-{ChatColors.Gold}]{ChatFormatting.Reset} {eventArgs.Player.Username}");
    };

さらなる例


2016年12月16日金曜日

[C#なMinecraftPEサーバーのMinet]プラグインをつくる

こんにちは、haniokasaiです。おぎわらさんがブログにしてます作り方ですけど、具体的な開発の説明がないので、可能な限りしたいと思います。(C#経験ないです)

必要なもの
 visual studio 2015(コミュニティーエディション)(ググればやり方はわかります、インストール時にwindowsのc#をいれてあげてください)
  やる気(ありがち)
 フィロソフィア(知を愛すること)

1、立ち上げてください。

2 ファイル->新規作成→プロジェクト


3 Visual C#のwindowsのクラスライブラリで、名前はExamplePluginとします。そしてOKを押します。


4 立ち上がったら、右側のソリューションエクスプローラーのPropertiesをダブルクリックすると、左のような画面が出ますから、対象のフレームワークを4.6.1にしてください。


5、次にnuget(javaで言うmaven)でminetを追加します。ツール->Nugetパッケージ(ry->ソリューションの(ry


6 参照タブを押して、minetと検索して、minetを選んで、インストールボタンを押してください。すべての質問に対して、肯定的な選択肢を選んでください。



7、終わったら、class1.csを開いて、図のように埋めてください。

[Plugin(PluginName = "ExamplePlugin", Description = "", PluginVersion = "1.0", Author = "haniokasai")]



使うクラスをインポートする必要がありますから、電球ボタンを押して、using Minetなんとかを選んでください。


8,class1の横に 

: Plugin 

と書いてください。

やはり、この時も電球ボタンを押して、using Minetなんとかを選択。


9,コードを書いていきます。 public class 云々の下のところにprotectedと書いてみてください。

次に、スペースを入力し、oと打つと予測候補でoverrideがありますから、それを選択。

また、スペースを押して、o通すとOnEnable()が現れます、それをクリックしてください。PMMPやNukkit開発者にはわかりますよね?起動時に読み込まれるところです。

するとこんな感じになります。


10,さらに、baseの下に、

Console.Write("Loaded");

と書いてみましょう(Loaderdじゃなくても、お好きに)


すると、こんな感じにコードがなります。

using MiNET.Plugins;
using MiNET.Plugins.Attributes;
using System;
namespace ExamplePlugin
{
[Plugin(PluginName = "ExamplePlugin", Description = "", PluginVersion = "1.0", Author = "haniokasai")]
public class Class1 : Plugin
{
protected override void OnEnable()
{
base.OnEnable();
Console.Write("Loaded");
}
}
}

11,これをビルドするには、ビルド->(1回目の時は)ソリューションのビルド、(2回目は)ソリューショのリビルドを選ぶとプラグイン(DLL)が生成されます。保存場所は下のログに書いてあります。




minetに読み込ませると、このように表示されます。


めでたしめでたし。
Minetで巨大なサーバーを開きたい。。。。




参考文献

http://ogiwara.wpblog.jp/2016/11/24/developingplugin/

https://github.com/NiclasOlofsson/MiNET/blob/master/src/MiNET/TestPlugin/Pets/PetsPlugin.cs

cloudflareのUnder DDoS Modeのサイトからファイルを拾ってくる in Python

こんにちは、haniokasaiです。 https://forum.pmmp.jp  が廃止になるため、慌ててデータを落としたくなりました。 https://github.com/haniokasai/XenDownloder こちら。 import cfsc...