Minecraftのファブリックモジュール開発(6)の正方形のエンティティ

ボックスエンティティ

  • 前の章では、箱の状態にブリーフィング。あなたがゲーム、すべての可能な状態が登録されるボックスを起動すると、どのあなたは14ブール型プロパティを持っている場合は、このボックスは、2 ^ 14 = 16384状態の登録を持っていることを意味し、このような理由のために、ボックスにはあまり必要はありません国有財産をボックス。状態は、見ている正確な、四角BlockEntity(黒四角)は、より高度な状態のためです。

  • BlockEntity(黒四角)は、主ボックスにデータを格納するために使用され、ボックスは、エンティティを作成する前に、あなたが最初のボックスを持っている必要があり、この章では、話すBlockEntityの作成と登録。

  • 作成と登録

    • ボックスのエンティティクラスの継承を作成しますBlockEntity(このコントロール、エラーがないプロンプトが表示されます)

      public class IronFurnaceBlockEntity extends BlockEntity {
      
          public IronFurnaceBlockEntity() {
          }
      }
      
    • 登録ボックスエンティティ(これはエラー、最初の問題を促すメッセージが表示されます)

      //声明
      public static BlockEntityType<IronFurnaceBlockEntity> IRON_FURNACE_BLOCK_ENTITY;
      
      
      //注册, 在onInitialize()方法中
      IRON_FURNACE_BLOCK_ENTITY = Registry.register(Registry.BLOCK_ENTITY, "demo:iron_furnace", BlockEntityType.Builder.create(IronFurnaceBlockEntity::new, IRON_FURNACE_BLOCK).build(null));
      
    • エンティティクラスのコンストラクタブロックの変更

      public IronFurnaceBlockEntity() {
          super(DemoMod.INSTANCE.IRON_FURNACE_BLOCK_ENTITY);
      }
      
      //这里传入了DemoMod类的实例,下面是实现:
      public class DemoMod implements ModInitializer {
          public static DemoMod INSTANCE;
          public DemoMod(){INSTANCE = this;}
          [...]
      }
      
    • ブロックは、あなたのクラスで実装BlockEntityProviderインタフェース

      public class IronFurnaceBlock extends Block implements BlockEntityProvider {
          [...]
          @Override
          public BlockEntity createBlockEntity(BlockView view) {
              return new IronFurnaceBlockEntity();
          }
      }
      
    • さて、エンティティは、ボックスを使用することができるだろうが、任意の機能を持っていません。

  • 配列データ

    • 書き換えtoTagおよびfromTag方法、どこ変数およびテストするための新しい方法。

      private int num = 0;
      @Override
      public CompoundTag toTag(CompoundTag compoundTag) {
          super.toTag(compoundTag);
          compoundTag.putInt("num",num);
          return compoundTag;
      }
      
      @Override
      public void fromTag(CompoundTag compoundTag) {
          super.fromTag(compoundTag);
          num = compoundTag.getInt("num");
      }
      public void numAdd(){ //调用函数,变量+1,并打印
          num++;
          System.out.println("The Number is "+ num);
      }
      
    • IronFurnaceBlockオーバーライドクラスactivateメソッドは、右のボックス機能を達成するために

      @Override
      public boolean activate(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
          if (world.isClient)return true; 
          //获取方块实体
          IronFurnaceBlockEntity blockEntity = (IronFurnaceBlockEntity) world.getBlockEntity(pos);
          //数字加1
          blockEntity.numAdd();
          return true;
      }
      
    • 検証を達成するために、ゲームを実行します

      [画像のダンプはチェーンが失敗し、発信局は、直接アップロード(IMG-dtUrtQ9s-1584884073045)(./リソース/画像/ 19.png)ダウン画像を保存することが推奨され、セキュリティチェーン機構を有していてもよいです]

      世界を再入力した後、データが正常に保存されて読み取ることができます

      [画像のダンプはチェーンが失敗し、発信局は(IMG-F4yuqZQs-1584884073046)(./リソース/画像/ 20.png)直接アップロードダウン画像を保存することが推奨され、セキュリティチェーン機構を有していてもよいです]

公開された59元の記事 ウォン称賛45 ビュー20000 +

おすすめ

転載: blog.csdn.net/m0_37771142/article/details/105036307