コード例 #1
0
  @SubscribeEvent
  public void renderExtraBlockBreak(RenderWorldLastEvent event) {
    PlayerControllerMP controllerMP = Minecraft.getMinecraft().playerController;
    EntityPlayer player = Minecraft.getMinecraft().thePlayer;
    World world = player.worldObj;
    // AOE preview
    if (player.getCurrentEquippedItem() != null
        && player.getCurrentEquippedItem().getItem() instanceof IAoeTool) {
      MovingObjectPosition mop =
          player.rayTrace(controllerMP.getBlockReachDistance(), event.partialTicks);
      if (mop != null) {
        ItemStack stack = player.getCurrentEquippedItem();
        ImmutableList<BlockPos> extraBlocks =
            ((IAoeTool) stack.getItem()).getAOEBlocks(stack, world, player, mop.getBlockPos());
        for (BlockPos pos : extraBlocks) {
          event.context.drawSelectionBox(
              player,
              new MovingObjectPosition(new Vec3(0, 0, 0), null, pos),
              0,
              event.partialTicks);
        }
      }
    }

    // extra-blockbreak animation
    if (controllerMP.isHittingBlock) {
      if (controllerMP.currentItemHittingBlock != null
          && controllerMP.currentItemHittingBlock.getItem() instanceof IAoeTool
          && ((IAoeTool) controllerMP.currentItemHittingBlock.getItem()).isAoeHarvestTool()) {
        ItemStack stack = controllerMP.currentItemHittingBlock;
        BlockPos pos = controllerMP.currentBlock;
        drawBlockDamageTexture(
            Tessellator.getInstance(),
            Tessellator.getInstance().getWorldRenderer(),
            player,
            event.partialTicks,
            world,
            ((IAoeTool) stack.getItem()).getAOEBlocks(stack, world, player, pos));
      }
    }
  }