【问题标题】:Looking for help Setting up Particles in 1.14 Minecraft寻求帮助 在 1.14 Minecraft 中设置粒子
【发布时间】:2019-08-01 22:23:09
【问题描述】:

我已经研究了一段时间了,

我正在尝试制作我自己的粒子,但我在弄清楚一切如何注册以及如何让我的粒子被称为 modid:particle 时遇到问题,因此基本上将其注册到我的 mod。

另外,如果有人可以帮助我计算数学,我希望我的粒子从块内缓慢移动到原始块上方约 0.5 块。

我已经尝试了很多,要列出所有内容将是疯狂的。然而,我确实设法让熔岩粒子出现,我尝试了不同的数学,产生粒子的不同选项,我修改为在 1.14 中工作的旧方法,但不管它说什么“命名 minecraft:enchantblack 进入太晚了”

https://github.com/drizzs/GrassWorld-1.14/tree/master/src/main/java/com/drizzs/grassworld/api/particle

https://github.com/minecraftabnormals/Upgrade-Aquatic/tree/master/src/main/java/com/teamabnormals/upgrade_aquatic/client/particle

做他所做的不是一个选择!我必须找到自己的方法来做同样的事情。因为我的粒子不一样。

我希望粒子以不同的大小出现,从而使块看起来像是神奇的。

当我尝试我的方块时,游戏立即崩溃

https://pastebin.com/TTA7p9iu

如果您要求,我会添加任何信息!如果您更愿意解释我如何进行数学运算或向我推荐数学资源,我会很乐意接受这些!我能做的任何事情都可以让我进步,我并不特别需要你为我做。我只是需要一些帮助来指导自己!

protected EnchantedBlack(World world, double x, double y, double z) {
    super(world, x, y, z, 0.0D, 0.0D, 0.0D);
    this.motionX *= 0;
    this.motionY *= 0.800000011920929D;
    this.motionZ *= 0;
    this.motionY = (double) (this.rand.nextFloat() * 0.4F + 0.05F);
    this.particleScale *= this.rand.nextFloat() * 2.0F + 0.2F;
    this.maxAge = (int) (16.0D / (Math.random() * 0.8D + 0.2D));
}

    public void tick() {
    this.prevPosX = this.posX;
    this.prevPosY = this.posY;
    this.prevPosZ = this.posZ;
    float f = (float)this.age / (float)this.maxAge;

    if (this.age++ >= this.maxAge) {
        this.setExpired();
    } else {
        this.motionY -= 0.03D;
        this.move(this.motionX, this.motionY, this.motionZ);
        this.motionX *= 0.1D;
        this.motionY *= 0.9990000128746033D;
        this.motionZ *= 0.1D;
        if (this.onGround) {
            this.motionX *= 0.699999988079071D;
            this.motionZ *= 0.699999988079071D;
        }
    }

}
public IParticleRenderType getRenderType() {
    return IParticleRenderType.PARTICLE_SHEET_OPAQUE;
}

public float getScale(float float1) {
    float f = ((float)this.age + float1) / (float)this.maxAge;
    return this.particleScale * (1.0F - f * f);
}

@OnlyIn(Dist.CLIENT)
public static class Factory implements IParticleFactory<BasicParticleType> {
    private final IAnimatedSprite spriteSet;

    public Factory(IAnimatedSprite p_i50495_1_) {
        this.spriteSet = p_i50495_1_;
    }

    public Particle makeParticle(BasicParticleType typeIn, World worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) {
        EnchantedBlack enchantedblack = new EnchantedBlack(worldIn, x, y, z);
        enchantedblack.selectSpriteRandomly(this.spriteSet);
        return enchantedblack;
    }
}

}

【问题讨论】:

    标签: java math minecraft particles minecraft-forge


    【解决方案1】:

    首先,如果您还没有,此时您应该更新到 1.14.4。

    无论如何。我无法确切地说出你所拥有的东西出了什么问题,但希望我前几天这样做的经验会有所帮助。

    您遇到的崩溃是在line 84 并且是ExceptionInInitializerError: null,这意味着在将类加载到 JVM 的阶段但在它创建任何实例之前遇到了问题。这一行唯一能做到这一点的就是对GWParticleTypes.ENCHANTEDBLACK的引用。

    我的猜测是this line 正在抛出一个空值。我没有这样的东西,我也没有使用自己添加粒子的方法。注册表要么返回为空,要么正在进一步发生我们没有注意到的事情。由于 ParticleTypes 不是 IForgeRegistryEntry 类型,并且注册表完全由 Vanilla 控制,我怀疑使用这种方法将行不通。

    由于您使用的是仅客户端粒子(animateTick 方法被标记为@OnlyIn(Dist.CLIENT)),您应该能够使用Minecraft.getInstance().particles.addEffect(particle); 代替,就像我使用here 一样。

    我的粒子是在服务器端生成的,向正确的播放器客户端发送数据包,并在客户端构建实际的粒子实例,因此涉及到一些重定向。您仍然需要通过您的代理进行路由,因为您不能在公共代码中引用仅客户端类(@OnlyIn(Dist.CLIENT) 不会阻止您编写服务器可以验证的代码!),但addEffect 应该大大简化事情。

    至于获得正确的视觉效果(粒子从块中升起),您的主要问题可能在这一行:

    this.motionY -= 0.03D;
    

    你让它们向下移动,而不是向上移动。同样的这一行:

    this.motionY *= 0.9990000128746033D;
    

    由于“空气阻力”,会使它们每帧移动得更慢(在没有其他因素的情况下),因为您复制的粒子代码(块破坏或浮沙粒子)代表罚款从上面落下并落在地面上的尘埃状物体。你也不需要this.onGround 或任何依赖它的东西。

    【讨论】:

    • 这很有帮助,所以我实际上开始了一种新的方法,以前已经做过的人,我现在遇到了一组全新的错误。但我不再收到注册表问题的错误。这实际上非常有帮助。如果您使用不和谐,如果您可以给我发消息,那么我可以更快地问您几个问题,我将不胜感激。否则我相信我在渲染时遇到问题,pastebin.com/3GZbrXMK 这是我将更新 Github 的错误。数学会改变!我更专注于让它在我不再首先崩溃的地方工作。
    • drizzs#9185 如果你有兴趣帮助我更多!这也是 1.14.4 我的错!
    • 您的 build.gradle 文件说 1.14.3 ;) 您当前的问题是您的粒子 passes its frame counter to an array of size 1。如需更多帮助,请转到the Forge forums,这里更适合来回回复。
    • 那是因为没有 1.14.4 的映射,但它都说 1.14.3。
    • 啊!是的,你是对的。我只是浏览了文件以找出您使用的版本,但没有意识到这一点。 :)
    猜你喜欢
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2021-03-03
    • 1970-01-01
    相关资源
    最近更新 更多