在minecraft bukkit插件中构建金字塔

时间:2016-12-23 13:04:32

标签: java geometry minecraft bukkit

我想使用bukkit-plugin中的方法在Minecraft中构建一个简单的金字塔。最终结果应如下所示:enter image description here

我写了这段代码:

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而没有其他任何事情发生。 这是非常失望......任何帮助?

2 个答案:

答案 0 :(得分: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);

身体变量的第一种方法是:i = -2且j = -2。执行此行之后:

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

它们将是i = -2且j = -2但是diff = 4,因为Math.abs()方法将两个变量的-2转换为2,然后将它们相加为diff。因此,您的switch-case声明将无法正常运行。顺便说一句,我建议你从一开始就重新计算所有的东西。

答案 1 :(得分: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;

            }
        }
    }
}