Aparapi を使用していますが、必要なデータを返すことができません。Aparapi がスレッドと同様に機能することを発見しました。
private int calculateBlockLightLevel(final int x,final int y,final int z) {
int blockType = world.getBlockTypeAt(x, z, y);
//TODO Work out how to edit this, aka not Final!
final int found[] = new int[]{0};
Kernel kernel = new Kernel(){
@Override public void run() {
int blockLightLevel = getBlockLightLevelAt(x, y + 1, z);
int highestSurroundingBlockLight = blockLightLevel;
found[0]=highestSurroundingBlockLight;
blockLightLevel = getBlockLightLevelAt(x - 1, y, z);
if (blockLightLevel > highestSurroundingBlockLight) {
highestSurroundingBlockLight = blockLightLevel;
found[0]=highestSurroundingBlockLight;
}
blockLightLevel = getBlockLightLevelAt(x + 1, y, z);
if (blockLightLevel > highestSurroundingBlockLight) {
highestSurroundingBlockLight = blockLightLevel;
found[0]=highestSurroundingBlockLight;
}
blockLightLevel = getBlockLightLevelAt(x, y, z - 1);
if (blockLightLevel > highestSurroundingBlockLight) {
highestSurroundingBlockLight = blockLightLevel;
found[0]=highestSurroundingBlockLight;
}
blockLightLevel = getBlockLightLevelAt(x, y, z + 1);
if (blockLightLevel > highestSurroundingBlockLight) {
highestSurroundingBlockLight = blockLightLevel;
found[0]=highestSurroundingBlockLight;
}
blockLightLevel = getBlockLightLevelAt(x, y - 1, z);
if (blockLightLevel > highestSurroundingBlockLight) {
highestSurroundingBlockLight = blockLightLevel;
found[0]=highestSurroundingBlockLight;
}
}
};
kernel.execute(1);
kernel.dispose();
return Math.max(found[0] - Math.max(BLOCK_TRANSPARENCY.get(blockType), 1), 0);
}
このコードから、見つかったものを自分のリターンに返そうとしています。