【マインクラフト】ハードコアモードでサーバを立ち上げる方法(Java版のみ)

ハードコアモードって何ですか?

ゲームモードはサバイバルで、難易度ハード固定、しかも死んでしまったら終了、復活できない、という超ハードなモードです。

これはJava版にしか存在しないモードです。

統合版勢残念。

シングルモードでは、上の設定にすればハードコアモードでワールドが生成されますが、

これをサーバでやってしまいます。

とは言っても、やり方はそんなに難しくなくて、

server.propertiesファイルの中に、

hardcore=false

という項目があるので(わかりやすいですね)

hardcore=true

と書き換えてサーバを立ち上げればOK。

ハートのアイコンが上のように変わればハードコアモードです。

ここからはチートの話ですが。

死んでしまうと、ゲームモードをスペクテイターモードに変更するか、タイトルに戻るかを選択することが出来ます。

スペクテイターモードというのは、世界を眺めるだけのモード。

死後の世界を気の済むまで自由に眺めることが出来ます。

復帰することはできません。

死んだかどうかのフラグデータはworldフォルダーの中に入っているので、定期的にworldフォルダーのバックアップを取っておいて、死亡後にworldフォルダーをごっそり復元すれば復帰できます。

まぁ、そんなことやるくらいなら、最初から普通にハードモードでプレイすればいいんだけどね(めんどくさい)

やり直しがきかない世界だから面白いハードコアモード。

腕試しにいかがですか?

おいらのVSCodeで使用している拡張機能

VSCodeっていろんな拡張機能がありますよね。

拡張機能の追加で自分が使いやすいように、好きにカスタマイズできるのがVSCodeのもう一つの特徴でもあります。

あまり変わった物入れてないけど。

ctagsx

Laravel開発環境に入れています。

PHPってデフォルトだとタグジャンプできないんすよ。

でも、この拡張機能を入れて、コマンドでtagsファイルをプロジェクトのホームディレクトリに置いておくと、

ctrl+関数左クリックでタグジャンプ出来るようになります。

sftp sync extension for VS Code

これはラズパイのコーディングに使用しています。

ラズパイの指定フォルダとローカルPCのフォルダでソースファイルの同期を取り、ローカルPCで編集・保存したファイルを自動的にラズパイ側へ反映してくれます。

Linux環境での開発にも使えますよ。

VSCODE POWER MODE!!!

これは完全にお遊び系の拡張機能。

文字を入力するとエフェクトがかかります。

花火を打ち上げながらコンボを決めてコーディングするとテンション上がります。

言っていることがわからなければググってみてください。

【北海道大戦】シーンを追加する

最新ソースはこちら(gitHub)。

https://github.com/takishita2nd/HokkaidoWar

バトルシーンを追加するに当たりまして、

今まではエンジンに直接オブジェクトを配置していましたが、

シーンを使用するとなると、このやり方では上手くいけないっぽい。

なので、メインシーンを追加して、このシーンのレイヤーにオブジェクトを配置する必要があります。

なので、今回はその修正を実行。

    class HokkaidoWar
    {

        public HokkaidoWar()
        {
        }

        public void Run()
        {
            asd.Engine.Initialize("北海道大戦", 1200, 1000, new asd.EngineOption());

            // シーンの登録
            var scene = new MainScene();
            asd.Engine.ChangeScene(scene);

            while (asd.Engine.DoEvents())
            {
                asd.Engine.Update();
            }
            asd.Engine.Terminate();
        }

    }

いままでエンジンに追加していたオブジェクトは全て無くなり、シーンを作成して、そのシーンに移行、という処理に変わります。

    class MainScene : asd.Scene
    {
中略
        protected override void OnRegistered()
        {
            var layer = Singleton.GetMainSceneLayer();
            AddLayer(layer);

            // 下地
            var background = new asd.GeometryObject2D();
            layer.AddObject(background);
            var bgRect = new asd.RectangleShape();
            bgRect.DrawingArea = new asd.RectF(0, 0, 1800, 1000);
            background.Shape = bgRect;

            cities = new List<City>();
            var r = new Random();
            foreach (var map in mapData.list)
            {
                City city = new City(map.name, map.point, map.population);
                cities.Add(city);
            }

            _battle = new Battle(cities);
            aliveCities = _battle.GetAliveCityList();
        }

        protected override void OnUpdated()
        {
            asd.Vector2DF pos = asd.Engine.Mouse.Position;

            switch (gameStatus)
            {
                case GameStatus.SelectCity:
                    cycleProcessSelectCity(pos);
                    break;
                case GameStatus.ActionEnemy:
                    cycleProcessActionEnemy(pos);
                    break;
                case GameStatus.ActionPlayer:
                    cycleProcessActionPlayer(pos);
                    break;
                case GameStatus.ShowResult:
                    break;
                case GameStatus.GameEnd:
                    cycleProcessGameEnd();
                    break;
                case GameStatus.GameOver:
                    cycleProcessGameOver(pos);
                    break;
            }

            if (asd.Engine.Mouse.LeftButton.ButtonState == asd.ButtonState.Push)
            {
                switch (gameStatus)
                {
                    case GameStatus.SelectCity:
                        onClickMouseSelectCity(pos);
                        break;
                    case GameStatus.ActionEnemy:
                        break;
                    case GameStatus.ActionPlayer:
                        onClickMouseActionPlayer(pos);
                        break;
                    case GameStatus.ShowResult:
                        onClickMouseShowResult();
                        break;
                    case GameStatus.GameEnd:
                        break;
                    case GameStatus.GameOver:
                        break;
                }
            }
        }

後略

OnRegistered()はシーン登録時に実行されます。

オブジェクトの配置はここで行います。

レイヤーはシングルトンで取り出すようにしました。(いろんなところでオブジェクトの配置やっているので)

OnUpdated()には、while (asd.Engine.DoEvents()){ }内で実行していた処理を行います。

これは、asd.Engine.Update();実行時に実行されるイメージです。

細かい所は結構修正しているのですが、概要はこんな感じです。

とりあえず、シーンを使用して、今までと同じ動きが出来ることを確認しました。

次はバトルシーンの追加をしていきましょうか。