+ private void updateFluids(int x, int y) {
+ if (Items.isWater(world.getForeMap(x, y)) && world.getForeMap(x, y)!=8) {
+ if ((!Items.isWater(world.getForeMap(x-1,y)) ||
+ (Items.isWater(world.getForeMap(x,y)) && world.getForeMap(x-1, y)>=world.getForeMap(x, y))) &&
+ (!Items.isWater(world.getForeMap(x+1,y)) ||
+ (Items.isWater(world.getForeMap(x,y)) && world.getForeMap(x+1, y)>=world.getForeMap(x, y)))){
+ world.setForeMap(x, y, world.getForeMap(x, y)+1);
+ if (world.getForeMap(x, y)>62) world.setForeMap(x, y, 0);
+ }
+ }
+
+ if (world.getForeMap(x, y) == 8) {
+ if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=60 && world.getForeMap(x, y+1)<=62) ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) {
+ world.setForeMap(x,y+1,8);
+ updateBlock(x, y+2);
+ } else if (Items.isLava(world.getForeMap(x, y+1))) {
+ if (world.getForeMap(x, y+1)>9) world.setForeMap(x, y+1, 4);
+ else world.setForeMap(x, y+1, 66);
+ } else if (Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) {
+ if (world.getForeMap(x+1, y)==0 ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x+1, y)).collision && !Items.isFluid(world.getForeMap(x+1, y))) ||
+ (Items.isWater(world.getForeMap(x+1, y)) && world.getForeMap(x+1, y)>60)) {
+ world.setForeMap(x+1,y,60);
+ updateBlock(x+1, y+1);
+ } else if (Items.isLava(world.getForeMap(x+1, y))) {
+ if (world.getForeMap(x+1, y)>9) world.setForeMap(x+1, y, 4);
+ else world.setForeMap(x+1, y, 66);
+ } else if (world.getForeMap(x+1, y)==60 && world.getForeMap(x+2, y)==8) world.setForeMap(x+1, y, 8);
+
+ if (world.getForeMap(x-1, y)==0 ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x-1, y)).collision && !Items.isFluid(world.getForeMap(x-1, y))) ||
+ (Items.isWater(world.getForeMap(x-1, y)) && world.getForeMap(x-1, y)>60)) {
+ world.setForeMap(x-1,y,60);
+ updateBlock(x-1, y+1);
+ } else if (Items.isLava(world.getForeMap(x-1, y))) {
+ if (world.getForeMap(x-1, y)>9) world.setForeMap(x-1, y, 4);
+ else world.setForeMap(x-1, y, 66);
+ } else if (world.getForeMap(x-1, y)==60 && world.getForeMap(x-2, y)==8) world.setForeMap(x-1, y, 8);
+ }
+ return;
+ }
+ if (world.getForeMap(x, y) == 60) {
+ if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=60 && world.getForeMap(x, y+1)<=62) ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) {
+ world.setForeMap(x,y+1,8);
+ updateBlock(x, y+2);
+ } else if (Items.isLava(world.getForeMap(x, y+1))) {
+ if (world.getForeMap(x, y+1)>9) world.setForeMap(x, y+1, 4);
+ else world.setForeMap(x, y+1, 66);
+ } else if (Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) {
+ if (world.getForeMap(x+1, y)==0 ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x+1, y)).collision && !Items.isFluid(world.getForeMap(x+1, y))) ||
+ (Items.isWater(world.getForeMap(x+1, y)) && world.getForeMap(x+1, y)>61)){
+ world.setForeMap(x+1,y,61);
+ updateBlock(x+1, y+1);
+ } else if (Items.isLava(world.getForeMap(x+1, y))) {
+ if (world.getForeMap(x+1, y)>9) world.setForeMap(x+1, y, 4);
+ else world.setForeMap(x+1, y, 66);
+ }
+
+ if (world.getForeMap(x-1, y)==0 ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x-1, y)).collision && !Items.isFluid(world.getForeMap(x-1, y))) ||
+ (Items.isWater(world.getForeMap(x-1, y)) && world.getForeMap(x-1, y)>61)){
+ world.setForeMap(x-1,y,61);
+ updateBlock(x-1, y+1);
+ } else if (Items.isLava(world.getForeMap(x-1, y))) {
+ if (world.getForeMap(x-1, y)>9) world.setForeMap(x-1, y, 4);
+ else world.setForeMap(x-1, y, 66);
+ }
+ }
+ return;
+ }
+ if (world.getForeMap(x, y) == 61) {
+ if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=60 && world.getForeMap(x, y+1)<=62) ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) {
+ world.setForeMap(x,y+1,8);
+ updateBlock(x, y+2);
+ } else if (Items.isLava(world.getForeMap(x, y+1))) {
+ if (world.getForeMap(x, y+1)>9) world.setForeMap(x, y+1, 4);
+ else world.setForeMap(x, y+1, 66);
+ } else if (Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) {
+ if (world.getForeMap(x+1, y)==0 ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x+1, y)).collision && !Items.isFluid(world.getForeMap(x+1, y))) ){
+ world.setForeMap(x+1,y,62);
+ updateBlock(x+1, y+1);
+ } else if (Items.isLava(world.getForeMap(x+1, y))) {
+ if (world.getForeMap(x+1, y)>9) world.setForeMap(x+1, y, 4);
+ else world.setForeMap(x+1, y, 66);
+ }
+
+ if (world.getForeMap(x-1, y)==0 ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x-1, y)).collision && !Items.isFluid(world.getForeMap(x-1, y))) ){
+ world.setForeMap(x-1,y,62);
+ updateBlock(x-1, y+1);
+ } else if (Items.isLava(world.getForeMap(x-1, y))) {
+ if (world.getForeMap(x-1, y)>9) world.setForeMap(x-1, y, 4);
+ else world.setForeMap(x-1, y, 66);
+ }
+ }
+ return;
+ }
+ if (world.getForeMap(x, y) == 62) {
+ if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=60 && world.getForeMap(x, y+1)<=62) ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) {
+ world.setForeMap(x,y+1,8);
+ updateBlock(x, y+2);
+ } else if (Items.isLava(world.getForeMap(x, y+1))) {
+ if (world.getForeMap(x, y+1)>9) world.setForeMap(x, y+1, 4);
+ else world.setForeMap(x, y+1, 66);
+ }
+ return;
+ }
+
+ if (Items.isLava(world.getForeMap(x, y)) && world.getForeMap(x, y)!=9) {
+ if ((!Items.isLava(world.getForeMap(x-1,y)) ||
+ (Items.isLava(world.getForeMap(x,y)) && world.getForeMap(x-1, y)>=world.getForeMap(x, y))) &&
+ (!Items.isLava(world.getForeMap(x+1,y)) ||
+ (Items.isLava(world.getForeMap(x,y)) && world.getForeMap(x+1, y)>=world.getForeMap(x, y)))){
+ world.setForeMap(x, y, world.getForeMap(x, y)+1);
+ if (world.getForeMap(x, y)>65) world.setForeMap(x, y, 0);
+ }
+ }
+
+ if (world.getForeMap(x, y) == 9) {
+ if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=63 && world.getForeMap(x, y+1)<=65) ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) {
+ world.setForeMap(x,y+1,9);
+ updateBlock(x, y+2);
+ } else if (Items.isWater(world.getForeMap(x, y+1))) {
+ world.setForeMap(x, y+1, 1);
+ } else if (Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) {
+ if (world.getForeMap(x+1, y)==0 ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x+1, y)).collision && !Items.isFluid(world.getForeMap(x+1, y))) ||
+ (Items.isLava(world.getForeMap(x+1, y)) && world.getForeMap(x+1, y)>63)) {
+ world.setForeMap(x+1,y,63);
+ updateBlock(x+1, y+1);
+ } else if (Items.isWater(world.getForeMap(x+1, y))) {
+ world.setForeMap(x+1, y, 1);
+ }
+
+ if (world.getForeMap(x-1, y)==0 ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x-1, y)).collision && !Items.isFluid(world.getForeMap(x-1, y))) ||
+ (Items.isLava(world.getForeMap(x-1, y)) && world.getForeMap(x-1, y)>63)) {
+ world.setForeMap(x-1,y,63);
+ updateBlock(x-1, y+1);
+ } else if (Items.isWater(world.getForeMap(x-1, y))) {
+ world.setForeMap(x-1, y, 1);
+ }
+ }
+ return;
+ }
+ if (world.getForeMap(x, y) == 63) {
+ if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=63 && world.getForeMap(x, y+1)<=65) ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) {
+ world.setForeMap(x,y+1,9);
+ updateBlock(x, y+2);
+ } else if (Items.isWater(world.getForeMap(x, y+1))) {
+ world.setForeMap(x, y+1, 1);
+ } else if (Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) {
+ if (world.getForeMap(x+1, y)==0 ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x+1, y)).collision && !Items.isFluid(world.getForeMap(x+1, y))) ||
+ (Items.isLava(world.getForeMap(x+1, y)) && world.getForeMap(x+1, y)>64)){
+ world.setForeMap(x+1,y,64);
+ updateBlock(x+1, y+1);
+ } else if (Items.isWater(world.getForeMap(x+1, y))) {
+ world.setForeMap(x+1, y, 1);
+ }
+
+ if (world.getForeMap(x-1, y)==0 ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x-1, y)).collision && !Items.isFluid(world.getForeMap(x-1, y))) ||
+ (Items.isLava(world.getForeMap(x-1, y)) && world.getForeMap(x-1, y)>64)){
+ world.setForeMap(x-1,y,64);
+ updateBlock(x-1, y+1);
+ } else if (Items.isWater(world.getForeMap(x-1, y))) {
+ world.setForeMap(x-1, y, 1);
+ }
+ }
+ return;
+ }
+ if (world.getForeMap(x, y) == 64) {
+ if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=63 && world.getForeMap(x, y+1)<=65) ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) {
+ world.setForeMap(x,y+1,9);
+ updateBlock(x, y+2);
+ } else if (Items.isWater(world.getForeMap(x, y+1))) {
+ world.setForeMap(x, y+1, 1);
+ } else if (Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) {
+ if (world.getForeMap(x+1, y)==0 ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x+1, y)).collision && !Items.isFluid(world.getForeMap(x+1, y))) ){
+ world.setForeMap(x+1,y,65);
+ updateBlock(x+1, y+1);
+ } else if (Items.isWater(world.getForeMap(x+1, y))) {
+ world.setForeMap(x+1, y, 1);
+ }
+
+ if (world.getForeMap(x-1, y)==0 ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x-1, y)).collision && !Items.isFluid(world.getForeMap(x-1, y))) ){
+ world.setForeMap(x-1,y,65);
+ updateBlock(x-1, y+1);
+ } else if (Items.isWater(world.getForeMap(x-1, y))) {
+ world.setForeMap(x-1, y, 1);
+ }
+ }
+ return;
+ }
+ if (world.getForeMap(x, y) == 65) {
+ if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=63 && world.getForeMap(x, y+1)<=65) ||
+ (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) {
+ world.setForeMap(x,y+1,9);
+ updateBlock(x, y+2);
+ } else if (Items.isWater(world.getForeMap(x, y+1))) {
+ world.setForeMap(x, y+1, 1);
+ }
+ return;
+ }
+ }
+
+ private void updateBlock(int x, int y) {
+ if (world.getForeMap(x, y) == 10) {
+ if (world.getForeMap(x, y+1)==0 || !Items.BLOCKS.getValueAt(world.getForeMap(x,y+1)).collision) {
+ world.setForeMap(x, y, 0);
+ mobs.add(new FallingSand(x*16, y*16));
+ updateBlock(x, y-1);
+ }
+ }
+
+ if (world.getForeMap(x, y) == 11) {
+ if (world.getForeMap(x, y+1)==0 || !Items.BLOCKS.getValueAt(world.getForeMap(x,y+1)).collision) {
+ world.setForeMap(x, y, 0);
+ mobs.add(new FallingGravel(x*16, y*16));
+ updateBlock(x, y-1);
+ }
+ }
+
+ if (world.getForeMap(x, y) == 59) {
+ if (world.getForeMap(x, y+1)==0 || !Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) {
+ world.setForeMap(x,y,0);
+ updateBlock(x, y-1);
+ }
+ }
+
+ if (world.getForeMap(x, y) == 2) {
+ if (world.getForeMap(x, y-1)>0 && (Items.BLOCKS.getValueAt(world.getForeMap(x, y-1)).collision ||
+ Items.isFluid(world.getForeMap(x, y-1)))) {
+ world.setForeMap(x, y, 3);
+ }
+ }
+ }
+