1.12.2 设置漂浮物品实体时遇到问题

Billy_tang


Forge版本: 14.23.5.2768
Minecraft版本: 1.12.2

我打算写一个反重力不断向上飘的物品实体。就是简单地更改了onUpdate方法。该实体的运动方式没有问题,但当其上方被方块挡住时在某些情况下会卡进方块内半截。我通过测试认为实体在服务端的位置没有错误,但在客户端的显示有问题。

问题相关代码如下:

public class EntityItemAerogel extends EntityItem {
		
    public EntityItemAerogel(World worldIn, double x, double y, double z, ItemStack stack) {
    	
        super(worldIn, x, y, z, stack);
        this.setNoGravity(true);        
    }
	
	@Override
    public void onUpdate() {
        super.onUpdate();

        this.motionY += 0.002D;
        
        if (this.motionY > 0.1D) {
        	this.motionY = 0.1D;
        }
        
        markVelocityChanged();
    }

我曾尝试但失败的方法:

	@Override
    public void onUpdate() {
	double y = this.motionY;
		
        super.onUpdate();
        
        if (this.collidedVertically && y > 0) {
            this.motionY = 0;
        }
        
        this.motionY += 0.002D;
        
        if (this.motionY > 0.1D) {
        	this.motionY = 0.1D;
        }
        
        markVelocityChanged();
    }

问题图片:

正常图片:


FledgeXu


我觉得这是因为你的边界判断写的有问题。
在你加0.002D的过程中,有可能就直接越界了。


FledgeXu


向上飘但是直接卡墙缝。可以向下偏它0.5格

不愿加入论坛的3T如此说到。


Billy_tang


我试过把+0.002D放到不同位置,但都失败了。所以我应该怎么改呢?是重新自己写一个collidedVertically吗?我看这个值是在Entity的move里面更改的,很有可能是因为在执行它后才更改的motion,所以才失败。


Billy_tang


他是什么意思?


FledgeXu


不是放到不同的位置,你有没有发现你这个发生卡住的地方都是方块的边缘。
在写碰撞检测的时候六个面的方块你都得考虑。
不过我也没具体写过,你得自己尝试了。


system


该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。