ボックスエンティティ
-
前の章では、箱の状態にブリーフィング。あなたがゲーム、すべての可能な状態が登録されるボックスを起動すると、どのあなたは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; }
-
検証を達成するために、ゲームを実行します
世界を再入力した後、データが正常に保存されて読み取ることができます
-