实体删除器™2000 (Entity Remover™ 2000)
物品命令:/give @p mi:entity_remover 1

前言

请勿进行任何战力比较!此条目不写入任何有关测试击杀结果的内容,只写入理论内容。欲知实际效果请自行测。



简介

专门为管理员所设的实体清除工具,能够清除绝大部分实体。仅创造模式可得。

详情

外观及信息

实体删除器有两种模式,持有时按下鼠标右键进行切换。为方便,分别称“模式一”和“模式二”,下同。

材质
实体删除器™2000-第1张图片模式一实体删除器™2000-第2张图片模式二实体删除器™2000-第3张图片旧材质(已弃用)

物品外表带有附魔闪光。在物品显示信息中,名称、伤害信息皆为彩虹色,且包括 Tooltip 在内都是不断变换着颜色的。

实体删除器™2000-第4张图片

实际上,实体删除器并不提供伤害加成及攻击速度加成;本身不属于任何类型的工具,不设耐久;造成的伤害类型不属于原版中任何一种,而是本 Mod 自设的“I_N_F_I_N_I_T_Y”类。

使用方法

  • 鼠标左键:进行原版的攻击方式,成功击中实体后执行流程(详情在条目下方,下同)。

  • 鼠标右键:切换模式。在模式一下,清除实体时会有落雷效果;而在模式二下则没有,且执行的代码与模式一略有不同。

  • Shift + 鼠标右键:直接选取以使用者为中心,边长为 16 格的正方体范围内所有实体,并执行流程。

大致原理及代码

当实体删除器成功击中或选中实体时,将按顺序执行以下流程。

  1. 判断删除器是否为模式一,以及目标实体是否为乘骑状态,是则取消乘骑状态、卸下目标。entity.dismountRidingEntity();entity.removePassengers();

  2. 设置目标实体的 Invulnerable 为 false。entity.setEntityInvulnerable(false);

  3. 获取目标实体掉落物列表;entity.setDropItemsWhenDead(lightning);

  4. 判断删除器是否为模式二,是则设置目标实体在世界边界之外。entity.setOutsideBorder(true);

  5. 判定删除器是否为模式一,是则设置目标实体死亡。 entity.setDead();

  6. 设置目标实体状态为死亡。entity.isDead = true;

  7. 判定目标实体是否为生物实体,删除器是否为模式一,是则给予目标 3.4028235×1038 点“I_N_F_I_N_I_T_Y”伤害,设置死亡信息,在目标处生成落雷,若为模式二,则清除目标动量,设置目标生命值为 0。EntityLivingBase.clearActivePotions();EntityLivingBase.setHealth(0.0f);e.attackEntityFrom(I_N_F_I_N_I_T_Y, Float.MAX_VALUE);e.onDeath(I_N_F_I_N_I_T_Y);EntityLightningBoltMI TJZY = new EntityLightningBoltMI(world, entity.posX, entity.posY, entity.posZ);world.addWeatherEffect(TJZY);

  8. 判断目标生物实体是否为玩家,是则将目标从玩家列表中移除,若目标死亡,则卸载其背包内物品,清除经验。然后更新全局玩家睡眠状态。EntityPlayer player = (EntityPlayer) entity;world.playerEntities.remove(player);player.inventory.dropAllItems();player.experienceLevel = 0;player.experience = 0.0F;player.experienceTotal = 0;world.updateAllPlayersSleepingFlag();

  9. 获取目标实体所在区块,如果区块有实体加入,则将其移除。world.getChunk(entity.chunkCoordX, entity.chunkCoordZ).removeEntity(entity);

  10. 将目标实体从实体列表中移除,并阻止自动更新实体。world.loadedEntityList.remove(entity);entity.updateBlocked = true;

  11. 设置目标实体动量为 0,三维坐标为 NaN。entity.motionX = entity.motionY = entity.motionZ = 0;entity.lastTickPosX = entity.posX = entity.prevPosX = Double.NaN;entity.lastTickPosY = entity.posY = entity.prevPosY = Double.NaN;entity.lastTickPosZ = entity.posZ = entity.prevPosZ = Double.NaN;

  12. 设置目标实体可以穿墙,不会碰撞到物体,不会强制重生,并确认修改动量。entity.noClip = true;entity.collided = entity.collidedVertically = entity.collidedHorizontally = false;entity.forceSpawn = false;entity.velocityChanged = true;

  13. 判断删除器是否为模式一,是则尝试手动更新一次目标实体。entity.onUpdate();

实体删除器™2000 (Entity Remover™ 2000)
实体删除器™2000 (Entity Remover™ 2000)
资料分类:工具
最大叠加:1个 / 组

短评加载中..