当前位置: 首页 > 知识库问答 >
问题:

渲染故障与自定义块边界minecraft

栾弘新
2023-03-14

我正在为《我的世界》创建一个mod。最近,我试图制作一个自定义块,我有两个问题。

我的主要问题是块渲染不正确。我希望块的大小比完整的块小。我成功地用setBlockBound()改变了块的边界,虽然这确实使块渲染得更小,并使用了更小的边界,但它导致了其他渲染问题。当我放置块时,下面的地板变得不可见,我可以透过它看到下面的洞穴,后面的块,或者如果那里什么都没有,就可以看到虚空。我如何修复不渲染的块?这里有一个截图:

此外,我的目标是释放一种“光环”,让周围的玩家获得速度或其他药剂效果。我有基本的代码,可以在区块周围找到玩家,并给他们速度,但我找不到一种方法来激活这个方法,每滴答或每X滴答,以确保它以可靠的方式给玩家在禁区内的速度。在正常的游戏中已经有一些方块可以做到这一点,所以这一定是可能的。我该怎么做?

共有1个答案

拓拔松
2023-03-14

对于第一个问题,需要覆盖isOpaqueCube以返回false。您还需要为代码的其他部分覆盖isFullCube,但这对于渲染来说并不重要。例子:

public class YourBlock {
    // ... existing code ...

    /**
     * Used to determine ambient occlusion and culling when rebuilding chunks for render
     */
    @Override
    public boolean isOpaqueCube(IBlockState state) {
        return false;
    }

    @Override
    public boolean isFullCube(IBlockState state) {
        return false;
    }
}

这里有一些关于渲染的信息提到了这一点。

关于你的第二个问题,这更复杂。它通常通过一个平铺实体来实现,不过也可以使用块更新(这要慢得多)。这方面的好例子有BlockBeaconTileEntityBeacon(用于使用磁贴实体)和blockFrostedic(用于块更新)。这里有一些关于瓷砖实体的信息(可能已经过时了)。

下面是一个(未经测试的)更新示例,每次使用tile实体勾选此选项:

public class YourBlock {
    // ... existing code ...

    /**
     * Returns a new instance of a block's tile entity class. Called on placing the block.
     */
    @Override
    public TileEntity createNewTileEntity(World worldIn, int meta) {
        return new TileEntityYourBlock();
    }
}
/**
 * Tile entity for your block.
 * 
 * Tile entities normally store data, but they can also receive an update each
 * tick, but to do so they must implement ITickable.  So, don't forget the
 * "implements ITickable".
 */
public class TileEntityYourBlock extends TileEntity implements ITickable {
    @Override
    public void update() {
        // Your code to give potion effects to nearby players would go here

        // If you only want to do it every so often, you can check like this:
        if (this.worldObj.getTotalWorldTime() % 80 == 0) {
            // Only runs every 80 ticks (4 seconds)
        }
    }

    // The following code isn't required to make a tile entity that gets ticked,
    // but you'll want it if you want (EG) to be able to set the effect.

    /**
     * Example potion effect.
     * May be null.
     */
    private Potion effect;

    public void setEffect(Potion potionEffect) {
        this.effect = potionEffect;
    }

    public Potion getEffect() {
        return this.effect;
    }

    @Override
    public void readFromNBT(NBTTagCompound compound) {
        super.readFromNBT(compound);
        int effectID = compound.getInteger("Effect")
        this.effect = Potion.getPotionById(effectID);
    }

    public void writeToNBT(NBTTagCompound compound) {
        super.writeToNBT(compound);
        int effectID = Potion.getIdFromPotion(this.effect);
        compound.setInteger("Effect", effectID);
    }
}
// This line needs to go in the main registration.
// The ID can be anything so long as it isn't used by another mod.
GameRegistry.registerTileEntity(TileEntityYourBlock.class, "YourBlock");
 类似资料:
  • 我对React Router中路由的渲染顺序有问题。据我所知,任何子路由都将在其父路由之后进行渲染,因此将在DOM中的父路由之上进行渲染。 <代码> 我有这个路由器设置,但是在我从IndexRoute导航到/browse路由之后,浏览路由呈现在我的导航组件的顶部,我不能单击导航组件上的任何内容。 我的问题是如何强制Nav组件始终最后渲染,或者是否有更好的方法来构建我的应用程序以避免这种情况。 谢谢

  • 背景: null > @test(groups={“init”})public void openURL() 包含用于启动webdriver并使用给定URL打开chrome>实例的webdriver代码。 @test(dependsonGroups={“init”})public void testLogin() 包含的webdriver代码指向: 1。找到用户名密码文本输入元素,从属性文件中输入

  • 蓝鲸故障自愈,是腾讯蓝鲸推出的一款SaaS服务,目前可以支持和open-falcon无缝对接了,通过接入蓝鲸故障自愈系统,可以帮助使用open-falcon的用户,做到告警无人值守。 具体的配置非常简单: open-falcon接入蓝鲸 腾讯蓝鲸故障自愈的使用案例参考:蓝鲸故障自愈案例 那些年我们想做的无人值守

  • 我想知道是否可以在Kafka制作程序中配置2个不同的Kafka集群。 目前我正试图让我的制片人 我正在使用Apache Kafka 2.8和Python 3.7的confluent_kafka==1.8.2包。 生产商代码下方: 当我杀死clusterB时,我得到了以下错误消息。

  • nginx-在具有自定义边界(CRLF)的多部分请求中失败,而在RFC中,它是一个完全有效的有效负载。 示例有效负载。MIME-Version: 1.0 Content-Type: Multipart/form-data;边界=------%^TestBoundary^%------ 多个文件。 起初,标题上的特殊字符导致边界从传递到后端被跳过,添加ignore_invalid_headers关闭

  • 我试图让条目在聚焦时选择所有文本。我有一个自定义的渲染器,可以在Android上执行此操作,但我希望它也能在Windows 8上运行。如何在Xamarin窗体中为Windows创建自定义渲染?以下是我所拥有的: