2016-12-23 3 views
1

Ich möchte eine einfache Pyramide in Minecraft mit einer Methode in einem Bukkit-Plugin erstellen. Das Endergebnis wird wie folgt aussehen: enter image description hereBaue eine Pyramide in einem Minecraft Bukkit Plugin

Ich schrieb diesen Code:

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; 

      } 
     } 
    } 
} 

Unfortunatly, was passiert ist, dass ein Fundament, auf Location l und nichts platziert anderes passiert. Es ist ziemlich enttäuschend ... irgendeine Hilfe?

Antwort

1

Ihr Problem ist hier:

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); 

die erste Annäherung an Körper Zugriffe auf Variablen Situationen sind: i = -2 und j = -2. Nach dieser Zeile‘Ausführung:

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

werden sie i = -2 und j = -2 aber diff = 4, da Math.abs() Methode convert -2 bis 2 für beide Variablen dann summiert sie für diff. Aus diesem Grund funktioniert Ihr switch-case Statment nicht ordnungsgemäß. Übrigens empfehle ich Ihnen, alle Dinge von Anfang an neu zu berechnen.

0

Sorry Leute, die Lösung ist so einfach. Ich habe die falsche Variable verwendet:

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; 

      } 
     } 
    } 
} 
Verwandte Themen