entidad cuadro
-
Capítulo anterior informó sobre el estado de la caja. Al iniciar el juego, una caja se registrarán todos los estados posibles, lo que significa que si usted tiene 14 propiedad booleana, esta caja tendrá registro estatal 2 ^ 14 = 16384, por esta razón, la caja no debe tener demasiado cuadro de propiedad estatal. Precisa, estado cuadrados es mirar,
BlockEntity
(cuadrados sólidos) es para los estados más avanzados. -
BlockEntity
(cuadrados sólidos) se utiliza principalmente para almacenar datos a una caja, la caja antes de la creación de una entidad, primero debe tener una caja, este capítulo hablaBlockEntity
de la creación y registro. -
Creación y registro
-
Crear una clase hereda de la caja entidad
BlockEntity
(esto le indicará un error, no el control)public class IronFurnaceBlockEntity extends BlockEntity { public IronFurnaceBlockEntity() { } }
-
entidad cuadro de registro (esto le indicará un error, la primera cuestión)
//声明 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));
-
entidad modificando el bloque constructor de la clase
public IronFurnaceBlockEntity() { super(DemoMod.INSTANCE.IRON_FURNACE_BLOCK_ENTITY); } //这里传入了DemoMod类的实例,下面是实现: public class DemoMod implements ModInitializer { public static DemoMod INSTANCE; public DemoMod(){INSTANCE = this;} [...] }
-
Bloquear implementado en la clase de
BlockEntityProvider
las interfacespublic class IronFurnaceBlock extends Block implements BlockEntityProvider { [...] @Override public BlockEntity createBlockEntity(BlockView view) { return new IronFurnaceBlockEntity(); } }
-
Ahora, la entidad sería capaz de usar la caja, pero no tiene ninguna función.
-
-
Los datos de secuencia
-
Reescribiendo
toTag
yfromTag
método, en donde una variable y un nuevo método para probar.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); }
-
En
IronFurnaceBlock
sustituir la clase deactivate
método para lograr la función de la caja derecha@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; }
-
Ejecución de juego, para lograr la validación
Después de volver a entrar en el mundo, los datos pueden ser leídos guardan normalmente
-