Ritz

普段は真面目で優しいFラン大学生

さっそく1日1000文字に飽きる

こればっかりは性分なのでどうしようもない。 ちなみにこのブログの目標はアフィリエイトでかせげるようになることだ。 いわゆるアフィカスになることを目標としている。 アフィカスのことが反吐が出るほど嫌いだという人には慣れてもらいたい。

先日の自分は何をもって一日1000文字の日記を書こうと思ってしまったのかわからない。 あのときはどうやらナイーブな気分だったのでそういう部分がでてしまったのだろう。 ちなみに自分の書いたものを後で見ると恥ずかしくなる特有の感じもあった。 今日は昼になかやまきんにくんさんのYoutubeチャンネルを見て筋トレをしたのでそんなに暗い気持ちにはなっていない。

個人的に自分は引きこもり適正がかなり高いほうだと思っていたが最近違うということに気づいた。 コロナによって家に引きこもるうえで精神的な問題はあまりでなかったが、体を全然動かさないことと陽の光を浴びないことによる肉体的な問題が生まれた。 具体的にには腰が痛くなったり寝る時間が遅くなったりして生活のリズムがおかしなことになったりだ。 本当に引きこもりの才能がある人はそれに関しても問題ないのだと思われる。うらやましい限りだ。 ただ世間を見渡すと外にでてあそばなければ死んでしまうような人もいるようだったので、そういう直接コミュニケーション依存症の人たちと比べると引きこもり適正は高い自信がある。 コロナで実感したこととして、引きこもりにすら才能があるということだ。 今まで白い目で見られてきた引きこもりだがコロナになるとほめたたえられるべき才能になる。 人間も蟻と一緒でいざというときに生き残るために多様性が生まれるのだと思うと感慨深いものがある。

最近疑問に思っていることとして、蛇についているピット器官は平面的なのか立体的なのかということだ。 ドラゴンになるファンタジーを書きたいと思ったとき爬虫類にある程度詳しいと特なのではないかと思ってピット器官について調べてみたが蛇には熱を感知できるピット器官があるということばっかりだったような気がする。 どうやら触覚に近いらしいが。

そんなことはどうでもいいとして、最近の我が国では若いという言葉の定義が広がりつつあるように感じる。 若いといえる限界は30代までだと思う。異論は認める。 若い人がどんどん少なくなっていく中で無理やり若い人を増やそうとしているのかもしれない。 たぶんそう。

一日1000字を目標に日記を書いていく

f:id:innomono8:20201209011111j:plain 書くことは自分を表現するうえでとても手っ取り早い方法だと思ったのでなんとなく書いていこうと思う。といってもパソコンでキーボードを打つだけなので表現のだいぶ狭くなる。 何かを半端に作り出した後、もう一度見直すと恥ずかしくなる気持ちは未だに慣れない。自分が過去に書いたことについてもそれはあてはまっている。これは自分が書いたものにもあてはまっていて、もし十年後の自分が読んだら何かはっとさせられるかもしれないが、一年後の自分が読むと恥ずかしい。この感覚は自分がまだ比較的若いから感じてしまうのか、年老いても付き合っていかないといけない類のものなのか。 それでも書いて置いて損はないと思う。自分の思い出になるし。友人や家族に見られたらめちゃくちゃ恥ずかしいけど。

美文を書く人にあこがれることがあったけど、そもそも美文なんて言葉を知らなかったし、知らなかったとしても作りだすことはできたかもしれないことを考えると自分のワードセンスには期待できない。 思い立ったら吉日とは言ったものの、三日坊主ですぐ飽きてしまう。この日記も長く続かない自信がある。自身に長く付き合ってきた自分ならわかる。ちょっとそれっぽいことを書きたかったので言葉が被って頭痛が痛いけど気にしない。 そもそも読点の付け方もまともにわかっていない。12種類もあるらしい。アホくさ。日本語の欠陥構造だと思う。 自分は日本語をしゃべれることに誇りをもっているけど、欠陥部分についてはもう少しどうにかならなかったものか。

何かを書く上でシンプルに書いてしまいたい自分とそれっぽい表現を一生懸命使って書きたい自分がいる。ただ自分には書く技量がないのでなるべくシンプルにしたいと思っているが、見栄を張りたい自分もいるのでどっちつかずになっている。

人生はあんまりにも長すぎる。今の自分は早く死にたいけど死にたくないという矛盾を抱えている。この感覚が老いていく中で死んでもOKと思えるようになるなんて到底想像がつかない。その上この長い人生でこれからずっと死を見送る側をずっと経験しなければならない。どうやったって悲しい気分になるし、もしかしたら友達はなるべく作らないほうが良いのかもしれない。自分が見送られる側にさっさとなるのもいいかも。見送る側になるのはどうやっても悲しいのにどうして人間は子供を産んでしまうのか。新たな生命の誕生は美しいことだけど愛の結晶であるその新たな生命はいずれ見送る側になることを強制されて、最後には見送られる側になる。子供はみんな幸せになるべきだけど、本当に子供を幸せにしたいならそもそも生まなければ良いのでは? この考えは良くないことだけどそう思ってしまう自分もいる。もしかしたら既に宗教になってるかも。

【Minecraft Mod 1.15.2】とっても簡単なバイオームのつくりかた

Minecraft のバージョンは 1.15.2 Forge のバージョンは forge-1.15.2-31.1.24-mdk 開発環境は IntelliJ IDEA Java のバージョンは10

Biome はテクスチャの用意もいらないし Json への書き込みもいらないのでやりやすいし変化が目に見えてわかりやすいので選びました。

まずは Biome のブロックやスポーンを決めるファイルを作ります。 ありえないバイオームも作れてしまうので楽しいです。

IronBiome.java

package your_package;

import net.minecraft.block.Blocks;
import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntitySpawnPlacementRegistry;
import net.minecraft.entity.EntityType;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.DefaultBiomeFeatures;
import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.IFeatureConfig;
import net.minecraft.world.gen.feature.NoFeatureConfig;
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder;
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilderConfig;

public class IronBiome extends Biome {
    public IronBiome() {
        super((new Biome.Builder()).surfaceBuilder(SurfaceBuilder.DEFAULT,
                new SurfaceBuilderConfig(Blocks.IRON_BLOCK.getDefaultState(),
                        Blocks.REDSTONE_BLOCK.getDefaultState(),
                        Blocks.DIAMOND_ORE.getDefaultState()))
                .precipitation(RainType.RAIN)
                .category(Category.PLAINS)
                .depth(0.125f)
                .scale(0.05f)
                .temperature(0.0f)
                .downfall(0.5f)
                .waterColor(0x7eb377)
                .waterFogColor(0x364a31)
                );
        this.addStructure(Feature.VILLAGE.withConfiguration(new VillageConfig("village/taiga/town_centers", 6)));

        DefaultBiomeFeatures.addCarvers(this);
        DefaultBiomeFeatures.addMonsterRooms(this);
        DefaultBiomeFeatures.addLakes(this);
        DefaultBiomeFeatures.addOres(this);
        DefaultBiomeFeatures.addExtraEmeraldOre(this);
        this.addSpawn(EntityClassification.MONSTER,new SpawnListEntry(EntityType.SKELETON,100,5,5));
        this.addSpawn(EntityClassification.MONSTER,new SpawnListEntry(EntityType.ZOMBIE,100,5,5));

    }
}

このバイオームは表面が鉄ブロックその下の2~3マスがレッドスト―ンブロック、水の下がダイヤモンド鉱石になっています。 それを設定してくれるのが SurfaceBuilderConfigになってます。 これは new で新しく設定しているので3種類のブロックを書く必要がありますが、もともと設定されているものもあるのでそっちを使っても大丈夫です。 例えばタイがバイオ―ムなら

new SurfaceBuilderConfig(Blocks.IRON_BLOCK.getDefaultState()Blocks.REDSTONE_BLOCK.getDefaultState(),Blocks.DIAMOND_ORE.getDefaultState())

から

SurfaceBuilder.GRASS_DIRT_GRAVEL_CONFIG

にできます。 ただそれだと既存のバイオームと変わりがなくて面白くないので今回は三つ設定してます。 その下の precipitation などで雨の種類(なし、雨、雪など)や大きさ、深さ、水の色、温度など設定できます。 その次の this.addStructure で構造物の生成ができます。今回はめんどくさかったので村だけですが、襲撃者の砦や沈没船、海底神殿などの追加ができます。別のものが作りたい場合は

this.addStructure(Feature.VILLAGE.withConfiguration(new VillageConfig("village/taiga/town_centers", 6)));
this.addStructure(Feature.PILLAGER_OUTPOST.withConfiguration(IFeatureConfig.NO_FEATURE_CONFIG));
this.addStructure(Feature.MINESHAFT.withConfiguration(new MineshaftConfig(0.004D, MineshaftStructure.Type.NORMAL)));
this.addStructure(Feature.STRONGHOLD.withConfiguration(IFeatureConfig.NO_FEATURE_CONFIG));

こんな感じでいろいろ加えられます(タイガバイオームから抜粋) Config の書き方は構造物によって違うようなので注意してください。

次の DefaultBiomeFeature.addでは鉱石、湖、モンスタールームなどを加えたりできます。 種類が多すぎるので割愛しますが、予測でいろいろでてくると思うので見てみてください。 これは this で指定するだけなので簡単ですね。

次の this.addSpawn ではスポーンする mob を決めることができます。 ただ気を付けてほしいこととして、動物系の mob は基本的に土ブロックがないと湧いてくれません(イルカなどは別)。 確か継承元の AnimalEntity に書いてあったはずなので気になる方は見てみてください。 予測で出てきた候補は IntelliJ IDEA では CTRL + Bを押せばコードを読むことができます。 だから困ったときはCtrl + Bでコードを見てみてください。read only なので書き込みはできないですが......。

次はバイオームの登録に入ります。 ここに追加するバイオームをまとめて入れておきます。

ModBiome.java

package your_package;

import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeManager;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import BiomeMod;
import IronBiome;

public class ModBiome {
    public static final DeferredRegister<Biome> BIOMES = new DeferredRegister<>(ForgeRegistries.BIOMES, BiomeMod.MOD_ID);
    public static final RegistryObject<Biome> IRON_BIOME = BIOMES.register("iron_biome", IronBiome::new);


}

もう一つ別のやり方があるんですが、今後追加するもののためにこっちで登録します。

次はバイオームをスポーンさせる関数を定義しておく場所を作ります。

BiomeRegister.java

package your_package;


import net.minecraft.world.biome.Biome;
import net.minecraftforge.common.BiomeManager;
import net.minecraftforge.common.BiomeManager.BiomeEntry;
import net.minecraftforge.common.BiomeManager.BiomeType;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
import net.minecraftforge.registries.ObjectHolder;
import net.minecraftforge.registries.RegistryManager;
import BiomeMod;
import IronBiome;


@ObjectHolder(BiomeMod.MOD_ID)
public class BiomeRegister {
    public static final IronBiome IRON_BIOME = null;

   public static void addBiomes(Biome biome,BiomeType type,int weight){
        BiomeManager.addBiome(type,new BiomeEntry(biome,weight));
        BiomeManager.addSpawnBiome(biome);
    }
}

このaddBiomeという関数でバイオームの追加とスポーン条件を設定してるみたいです(たぶん)。 恐らく BiomeManager.addBiome だけだとスポーンしないのではないかと(予想)。

最後に登録します。 このファイルがバイオームの名前だったりを定義してます。もしかして最初に書いておいた方がよかったかもしれないです(小並感)。

BiomeMod.java

package your_package;

import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType;
import net.minecraft.world.biome.*;
import net.minecraftforge.common.BiomeManager;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import BiomeRegister;
import ModBiome;
import IronBiome;

@Mod(BiomeMod.MOD_ID)
@Mod.EventBusSubscriber(modid = BiomeMod.MOD_ID,bus = Mod.EventBusSubscriber.Bus.MOD)
public class BiomeMod {
    public static final String MOD_ID = "biomemod";
    public BiomeMod(){
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
        MinecraftForge.EVENT_BUS.register(this);
        final IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
        ModBiome.BIOMES.register(modEventBus);
    }
    private void setup(final FMLCommonSetupEvent event){
        BiomeRegister.addBiomes(BiomeRegister.IRON_BIOME, BiomeManager.BiomeType.COOL,5);
    }



}

BiomeModの中でModBiomeの中のバイオームを登録してます。 setup関数でさっきのBiomeRegisterの中のaddBiomeを使ってます。

一応これで必要なファイルは全部書き終わっているので、runClient で動かしてみてください。 Biome がちゃんと生成されているか見たい人はsetup関数のweight値を大きくすると見つけやすい思います。 めんどくさい人はビュッフェ形式があるので、そこでさっき作ったバイオームを選んでみてください。作ったバイオームしかでなくなります。

今回バイオームの登録に使った DeferredRegisterは他のEntityなどにも使うことができます。 本当はフォルダで分けてるんですが、意味が被っているフォルダがあったりしてゴチャついていてわかりにくいのでパッケージがyour_packageになってます。

簡単とか書いたけどずいぶん長くなってしまいました。申し訳ないです。

困ったときは Ctrl + Bを忘れないでください。 1,2枚目は勝手に作ったスライムブロックが表面にあるバイオームでで3枚目が今回作った鉄ブロックとレッドストーンブロックのバイオームです。 f:id:innomono8:20200412153956p:plainf:id:innomono8:20200412153959p:plainf:id:innomono8:20200412153950p:plain 通常ではありえないですね。

Ctrl + B を忘れないでください。

読んでいただきありがとうございます。ではまた。

P.S Ctrl + B を忘れないでください。