Jetons un coup d'œil au code source de Minecraft 1.8 :
public boolean checkForMixing(World paramWorld, BlockPos paramBlockPos, IBlockState paramIBlockState) {
if (this.blockMaterial == Material.lava) {
int i = 0;
for (EnumFacing localEnumFacing : EnumFacing.values()) {
if ((localEnumFacing != EnumFacing.DOWN) && (paramWorld.getBlockState(paramBlockPos.offset(localEnumFacing)).getBlock().getMaterial() == Material.water)) {
i = 1;
break;
}
}
if (i != 0) {
??? = (Integer)paramIBlockState.getValue(LEVEL);
if (((Integer)???).intValue() == 0) {
paramWorld.setBlockState(paramBlockPos, Blocks.obsidian.getDefaultState());
triggerMixEffects(paramWorld, paramBlockPos);
return true; }
if (((Integer)???).intValue() <= 4) {
paramWorld.setBlockState(paramBlockPos, Blocks.cobblestone.getDefaultState());
triggerMixEffects(paramWorld, paramBlockPos);
return true;
}
}
}
return false;
}
Cette fonction détermine si elle doit créer du caillou, de l'obsidienne ou rien du tout. Elle est appelée par deux autres fonctions, à savoir onBlockAdded
et onNeighborBlockChange
.
onBlockAdded
semble assez explicite, il est appelé chaque fois qu'un bloc a été ajouté et appelle simplement checkForMixing
sur le bloc qui a été ajouté (par exemple en utilisant un seau ou parce qu'il coule et crée un nouveau bloc).
onNeighborBlockChange
est un peu plus intéressant. Il est appelé chaque fois qu'un bloc voisin a été modifié ou mieux encore à chaque fois qu'il est en cours de tick/mise à jour (il n'y a rien qui doit changer, simplement appeler une mise à jour suffit). Le problème avec votre installation est que l'eau et la lave sont définies sur setTickRandomly(true);
, donc vous ne pouvez pas savoir quand elles changent.
Il existe de nombreux générateurs automatiques de (caillou)stone qui comportent une détection de bloc et poussent vers l'avant le bloc généré, donc ils n'ont pas besoin de compter sur une horloge de redstone constante.