Java 在minecraft bukkit插件中构建金字塔

Java 在minecraft bukkit插件中构建金字塔,java,geometry,minecraft,bukkit,Java,Geometry,Minecraft,Bukkit,我想在Minecraft中使用bukkit插件中的方法构建一个简单的金字塔。最终结果如下所示: 我写了这段代码: 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);

我想在Minecraft中使用bukkit插件中的方法构建一个简单的金字塔。最终结果如下所示:

我写了这段代码:

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;

            }
        }
    }
}
公共静态无效构建金字塔(位置l){
位置pos;
对于(inti=-2;i您的问题在这里:

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

它们将是i=-2和j=-2,但是diff=4,因为
Math.abs()
method convert两个变量的值都是-2到2,然后求和求差。因此,
switch case
station将无法正常工作。顺便说一句,我建议您从一开始就重新计算所有值。

对不起,解决方案很简单。我使用了错误的变量:

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;

            }
        }
    }
}
公共静态无效构建金字塔(位置l){
位置pos;
对于(int i=-2;i
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;

            }
        }
    }
}