当前位置: 我的世界 > 游戏攻略 > 正文

1.8挖掘效率详解 解析挖掘机制

小编:天天时间:2015-06-20 14:11回到游戏园首页

  我的世界用不同的工具挖掘效率是不一样的,比如钻石工具挖的就快,而不是钻石的工具挖的就慢,今天游戏园小编就为大家详细的解析一下游戏中的挖掘机制,来看看吧!

  挖掘机制

  在net.minecraft.client.multiplayer.PlayerControllerMP中,挖掘进度存由float型变量curBlockDamageMP保存,初始为0,每1游戏刻根据挖掘工具、挖掘方块、玩家位置等因素增加一定值(后文称这个值为挖掘效率),增加至1时方块被破坏。每个游戏刻只能破坏一个方块。

  破坏两个方块之间有5游戏刻的冷却时间。但是,在非创造模式下,如果挖掘效率>=1,将不会有这个冷却,比如效率V的铲子可以一下子破坏很多土方块。在创造模式下,通过连点的方式(连续点鼠标)也可以无视这个冷却。

  挖掘效率计算

  挖掘效率由net.minecraft.block.Block的getPlayerRelativeBlockHadrdness函数给出,其定义如下

  public float getPlayerRelativeBlockHardness(EntityPlayer playerIn, World worldIn, BlockPos pos)

  {

  float blockHardness = this.getBlockHardness(worldIn, pos);

  return blockHardness < 0.0F ? 0.0F : (!playerIn.canHarvestBlock(this) ? playerIn.getEfficiency(this) / blockHardness / 100.0F : playerIn.getEfficiency(this) / blockHardness / 30.0F);

  }  其中getBlockHardness()函数所求的是方块的硬度,当硬度为负数则代表不能被破坏(挖掘效率为0),比如基岩,当硬度为0的时候,挖掘效率为无穷大。canHarvestBlock()函数的含义是所用工具是否能收割此方块(即破坏方块后得到物品),因为涉及很多关于工具、方块、材料的内容,不作进一步展开。getEfficiency()定义如下

  public float getEfficiency(Block block)

  {

  float efficiency = this.inventory.getStrVsBlock(block); // 工具原有效率

  if (efficiency > 1.0F) // 效率附魔

  {

  int enchantmentLevel = EnchantmentHelper.getEfficiencyModifier(this);

  ItemStack item = this.inventory.getCurrentItem();

  if (enchantmentLevel > 0 && item != null)

  {

  efficiency += (float)(enchantmentLevel * enchantmentLevel + 1);

  }

  }

  if (this.isPotionActive(Potion.digSpeed)) // 挖掘增益buff

  {

  efficiency *= 1.0F + (float)(this.getActivePotionEffect(Potion.digSpeed).getAmplifier() + 1) * 0.2F;

  }

  if (this.isPotionActive(Potion.digSlowdown)) // 挖掘减益debuff

  {

  float slowDownModifier = 1.0F;

  switch (this.getActivePotionEffect(Potion.digSlowdown).getAmplifier())

  {

  case 0:

  slowDownModifier = 0.3F;

  break;

  case 1:

  slowDownModifier = 0.09F;

  break;

  case 2:

  slowDownModifier = 0.0027F;

  break;

  case 3:

  default:

  slowDownModifier = 8.1E-4F;

  }

  efficiency *= slowDownModifier;

  }

  if (this.isInsideOfMaterial(Material.water) && !EnchantmentHelper.getAquaAffinityModifier(this)) // 玩家是否在水中

  {

  efficiency /= 5.0F;

  }

  if (!this.onGround) // 玩家是否着地

  {

  efficiency /= 5.0F;

  }

  return efficiency;

  }

  复制代码

  综合以上代码,可以得到挖掘效率的公式为

  挖掘效率 = (工具效率 + 附魔修正值 ) * 增益修正值 * 减益修正值 / 水中修正值 / 悬空修正值 / 硬度 / 收割修正值

  复制代码

  式中几个值的计算方式如下:

  工具效率:如果没有用工具或者所用工具不适用于挖所挖方块(比如用铲子砍树),工具效率为1;铲子、稿子、斧头对适用方块的效率与工具的材料有关(木2,石4,铁6,钻8,金12);剑对网的效率为15,对草、花、瓜、树叶等效率为1.5;剪刀对树叶和网的效率为15,对羊毛的效率为5。

  附魔修正值:如果工具效率为1,附魔修正值为0;否则为“效率附魔等级的平方 + 1”。

  增益修正值:即“急迫”buff。值为“1 + 增益等级 * 0.2 ”。

  减益修正值:即“挖掘疲劳”debuff。值为0.3^(减益等级),最大为0.3^4=8.1e-3。不过原版游戏中貌似只出现了挖掘疲劳III,修正值为2.7e-2。

  水中修正值:如果玩家在水中为5,否则为1。水下速掘附魔会移除此修正值。

  悬空修正值:如果玩家脚离地为5,否则为1。

  收割修正值:如果此工具(或空手)可以在破坏此方块后得到物品,为30,否则为100。

分享到:更多

游戏信息

我的世界
我的世界类型:休闲娱乐平台:PC,iOS,安卓电脑版下载
  • 游戏大礼包
  • 手游开测表