有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想用bukkit插件中的方法在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) 个答案

  1. # 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状态将无法正常工作。顺便说一句,我建议你从头再计算一遍

  2. # 2 楼答案

    抱歉,伙计们,解决办法就是这么简单。我使用了错误的变量:

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