java—右键单击自定义块将替换块,而不是在其旁边放置块

w7t8yxp5  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(229)

我正在使用minecraft forge 1.12.2创建一个名为ivy块的自定义块。当我通过eclipse运行mod-in-game时,我不能右键单击该块来放置另一个与之相邻的块,而是将其替换为hold块。例如,如果我右键单击一个常春藤块,同时持有一个工艺表,常春藤块被替换为一个工艺表。如果我在按住另一个常春藤块的同时右键单击一个常春藤块,什么也不会发生(可能是因为它正在用另一个常春藤块替换常春藤块)。
唯一的习惯行为,这一块是蔓延到任何相邻的菌丝块;然而,我用注解掉的所有相关代码测试了mod,结果没有改变。它没有自定义块模型。
我已经在这个模块中添加了其他自定义块,它们都正常工作。他们都是我的朋友 BlockBase 所以我不认为这是一个问题。
我还查看了forge文档中的块交互,但它似乎没有任何与此问题相关的内容。
这里是 IvyBlock.java :

public class IvyBlock extends BlockBase {
    public IvyBlock() {
        super("ivy_block", Material.SNOW);

        this.setSoundType(SoundType.SLIME);
        this.setHardness(0.75F);
        this.setResistance(18_000_000);
        this.setHarvestLevel("pickaxe", 0);
        this.setLightLevel(3.5F);
        this.setLightOpacity(1);
        this.setTickRandomly(true);
    }

    @Override
    public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) {
        float x = pos.getX();
        float y = pos.getY();
        float z = pos.getZ();

        checkForMycelium(worldIn, x, y - 1, z);
        checkForMycelium(worldIn, x - 1, y - 1, z);
        checkForMycelium(worldIn, x + 1, y - 1, z);
        checkForMycelium(worldIn, x, y - 1, z - 1);
        checkForMycelium(worldIn, x, y - 1, z + 1);
        checkForMycelium(worldIn, x - 1, y - 1, z - 1);
        checkForMycelium(worldIn, x + 1, y - 1, z - 1);
        checkForMycelium(worldIn, x - 1, y - 1, z + 1);
        checkForMycelium(worldIn, x + 1, y - 1, z + 1);

        checkForMycelium(worldIn, x - 1, y, z);
        checkForMycelium(worldIn, x + 1, y, z);
        checkForMycelium(worldIn, x, y, z - 1);
        checkForMycelium(worldIn, x, y, z + 1);
        checkForMycelium(worldIn, x - 1, y, z - 1);
        checkForMycelium(worldIn, x + 1, y, z - 1);
        checkForMycelium(worldIn, x - 1, y, z + 1);
        checkForMycelium(worldIn, x + 1, y, z + 1);

        checkForMycelium(worldIn, x, y + 1, z);
        checkForMycelium(worldIn, x - 1, y + 1, z);
        checkForMycelium(worldIn, x + 1, y + 1, z);
        checkForMycelium(worldIn, x, y + 1, z - 1);
        checkForMycelium(worldIn, x, y + 1, z + 1);
        checkForMycelium(worldIn, x - 1, y + 1, z - 1);
        checkForMycelium(worldIn, x + 1, y + 1, z - 1);
        checkForMycelium(worldIn, x - 1, y + 1, z + 1);
        checkForMycelium(worldIn, x + 1, y + 1, z + 1);
    }

    private void checkForMycelium(World worldIn, float x, float y, float z) {
        if (worldIn.getBlockState(new BlockPos(x, y, z)) == Blocks.MYCELIUM.getDefaultState()) {
            worldIn.setBlockState(new BlockPos(x, y, z), ModBlocks.IVY_BLOCK.getDefaultState());
        }
    }
}

这里是 blockstates/ivy_block.json :

{
    "variants": {
        "normal": {
            "model": "modid:ivy_block"
        }
    }
}

这里是 models/block/ivy_block.json :

{
    "parent": "block/cube_all",
    "textures": {
        "all": "modid:blocks/ivy_block"
    }
}

以及 models/item/ivy_block.json :

{
    "parent": "modid:block/ivy_block"
}

是什么导致了这个问题?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题