gpt4 book ai didi

java - 如何在 Minecraft 1.12.2 模组中制作方向 block ?

转载 作者:行者123 更新时间:2023-12-02 06:13:52 28 4
gpt4 key购买 nike

我已经开发 Minecraft 1.12.2 mod 几个月了。我想做定向 block 。该 block 是黑色和紫色的立方体(放置时,手中有纹理)。我已经检查过多次的 JSON 文件。每次我开始游戏时,所有方向都设置为默认。感谢您的帮助!

附注我检查了《我的世界》原版 BlockFurnace,但它让我感到困惑而不是提供帮助。

这是我已有的代码:

public class DirBlock extends BlockHorizontal implements IHasModel {

public DirBlock(String name) {
super(Material.CLOTH);
setSoundType(SoundType.CLOTH);
setCreativeTab(Main.RM_TAB1);
setUnlocalizedName(name);
setRegistryName(name);
setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH));

ModBlocks.BLOCKS.add(this);
ModItems.ITEMS.add(new ItemBlock(this).setRegistryName(this.getRegistryName()));
}

public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL);

@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, new IProperty[] { FACING });
}

@Override
public IBlockState getStateFromMeta(int meta) {
return getDefaultState().withProperty(FACING, meta == 0 ? EnumFacing.WEST : EnumFacing.EAST);
}

@Override
public int getMetaFromState(IBlockState state) {
EnumFacing facing = (EnumFacing) state.getValue(FACING);
return facing.getHorizontalIndex();
}

@Override
public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY,
float hitZ, int meta, EntityLivingBase placer, EnumHand hand) {
return super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand).withProperty(FACING, placer.getHorizontalFacing());
}

@Override
public void registerModels() {
Main.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");
}
}

最佳答案

您的 metaFromStatestateFromMeta 函数不是镜像(它们应该是)

@Override
public IBlockState getStateFromMeta(int meta) {
return getDefaultState().withProperty(FACING, meta == 0 ? EnumFacing.WEST : EnumFacing.EAST);
}

@Override
public int getMetaFromState(IBlockState state) {
EnumFacing facing = (EnumFacing) state.getValue(FACING);
return facing.getHorizontalIndex();
}

您正在使用面向索引来编码元数据,但是当您返回时,您将确定元数据是否恰好为 0,如果是,则面向是西(所有其他值均表示东)。

不幸的是,WEST 不为 0。这来自 getHorizo​​ntalIndex() 的代码内 Javadoc:

/**
* Get the index of this horizontal facing (0-3). The order is S-W-N-E
*/

你应该使用这个:

//use existing getMetaFromState
@Override
public IBlockState getStateFromMeta(int meta)
{
return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta));
}

如果您希望您的 block 仅面向东和西(而不是北/南),那么您应该在放置的 block 上强制执行此操作,然后使用单个元数据进行编码:

//use existing getStateFromMeta
@Override
public int getMetaFromState(IBlockState state) {
EnumFacing facing = (EnumFacing) state.getValue(FACING);
return facing == EnumFacing.WEST?0:1;
}

关于java - 如何在 Minecraft 1.12.2 模组中制作方向 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55884155/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com