版本信息
你使用的系统:win10 64位
你是用的JDK: 1.8 64位
你使用的IDE:IntelliJ IDEA
你使用的IDE版本:2020.1.4
Forge版本: 1.15.2-31.2.0
Minecraft版本: 1.15.2
错误情况简述
目标:右击后向准心方向冲刺,通过读取游戏时间来达到设置CD的效果。
问题1::使用时如果持续按住右键或快速连续右击会进入CD但未成功冲刺。
问题2:如何在触发冲刺后的0.5秒将速度归零。
相关代码
<HitShield>
package com.AnECanSaiTin.MyTest.Item;
import com.AnECanSaiTin.MyTest.Loder.ModGroup;
import com.AnECanSaiTin.MyTest.Tool.XYZFloat;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.world.World;
import java.util.concurrent.TimeUnit;
import static java.lang.Math.cos;
import static java.lang.Math.sin;
public class HitShield extends Item {
long CD = 1 * 20;
long endTime ;
float totalSpeed = 2.5f;
public HitShield(){
super(new Properties().group(ModGroup.itemGroup).maxStackSize(1));
}
@Override
public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
ItemStack itemstack = playerIn.getHeldItem(handIn);
playerIn.setActiveHand(handIn);
long gameTime = worldIn.getGameTime();
if (endTime < gameTime) {
playerIn.addVelocity(EntityAim(playerIn).x , 0 , EntityAim(playerIn).z);
endTime = gameTime + CD;
}
return ActionResult.resultPass(itemstack);
}
//由和速度(total)计算x,z方向分速度
private XYZFloat EntityAim(LivingEntity entity) {
XYZFloat xyzFloat = new XYZFloat();
float RotationX = entity.rotationYaw;
xyzFloat.x = 0 - totalSpeed * sin(Math.toRadians(RotationX));
xyzFloat.z = totalSpeed * cos(Math.toRadians(RotationX));
return xyzFloat;
}
}
<HitShield>
package com.AnECanSaiTin.MyTest.Tool;
public class XYZFloat {
public double x;
public double y;
public double z;
}