Konseptler
Özellikler
All blocks are of a base type. Examples of base types include redstone dust, brick stairs, and chest. However, to further differentiate these base types, each block has set of different properties, of which each can take a limited set of values (i.e. activated redstone, corner brick stairs, double chest). A block can have multiple properties (such as corner,*upsidedown* stairs).
Examples of block properties
minecraft:dirt[snowy=false,variant=default] minecraft:dirt[snowy=true,variant=default] minecraft:dirt[snowy=false,variant=grassless] minecraft:dirt[snowy=true,variant=grassless] minecraft:redstone_wire[east=up,north=up,power=0,south=up,west=up] minecraft:redstone_wire[east=side,north=up,power=0,south=up,west=up] minecraft:redstone_wire[east=none,north=up,power=0,south=up,west=up] minecraft:redstone_wire[east=up,north=side,power=0,south=up,west=up]
Bununla birlikte, bazı özellikler, kısa ömürlüdür – yalnızca oyun çalışırken bulunurlar. Değerleri kayıt dosyasına yazılmaz çünkü değerleri otomatik olarak algılanabilir. Örneğin, kablolu Kızıltaş, güçleri olup olmadığı çevreye göre otomatik olarak tespit edildi. (açık olan bir kaldıraç var mı?). Bu durumda, yukarıda gösterildiği gibi minecraft:redstone_wire
ın power
özelliği kısa ömürlü bir özelliktir.
Each property will have a finite number of valid values that can be assigned to the property. Exampeles would be that redstone power can only be a value between 0 and 15. This means that Minecraft knows each possible state of a block prior to fully booting the server. This is required knowledge as sending blocks over the network are compressed to a number.
Block Entity Data
With block properties having a known preset of possible values, these cannot be used when attempting to store data whereby there is a infinite amount of possibilities. Examples include sign text and block inventories.
Minecraft’s solution to this is block entities, which are Java objects that store additional data on a Location the block is at in NBT format. Examples of block entities are Chest
Example use would be to receive the inventory of a chest. This can be done as follows
import org.spongepowered.api.world.server.ServerLocation;
import org.spongepowered.api.block.entity.BlockEntity;
import org.spongepowered.api.block.entity.carrier.chest.Chest;
import org.spongepowered.api.item.inventory.type.BlockEntityInventory;
public Optional<BlockEntityInventory<Chest>> getChestInventory(ServerLocation location){
Optional<BlockEntity> optionalBlockEntity = location.blockEntity();
if(optionalBlockEntity.isPresent()){
BlockEntity blockEntity = optionalBlockEntity.get();
if(blockEntity instanceof Chest){
Chest chest = (Chest) blockEntity;
return Optional.of(chest.inventory());
}
}
return Optional.empty();
}
Tüyo
Bazı şeyler, resim yapmak gibidir, aslında varlıklardır.
Ancak, karo varlıklar render’ı geçersiz kılabilir ve böylece normal bir blok gibi gözükmezler, ancak bu genellikle yetersizdir ve bir müşterinin kare hızının düşmesine neden olur.