2016-12-23 7 views
1

Я хочу построить простую пирамиду в Minecraft, используя метод в bukkit-plugin. Окончательный результат должен выглядеть следующим образом: enter image description hereСоздайте пирамиду в плагине bukkit minecraft

Я написал этот код:

public static void buildPyramid(Location l) { 
    Location pos; 
    for(int i = -2; i <= 2; i++) { 
     for(int j = -2; j <= 2; j++) { 
      pos = l.clone().add(i, 0, j); 
      Bukkit.broadcastMessage(Math.abs(i) + Math.abs(j) + ""); // for test 
      int diff = Math.abs(i) + Math.abs(j); 
      switch(diff) { 
       case 2: 
        l.getBlock().setType(Material.BEDROCK); 
        break; 
       case 1: 
        l.getBlock().setType(Material.BEDROCK); 
        pos.add(0, 1, 0); 
        l.getBlock().setType(Material.BEDROCK); 
        pos.add(0, -1, 0); 
        break; 
       case 0: 
        l.getBlock().setType(Material.BEDROCK); 
        pos.add(0, 1, 0); 
        l.getBlock().setType(Material.BEDROCK); 
        pos.add(0, 1, 0); 
        l.getBlock().setType(Material.BEDROCK); 
        pos.add(0, -2, 0); 
        break; 
       default: 
        break; 

      } 
     } 
    } 
} 

несчастлива, что происходит, что одна коренная порода находится на Местоположение л и больше ничего не происходит. Это довольно неприятно ... любая помощь?

ответ

1

Ваша проблема здесь:

for(int i = -2; i <= 2; i++) { 
     for(int j = -2; j <= 2; j++) { 
      pos = l.clone().add(i, 0, j); 
      Bukkit.broadcastMessage(Math.abs(i) + Math.abs(j) + ""); // for test 
      int diff = Math.abs(i) + Math.abs(j); 

первый подход к ситуациям varibles кузовных являются: я = -2 и у = -2. После этой строки»исполнения:

int diff = Math.abs(i) + Math.abs(j); 

они будут я = -2 и J = -2, но дифференциал = 4, так как Math.abs() метод преобразования -2 до 2 для обоих переменных затем суммирует их для дифференциала. В результате этого ваш статус switch-case не будет работать должным образом. Кстати, я рекомендую вам все рассчитать с самого начала.

0

Извините, ребята, решение так просто. Я использовал неправильную переменную:

public static void buildPyramid(Location l) { 
    Location pos; 
    for(int i = -2; i <= 2; i++) { 
     for(int j = -2; j <= 2; j++) { 
      pos = l.clone().add(i, 0, j); 
      Bukkit.broadcastMessage(Math.abs(i) + Math.abs(j) + ""); // for test 
      int diff = Math.abs(i) + Math.abs(j); 
      switch(diff) { 
       case 2: 
        pos.getBlock().setType(Material.BEDROCK); 
        break; 
       case 1: 
        pos.getBlock().setType(Material.BEDROCK); 
        pos.add(0, 1, 0); 
        pos.getBlock().setType(Material.BEDROCK); 
        pos.add(0, -1, 0); 
        break; 
       case 0: 
        pos.getBlock().setType(Material.BEDROCK); 
        pos.add(0, 1, 0); 
        pos.getBlock().setType(Material.BEDROCK); 
        pos.add(0, 1, 0); 
        pos.getBlock().setType(Material.BEDROCK); 
        pos.add(0, -2, 0); 
        break; 
       default: 
        break; 

      } 
     } 
    } 
}